From 58b02839f2c406953bb3459e3f4d8589020ef4fb Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Fri, 1 Nov 2024 18:25:00 +0100 Subject: [PATCH 001/216] Basic definition of a table component --- app/dashboard/tables/page.tsx | 53 +++++++++++++++++++++++++++++++++-- app/lib/definitions.ts | 6 ++-- app/ui/components/table.tsx | 31 ++++++++++++++++++++ 3 files changed, 84 insertions(+), 6 deletions(-) create mode 100644 app/ui/components/table.tsx diff --git a/app/dashboard/tables/page.tsx b/app/dashboard/tables/page.tsx index 2aec187..29a1d76 100644 --- a/app/dashboard/tables/page.tsx +++ b/app/dashboard/tables/page.tsx @@ -1,12 +1,59 @@ /* Copyright (C) 2024 Manuel Bustillo*/ +import { Table } from '@/app/ui/components/table'; +import Summary from '@/app/ui/expenses/summary'; import { lusitana } from '@/app/ui/fonts'; - -export default function Page () { + +export default function Page() { return (
-
+

Table distributions

+
+ +
+
+ + ); diff --git a/app/lib/definitions.ts b/app/lib/definitions.ts index 70eacd2..4a9f09e 100644 --- a/app/lib/definitions.ts +++ b/app/lib/definitions.ts @@ -21,9 +21,9 @@ export type Customer = { export type Guest = { id: string; name: string; - email: string; - group_name: string; - status: 'Considered' | 'Invited' | 'Confirmed' | 'Declined' | 'Tentative'; + email?: string; + group_name?: string; + status?: 'Considered' | 'Invited' | 'Confirmed' | 'Declined' | 'Tentative'; } export type Group = { diff --git a/app/ui/components/table.tsx b/app/ui/components/table.tsx new file mode 100644 index 0000000..841f6c8 --- /dev/null +++ b/app/ui/components/table.tsx @@ -0,0 +1,31 @@ +import { Guest } from "@/app/lib/definitions"; + + +function GuestRow({ guests }: { guests: Guest[] }) { + return (
+ { + guests.map((guest) => { + + return ( +
+ {guest.name} +
+ ) + }) + } + +
) +} + +export function Table({ guests }: { guests: Guest[] }) { + const halfwayThrough = Math.floor(guests.length / 2) + const arrayFirstHalf = guests.slice(0, halfwayThrough); + const arraySecondHalf = guests.slice(halfwayThrough, guests.length); + + return ( +
+ + +
+ ) +} \ No newline at end of file From 357fb617ce782fde3a38b2334ff447e809074dbc Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Fri, 1 Nov 2024 17:27:41 +0000 Subject: [PATCH 002/216] Add copyright notice --- app/ui/components/table.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/ui/components/table.tsx b/app/ui/components/table.tsx index 841f6c8..82d77a8 100644 --- a/app/ui/components/table.tsx +++ b/app/ui/components/table.tsx @@ -1,3 +1,5 @@ +/* Copyright (C) 2024 Manuel Bustillo*/ + import { Guest } from "@/app/lib/definitions"; From aee7df4cf0b118f64f258f415a2cf493070ea613 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 2 Nov 2024 01:08:05 +0000 Subject: [PATCH 003/216] Update dependency node to v23.1.0 --- .nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nvmrc b/.nvmrc index f842f93..ed1add2 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -23.0.0 \ No newline at end of file +23.1.0 \ No newline at end of file From de96b9d4aebc5651d83e93eccdb3fd4f17d6a7bb Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sat, 2 Nov 2024 10:11:03 +0100 Subject: [PATCH 004/216] Use a different color schema --- app/ui/components/table.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/ui/components/table.tsx b/app/ui/components/table.tsx index 82d77a8..a042f4b 100644 --- a/app/ui/components/table.tsx +++ b/app/ui/components/table.tsx @@ -9,7 +9,7 @@ function GuestRow({ guests }: { guests: Guest[] }) { guests.map((guest) => { return ( -
+
{guest.name}
) @@ -25,7 +25,7 @@ export function Table({ guests }: { guests: Guest[] }) { const arraySecondHalf = guests.slice(halfwayThrough, guests.length); return ( -
+
From 094652d47e1fb4527e33febc7b4d2064b8489b75 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sat, 2 Nov 2024 10:12:06 +0100 Subject: [PATCH 005/216] Mock tables of different sizes --- app/dashboard/tables/page.tsx | 6 ------ 1 file changed, 6 deletions(-) diff --git a/app/dashboard/tables/page.tsx b/app/dashboard/tables/page.tsx index 29a1d76..f378fed 100644 --- a/app/dashboard/tables/page.tsx +++ b/app/dashboard/tables/page.tsx @@ -32,10 +32,6 @@ export default function Page() { { name: "Arthur C. Clarke", id: "4" }, { name: "Philip Roth", id: "5" }, { name: "Kurt Vonnegut", id: "6" }, - { name: "Ray Bradbury", id: "7" }, - { name: "Jorge Luis Borges", id: "8" }, - { name: "Gabriel García Márquez", id: "9" }, - { name: "Julio Cortázar", id: "10" }, ] } />
Date: Sat, 2 Nov 2024 11:24:48 +0100 Subject: [PATCH 006/216] Render list of tables in an arrangement --- app/dashboard/tables/page.tsx | 5 ++++ app/lib/definitions.ts | 14 +++++++++ app/ui/arrangements/arrangement.tsx | 44 +++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100644 app/ui/arrangements/arrangement.tsx diff --git a/app/dashboard/tables/page.tsx b/app/dashboard/tables/page.tsx index f378fed..db4f10b 100644 --- a/app/dashboard/tables/page.tsx +++ b/app/dashboard/tables/page.tsx @@ -1,10 +1,15 @@ /* Copyright (C) 2024 Manuel Bustillo*/ import { Table } from '@/app/ui/components/table'; +import Arrangement from '@/app/ui/arrangements/arrangement'; import Summary from '@/app/ui/expenses/summary'; import { lusitana } from '@/app/ui/fonts'; export default function Page() { + + return( + + ) return (
diff --git a/app/lib/definitions.ts b/app/lib/definitions.ts index 4a9f09e..c182c95 100644 --- a/app/lib/definitions.ts +++ b/app/lib/definitions.ts @@ -26,6 +26,20 @@ export type Guest = { status?: 'Considered' | 'Invited' | 'Confirmed' | 'Declined' | 'Tentative'; } +export type Banana = { + id: string; + name: string; + email?: string; + group_name?: string; + status?: 'Considered' | 'Invited' | 'Confirmed' | 'Declined' | 'Tentative'; +} + +export type TableArrangement = { + number: number; + guests: Guest[]; + discomfort?: number +} + export type Group = { id: string; name: string; diff --git a/app/ui/arrangements/arrangement.tsx b/app/ui/arrangements/arrangement.tsx new file mode 100644 index 0000000..5da1c3f --- /dev/null +++ b/app/ui/arrangements/arrangement.tsx @@ -0,0 +1,44 @@ +'use client'; + +import React, { useState } from 'react'; +import { TableArrangement, Guest } from '@/app/lib/definitions'; +import { lusitana } from '@/app/ui/fonts'; +import { Table } from '@/app/ui/components/table'; + +export default function Arrangement({ id }: { id: string }) { + + const [guests, setGuests] = useState>([]); + const [tables, setTables] = useState>([]); + + + function loadTables() { + fetch(`/api/tables_arrangements/${id}`) + .then((response) => response.json()) + .then((data) => { + setTables(data.map((record: any) => { + return ({ + id: record.id, + guests: record.guests + }); + })); + }, (error) => { + return []; + }); + } + + tables.length === 0 && loadTables(); + + return ( +
+
+

Table distributions

+
+ {tables.map((table) => ( +
+ ))} + + + + ) + +} \ No newline at end of file From 58f9c35bf29b03b8ccf2c72a9a524979ab01c9c8 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sat, 2 Nov 2024 10:26:40 +0000 Subject: [PATCH 007/216] Add copyright notice --- app/ui/arrangements/arrangement.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/ui/arrangements/arrangement.tsx b/app/ui/arrangements/arrangement.tsx index 5da1c3f..251833d 100644 --- a/app/ui/arrangements/arrangement.tsx +++ b/app/ui/arrangements/arrangement.tsx @@ -1,3 +1,5 @@ +/* Copyright (C) 2024 Manuel Bustillo*/ + 'use client'; import React, { useState } from 'react'; From ca353f02feac0b5970e0583aa0383bc4aa850b5b Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sat, 2 Nov 2024 11:27:44 +0100 Subject: [PATCH 008/216] Code cleanup --- app/dashboard/tables/page.tsx | 46 ----------------------------------- 1 file changed, 46 deletions(-) diff --git a/app/dashboard/tables/page.tsx b/app/dashboard/tables/page.tsx index db4f10b..2a63d37 100644 --- a/app/dashboard/tables/page.tsx +++ b/app/dashboard/tables/page.tsx @@ -10,50 +10,4 @@ export default function Page() { return( ) - return ( -
-
-

Table distributions

-
-
-
-
- - - - - ); } \ No newline at end of file From 1b71bc9d794a3305f4df4799bc4a2e0a895df4e1 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sat, 2 Nov 2024 12:52:12 +0100 Subject: [PATCH 009/216] Display the table arrangements returned by the API --- app/dashboard/tables/page.tsx | 15 +++-- app/lib/definitions.ts | 3 +- app/ui/arrangements/arrangement.tsx | 8 +-- app/ui/arrangements/arrangements-table.tsx | 71 ++++++++++++++++++++++ app/ui/components/button.tsx | 12 ++++ app/ui/guests/table.tsx | 10 +-- 6 files changed, 103 insertions(+), 16 deletions(-) create mode 100644 app/ui/arrangements/arrangements-table.tsx create mode 100644 app/ui/components/button.tsx diff --git a/app/dashboard/tables/page.tsx b/app/dashboard/tables/page.tsx index 2a63d37..7f55a77 100644 --- a/app/dashboard/tables/page.tsx +++ b/app/dashboard/tables/page.tsx @@ -1,13 +1,18 @@ /* Copyright (C) 2024 Manuel Bustillo*/ -import { Table } from '@/app/ui/components/table'; +'use client'; + import Arrangement from '@/app/ui/arrangements/arrangement'; -import Summary from '@/app/ui/expenses/summary'; -import { lusitana } from '@/app/ui/fonts'; +import React, { useState } from 'react'; +import ArrangementsTable from '@/app/ui/arrangements/arrangements-table'; export default function Page() { + const [currentArrangement, setCurrentArrangement] = useState(null); - return( - + return ( + <> + + {currentArrangement && } + ) } \ No newline at end of file diff --git a/app/lib/definitions.ts b/app/lib/definitions.ts index c182c95..48a5918 100644 --- a/app/lib/definitions.ts +++ b/app/lib/definitions.ts @@ -35,8 +35,9 @@ export type Banana = { } export type TableArrangement = { + id: string; number: number; - guests: Guest[]; + guests?: Guest[]; discomfort?: number } diff --git a/app/ui/arrangements/arrangement.tsx b/app/ui/arrangements/arrangement.tsx index 251833d..f51baea 100644 --- a/app/ui/arrangements/arrangement.tsx +++ b/app/ui/arrangements/arrangement.tsx @@ -9,17 +9,15 @@ import { Table } from '@/app/ui/components/table'; export default function Arrangement({ id }: { id: string }) { - const [guests, setGuests] = useState>([]); const [tables, setTables] = useState>([]); - function loadTables() { fetch(`/api/tables_arrangements/${id}`) .then((response) => response.json()) .then((data) => { setTables(data.map((record: any) => { return ({ - id: record.id, + id: record.number, guests: record.guests }); })); @@ -33,10 +31,10 @@ export default function Arrangement({ id }: { id: string }) { return (
-

Table distributions

+

Table distributions

{tables.map((table) => ( -
+
))} diff --git a/app/ui/arrangements/arrangements-table.tsx b/app/ui/arrangements/arrangements-table.tsx new file mode 100644 index 0000000..6bacb86 --- /dev/null +++ b/app/ui/arrangements/arrangements-table.tsx @@ -0,0 +1,71 @@ +'use client' + +import React, { useState } from "react" +import { TableArrangement } from '@/app/lib/definitions'; +import { classNames } from "../components/button"; + +export default function ArrangementsTable ({onArrangementSelected}: {onArrangementSelected: (arrangementId: string) => void}) { + const [arrangements, setArrangements] = useState>([]); + + function loadArrangements() { + fetch("/api/tables_arrangements") + .then((response) => response.json()) + .then((data) => { + setArrangements(data.map((record: any) => { + return ({ + id: record.id, + discomfort: record.discomfort + }); + })); + }, (error) => { + return []; + }); + } + + function arrangementClicked(e: React.MouseEvent) { + onArrangementSelected(e.currentTarget.getAttribute('data-arrangement-id') || ''); + } + + arrangements.length === 0 && loadArrangements(); + + return( +
+
+ + + + + + + + + + {arrangements.map((arrangement) => ( + + + + + + ))} + +
+ Simulations +

+ There are {arrangements.length} simmulations in the list +

+
+ ID + + Discomfort + + Actions +
+ {arrangement.id} + + {arrangement.discomfort} + + +
+
+ ); +} \ No newline at end of file diff --git a/app/ui/components/button.tsx b/app/ui/components/button.tsx new file mode 100644 index 0000000..4de75a8 --- /dev/null +++ b/app/ui/components/button.tsx @@ -0,0 +1,12 @@ +import clsx from "clsx"; + +type ButtonColor = 'primary' | 'blue' | 'green' | 'red' | 'yellow'; + +export function classNames(type: ButtonColor) { + return(clsx("text-white py-1 px-2 mx-1 rounded", { + 'bg-blue-400 hover:bg-blue-600': type === 'primary' || type === 'blue', + 'bg-green-500 hover:bg-green-600': type === 'green', + 'bg-red-500 hover:bg-red-600': type === 'red', + 'bg-yellow-500 hover:bg-yellow-700': type === 'yellow' + })) +} \ No newline at end of file diff --git a/app/ui/guests/table.tsx b/app/ui/guests/table.tsx index af2752b..7590738 100644 --- a/app/ui/guests/table.tsx +++ b/app/ui/guests/table.tsx @@ -6,6 +6,7 @@ import clsx from 'clsx'; import React, { useState, useEffect } from 'react'; import { Guest } from '@/app/lib/definitions'; import { getCsrfToken } from '@/app/lib/utils'; +import {classNames} from '@/app/ui/components/button'; export default function guestsTable() { const [guests, setGuests] = useState>([]); @@ -48,7 +49,6 @@ export default function guestsTable() { } guests.length === 0 && loadGuests(); - const ctaClassName = "text-white py-1 px-2 mx-1 rounded"; return (
@@ -105,14 +105,14 @@ export default function guestsTable() { - {guest.status === 'Considered' && ()} {(guest.status === 'Invited' || guest.status === 'Tentative') && ( <> - - {guest.status != 'Tentative' && } - + + {guest.status != 'Tentative' && } + )} From b5dd07c067de7cf414c977411860c34e402c9615 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sat, 2 Nov 2024 11:53:56 +0000 Subject: [PATCH 010/216] Add copyright notice --- app/ui/arrangements/arrangements-table.tsx | 2 ++ app/ui/components/button.tsx | 2 ++ 2 files changed, 4 insertions(+) diff --git a/app/ui/arrangements/arrangements-table.tsx b/app/ui/arrangements/arrangements-table.tsx index 6bacb86..12a2712 100644 --- a/app/ui/arrangements/arrangements-table.tsx +++ b/app/ui/arrangements/arrangements-table.tsx @@ -1,3 +1,5 @@ +/* Copyright (C) 2024 Manuel Bustillo*/ + 'use client' import React, { useState } from "react" diff --git a/app/ui/components/button.tsx b/app/ui/components/button.tsx index 4de75a8..76906a2 100644 --- a/app/ui/components/button.tsx +++ b/app/ui/components/button.tsx @@ -1,3 +1,5 @@ +/* Copyright (C) 2024 Manuel Bustillo*/ + import clsx from "clsx"; type ButtonColor = 'primary' | 'blue' | 'green' | 'red' | 'yellow'; From efbc27a49976e5f2b826752e4523d09d5faa2476 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 3 Nov 2024 08:18:24 +0100 Subject: [PATCH 011/216] Render rounded tables --- app/ui/arrangements/arrangement.tsx | 2 +- app/ui/components/table.tsx | 64 +++++++++++++++++++++-------- 2 files changed, 49 insertions(+), 17 deletions(-) diff --git a/app/ui/arrangements/arrangement.tsx b/app/ui/arrangements/arrangement.tsx index f51baea..749c577 100644 --- a/app/ui/arrangements/arrangement.tsx +++ b/app/ui/arrangements/arrangement.tsx @@ -34,7 +34,7 @@ export default function Arrangement({ id }: { id: string }) {

Table distributions

{tables.map((table) => ( - +
))} diff --git a/app/ui/components/table.tsx b/app/ui/components/table.tsx index a042f4b..55a9c64 100644 --- a/app/ui/components/table.tsx +++ b/app/ui/components/table.tsx @@ -2,24 +2,25 @@ import { Guest } from "@/app/lib/definitions"; - -function GuestRow({ guests }: { guests: Guest[] }) { - return (
- { - guests.map((guest) => { - - return ( -
- {guest.name} -
- ) - }) - } - -
) +function Dish({ guest, rotation }: { guest: Guest, rotation?: number }) { + rotation = rotation || 0 + return ( +
+ {guest.name} +
+ ) } -export function Table({ guests }: { guests: Guest[] }) { + +function GuestRow({ guests }: { guests: Guest[] }) { + return ( +
+ {guests.map((guest) => )} +
+ ) +} + +function RectangularTable({ guests }: { guests: Guest[] }) { const halfwayThrough = Math.floor(guests.length / 2) const arrayFirstHalf = guests.slice(0, halfwayThrough); const arraySecondHalf = guests.slice(halfwayThrough, guests.length); @@ -30,4 +31,35 @@ export function Table({ guests }: { guests: Guest[] }) { ) +} + +function RoundedTable({ guests }: { guests: Guest[] }) { + const size = 500 + const rotation = 360 / guests.length + return ( +
+ { + guests.map((guest, index) => { + return ( +
+ +
+ ) + }) + } +
+ ) +} + +export function Table({ guests, style }: { guests: Guest[], style: "rectangular" | "rounded" }) { + return ( + <> + {style === "rectangular" && } + {style === "rounded" && } + + ) } \ No newline at end of file From 78b0bd97557c3c259b66bea321990b06000af245 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 3 Nov 2024 08:41:51 +0100 Subject: [PATCH 012/216] Display the name of the tables simulations --- app/lib/definitions.ts | 1 + app/ui/arrangements/arrangements-table.tsx | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/lib/definitions.ts b/app/lib/definitions.ts index 48a5918..110dcd2 100644 --- a/app/lib/definitions.ts +++ b/app/lib/definitions.ts @@ -37,6 +37,7 @@ export type Banana = { export type TableArrangement = { id: string; number: number; + name: string; guests?: Guest[]; discomfort?: number } diff --git a/app/ui/arrangements/arrangements-table.tsx b/app/ui/arrangements/arrangements-table.tsx index 12a2712..5f2f164 100644 --- a/app/ui/arrangements/arrangements-table.tsx +++ b/app/ui/arrangements/arrangements-table.tsx @@ -16,6 +16,7 @@ export default function ArrangementsTable ({onArrangementSelected}: {onArrangeme setArrangements(data.map((record: any) => { return ({ id: record.id, + name: record.name, discomfort: record.discomfort }); })); @@ -42,7 +43,7 @@ export default function ArrangementsTable ({onArrangementSelected}: {onArrangeme
- @@ -82,9 +78,6 @@ export default function guestsTable() { - From 6109c2ce71f0f49f49952e3c90c09f818f9a0394 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 3 Nov 2024 14:13:41 +0100 Subject: [PATCH 018/216] Prepare setup for development with Docker --- .dockerignore | 13 +++++++++++++ Dockerfile.dev | 28 ++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile.dev diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..b6b7a04 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,13 @@ +node_modules +npm-debug.log +Dockerfile* +docker-compose* +.dockerignore +.git +.gitignore +README.md +LICENSE +.vscode +.next +*.swp +/scripts diff --git a/Dockerfile.dev b/Dockerfile.dev new file mode 100644 index 0000000..7ed40bd --- /dev/null +++ b/Dockerfile.dev @@ -0,0 +1,28 @@ +# Based on https://github.com/vercel/next.js/blob/canary/examples/with-docker/Dockerfile + +FROM node:23-alpine AS base + +# Install dependencies only when needed +FROM base AS deps +# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed. +RUN apk add --no-cache libc6-compat +WORKDIR /app + +# Install dependencies based on the preferred package manager +COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./ +RUN \ + if [ -f yarn.lock ]; then yarn --frozen-lockfile; \ + elif [ -f package-lock.json ]; then npm ci; \ + elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm i --frozen-lockfile; \ + else echo "Lockfile not found." && exit 1; \ + fi + +COPY . /app/ + +ENV NODE_ENV development +ENV NEXT_TELEMETRY_DISABLED 1 + +EXPOSE 3000 +ENV PORT=3000 + +CMD HOSTNAME="0.0.0.0" pnpm run dev \ No newline at end of file From 5d537c80aa4fcea86153be84474299a61b206452 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 3 Nov 2024 14:42:06 +0100 Subject: [PATCH 019/216] Display the dish with the color of the group --- app/lib/definitions.ts | 1 + app/ui/components/table.tsx | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/lib/definitions.ts b/app/lib/definitions.ts index 4a4c652..fb05a59 100644 --- a/app/lib/definitions.ts +++ b/app/lib/definitions.ts @@ -22,6 +22,7 @@ export type Guest = { id: string; name: string; group_name?: string; + color?: string; status?: 'Considered' | 'Invited' | 'Confirmed' | 'Declined' | 'Tentative'; } diff --git a/app/ui/components/table.tsx b/app/ui/components/table.tsx index 55a9c64..9c1098d 100644 --- a/app/ui/components/table.tsx +++ b/app/ui/components/table.tsx @@ -5,7 +5,10 @@ import { Guest } from "@/app/lib/definitions"; function Dish({ guest, rotation }: { guest: Guest, rotation?: number }) { rotation = rotation || 0 return ( -
+
{guest.name}
) From f3862739c263879a01535a9470c5a660c1fe8902 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 5 Nov 2024 01:08:43 +0000 Subject: [PATCH 020/216] Update dependency @types/node to v22.8.7 --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 938e546..6097808 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "devDependencies": { "@playwright/test": "^1.46.0", "@types/bcrypt": "^5.0.2", - "@types/node": "22.8.6", + "@types/node": "22.8.7", "@types/react": "18.3.12", "@types/react-dom": "18.3.1" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 597bde8..0173adf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -64,8 +64,8 @@ importers: specifier: ^5.0.2 version: 5.0.2 '@types/node': - specifier: 22.8.6 - version: 22.8.6 + specifier: 22.8.7 + version: 22.8.7 '@types/react': specifier: 18.3.12 version: 18.3.12 @@ -328,8 +328,8 @@ packages: '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/node@22.8.6': - resolution: {integrity: sha512-tosuJYKrIqjQIlVCM4PEGxOmyg3FCPa/fViuJChnGeEIhjA46oy8FMVoF9su1/v8PNs2a8Q0iFNyOx0uOF91nw==} + '@types/node@22.8.7': + resolution: {integrity: sha512-LidcG+2UeYIWcMuMUpBKOnryBWG/rnmOHQR5apjn8myTQcx3rinFRn7DcIFhMnS0PPFSC6OafdIKEad0lj6U0Q==} '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -1358,11 +1358,11 @@ snapshots: '@types/bcrypt@5.0.2': dependencies: - '@types/node': 22.8.6 + '@types/node': 22.8.7 '@types/cookie@0.6.0': {} - '@types/node@22.8.6': + '@types/node@22.8.7': dependencies: undici-types: 6.19.8 From ea4ab9dc0499854b6602687480a894f077a88421 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 6 Nov 2024 01:15:41 +0000 Subject: [PATCH 021/216] Update dependency @types/node to v22.9.0 --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 6097808..525015e 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "devDependencies": { "@playwright/test": "^1.46.0", "@types/bcrypt": "^5.0.2", - "@types/node": "22.8.7", + "@types/node": "22.9.0", "@types/react": "18.3.12", "@types/react-dom": "18.3.1" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0173adf..400ceaa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -64,8 +64,8 @@ importers: specifier: ^5.0.2 version: 5.0.2 '@types/node': - specifier: 22.8.7 - version: 22.8.7 + specifier: 22.9.0 + version: 22.9.0 '@types/react': specifier: 18.3.12 version: 18.3.12 @@ -328,8 +328,8 @@ packages: '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/node@22.8.7': - resolution: {integrity: sha512-LidcG+2UeYIWcMuMUpBKOnryBWG/rnmOHQR5apjn8myTQcx3rinFRn7DcIFhMnS0PPFSC6OafdIKEad0lj6U0Q==} + '@types/node@22.9.0': + resolution: {integrity: sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==} '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -1358,11 +1358,11 @@ snapshots: '@types/bcrypt@5.0.2': dependencies: - '@types/node': 22.8.7 + '@types/node': 22.9.0 '@types/cookie@0.6.0': {} - '@types/node@22.8.7': + '@types/node@22.9.0': dependencies: undici-types: 6.19.8 From f26e646a36995e5e13465ac5d5bb712c5ee94943 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 8 Nov 2024 01:10:09 +0000 Subject: [PATCH 022/216] Update dependency next to v15.0.3 --- package.json | 2 +- pnpm-lock.yaml | 94 +++++++++++++++++++++++++------------------------- 2 files changed, 48 insertions(+), 48 deletions(-) diff --git a/package.json b/package.json index 525015e..ffc22b3 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "autoprefixer": "10.4.20", "bcrypt": "^5.1.1", "clsx": "^2.1.1", - "next": "15.0.2", + "next": "15.0.3", "next-auth": "5.0.0-beta.25", "postcss": "8.4.47", "primeicons": "^7.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 400ceaa..626077d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,11 +24,11 @@ importers: specifier: ^2.1.1 version: 2.1.1 next: - specifier: 15.0.2 - version: 15.0.2(@playwright/test@1.48.2)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) + specifier: 15.0.3 + version: 15.0.3(@playwright/test@1.48.2)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) next-auth: specifier: 5.0.0-beta.25 - version: 5.0.0-beta.25(next@15.0.2(@playwright/test@1.48.2)(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.0.3(@playwright/test@1.48.2)(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: specifier: 8.4.47 version: 8.4.47 @@ -236,53 +236,53 @@ packages: resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true - '@next/env@15.0.2': - resolution: {integrity: sha512-c0Zr0ModK5OX7D4ZV8Jt/wqoXtitLNPwUfG9zElCZztdaZyNVnN40rDXVZ/+FGuR4CcNV5AEfM6N8f+Ener7Dg==} + '@next/env@15.0.3': + resolution: {integrity: sha512-t9Xy32pjNOvVn2AS+Utt6VmyrshbpfUMhIjFO60gI58deSo/KgLOp31XZ4O+kY/Is8WAGYwA5gR7kOb1eORDBA==} - '@next/swc-darwin-arm64@15.0.2': - resolution: {integrity: sha512-GK+8w88z+AFlmt+ondytZo2xpwlfAR8U6CRwXancHImh6EdGfHMIrTSCcx5sOSBei00GyLVL0ioo1JLKTfprgg==} + '@next/swc-darwin-arm64@15.0.3': + resolution: {integrity: sha512-s3Q/NOorCsLYdCKvQlWU+a+GeAd3C8Rb3L1YnetsgwXzhc3UTWrtQpB/3eCjFOdGUj5QmXfRak12uocd1ZiiQw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.0.2': - resolution: {integrity: sha512-KUpBVxIbjzFiUZhiLIpJiBoelqzQtVZbdNNsehhUn36e2YzKHphnK8eTUW1s/4aPy5kH/UTid8IuVbaOpedhpw==} + '@next/swc-darwin-x64@15.0.3': + resolution: {integrity: sha512-Zxl/TwyXVZPCFSf0u2BNj5sE0F2uR6iSKxWpq4Wlk/Sv9Ob6YCKByQTkV2y6BCic+fkabp9190hyrDdPA/dNrw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.0.2': - resolution: {integrity: sha512-9J7TPEcHNAZvwxXRzOtiUvwtTD+fmuY0l7RErf8Yyc7kMpE47MIQakl+3jecmkhOoIyi/Rp+ddq7j4wG6JDskQ==} + '@next/swc-linux-arm64-gnu@15.0.3': + resolution: {integrity: sha512-T5+gg2EwpsY3OoaLxUIofmMb7ohAUlcNZW0fPQ6YAutaWJaxt1Z1h+8zdl4FRIOr5ABAAhXtBcpkZNwUcKI2fw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.0.2': - resolution: {integrity: sha512-BjH4ZSzJIoTTZRh6rG+a/Ry4SW0HlizcPorqNBixBWc3wtQtj4Sn9FnRZe22QqrPnzoaW0ctvSz4FaH4eGKMww==} + '@next/swc-linux-arm64-musl@15.0.3': + resolution: {integrity: sha512-WkAk6R60mwDjH4lG/JBpb2xHl2/0Vj0ZRu1TIzWuOYfQ9tt9NFsIinI1Epma77JVgy81F32X/AeD+B2cBu/YQA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.0.2': - resolution: {integrity: sha512-i3U2TcHgo26sIhcwX/Rshz6avM6nizrZPvrDVDY1bXcLH1ndjbO8zuC7RoHp0NSK7wjJMPYzm7NYL1ksSKFreA==} + '@next/swc-linux-x64-gnu@15.0.3': + resolution: {integrity: sha512-gWL/Cta1aPVqIGgDb6nxkqy06DkwJ9gAnKORdHWX1QBbSZZB+biFYPFti8aKIQL7otCE1pjyPaXpFzGeG2OS2w==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.0.2': - resolution: {integrity: sha512-AMfZfSVOIR8fa+TXlAooByEF4OB00wqnms1sJ1v+iu8ivwvtPvnkwdzzFMpsK5jA2S9oNeeQ04egIWVb4QWmtQ==} + '@next/swc-linux-x64-musl@15.0.3': + resolution: {integrity: sha512-QQEMwFd8r7C0GxQS62Zcdy6GKx999I/rTO2ubdXEe+MlZk9ZiinsrjwoiBL5/57tfyjikgh6GOU2WRQVUej3UA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.0.2': - resolution: {integrity: sha512-JkXysDT0/hEY47O+Hvs8PbZAeiCQVxKfGtr4GUpNAhlG2E0Mkjibuo8ryGD29Qb5a3IOnKYNoZlh/MyKd2Nbww==} + '@next/swc-win32-arm64-msvc@15.0.3': + resolution: {integrity: sha512-9TEp47AAd/ms9fPNgtgnT7F3M1Hf7koIYYWCMQ9neOwjbVWJsHZxrFbI3iEDJ8rf1TDGpmHbKxXf2IFpAvheIQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.0.2': - resolution: {integrity: sha512-foaUL0NqJY/dX0Pi/UcZm5zsmSk5MtP/gxx3xOPyREkMFN+CTjctPfu3QaqrQHinaKdPnMWPJDKt4VjDfTBe/Q==} + '@next/swc-win32-x64-msvc@15.0.3': + resolution: {integrity: sha512-VNAz+HN4OGgvZs6MOoVfnn41kBzT+M+tB+OK4cww6DNyWS6wKaDpaAm/qLeOUbnMh0oVx1+mg0uoYARF69dJyA==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -739,16 +739,16 @@ packages: nodemailer: optional: true - next@15.0.2: - resolution: {integrity: sha512-rxIWHcAu4gGSDmwsELXacqAPUk+j8dV/A9cDF5fsiCMpkBDYkO2AEaL1dfD+nNmDiU6QMCFN8Q30VEKapT9UHQ==} - engines: {node: '>=18.18.0'} + next@15.0.3: + resolution: {integrity: sha512-ontCbCRKJUIoivAdGB34yCaOcPgYXr9AAkV/IwqFfWWTXEPUgLYkSkqBhIk9KK7gGmgjc64B+RdoeIDM13Irnw==} + engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: '@opentelemetry/api': ^1.1.0 '@playwright/test': ^1.41.2 babel-plugin-react-compiler: '*' - react: ^18.2.0 || 19.0.0-rc-02c0e824-20241028 - react-dom: ^18.2.0 || 19.0.0-rc-02c0e824-20241028 + react: ^18.2.0 || 19.0.0-rc-66855b96-20241106 + react-dom: ^18.2.0 || 19.0.0-rc-66855b96-20241106 sass: ^1.3.0 peerDependenciesMeta: '@opentelemetry/api': @@ -1298,30 +1298,30 @@ snapshots: - encoding - supports-color - '@next/env@15.0.2': {} + '@next/env@15.0.3': {} - '@next/swc-darwin-arm64@15.0.2': + '@next/swc-darwin-arm64@15.0.3': optional: true - '@next/swc-darwin-x64@15.0.2': + '@next/swc-darwin-x64@15.0.3': optional: true - '@next/swc-linux-arm64-gnu@15.0.2': + '@next/swc-linux-arm64-gnu@15.0.3': optional: true - '@next/swc-linux-arm64-musl@15.0.2': + '@next/swc-linux-arm64-musl@15.0.3': optional: true - '@next/swc-linux-x64-gnu@15.0.2': + '@next/swc-linux-x64-gnu@15.0.3': optional: true - '@next/swc-linux-x64-musl@15.0.2': + '@next/swc-linux-x64-musl@15.0.3': optional: true - '@next/swc-win32-arm64-msvc@15.0.2': + '@next/swc-win32-arm64-msvc@15.0.3': optional: true - '@next/swc-win32-x64-msvc@15.0.2': + '@next/swc-win32-x64-msvc@15.0.3': optional: true '@nodelib/fs.scandir@2.1.5': @@ -1735,15 +1735,15 @@ snapshots: nanoid@3.3.7: {} - next-auth@5.0.0-beta.25(next@15.0.2(@playwright/test@1.48.2)(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.0.3(@playwright/test@1.48.2)(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: '@auth/core': 0.37.2 - next: 15.0.2(@playwright/test@1.48.2)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) + next: 15.0.3(@playwright/test@1.48.2)(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@15.0.2(@playwright/test@1.48.2)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): + next@15.0.3(@playwright/test@1.48.2)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): dependencies: - '@next/env': 15.0.2 + '@next/env': 15.0.3 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.13 busboy: 1.6.0 @@ -1753,14 +1753,14 @@ snapshots: 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) optionalDependencies: - '@next/swc-darwin-arm64': 15.0.2 - '@next/swc-darwin-x64': 15.0.2 - '@next/swc-linux-arm64-gnu': 15.0.2 - '@next/swc-linux-arm64-musl': 15.0.2 - '@next/swc-linux-x64-gnu': 15.0.2 - '@next/swc-linux-x64-musl': 15.0.2 - '@next/swc-win32-arm64-msvc': 15.0.2 - '@next/swc-win32-x64-msvc': 15.0.2 + '@next/swc-darwin-arm64': 15.0.3 + '@next/swc-darwin-x64': 15.0.3 + '@next/swc-linux-arm64-gnu': 15.0.3 + '@next/swc-linux-arm64-musl': 15.0.3 + '@next/swc-linux-x64-gnu': 15.0.3 + '@next/swc-linux-x64-musl': 15.0.3 + '@next/swc-win32-arm64-msvc': 15.0.3 + '@next/swc-win32-x64-msvc': 15.0.3 '@playwright/test': 1.48.2 sharp: 0.33.5 transitivePeerDependencies: From 1838889a0c284f57ac7048a88d4b55629c73d13b Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 10 Nov 2024 20:52:48 +0100 Subject: [PATCH 023/216] Extract a common TableOfContents component --- app/ui/arrangements/arrangements-table.tsx | 57 ++++++++-------------- app/ui/components/table-of-contents.tsx | 26 ++++++++++ 2 files changed, 45 insertions(+), 38 deletions(-) create mode 100644 app/ui/components/table-of-contents.tsx diff --git a/app/ui/arrangements/arrangements-table.tsx b/app/ui/arrangements/arrangements-table.tsx index 5f2f164..66e41d4 100644 --- a/app/ui/arrangements/arrangements-table.tsx +++ b/app/ui/arrangements/arrangements-table.tsx @@ -5,6 +5,7 @@ import React, { useState } from "react" import { TableArrangement } from '@/app/lib/definitions'; import { classNames } from "../components/button"; +import TableOfContents from "../components/table-of-contents"; export default function ArrangementsTable ({onArrangementSelected}: {onArrangementSelected: (arrangementId: string) => void}) { const [arrangements, setArrangements] = useState>([]); @@ -32,43 +33,23 @@ export default function ArrangementsTable ({onArrangementSelected}: {onArrangeme arrangements.length === 0 && loadArrangements(); return( -
-
- ID + Name Discomfort @@ -56,7 +57,7 @@ export default function ArrangementsTable ({onArrangementSelected}: {onArrangeme {arrangements.map((arrangement) => (
- {arrangement.id} + {arrangement.name} {arrangement.discomfort} From 883c56e0e20e4d72e40c8d6e7a57fc869d340666 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 3 Nov 2024 09:32:04 +0100 Subject: [PATCH 013/216] Prevent redundant builds with copyright notice --- .github/workflows/copyright_notice.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/copyright_notice.yml b/.github/workflows/copyright_notice.yml index fed4cc4..321c44e 100644 --- a/.github/workflows/copyright_notice.yml +++ b/.github/workflows/copyright_notice.yml @@ -3,6 +3,9 @@ on: pull_request: permissions: contents: write +concurrency: + group: ${{ github.ref }} + cancel-in-progress: true jobs: copyright_notice: runs-on: ubuntu-latest From e4dee0ded9a60969aeb4069081db33775fe86613 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 3 Nov 2024 10:07:41 +0100 Subject: [PATCH 014/216] Stop building images on PRs --- .github/workflows/build.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5edde29..71b64c2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,7 +3,6 @@ on: push: branches: - main - pull_request: concurrency: group: ${{ github.ref }} cancel-in-progress: true From 10e925c54ff90e005426ccfd1af01e05635aff44 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 3 Nov 2024 09:41:56 +0100 Subject: [PATCH 015/216] Configure a build timeout of 30 minutes --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 71b64c2..1118afa 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -9,6 +9,7 @@ concurrency: jobs: build-static-assets: runs-on: ubuntu-latest + timeout-minutes: 30 steps: - uses: actions/checkout@v4 with: From 0d1901fa44816025eba1ed4d0ccadc65872d3331 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 3 Nov 2024 10:34:30 +0100 Subject: [PATCH 016/216] Fix error transitioning to the tentative status --- app/ui/guests/table.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/ui/guests/table.tsx b/app/ui/guests/table.tsx index 7590738..3f5ce4f 100644 --- a/app/ui/guests/table.tsx +++ b/app/ui/guests/table.tsx @@ -111,7 +111,7 @@ export default function guestsTable() { {(guest.status === 'Invited' || guest.status === 'Tentative') && ( <> - {guest.status != 'Tentative' && } + {guest.status != 'Tentative' && } )} From 7c0cd761988b69ec527716c8d8047c19929f849e Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 3 Nov 2024 10:39:02 +0100 Subject: [PATCH 017/216] Remove references to the user email --- app/lib/definitions.ts | 9 --------- app/ui/guests/table.tsx | 7 ------- 2 files changed, 16 deletions(-) diff --git a/app/lib/definitions.ts b/app/lib/definitions.ts index 110dcd2..4a4c652 100644 --- a/app/lib/definitions.ts +++ b/app/lib/definitions.ts @@ -21,15 +21,6 @@ export type Customer = { export type Guest = { id: string; name: string; - email?: string; - group_name?: string; - status?: 'Considered' | 'Invited' | 'Confirmed' | 'Declined' | 'Tentative'; -} - -export type Banana = { - id: string; - name: string; - email?: string; group_name?: string; status?: 'Considered' | 'Invited' | 'Confirmed' | 'Declined' | 'Tentative'; } diff --git a/app/ui/guests/table.tsx b/app/ui/guests/table.tsx index 7590738..e731055 100644 --- a/app/ui/guests/table.tsx +++ b/app/ui/guests/table.tsx @@ -19,7 +19,6 @@ export default function guestsTable() { return ({ id: record.id, name: record.attributes.name, - email: record.attributes.email, group_name: record.attributes.group_name, status: record.attributes.status }); @@ -64,9 +63,6 @@ export default function guestsTable() { Name - Email - Group {guest.name} - {guest.email} - {guest.group_name}
- - - - - - - - - - {arrangements.map((arrangement) => ( - - - - - - ))} - -
- Simulations -

- There are {arrangements.length} simmulations in the list -

-
- Name - - Discomfort - - Actions -
- {arrangement.name} - - {arrangement.discomfort} - - -
-
+ ( + + + {arrangement.name} + + + {arrangement.discomfort} + + + + + + )} + /> ); } \ No newline at end of file diff --git a/app/ui/components/table-of-contents.tsx b/app/ui/components/table-of-contents.tsx new file mode 100644 index 0000000..209af87 --- /dev/null +++ b/app/ui/components/table-of-contents.tsx @@ -0,0 +1,26 @@ +export default function TableOfContents({ headers, caption, elements, rowRender }: { headers: string[], caption: string, elements: Type[], rowRender: (element: Type) => JSX.Element }) { + return ( +
+ + + + + {headers.map((header) => ( + + ))} + + + + {elements.map((element) => rowRender(element))} + +
+ {caption} +

+ There are {elements.length} elements in the list +

+
+ {header} +
+
+ ) +} From 79b4e9ac82938b8f211137d74cd5ea9a2059c112 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 10 Nov 2024 19:53:34 +0000 Subject: [PATCH 024/216] Add copyright notice --- app/ui/components/table-of-contents.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/ui/components/table-of-contents.tsx b/app/ui/components/table-of-contents.tsx index 209af87..70c39e2 100644 --- a/app/ui/components/table-of-contents.tsx +++ b/app/ui/components/table-of-contents.tsx @@ -1,3 +1,5 @@ +/* Copyright (C) 2024 Manuel Bustillo*/ + export default function TableOfContents({ headers, caption, elements, rowRender }: { headers: string[], caption: string, elements: Type[], rowRender: (element: Type) => JSX.Element }) { return (
From 2ea1fd26678706993c4b0b35232cda5136aa4211 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 10 Nov 2024 20:55:03 +0100 Subject: [PATCH 025/216] Reuse the table of contents component for the guests list --- app/ui/guests/table.tsx | 110 ++++++++++++++++------------------------ 1 file changed, 45 insertions(+), 65 deletions(-) diff --git a/app/ui/guests/table.tsx b/app/ui/guests/table.tsx index 9df0f30..3504089 100644 --- a/app/ui/guests/table.tsx +++ b/app/ui/guests/table.tsx @@ -7,6 +7,7 @@ import React, { useState, useEffect } from 'react'; import { Guest } from '@/app/lib/definitions'; import { getCsrfToken } from '@/app/lib/utils'; import {classNames} from '@/app/ui/components/button'; +import TableOfContents from '../components/table-of-contents'; export default function guestsTable() { const [guests, setGuests] = useState>([]); @@ -50,69 +51,48 @@ export default function guestsTable() { guests.length === 0 && loadGuests(); return ( -
- - - - - - - - - - - - {guests.map((guest) => ( - - - - - - - ))} - -
- Guests -

- There are {guests.length} guests in the list -

-
- Name - - Group - - Status - Actions
- {guest.name} - - {guest.group_name} - - - - - {guest.status} - - - {guest.status === 'Considered' && ()} - {(guest.status === 'Invited' || guest.status === 'Tentative') && ( - <> - - {guest.status != 'Tentative' && } - - - )} -
-
- ); + ( + + + {guest.name} + + + {guest.group_name} + + + + + + {guest.status} + + + + {guest.status === 'Considered' && ()} + {(guest.status === 'Invited' || guest.status === 'Tentative') && ( + <> + + {guest.status != 'Tentative' && } + + + )} + + + )} + /> + ); } From 638aca8301d97315acdb2f46502dc807398f199c Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 10 Nov 2024 21:08:03 +0100 Subject: [PATCH 026/216] Display a list of expenses --- app/dashboard/expenses/page.tsx | 2 ++ app/lib/definitions.ts | 7 +++++ app/ui/expenses/table.tsx | 51 +++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 app/ui/expenses/table.tsx diff --git a/app/dashboard/expenses/page.tsx b/app/dashboard/expenses/page.tsx index 7e8cee5..16edef2 100644 --- a/app/dashboard/expenses/page.tsx +++ b/app/dashboard/expenses/page.tsx @@ -2,6 +2,7 @@ import { lusitana } from '@/app/ui/fonts'; import ExpenseSummary from '@/app/ui/expenses/summary'; +import ExpensesTable from '@/app/ui/expenses/table'; export default function Page () { return ( @@ -10,6 +11,7 @@ export default function Page () {

Expenses

Summary

+
); diff --git a/app/lib/definitions.ts b/app/lib/definitions.ts index fb05a59..07eef8b 100644 --- a/app/lib/definitions.ts +++ b/app/lib/definitions.ts @@ -26,6 +26,13 @@ export type Guest = { status?: 'Considered' | 'Invited' | 'Confirmed' | 'Declined' | 'Tentative'; } +export type Expense = { + id: string; + name: string; + amount: number; + pricingType: 'fixed' | 'per person'; +}; + export type TableArrangement = { id: string; number: number; diff --git a/app/ui/expenses/table.tsx b/app/ui/expenses/table.tsx new file mode 100644 index 0000000..55a0bbe --- /dev/null +++ b/app/ui/expenses/table.tsx @@ -0,0 +1,51 @@ +/* Copyright (C) 2024 Manuel Bustillo*/ + +'use client' + +import React, { useState } from "react" +import { Expense } from '@/app/lib/definitions'; +import TableOfContents from "../components/table-of-contents"; + +export default function ExpensesTable() { + const [expenses, setExpenses] = useState>([]); + + function loadExpenses() { + fetch("/api/expenses") + .then((response) => response.json()) + .then((data) => { + setExpenses(data.map((record: any) => { + return ({ + id: record.id, + name: record.name, + amount: record.amount, + pricingType: record.pricing_type + }); + })); + }, (error) => { + return []; + }); + } + + expenses.length === 0 && loadExpenses(); + + return ( + ( + + + {expense.name} + + + {expense.amount}€ + + + {expense.pricingType} + + + )} + /> + ); +} \ No newline at end of file From 7a0b03b67f3d70b75a6fe6002f5716c9af3929b8 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 10 Nov 2024 21:13:17 +0100 Subject: [PATCH 027/216] Rename summary component and move it to the dashboard --- app/dashboard/expenses/page.tsx | 2 -- app/dashboard/page.tsx | 6 +++++- .../{expenses/summary.tsx => dashboard/global-summary.tsx} | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) rename app/ui/{expenses/summary.tsx => dashboard/global-summary.tsx} (97%) diff --git a/app/dashboard/expenses/page.tsx b/app/dashboard/expenses/page.tsx index 16edef2..8b24064 100644 --- a/app/dashboard/expenses/page.tsx +++ b/app/dashboard/expenses/page.tsx @@ -1,7 +1,6 @@ /* Copyright (C) 2024 Manuel Bustillo*/ import { lusitana } from '@/app/ui/fonts'; -import ExpenseSummary from '@/app/ui/expenses/summary'; import ExpensesTable from '@/app/ui/expenses/table'; export default function Page () { @@ -10,7 +9,6 @@ export default function Page () {

Expenses

Summary

-
diff --git a/app/dashboard/page.tsx b/app/dashboard/page.tsx index 643e65f..51c96c1 100644 --- a/app/dashboard/page.tsx +++ b/app/dashboard/page.tsx @@ -1,5 +1,9 @@ /* Copyright (C) 2024 Manuel Bustillo*/ +import GlobalSummary from '@/app/ui/dashboard/global-summary'; + export default function Page() { - return

Dashboard Page

; + return( + + ); } \ No newline at end of file diff --git a/app/ui/expenses/summary.tsx b/app/ui/dashboard/global-summary.tsx similarity index 97% rename from app/ui/expenses/summary.tsx rename to app/ui/dashboard/global-summary.tsx index d838c4b..9b00359 100644 --- a/app/ui/expenses/summary.tsx +++ b/app/ui/dashboard/global-summary.tsx @@ -2,7 +2,7 @@ import { MainCard, SecondaryCard } from '../components/dashboard-cards'; -export default async function ExpenseSummary() { +export default async function GlobalSummary() { return (
From 0588459618225f661290673859fc772cc8da309c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 11 Nov 2024 01:07:31 +0000 Subject: [PATCH 028/216] Update dependency postcss to v8.4.48 --- package.json | 2 +- pnpm-lock.yaml | 51 +++++++++++++++++++++++++++----------------------- 2 files changed, 29 insertions(+), 24 deletions(-) diff --git a/package.json b/package.json index ffc22b3..312b193 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "clsx": "^2.1.1", "next": "15.0.3", "next-auth": "5.0.0-beta.25", - "postcss": "8.4.47", + "postcss": "8.4.48", "primeicons": "^7.0.0", "primereact": "^10.8.2", "react": "19.0.0-rc-f38c22b244-20240704", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 626077d..9874031 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,7 +16,7 @@ importers: version: 0.5.9(tailwindcss@3.4.14) autoprefixer: specifier: 10.4.20 - version: 10.4.20(postcss@8.4.47) + version: 10.4.20(postcss@8.4.48) bcrypt: specifier: ^5.1.1 version: 5.1.1 @@ -30,8 +30,8 @@ importers: specifier: 5.0.0-beta.25 version: 5.0.0-beta.25(next@15.0.3(@playwright/test@1.48.2)(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: - specifier: 8.4.47 - version: 8.4.47 + specifier: 8.4.48 + version: 8.4.48 primeicons: specifier: ^7.0.0 version: 7.0.0 @@ -827,6 +827,9 @@ packages: picocolors@1.1.0: resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -890,8 +893,8 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.4.47: - resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} + postcss@8.4.48: + resolution: {integrity: sha512-GCRK8F6+Dl7xYniR5a4FYbpBzU8XnZVeowqsQFYdcXuSbChgiks7qybSkbvnaeqv0G0B+dd9/jJgH8kkLDQeEA==} engines: {node: ^10 || ^12 || >=14} preact-render-to-string@5.2.3: @@ -1415,14 +1418,14 @@ snapshots: arg@5.0.2: {} - autoprefixer@10.4.20(postcss@8.4.47): + autoprefixer@10.4.20(postcss@8.4.48): dependencies: browserslist: 4.23.3 caniuse-lite: 1.0.30001651 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.1 - postcss: 8.4.47 + postcss: 8.4.48 postcss-value-parser: 4.2.0 balanced-match@1.0.2: {} @@ -1815,6 +1818,8 @@ snapshots: picocolors@1.1.0: {} + picocolors@1.1.1: {} + picomatch@2.3.1: {} pify@2.3.0: {} @@ -1829,28 +1834,28 @@ snapshots: optionalDependencies: fsevents: 2.3.2 - postcss-import@15.1.0(postcss@8.4.47): + postcss-import@15.1.0(postcss@8.4.48): dependencies: - postcss: 8.4.47 + postcss: 8.4.48 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - postcss-js@4.0.1(postcss@8.4.47): + postcss-js@4.0.1(postcss@8.4.48): dependencies: camelcase-css: 2.0.1 - postcss: 8.4.47 + postcss: 8.4.48 - postcss-load-config@4.0.2(postcss@8.4.47): + postcss-load-config@4.0.2(postcss@8.4.48): dependencies: lilconfig: 3.1.1 yaml: 2.4.3 optionalDependencies: - postcss: 8.4.47 + postcss: 8.4.48 - postcss-nested@6.0.1(postcss@8.4.47): + postcss-nested@6.0.1(postcss@8.4.48): dependencies: - postcss: 8.4.47 + postcss: 8.4.48 postcss-selector-parser: 6.1.0 postcss-selector-parser@6.1.0: @@ -1866,10 +1871,10 @@ snapshots: picocolors: 1.1.0 source-map-js: 1.2.1 - postcss@8.4.47: + postcss@8.4.48: dependencies: nanoid: 3.3.7 - picocolors: 1.1.0 + picocolors: 1.1.1 source-map-js: 1.2.1 preact-render-to-string@5.2.3(preact@10.11.3): @@ -2066,11 +2071,11 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.1.0 - postcss: 8.4.47 - postcss-import: 15.1.0(postcss@8.4.47) - postcss-js: 4.0.1(postcss@8.4.47) - postcss-load-config: 4.0.2(postcss@8.4.47) - postcss-nested: 6.0.1(postcss@8.4.47) + postcss: 8.4.48 + postcss-import: 15.1.0(postcss@8.4.48) + postcss-js: 4.0.1(postcss@8.4.48) + postcss-load-config: 4.0.2(postcss@8.4.48) + postcss-nested: 6.0.1(postcss@8.4.48) postcss-selector-parser: 6.1.0 resolve: 1.22.8 sucrase: 3.35.0 @@ -2112,7 +2117,7 @@ snapshots: dependencies: browserslist: 4.23.3 escalade: 3.1.2 - picocolors: 1.0.1 + picocolors: 1.1.0 use-debounce@10.0.4(react@19.0.0-rc-f38c22b244-20240704): dependencies: From 38ca2c3409c4f8079ca515ca656e7858686955d9 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Mon, 11 Nov 2024 07:45:16 +0100 Subject: [PATCH 029/216] Allow inline editing of guest name --- app/ui/components/form/inlineTextField.tsx | 34 ++++++++++++++++++++++ app/ui/guests/table.tsx | 20 +++++++++++-- package.json | 3 +- 3 files changed, 53 insertions(+), 4 deletions(-) create mode 100644 app/ui/components/form/inlineTextField.tsx diff --git a/app/ui/components/form/inlineTextField.tsx b/app/ui/components/form/inlineTextField.tsx new file mode 100644 index 0000000..fad7f57 --- /dev/null +++ b/app/ui/components/form/inlineTextField.tsx @@ -0,0 +1,34 @@ +/* Copyright (C) 2024 Manuel Bustillo*/ + +import React, { useState } from 'react'; + +export default function InlineTextField({ initialValue, onChange }: { initialValue: string, onChange: (value: string) => void }) { + const [editing, setEditing] = useState(false); + const [value, setValue] = useState(initialValue); + + const renderText = () => setEditing(true)}>{value} + + const onConfirm = () => { + onChange(value); + setEditing(false); + } + + function renderForm() { + return ( +
+ setValue(e.target.value)} + onBlur={onConfirm} + autoFocus + /> +
+ ) + } + + return ( + editing ? (renderForm()) : (renderText()) + ); +} \ No newline at end of file diff --git a/app/ui/guests/table.tsx b/app/ui/guests/table.tsx index 3504089..6e8d5ad 100644 --- a/app/ui/guests/table.tsx +++ b/app/ui/guests/table.tsx @@ -8,6 +8,7 @@ import { Guest } from '@/app/lib/definitions'; import { getCsrfToken } from '@/app/lib/utils'; import {classNames} from '@/app/ui/components/button'; import TableOfContents from '../components/table-of-contents'; +import InlineTextField from '../components/form/inlineTextField'; export default function guestsTable() { const [guests, setGuests] = useState>([]); @@ -34,6 +35,19 @@ export default function guestsTable() { const handleDeclineGuest = (e: React.MouseEvent) => handleGuestChange(e, 'declined'); const handleTentativeGuest = (e: React.MouseEvent) => handleGuestChange(e, 'tentative'); + const handleGuestUpdate = (guest:Guest) => { + fetch(`/api/guests/${guest.id}`, + { + method: 'PUT', + body: JSON.stringify({ guest: { name: guest.name } }), + headers: { + 'Content-Type': 'application/json', + 'X-CSRF-TOKEN': getCsrfToken(), + } + }) + .catch((error) => console.error(error)); + } + const handleGuestChange = (e: React.MouseEvent, status:string) => { fetch("/api/guests/bulk_update.json", { @@ -57,9 +71,9 @@ export default function guestsTable() { elements={guests} rowRender={(guest) => ( - - {guest.name} - + + { guest.name = newName ; handleGuestUpdate(guest) }} /> + {guest.group_name} diff --git a/package.json b/package.json index 312b193..8d9b337 100644 --- a/package.json +++ b/package.json @@ -32,5 +32,6 @@ }, "engines": { "node": ">=23.0.0" - } + }, + "packageManager": "pnpm@9.12.3+sha512.cce0f9de9c5a7c95bef944169cc5dfe8741abfb145078c0d508b868056848a87c81e626246cb60967cbd7fd29a6c062ef73ff840d96b3c86c40ac92cf4a813ee" } From 2d565e405f07cd2c739b471f32b33181386edfbc Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Mon, 11 Nov 2024 08:10:33 +0100 Subject: [PATCH 030/216] Allow inline editing of expenses --- app/ui/expenses/table.tsx | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/app/ui/expenses/table.tsx b/app/ui/expenses/table.tsx index 55a0bbe..5161cfe 100644 --- a/app/ui/expenses/table.tsx +++ b/app/ui/expenses/table.tsx @@ -5,10 +5,31 @@ import React, { useState } from "react" import { Expense } from '@/app/lib/definitions'; import TableOfContents from "../components/table-of-contents"; +import InlineTextField from "../components/form/inlineTextField"; +import { getCsrfToken } from '@/app/lib/utils'; export default function ExpensesTable() { const [expenses, setExpenses] = useState>([]); + const handleExpenseUpdate = (expense: Expense) => { + fetch(`/api/expenses/${expense.id}`, + { + method: 'PUT', + body: JSON.stringify({ + expense: { + name: expense.name, + amount: expense.amount, + pricing_type: expense.pricingType, + } + }), + headers: { + 'Content-Type': 'application/json', + 'X-CSRF-TOKEN': getCsrfToken(), + } + }) + .catch((error) => console.error(error)); + } + function loadExpenses() { fetch("/api/expenses") .then((response) => response.json()) @@ -30,16 +51,16 @@ export default function ExpensesTable() { return ( ( - {expense.name} + { expense.name = value; handleExpenseUpdate(expense) }} /> - {expense.amount}€ + { expense.amount = parseFloat(value); handleExpenseUpdate(expense) }} /> {expense.pricingType} From 3b0a3b25cd99fe2985f5bfd017e67e6b8ae73e38 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 12 Nov 2024 01:08:24 +0000 Subject: [PATCH 031/216] Update dependency postcss to v8.4.49 --- package.json | 2 +- pnpm-lock.yaml | 46 +++++++++++++++++++++++----------------------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/package.json b/package.json index 8d9b337..53f7f5c 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "clsx": "^2.1.1", "next": "15.0.3", "next-auth": "5.0.0-beta.25", - "postcss": "8.4.48", + "postcss": "8.4.49", "primeicons": "^7.0.0", "primereact": "^10.8.2", "react": "19.0.0-rc-f38c22b244-20240704", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9874031..5496d08 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,7 +16,7 @@ importers: version: 0.5.9(tailwindcss@3.4.14) autoprefixer: specifier: 10.4.20 - version: 10.4.20(postcss@8.4.48) + version: 10.4.20(postcss@8.4.49) bcrypt: specifier: ^5.1.1 version: 5.1.1 @@ -30,8 +30,8 @@ importers: specifier: 5.0.0-beta.25 version: 5.0.0-beta.25(next@15.0.3(@playwright/test@1.48.2)(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: - specifier: 8.4.48 - version: 8.4.48 + specifier: 8.4.49 + version: 8.4.49 primeicons: specifier: ^7.0.0 version: 7.0.0 @@ -893,8 +893,8 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.4.48: - resolution: {integrity: sha512-GCRK8F6+Dl7xYniR5a4FYbpBzU8XnZVeowqsQFYdcXuSbChgiks7qybSkbvnaeqv0G0B+dd9/jJgH8kkLDQeEA==} + postcss@8.4.49: + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} engines: {node: ^10 || ^12 || >=14} preact-render-to-string@5.2.3: @@ -1418,14 +1418,14 @@ snapshots: arg@5.0.2: {} - autoprefixer@10.4.20(postcss@8.4.48): + autoprefixer@10.4.20(postcss@8.4.49): dependencies: browserslist: 4.23.3 caniuse-lite: 1.0.30001651 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.1 - postcss: 8.4.48 + postcss: 8.4.49 postcss-value-parser: 4.2.0 balanced-match@1.0.2: {} @@ -1834,28 +1834,28 @@ snapshots: optionalDependencies: fsevents: 2.3.2 - postcss-import@15.1.0(postcss@8.4.48): + postcss-import@15.1.0(postcss@8.4.49): dependencies: - postcss: 8.4.48 + postcss: 8.4.49 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - postcss-js@4.0.1(postcss@8.4.48): + postcss-js@4.0.1(postcss@8.4.49): dependencies: camelcase-css: 2.0.1 - postcss: 8.4.48 + postcss: 8.4.49 - postcss-load-config@4.0.2(postcss@8.4.48): + postcss-load-config@4.0.2(postcss@8.4.49): dependencies: lilconfig: 3.1.1 yaml: 2.4.3 optionalDependencies: - postcss: 8.4.48 + postcss: 8.4.49 - postcss-nested@6.0.1(postcss@8.4.48): + postcss-nested@6.0.1(postcss@8.4.49): dependencies: - postcss: 8.4.48 + postcss: 8.4.49 postcss-selector-parser: 6.1.0 postcss-selector-parser@6.1.0: @@ -1868,10 +1868,10 @@ snapshots: postcss@8.4.31: dependencies: nanoid: 3.3.7 - picocolors: 1.1.0 + picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.4.48: + postcss@8.4.49: dependencies: nanoid: 3.3.7 picocolors: 1.1.1 @@ -2071,11 +2071,11 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.1.0 - postcss: 8.4.48 - postcss-import: 15.1.0(postcss@8.4.48) - postcss-js: 4.0.1(postcss@8.4.48) - postcss-load-config: 4.0.2(postcss@8.4.48) - postcss-nested: 6.0.1(postcss@8.4.48) + postcss: 8.4.49 + postcss-import: 15.1.0(postcss@8.4.49) + postcss-js: 4.0.1(postcss@8.4.49) + postcss-load-config: 4.0.2(postcss@8.4.49) + postcss-nested: 6.0.1(postcss@8.4.49) postcss-selector-parser: 6.1.0 resolve: 1.22.8 sucrase: 3.35.0 @@ -2117,7 +2117,7 @@ snapshots: dependencies: browserslist: 4.23.3 escalade: 3.1.2 - picocolors: 1.1.0 + picocolors: 1.1.1 use-debounce@10.0.4(react@19.0.0-rc-f38c22b244-20240704): dependencies: From a8d01bcf88e57e4cce8d35da480b86c834092564 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 12 Nov 2024 01:08:30 +0000 Subject: [PATCH 032/216] Update dependency node to v23.2.0 --- .nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nvmrc b/.nvmrc index ed1add2..3bc99c2 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -23.1.0 \ No newline at end of file +23.2.0 \ No newline at end of file From 2985c8b73f48b10a77c3613405cff1045f326af6 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Wed, 13 Nov 2024 08:16:10 +0100 Subject: [PATCH 033/216] Display a tab with information about groups --- app/dashboard/guests/page.tsx | 28 ++++++++----- app/lib/definitions.ts | 11 +++++ app/ui/groups/table.tsx | 75 +++++++++++++++++++++++++++++++++++ 3 files changed, 105 insertions(+), 9 deletions(-) create mode 100644 app/ui/groups/table.tsx diff --git a/app/dashboard/guests/page.tsx b/app/dashboard/guests/page.tsx index 2b65f56..2ce7335 100644 --- a/app/dashboard/guests/page.tsx +++ b/app/dashboard/guests/page.tsx @@ -1,24 +1,34 @@ /* Copyright (C) 2024 Manuel Bustillo*/ -import { lusitana } from '@/app/ui/fonts'; import AffinityGroupsTree from '@/app/ui/guests/affinity-groups-tree'; import GuestsTable from '@/app/ui/guests/table'; import React, { Suspense } from 'react'; import SkeletonTable from '@/app/ui/guests/skeleton-row'; - - +import { TabView, TabPanel } from 'primereact/tabview'; +import GroupsTable from '@/app/ui/groups/table'; export default function Page() { return (
-

Guests

-
- }> - - -
+ + +
+ }> + + +
+ + +
+ }> + + +
+ +
+ ); } \ No newline at end of file diff --git a/app/lib/definitions.ts b/app/lib/definitions.ts index 07eef8b..3ea3fe1 100644 --- a/app/lib/definitions.ts +++ b/app/lib/definitions.ts @@ -47,8 +47,19 @@ export type Group = { guest_count: number; icon: string; children: Group[]; + color: string; + attendance?: AttendanceSummary }; +export type AttendanceSummary = { + considered: number; + invited: number; + confirmed: number; + declined: number; + tentative: number; + total: number; +} + export type Invoice = { id: string; customer_id: string; diff --git a/app/ui/groups/table.tsx b/app/ui/groups/table.tsx new file mode 100644 index 0000000..387c7ea --- /dev/null +++ b/app/ui/groups/table.tsx @@ -0,0 +1,75 @@ +/* Copyright (C) 2024 Manuel Bustillo*/ + +'use client'; + +import TableOfContents from '../components/table-of-contents'; +import React, { useState } from 'react'; +import { Group } from '@/app/lib/definitions'; + +export default function GroupsTable() { + const [groups, setGroups] = useState>([]); + const [groupsLoaded, setGroupsLoaded] = useState(false); + + function loadGroups() { + fetch("/api/groups") + .then((response) => response.json()) + .then((data) => { + setGroups(data.map((record: any) => { + return ({ + id: record.id, + name: record.name, + color: record.color, + attendance: { + considered: record.considered, + invited: record.invited, + confirmed: record.confirmed, + tentative: record.tentative, + declined: record.declined, + total: record.total, + } + }); + })); + setGroupsLoaded(true); + }, (error) => { + return []; + }); + } + + !groupsLoaded && loadGroups(); + + return ( + ( + + + {group.name} + + +
+ + + {group.attendance?.confirmed} + + + {group.attendance?.tentative} + + + {group.attendance?.invited} + + + {group.attendance?.declined} + + + {group.attendance?.considered} + + + {group.attendance?.total} + + + )} + /> + ) +} From a6c517f8a10399dd4024d4c659777b2fb4aef058 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Wed, 13 Nov 2024 08:47:50 +0100 Subject: [PATCH 034/216] Adjust styles of confirmed column --- app/ui/groups/table.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/ui/groups/table.tsx b/app/ui/groups/table.tsx index 387c7ea..9b4e76b 100644 --- a/app/ui/groups/table.tsx +++ b/app/ui/groups/table.tsx @@ -50,22 +50,22 @@ export default function GroupsTable() {
- + {group.attendance?.confirmed} - + {group.attendance?.tentative} - + {group.attendance?.invited} - + {group.attendance?.declined} - + {group.attendance?.considered} - + {group.attendance?.total} From 3e9775af9967019c64be6926b5ef6e0fe3c0856d Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Wed, 13 Nov 2024 08:58:55 +0100 Subject: [PATCH 035/216] Make color optional in a group --- app/lib/definitions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/lib/definitions.ts b/app/lib/definitions.ts index 3ea3fe1..572914b 100644 --- a/app/lib/definitions.ts +++ b/app/lib/definitions.ts @@ -47,7 +47,7 @@ export type Group = { guest_count: number; icon: string; children: Group[]; - color: string; + color?: string; attendance?: AttendanceSummary }; From 39907b0105d16d2d6837df155ed1d8b9f30312d4 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Wed, 13 Nov 2024 19:09:50 +0100 Subject: [PATCH 036/216] Fix tests --- app/dashboard/layout.tsx | 2 +- tests/guests.spec.ts | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/dashboard/layout.tsx b/app/dashboard/layout.tsx index d179387..69055f9 100644 --- a/app/dashboard/layout.tsx +++ b/app/dashboard/layout.tsx @@ -8,7 +8,7 @@ export default function Layout({ children }: { children: React.ReactNode }) {
-
{children}
+
{children}
); } \ No newline at end of file diff --git a/tests/guests.spec.ts b/tests/guests.spec.ts index 05e7215..02a8bc7 100644 --- a/tests/guests.spec.ts +++ b/tests/guests.spec.ts @@ -1,7 +1,8 @@ import { test, expect } from '@playwright/test' - + test('should navigate to the guests page', async ({ page }) => { await page.goto('/dashboard/guests') - await expect(page.getByRole('heading', { name: 'Guests' })).toContainText('Guests') + await expect(page.getByRole('tab', { name: 'Groups' })).toContainText('Groups') + await expect(page.getByRole('tab', { name: 'Guests' })).toContainText('Guests') }) \ No newline at end of file From 321294c97d3ba4c864cba3dd7955dd47e523096d Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Thu, 14 Nov 2024 00:00:14 +0100 Subject: [PATCH 037/216] Improve Playwright tests of the guests page --- tests/guests.spec.ts | 53 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 50 insertions(+), 3 deletions(-) diff --git a/tests/guests.spec.ts b/tests/guests.spec.ts index 02a8bc7..26c92b6 100644 --- a/tests/guests.spec.ts +++ b/tests/guests.spec.ts @@ -1,8 +1,55 @@ import { test, expect } from '@playwright/test' -test('should navigate to the guests page', async ({ page }) => { +test('should display the list of guests', async ({ page }) => { + await page.route('*/**/api/guests.json', async route => { + const json = { + data: [ + { + "id": "f4a09c28-40ea-4553-90a5-96935a59cac6", + "type": "guest", + "attributes": { + "id": "f4a09c28-40ea-4553-90a5-96935a59cac6", + "group_id": "2fcb8b22-6b07-4c34-92e3-a2535dbc5b14", + "status": "Tentative", + "name": "Kristofer Rohan DVM", + "group_name": "Childhood friends" + } + }, + { + "id": "bd585c40-0937-4cde-960a-bb23acfd6f18", + "type": "guest", + "attributes": { + "id": "bd585c40-0937-4cde-960a-bb23acfd6f18", + "group_id": "da8edf26-3e1e-4cbb-b985-450c49fffe01", + "status": "Invited", + "name": "Olevia Quigley Jr.", + "group_name": "Work" + } + }, + ] + }; + + await route.fulfill({json}) + }) + await page.goto('/dashboard/guests') - await expect(page.getByRole('tab', { name: 'Groups' })).toContainText('Groups') - await expect(page.getByRole('tab', { name: 'Guests' })).toContainText('Guests') + await expect(page.getByRole('tab', { name: 'Groups' })).toBeVisible(); + await expect(page.getByRole('tab', { name: 'Guests' })).toBeVisible(); + + await expect(page.getByText('There are 2 elements in the list')).toBeVisible(); + + await expect(page.getByRole('row').nth(1).getByRole('cell', { name: 'Kristofer Rohan DVM' })).toBeVisible(); + await expect(page.getByRole('row').nth(1).getByRole('cell', { name: 'Childhood friends' })).toBeVisible(); + await expect(page.getByRole('row').nth(1).getByRole('cell', { name: 'Tentative' })).toBeVisible(); + await expect(page.getByRole('row').nth(1).getByRole('button', {name: 'Confirm'})).toBeVisible(); + await expect(page.getByRole('row').nth(1).getByRole('button', {name: 'Decline'})).toBeVisible(); + + + await expect(page.getByRole('row').nth(2).getByRole('cell', { name: 'Olevia Quigley Jr.' })).toBeVisible(); + await expect(page.getByRole('row').nth(2).getByRole('cell', { name: 'Work' })).toBeVisible(); + await expect(page.getByRole('row').nth(2).getByRole('cell', { name: 'Invited' })).toBeVisible(); + await expect(page.getByRole('row').nth(2).getByRole('button', {name: 'Confirm'})).toBeVisible(); + await expect(page.getByRole('row').nth(2).getByRole('button', {name: 'Tentative'})).toBeVisible(); + await expect(page.getByRole('row').nth(2).getByRole('button', {name: 'Decline'})).toBeVisible(); }) \ No newline at end of file From a4815c6f14ca9309fcb0991f3b2723e730934aa3 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Thu, 14 Nov 2024 00:24:07 +0100 Subject: [PATCH 038/216] Include playwright test for changing guest name --- tests/guests.spec.ts | 41 ++++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/tests/guests.spec.ts b/tests/guests.spec.ts index 26c92b6..d56c5dd 100644 --- a/tests/guests.spec.ts +++ b/tests/guests.spec.ts @@ -1,7 +1,7 @@ -import { test, expect } from '@playwright/test' +import { test, expect, Page } from '@playwright/test' -test('should display the list of guests', async ({ page }) => { - await page.route('*/**/api/guests.json', async route => { +const mockGuestsAPI = ({ page }: { page: Page }) => { + page.route('*/**/api/guests.json', async route => { const json = { data: [ { @@ -29,10 +29,14 @@ test('should display the list of guests', async ({ page }) => { ] }; - await route.fulfill({json}) + await route.fulfill({ json }) }) +} - await page.goto('/dashboard/guests') +test('should display the list of guests', async ({ page }) => { + await mockGuestsAPI({ page }); + + await page.goto('/dashboard/guests'); await expect(page.getByRole('tab', { name: 'Groups' })).toBeVisible(); await expect(page.getByRole('tab', { name: 'Guests' })).toBeVisible(); @@ -42,14 +46,29 @@ test('should display the list of guests', async ({ page }) => { await expect(page.getByRole('row').nth(1).getByRole('cell', { name: 'Kristofer Rohan DVM' })).toBeVisible(); await expect(page.getByRole('row').nth(1).getByRole('cell', { name: 'Childhood friends' })).toBeVisible(); await expect(page.getByRole('row').nth(1).getByRole('cell', { name: 'Tentative' })).toBeVisible(); - await expect(page.getByRole('row').nth(1).getByRole('button', {name: 'Confirm'})).toBeVisible(); - await expect(page.getByRole('row').nth(1).getByRole('button', {name: 'Decline'})).toBeVisible(); + await expect(page.getByRole('row').nth(1).getByRole('button', { name: 'Confirm' })).toBeVisible(); + await expect(page.getByRole('row').nth(1).getByRole('button', { name: 'Decline' })).toBeVisible(); await expect(page.getByRole('row').nth(2).getByRole('cell', { name: 'Olevia Quigley Jr.' })).toBeVisible(); await expect(page.getByRole('row').nth(2).getByRole('cell', { name: 'Work' })).toBeVisible(); await expect(page.getByRole('row').nth(2).getByRole('cell', { name: 'Invited' })).toBeVisible(); - await expect(page.getByRole('row').nth(2).getByRole('button', {name: 'Confirm'})).toBeVisible(); - await expect(page.getByRole('row').nth(2).getByRole('button', {name: 'Tentative'})).toBeVisible(); - await expect(page.getByRole('row').nth(2).getByRole('button', {name: 'Decline'})).toBeVisible(); -}) \ No newline at end of file + await expect(page.getByRole('row').nth(2).getByRole('button', { name: 'Confirm' })).toBeVisible(); + await expect(page.getByRole('row').nth(2).getByRole('button', { name: 'Tentative' })).toBeVisible(); + await expect(page.getByRole('row').nth(2).getByRole('button', { name: 'Decline' })).toBeVisible(); +}); + +test('should allow changing the name of a guest', async ({ page }) => { + await mockGuestsAPI({ page }); + + await page.goto('/dashboard/guests'); + + await expect(page.getByRole('row').nth(1).getByRole('cell', { name: 'Kristofer Rohan DVM' })).toBeVisible(); + + await page.getByRole('row').nth(1).getByRole('cell', { name: 'Kristofer Rohan DVM' }).click(); + await page.getByRole('textbox').clear(); + await page.getByRole('textbox').pressSequentially('John Snow'); + await page.getByRole('textbox').evaluate(e => e.blur()); + + await expect(page.getByRole('row').nth(1).getByRole('cell', { name: 'John Snow' })).toBeVisible(); +}); \ No newline at end of file From a7c59f3f0f3c63a30a986532879dc0ae4496281e Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Thu, 14 Nov 2024 00:34:15 +0100 Subject: [PATCH 039/216] Test the display of groups --- tests/guests.spec.ts | 47 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/tests/guests.spec.ts b/tests/guests.spec.ts index d56c5dd..d34ab37 100644 --- a/tests/guests.spec.ts +++ b/tests/guests.spec.ts @@ -33,6 +33,41 @@ const mockGuestsAPI = ({ page }: { page: Page }) => { }) } +const mockGroupsAPI = ({ page }: { page: Page }) => { + page.route('*/**/api/groups', async route => { + const json = [ + { + "id": "ee44ffb9-1147-4842-a378-9eaeb0f0871a", + "name": "Pam's family", + "icon": "pi pi-users", + "parent_id": "cd9645e1-02c6-4fb9-bba6-1a960754b01c", + "color": "#ff0000", + "total": 3, + "considered": 2, + "invited": 1, + "confirmed": 0, + "declined": 0, + "tentative": 0 + }, + { + "id": "c8bda6ca-d8af-4bb8-b2bf-e6ec1c21b1e6", + "name": "Pam's work", + "icon": "pi pi-desktop", + "parent_id": "cd9645e1-02c6-4fb9-bba6-1a960754b01c", + "color": "#00ff00", + "total": 2, + "considered": 0, + "invited": 0, + "confirmed": 0, + "declined": 0, + "tentative": 2 + }, + ]; + + await route.fulfill({ json }) + }) +} + test('should display the list of guests', async ({ page }) => { await mockGuestsAPI({ page }); @@ -71,4 +106,16 @@ test('should allow changing the name of a guest', async ({ page }) => { await page.getByRole('textbox').evaluate(e => e.blur()); await expect(page.getByRole('row').nth(1).getByRole('cell', { name: 'John Snow' })).toBeVisible(); +}); + +test('should display the list of groups', async ({ page }) => { + await mockGroupsAPI({ page }); + + await page.goto('/dashboard/guests'); + await page.getByRole('tab', { name: 'Groups' }).click(); + + await expect(page.getByText('There are 2 elements in the list')).toBeVisible(); + + await expect(page.getByRole('row').nth(1).getByRole('cell', { name: "Pam's family" })).toBeVisible(); + await expect(page.getByRole('row').nth(2).getByRole('cell', { name: "Pam's work" })).toBeVisible(); }); \ No newline at end of file From aa68e19ba01bcef3f628749e398794fbeeb2f7b7 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 14 Nov 2024 01:08:12 +0000 Subject: [PATCH 040/216] Update pnpm to v9.13.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 53f7f5c..351f4ed 100644 --- a/package.json +++ b/package.json @@ -33,5 +33,5 @@ "engines": { "node": ">=23.0.0" }, - "packageManager": "pnpm@9.12.3+sha512.cce0f9de9c5a7c95bef944169cc5dfe8741abfb145078c0d508b868056848a87c81e626246cb60967cbd7fd29a6c062ef73ff840d96b3c86c40ac92cf4a813ee" + "packageManager": "pnpm@9.13.0+sha512.beb9e2a803db336c10c9af682b58ad7181ca0fbd0d4119f2b33d5f2582e96d6c0d93c85b23869295b765170fbdaa92890c0da6ada457415039769edf3c959efe" } From c08e95e3b77b180abe213110f8a3d276ce623e4d Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 15 Nov 2024 01:09:09 +0000 Subject: [PATCH 041/216] Update dependency tailwindcss to v3.4.15 --- package.json | 2 +- pnpm-lock.yaml | 59 +++++++++++++++++++++++--------------------------- 2 files changed, 28 insertions(+), 33 deletions(-) diff --git a/package.json b/package.json index 351f4ed..4416ace 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "primereact": "^10.8.2", "react": "19.0.0-rc-f38c22b244-20240704", "react-dom": "19.0.0-rc-f38c22b244-20240704", - "tailwindcss": "3.4.14", + "tailwindcss": "3.4.15", "typescript": "5.6.3", "use-debounce": "^10.0.1", "zod": "^3.23.8" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5496d08..c367c00 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,7 +13,7 @@ importers: version: 2.1.5(react@19.0.0-rc-f38c22b244-20240704) '@tailwindcss/forms': specifier: ^0.5.7 - version: 0.5.9(tailwindcss@3.4.14) + version: 0.5.9(tailwindcss@3.4.15) autoprefixer: specifier: 10.4.20 version: 10.4.20(postcss@8.4.49) @@ -45,8 +45,8 @@ importers: specifier: 19.0.0-rc-f38c22b244-20240704 version: 19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704) tailwindcss: - specifier: 3.4.14 - version: 3.4.14 + specifier: 3.4.15 + version: 3.4.15 typescript: specifier: 5.6.3 version: 5.6.3 @@ -639,8 +639,8 @@ packages: resolution: {integrity: sha512-htOzIMPbpLid/Gq9/zaz9SfExABxqRe1sSCdxntlO/aMD6u0issZQiY25n2GKQUtJ02j7z5sfptlAOMpWWOmvw==} engines: {node: '>=14'} - jiti@1.21.0: - resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + jiti@1.21.6: + resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} hasBin: true jose@5.9.6: @@ -676,8 +676,8 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - micromatch@4.0.7: - resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} mini-svg-data-uri@1.4.4: @@ -824,9 +824,6 @@ packages: picocolors@1.0.1: resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} - picocolors@1.1.0: - resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -876,14 +873,14 @@ packages: ts-node: optional: true - postcss-nested@6.0.1: - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 - postcss-selector-parser@6.1.0: - resolution: {integrity: sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==} + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} engines: {node: '>=4'} postcss-value-parser@4.2.0: @@ -1070,8 +1067,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - tailwindcss@3.4.14: - resolution: {integrity: sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==} + tailwindcss@3.4.15: + resolution: {integrity: sha512-r4MeXnfBmSOuKUWmXe6h2CcyfzJCEk4F0pptO5jlnYSIViUkVmsawj80N5h2lO3gwcmSb4n3PuN+e+GC1Guylw==} engines: {node: '>=14.0.0'} hasBin: true @@ -1354,10 +1351,10 @@ snapshots: dependencies: tslib: 2.6.3 - '@tailwindcss/forms@0.5.9(tailwindcss@3.4.14)': + '@tailwindcss/forms@0.5.9(tailwindcss@3.4.15)': dependencies: mini-svg-data-uri: 1.4.4 - tailwindcss: 3.4.14 + tailwindcss: 3.4.15 '@types/bcrypt@5.0.2': dependencies: @@ -1557,7 +1554,7 @@ snapshots: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.7 + micromatch: 4.0.8 fastq@1.17.1: dependencies: @@ -1674,7 +1671,7 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jiti@1.21.0: {} + jiti@1.21.6: {} jose@5.9.6: {} @@ -1698,7 +1695,7 @@ snapshots: merge2@1.4.1: {} - micromatch@4.0.7: + micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 @@ -1816,8 +1813,6 @@ snapshots: picocolors@1.0.1: {} - picocolors@1.1.0: {} - picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -1853,12 +1848,12 @@ snapshots: optionalDependencies: postcss: 8.4.49 - postcss-nested@6.0.1(postcss@8.4.49): + postcss-nested@6.2.0(postcss@8.4.49): dependencies: postcss: 8.4.49 - postcss-selector-parser: 6.1.0 + postcss-selector-parser: 6.1.2 - postcss-selector-parser@6.1.0: + postcss-selector-parser@6.1.2: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 @@ -2055,7 +2050,7 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - tailwindcss@3.4.14: + tailwindcss@3.4.15: dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -2065,18 +2060,18 @@ snapshots: fast-glob: 3.3.2 glob-parent: 6.0.2 is-glob: 4.0.3 - jiti: 1.21.0 + jiti: 1.21.6 lilconfig: 2.1.0 - micromatch: 4.0.7 + micromatch: 4.0.8 normalize-path: 3.0.0 object-hash: 3.0.0 - picocolors: 1.1.0 + picocolors: 1.1.1 postcss: 8.4.49 postcss-import: 15.1.0(postcss@8.4.49) postcss-js: 4.0.1(postcss@8.4.49) postcss-load-config: 4.0.2(postcss@8.4.49) - postcss-nested: 6.0.1(postcss@8.4.49) - postcss-selector-parser: 6.1.0 + postcss-nested: 6.2.0(postcss@8.4.49) + postcss-selector-parser: 6.1.2 resolve: 1.22.8 sucrase: 3.35.0 transitivePeerDependencies: From 03f2d87b6ef016b7955f1191f2b57978e319503f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 15 Nov 2024 01:09:55 +0000 Subject: [PATCH 042/216] Update pnpm to v9.13.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4416ace..fb64063 100644 --- a/package.json +++ b/package.json @@ -33,5 +33,5 @@ "engines": { "node": ">=23.0.0" }, - "packageManager": "pnpm@9.13.0+sha512.beb9e2a803db336c10c9af682b58ad7181ca0fbd0d4119f2b33d5f2582e96d6c0d93c85b23869295b765170fbdaa92890c0da6ada457415039769edf3c959efe" + "packageManager": "pnpm@9.13.1+sha512.5ac37545851c55ec58521b6c285db6f848f93ca70889beb4145f5b40fe234e4ea4faee4dad12ac5c139e494374c65d9c3a6ec9a25954378fa286a250e68d2f20" } From 567ce207cf9028e6aff3ffc82357af0d08d987ff Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sat, 16 Nov 2024 00:45:45 +0100 Subject: [PATCH 043/216] Adapt the guests table to use the new API format --- app/lib/definitions.ts | 2 +- app/ui/guests/table.tsx | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/app/lib/definitions.ts b/app/lib/definitions.ts index 572914b..f1d3641 100644 --- a/app/lib/definitions.ts +++ b/app/lib/definitions.ts @@ -23,7 +23,7 @@ export type Guest = { name: string; group_name?: string; color?: string; - status?: 'Considered' | 'Invited' | 'Confirmed' | 'Declined' | 'Tentative'; + status?: 'considered' | 'invited' | 'confirmed' | 'declined' | 'tentative'; } export type Expense = { diff --git a/app/ui/guests/table.tsx b/app/ui/guests/table.tsx index 6e8d5ad..6d93e3b 100644 --- a/app/ui/guests/table.tsx +++ b/app/ui/guests/table.tsx @@ -17,12 +17,12 @@ export default function guestsTable() { fetch("/api/guests.json") .then((response) => response.json()) .then((data) => { - setGuests(data.data.map((record: any) => { + setGuests(data.map((record: any) => { return ({ id: record.id, - name: record.attributes.name, - group_name: record.attributes.group_name, - status: record.attributes.status + name: record.name, + status: record.status, + group_name: record.group.name, }); })); }, (error) => { @@ -82,11 +82,11 @@ export default function guestsTable() { @@ -94,13 +94,13 @@ export default function guestsTable() { - {guest.status === 'Considered' && ()} - {(guest.status === 'Invited' || guest.status === 'Tentative') && ( + {(guest.status === 'invited' || guest.status === 'tentative') && ( <> - {guest.status != 'Tentative' && } + {guest.status != 'tentative' && } )} From 6fcf7d87a860161ce8efe00cc9f20da271269b50 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sat, 16 Nov 2024 00:49:04 +0100 Subject: [PATCH 044/216] Adapt guest spec tests to the new API format --- tests/guests.spec.ts | 46 +++++++++++++++++++------------------------- 1 file changed, 20 insertions(+), 26 deletions(-) diff --git a/tests/guests.spec.ts b/tests/guests.spec.ts index d34ab37..cabc6ad 100644 --- a/tests/guests.spec.ts +++ b/tests/guests.spec.ts @@ -2,32 +2,26 @@ import { test, expect, Page } from '@playwright/test' const mockGuestsAPI = ({ page }: { page: Page }) => { page.route('*/**/api/guests.json', async route => { - const json = { - data: [ - { - "id": "f4a09c28-40ea-4553-90a5-96935a59cac6", - "type": "guest", - "attributes": { - "id": "f4a09c28-40ea-4553-90a5-96935a59cac6", - "group_id": "2fcb8b22-6b07-4c34-92e3-a2535dbc5b14", - "status": "Tentative", - "name": "Kristofer Rohan DVM", - "group_name": "Childhood friends" - } - }, - { - "id": "bd585c40-0937-4cde-960a-bb23acfd6f18", - "type": "guest", - "attributes": { - "id": "bd585c40-0937-4cde-960a-bb23acfd6f18", - "group_id": "da8edf26-3e1e-4cbb-b985-450c49fffe01", - "status": "Invited", - "name": "Olevia Quigley Jr.", - "group_name": "Work" - } - }, - ] - }; + const json = [ + { + "id": "f4a09c28-40ea-4553-90a5-96935a59cac6", + "status": "Tentative", + "name": "Kristofer Rohan DVM", + "group": { + "id": "2fcb8b22-6b07-4c34-92e3-a2535dbc5b14", + "name": "Childhood friends", + } + }, + { + "id": "bd585c40-0937-4cde-960a-bb23acfd6f18", + "status": "Invited", + "name": "Olevia Quigley Jr.", + "group": { + "id": "da8edf26-3e1e-4cbb-b985-450c49fffe01", + "name": "Work", + } + }, + ]; await route.fulfill({ json }) }) From 3231d5caa8ec53471f3ab32ad90ab70887a9cfb0 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 16 Nov 2024 01:09:33 +0000 Subject: [PATCH 045/216] Update pnpm to v9.13.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fb64063..cd0557c 100644 --- a/package.json +++ b/package.json @@ -33,5 +33,5 @@ "engines": { "node": ">=23.0.0" }, - "packageManager": "pnpm@9.13.1+sha512.5ac37545851c55ec58521b6c285db6f848f93ca70889beb4145f5b40fe234e4ea4faee4dad12ac5c139e494374c65d9c3a6ec9a25954378fa286a250e68d2f20" + "packageManager": "pnpm@9.13.2+sha512.88c9c3864450350e65a33587ab801acf946d7c814ed1134da4a924f6df5a2120fd36b46aab68f7cd1d413149112d53c7db3a4136624cfd00ff1846a0c6cef48a" } From 7b62992a5f0f37ffc236bd7a6659e26c7ebe60a7 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 17 Nov 2024 11:39:56 +0100 Subject: [PATCH 046/216] Fix lowercase issues in API mocks for playwright --- tests/guests.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/guests.spec.ts b/tests/guests.spec.ts index cabc6ad..5fc76bc 100644 --- a/tests/guests.spec.ts +++ b/tests/guests.spec.ts @@ -5,7 +5,7 @@ const mockGuestsAPI = ({ page }: { page: Page }) => { const json = [ { "id": "f4a09c28-40ea-4553-90a5-96935a59cac6", - "status": "Tentative", + "status": "tentative", "name": "Kristofer Rohan DVM", "group": { "id": "2fcb8b22-6b07-4c34-92e3-a2535dbc5b14", @@ -14,7 +14,7 @@ const mockGuestsAPI = ({ page }: { page: Page }) => { }, { "id": "bd585c40-0937-4cde-960a-bb23acfd6f18", - "status": "Invited", + "status": "invited", "name": "Olevia Quigley Jr.", "group": { "id": "da8edf26-3e1e-4cbb-b985-450c49fffe01", From 3cca58cfb09a1477b0b52fc0766d98addd2b74ac Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 17 Nov 2024 16:10:01 +0100 Subject: [PATCH 047/216] Define a dialog to create a new guest --- app/dashboard/guests/page.tsx | 88 ++++++++++++++++++++++++--- app/ui/components/button.tsx | 2 +- app/ui/components/creation-dialog.tsx | 60 ++++++++++++++++++ app/ui/groups/table.tsx | 34 +---------- app/ui/guests/table.tsx | 59 +++++------------- 5 files changed, 158 insertions(+), 85 deletions(-) create mode 100644 app/ui/components/creation-dialog.tsx diff --git a/app/dashboard/guests/page.tsx b/app/dashboard/guests/page.tsx index 2ce7335..67bb05f 100644 --- a/app/dashboard/guests/page.tsx +++ b/app/dashboard/guests/page.tsx @@ -1,29 +1,101 @@ /* Copyright (C) 2024 Manuel Bustillo*/ -import AffinityGroupsTree from '@/app/ui/guests/affinity-groups-tree'; -import GuestsTable from '@/app/ui/guests/table'; -import React, { Suspense } from 'react'; -import SkeletonTable from '@/app/ui/guests/skeleton-row'; -import { TabView, TabPanel } from 'primereact/tabview'; +'use client'; + +import { Group, Guest } from '@/app/lib/definitions'; +import { getCsrfToken } from '@/app/lib/utils'; +import CreationDialog from '@/app/ui/components/creation-dialog'; import GroupsTable from '@/app/ui/groups/table'; +import AffinityGroupsTree from '@/app/ui/guests/affinity-groups-tree'; +import SkeletonTable from '@/app/ui/guests/skeleton-row'; +import GuestsTable from '@/app/ui/guests/table'; +import { TabPanel, TabView } from 'primereact/tabview'; +import { Suspense, useState } from 'react'; export default function Page() { + function loadGroups() { + fetch("/api/groups") + .then((response) => response.json()) + .then((data) => { + setGroups(data.map((record: any) => { + return ({ + id: record.id, + name: record.name, + color: record.color, + attendance: { + considered: record.considered, + invited: record.invited, + confirmed: record.confirmed, + tentative: record.tentative, + declined: record.declined, + total: record.total, + } + }); + })); + setGroupsLoaded(true); + }, (error) => { + return []; + }); + } + + function loadGuests() { + fetch("/api/guests.json") + .then((response) => response.json()) + .then((data) => { + setGuests(data.map((record: any) => { + return ({ + id: record.id, + name: record.name, + status: record.status, + group_name: record.group.name, + }); + })); + setGuestsLoaded(true); + }, (error) => { + return []; + }); + }; + + const updateGuestStatus = (id: string, status: string) => { + fetch("/api/guests/bulk_update.json", + { + method: 'POST', + body: JSON.stringify({ properties: { status: status }, guest_ids: [id] }), + headers: { + 'Content-Type': 'application/json', + 'X-CSRF-TOKEN': getCsrfToken(), + } + }) + .then(() => loadGuests()) + .catch((error) => console.error(error)); + } + + const [groupsLoaded, setGroupsLoaded] = useState(false); + const [groups, setGroups] = useState>([]); + + const [guestsLoaded, setGuestsLoaded] = useState(false); + const [guests, setGuests] = useState>([]); + + !groupsLoaded && loadGroups(); + !guestsLoaded && loadGuests(); + return (
-
+
+ ; }> - +
}> - +
diff --git a/app/ui/components/button.tsx b/app/ui/components/button.tsx index 76906a2..6b65ba0 100644 --- a/app/ui/components/button.tsx +++ b/app/ui/components/button.tsx @@ -5,7 +5,7 @@ import clsx from "clsx"; type ButtonColor = 'primary' | 'blue' | 'green' | 'red' | 'yellow'; export function classNames(type: ButtonColor) { - return(clsx("text-white py-1 px-2 mx-1 rounded", { + return (clsx("text-white py-1 px-2 mx-1 rounded disabled:opacity-50 disabled:cursor-not-allowed", { 'bg-blue-400 hover:bg-blue-600': type === 'primary' || type === 'blue', 'bg-green-500 hover:bg-green-600': type === 'green', 'bg-red-500 hover:bg-red-600': type === 'red', diff --git a/app/ui/components/creation-dialog.tsx b/app/ui/components/creation-dialog.tsx new file mode 100644 index 0000000..ed69937 --- /dev/null +++ b/app/ui/components/creation-dialog.tsx @@ -0,0 +1,60 @@ +/* Copyright (C) 2024 Manuel Bustillo*/ + +'use client'; + +import { Group } from '@/app/lib/definitions'; +import { getCsrfToken } from '@/app/lib/utils'; +import { classNames } from '@/app/ui/components/button'; +import { Dialog } from 'primereact/dialog'; +import { Dropdown } from 'primereact/dropdown'; +import { FloatLabel } from 'primereact/floatlabel'; +import { InputText } from 'primereact/inputtext'; +import { useState } from 'react'; + +export default function CreationDialog({ groups, onCreate }: { groups: Group[], onCreate?: () => void }) { + const [visible, setVisible] = useState(false); + + const [name, setName] = useState(''); + const [group, setGroup] = useState(null); + function createGuest() { + fetch("/api/guests", { + method: 'POST', + body: JSON.stringify({ name: name, group_id: group }), + headers: { + 'Content-Type': 'application/json', + 'X-CSRF-TOKEN': getCsrfToken(), + } + }) + .then((response) => response.json()) + .then((data) => { + console.log(data); + setVisible(false); + onCreate && onCreate(); + }) + .catch((error) => console.error(error)); + } + + return ( + <> + + + { if (!visible) return; setVisible(false); }}> +
+ + setName(e.target.value)} /> + + + + setGroup(e.target.value)} options={ + groups.map((group) => { + return { label: group.name, value: group.id }; + }) + } /> + + + +
+
+ + ); +} \ No newline at end of file diff --git a/app/ui/groups/table.tsx b/app/ui/groups/table.tsx index 9b4e76b..354c229 100644 --- a/app/ui/groups/table.tsx +++ b/app/ui/groups/table.tsx @@ -2,40 +2,10 @@ 'use client'; -import TableOfContents from '../components/table-of-contents'; -import React, { useState } from 'react'; import { Group } from '@/app/lib/definitions'; +import TableOfContents from '../components/table-of-contents'; -export default function GroupsTable() { - const [groups, setGroups] = useState>([]); - const [groupsLoaded, setGroupsLoaded] = useState(false); - - function loadGroups() { - fetch("/api/groups") - .then((response) => response.json()) - .then((data) => { - setGroups(data.map((record: any) => { - return ({ - id: record.id, - name: record.name, - color: record.color, - attendance: { - considered: record.considered, - invited: record.invited, - confirmed: record.confirmed, - tentative: record.tentative, - declined: record.declined, - total: record.total, - } - }); - })); - setGroupsLoaded(true); - }, (error) => { - return []; - }); - } - - !groupsLoaded && loadGroups(); +export default function GroupsTable({ groups }: { groups: Group[] }) { return ( >([]); - - function loadGuests() { - fetch("/api/guests.json") - .then((response) => response.json()) - .then((data) => { - setGuests(data.map((record: any) => { - return ({ - id: record.id, - name: record.name, - status: record.status, - group_name: record.group.name, - }); - })); - }, (error) => { - return []; - }); - }; - +export default function guestsTable({ guests, updateGuestStatus }: { guests: Guest[], updateGuestStatus: (id: string, status: string) => void }) { const handleInviteGuest = (e: React.MouseEvent) => handleGuestChange(e, 'invited'); const handleConfirmGuest = (e: React.MouseEvent) => handleGuestChange(e, 'confirmed'); const handleDeclineGuest = (e: React.MouseEvent) => handleGuestChange(e, 'declined'); const handleTentativeGuest = (e: React.MouseEvent) => handleGuestChange(e, 'tentative'); - const handleGuestUpdate = (guest:Guest) => { + const handleGuestUpdate = (guest: Guest) => { fetch(`/api/guests/${guest.id}`, - { - method: 'PUT', - body: JSON.stringify({ guest: { name: guest.name } }), - headers: { - 'Content-Type': 'application/json', - 'X-CSRF-TOKEN': getCsrfToken(), - } - }) - .catch((error) => console.error(error)); - } - - const handleGuestChange = (e: React.MouseEvent, status:string) => { - fetch("/api/guests/bulk_update.json", { - method: 'POST', - body: JSON.stringify({ properties: { status: status }, guest_ids: [e.currentTarget.getAttribute('data-guest-id')] }), + method: 'PUT', + body: JSON.stringify({ guest: { name: guest.name } }), headers: { 'Content-Type': 'application/json', 'X-CSRF-TOKEN': getCsrfToken(), } }) - .then(() => loadGuests()) .catch((error) => console.error(error)); } - guests.length === 0 && loadGuests(); + + const handleGuestChange = (e: React.MouseEvent, status: string) => { + updateGuestStatus(e.currentTarget.getAttribute('data-guest-id') || '', status); + } + return ( ( - { guest.name = newName ; handleGuestUpdate(guest) }} /> + { guest.name = newName; handleGuestUpdate(guest) }} /> {guest.group_name} @@ -108,5 +79,5 @@ export default function guestsTable() { )} /> - ); + ); } From 470366b8f6bf877f8e4f074fb603ad9432bdf3a2 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 17 Nov 2024 16:32:10 +0100 Subject: [PATCH 048/216] Extract a guests API --- app/api/guests.tsx | 49 +++++++++++++++++++++++++++ app/dashboard/guests/page.tsx | 41 +++++----------------- app/ui/components/creation-dialog.tsx | 27 +++++---------- 3 files changed, 66 insertions(+), 51 deletions(-) create mode 100644 app/api/guests.tsx diff --git a/app/api/guests.tsx b/app/api/guests.tsx new file mode 100644 index 0000000..0eff296 --- /dev/null +++ b/app/api/guests.tsx @@ -0,0 +1,49 @@ +import { Guest } from '@/app/lib/definitions'; +import { getCsrfToken } from '@/app/lib/utils'; + +export function loadGuests(onLoad?: (guests: Guest[]) => void) { + fetch("/api/guests.json") + .then((response) => response.json()) + .then((data) => { + onLoad && onLoad(data.map((record: any) => { + return ({ + id: record.id, + name: record.name, + status: record.status, + group_name: record.group.name, + }); + })); + }, (error) => { + return []; + }); +}; + +export function updateGuestStatus(id: string, status: string) { + fetch("/api/guests/bulk_update.json", + { + method: 'POST', + body: JSON.stringify({ properties: { status: status }, guest_ids: [id] }), + headers: { + 'Content-Type': 'application/json', + 'X-CSRF-TOKEN': getCsrfToken(), + } + }) + .then(() => loadGuests((guests) => null)) + .catch((error) => console.error(error)); +} + +export function createGuest(name: string, group_id: string, onCreate?: () => void) { + fetch("/api/guests", { + method: 'POST', + body: JSON.stringify({ name: name, group_id: group_id }), + headers: { + 'Content-Type': 'application/json', + 'X-CSRF-TOKEN': getCsrfToken(), + } + }) + .then((response) => response.json()) + .then((data) => { + onCreate && onCreate(); + }) + .catch((error) => console.error(error)); +} \ No newline at end of file diff --git a/app/dashboard/guests/page.tsx b/app/dashboard/guests/page.tsx index 67bb05f..d8f9736 100644 --- a/app/dashboard/guests/page.tsx +++ b/app/dashboard/guests/page.tsx @@ -3,7 +3,6 @@ 'use client'; import { Group, Guest } from '@/app/lib/definitions'; -import { getCsrfToken } from '@/app/lib/utils'; import CreationDialog from '@/app/ui/components/creation-dialog'; import GroupsTable from '@/app/ui/groups/table'; import AffinityGroupsTree from '@/app/ui/guests/affinity-groups-tree'; @@ -11,6 +10,7 @@ import SkeletonTable from '@/app/ui/guests/skeleton-row'; import GuestsTable from '@/app/ui/guests/table'; import { TabPanel, TabView } from 'primereact/tabview'; import { Suspense, useState } from 'react'; +import {loadGuests, updateGuestStatus} from '@/app/api/guests'; export default function Page() { function loadGroups() { @@ -38,36 +38,11 @@ export default function Page() { }); } - function loadGuests() { - fetch("/api/guests.json") - .then((response) => response.json()) - .then((data) => { - setGuests(data.map((record: any) => { - return ({ - id: record.id, - name: record.name, - status: record.status, - group_name: record.group.name, - }); - })); - setGuestsLoaded(true); - }, (error) => { - return []; - }); - }; - - const updateGuestStatus = (id: string, status: string) => { - fetch("/api/guests/bulk_update.json", - { - method: 'POST', - body: JSON.stringify({ properties: { status: status }, guest_ids: [id] }), - headers: { - 'Content-Type': 'application/json', - 'X-CSRF-TOKEN': getCsrfToken(), - } - }) - .then(() => loadGuests()) - .catch((error) => console.error(error)); + function refreshGuests() { + loadGuests((guests) => { + setGuests(guests); + setGuestsLoaded(true); + }); } const [groupsLoaded, setGroupsLoaded] = useState(false); @@ -77,7 +52,7 @@ export default function Page() { const [guests, setGuests] = useState>([]); !groupsLoaded && loadGroups(); - !guestsLoaded && loadGuests(); + !guestsLoaded && refreshGuests(); return (
@@ -86,7 +61,7 @@ export default function Page() {
- ; + }> diff --git a/app/ui/components/creation-dialog.tsx b/app/ui/components/creation-dialog.tsx index ed69937..01b169e 100644 --- a/app/ui/components/creation-dialog.tsx +++ b/app/ui/components/creation-dialog.tsx @@ -2,8 +2,8 @@ 'use client'; +import { createGuest } from '@/app/api/guests'; import { Group } from '@/app/lib/definitions'; -import { getCsrfToken } from '@/app/lib/utils'; import { classNames } from '@/app/ui/components/button'; import { Dialog } from 'primereact/dialog'; import { Dropdown } from 'primereact/dropdown'; @@ -16,22 +16,13 @@ export default function CreationDialog({ groups, onCreate }: { groups: Group[], const [name, setName] = useState(''); const [group, setGroup] = useState(null); - function createGuest() { - fetch("/api/guests", { - method: 'POST', - body: JSON.stringify({ name: name, group_id: group }), - headers: { - 'Content-Type': 'application/json', - 'X-CSRF-TOKEN': getCsrfToken(), - } - }) - .then((response) => response.json()) - .then((data) => { - console.log(data); - setVisible(false); - onCreate && onCreate(); - }) - .catch((error) => console.error(error)); + function submitGuest() { + name && group && createGuest(name, group, () => { + setVisible(false); + setName(''); + setGroup(null); + onCreate && onCreate(); + }); } return ( @@ -52,7 +43,7 @@ export default function CreationDialog({ groups, onCreate }: { groups: Group[], } /> - +
From 53c4938e925869e501ca73e4cb21b30140424c7d Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 17 Nov 2024 16:34:58 +0100 Subject: [PATCH 049/216] Extract groups API --- app/api/groups.tsx | 25 +++++++++++++++++++++++ app/dashboard/guests/page.tsx | 37 ++++++++++------------------------- 2 files changed, 35 insertions(+), 27 deletions(-) create mode 100644 app/api/groups.tsx diff --git a/app/api/groups.tsx b/app/api/groups.tsx new file mode 100644 index 0000000..aeafc4d --- /dev/null +++ b/app/api/groups.tsx @@ -0,0 +1,25 @@ +import { Group } from '@/app/lib/definitions'; + +export function loadGroups(onLoad?: (groups: Group[]) => void) { + fetch("/api/groups.json") + .then((response) => response.json()) + .then((data) => { + onLoad && onLoad(data.map((record: any) => { + return ({ + id: record.id, + name: record.name, + color: record.color, + attendance: { + considered: record.considered, + invited: record.invited, + confirmed: record.confirmed, + tentative: record.tentative, + declined: record.declined, + total: record.total, + } + }); + })); + }, (error) => { + return []; + }); +} \ No newline at end of file diff --git a/app/dashboard/guests/page.tsx b/app/dashboard/guests/page.tsx index d8f9736..c9d7203 100644 --- a/app/dashboard/guests/page.tsx +++ b/app/dashboard/guests/page.tsx @@ -10,34 +10,10 @@ import SkeletonTable from '@/app/ui/guests/skeleton-row'; import GuestsTable from '@/app/ui/guests/table'; import { TabPanel, TabView } from 'primereact/tabview'; import { Suspense, useState } from 'react'; -import {loadGuests, updateGuestStatus} from '@/app/api/guests'; +import { loadGuests, updateGuestStatus } from '@/app/api/guests'; +import { loadGroups } from '@/app/api/groups'; export default function Page() { - function loadGroups() { - fetch("/api/groups") - .then((response) => response.json()) - .then((data) => { - setGroups(data.map((record: any) => { - return ({ - id: record.id, - name: record.name, - color: record.color, - attendance: { - considered: record.considered, - invited: record.invited, - confirmed: record.confirmed, - tentative: record.tentative, - declined: record.declined, - total: record.total, - } - }); - })); - setGroupsLoaded(true); - }, (error) => { - return []; - }); - } - function refreshGuests() { loadGuests((guests) => { setGuests(guests); @@ -45,13 +21,20 @@ export default function Page() { }); } + function refreshGroups() { + loadGroups((groups) => { + setGroups(groups); + setGroupsLoaded(true); + }); + } + const [groupsLoaded, setGroupsLoaded] = useState(false); const [groups, setGroups] = useState>([]); const [guestsLoaded, setGuestsLoaded] = useState(false); const [guests, setGuests] = useState>([]); - !groupsLoaded && loadGroups(); + !groupsLoaded && refreshGroups(); !guestsLoaded && refreshGuests(); return ( From 92d929c8e18d6eff7e709622f11270ea14626d4f Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 17 Nov 2024 16:41:53 +0100 Subject: [PATCH 050/216] Extract expenses API --- app/api/expenses.tsx | 38 ++++++++++++++++ app/ui/expenses/table.tsx | 92 ++++++++++++++------------------------- 2 files changed, 70 insertions(+), 60 deletions(-) create mode 100644 app/api/expenses.tsx diff --git a/app/api/expenses.tsx b/app/api/expenses.tsx new file mode 100644 index 0000000..7cfb3a3 --- /dev/null +++ b/app/api/expenses.tsx @@ -0,0 +1,38 @@ +import { Expense } from '@/app/lib/definitions'; +import { getCsrfToken } from '@/app/lib/utils'; + +export function loadExpenses(onLoad?: (expenses: Expense[]) => void) { + fetch("/api/expenses") + .then((response) => response.json()) + .then((data) => { + onLoad && onLoad(data.map((record: any) => { + return ({ + id: record.id, + name: record.name, + amount: record.amount, + pricingType: record.pricing_type + }); + })); + }, (error) => { + return []; + }); +} + +export function updateExpense(expense: Expense) { + fetch(`/api/expenses/${expense.id}`, + { + method: 'PUT', + body: JSON.stringify({ + expense: { + name: expense.name, + amount: expense.amount, + pricing_type: expense.pricingType, + } + }), + headers: { + 'Content-Type': 'application/json', + 'X-CSRF-TOKEN': getCsrfToken(), + } + }) + .catch((error) => console.error(error)); +} \ No newline at end of file diff --git a/app/ui/expenses/table.tsx b/app/ui/expenses/table.tsx index 5161cfe..121990c 100644 --- a/app/ui/expenses/table.tsx +++ b/app/ui/expenses/table.tsx @@ -2,71 +2,43 @@ 'use client' -import React, { useState } from "react" +import { loadExpenses, updateExpense } from '@/app/api/expenses'; import { Expense } from '@/app/lib/definitions'; -import TableOfContents from "../components/table-of-contents"; +import { useState } from "react"; import InlineTextField from "../components/form/inlineTextField"; -import { getCsrfToken } from '@/app/lib/utils'; +import TableOfContents from "../components/table-of-contents"; export default function ExpensesTable() { - const [expenses, setExpenses] = useState>([]); + const [expenses, setExpenses] = useState>([]); + const [expensesLoaded, setExpensesLoaded] = useState(false); - const handleExpenseUpdate = (expense: Expense) => { - fetch(`/api/expenses/${expense.id}`, - { - method: 'PUT', - body: JSON.stringify({ - expense: { - name: expense.name, - amount: expense.amount, - pricing_type: expense.pricingType, - } - }), - headers: { - 'Content-Type': 'application/json', - 'X-CSRF-TOKEN': getCsrfToken(), - } - }) - .catch((error) => console.error(error)); - } + function refreshExpenses() { + loadExpenses((expenses) => { + setExpenses(expenses); + setExpensesLoaded(true); + }); + } - function loadExpenses() { - fetch("/api/expenses") - .then((response) => response.json()) - .then((data) => { - setExpenses(data.map((record: any) => { - return ({ - id: record.id, - name: record.name, - amount: record.amount, - pricingType: record.pricing_type - }); - })); - }, (error) => { - return []; - }); - } + !expensesLoaded && refreshExpenses(); - expenses.length === 0 && loadExpenses(); - - return ( - ( - - - { expense.name = value; handleExpenseUpdate(expense) }} /> - - - { expense.amount = parseFloat(value); handleExpenseUpdate(expense) }} /> - - - {expense.pricingType} - - - )} - /> - ); + return ( + ( + + + { expense.name = value; updateExpense(expense) }} /> + + + { expense.amount = parseFloat(value); updateExpense(expense) }} /> + + + {expense.pricingType} + + + )} + /> + ); } \ No newline at end of file From 28abb23a771aa908cd713084dfdc8c5d192bc92c Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 17 Nov 2024 16:45:42 +0100 Subject: [PATCH 051/216] Extract a table simulations API --- app/api/tableSimulations.tsx | 17 ++++++++++++++++ app/ui/arrangements/arrangements-table.tsx | 23 ++++++++-------------- 2 files changed, 25 insertions(+), 15 deletions(-) create mode 100644 app/api/tableSimulations.tsx diff --git a/app/api/tableSimulations.tsx b/app/api/tableSimulations.tsx new file mode 100644 index 0000000..51e1fff --- /dev/null +++ b/app/api/tableSimulations.tsx @@ -0,0 +1,17 @@ +import { TableArrangement } from '@/app/lib/definitions'; + +export function loadTableSimulations(onLoad?: (tableSimulations: TableArrangement[]) => void) { + fetch('/api/tables_arrangements') + .then((response) => response.json()) + .then((data) => { + onLoad && onLoad(data.map((record: any) => { + return ({ + id: record.id, + name: record.name, + discomfort: record.discomfort, + }); + })); + }, (error) => { + return []; + }); +} \ No newline at end of file diff --git a/app/ui/arrangements/arrangements-table.tsx b/app/ui/arrangements/arrangements-table.tsx index 66e41d4..57dd67d 100644 --- a/app/ui/arrangements/arrangements-table.tsx +++ b/app/ui/arrangements/arrangements-table.tsx @@ -6,31 +6,24 @@ import React, { useState } from "react" import { TableArrangement } from '@/app/lib/definitions'; import { classNames } from "../components/button"; import TableOfContents from "../components/table-of-contents"; +import { loadTableSimulations } from "@/app/api/tableSimulations"; export default function ArrangementsTable ({onArrangementSelected}: {onArrangementSelected: (arrangementId: string) => void}) { const [arrangements, setArrangements] = useState>([]); + const [arrangementsLoaded, setArrangementsLoaded] = useState(false); - function loadArrangements() { - fetch("/api/tables_arrangements") - .then((response) => response.json()) - .then((data) => { - setArrangements(data.map((record: any) => { - return ({ - id: record.id, - name: record.name, - discomfort: record.discomfort - }); - })); - }, (error) => { - return []; - }); + function refreshSimulations() { + loadTableSimulations((arrangements) => { + setArrangements(arrangements); + setArrangementsLoaded(true); + }); } function arrangementClicked(e: React.MouseEvent) { onArrangementSelected(e.currentTarget.getAttribute('data-arrangement-id') || ''); } - arrangements.length === 0 && loadArrangements(); + !arrangementsLoaded && refreshSimulations(); return( Date: Sun, 17 Nov 2024 16:59:16 +0100 Subject: [PATCH 052/216] Refactor guests API --- app/api/guests.tsx | 9 ++++---- app/dashboard/guests/page.tsx | 4 ++-- app/lib/definitions.ts | 3 ++- app/ui/guests/table.tsx | 42 +++++++++-------------------------- 4 files changed, 19 insertions(+), 39 deletions(-) diff --git a/app/api/guests.tsx b/app/api/guests.tsx index 0eff296..549356c 100644 --- a/app/api/guests.tsx +++ b/app/api/guests.tsx @@ -18,17 +18,16 @@ export function loadGuests(onLoad?: (guests: Guest[]) => void) { }); }; -export function updateGuestStatus(id: string, status: string) { - fetch("/api/guests/bulk_update.json", +export function updateGuest(guest: Guest) { + fetch(`/api/guests/${guest.id}`, { - method: 'POST', - body: JSON.stringify({ properties: { status: status }, guest_ids: [id] }), + method: 'PUT', + body: JSON.stringify({ guest: { name: guest.name, status: guest.status } }), headers: { 'Content-Type': 'application/json', 'X-CSRF-TOKEN': getCsrfToken(), } }) - .then(() => loadGuests((guests) => null)) .catch((error) => console.error(error)); } diff --git a/app/dashboard/guests/page.tsx b/app/dashboard/guests/page.tsx index c9d7203..d575715 100644 --- a/app/dashboard/guests/page.tsx +++ b/app/dashboard/guests/page.tsx @@ -10,7 +10,7 @@ import SkeletonTable from '@/app/ui/guests/skeleton-row'; import GuestsTable from '@/app/ui/guests/table'; import { TabPanel, TabView } from 'primereact/tabview'; import { Suspense, useState } from 'react'; -import { loadGuests, updateGuestStatus } from '@/app/api/guests'; +import { loadGuests } from '@/app/api/guests'; import { loadGroups } from '@/app/api/groups'; export default function Page() { @@ -46,7 +46,7 @@ export default function Page() {
}> - +
diff --git a/app/lib/definitions.ts b/app/lib/definitions.ts index f1d3641..8e7e6ae 100644 --- a/app/lib/definitions.ts +++ b/app/lib/definitions.ts @@ -18,12 +18,13 @@ export type Customer = { image_url: string; }; +export type GuestStatus = 'considered' | 'invited' | 'confirmed' | 'declined' | 'tentative'; export type Guest = { id: string; name: string; group_name?: string; color?: string; - status?: 'considered' | 'invited' | 'confirmed' | 'declined' | 'tentative'; + status?: GuestStatus } export type Expense = { diff --git a/app/ui/guests/table.tsx b/app/ui/guests/table.tsx index 7b6d427..2e6dfae 100644 --- a/app/ui/guests/table.tsx +++ b/app/ui/guests/table.tsx @@ -2,39 +2,19 @@ 'use client'; -import { Guest } from '@/app/lib/definitions'; -import { getCsrfToken } from '@/app/lib/utils'; +import { updateGuest } from '@/app/api/guests'; +import { Guest, GuestStatus } from '@/app/lib/definitions'; import { classNames } from '@/app/ui/components/button'; import clsx from 'clsx'; -import React from 'react'; import InlineTextField from '../components/form/inlineTextField'; import TableOfContents from '../components/table-of-contents'; -export default function guestsTable({ guests, updateGuestStatus }: { guests: Guest[], updateGuestStatus: (id: string, status: string) => void }) { - const handleInviteGuest = (e: React.MouseEvent) => handleGuestChange(e, 'invited'); - const handleConfirmGuest = (e: React.MouseEvent) => handleGuestChange(e, 'confirmed'); - const handleDeclineGuest = (e: React.MouseEvent) => handleGuestChange(e, 'declined'); - const handleTentativeGuest = (e: React.MouseEvent) => handleGuestChange(e, 'tentative'); - - const handleGuestUpdate = (guest: Guest) => { - fetch(`/api/guests/${guest.id}`, - { - method: 'PUT', - body: JSON.stringify({ guest: { name: guest.name } }), - headers: { - 'Content-Type': 'application/json', - 'X-CSRF-TOKEN': getCsrfToken(), - } - }) - .catch((error) => console.error(error)); +export default function guestsTable({ guests }: { guests: Guest[] }) { + const handleGuestChange = (guest: Guest, status: GuestStatus) => { + guest.status = status; + updateGuest(guest); } - - const handleGuestChange = (e: React.MouseEvent, status: string) => { - updateGuestStatus(e.currentTarget.getAttribute('data-guest-id') || '', status); - } - - return ( ( - { guest.name = newName; handleGuestUpdate(guest) }} /> + { guest.name = newName; updateGuest(guest) }} /> {guest.group_name} @@ -65,14 +45,14 @@ export default function guestsTable({ guests, updateGuestStatus }: { guests: Gue - {guest.status === 'considered' && ()} {(guest.status === 'invited' || guest.status === 'tentative') && ( <> - - {guest.status != 'tentative' && } - + + {guest.status != 'tentative' && } + )} From 01bce277a89a90e0c9a5dfb62ae64ad343bdc2c8 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 17 Nov 2024 16:00:30 +0000 Subject: [PATCH 053/216] Add copyright notice --- app/api/expenses.tsx | 2 ++ app/api/groups.tsx | 2 ++ app/api/guests.tsx | 2 ++ app/api/tableSimulations.tsx | 2 ++ 4 files changed, 8 insertions(+) diff --git a/app/api/expenses.tsx b/app/api/expenses.tsx index 7cfb3a3..f73f6b7 100644 --- a/app/api/expenses.tsx +++ b/app/api/expenses.tsx @@ -1,3 +1,5 @@ +/* Copyright (C) 2024 Manuel Bustillo*/ + import { Expense } from '@/app/lib/definitions'; import { getCsrfToken } from '@/app/lib/utils'; diff --git a/app/api/groups.tsx b/app/api/groups.tsx index aeafc4d..e765761 100644 --- a/app/api/groups.tsx +++ b/app/api/groups.tsx @@ -1,3 +1,5 @@ +/* Copyright (C) 2024 Manuel Bustillo*/ + import { Group } from '@/app/lib/definitions'; export function loadGroups(onLoad?: (groups: Group[]) => void) { diff --git a/app/api/guests.tsx b/app/api/guests.tsx index 549356c..6314338 100644 --- a/app/api/guests.tsx +++ b/app/api/guests.tsx @@ -1,3 +1,5 @@ +/* Copyright (C) 2024 Manuel Bustillo*/ + import { Guest } from '@/app/lib/definitions'; import { getCsrfToken } from '@/app/lib/utils'; diff --git a/app/api/tableSimulations.tsx b/app/api/tableSimulations.tsx index 51e1fff..4e28688 100644 --- a/app/api/tableSimulations.tsx +++ b/app/api/tableSimulations.tsx @@ -1,3 +1,5 @@ +/* Copyright (C) 2024 Manuel Bustillo*/ + import { TableArrangement } from '@/app/lib/definitions'; export function loadTableSimulations(onLoad?: (tableSimulations: TableArrangement[]) => void) { From 1fdac88c756121c1271b6f8ccfd0787f324a21e0 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 17 Nov 2024 17:50:06 +0100 Subject: [PATCH 054/216] Fix race condition updating guests --- app/api/guests.tsx | 2 +- app/dashboard/guests/page.tsx | 2 +- app/ui/guests/table.tsx | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/api/guests.tsx b/app/api/guests.tsx index 6314338..4d91fac 100644 --- a/app/api/guests.tsx +++ b/app/api/guests.tsx @@ -21,7 +21,7 @@ export function loadGuests(onLoad?: (guests: Guest[]) => void) { }; export function updateGuest(guest: Guest) { - fetch(`/api/guests/${guest.id}`, + return fetch(`/api/guests/${guest.id}`, { method: 'PUT', body: JSON.stringify({ guest: { name: guest.name, status: guest.status } }), diff --git a/app/dashboard/guests/page.tsx b/app/dashboard/guests/page.tsx index d575715..fe46b0e 100644 --- a/app/dashboard/guests/page.tsx +++ b/app/dashboard/guests/page.tsx @@ -46,7 +46,7 @@ export default function Page() {
}> - +
diff --git a/app/ui/guests/table.tsx b/app/ui/guests/table.tsx index 2e6dfae..143147b 100644 --- a/app/ui/guests/table.tsx +++ b/app/ui/guests/table.tsx @@ -9,10 +9,10 @@ import clsx from 'clsx'; import InlineTextField from '../components/form/inlineTextField'; import TableOfContents from '../components/table-of-contents'; -export default function guestsTable({ guests }: { guests: Guest[] }) { +export default function guestsTable({ guests, onUpdate }: { guests: Guest[], onUpdate: () => void }) { const handleGuestChange = (guest: Guest, status: GuestStatus) => { guest.status = status; - updateGuest(guest); + updateGuest(guest).then(() => onUpdate()); } return ( From c1d199f08d5d23d1bf29bfbced4d53d4178cd599 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 17 Nov 2024 17:58:08 +0100 Subject: [PATCH 055/216] Remove extension from the API's URLs --- app/api/groups.tsx | 2 +- app/api/guests.tsx | 2 +- tests/guests.spec.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/api/groups.tsx b/app/api/groups.tsx index e765761..aa0e4db 100644 --- a/app/api/groups.tsx +++ b/app/api/groups.tsx @@ -3,7 +3,7 @@ import { Group } from '@/app/lib/definitions'; export function loadGroups(onLoad?: (groups: Group[]) => void) { - fetch("/api/groups.json") + fetch("/api/groups") .then((response) => response.json()) .then((data) => { onLoad && onLoad(data.map((record: any) => { diff --git a/app/api/guests.tsx b/app/api/guests.tsx index 4d91fac..37d0126 100644 --- a/app/api/guests.tsx +++ b/app/api/guests.tsx @@ -4,7 +4,7 @@ import { Guest } from '@/app/lib/definitions'; import { getCsrfToken } from '@/app/lib/utils'; export function loadGuests(onLoad?: (guests: Guest[]) => void) { - fetch("/api/guests.json") + fetch("/api/guests") .then((response) => response.json()) .then((data) => { onLoad && onLoad(data.map((record: any) => { diff --git a/tests/guests.spec.ts b/tests/guests.spec.ts index 5fc76bc..734f623 100644 --- a/tests/guests.spec.ts +++ b/tests/guests.spec.ts @@ -1,7 +1,7 @@ import { test, expect, Page } from '@playwright/test' const mockGuestsAPI = ({ page }: { page: Page }) => { - page.route('*/**/api/guests.json', async route => { + page.route('*/**/api/guests', async route => { const json = [ { "id": "f4a09c28-40ea-4553-90a5-96935a59cac6", From 6e598e537bd7112175d1723b31e765cb2021f585 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 17 Nov 2024 18:29:50 +0100 Subject: [PATCH 056/216] Allow removing a guest --- app/api/guests.tsx | 14 ++++++++++++++ app/ui/guests/table.tsx | 26 +++++++++++++++----------- 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/app/api/guests.tsx b/app/api/guests.tsx index 37d0126..77a6764 100644 --- a/app/api/guests.tsx +++ b/app/api/guests.tsx @@ -47,4 +47,18 @@ export function createGuest(name: string, group_id: string, onCreate?: () => voi onCreate && onCreate(); }) .catch((error) => console.error(error)); +} + +export function destroyGuest(guest: Guest, onDestroy?: () => void) { + fetch(`/api/guests/${guest.id}`, { + method: 'DELETE', + headers: { + 'X-CSRF-TOKEN': getCsrfToken(), + } + }) + .then((response) => response.json()) + .then((data) => { + onDestroy && onDestroy(); + }) + .catch((error) => console.error(error)); } \ No newline at end of file diff --git a/app/ui/guests/table.tsx b/app/ui/guests/table.tsx index 143147b..f7d0aa9 100644 --- a/app/ui/guests/table.tsx +++ b/app/ui/guests/table.tsx @@ -2,12 +2,13 @@ 'use client'; -import { updateGuest } from '@/app/api/guests'; +import { destroyGuest, updateGuest } from '@/app/api/guests'; import { Guest, GuestStatus } from '@/app/lib/definitions'; import { classNames } from '@/app/ui/components/button'; import clsx from 'clsx'; import InlineTextField from '../components/form/inlineTextField'; import TableOfContents from '../components/table-of-contents'; +import { TrashIcon } from '@heroicons/react/24/outline'; export default function guestsTable({ guests, onUpdate }: { guests: Guest[], onUpdate: () => void }) { const handleGuestChange = (guest: Guest, status: GuestStatus) => { @@ -45,16 +46,19 @@ export default function guestsTable({ guests, onUpdate }: { guests: Guest[], onU - {guest.status === 'considered' && ()} - {(guest.status === 'invited' || guest.status === 'tentative') && ( - <> - - {guest.status != 'tentative' && } - - - )} +
+ {guest.status === 'considered' && ()} + {(guest.status === 'invited' || guest.status === 'tentative') && ( + <> + + {guest.status != 'tentative' && } + + + )} + { destroyGuest(guest, () => onUpdate()) }} /> +
)} From 52caefc220a00d02980d724add5e4c83e70b4c94 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 17 Nov 2024 19:18:20 +0100 Subject: [PATCH 057/216] Reuse the same dialog for creating and editing guests --- app/api/guests.tsx | 1 + app/dashboard/guests/page.tsx | 21 ++++++-- app/lib/definitions.ts | 5 +- ...ation-dialog.tsx => guest-form-dialog.tsx} | 53 +++++++++++++------ app/ui/guests/table.tsx | 12 +++-- 5 files changed, 66 insertions(+), 26 deletions(-) rename app/ui/components/{creation-dialog.tsx => guest-form-dialog.tsx} (54%) diff --git a/app/api/guests.tsx b/app/api/guests.tsx index 77a6764..df218b4 100644 --- a/app/api/guests.tsx +++ b/app/api/guests.tsx @@ -13,6 +13,7 @@ export function loadGuests(onLoad?: (guests: Guest[]) => void) { name: record.name, status: record.status, group_name: record.group.name, + groupId: record.group.id, }); })); }, (error) => { diff --git a/app/dashboard/guests/page.tsx b/app/dashboard/guests/page.tsx index fe46b0e..85e249a 100644 --- a/app/dashboard/guests/page.tsx +++ b/app/dashboard/guests/page.tsx @@ -2,16 +2,18 @@ 'use client'; +import { loadGroups } from '@/app/api/groups'; +import { loadGuests } from '@/app/api/guests'; import { Group, Guest } from '@/app/lib/definitions'; -import CreationDialog from '@/app/ui/components/creation-dialog'; +import { classNames } from '@/app/ui/components/button'; +import GuestFormDialog from '@/app/ui/components/guest-form-dialog'; import GroupsTable from '@/app/ui/groups/table'; import AffinityGroupsTree from '@/app/ui/guests/affinity-groups-tree'; import SkeletonTable from '@/app/ui/guests/skeleton-row'; import GuestsTable from '@/app/ui/guests/table'; import { TabPanel, TabView } from 'primereact/tabview'; import { Suspense, useState } from 'react'; -import { loadGuests } from '@/app/api/guests'; -import { loadGroups } from '@/app/api/groups'; + export default function Page() { function refreshGuests() { @@ -33,6 +35,7 @@ export default function Page() { const [guestsLoaded, setGuestsLoaded] = useState(false); const [guests, setGuests] = useState>([]); + const [guestBeingEdited, setGuestBeingEdited] = useState(undefined); !groupsLoaded && refreshGroups(); !guestsLoaded && refreshGuests(); @@ -44,9 +47,17 @@ export default function Page() {
- + + { refreshGuests(); setGuestBeingEdited(undefined) }} + guest={guestBeingEdited} + visible={guestBeingEdited !== undefined} + onHide={() => { setGuestBeingEdited(undefined) }} + /> }> - + setGuestBeingEdited(guest)} />
diff --git a/app/lib/definitions.ts b/app/lib/definitions.ts index 8e7e6ae..824bc5f 100644 --- a/app/lib/definitions.ts +++ b/app/lib/definitions.ts @@ -20,9 +20,10 @@ export type Customer = { export type GuestStatus = 'considered' | 'invited' | 'confirmed' | 'declined' | 'tentative'; export type Guest = { - id: string; - name: string; + id?: string; + name?: string; group_name?: string; + groupId?: string; color?: string; status?: GuestStatus } diff --git a/app/ui/components/creation-dialog.tsx b/app/ui/components/guest-form-dialog.tsx similarity index 54% rename from app/ui/components/creation-dialog.tsx rename to app/ui/components/guest-form-dialog.tsx index 01b169e..c9537ce 100644 --- a/app/ui/components/creation-dialog.tsx +++ b/app/ui/components/guest-form-dialog.tsx @@ -2,8 +2,8 @@ 'use client'; -import { createGuest } from '@/app/api/guests'; -import { Group } from '@/app/lib/definitions'; +import { createGuest, updateGuest } from '@/app/api/guests'; +import { Group, Guest } from '@/app/lib/definitions'; import { classNames } from '@/app/ui/components/button'; import { Dialog } from 'primereact/dialog'; import { Dropdown } from 'primereact/dropdown'; @@ -11,25 +11,46 @@ import { FloatLabel } from 'primereact/floatlabel'; import { InputText } from 'primereact/inputtext'; import { useState } from 'react'; -export default function CreationDialog({ groups, onCreate }: { groups: Group[], onCreate?: () => void }) { - const [visible, setVisible] = useState(false); +export default function GuestFormDialog({ groups, onCreate, onHide, guest, visible}: { + groups: Group[], + onCreate?: () => void, + onHide: () => void, + guest?: Guest, + visible: boolean, +}) { + + const [name, setName] = useState(guest?.name || ''); + const [group, setGroup] = useState(guest?.groupId || null); + + function resetForm() { + setName(''); + setGroup(null); + } - const [name, setName] = useState(''); - const [group, setGroup] = useState(null); function submitGuest() { - name && group && createGuest(name, group, () => { - setVisible(false); - setName(''); - setGroup(null); - onCreate && onCreate(); - }); + if (!(name && group)) { + return + } + + if (guest?.id !== undefined) { + guest.name = name; + guest.groupId = group; + updateGuest(guest).then(() => { + resetForm(); + onCreate && onCreate(); + }); + } else { + createGuest(name, group, () => { + resetForm(); + onCreate && onCreate(); + }); + } } return ( <> - - { if (!visible) return; setVisible(false); }}> +
setName(e.target.value)} /> @@ -43,7 +64,9 @@ export default function CreationDialog({ groups, onCreate }: { groups: Group[], } /> - +
diff --git a/app/ui/guests/table.tsx b/app/ui/guests/table.tsx index f7d0aa9..a18dc9a 100644 --- a/app/ui/guests/table.tsx +++ b/app/ui/guests/table.tsx @@ -5,12 +5,15 @@ import { destroyGuest, updateGuest } from '@/app/api/guests'; import { Guest, GuestStatus } from '@/app/lib/definitions'; import { classNames } from '@/app/ui/components/button'; +import { PencilIcon, TrashIcon } from '@heroicons/react/24/outline'; import clsx from 'clsx'; -import InlineTextField from '../components/form/inlineTextField'; import TableOfContents from '../components/table-of-contents'; -import { TrashIcon } from '@heroicons/react/24/outline'; -export default function guestsTable({ guests, onUpdate }: { guests: Guest[], onUpdate: () => void }) { +export default function guestsTable({ guests, onUpdate, onEdit }: { + guests: Guest[], + onUpdate: () => void, + onEdit: (guest: Guest) => void +}) { const handleGuestChange = (guest: Guest, status: GuestStatus) => { guest.status = status; updateGuest(guest).then(() => onUpdate()); @@ -24,7 +27,7 @@ export default function guestsTable({ guests, onUpdate }: { guests: Guest[], onU rowRender={(guest) => ( - { guest.name = newName; updateGuest(guest) }} /> + {guest.name} {guest.group_name} @@ -58,6 +61,7 @@ export default function guestsTable({ guests, onUpdate }: { guests: Guest[], onU )} { destroyGuest(guest, () => onUpdate()) }} /> + onEdit(guest)} />
From 2955155778cff785a0b1b4511febf1766e4dde2f Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 17 Nov 2024 19:19:22 +0100 Subject: [PATCH 058/216] Temporarily remove test to update guest name --- tests/guests.spec.ts | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/tests/guests.spec.ts b/tests/guests.spec.ts index 734f623..87abe3a 100644 --- a/tests/guests.spec.ts +++ b/tests/guests.spec.ts @@ -87,21 +87,6 @@ test('should display the list of guests', async ({ page }) => { await expect(page.getByRole('row').nth(2).getByRole('button', { name: 'Decline' })).toBeVisible(); }); -test('should allow changing the name of a guest', async ({ page }) => { - await mockGuestsAPI({ page }); - - await page.goto('/dashboard/guests'); - - await expect(page.getByRole('row').nth(1).getByRole('cell', { name: 'Kristofer Rohan DVM' })).toBeVisible(); - - await page.getByRole('row').nth(1).getByRole('cell', { name: 'Kristofer Rohan DVM' }).click(); - await page.getByRole('textbox').clear(); - await page.getByRole('textbox').pressSequentially('John Snow'); - await page.getByRole('textbox').evaluate(e => e.blur()); - - await expect(page.getByRole('row').nth(1).getByRole('cell', { name: 'John Snow' })).toBeVisible(); -}); - test('should display the list of groups', async ({ page }) => { await mockGroupsAPI({ page }); From ec49fd01e72346f624a80109103d1d7857431d4d Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 17 Nov 2024 19:22:30 +0100 Subject: [PATCH 059/216] Remove component that renders groups in a tree structure --- app/dashboard/guests/page.tsx | 3 -- app/ui/guests/affinity-groups-tree.tsx | 65 -------------------------- 2 files changed, 68 deletions(-) delete mode 100644 app/ui/guests/affinity-groups-tree.tsx diff --git a/app/dashboard/guests/page.tsx b/app/dashboard/guests/page.tsx index fe46b0e..6337d0b 100644 --- a/app/dashboard/guests/page.tsx +++ b/app/dashboard/guests/page.tsx @@ -5,7 +5,6 @@ import { Group, Guest } from '@/app/lib/definitions'; import CreationDialog from '@/app/ui/components/creation-dialog'; import GroupsTable from '@/app/ui/groups/table'; -import AffinityGroupsTree from '@/app/ui/guests/affinity-groups-tree'; import SkeletonTable from '@/app/ui/guests/skeleton-row'; import GuestsTable from '@/app/ui/guests/table'; import { TabPanel, TabView } from 'primereact/tabview'; @@ -39,8 +38,6 @@ export default function Page() { return (
- -
diff --git a/app/ui/guests/affinity-groups-tree.tsx b/app/ui/guests/affinity-groups-tree.tsx deleted file mode 100644 index 0082070..0000000 --- a/app/ui/guests/affinity-groups-tree.tsx +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ - -'use client' - -import React, { useState, useEffect, Suspense } from 'react'; -import { Tree } from 'primereact/tree'; -import { PrimeIcons } from 'primereact/api'; -import { debug } from 'console'; -import { Group } from '@/app/lib/definitions'; - -export default function AffinityGroupsTree() { - const [nodes, setNodes] = useState([]); - - const groupToNode = (group: Group): any => { - return({ - key: group.id, - label: `${group.name} (${group.guest_count})`, - icon: group.icon, - children: group.children.map((child) => groupToNode(child)), - className: "px-4", - }) - } - - const parseNode = (record: any, included: any[]): Group => { - if (!record.attributes) { - record = included.find((a) => a.id === record.id); - } - - const children: Group[] = (record?.relationships?.children?.data || []).map((child: any) => { - return (parseNode(child, included)); - }); - - const children_guest_count: number = children.reduce((acc: number, child: Group) => acc + child.guest_count, 0); - - return ({ - id: record.id, - name: record.attributes.name, - guest_count: record.attributes.guest_count + children_guest_count, - icon: record.attributes.icon, - children: children, - }) - } - - - useEffect(() => { - if (nodes.length > 0) { - return; - } - fetch("/api/groups.json") - .then((response) => response.json()) - .then((data) => { - setNodes(data.data.map((record: any) => { - return (groupToNode(parseNode(record, data.included))); - })) - }); - }); - - return ( -
- - setNodes(e.value as any)} className="w-full md:w-30rem" /> - -
- ) -} \ No newline at end of file From 827271efc298533ab3f5192a26674a642ac0f19a Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 17 Nov 2024 19:49:39 +0100 Subject: [PATCH 060/216] Simplify guest edition by adding status to the dialog --- app/api/guests.tsx | 6 +++--- app/lib/definitions.ts | 3 ++- app/lib/utils.ts | 5 +++++ app/ui/components/guest-form-dialog.tsx | 22 +++++++++++++++++----- app/ui/guests/table.tsx | 15 --------------- 5 files changed, 27 insertions(+), 24 deletions(-) diff --git a/app/api/guests.tsx b/app/api/guests.tsx index df218b4..ffd7cf6 100644 --- a/app/api/guests.tsx +++ b/app/api/guests.tsx @@ -25,7 +25,7 @@ export function updateGuest(guest: Guest) { return fetch(`/api/guests/${guest.id}`, { method: 'PUT', - body: JSON.stringify({ guest: { name: guest.name, status: guest.status } }), + body: JSON.stringify({ guest: { name: guest.name, status: guest.status, group_id: guest.groupId } }), headers: { 'Content-Type': 'application/json', 'X-CSRF-TOKEN': getCsrfToken(), @@ -34,10 +34,10 @@ export function updateGuest(guest: Guest) { .catch((error) => console.error(error)); } -export function createGuest(name: string, group_id: string, onCreate?: () => void) { +export function createGuest(guest: Guest, onCreate?: () => void) { fetch("/api/guests", { method: 'POST', - body: JSON.stringify({ name: name, group_id: group_id }), + body: JSON.stringify({ name: guest.name, group_id: guest.groupId, status: guest.status }), headers: { 'Content-Type': 'application/json', 'X-CSRF-TOKEN': getCsrfToken(), diff --git a/app/lib/definitions.ts b/app/lib/definitions.ts index 824bc5f..c897c4b 100644 --- a/app/lib/definitions.ts +++ b/app/lib/definitions.ts @@ -18,7 +18,8 @@ export type Customer = { image_url: string; }; -export type GuestStatus = 'considered' | 'invited' | 'confirmed' | 'declined' | 'tentative'; +export const guestStatuses = ['considered', 'invited', 'confirmed', 'declined', 'tentative'] as const; +export type GuestStatus = typeof guestStatuses[number]; export type Guest = { id?: string; name?: string; diff --git a/app/lib/utils.ts b/app/lib/utils.ts index 4d9ce77..2200ed3 100644 --- a/app/lib/utils.ts +++ b/app/lib/utils.ts @@ -16,6 +16,11 @@ export const getCsrfToken = () => { ?.split("=")[1] || 'unknown'; } +// From https://stackoverflow.com/a/1026087/3607039 +export const capitalize = (val:string) => { + return String(val).charAt(0).toUpperCase() + String(val).slice(1); +} + export const formatDateToLocal = ( dateStr: string, locale: string = 'en-US', diff --git a/app/ui/components/guest-form-dialog.tsx b/app/ui/components/guest-form-dialog.tsx index c9537ce..9da1ff9 100644 --- a/app/ui/components/guest-form-dialog.tsx +++ b/app/ui/components/guest-form-dialog.tsx @@ -3,7 +3,8 @@ 'use client'; import { createGuest, updateGuest } from '@/app/api/guests'; -import { Group, Guest } from '@/app/lib/definitions'; +import { Group, Guest, GuestStatus, guestStatuses } from '@/app/lib/definitions'; +import { capitalize } from '@/app/lib/utils'; import { classNames } from '@/app/ui/components/button'; import { Dialog } from 'primereact/dialog'; import { Dropdown } from 'primereact/dropdown'; @@ -11,7 +12,7 @@ import { FloatLabel } from 'primereact/floatlabel'; import { InputText } from 'primereact/inputtext'; import { useState } from 'react'; -export default function GuestFormDialog({ groups, onCreate, onHide, guest, visible}: { +export default function GuestFormDialog({ groups, onCreate, onHide, guest, visible }: { groups: Group[], onCreate?: () => void, onHide: () => void, @@ -21,26 +22,29 @@ export default function GuestFormDialog({ groups, onCreate, onHide, guest, visib const [name, setName] = useState(guest?.name || ''); const [group, setGroup] = useState(guest?.groupId || null); + const [status, setStatus] = useState(guest?.status || null); function resetForm() { setName(''); setGroup(null); + setStatus(null); } function submitGuest() { - if (!(name && group)) { + if (!(name && group && status)) { return } if (guest?.id !== undefined) { guest.name = name; guest.groupId = group; + guest.status = status; updateGuest(guest).then(() => { resetForm(); onCreate && onCreate(); }); } else { - createGuest(name, group, () => { + guest && createGuest({name: name, groupId: group, status: status}, () => { resetForm(); onCreate && onCreate(); }); @@ -64,7 +68,15 @@ export default function GuestFormDialog({ groups, onCreate, onHide, guest, visib } /> -
diff --git a/app/ui/guests/table.tsx b/app/ui/guests/table.tsx index a18dc9a..304c357 100644 --- a/app/ui/guests/table.tsx +++ b/app/ui/guests/table.tsx @@ -14,11 +14,6 @@ export default function guestsTable({ guests, onUpdate, onEdit }: { onUpdate: () => void, onEdit: (guest: Guest) => void }) { - const handleGuestChange = (guest: Guest, status: GuestStatus) => { - guest.status = status; - updateGuest(guest).then(() => onUpdate()); - } - return (
- {guest.status === 'considered' && ()} - {(guest.status === 'invited' || guest.status === 'tentative') && ( - <> - - {guest.status != 'tentative' && } - - - )} { destroyGuest(guest, () => onUpdate()) }} /> onEdit(guest)} />
From 161a27160f275a43764fa3393df1b0dda274ec36 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 17 Nov 2024 20:05:10 +0100 Subject: [PATCH 061/216] Remove nextjs scaffolding contents --- app/lib/definitions.ts | 78 ------------- app/lib/placeholder-data.ts | 149 ------------------------- app/seed/route.ts | 124 -------------------- app/ui/customers/table.tsx | 125 --------------------- app/ui/dashboard/cards.tsx | 60 ---------- app/ui/dashboard/latest-invoices.tsx | 66 ----------- app/ui/dashboard/revenue-chart.tsx | 67 ----------- app/ui/guests/breadcrumbs.tsx | 38 ------- app/ui/guests/buttons.tsx | 38 ------- app/ui/guests/create-form.tsx | 114 ------------------- app/ui/guests/edit-form.tsx | 125 --------------------- app/ui/guests/pagination.tsx | 121 -------------------- app/ui/guests/status.tsx | 31 ----- app/ui/login-form.tsx | 69 ------------ public/customers/amy-burns.png | Bin 7954 -> 0 bytes public/customers/balazs-orban.png | Bin 7951 -> 0 bytes public/customers/delba-de-oliveira.png | Bin 5824 -> 0 bytes public/customers/evil-rabbit.png | Bin 1019 -> 0 bytes public/customers/lee-robinson.png | Bin 5653 -> 0 bytes public/customers/michael-novotny.png | Bin 9902 -> 0 bytes 20 files changed, 1205 deletions(-) delete mode 100644 app/lib/placeholder-data.ts delete mode 100644 app/seed/route.ts delete mode 100644 app/ui/customers/table.tsx delete mode 100644 app/ui/dashboard/cards.tsx delete mode 100644 app/ui/dashboard/latest-invoices.tsx delete mode 100644 app/ui/dashboard/revenue-chart.tsx delete mode 100644 app/ui/guests/breadcrumbs.tsx delete mode 100644 app/ui/guests/buttons.tsx delete mode 100644 app/ui/guests/create-form.tsx delete mode 100644 app/ui/guests/edit-form.tsx delete mode 100644 app/ui/guests/pagination.tsx delete mode 100644 app/ui/guests/status.tsx delete mode 100644 app/ui/login-form.tsx delete mode 100644 public/customers/amy-burns.png delete mode 100644 public/customers/balazs-orban.png delete mode 100644 public/customers/delba-de-oliveira.png delete mode 100644 public/customers/evil-rabbit.png delete mode 100644 public/customers/lee-robinson.png delete mode 100644 public/customers/michael-novotny.png diff --git a/app/lib/definitions.ts b/app/lib/definitions.ts index 824bc5f..5c008c9 100644 --- a/app/lib/definitions.ts +++ b/app/lib/definitions.ts @@ -1,23 +1,5 @@ /* Copyright (C) 2024 Manuel Bustillo*/ -// This file contains type definitions for your data. -// It describes the shape of the data, and what data type each property should accept. -// For simplicity of teaching, we're manually defining these types. -// However, these types are generated automatically if you're using an ORM such as Prisma. -export type User = { - id: string; - name: string; - email: string; - password: string; -}; - -export type Customer = { - id: string; - name: string; - email: string; - image_url: string; -}; - export type GuestStatus = 'considered' | 'invited' | 'confirmed' | 'declined' | 'tentative'; export type Guest = { id?: string; @@ -62,34 +44,6 @@ export type AttendanceSummary = { total: number; } -export type Invoice = { - id: string; - customer_id: string; - amount: number; - date: string; - // In TypeScript, this is called a string union type. - // It means that the "status" property can only be one of the two strings: 'pending' or 'paid'. - status: 'pending' | 'paid'; -}; - -export type Revenue = { - month: string; - revenue: number; -}; - -export type LatestInvoice = { - id: string; - name: string; - image_url: string; - email: string; - amount: string; -}; - -// The database returns a number for amount, but we later format it to a string with the formatCurrency function -export type LatestInvoiceRaw = Omit & { - amount: number; -}; - export type guestsTable = { id: string; customer_id: string; @@ -100,35 +54,3 @@ export type guestsTable = { amount: number; status: 'pending' | 'paid'; }; - -export type CustomersTableType = { - id: string; - name: string; - email: string; - image_url: string; - total_guests: number; - total_pending: number; - total_paid: number; -}; - -export type FormattedCustomersTable = { - id: string; - name: string; - email: string; - image_url: string; - total_guests: number; - total_pending: string; - total_paid: string; -}; - -export type CustomerField = { - id: string; - name: string; -}; - -export type InvoiceForm = { - id: string; - customer_id: string; - amount: number; - status: 'pending' | 'paid'; -}; diff --git a/app/lib/placeholder-data.ts b/app/lib/placeholder-data.ts deleted file mode 100644 index 2d78faa..0000000 --- a/app/lib/placeholder-data.ts +++ /dev/null @@ -1,149 +0,0 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ - -// This file contains placeholder data that you'll be replacing with real data in the Data Fetching chapter: -// https://nextjs.org/learn/dashboard-app/fetching-data -const users = [ - { - id: '410544b2-4001-4271-9855-fec4b6a6442a', - name: 'User', - email: 'user@nextmail.com', - password: '123456', - }, -]; - -const customers = [ - { - id: 'd6e15727-9fe1-4961-8c5b-ea44a9bd81aa', - name: 'Evil Rabbit', - email: 'evil@rabbit.com', - image_url: '/customers/evil-rabbit.png', - }, - { - id: '3958dc9e-712f-4377-85e9-fec4b6a6442a', - name: 'Delba de Oliveira', - email: 'delba@oliveira.com', - image_url: '/customers/delba-de-oliveira.png', - }, - { - id: '3958dc9e-742f-4377-85e9-fec4b6a6442a', - name: 'Lee Robinson', - email: 'lee@robinson.com', - image_url: '/customers/lee-robinson.png', - }, - { - id: '76d65c26-f784-44a2-ac19-586678f7c2f2', - name: 'Michael Novotny', - email: 'michael@novotny.com', - image_url: '/customers/michael-novotny.png', - }, - { - id: 'CC27C14A-0ACF-4F4A-A6C9-D45682C144B9', - name: 'Amy Burns', - email: 'amy@burns.com', - image_url: '/customers/amy-burns.png', - }, - { - id: '13D07535-C59E-4157-A011-F8D2EF4E0CBB', - name: 'Balazs Orban', - email: 'balazs@orban.com', - image_url: '/customers/balazs-orban.png', - }, -]; - -const guests = [ - { - customer_id: customers[0].id, - amount: 15795, - status: 'pending', - date: '2022-12-06', - }, - { - customer_id: customers[1].id, - amount: 20348, - status: 'pending', - date: '2022-11-14', - }, - { - customer_id: customers[4].id, - amount: 3040, - status: 'paid', - date: '2022-10-29', - }, - { - customer_id: customers[3].id, - amount: 44800, - status: 'paid', - date: '2023-09-10', - }, - { - customer_id: customers[5].id, - amount: 34577, - status: 'pending', - date: '2023-08-05', - }, - { - customer_id: customers[2].id, - amount: 54246, - status: 'pending', - date: '2023-07-16', - }, - { - customer_id: customers[0].id, - amount: 666, - status: 'pending', - date: '2023-06-27', - }, - { - customer_id: customers[3].id, - amount: 32545, - status: 'paid', - date: '2023-06-09', - }, - { - customer_id: customers[4].id, - amount: 1250, - status: 'paid', - date: '2023-06-17', - }, - { - customer_id: customers[5].id, - amount: 8546, - status: 'paid', - date: '2023-06-07', - }, - { - customer_id: customers[1].id, - amount: 500, - status: 'paid', - date: '2023-08-19', - }, - { - customer_id: customers[5].id, - amount: 8945, - status: 'paid', - date: '2023-06-03', - }, - { - customer_id: customers[2].id, - amount: 1000, - status: 'paid', - date: '2022-06-05', - }, -]; - -const revenue = [ - { month: 'Jan', revenue: 2000 }, - { month: 'Feb', revenue: 1800 }, - { month: 'Mar', revenue: 2200 }, - { month: 'Apr', revenue: 2500 }, - { month: 'May', revenue: 2300 }, - { month: 'Jun', revenue: 3200 }, - { month: 'Jul', revenue: 3500 }, - { month: 'Aug', revenue: 3700 }, - { month: 'Sep', revenue: 2500 }, - { month: 'Oct', revenue: 2800 }, - { month: 'Nov', revenue: 3000 }, - { month: 'Dec', revenue: 4800 }, -]; - -export { users, customers, guests, revenue }; diff --git a/app/seed/route.ts b/app/seed/route.ts deleted file mode 100644 index db632cd..0000000 --- a/app/seed/route.ts +++ /dev/null @@ -1,124 +0,0 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ - -// import bcrypt from 'bcrypt'; -// import { db } from '@vercel/postgres'; -// import { guests, customers, revenue, users } from '../lib/placeholder-data'; - -// const client = await db.connect(); - -// async function seedUsers() { -// await client.sql`CREATE EXTENSION IF NOT EXISTS "uuid-ossp"`; -// await client.sql` -// CREATE TABLE IF NOT EXISTS users ( -// id UUID DEFAULT uuid_generate_v4() PRIMARY KEY, -// name VARCHAR(255) NOT NULL, -// email TEXT NOT NULL UNIQUE, -// password TEXT NOT NULL -// ); -// `; - -// const insertedUsers = await Promise.all( -// users.map(async (user) => { -// const hashedPassword = await bcrypt.hash(user.password, 10); -// return client.sql` -// INSERT INTO users (id, name, email, password) -// VALUES (${user.id}, ${user.name}, ${user.email}, ${hashedPassword}) -// ON CONFLICT (id) DO NOTHING; -// `; -// }), -// ); - -// return insertedUsers; -// } - -// async function seedguests() { -// await client.sql`CREATE EXTENSION IF NOT EXISTS "uuid-ossp"`; - -// await client.sql` -// CREATE TABLE IF NOT EXISTS guests ( -// id UUID DEFAULT uuid_generate_v4() PRIMARY KEY, -// customer_id UUID NOT NULL, -// amount INT NOT NULL, -// status VARCHAR(255) NOT NULL, -// date DATE NOT NULL -// ); -// `; - -// const insertedguests = await Promise.all( -// guests.map( -// (invoice) => client.sql` -// INSERT INTO guests (customer_id, amount, status, date) -// VALUES (${invoice.customer_id}, ${invoice.amount}, ${invoice.status}, ${invoice.date}) -// ON CONFLICT (id) DO NOTHING; -// `, -// ), -// ); - -// return insertedguests; -// } - -// async function seedCustomers() { -// await client.sql`CREATE EXTENSION IF NOT EXISTS "uuid-ossp"`; - -// await client.sql` -// CREATE TABLE IF NOT EXISTS customers ( -// id UUID DEFAULT uuid_generate_v4() PRIMARY KEY, -// name VARCHAR(255) NOT NULL, -// email VARCHAR(255) NOT NULL, -// image_url VARCHAR(255) NOT NULL -// ); -// `; - -// const insertedCustomers = await Promise.all( -// customers.map( -// (customer) => client.sql` -// INSERT INTO customers (id, name, email, image_url) -// VALUES (${customer.id}, ${customer.name}, ${customer.email}, ${customer.image_url}) -// ON CONFLICT (id) DO NOTHING; -// `, -// ), -// ); - -// return insertedCustomers; -// } - -// async function seedRevenue() { -// await client.sql` -// CREATE TABLE IF NOT EXISTS revenue ( -// month VARCHAR(4) NOT NULL UNIQUE, -// revenue INT NOT NULL -// ); -// `; - -// const insertedRevenue = await Promise.all( -// revenue.map( -// (rev) => client.sql` -// INSERT INTO revenue (month, revenue) -// VALUES (${rev.month}, ${rev.revenue}) -// ON CONFLICT (month) DO NOTHING; -// `, -// ), -// ); - -// return insertedRevenue; -// } - -export async function GET() { - return Response.json({ - message: - 'Uncomment this file and remove this line. You can delete this file when you are finished.', - }); - // try { - // await client.sql`BEGIN`; - // await seedUsers(); - // await seedCustomers(); - // await seedguests(); - // await seedRevenue(); - // await client.sql`COMMIT`; - - // return Response.json({ message: 'Database seeded successfully' }); - // } catch (error) { - // await client.sql`ROLLBACK`; - // return Response.json({ error }, { status: 500 }); - // } -} diff --git a/app/ui/customers/table.tsx b/app/ui/customers/table.tsx deleted file mode 100644 index 6a41e3f..0000000 --- a/app/ui/customers/table.tsx +++ /dev/null @@ -1,125 +0,0 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ - -import Image from 'next/image'; -import { lusitana } from '@/app/ui/fonts'; -import Search from '@/app/ui/search'; -import { - CustomersTableType, - FormattedCustomersTable, -} from '@/app/lib/definitions'; - -export default async function CustomersTable({ - customers, -}: { - customers: FormattedCustomersTable[]; -}) { - return ( -
-

- Customers -

- -
-
-
-
-
- {customers?.map((customer) => ( -
-
-
-
-
- {`${customer.name}'s -

{customer.name}

-
-
-

- {customer.email} -

-
-
-
-
-

Pending

-

{customer.total_pending}

-
-
-

Paid

-

{customer.total_paid}

-
-
-
-

{customer.total_guests} guests

-
-
- ))} -
- - - - - - - - - - - - - {customers.map((customer) => ( - - - - - - - - ))} - -
- Name - - Email - - Total guests - - Total Pending - - Total Paid -
-
- {`${customer.name}'s -

{customer.name}

-
-
- {customer.email} - - {customer.total_guests} - - {customer.total_pending} - - {customer.total_paid} -
-
-
-
-
-
- ); -} diff --git a/app/ui/dashboard/cards.tsx b/app/ui/dashboard/cards.tsx deleted file mode 100644 index 687043c..0000000 --- a/app/ui/dashboard/cards.tsx +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ - -import { - BanknotesIcon, - ClockIcon, - UserGroupIcon, - InboxIcon, -} from '@heroicons/react/24/outline'; -import { lusitana } from '@/app/ui/fonts'; - -const iconMap = { - collected: BanknotesIcon, - customers: UserGroupIcon, - pending: ClockIcon, - guests: InboxIcon, -}; - -export default async function CardWrapper() { - return ( - <> - {/* NOTE: Uncomment this code in Chapter 9 */} - - {/* - - - */} - - ); -} - -export function Card({ - title, - value, - type, -}: { - title: string; - value: number | string; - type: 'guests' | 'customers' | 'pending' | 'collected'; -}) { - const Icon = iconMap[type]; - - return ( -
-
- {Icon ? : null} -

{title}

-
-

- {value} -

-
- ); -} diff --git a/app/ui/dashboard/latest-invoices.tsx b/app/ui/dashboard/latest-invoices.tsx deleted file mode 100644 index 7c668e9..0000000 --- a/app/ui/dashboard/latest-invoices.tsx +++ /dev/null @@ -1,66 +0,0 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ - -import { ArrowPathIcon } from '@heroicons/react/24/outline'; -import clsx from 'clsx'; -import Image from 'next/image'; -import { lusitana } from '@/app/ui/fonts'; -import { LatestInvoice } from '@/app/lib/definitions'; -export default async function Latestguests({ - latestguests, -}: { - latestguests: LatestInvoice[]; -}) { - return ( -
-

- Latest guests -

-
- {/* NOTE: Uncomment this code in Chapter 7 */} - - {/*
- {latestguests.map((invoice, i) => { - return ( -
-
- {`${invoice.name}'s -
-

- {invoice.name} -

-

- {invoice.email} -

-
-
-

- {invoice.amount} -

-
- ); - })} -
*/} -
- -

Updated just now

-
-
-
- ); -} diff --git a/app/ui/dashboard/revenue-chart.tsx b/app/ui/dashboard/revenue-chart.tsx deleted file mode 100644 index 023e61d..0000000 --- a/app/ui/dashboard/revenue-chart.tsx +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ - -import { generateYAxis } from '@/app/lib/utils'; -import { CalendarIcon } from '@heroicons/react/24/outline'; -import { lusitana } from '@/app/ui/fonts'; -import { Revenue } from '@/app/lib/definitions'; - -// This component is representational only. -// For data visualization UI, check out: -// https://www.tremor.so/ -// https://www.chartjs.org/ -// https://airbnb.io/visx/ - -export default async function RevenueChart({ - revenue, -}: { - revenue: Revenue[]; -}) { - const chartHeight = 350; - // NOTE: Uncomment this code in Chapter 7 - - // const { yAxisLabels, topLabel } = generateYAxis(revenue); - - // if (!revenue || revenue.length === 0) { - // return

No data available.

; - // } - - return ( -
-

- Recent Revenue -

- {/* NOTE: Uncomment this code in Chapter 7 */} - - {/*
-
-
- {yAxisLabels.map((label) => ( -

{label}

- ))} -
- - {revenue.map((month) => ( -
-
-

- {month.month} -

-
- ))} -
-
- -

Last 12 months

-
-
*/} -
- ); -} diff --git a/app/ui/guests/breadcrumbs.tsx b/app/ui/guests/breadcrumbs.tsx deleted file mode 100644 index 828a614..0000000 --- a/app/ui/guests/breadcrumbs.tsx +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ - -import { clsx } from 'clsx'; -import Link from 'next/link'; -import { lusitana } from '@/app/ui/fonts'; - -interface Breadcrumb { - label: string; - href: string; - active?: boolean; -} - -export default function Breadcrumbs({ - breadcrumbs, -}: { - breadcrumbs: Breadcrumb[]; -}) { - return ( - - ); -} diff --git a/app/ui/guests/buttons.tsx b/app/ui/guests/buttons.tsx deleted file mode 100644 index d4e2183..0000000 --- a/app/ui/guests/buttons.tsx +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ - -import { PencilIcon, PlusIcon, TrashIcon } from '@heroicons/react/24/outline'; -import Link from 'next/link'; - -export function CreateInvoice() { - return ( - - Create Invoice{' '} - - - ); -} - -export function UpdateInvoice({ id }: { id: string }) { - return ( - - - - ); -} - -export function DeleteInvoice({ id }: { id: string }) { - return ( - <> - - - ); -} diff --git a/app/ui/guests/create-form.tsx b/app/ui/guests/create-form.tsx deleted file mode 100644 index d66a259..0000000 --- a/app/ui/guests/create-form.tsx +++ /dev/null @@ -1,114 +0,0 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ - -import { CustomerField } from '@/app/lib/definitions'; -import Link from 'next/link'; -import { - CheckIcon, - ClockIcon, - CurrencyDollarIcon, - UserCircleIcon, -} from '@heroicons/react/24/outline'; -import { Button } from '@/app/ui/button'; - -export default function Form({ customers }: { customers: CustomerField[] }) { - return ( -
-
- {/* Customer Name */} -
- -
- - -
-
- - {/* Invoice Amount */} -
- -
-
- - -
-
-
- - {/* Invoice Status */} -
- - Set the invoice status - -
-
-
- - -
-
- - -
-
-
-
-
-
- - Cancel - - -
-
- ); -} diff --git a/app/ui/guests/edit-form.tsx b/app/ui/guests/edit-form.tsx deleted file mode 100644 index d71a275..0000000 --- a/app/ui/guests/edit-form.tsx +++ /dev/null @@ -1,125 +0,0 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ - -'use client'; - -import { CustomerField, InvoiceForm } from '@/app/lib/definitions'; -import { - CheckIcon, - ClockIcon, - CurrencyDollarIcon, - UserCircleIcon, -} from '@heroicons/react/24/outline'; -import Link from 'next/link'; -import { Button } from '@/app/ui/button'; - -export default function EditInvoiceForm({ - invoice, - customers, -}: { - invoice: InvoiceForm; - customers: CustomerField[]; -}) { - return ( -
-
- {/* Customer Name */} -
- -
- - -
-
- - {/* Invoice Amount */} -
- -
-
- - -
-
-
- - {/* Invoice Status */} -
- - Set the invoice status - -
-
-
- - -
-
- - -
-
-
-
-
-
- - Cancel - - -
-
- ); -} diff --git a/app/ui/guests/pagination.tsx b/app/ui/guests/pagination.tsx deleted file mode 100644 index 42488ae..0000000 --- a/app/ui/guests/pagination.tsx +++ /dev/null @@ -1,121 +0,0 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ - -'use client'; - -import { ArrowLeftIcon, ArrowRightIcon } from '@heroicons/react/24/outline'; -import clsx from 'clsx'; -import Link from 'next/link'; -import { generatePagination } from '@/app/lib/utils'; - -export default function Pagination({ totalPages }: { totalPages: number }) { - // NOTE: Uncomment this code in Chapter 11 - - // const allPages = generatePagination(currentPage, totalPages); - - return ( - <> - {/* NOTE: Uncomment this code in Chapter 11 */} - - {/*
- - -
- {allPages.map((page, index) => { - let position: 'first' | 'last' | 'single' | 'middle' | undefined; - - if (index === 0) position = 'first'; - if (index === allPages.length - 1) position = 'last'; - if (allPages.length === 1) position = 'single'; - if (page === '...') position = 'middle'; - - return ( - - ); - })} -
- - = totalPages} - /> -
*/} - - ); -} - -function PaginationNumber({ - page, - href, - isActive, - position, -}: { - page: number | string; - href: string; - position?: 'first' | 'last' | 'middle' | 'single'; - isActive: boolean; -}) { - const className = clsx( - 'flex h-10 w-10 items-center justify-center text-sm border', - { - 'rounded-l-md': position === 'first' || position === 'single', - 'rounded-r-md': position === 'last' || position === 'single', - 'z-10 bg-blue-600 border-blue-600 text-white': isActive, - 'hover:bg-gray-100': !isActive && position !== 'middle', - 'text-gray-300': position === 'middle', - }, - ); - - return isActive || position === 'middle' ? ( -
{page}
- ) : ( - - {page} - - ); -} - -function PaginationArrow({ - href, - direction, - isDisabled, -}: { - href: string; - direction: 'left' | 'right'; - isDisabled?: boolean; -}) { - const className = clsx( - 'flex h-10 w-10 items-center justify-center rounded-md border', - { - 'pointer-events-none text-gray-300': isDisabled, - 'hover:bg-gray-100': !isDisabled, - 'mr-2 md:mr-4': direction === 'left', - 'ml-2 md:ml-4': direction === 'right', - }, - ); - - const icon = - direction === 'left' ? ( - - ) : ( - - ); - - return isDisabled ? ( -
{icon}
- ) : ( - - {icon} - - ); -} diff --git a/app/ui/guests/status.tsx b/app/ui/guests/status.tsx deleted file mode 100644 index f8a3a78..0000000 --- a/app/ui/guests/status.tsx +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ - -import { CheckIcon, ClockIcon } from '@heroicons/react/24/outline'; -import clsx from 'clsx'; - -export default function gueststatus({ status }: { status: string }) { - return ( - - {status === 'pending' ? ( - <> - Pending - - - ) : null} - {status === 'paid' ? ( - <> - Paid - - - ) : null} - - ); -} diff --git a/app/ui/login-form.tsx b/app/ui/login-form.tsx deleted file mode 100644 index 6e6241e..0000000 --- a/app/ui/login-form.tsx +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ - -import { lusitana } from '@/app/ui/fonts'; -import { - AtSymbolIcon, - KeyIcon, - ExclamationCircleIcon, -} from '@heroicons/react/24/outline'; -import { ArrowRightIcon } from '@heroicons/react/20/solid'; -import { Button } from './button'; - -export default function LoginForm() { - return ( -
-
-

- Please log in to continue. -

-
-
- -
- - -
-
-
- -
- - -
-
-
- -
- {/* Add form errors here */} -
-
-
- ); -} diff --git a/public/customers/amy-burns.png b/public/customers/amy-burns.png deleted file mode 100644 index 7b29d72526a0644b11519442aac7d6d95f305702..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7954 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 KMNUMnLSTaFb|M-8 diff --git a/public/customers/evil-rabbit.png b/public/customers/evil-rabbit.png deleted file mode 100644 index fe7990ff2f533d3d053a97f631800721e1dc64b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1019 zcmVdrWGhjmY*<)WP?D8cpp>$}N@78>@>a@1@{+fb zmz2#k(>%X(ZjFBPa<94fe(&h&e(G%Q%z4i9Ip^GS&zw6hB4YZ(#Lyqd5wtswpxto< z?T#bpr@p?P%FD~?w`plZupm7yJAB z+0W?cXjH}0)6;o=e*U}trluymU~O$J|Iggq9A{@|TP~NCmBojLhXHNp`Y{{B9sy^W0x>jYO; zRyZ8j*Vjc}n`RP6M@O8ToUA*M z+}vEvsVS+csj*&Ami6^@%|u2FVl=+-^7dd_Lux z7&Q_L5ea$KxKB?{)Y#Zax3{-s7B*WtJ3ASP*Xu>@j37ajjW-IpqN4JG9a)H7453(F zUM3VU!MnRVLgDdv2n9?~>_iBK+Ja>Sm|$ybE1?jN4?+PGL?$KnoP+`*C?49H&osRt zk0)UxC{}kuAx_bhPD212K~zGLm>ArFJ0y}EJ>&>}etyE@!35=A6UFQ6E1`hRg@=a+ zLh=0kOekQ2o12@20vSsJ+0-^PG%$kq_jmL`GAs~}kB_riy1ToPa#%rGR##WqDAUu^ zXgTx0=z}ROEv3`bQ%X!s47ffqF+r)Rsg#hAKwn>9)Z5!jadC0qpUYqFb#-<0^72Ax z;Jr3EIT8S;I3tI|dJ6m=45p-{ggQDpNG$)fv$LaYq{Z7}5*}YN0f`qj zi5DObQA7YG5=)eg5EC0`;w5%Gi|v_=r)TMXxqEGg?`&1)wz;k9y0_}oIsg8D|9?sV zk4hi~5b@ww)OaL3VjcmHhP@Wpv-{*c>O3+YLZ1ciOMOrMF6=YXj&XCSk6JH8wQgX? zM0Vc5J|Eh%@a8J)9PYO}3wwrlKU4oR??E?l!<#hnh>+gHk+(QB15(cwSi%EKZ0wDd zV~bY|xqFU|+!ID#3b0}%uxH^hlzDPwp3Q}SC&kzj86T2j?wuV|?l~tQnKyS--Mi*Wu6e!*livg zm<#7|a&iGnjQ~4?grtqo&3f2N5BOMt-Q*71@f4<`CPw)Z_VN&wzs25qp)wd9V@fhHntnV(hQuvYi;rz!*z()m6varnge&Hmi zKG%7?txfP`yowL5oI>2p@bKBwNYi7;vjfx{F_L76T9EQ6&}cNUwy}w?zPgQ9Hb$hN zj`3(&c$#sVtD!Lk@gPo><0(ifQ-oeJwwvE%m$M zX}{()7*|YbtpuK`eMh#;3TjdE8R>i>!(1?pFFx=QJaFFy%+0Lg{tFLb>i7)#9%;JJ zpcaE%Yf?yt`>X*GaGoJAM4$JLj< zi=VysGPV!aasB2RX5t86_~oZjuhr2XCAf6s9)5gd6Q4NV#^1l?NA(Ooq?F3G-v{D_ zN53&nX|SjtX5ArC1s2D6VsT|^{nX?d3Lh~8MSZeK7bZ4I6XbVxQ82j&ZJH(T=hWEx zwI5+HTthz{;N7ilOp)=Uvuz~90Ve0>aqZ_f@cP@Au{<5)+;U_K9UoXYO*xe1CwW)y zRm@6ji9uCq$DSsg$pU@}BkkF*2C{-C!{{i6G(~DbBq;(yvZx(t=44K52$|#LHqlED zr%$e8vQSMK1$_?Gs-)JI&wm)pXD(u} zc^MBLX(FyS(43q>KIl=~eO$QsI40Wf;NuV6hqcXJeD$q+6pHfP5S8h4x?)g-Q8X6-M)i(qzCznSFMi3W;QFf+z@ zD5qzyC{0=q$kAo&)>xxZ(YIa(h^3mzKCwGhwh+*A{$|{S;Mi#MSNfehcxHbwZW!D zHV%{n6;7=nUR0^I>a`d@6NmDidl0A!T;{b}3kwfDimVmj)fZmG{U2XO-d)4St$iv! zLu;mmboVxr{x+gk4ck}W#P?r%5f9&gA4XY*zx~SJ;N`pbFvq!7%K7Bu596^jXKCgm zZ|%Ucnvo_OQRU%czy%$zV5V#F?t{;d_dk+KN@Hz7mrej5i+1R1zx|2R$Qk-iJa`73 zYq!vxp2VOtU?7Q^4+HcFs*|LP(ZMEOzx+DhynYkI(TKhqVs&l-XO7Hbca-8XLBJ%1 zQfGer(TxnR?O6XGt6pMMIQ0;WEHw>y6+OHO4p;K-VZU5)0x;(v+`Ngee`^h&|JV^k z$5+u@36X5b05vte5My!a7|~n{*LQX> zAbt&*SO4oS%$hRCII1bU!$Hg3V?KkQ+avu&CoJE;90QTZ6i_vzYS#5lB>kPQ{Q&Rn zJdEd_9%65+gFCn1#f1|OA!p^@?R0U_?V;1(Am$D=<6nICvuMxEVdmmvkW4G0-Nwo5 z@8E|wZ{Vp1@55F%!mXay0@Ou-1JkibBMw=ZEz4Zu*R2ygBgb>h;Z9dz{E_+0IJGYX zH(^a<*WW#N0;i`A@Qus=jz4?$_Yek56@+V@d>tLaGd0Kj^aReGKZ90lQnxO;_qG{i z1{e_}Z0v69hQ*(MzlZPM1|05`Ww+f~nBN19Q8k=gPsTAUUDL@GlMcjYcCc|;-IAAn z-_mug-2!a>(hC0h`a1sUxhJtQKfv17P0UQJU~{m6dY%2Wg7pE-?O@3Eh0cE_Lls0p z2i*fABFep9$3{o8x*y`i^bzdSZ|A1!xV}E}1n>82Gx+F6mif;G9k{-zA7l(fl4a%W zP>%D%!kg6H&$X}YCIfu??M*!M^snH;sS6AwecajJ#2x0m%`VNiKV(oE;r6}T^iLMT zwFpy7^F%N$>~}gySxx-s&-SpJ7P!apfBB^+@yb6wgI_qkgbI?m)}{mCzU39xVuRAk z`2Y0tJ`8h6+1u~5CB=9-vFV1 z^Dze1s=DuRHDLj{jx4$MoiSe}!+~l?(2O^FjFc>F<3@;M=Z@j&nJ4k`n{VQ^cdp^3 zx36HY*Fl#lp~n3AffEGSv(q?6zYGfYIvmAY+D4=aZD zbPE?BehACQ7VwiRKgAE~3}jTiHCudqBctgk~vX zE93^MTGc5b)GZYqZlr19M-@~4_SFBk3F#o68TYBPCs;}3_^a={Lxu)$m~mxl24DKM zvnbde%!hr9x*ZJZZ$TL0%!yN&Wb(hWy@mg|`Yx{T?&~dvu8+D3CNLc$KWNezBOI`9~`K~J?H zODt-@rOB5reHpwORg5%IAqQW3(zEZhoNRwI^d#ue27&SsXqd!7LN}?Rz^0XK>vk^&I_zr*Y*yt`O z2^YSpc~!EoyE&pV2le}>>)W`vJkJdjhx7%0@ zIXUpIDRalK%J*+_xB}ARRIPqd`G7FBVaW4ykDtbC?``0ZKXV$t_3V=zCeXjTj&#^V zn)H$7)Ec#^jv>=Sx7S5Xlg$`;Z{J-bM9Z+WFikCXI3G6vm><9V&Ho_n?B&Qd2|UkL z&!KD)>h6N`L+4UHSb_Cn^DP=TO%>DXULGt^b+E0k31`yu5Hd4GYx?iM{v2kG&S@>G z_F%wBsVeuBs6|0Bl{Qq+QOzl}%I?lK8QMb}t9)6<>hdxgwQX#%nz(xJo`H!JXsANI zc!R!sg;y5&^Y`+x zm~HxH-GVQuCBc4+f?)d1iGcW%Osc3_Z!`(T*c74fsps3xCb!TsEHcq6Q=4E8P16Zn zTDxZ;voL7bH~_Z*@E*@=ync!dD~%pQwcTJ9Qf@uCK2qVpwqwY=>td=0z@!GV4wNYGXS8CI2pVr(!_l|+U?zpn|NnVrPc6frA(a)apRPyY2=*zOOQOS#Wp7`F&a z4uJuXZlhIcc%NVH@Y^+&wD^0%1R%YOWzz(C;kWb8j~9>D_e7>2tcfkeVw2Ul!i0*c zAtzDy3KBxJ9_lR_y!6H;yzs_5SeaeKQI<&8ntnOJ!Z0%~TN($#aM$~_M{W8A$)>RA=)nBb?{619V3E=knNxcYSw1ujvQaB+0uO0QS)S;})xC_w z#gQ7DX>+1j(1>HqwCl70L*|fLJfIo&h*kUPP?ih`zSL1-Y|I%>{7pv*cR31&LFp5m9@&7G+NVQ*TEUnh`at(q1GC z@>ACo;X1&m-^!T^X_!%tpoyuv)>)og6A$z{QWI(dj6UnAUQ%yOwD7cM+(flRw4pLq zuqVJZPpYs(*hD9-1zo+j7w8CPa-VuIBTUlqOJ+JNsYR9PNkXvDzKCG9W0WKdO;D=* zs0d1}3KuMNZY0AxWf@b{nk$XZ5DL3`r6$8%p#2|4TY+tcsb{3yQ!z!ie(g(MB|WQZ zkCG-QRIV{^LFB5$(YesrgMwP>qf9hcRRSkbW>(k*jpHk{LT!prOV*fCZnbIJ4|=yr z`Bo0CN%tvicR=eznz>94v;q+*gGz2K!f93=3Ms(~$ry#n1VSjlFl1^L3?8D-K|?LQ zkuF}1H0dGKU~0^&fb#xTu@k_5u7E>Q_Y;2SZM!KjH^S9OtMia5R;TGDI_=?OAUq~BM6k1p!bEO z3mmYT%I(yaT{ZyqFCj{rRdOaIVj3oppoK^zs_tK;Vq>ip zsF;FHxLS^~u(;6KzA>rXw&Vg4l#+}}vn_PRu6{=%wBu~)V}+n{W>%QoT3U+>`Cj?s v61xEhu>M+T`ZComurx|H)(S!g8GHUeeX7O*ruBC600000NkvXXu0mjf>v7`+ diff --git a/public/customers/michael-novotny.png b/public/customers/michael-novotny.png deleted file mode 100644 index 96a13a69892c1c90445cccca50ec3d28b1681971..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9902 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 gujT$M$;##b1L_e3d9pcM8~^|S07*qoM6N<$f Date: Sun, 17 Nov 2024 22:16:00 +0100 Subject: [PATCH 062/216] Remove unused utils functions --- app/lib/utils.ts | 70 ------------------------------------------------ 1 file changed, 70 deletions(-) diff --git a/app/lib/utils.ts b/app/lib/utils.ts index 4d9ce77..72f3baf 100644 --- a/app/lib/utils.ts +++ b/app/lib/utils.ts @@ -1,78 +1,8 @@ /* Copyright (C) 2024 Manuel Bustillo*/ -import { Revenue } from './definitions'; - -export const formatCurrency = (amount: number) => { - return (amount / 100).toLocaleString('en-US', { - style: 'currency', - currency: 'USD', - }); -}; - export const getCsrfToken = () => { return document.cookie .split("; ") .find((row) => row.startsWith("csrf-token")) ?.split("=")[1] || 'unknown'; } - -export const formatDateToLocal = ( - dateStr: string, - locale: string = 'en-US', -) => { - const date = new Date(dateStr); - const options: Intl.DateTimeFormatOptions = { - day: 'numeric', - month: 'short', - year: 'numeric', - }; - const formatter = new Intl.DateTimeFormat(locale, options); - return formatter.format(date); -}; - -export const generateYAxis = (revenue: Revenue[]) => { - // Calculate what labels we need to display on the y-axis - // based on highest record and in 1000s - const yAxisLabels = []; - const highestRecord = Math.max(...revenue.map((month) => month.revenue)); - const topLabel = Math.ceil(highestRecord / 1000) * 1000; - - for (let i = topLabel; i >= 0; i -= 1000) { - yAxisLabels.push(`$${i / 1000}K`); - } - - return { yAxisLabels, topLabel }; -}; - -export const generatePagination = (currentPage: number, totalPages: number) => { - // If the total number of pages is 7 or less, - // display all pages without any ellipsis. - if (totalPages <= 7) { - return Array.from({ length: totalPages }, (_, i) => i + 1); - } - - // If the current page is among the first 3 pages, - // show the first 3, an ellipsis, and the last 2 pages. - if (currentPage <= 3) { - return [1, 2, 3, '...', totalPages - 1, totalPages]; - } - - // If the current page is among the last 3 pages, - // show the first 2, an ellipsis, and the last 3 pages. - if (currentPage >= totalPages - 2) { - return [1, 2, '...', totalPages - 2, totalPages - 1, totalPages]; - } - - // If the current page is somewhere in the middle, - // show the first page, an ellipsis, the current page and its neighbors, - // another ellipsis, and the last page. - return [ - 1, - '...', - currentPage - 1, - currentPage, - currentPage + 1, - '...', - totalPages, - ]; -}; From 91484f081c15dbf24cb7204f0726044b9b860247 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 19 Nov 2024 01:08:05 +0000 Subject: [PATCH 063/216] Update dependency @playwright/test to v1.49.0 --- pnpm-lock.yaml | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c367c00..b9a4a6d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,10 +25,10 @@ importers: version: 2.1.1 next: specifier: 15.0.3 - version: 15.0.3(@playwright/test@1.48.2)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) + version: 15.0.3(@playwright/test@1.49.0)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) next-auth: specifier: 5.0.0-beta.25 - version: 5.0.0-beta.25(next@15.0.3(@playwright/test@1.48.2)(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.0.3(@playwright/test@1.49.0)(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: specifier: 8.4.49 version: 8.4.49 @@ -59,7 +59,7 @@ importers: devDependencies: '@playwright/test': specifier: ^1.46.0 - version: 1.48.2 + version: 1.49.0 '@types/bcrypt': specifier: ^5.0.2 version: 5.0.2 @@ -306,8 +306,8 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.48.2': - resolution: {integrity: sha512-54w1xCWfXuax7dz4W2M9uw0gDyh+ti/0K/MxcCUxChFh37kkdxPdfZDw5QBbuPUJHr1CiHJ1hXgSs+GgeQc5Zw==} + '@playwright/test@1.49.0': + resolution: {integrity: sha512-DMulbwQURa8rNIQrf94+jPJQ4FmOVdpE5ZppRNvWVjvhC+6sOeo28r8MgIpQRYouXRtt/FCCXU7zn20jnHR4Qw==} engines: {node: '>=18'} hasBin: true @@ -839,13 +839,13 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - playwright-core@1.48.2: - resolution: {integrity: sha512-sjjw+qrLFlriJo64du+EK0kJgZzoQPsabGF4lBvsid+3CNIZIYLgnMj9V6JY5VhM2Peh20DJWIVpVljLLnlawA==} + playwright-core@1.49.0: + resolution: {integrity: sha512-R+3KKTQF3npy5GTiKH/T+kdhoJfJojjHESR1YEWhYuEKRVfVaxH3+4+GvXE5xyCngCxhxnykk0Vlah9v8fs3jA==} engines: {node: '>=18'} hasBin: true - playwright@1.48.2: - resolution: {integrity: sha512-NjYvYgp4BPmiwfe31j4gHLa3J7bD2WiBz8Lk2RoSsmX38SVIARZ18VYjxLjAcDsAhA+F4iSEXTSGgjua0rrlgQ==} + playwright@1.49.0: + resolution: {integrity: sha512-eKpmys0UFDnfNb3vfsf8Vx2LEOtflgRebl0Im2eQQnYMA4Aqd+Zw8bEOB+7ZKvN76901mRnqdsiOGKxzVTbi7A==} engines: {node: '>=18'} hasBin: true @@ -1341,9 +1341,9 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.48.2': + '@playwright/test@1.49.0': dependencies: - playwright: 1.48.2 + playwright: 1.49.0 '@swc/counter@0.1.3': {} @@ -1735,13 +1735,13 @@ snapshots: nanoid@3.3.7: {} - next-auth@5.0.0-beta.25(next@15.0.3(@playwright/test@1.48.2)(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.0.3(@playwright/test@1.49.0)(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: '@auth/core': 0.37.2 - next: 15.0.3(@playwright/test@1.48.2)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) + next: 15.0.3(@playwright/test@1.49.0)(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@15.0.3(@playwright/test@1.48.2)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): + next@15.0.3(@playwright/test@1.49.0)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): dependencies: '@next/env': 15.0.3 '@swc/counter': 0.1.3 @@ -1761,7 +1761,7 @@ snapshots: '@next/swc-linux-x64-musl': 15.0.3 '@next/swc-win32-arm64-msvc': 15.0.3 '@next/swc-win32-x64-msvc': 15.0.3 - '@playwright/test': 1.48.2 + '@playwright/test': 1.49.0 sharp: 0.33.5 transitivePeerDependencies: - '@babel/core' @@ -1821,11 +1821,11 @@ snapshots: pirates@4.0.6: {} - playwright-core@1.48.2: {} + playwright-core@1.49.0: {} - playwright@1.48.2: + playwright@1.49.0: dependencies: - playwright-core: 1.48.2 + playwright-core: 1.49.0 optionalDependencies: fsevents: 2.3.2 From 2b9d06c670a8866313592be4a8202f5adfeda5b7 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 20 Nov 2024 01:06:15 +0000 Subject: [PATCH 064/216] Update dependency @types/node to v22.9.1 --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index cd0557c..8ce32e4 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "devDependencies": { "@playwright/test": "^1.46.0", "@types/bcrypt": "^5.0.2", - "@types/node": "22.9.0", + "@types/node": "22.9.1", "@types/react": "18.3.12", "@types/react-dom": "18.3.1" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b9a4a6d..40421f5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -64,8 +64,8 @@ importers: specifier: ^5.0.2 version: 5.0.2 '@types/node': - specifier: 22.9.0 - version: 22.9.0 + specifier: 22.9.1 + version: 22.9.1 '@types/react': specifier: 18.3.12 version: 18.3.12 @@ -328,8 +328,8 @@ packages: '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/node@22.9.0': - resolution: {integrity: sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==} + '@types/node@22.9.1': + resolution: {integrity: sha512-p8Yy/8sw1caA8CdRIQBG5tiLHmxtQKObCijiAa9Ez+d4+PRffM4054xbju0msf+cvhJpnFEeNjxmVT/0ipktrg==} '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -1358,11 +1358,11 @@ snapshots: '@types/bcrypt@5.0.2': dependencies: - '@types/node': 22.9.0 + '@types/node': 22.9.1 '@types/cookie@0.6.0': {} - '@types/node@22.9.0': + '@types/node@22.9.1': dependencies: undici-types: 6.19.8 From c8331f927e33185582182865dea6fb57db718630 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 20 Nov 2024 01:07:01 +0000 Subject: [PATCH 065/216] Update pnpm to v9.14.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8ce32e4..20e79f9 100644 --- a/package.json +++ b/package.json @@ -33,5 +33,5 @@ "engines": { "node": ">=23.0.0" }, - "packageManager": "pnpm@9.13.2+sha512.88c9c3864450350e65a33587ab801acf946d7c814ed1134da4a924f6df5a2120fd36b46aab68f7cd1d413149112d53c7db3a4136624cfd00ff1846a0c6cef48a" + "packageManager": "pnpm@9.14.1+sha512.7f1de9cffea40ff4594c48a94776112a0db325e81fb18a9400362ff7b7247f4fbd76c3011611c9f8ac58743c3dc526017894e07948de9b72052f874ee2edfdcd" } From 7134150a8100e35bdef9c7b1d0a1fe2d3d5987b6 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 21 Nov 2024 01:09:06 +0000 Subject: [PATCH 066/216] Update dependency @heroicons/react to v2.2.0 --- pnpm-lock.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 40421f5..22510d3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: dependencies: '@heroicons/react': specifier: ^2.1.4 - version: 2.1.5(react@19.0.0-rc-f38c22b244-20240704) + version: 2.2.0(react@19.0.0-rc-f38c22b244-20240704) '@tailwindcss/forms': specifier: ^0.5.7 version: 0.5.9(tailwindcss@3.4.15) @@ -100,10 +100,10 @@ packages: '@emnapi/runtime@1.2.0': resolution: {integrity: sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==} - '@heroicons/react@2.1.5': - resolution: {integrity: sha512-FuzFN+BsHa+7OxbvAERtgBTNeZpUjgM/MIizfVkSCL2/edriN0Hx/DWRCR//aPYwO5QX/YlgLGXk+E3PcfZwjA==} + '@heroicons/react@2.2.0': + resolution: {integrity: sha512-LMcepvRaS9LYHJGsF0zzmgKCUim/X3N/DQKc4jepAXJ7l8QxJ1PmxJzqplF2Z3FE4PqBAIGyJAQ/w4B5dsqbtQ==} peerDependencies: - react: '>= 16' + react: '>= 16 || ^19.0.0-rc' '@img/sharp-darwin-arm64@0.33.5': resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} @@ -1178,7 +1178,7 @@ snapshots: tslib: 2.6.3 optional: true - '@heroicons/react@2.1.5(react@19.0.0-rc-f38c22b244-20240704)': + '@heroicons/react@2.2.0(react@19.0.0-rc-f38c22b244-20240704)': dependencies: react: 19.0.0-rc-f38c22b244-20240704 From 62662789e80fd3b05f53079f1163bd7370c875d9 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 24 Nov 2024 01:06:03 +0000 Subject: [PATCH 067/216] Update dependency @types/node to v22.9.3 --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 20e79f9..f7fb725 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "devDependencies": { "@playwright/test": "^1.46.0", "@types/bcrypt": "^5.0.2", - "@types/node": "22.9.1", + "@types/node": "22.9.3", "@types/react": "18.3.12", "@types/react-dom": "18.3.1" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 22510d3..7ff04ee 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -64,8 +64,8 @@ importers: specifier: ^5.0.2 version: 5.0.2 '@types/node': - specifier: 22.9.1 - version: 22.9.1 + specifier: 22.9.3 + version: 22.9.3 '@types/react': specifier: 18.3.12 version: 18.3.12 @@ -328,8 +328,8 @@ packages: '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/node@22.9.1': - resolution: {integrity: sha512-p8Yy/8sw1caA8CdRIQBG5tiLHmxtQKObCijiAa9Ez+d4+PRffM4054xbju0msf+cvhJpnFEeNjxmVT/0ipktrg==} + '@types/node@22.9.3': + resolution: {integrity: sha512-F3u1fs/fce3FFk+DAxbxc78DF8x0cY09RRL8GnXLmkJ1jvx3TtPdWoTT5/NiYfI5ASqXBmfqJi9dZ3gxMx4lzw==} '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -1358,11 +1358,11 @@ snapshots: '@types/bcrypt@5.0.2': dependencies: - '@types/node': 22.9.1 + '@types/node': 22.9.3 '@types/cookie@0.6.0': {} - '@types/node@22.9.1': + '@types/node@22.9.3': dependencies: undici-types: 6.19.8 From 4c0d3aedaff7b7a2d33e5d114da339ef0de4361c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 24 Nov 2024 01:07:10 +0000 Subject: [PATCH 068/216] Update dependency node to v23.3.0 --- .nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nvmrc b/.nvmrc index 3bc99c2..19e7d57 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -23.2.0 \ No newline at end of file +23.3.0 \ No newline at end of file From 04b22efa36767fc8624d5afb28cfa6541c982913 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 25 Nov 2024 01:09:59 +0000 Subject: [PATCH 069/216] Update pnpm to v9.14.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f7fb725..af0f579 100644 --- a/package.json +++ b/package.json @@ -33,5 +33,5 @@ "engines": { "node": ">=23.0.0" }, - "packageManager": "pnpm@9.14.1+sha512.7f1de9cffea40ff4594c48a94776112a0db325e81fb18a9400362ff7b7247f4fbd76c3011611c9f8ac58743c3dc526017894e07948de9b72052f874ee2edfdcd" + "packageManager": "pnpm@9.14.2+sha512.6e2baf77d06b9362294152c851c4f278ede37ab1eba3a55fda317a4a17b209f4dbb973fb250a77abc463a341fcb1f17f17cfa24091c4eb319cda0d9b84278387" } From f30d0711e9619d1df5272b47938d4c01939628f0 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 25 Nov 2024 01:10:19 +0000 Subject: [PATCH 070/216] Update dependency typescript to v5.7.2 --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index f7fb725..41a5d7c 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "react": "19.0.0-rc-f38c22b244-20240704", "react-dom": "19.0.0-rc-f38c22b244-20240704", "tailwindcss": "3.4.15", - "typescript": "5.6.3", + "typescript": "5.7.2", "use-debounce": "^10.0.1", "zod": "^3.23.8" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7ff04ee..37f19dc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -48,8 +48,8 @@ importers: specifier: 3.4.15 version: 3.4.15 typescript: - specifier: 5.6.3 - version: 5.6.3 + specifier: 5.7.2 + version: 5.7.2 use-debounce: specifier: ^10.0.1 version: 10.0.4(react@19.0.0-rc-f38c22b244-20240704) @@ -1096,8 +1096,8 @@ packages: tslib@2.6.3: resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} - typescript@5.6.3: - resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} + typescript@5.7.2: + resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} engines: {node: '>=14.17'} hasBin: true @@ -2104,7 +2104,7 @@ snapshots: tslib@2.6.3: {} - typescript@5.6.3: {} + typescript@5.7.2: {} undici-types@6.19.8: {} From 4f3446eb571c48d3ee51906b0f65cc832b72896d Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 27 Nov 2024 01:08:49 +0000 Subject: [PATCH 071/216] Update dependency @types/node to v22.10.0 --- package.json | 2 +- pnpm-lock.yaml | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 4b61074..871ed11 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "devDependencies": { "@playwright/test": "^1.46.0", "@types/bcrypt": "^5.0.2", - "@types/node": "22.9.3", + "@types/node": "22.10.0", "@types/react": "18.3.12", "@types/react-dom": "18.3.1" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 37f19dc..94a99da 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -64,8 +64,8 @@ importers: specifier: ^5.0.2 version: 5.0.2 '@types/node': - specifier: 22.9.3 - version: 22.9.3 + specifier: 22.10.0 + version: 22.10.0 '@types/react': specifier: 18.3.12 version: 18.3.12 @@ -328,8 +328,8 @@ packages: '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/node@22.9.3': - resolution: {integrity: sha512-F3u1fs/fce3FFk+DAxbxc78DF8x0cY09RRL8GnXLmkJ1jvx3TtPdWoTT5/NiYfI5ASqXBmfqJi9dZ3gxMx4lzw==} + '@types/node@22.10.0': + resolution: {integrity: sha512-XC70cRZVElFHfIUB40FgZOBbgJYFKKMa5nb9lxcwYstFG/Mi+/Y0bGS+rs6Dmhmkpq4pnNiLiuZAbc02YCOnmA==} '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -1101,8 +1101,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - undici-types@6.19.8: - resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} update-browserslist-db@1.1.0: resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} @@ -1358,13 +1358,13 @@ snapshots: '@types/bcrypt@5.0.2': dependencies: - '@types/node': 22.9.3 + '@types/node': 22.10.0 '@types/cookie@0.6.0': {} - '@types/node@22.9.3': + '@types/node@22.10.0': dependencies: - undici-types: 6.19.8 + undici-types: 6.20.0 '@types/prop-types@15.7.12': {} @@ -2106,7 +2106,7 @@ snapshots: typescript@5.7.2: {} - undici-types@6.19.8: {} + undici-types@6.20.0: {} update-browserslist-db@1.1.0(browserslist@4.23.3): dependencies: From 7846dddb60e139cfc013c241e8dfd11e4a11cbe1 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 29 Nov 2024 01:06:45 +0000 Subject: [PATCH 072/216] Update dependency @types/node to v22.10.1 --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 871ed11..2129c0b 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "devDependencies": { "@playwright/test": "^1.46.0", "@types/bcrypt": "^5.0.2", - "@types/node": "22.10.0", + "@types/node": "22.10.1", "@types/react": "18.3.12", "@types/react-dom": "18.3.1" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 94a99da..b5d7671 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -64,8 +64,8 @@ importers: specifier: ^5.0.2 version: 5.0.2 '@types/node': - specifier: 22.10.0 - version: 22.10.0 + specifier: 22.10.1 + version: 22.10.1 '@types/react': specifier: 18.3.12 version: 18.3.12 @@ -328,8 +328,8 @@ packages: '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/node@22.10.0': - resolution: {integrity: sha512-XC70cRZVElFHfIUB40FgZOBbgJYFKKMa5nb9lxcwYstFG/Mi+/Y0bGS+rs6Dmhmkpq4pnNiLiuZAbc02YCOnmA==} + '@types/node@22.10.1': + resolution: {integrity: sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==} '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -1358,11 +1358,11 @@ snapshots: '@types/bcrypt@5.0.2': dependencies: - '@types/node': 22.10.0 + '@types/node': 22.10.1 '@types/cookie@0.6.0': {} - '@types/node@22.10.0': + '@types/node@22.10.1': dependencies: undici-types: 6.20.0 From f88c14fefd69a13298a7083ceb49dba142f2671f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 29 Nov 2024 01:06:59 +0000 Subject: [PATCH 073/216] Update dependency primereact to v10.8.5 --- pnpm-lock.yaml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 94a99da..13e61ee 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,7 +37,7 @@ importers: version: 7.0.0 primereact: specifier: ^10.8.2 - version: 10.8.4(@types/react@18.3.12)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) + version: 10.8.5(@types/react@18.3.12)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) react: specifier: 19.0.0-rc-f38c22b244-20240704 version: 19.0.0-rc-f38c22b244-20240704 @@ -93,8 +93,8 @@ packages: nodemailer: optional: true - '@babel/runtime@7.25.7': - resolution: {integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==} + '@babel/runtime@7.26.0': + resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} engines: {node: '>=6.9.0'} '@emnapi/runtime@1.2.0': @@ -908,8 +908,8 @@ packages: primeicons@7.0.0: resolution: {integrity: sha512-jK3Et9UzwzTsd6tzl2RmwrVY/b8raJ3QZLzoDACj+oTJ0oX7L9Hy+XnVwgo4QVKlKpnP/Ur13SXV/pVh4LzaDw==} - primereact@10.8.4: - resolution: {integrity: sha512-jwkSzq6pOHayzEh+9dgk2M71gEZtoQakwPKVo3FUJO3eEX3SoAOchON+Xm1tGCNqtd66ca8RgOWQcpv3AQoMvg==} + primereact@10.8.5: + resolution: {integrity: sha512-B1LeJdNGGAB8P1VRJE0TDYz6rZSDwxE7Ft8PLFjRYLO44+mIJNDsLYSB56LRJOoqUNRhQrRIe/5ctS5eyQAzwQ==} engines: {node: '>=14.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -1169,7 +1169,7 @@ snapshots: preact: 10.11.3 preact-render-to-string: 5.2.3(preact@10.11.3) - '@babel/runtime@7.25.7': + '@babel/runtime@7.26.0': dependencies: regenerator-runtime: 0.14.1 @@ -1535,7 +1535,7 @@ snapshots: dom-helpers@5.2.1: dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 csstype: 3.1.3 eastasianwidth@0.2.0: {} @@ -1883,7 +1883,7 @@ snapshots: primeicons@7.0.0: {} - primereact@10.8.4(@types/react@18.3.12)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): + primereact@10.8.5(@types/react@18.3.12)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): dependencies: '@types/react-transition-group': 4.4.11 react: 19.0.0-rc-f38c22b244-20240704 @@ -1909,7 +1909,7 @@ snapshots: react-transition-group@4.4.5(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 From 54be5515e5adb71f713bae13c669006baad3c79d Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sat, 30 Nov 2024 20:21:19 +0100 Subject: [PATCH 074/216] Update API routes to target the default tenant --- app/api/expenses.tsx | 4 ++-- app/api/groups.tsx | 2 +- app/api/guests.tsx | 8 ++++---- app/api/tableSimulations.tsx | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/api/expenses.tsx b/app/api/expenses.tsx index f73f6b7..f384413 100644 --- a/app/api/expenses.tsx +++ b/app/api/expenses.tsx @@ -4,7 +4,7 @@ import { Expense } from '@/app/lib/definitions'; import { getCsrfToken } from '@/app/lib/utils'; export function loadExpenses(onLoad?: (expenses: Expense[]) => void) { - fetch("/api/expenses") + fetch("/api/default/expenses") .then((response) => response.json()) .then((data) => { onLoad && onLoad(data.map((record: any) => { @@ -21,7 +21,7 @@ export function loadExpenses(onLoad?: (expenses: Expense[]) => void) { } export function updateExpense(expense: Expense) { - fetch(`/api/expenses/${expense.id}`, + fetch(`/api/default/expenses/${expense.id}`, { method: 'PUT', body: JSON.stringify({ diff --git a/app/api/groups.tsx b/app/api/groups.tsx index aa0e4db..cf83904 100644 --- a/app/api/groups.tsx +++ b/app/api/groups.tsx @@ -3,7 +3,7 @@ import { Group } from '@/app/lib/definitions'; export function loadGroups(onLoad?: (groups: Group[]) => void) { - fetch("/api/groups") + fetch("/api/default/groups") .then((response) => response.json()) .then((data) => { onLoad && onLoad(data.map((record: any) => { diff --git a/app/api/guests.tsx b/app/api/guests.tsx index df218b4..628e7e5 100644 --- a/app/api/guests.tsx +++ b/app/api/guests.tsx @@ -4,7 +4,7 @@ import { Guest } from '@/app/lib/definitions'; import { getCsrfToken } from '@/app/lib/utils'; export function loadGuests(onLoad?: (guests: Guest[]) => void) { - fetch("/api/guests") + fetch("/api/default/guests") .then((response) => response.json()) .then((data) => { onLoad && onLoad(data.map((record: any) => { @@ -22,7 +22,7 @@ export function loadGuests(onLoad?: (guests: Guest[]) => void) { }; export function updateGuest(guest: Guest) { - return fetch(`/api/guests/${guest.id}`, + return fetch(`/api/default/guests/${guest.id}`, { method: 'PUT', body: JSON.stringify({ guest: { name: guest.name, status: guest.status } }), @@ -35,7 +35,7 @@ export function updateGuest(guest: Guest) { } export function createGuest(name: string, group_id: string, onCreate?: () => void) { - fetch("/api/guests", { + fetch("/api/default/guests", { method: 'POST', body: JSON.stringify({ name: name, group_id: group_id }), headers: { @@ -51,7 +51,7 @@ export function createGuest(name: string, group_id: string, onCreate?: () => voi } export function destroyGuest(guest: Guest, onDestroy?: () => void) { - fetch(`/api/guests/${guest.id}`, { + fetch(`/api/default/guests/${guest.id}`, { method: 'DELETE', headers: { 'X-CSRF-TOKEN': getCsrfToken(), diff --git a/app/api/tableSimulations.tsx b/app/api/tableSimulations.tsx index 4e28688..2072661 100644 --- a/app/api/tableSimulations.tsx +++ b/app/api/tableSimulations.tsx @@ -3,7 +3,7 @@ import { TableArrangement } from '@/app/lib/definitions'; export function loadTableSimulations(onLoad?: (tableSimulations: TableArrangement[]) => void) { - fetch('/api/tables_arrangements') + fetch('/api/default/tables_arrangements') .then((response) => response.json()) .then((data) => { onLoad && onLoad(data.map((record: any) => { From 3385230353299ba639223357899c1e327f16b94a Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sat, 30 Nov 2024 20:58:17 +0100 Subject: [PATCH 075/216] Adapt Playwright mocks to use the new URL --- tests/guests.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/guests.spec.ts b/tests/guests.spec.ts index 87abe3a..3a564d7 100644 --- a/tests/guests.spec.ts +++ b/tests/guests.spec.ts @@ -1,7 +1,7 @@ import { test, expect, Page } from '@playwright/test' const mockGuestsAPI = ({ page }: { page: Page }) => { - page.route('*/**/api/guests', async route => { + page.route('*/**/api/default/guests', async route => { const json = [ { "id": "f4a09c28-40ea-4553-90a5-96935a59cac6", @@ -28,7 +28,7 @@ const mockGuestsAPI = ({ page }: { page: Page }) => { } const mockGroupsAPI = ({ page }: { page: Page }) => { - page.route('*/**/api/groups', async route => { + page.route('*/**/api/default/groups', async route => { const json = [ { "id": "ee44ffb9-1147-4842-a378-9eaeb0f0871a", From bb403fd512f1a4727b848f5dd212cf27f212a4bb Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 1 Dec 2024 01:08:40 +0000 Subject: [PATCH 076/216] Update pnpm to v9.14.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2129c0b..41ea854 100644 --- a/package.json +++ b/package.json @@ -33,5 +33,5 @@ "engines": { "node": ">=23.0.0" }, - "packageManager": "pnpm@9.14.2+sha512.6e2baf77d06b9362294152c851c4f278ede37ab1eba3a55fda317a4a17b209f4dbb973fb250a77abc463a341fcb1f17f17cfa24091c4eb319cda0d9b84278387" + "packageManager": "pnpm@9.14.4+sha512.c8180b3fbe4e4bca02c94234717896b5529740a6cbadf19fa78254270403ea2f27d4e1d46a08a0f56c89b63dc8ebfd3ee53326da720273794e6200fcf0d184ab" } From 9b3443addfd8d537a6a771e2c451f387e0871ba2 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 1 Dec 2024 16:31:56 +0100 Subject: [PATCH 077/216] Define a basic login form with redirection to the Dashboard --- app/api/authentication.tsx | 15 ++++++++++++++ app/page.tsx | 17 +++++++++++++++- app/ui/components/login-form.tsx | 34 ++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 app/api/authentication.tsx create mode 100644 app/ui/components/login-form.tsx diff --git a/app/api/authentication.tsx b/app/api/authentication.tsx new file mode 100644 index 0000000..4393b98 --- /dev/null +++ b/app/api/authentication.tsx @@ -0,0 +1,15 @@ +import { getCsrfToken } from '@/app/lib/utils'; + +export function login({ email, password, onLogin }: { email: string, password: string, onLogin: () => void }) { + console.log(email, password); + return fetch("/api/default/users/sign_in", { + method: 'POST', + body: JSON.stringify({ user: { email, password } }), + headers: { + 'Content-Type': 'application/json', + 'X-CSRF-TOKEN': getCsrfToken(), + } + }) + .then(onLogin) + .catch((error) => console.error(error)); +} \ No newline at end of file diff --git a/app/page.tsx b/app/page.tsx index 95ca011..1d01aee 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -2,11 +2,26 @@ import Link from 'next/link'; import styles from '@/app/ui/home.module.css'; +import LoginForm from '@/app/ui/components/login-form'; + + export default function Page() { return (
- +
+
+ + Already have an account? Sign in + + +
+ +
+ Don't have an account? Register now! +
+
+
); } diff --git a/app/ui/components/login-form.tsx b/app/ui/components/login-form.tsx new file mode 100644 index 0000000..4ae32da --- /dev/null +++ b/app/ui/components/login-form.tsx @@ -0,0 +1,34 @@ +'use client'; + +import { FloatLabel } from 'primereact/floatlabel'; +import { InputText } from 'primereact/inputtext'; +import { login } from '../../api/authentication'; +import { useState } from 'react'; +import { classNames } from './button'; +import { useRouter } from 'next/navigation' + +export default function LoginForm() { + const [email, setEmail] = useState(""); + const [password, setPassword] = useState(""); + + const router = useRouter() + + return ( +
+ + setEmail(e.target.value)} /> + + + + setPassword(e.target.value)} /> + + + +
+ ) +} \ No newline at end of file From 989820e41bb129ef5feddc4ecc6b28db761b9f2e Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 1 Dec 2024 15:33:24 +0000 Subject: [PATCH 078/216] Add copyright notice --- app/api/authentication.tsx | 2 ++ app/ui/components/login-form.tsx | 2 ++ 2 files changed, 4 insertions(+) diff --git a/app/api/authentication.tsx b/app/api/authentication.tsx index 4393b98..e6637af 100644 --- a/app/api/authentication.tsx +++ b/app/api/authentication.tsx @@ -1,3 +1,5 @@ +/* Copyright (C) 2024 Manuel Bustillo*/ + import { getCsrfToken } from '@/app/lib/utils'; export function login({ email, password, onLogin }: { email: string, password: string, onLogin: () => void }) { diff --git a/app/ui/components/login-form.tsx b/app/ui/components/login-form.tsx index 4ae32da..492d1d2 100644 --- a/app/ui/components/login-form.tsx +++ b/app/ui/components/login-form.tsx @@ -1,3 +1,5 @@ +/* Copyright (C) 2024 Manuel Bustillo*/ + 'use client'; import { FloatLabel } from 'primereact/floatlabel'; From 7697148b7dd33b0b6706de2ef80add0df08cb3e7 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 1 Dec 2024 17:29:57 +0100 Subject: [PATCH 079/216] Basic logout flow --- app/api/authentication.tsx | 23 ++++++++++++++++++++++- app/lib/definitions.ts | 5 +++++ app/ui/components/login-form.tsx | 22 ++++++++++++++++++---- app/ui/dashboard/sidenav.tsx | 28 +++++++++++++++++++++------- 4 files changed, 66 insertions(+), 12 deletions(-) diff --git a/app/api/authentication.tsx b/app/api/authentication.tsx index e6637af..3275700 100644 --- a/app/api/authentication.tsx +++ b/app/api/authentication.tsx @@ -1,6 +1,7 @@ /* Copyright (C) 2024 Manuel Bustillo*/ import { getCsrfToken } from '@/app/lib/utils'; +import { User } from '@/app/lib/definitions'; export function login({ email, password, onLogin }: { email: string, password: string, onLogin: () => void }) { console.log(email, password); @@ -14,4 +15,24 @@ export function login({ email, password, onLogin }: { email: string, password: s }) .then(onLogin) .catch((error) => console.error(error)); -} \ No newline at end of file +} + +export function logout({ onLogout }: { onLogout: () => void }) { + fetch("/api/default/users/sign_out", { + method: 'DELETE', + headers: { + 'X-CSRF-TOKEN': getCsrfToken(), + } + }).then(onLogout) + .catch((error) => console.error(error)); +} + +export function getCurrentUser({ onLoad }: { onLoad: (user: User) => void }) { + fetch("/api/default/users/current") + .then((response) => response.json()) + .then((data) => { + onLoad(data); + }, (error) => { + return null; + }); +} \ No newline at end of file diff --git a/app/lib/definitions.ts b/app/lib/definitions.ts index 5c008c9..5511a46 100644 --- a/app/lib/definitions.ts +++ b/app/lib/definitions.ts @@ -54,3 +54,8 @@ export type guestsTable = { amount: number; status: 'pending' | 'paid'; }; + +export type User = { + id: string; + email: string; +} \ No newline at end of file diff --git a/app/ui/components/login-form.tsx b/app/ui/components/login-form.tsx index 492d1d2..13c6349 100644 --- a/app/ui/components/login-form.tsx +++ b/app/ui/components/login-form.tsx @@ -4,16 +4,23 @@ import { FloatLabel } from 'primereact/floatlabel'; import { InputText } from 'primereact/inputtext'; -import { login } from '../../api/authentication'; -import { useState } from 'react'; +import { getCurrentUser, login } from '../../api/authentication'; +import { useState, useEffect } from 'react'; import { classNames } from './button'; import { useRouter } from 'next/navigation' +import { User } from '../../lib/definitions'; export default function LoginForm() { const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); - const router = useRouter() + const router = useRouter(); + + const [currentUser, setCurrentUser] = useState(null); + + useEffect(() => { + localStorage.setItem('currentUser', JSON.stringify(currentUser)); + }, [currentUser]); return (
@@ -28,7 +35,14 @@ export default function LoginForm() {
diff --git a/app/ui/dashboard/sidenav.tsx b/app/ui/dashboard/sidenav.tsx index a13a2e6..39a2346 100644 --- a/app/ui/dashboard/sidenav.tsx +++ b/app/ui/dashboard/sidenav.tsx @@ -1,30 +1,44 @@ /* Copyright (C) 2024 Manuel Bustillo*/ +'use client'; + import Link from 'next/link'; import NavLinks from '@/app/ui/dashboard/nav-links'; import { PowerIcon } from '@heroicons/react/24/outline'; import { gloriaHallelujah } from '@/app/ui/fonts'; +import { logout } from '@/app/api/authentication'; +import { useRouter } from 'next/navigation'; export default function SideNav() { + const router = useRouter(); + return (
-
+

Wedding Planner

-
- -
+
); From 868f950559999574755cce8e2c9aff993ef7edc9 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 1 Dec 2024 17:33:26 +0100 Subject: [PATCH 080/216] Display email of current user --- app/ui/dashboard/sidenav.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/app/ui/dashboard/sidenav.tsx b/app/ui/dashboard/sidenav.tsx index 39a2346..437cbe6 100644 --- a/app/ui/dashboard/sidenav.tsx +++ b/app/ui/dashboard/sidenav.tsx @@ -25,6 +25,7 @@ export default function SideNav() {
+ Logged in as {JSON.parse(localStorage.getItem('currentUser') || '{}').email} +
+ ); +} \ No newline at end of file From 4d576b07da81c34b1703a265e3ba24990f6511e1 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sat, 7 Dec 2024 13:32:08 +0100 Subject: [PATCH 088/216] Basic error validation in the form --- app/api/authentication.tsx | 29 ++++++++++++++++++++----- app/lib/definitions.ts | 6 ++++- app/lib/utils.ts | 5 +++++ app/ui/components/registration-form.tsx | 12 ++++++++-- 4 files changed, 43 insertions(+), 9 deletions(-) diff --git a/app/api/authentication.tsx b/app/api/authentication.tsx index a7648f6..5390fd5 100644 --- a/app/api/authentication.tsx +++ b/app/api/authentication.tsx @@ -1,7 +1,7 @@ /* Copyright (C) 2024 Manuel Bustillo*/ -import { getCsrfToken, getSlug } from '@/app/lib/utils'; -import { Captcha, User } from '@/app/lib/definitions'; +import { asArray, getCsrfToken, getSlug } from '@/app/lib/utils'; +import { Captcha, StructuredErrors, User } from '@/app/lib/definitions'; export function login({ email, password, onLogin }: { email: string, password: string, onLogin: (user: User) => void }) { return fetch(`/api/${getSlug()}/users/sign_in`, { @@ -34,13 +34,23 @@ export function logout({ onLogout }: { onLogout: () => void }) { .catch((error) => console.error(error)); } -export function register({slug, email, password, passwordConfirmation, captcha, onRegister}: { +function flattenErrors(errors: StructuredErrors): string[] { + if(errors instanceof Array) { + return errors; + } + return Object.keys(errors).map((key) => { + return `${key}: ${asArray(errors[key]).join(', ')}`; + }); +} + +export function register({slug, email, password, passwordConfirmation, captcha, onRegister, onError}: { slug: string, email: string, password: string, passwordConfirmation: string, captcha: Captcha, - onRegister: () => void + onRegister: () => void, + onError: (errors: string[]) => void }){ fetch(`/api/${slug}/users`, { method: 'POST', @@ -55,6 +65,13 @@ export function register({slug, email, password, passwordConfirmation, captcha, 'Content-Type': 'application/json', 'X-CSRF-TOKEN': getCsrfToken(), } - }).then(onRegister) - .catch((error) => console.error(error)); + }).then((response) => { + if(response.ok) { + response.json().then(onRegister); + } else { + response.json().then((data: any) => { + onError(data.errors && flattenErrors(data.errors) || [data.error]); + }); + } + }) } diff --git a/app/lib/definitions.ts b/app/lib/definitions.ts index 8e161e4..aba529b 100644 --- a/app/lib/definitions.ts +++ b/app/lib/definitions.ts @@ -69,4 +69,8 @@ export type User = { export type Captcha = { id: string; answer: string; -} \ No newline at end of file +} + +export type StructuredErrors = { + [key: string]: string[]|string; +}; \ No newline at end of file diff --git a/app/lib/utils.ts b/app/lib/utils.ts index 069744a..bbd6700 100644 --- a/app/lib/utils.ts +++ b/app/lib/utils.ts @@ -13,3 +13,8 @@ export const getSlug = () => localStorage.getItem('slug') || 'default'; export const capitalize = (val:string) => { return String(val).charAt(0).toUpperCase() + String(val).slice(1); } + +// From https://stackoverflow.com/a/62118163/3607039 +export function asArray(value: T | T[]): T[] { + return ([] as T[]).concat(value) +} \ No newline at end of file diff --git a/app/ui/components/registration-form.tsx b/app/ui/components/registration-form.tsx index 2c2d304..5c4fb71 100644 --- a/app/ui/components/registration-form.tsx +++ b/app/ui/components/registration-form.tsx @@ -11,6 +11,8 @@ import { register } from '@/app/api/authentication'; import { getCaptchaChallenge } from '@/app/api/captcha'; export default function RegistrationForm() { + const [errors, setErrors] = useState([]); + const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [passwordConfirmation, setPasswordConfirmation] = useState(""); @@ -26,6 +28,7 @@ export default function RegistrationForm() { console.log(id, url); setCaptchaId(id); setCaptchaUrl(url); + setCaptchaAnswer(""); } }); } @@ -52,10 +55,14 @@ export default function RegistrationForm() { captcha - setCaptchaAnswer(e.target.value)} /> + setCaptchaAnswer(e.target.value)} /> + {errors.map((error, index) => ( +
{error}
+ ))} + -
+ +
+ ) + ); } \ No newline at end of file From 809da23b91110b357a0c440cc0d335a11ed101e7 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sat, 7 Dec 2024 18:11:21 +0000 Subject: [PATCH 090/216] Add copyright notice --- app/api/captcha.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/api/captcha.tsx b/app/api/captcha.tsx index 07074c7..e49ac00 100644 --- a/app/api/captcha.tsx +++ b/app/api/captcha.tsx @@ -1,3 +1,5 @@ +/* Copyright (C) 2024 Manuel Bustillo*/ + import { data } from "autoprefixer"; import { getCsrfToken } from "../lib/utils"; From b6db72a5b7d40cd80ac6bbba9c2456383c686bbc Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sat, 7 Dec 2024 22:59:36 +0100 Subject: [PATCH 091/216] Update the way to get params from the URL --- app/[slug]/page.tsx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/[slug]/page.tsx b/app/[slug]/page.tsx index 00bd750..5f518f7 100644 --- a/app/[slug]/page.tsx +++ b/app/[slug]/page.tsx @@ -1,12 +1,15 @@ /* Copyright (C) 2024 Manuel Bustillo*/ -'use client'; +'use client'; + import LoginForm from '@/app/ui/components/login-form'; import RegistrationForm from '@/app/ui/components/registration-form'; +import { useParams } from 'next/navigation' -export default async function Page({ params }: { params: Promise<{ slug: string }> }) { +export default async function Page() { + const params = useParams<{ slug: string }>() + localStorage.setItem('slug', await params.slug); - localStorage.setItem('slug', (await params).slug) return (
From f68587419d13847c76772384de8e66934f7533ab Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 8 Dec 2024 01:08:50 +0000 Subject: [PATCH 092/216] Update pnpm to v9.15.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b1327ae..5311994 100644 --- a/package.json +++ b/package.json @@ -33,5 +33,5 @@ "engines": { "node": ">=23.0.0" }, - "packageManager": "pnpm@9.14.4+sha512.c8180b3fbe4e4bca02c94234717896b5529740a6cbadf19fa78254270403ea2f27d4e1d46a08a0f56c89b63dc8ebfd3ee53326da720273794e6200fcf0d184ab" + "packageManager": "pnpm@9.15.0+sha512.76e2379760a4328ec4415815bcd6628dee727af3779aaa4c914e3944156c4299921a89f976381ee107d41f12cfa4b66681ca9c718f0668fa0831ed4c6d8ba56c" } From b4cfd91ff480244f9b5be521e328c9aa22563d0f Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 8 Dec 2024 09:31:31 +0100 Subject: [PATCH 093/216] Preload a CSRF token on the registration page --- app/[slug]/page.tsx | 14 +++++++++++++- app/api/authentication.tsx | 19 ++++++++++++++----- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/app/[slug]/page.tsx b/app/[slug]/page.tsx index 5f518f7..ea3b9a4 100644 --- a/app/[slug]/page.tsx +++ b/app/[slug]/page.tsx @@ -5,10 +5,22 @@ import LoginForm from '@/app/ui/components/login-form'; import RegistrationForm from '@/app/ui/components/registration-form'; import { useParams } from 'next/navigation' +import { useEffect } from 'react'; +import { retrieveCSRFToken } from '../api/authentication'; +import { getCsrfToken } from '../lib/utils'; export default async function Page() { const params = useParams<{ slug: string }>() - localStorage.setItem('slug', await params.slug); + + useEffect(() => { + if (getCsrfToken() == 'unknown') { + retrieveCSRFToken(); + } + }, []); + + if (typeof window !== 'undefined') { + localStorage.setItem('slug', await params.slug); + } return (
diff --git a/app/api/authentication.tsx b/app/api/authentication.tsx index 5390fd5..69a52b4 100644 --- a/app/api/authentication.tsx +++ b/app/api/authentication.tsx @@ -35,7 +35,7 @@ export function logout({ onLogout }: { onLogout: () => void }) { } function flattenErrors(errors: StructuredErrors): string[] { - if(errors instanceof Array) { + if (errors instanceof Array) { return errors; } return Object.keys(errors).map((key) => { @@ -43,7 +43,16 @@ function flattenErrors(errors: StructuredErrors): string[] { }); } -export function register({slug, email, password, passwordConfirmation, captcha, onRegister, onError}: { +// At this moment we're making an initial request to get a valid CSRF token +export function retrieveCSRFToken() { + return fetch(`/api/token`, { + headers: { + 'Accept': 'application/json', + } + }).then((response) => { return null }); +} + +export function register({ slug, email, password, passwordConfirmation, captcha, onRegister, onError }: { slug: string, email: string, password: string, @@ -51,11 +60,11 @@ export function register({slug, email, password, passwordConfirmation, captcha, captcha: Captcha, onRegister: () => void, onError: (errors: string[]) => void -}){ +}) { fetch(`/api/${slug}/users`, { method: 'POST', body: JSON.stringify( - { + { user: { email, password, password_confirmation: passwordConfirmation }, captcha: { id: captcha.id, answer: captcha.answer } } @@ -66,7 +75,7 @@ export function register({slug, email, password, passwordConfirmation, captcha, 'X-CSRF-TOKEN': getCsrfToken(), } }).then((response) => { - if(response.ok) { + if (response.ok) { response.json().then(onRegister); } else { response.json().then((data: any) => { From ad0b09c3df0134b870a547ecf91b14f191dda5f1 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 8 Dec 2024 12:45:15 +0100 Subject: [PATCH 094/216] Add form to create a new group --- app/[slug]/dashboard/guests/page.tsx | 15 +++- app/api/groups.tsx | 41 ++++++++++- app/lib/definitions.ts | 11 +-- app/ui/components/group-form-dialog.tsx | 91 +++++++++++++++++++++++++ app/ui/components/guest-form-dialog.tsx | 2 +- 5 files changed, 152 insertions(+), 8 deletions(-) create mode 100644 app/ui/components/group-form-dialog.tsx diff --git a/app/[slug]/dashboard/guests/page.tsx b/app/[slug]/dashboard/guests/page.tsx index 09db838..20cc211 100644 --- a/app/[slug]/dashboard/guests/page.tsx +++ b/app/[slug]/dashboard/guests/page.tsx @@ -7,6 +7,7 @@ import { loadGuests } from '@/app/api/guests'; import { Group, Guest } from '@/app/lib/definitions'; import { classNames } from '@/app/ui/components/button'; import GuestFormDialog from '@/app/ui/components/guest-form-dialog'; +import GroupFormDialog from '@/app/ui/components/group-form-dialog'; import GroupsTable from '@/app/ui/groups/table'; import SkeletonTable from '@/app/ui/guests/skeleton-row'; import GuestsTable from '@/app/ui/guests/table'; @@ -31,6 +32,7 @@ export default function Page() { const [groupsLoaded, setGroupsLoaded] = useState(false); const [groups, setGroups] = useState>([]); + const [groupBeingEdited, setGroupBeingEdited] = useState(undefined); const [guestsLoaded, setGuestsLoaded] = useState(false); const [guests, setGuests] = useState>([]); @@ -59,7 +61,18 @@ export default function Page() {
-
+
+ + + { refreshGroups(); setGroupBeingEdited(undefined) }} + group={groupBeingEdited} + visible={groupBeingEdited !== undefined} + onHide={() => { setGroupBeingEdited(undefined) }} + /> + }> diff --git a/app/api/groups.tsx b/app/api/groups.tsx index 807c19f..1ffc0b5 100644 --- a/app/api/groups.tsx +++ b/app/api/groups.tsx @@ -1,7 +1,7 @@ /* Copyright (C) 2024 Manuel Bustillo*/ import { Group } from '@/app/lib/definitions'; -import { getSlug } from '../lib/utils'; +import { getCsrfToken, getSlug } from '../lib/utils'; export function loadGroups(onLoad?: (groups: Group[]) => void) { fetch(`/api/${getSlug()}/groups`) @@ -25,4 +25,43 @@ export function loadGroups(onLoad?: (groups: Group[]) => void) { }, (error) => { return []; }); +} + +export function updateGroup(group: Group) { + return fetch(`/api/${getSlug()}/groups/${group.id}`, + { + method: 'PUT', + body: JSON.stringify({ group: { + name: group.name, + color: group.color, + icon: group.icon, + parent_id: group.parentId + } }), + headers: { + 'Content-Type': 'application/json', + 'X-CSRF-TOKEN': getCsrfToken(), + } + }) + .catch((error) => console.error(error)); +} + +export function createGroup(group: Group, onCreate?: () => void) { + fetch(`/api/${getSlug()}/groups`, { + method: 'POST', + body: JSON.stringify({ + name: group.name, + color: group.color, + icon: group.icon, + parent_id: group.parentId + }), + headers: { + 'Content-Type': 'application/json', + 'X-CSRF-TOKEN': getCsrfToken(), + } + }) + .then((response) => response.json()) + .then((data) => { + onCreate && onCreate(); + }) + .catch((error) => console.error(error)); } \ No newline at end of file diff --git a/app/lib/definitions.ts b/app/lib/definitions.ts index aba529b..464cb83 100644 --- a/app/lib/definitions.ts +++ b/app/lib/definitions.ts @@ -32,11 +32,12 @@ export type TableArrangement = { } export type Group = { - id: string; - name: string; - guest_count: number; - icon: string; - children: Group[]; + id?: string; + name?: string; + guest_count?: number; + icon?: string; + children?: Group[]; + parentId?: string; color?: string; attendance?: AttendanceSummary }; diff --git a/app/ui/components/group-form-dialog.tsx b/app/ui/components/group-form-dialog.tsx new file mode 100644 index 0000000..3ef1ec5 --- /dev/null +++ b/app/ui/components/group-form-dialog.tsx @@ -0,0 +1,91 @@ +/* Copyright (C) 2024 Manuel Bustillo*/ + +'use client'; + +import { createGroup, updateGroup } from '@/app/api/groups'; +import { Group } from '@/app/lib/definitions'; +import { classNames } from '@/app/ui/components/button'; +import { Dialog } from 'primereact/dialog'; +import { ColorPicker } from 'primereact/colorpicker'; +import { Dropdown } from 'primereact/dropdown'; +import { FloatLabel } from 'primereact/floatlabel'; +import { InputText } from 'primereact/inputtext'; +import { useState } from 'react'; + +export default function GroupFormDialog({groups, onCreate, onHide, group, visible }: { + groups: Group[], + onCreate?: () => void, + onHide: () => void, + group?: Group, + visible: boolean, +}) { + + const [name, setName] = useState(group?.name || ''); + const [icon, setIcon] = useState(group?.icon || ''); + const [color, setColor] = useState(group?.color || ''); + const [parentId, setParentId] = useState(group?.parentId || ''); + + function resetForm() { + setName(''); + setIcon(''); + setColor(''); + setParentId(''); + } + + function submitGroup() { + if (!(name)) { + return + } + + if (group?.id !== undefined) { + group.name = name; + group.icon = icon; + group.color = color; + group.parentId = parentId; + + updateGroup(group).then(() => { + resetForm(); + onCreate && onCreate(); + }); + } else { + group && createGroup({name, icon, color, parentId}, () => { + resetForm(); + onCreate && onCreate(); + }); + } + } + + return ( + <> + + +
+ + setName(e.target.value)} /> + + + + setIcon(e.target.value)} /> + + + + setColor(`#${e.value}`)} /> + + + setParentId(e.target.value)} options={ + groups.map((group) => { + return { label: group.name, value: group.id }; + }) + } /> + + + + +
+
+ + ); +} \ No newline at end of file diff --git a/app/ui/components/guest-form-dialog.tsx b/app/ui/components/guest-form-dialog.tsx index 9da1ff9..bf94230 100644 --- a/app/ui/components/guest-form-dialog.tsx +++ b/app/ui/components/guest-form-dialog.tsx @@ -54,7 +54,7 @@ export default function GuestFormDialog({ groups, onCreate, onHide, guest, visib return ( <> - +
setName(e.target.value)} /> From fba1b81b4ce7303251ae5ce085b1b60e5c79e96c Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 8 Dec 2024 12:50:33 +0100 Subject: [PATCH 095/216] Include edit and delete buttons in the groups table --- app/[slug]/dashboard/guests/page.tsx | 14 +++++++++++--- app/api/groups.tsx | 14 ++++++++++++++ app/ui/groups/table.tsx | 16 ++++++++++++++-- 3 files changed, 39 insertions(+), 5 deletions(-) diff --git a/app/[slug]/dashboard/guests/page.tsx b/app/[slug]/dashboard/guests/page.tsx index 20cc211..0b7a88d 100644 --- a/app/[slug]/dashboard/guests/page.tsx +++ b/app/[slug]/dashboard/guests/page.tsx @@ -56,14 +56,18 @@ export default function Page() { onHide={() => { setGuestBeingEdited(undefined) }} /> }> - setGuestBeingEdited(guest)} /> + setGuestBeingEdited(guest)} + />
- + }> - + setGroupBeingEdited(group)} + />
diff --git a/app/api/groups.tsx b/app/api/groups.tsx index 1ffc0b5..8c8081e 100644 --- a/app/api/groups.tsx +++ b/app/api/groups.tsx @@ -64,4 +64,18 @@ export function createGroup(group: Group, onCreate?: () => void) { onCreate && onCreate(); }) .catch((error) => console.error(error)); +} + +export function destroyGroup(group: Group, onDestroy?: () => void) { + fetch(`/api/${getSlug()}/groups/${group.id}`, { + method: 'DELETE', + headers: { + 'X-CSRF-TOKEN': getCsrfToken(), + } + }) + .then((response) => response.json()) + .then((data) => { + onDestroy && onDestroy(); + }) + .catch((error) => console.error(error)); } \ No newline at end of file diff --git a/app/ui/groups/table.tsx b/app/ui/groups/table.tsx index 354c229..ca1240e 100644 --- a/app/ui/groups/table.tsx +++ b/app/ui/groups/table.tsx @@ -4,12 +4,18 @@ import { Group } from '@/app/lib/definitions'; import TableOfContents from '../components/table-of-contents'; +import { PencilIcon, TrashIcon } from '@heroicons/react/24/outline'; +import { destroyGroup } from '@/app/api/groups'; -export default function GroupsTable({ groups }: { groups: Group[] }) { +export default function GroupsTable({ groups, onUpdate, onEdit }: { + groups: Group[], + onUpdate: () => void, + onEdit: (group: Group) => void, +}) { return ( ( @@ -38,6 +44,12 @@ export default function GroupsTable({ groups }: { groups: Group[] }) { {group.attendance?.total} + +
+ { destroyGroup(group, () => onUpdate()) }} /> + onEdit(group)} /> +
+ )} /> From 066cab9da83d8c13133b81e29440fbf72903153c Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 8 Dec 2024 14:02:29 +0100 Subject: [PATCH 096/216] Include slug namespace in the tables arrangements fetch endpoint --- app/ui/arrangements/arrangement.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/ui/arrangements/arrangement.tsx b/app/ui/arrangements/arrangement.tsx index 749c577..9e96b34 100644 --- a/app/ui/arrangements/arrangement.tsx +++ b/app/ui/arrangements/arrangement.tsx @@ -6,13 +6,14 @@ import React, { useState } from 'react'; import { TableArrangement, Guest } from '@/app/lib/definitions'; import { lusitana } from '@/app/ui/fonts'; import { Table } from '@/app/ui/components/table'; +import { getSlug } from '@/app/lib/utils'; export default function Arrangement({ id }: { id: string }) { const [tables, setTables] = useState>([]); function loadTables() { - fetch(`/api/tables_arrangements/${id}`) + fetch(`/api/${getSlug()}/tables_arrangements/${id}`) .then((response) => response.json()) .then((data) => { setTables(data.map((record: any) => { From 79039572e73e0fde795455aa88c61f5546512572 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Mon, 9 Dec 2024 00:36:42 +0100 Subject: [PATCH 097/216] Refactor multiple APIs into a single API and expose UI to modify expenses --- app/[slug]/dashboard/expenses/page.tsx | 43 ++++++++++-- app/[slug]/dashboard/guests/page.tsx | 16 ++--- app/api/abstract-api.tsx | 65 ++++++++++++++++++ app/api/expenses.tsx | 40 ----------- app/api/groups.tsx | 81 ---------------------- app/api/guests.tsx | 65 ------------------ app/lib/definitions.ts | 43 +----------- app/lib/expense.tsx | 39 +++++++++++ app/lib/group.tsx | 62 +++++++++++++++++ app/lib/guest.tsx | 38 +++++++++++ app/ui/components/expense-form-dialog.tsx | 83 +++++++++++++++++++++++ app/ui/components/group-form-dialog.tsx | 13 ++-- app/ui/components/guest-form-dialog.tsx | 15 ++-- app/ui/expenses/table.tsx | 36 +++++----- app/ui/groups/table.tsx | 9 ++- app/ui/guests/table.tsx | 11 +-- 16 files changed, 385 insertions(+), 274 deletions(-) create mode 100644 app/api/abstract-api.tsx delete mode 100644 app/api/expenses.tsx delete mode 100644 app/api/groups.tsx delete mode 100644 app/api/guests.tsx create mode 100644 app/lib/expense.tsx create mode 100644 app/lib/group.tsx create mode 100644 app/lib/guest.tsx create mode 100644 app/ui/components/expense-form-dialog.tsx diff --git a/app/[slug]/dashboard/expenses/page.tsx b/app/[slug]/dashboard/expenses/page.tsx index 8b24064..dfa7bbf 100644 --- a/app/[slug]/dashboard/expenses/page.tsx +++ b/app/[slug]/dashboard/expenses/page.tsx @@ -1,15 +1,44 @@ /* Copyright (C) 2024 Manuel Bustillo*/ -import { lusitana } from '@/app/ui/fonts'; +'use client' + +import { AbstractApi } from '@/app/api/abstract-api'; +import { Expense, ExpenseSerializer } from '@/app/lib/expense'; +import { classNames } from '@/app/ui/components/button'; +import ExpenseFormDialog from '@/app/ui/components/expense-form-dialog'; import ExpensesTable from '@/app/ui/expenses/table'; - -export default function Page () { +import SkeletonTable from '@/app/ui/guests/skeleton-row'; +import { Suspense, useEffect, useState } from 'react'; + +export default function Page() { + const refreshExpenses = () => { + new AbstractApi().getAll(new ExpenseSerializer(), (expenses: Expense[]) => { + setExpenses(expenses); + }); + } + + const [expenses, setExpenses] = useState([]); + const [expenseBeingEdited, setExpenseBeingEdited] = useState(undefined); + useEffect(() => { refreshExpenses() }, []); + return (
-
-

Expenses

-

Summary

- +
+ + { refreshExpenses(); setExpenseBeingEdited(undefined) }} + expense={expenseBeingEdited} + visible={expenseBeingEdited !== undefined} + onHide={() => { setExpenseBeingEdited(undefined) }} + /> + }> + setExpenseBeingEdited(expense)} + /> +
); diff --git a/app/[slug]/dashboard/guests/page.tsx b/app/[slug]/dashboard/guests/page.tsx index 0b7a88d..beb73f8 100644 --- a/app/[slug]/dashboard/guests/page.tsx +++ b/app/[slug]/dashboard/guests/page.tsx @@ -2,30 +2,30 @@ 'use client'; -import { loadGroups } from '@/app/api/groups'; -import { loadGuests } from '@/app/api/guests'; -import { Group, Guest } from '@/app/lib/definitions'; +import { AbstractApi, } from '@/app/api/abstract-api'; +import { Guest, GuestSerializer } from '@/app/lib/guest'; import { classNames } from '@/app/ui/components/button'; -import GuestFormDialog from '@/app/ui/components/guest-form-dialog'; import GroupFormDialog from '@/app/ui/components/group-form-dialog'; +import GuestFormDialog from '@/app/ui/components/guest-form-dialog'; import GroupsTable from '@/app/ui/groups/table'; import SkeletonTable from '@/app/ui/guests/skeleton-row'; import GuestsTable from '@/app/ui/guests/table'; import { TabPanel, TabView } from 'primereact/tabview'; import { Suspense, useState } from 'react'; +import { Group, GroupSerializer } from '@/app/lib/group'; export default function Page() { function refreshGuests() { - loadGuests((guests) => { - setGuests(guests); + new AbstractApi().getAll(new GuestSerializer(), (objects: Guest[]) => { + setGuests(objects); setGuestsLoaded(true); }); } function refreshGroups() { - loadGroups((groups) => { - setGroups(groups); + new AbstractApi().getAll(new GroupSerializer(), (objects: Group[]) => { + setGroups(objects); setGroupsLoaded(true); }); } diff --git a/app/api/abstract-api.tsx b/app/api/abstract-api.tsx new file mode 100644 index 0000000..b43e72e --- /dev/null +++ b/app/api/abstract-api.tsx @@ -0,0 +1,65 @@ +/* Copyright (C) 2024 Manuel Bustillo*/ + +import { Entity } from '@/app/lib/definitions'; +import { getCsrfToken, getSlug } from '@/app/lib/utils'; + +export interface Api { + getAll(serializable: Serializable ,callback: (objets: T[]) => void): void; + create(serializable: Serializable, object: T, callback: () => void): void; + update(serializable: Serializable, object: T, callback: () => void): void; + destroy(serializable: Serializable, object: T, callback: () => void): void; +} + +export interface Serializable { + fromJson(json: any): T; + toJson(object: T): string; + apiPath(): string; +} + +export class AbstractApi implements Api { + getAll(serializable: Serializable, callback: (objets: T[]) => void): void { + fetch(`/api/${getSlug()}/${serializable.apiPath()}`) + .then((response) => response.json()) + .then((data) => { + callback(data.map((record: any) => { + return serializable.fromJson(record); + })); + }, (error) => { + return []; + }); + } + + update(serializable: Serializable, object: T, callback: () => void): void { + fetch(`/api/${getSlug()}/${serializable.apiPath()}/${object.id}`, { + method: 'PUT', + body: serializable.toJson(object), + headers: { + 'Content-Type': 'application/json', + 'X-CSRF-TOKEN': getCsrfToken(), + } + }).then(callback) + .catch((error) => console.error(error)); + } + + create(serializable: Serializable, object: T, callback: () => void): void { + fetch(`/api/${getSlug()}/${serializable.apiPath()}`, { + method: 'POST', + body: serializable.toJson(object), + headers: { + 'Content-Type': 'application/json', + 'X-CSRF-TOKEN': getCsrfToken(), + } + }).then(callback) + .catch((error) => console.error(error)); + } + + destroy(serializable: Serializable, object: T, callback: () => void): void { + fetch(`/api/${getSlug()}/${serializable.apiPath()}/${object.id}`, { + method: 'DELETE', + headers: { + 'X-CSRF-TOKEN': getCsrfToken(), + } + }).then(callback) + .catch((error) => console.error(error)); + } +} diff --git a/app/api/expenses.tsx b/app/api/expenses.tsx deleted file mode 100644 index a23cd16..0000000 --- a/app/api/expenses.tsx +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ - -import { Expense } from '@/app/lib/definitions'; -import { getCsrfToken, getSlug } from '@/app/lib/utils'; - -export function loadExpenses(onLoad?: (expenses: Expense[]) => void) { - fetch(`/api/${getSlug()}/expenses`) - .then((response) => response.json()) - .then((data) => { - onLoad && onLoad(data.map((record: any) => { - return ({ - id: record.id, - name: record.name, - amount: record.amount, - pricingType: record.pricing_type - }); - })); - }, (error) => { - return []; - }); -} - -export function updateExpense(expense: Expense) { - fetch(`/api/${getSlug()}/expenses/${expense.id}`, - { - method: 'PUT', - body: JSON.stringify({ - expense: { - name: expense.name, - amount: expense.amount, - pricing_type: expense.pricingType, - } - }), - headers: { - 'Content-Type': 'application/json', - 'X-CSRF-TOKEN': getCsrfToken(), - } - }) - .catch((error) => console.error(error)); -} \ No newline at end of file diff --git a/app/api/groups.tsx b/app/api/groups.tsx deleted file mode 100644 index 8c8081e..0000000 --- a/app/api/groups.tsx +++ /dev/null @@ -1,81 +0,0 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ - -import { Group } from '@/app/lib/definitions'; -import { getCsrfToken, getSlug } from '../lib/utils'; - -export function loadGroups(onLoad?: (groups: Group[]) => void) { - fetch(`/api/${getSlug()}/groups`) - .then((response) => response.json()) - .then((data) => { - onLoad && onLoad(data.map((record: any) => { - return ({ - id: record.id, - name: record.name, - color: record.color, - attendance: { - considered: record.considered, - invited: record.invited, - confirmed: record.confirmed, - tentative: record.tentative, - declined: record.declined, - total: record.total, - } - }); - })); - }, (error) => { - return []; - }); -} - -export function updateGroup(group: Group) { - return fetch(`/api/${getSlug()}/groups/${group.id}`, - { - method: 'PUT', - body: JSON.stringify({ group: { - name: group.name, - color: group.color, - icon: group.icon, - parent_id: group.parentId - } }), - headers: { - 'Content-Type': 'application/json', - 'X-CSRF-TOKEN': getCsrfToken(), - } - }) - .catch((error) => console.error(error)); -} - -export function createGroup(group: Group, onCreate?: () => void) { - fetch(`/api/${getSlug()}/groups`, { - method: 'POST', - body: JSON.stringify({ - name: group.name, - color: group.color, - icon: group.icon, - parent_id: group.parentId - }), - headers: { - 'Content-Type': 'application/json', - 'X-CSRF-TOKEN': getCsrfToken(), - } - }) - .then((response) => response.json()) - .then((data) => { - onCreate && onCreate(); - }) - .catch((error) => console.error(error)); -} - -export function destroyGroup(group: Group, onDestroy?: () => void) { - fetch(`/api/${getSlug()}/groups/${group.id}`, { - method: 'DELETE', - headers: { - 'X-CSRF-TOKEN': getCsrfToken(), - } - }) - .then((response) => response.json()) - .then((data) => { - onDestroy && onDestroy(); - }) - .catch((error) => console.error(error)); -} \ No newline at end of file diff --git a/app/api/guests.tsx b/app/api/guests.tsx deleted file mode 100644 index ce4f232..0000000 --- a/app/api/guests.tsx +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ - -import { Guest } from '@/app/lib/definitions'; -import { getCsrfToken, getSlug } from '@/app/lib/utils'; - -export function loadGuests(onLoad?: (guests: Guest[]) => void) { - fetch(`/api/${getSlug()}/guests`) - .then((response) => response.json()) - .then((data) => { - onLoad && onLoad(data.map((record: any) => { - return ({ - id: record.id, - name: record.name, - status: record.status, - group_name: record.group.name, - groupId: record.group.id, - }); - })); - }, (error) => { - return []; - }); -}; - -export function updateGuest(guest: Guest) { - return fetch(`/api/${getSlug()}/guests/${guest.id}`, - { - method: 'PUT', - body: JSON.stringify({ guest: { name: guest.name, status: guest.status, group_id: guest.groupId } }), - headers: { - 'Content-Type': 'application/json', - 'X-CSRF-TOKEN': getCsrfToken(), - } - }) - .catch((error) => console.error(error)); -} - -export function createGuest(guest: Guest, onCreate?: () => void) { - fetch(`/api/${getSlug()}/guests`, { - method: 'POST', - body: JSON.stringify({ name: guest.name, group_id: guest.groupId, status: guest.status }), - headers: { - 'Content-Type': 'application/json', - 'X-CSRF-TOKEN': getCsrfToken(), - } - }) - .then((response) => response.json()) - .then((data) => { - onCreate && onCreate(); - }) - .catch((error) => console.error(error)); -} - -export function destroyGuest(guest: Guest, onDestroy?: () => void) { - fetch(`/api/${getSlug()}/guests/${guest.id}`, { - method: 'DELETE', - headers: { - 'X-CSRF-TOKEN': getCsrfToken(), - } - }) - .then((response) => response.json()) - .then((data) => { - onDestroy && onDestroy(); - }) - .catch((error) => console.error(error)); -} \ No newline at end of file diff --git a/app/lib/definitions.ts b/app/lib/definitions.ts index 464cb83..218150d 100644 --- a/app/lib/definitions.ts +++ b/app/lib/definitions.ts @@ -1,28 +1,11 @@ /* Copyright (C) 2024 Manuel Bustillo*/ -// This file contains type definitions for your data. -// It describes the shape of the data, and what data type each property should accept. -// For simplicity of teaching, we're manually defining these types. -// However, these types are generated automatically if you're using an ORM such as Prisma. +import { Guest } from "./guest"; -export const guestStatuses = ['considered', 'invited', 'confirmed', 'declined', 'tentative'] as const; -export type GuestStatus = typeof guestStatuses[number]; -export type Guest = { +export interface Entity { id?: string; - name?: string; - group_name?: string; - groupId?: string; - color?: string; - status?: GuestStatus } -export type Expense = { - id: string; - name: string; - amount: number; - pricingType: 'fixed' | 'per person'; -}; - export type TableArrangement = { id: string; number: number; @@ -31,26 +14,6 @@ export type TableArrangement = { discomfort?: number } -export type Group = { - id?: string; - name?: string; - guest_count?: number; - icon?: string; - children?: Group[]; - parentId?: string; - color?: string; - attendance?: AttendanceSummary -}; - -export type AttendanceSummary = { - considered: number; - invited: number; - confirmed: number; - declined: number; - tentative: number; - total: number; -} - export type guestsTable = { id: string; customer_id: string; @@ -73,5 +36,5 @@ export type Captcha = { } export type StructuredErrors = { - [key: string]: string[]|string; + [key: string]: string[] | string; }; \ No newline at end of file diff --git a/app/lib/expense.tsx b/app/lib/expense.tsx new file mode 100644 index 0000000..2345d54 --- /dev/null +++ b/app/lib/expense.tsx @@ -0,0 +1,39 @@ +import { Serializable } from "../api/abstract-api"; +import { Entity } from "./definitions"; + +export const pricingTypes = ['fixed', 'per_person'] as const; +export type PricingType = typeof pricingTypes[number]; + +export class Expense implements Entity { + id?: string; + name: string; + amount: number; + pricingType: PricingType; + + constructor(id?: string, name?: string, amount?: number, pricingType?: PricingType) { + this.id = id; + this.name = name || ''; + this.amount = amount || 0; + this.pricingType = pricingType || 'fixed'; + } +} + +export class ExpenseSerializer implements Serializable{ + fromJson(data: any): Expense { + return new Expense(data.id, data.name, data.amount, data.pricing_type); + } + + toJson(expense: Expense): string { + return JSON.stringify({ + expense: { + name: expense.name, + amount: expense.amount, + pricing_type: expense.pricingType + } + }); + } + + apiPath(): string { + return 'expenses'; + } +} \ No newline at end of file diff --git a/app/lib/group.tsx b/app/lib/group.tsx new file mode 100644 index 0000000..cc2adc5 --- /dev/null +++ b/app/lib/group.tsx @@ -0,0 +1,62 @@ +import { Entity } from "./definitions"; + +export type AttendanceSummary = { + considered: number; + invited: number; + confirmed: number; + declined: number; + tentative: number; + total: number; +} + +export class Group implements Entity { + id?: string; + name?: string; + guest_count?: number; + icon?: string; + children?: Group[]; + parentId?: string; + color?: string; + attendance?: AttendanceSummary + + constructor(id?: string, name?: string, guest_count?: number, icon?: string, children?: Group[], parentId?: string, color?: string, attendance?: AttendanceSummary) { + this.id = id; + this.name = name; + this.guest_count = guest_count; + this.icon = icon; + this.children = children; + this.parentId = parentId; + this.color = color; + this.attendance = attendance; + } +} + +export class GroupSerializer { + fromJson(data: any): Group { + return new Group( + data.id, + data.name, + data.guest_count, + data.icon, + data.children, + data.parent_id, + data.color, + data.attendance + ); + } + + toJson(group: Group): string { + return JSON.stringify({ + group: { + name: group.name, + color: group.color, + icon: group.icon, + parent_id: group.parentId + } + }); + } + + apiPath(): string { + return 'groups'; + } +} \ No newline at end of file diff --git a/app/lib/guest.tsx b/app/lib/guest.tsx new file mode 100644 index 0000000..6b7abcd --- /dev/null +++ b/app/lib/guest.tsx @@ -0,0 +1,38 @@ +import { Serializable } from "../api/abstract-api"; +import { Entity } from "./definitions"; + +export const guestStatuses = ['considered', 'invited', 'confirmed', 'declined', 'tentative'] as const; +export type GuestStatus = typeof guestStatuses[number]; + +export class Guest implements Entity { + id?: string; + name?: string; + group_name?: string; + groupId?: string; + color?: string; + status?: GuestStatus; + + constructor(id?: string, name?: string, group_name?: string, groupId?: string, color?: string, status?: GuestStatus) { + this.id = id; + this.name = name; + this.group_name = group_name; + this.groupId = groupId; + this.color = color; + this.status = status; + } +} + +export class GuestSerializer implements Serializable { + fromJson(data: any): Guest { + return new Guest(data.id, data.name, data.group_name, data.group_id, data.color, data.status); + } + + toJson(guest: Guest): string { + return JSON.stringify({ guest: { name: guest.name, status: guest.status, group_id: guest.groupId } }); + } + + apiPath(): string { + return 'guests'; + } +} + diff --git a/app/ui/components/expense-form-dialog.tsx b/app/ui/components/expense-form-dialog.tsx new file mode 100644 index 0000000..3c6747f --- /dev/null +++ b/app/ui/components/expense-form-dialog.tsx @@ -0,0 +1,83 @@ +/* Copyright (C) 2024 Manuel Bustillo*/ + +'use client'; + +import { AbstractApi } from '@/app/api/abstract-api'; +import { Expense, ExpenseSerializer, PricingType, pricingTypes } from '@/app/lib/expense'; +import { capitalize } from '@/app/lib/utils'; +import { classNames } from '@/app/ui/components/button'; +import { Dialog } from 'primereact/dialog'; +import { Dropdown } from 'primereact/dropdown'; +import { FloatLabel } from 'primereact/floatlabel'; +import { InputText } from 'primereact/inputtext'; +import { useState } from 'react'; + +export default function ExpenseFormDialog({ onCreate, onHide, expense, visible }: { + onCreate?: () => void, + onHide: () => void, + expense?: Expense, + visible: boolean, +}) { + + const [name, setName] = useState(expense?.name || ''); + const [amount, setAmount] = useState(expense?.amount || 0); + const [pricingType, setPricingType] = useState(expense?.pricingType || 'fixed'); + + const api = new AbstractApi(); + const serializer = new ExpenseSerializer(); + + function resetForm() { + setName(''); + setAmount(0); + setPricingType('fixed'); + } + + function submitGroup() { + if (expense?.id !== undefined) { + expense.name = name; + expense.amount = amount; + expense.pricingType = pricingType; + + api.update(serializer, expense, () => { + resetForm(); + onCreate && onCreate(); + }); + } else { + + api.create(serializer, new Expense(undefined, name, amount, pricingType), () => { + resetForm(); + onCreate && onCreate(); + }); + } + } + + return ( + <> + + +
+ + setName(e.target.value)} /> + + + + setAmount(parseFloat(e.target.value))} /> + + + + setPricingType(e.target.value)} options={ + pricingTypes.map((type) => { + return { label: capitalize(type), value: type }; + }) + } /> + + + + +
+
+ + ); +} \ No newline at end of file diff --git a/app/ui/components/group-form-dialog.tsx b/app/ui/components/group-form-dialog.tsx index 3ef1ec5..d652a13 100644 --- a/app/ui/components/group-form-dialog.tsx +++ b/app/ui/components/group-form-dialog.tsx @@ -2,8 +2,6 @@ 'use client'; -import { createGroup, updateGroup } from '@/app/api/groups'; -import { Group } from '@/app/lib/definitions'; import { classNames } from '@/app/ui/components/button'; import { Dialog } from 'primereact/dialog'; import { ColorPicker } from 'primereact/colorpicker'; @@ -11,6 +9,9 @@ import { Dropdown } from 'primereact/dropdown'; import { FloatLabel } from 'primereact/floatlabel'; import { InputText } from 'primereact/inputtext'; 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 }: { groups: Group[], @@ -25,6 +26,9 @@ export default function GroupFormDialog({groups, onCreate, onHide, group, visibl const [color, setColor] = useState(group?.color || ''); const [parentId, setParentId] = useState(group?.parentId || ''); + const api = new AbstractApi(); + const serializer = new GroupSerializer(); + function resetForm() { setName(''); setIcon(''); @@ -43,12 +47,13 @@ export default function GroupFormDialog({groups, onCreate, onHide, group, visibl group.color = color; group.parentId = parentId; - updateGroup(group).then(() => { + api.update(serializer, group, () => { resetForm(); onCreate && onCreate(); }); } else { - group && createGroup({name, icon, color, parentId}, () => { + + api.create(serializer, new Group(undefined, name, undefined, icon, undefined, parentId, color), () => { resetForm(); onCreate && onCreate(); }); diff --git a/app/ui/components/guest-form-dialog.tsx b/app/ui/components/guest-form-dialog.tsx index bf94230..9d8bec5 100644 --- a/app/ui/components/guest-form-dialog.tsx +++ b/app/ui/components/guest-form-dialog.tsx @@ -2,8 +2,9 @@ 'use client'; -import { createGuest, updateGuest } from '@/app/api/guests'; -import { Group, Guest, GuestStatus, guestStatuses } from '@/app/lib/definitions'; +import { AbstractApi } from '@/app/api/abstract-api'; +import { Group } from '@/app/lib/group'; +import { Guest, GuestSerializer, GuestStatus, guestStatuses } from '@/app/lib/guest'; import { capitalize } from '@/app/lib/utils'; import { classNames } from '@/app/ui/components/button'; import { Dialog } from 'primereact/dialog'; @@ -24,6 +25,9 @@ export default function GuestFormDialog({ groups, onCreate, onHide, guest, visib const [group, setGroup] = useState(guest?.groupId || null); const [status, setStatus] = useState(guest?.status || null); + const api = new AbstractApi(); + const serializer = new GuestSerializer(); + function resetForm() { setName(''); setGroup(null); @@ -37,14 +41,15 @@ export default function GuestFormDialog({ groups, onCreate, onHide, guest, visib if (guest?.id !== undefined) { guest.name = name; - guest.groupId = group; + guest.groupId = group; guest.status = status; - updateGuest(guest).then(() => { + + api.update(serializer, guest, () => { resetForm(); onCreate && onCreate(); }); } else { - guest && createGuest({name: name, groupId: group, status: status}, () => { + api.create(serializer, new Guest(undefined, name, undefined, group, undefined, status), ()=> { resetForm(); onCreate && onCreate(); }); diff --git a/app/ui/expenses/table.tsx b/app/ui/expenses/table.tsx index 121990c..28543d6 100644 --- a/app/ui/expenses/table.tsx +++ b/app/ui/expenses/table.tsx @@ -2,41 +2,43 @@ 'use client' -import { loadExpenses, updateExpense } from '@/app/api/expenses'; -import { Expense } from '@/app/lib/definitions'; -import { useState } from "react"; -import InlineTextField from "../components/form/inlineTextField"; +import { AbstractApi } from '@/app/api/abstract-api'; +import { Expense, ExpenseSerializer } from '@/app/lib/expense'; +import { PencilIcon, TrashIcon } from '@heroicons/react/24/outline'; import TableOfContents from "../components/table-of-contents"; -export default function ExpensesTable() { - const [expenses, setExpenses] = useState>([]); - const [expensesLoaded, setExpensesLoaded] = useState(false); - function refreshExpenses() { - loadExpenses((expenses) => { - setExpenses(expenses); - setExpensesLoaded(true); - }); - } +export default function ExpensesTable({ expenses, onUpdate, onEdit }: { + expenses: Expense[], + onUpdate: () => void, + onEdit: (expense: Expense) => void, +}) { - !expensesLoaded && refreshExpenses(); + const api = new AbstractApi(); + const serializer = new ExpenseSerializer(); return ( ( - { expense.name = value; updateExpense(expense) }} /> + {expense.name} - { expense.amount = parseFloat(value); updateExpense(expense) }} /> + {expense.amount} {expense.pricingType} + +
+ { api.destroy(serializer, expense, onUpdate) }} /> + onEdit(expense)} /> +
+ )} /> diff --git a/app/ui/groups/table.tsx b/app/ui/groups/table.tsx index ca1240e..5e1f0df 100644 --- a/app/ui/groups/table.tsx +++ b/app/ui/groups/table.tsx @@ -2,10 +2,10 @@ 'use client'; -import { Group } from '@/app/lib/definitions'; +import { Group, GroupSerializer } from '@/app/lib/group'; import TableOfContents from '../components/table-of-contents'; import { PencilIcon, TrashIcon } from '@heroicons/react/24/outline'; -import { destroyGroup } from '@/app/api/groups'; +import { AbstractApi } from '@/app/api/abstract-api'; export default function GroupsTable({ groups, onUpdate, onEdit }: { groups: Group[], @@ -13,6 +13,9 @@ export default function GroupsTable({ groups, onUpdate, onEdit }: { onEdit: (group: Group) => void, }) { + const api = new AbstractApi(); + const serializer = new GroupSerializer(); + return (
- { destroyGroup(group, () => onUpdate()) }} /> + { api.destroy(serializer, group, onUpdate) }} /> onEdit(group)} />
diff --git a/app/ui/guests/table.tsx b/app/ui/guests/table.tsx index 304c357..4f3694b 100644 --- a/app/ui/guests/table.tsx +++ b/app/ui/guests/table.tsx @@ -2,9 +2,8 @@ 'use client'; -import { destroyGuest, updateGuest } from '@/app/api/guests'; -import { Guest, GuestStatus } from '@/app/lib/definitions'; -import { classNames } from '@/app/ui/components/button'; +import { AbstractApi } from '@/app/api/abstract-api'; +import { Guest , GuestSerializer} from '@/app/lib/guest'; import { PencilIcon, TrashIcon } from '@heroicons/react/24/outline'; import clsx from 'clsx'; import TableOfContents from '../components/table-of-contents'; @@ -14,6 +13,10 @@ export default function guestsTable({ guests, onUpdate, onEdit }: { onUpdate: () => void, onEdit: (guest: Guest) => void }) { + + const api = new AbstractApi(); + const serializer = new GuestSerializer(); + return (
- { destroyGuest(guest, () => onUpdate()) }} /> + { api.destroy(serializer, guest, onUpdate)}} /> onEdit(guest)} />
From 7de37759ca26f8647cd960ede0faa94926ab4e5d Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Mon, 9 Dec 2024 18:22:44 +0000 Subject: [PATCH 098/216] Add copyright notice --- app/lib/expense.tsx | 2 ++ app/lib/group.tsx | 2 ++ app/lib/guest.tsx | 2 ++ 3 files changed, 6 insertions(+) diff --git a/app/lib/expense.tsx b/app/lib/expense.tsx index 2345d54..6964776 100644 --- a/app/lib/expense.tsx +++ b/app/lib/expense.tsx @@ -1,3 +1,5 @@ +/* Copyright (C) 2024 Manuel Bustillo*/ + import { Serializable } from "../api/abstract-api"; import { Entity } from "./definitions"; diff --git a/app/lib/group.tsx b/app/lib/group.tsx index cc2adc5..387e557 100644 --- a/app/lib/group.tsx +++ b/app/lib/group.tsx @@ -1,3 +1,5 @@ +/* Copyright (C) 2024 Manuel Bustillo*/ + import { Entity } from "./definitions"; export type AttendanceSummary = { diff --git a/app/lib/guest.tsx b/app/lib/guest.tsx index 6b7abcd..0baddfe 100644 --- a/app/lib/guest.tsx +++ b/app/lib/guest.tsx @@ -1,3 +1,5 @@ +/* Copyright (C) 2024 Manuel Bustillo*/ + import { Serializable } from "../api/abstract-api"; import { Entity } from "./definitions"; From 05392bc7474daa1188c33d40778ad97bfbbbe6f0 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Mon, 9 Dec 2024 20:12:18 +0100 Subject: [PATCH 099/216] Fix compilation error --- app/lib/expense.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/lib/expense.tsx b/app/lib/expense.tsx index 6964776..785c97a 100644 --- a/app/lib/expense.tsx +++ b/app/lib/expense.tsx @@ -8,9 +8,9 @@ export type PricingType = typeof pricingTypes[number]; export class Expense implements Entity { id?: string; - name: string; - amount: number; - pricingType: PricingType; + name?: string; + amount?: number; + pricingType?: PricingType; constructor(id?: string, name?: string, amount?: number, pricingType?: PricingType) { this.id = id; From 537498cb85743378b9c5ef5b414e403c673316a0 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Mon, 9 Dec 2024 20:57:30 +0100 Subject: [PATCH 100/216] Fix build --- app/ui/arrangements/arrangement.tsx | 2 +- app/ui/components/table.tsx | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/ui/arrangements/arrangement.tsx b/app/ui/arrangements/arrangement.tsx index 9e96b34..ad466b3 100644 --- a/app/ui/arrangements/arrangement.tsx +++ b/app/ui/arrangements/arrangement.tsx @@ -3,7 +3,7 @@ 'use client'; import React, { useState } from 'react'; -import { TableArrangement, Guest } from '@/app/lib/definitions'; +import { TableArrangement } from '@/app/lib/definitions'; import { lusitana } from '@/app/ui/fonts'; import { Table } from '@/app/ui/components/table'; import { getSlug } from '@/app/lib/utils'; diff --git a/app/ui/components/table.tsx b/app/ui/components/table.tsx index 9c1098d..d884ed1 100644 --- a/app/ui/components/table.tsx +++ b/app/ui/components/table.tsx @@ -1,6 +1,7 @@ /* Copyright (C) 2024 Manuel Bustillo*/ -import { Guest } from "@/app/lib/definitions"; +import { Guest } from "@/app/lib/guest"; + function Dish({ guest, rotation }: { guest: Guest, rotation?: number }) { rotation = rotation || 0 From 2b0fab797efb52357c3307f569831e5826f66a19 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Mon, 9 Dec 2024 20:10:10 +0100 Subject: [PATCH 101/216] WIP groups tree table --- app/ui/groups/table.tsx | 92 ++++++++++++++++++++++++----------------- 1 file changed, 53 insertions(+), 39 deletions(-) diff --git a/app/ui/groups/table.tsx b/app/ui/groups/table.tsx index 5e1f0df..d17fdf9 100644 --- a/app/ui/groups/table.tsx +++ b/app/ui/groups/table.tsx @@ -6,6 +6,9 @@ import { Group, GroupSerializer } from '@/app/lib/group'; import TableOfContents from '../components/table-of-contents'; import { PencilIcon, TrashIcon } from '@heroicons/react/24/outline'; import { AbstractApi } from '@/app/api/abstract-api'; +import { TreeTable } from 'primereact/treetable'; +import { Column } from 'primereact/column'; +import { TreeNode } from 'primereact/treenode'; export default function GroupsTable({ groups, onUpdate, onEdit }: { groups: Group[], @@ -16,45 +19,56 @@ export default function GroupsTable({ groups, onUpdate, onEdit }: { const api = new AbstractApi(); const serializer = new GroupSerializer(); + const nodes:TreeNode[] = []; + + const headers = ['Name', 'Color', 'Confirmed', 'Tentative', 'Pending', 'Declined', 'Considered', 'Total', 'Actions']; + return ( - ( - - - {group.name} - - -
- - - {group.attendance?.confirmed} - - - {group.attendance?.tentative} - - - {group.attendance?.invited} - - - {group.attendance?.declined} - - - {group.attendance?.considered} - - - {group.attendance?.total} - - -
- { api.destroy(serializer, group, onUpdate) }} /> - onEdit(group)} /> -
- - - )} - /> + <> + + { headers.map((header, index) => )} + + + + ( + + + {group.name} + + +
+ + + {group.attendance?.confirmed} + + + {group.attendance?.tentative} + + + {group.attendance?.invited} + + + {group.attendance?.declined} + + + {group.attendance?.considered} + + + {group.attendance?.total} + + +
+ { api.destroy(serializer, group, onUpdate) }} /> + onEdit(group)} /> +
+ + + )} + /> + ) } From c3e191982d36a26618620a542c56c68ac93bbec7 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Tue, 10 Dec 2024 20:59:17 +0100 Subject: [PATCH 102/216] Display groups in a treetable --- app/lib/guest.tsx | 6 +- app/ui/groups/table.tsx | 119 +++++++++++++++++++++++++--------------- 2 files changed, 78 insertions(+), 47 deletions(-) diff --git a/app/lib/guest.tsx b/app/lib/guest.tsx index 0baddfe..215f318 100644 --- a/app/lib/guest.tsx +++ b/app/lib/guest.tsx @@ -13,20 +13,22 @@ export class Guest implements Entity { groupId?: string; color?: string; status?: GuestStatus; + children?: Guest[]; - constructor(id?: string, name?: string, group_name?: string, groupId?: string, color?: string, status?: GuestStatus) { + constructor(id?: string, name?: string, group_name?: string, groupId?: string, color?: string, status?: GuestStatus, children?: Guest[]) { this.id = id; this.name = name; this.group_name = group_name; this.groupId = groupId; this.color = color; this.status = status; + this.children = children; } } export class GuestSerializer implements Serializable { fromJson(data: any): Guest { - return new Guest(data.id, data.name, data.group_name, data.group_id, data.color, data.status); + return new Guest(data.id, data.name, data.group_name, data.group_id, data.color, data.status, data.children); } toJson(guest: Guest): string { diff --git a/app/ui/groups/table.tsx b/app/ui/groups/table.tsx index d17fdf9..41af307 100644 --- a/app/ui/groups/table.tsx +++ b/app/ui/groups/table.tsx @@ -4,7 +4,7 @@ import { Group, GroupSerializer } from '@/app/lib/group'; import TableOfContents from '../components/table-of-contents'; -import { PencilIcon, TrashIcon } from '@heroicons/react/24/outline'; +import { MapPinIcon, PencilIcon, TrashIcon } from '@heroicons/react/24/outline'; import { AbstractApi } from '@/app/api/abstract-api'; import { TreeTable } from 'primereact/treetable'; import { Column } from 'primereact/column'; @@ -19,56 +19,85 @@ export default function GroupsTable({ groups, onUpdate, onEdit }: { const api = new AbstractApi(); const serializer = new GroupSerializer(); - const nodes:TreeNode[] = []; + const actions = (group: Group) => ( +
+ { api.destroy(serializer, group, onUpdate) }} /> + onEdit(group)} /> +
+ ); + + const index = groups.reduce((acc, group) => { + if (group.id) { + acc.set(group.id, group) + } + + return acc; + }, new Map()); + + groups.forEach(group => { + if (group.parentId) { + const parent = index.get(group.parentId); + if (parent) { + if (!parent.children) { + parent.children = []; + } + parent.children.push(group); + } + } + }); + + const renderTree = (group: Group): TreeNode => { + const childrenAttendance = (group.children || []).reduce((acc, child) => { + acc.confirmed += child.attendance?.confirmed || 0; + acc.tentative += child.attendance?.tentative || 0; + acc.invited += child.attendance?.invited || 0; + acc.declined += child.attendance?.declined || 0; + acc.considered += child.attendance?.considered || 0; + acc.total += child.attendance?.total || 0; + return acc; + }, { confirmed: 0, tentative: 0, invited: 0, declined: 0, considered: 0, total: 0 }); + + return { + id: group.id, + key: group.id, + label: group.name, + data: { + name: group.name, + color:
, + confirmed: childrenAttendance.confirmed + (group.attendance?.confirmed || 0), + tentative: childrenAttendance.tentative + (group.attendance?.tentative || 0), + pending: childrenAttendance.invited + (group.attendance?.invited || 0), + declined: childrenAttendance.declined + (group.attendance?.declined || 0), + considered: childrenAttendance.considered + (group.attendance?.considered || 0), + total: childrenAttendance.total + (group.attendance?.total || 0), + actions: actions(group), + }, + children: group.children?.map(renderTree), + } + } + + const nodes: TreeNode[] = groups + .filter(group => !group.parentId) + .map(renderTree) const headers = ['Name', 'Color', 'Confirmed', 'Tentative', 'Pending', 'Declined', 'Considered', 'Total', 'Actions']; + const rowClassName = () => { + return { 'border-b odd:bg-white even:bg-gray-50 hover:bg-gray-100': true }; + } return ( <> - - { headers.map((header, index) => )} - + + + + + + + + + + - - ( - - - {group.name} - - -
- - - {group.attendance?.confirmed} - - - {group.attendance?.tentative} - - - {group.attendance?.invited} - - - {group.attendance?.declined} - - - {group.attendance?.considered} - - - {group.attendance?.total} - - -
- { api.destroy(serializer, group, onUpdate) }} /> - onEdit(group)} /> -
- - - )} - /> ) } From be73e7018a82664da8ee8871ebccf54a15cce1ef Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Wed, 11 Dec 2024 00:16:35 +0100 Subject: [PATCH 103/216] Fix group parsing in the guest model --- app/lib/guest.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/lib/guest.tsx b/app/lib/guest.tsx index 215f318..b43edab 100644 --- a/app/lib/guest.tsx +++ b/app/lib/guest.tsx @@ -28,7 +28,7 @@ export class Guest implements Entity { export class GuestSerializer implements Serializable { fromJson(data: any): Guest { - return new Guest(data.id, data.name, data.group_name, data.group_id, data.color, data.status, data.children); + return new Guest(data.id, data.name, data.group?.name, data.group?.id, data.color, data.status, data.children); } toJson(guest: Guest): string { From c57bdec9fc7ca74c4be1bac220ba73d172339b92 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Tue, 10 Dec 2024 21:15:22 +0100 Subject: [PATCH 104/216] Fix navigation link to the dashboard --- app/ui/dashboard/sidenav.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/ui/dashboard/sidenav.tsx b/app/ui/dashboard/sidenav.tsx index ec4e61c..18e2868 100644 --- a/app/ui/dashboard/sidenav.tsx +++ b/app/ui/dashboard/sidenav.tsx @@ -17,7 +17,7 @@ export default function SideNav() {

Wedding Planner

From 6731dcc874e0642775b7339118ba64c30e9bfe24 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 11 Dec 2024 01:09:29 +0000 Subject: [PATCH 105/216] Update dependency @playwright/test to v1.49.1 --- pnpm-lock.yaml | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 60e5409..70f85c4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,10 +25,10 @@ importers: version: 2.1.1 next: specifier: 15.0.3 - version: 15.0.3(@playwright/test@1.49.0)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) + version: 15.0.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: specifier: 5.0.0-beta.25 - version: 5.0.0-beta.25(next@15.0.3(@playwright/test@1.49.0)(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.0.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: specifier: 8.4.49 version: 8.4.49 @@ -59,7 +59,7 @@ importers: devDependencies: '@playwright/test': specifier: ^1.46.0 - version: 1.49.0 + version: 1.49.1 '@types/bcrypt': specifier: ^5.0.2 version: 5.0.2 @@ -306,8 +306,8 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.49.0': - resolution: {integrity: sha512-DMulbwQURa8rNIQrf94+jPJQ4FmOVdpE5ZppRNvWVjvhC+6sOeo28r8MgIpQRYouXRtt/FCCXU7zn20jnHR4Qw==} + '@playwright/test@1.49.1': + resolution: {integrity: sha512-Ky+BVzPz8pL6PQxHqNRW1k3mIyv933LML7HktS8uik0bUXNCdPhoS/kLihiO1tMf/egaJb4IutXd7UywvXEW+g==} engines: {node: '>=18'} hasBin: true @@ -835,13 +835,13 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - playwright-core@1.49.0: - resolution: {integrity: sha512-R+3KKTQF3npy5GTiKH/T+kdhoJfJojjHESR1YEWhYuEKRVfVaxH3+4+GvXE5xyCngCxhxnykk0Vlah9v8fs3jA==} + playwright-core@1.49.1: + resolution: {integrity: sha512-BzmpVcs4kE2CH15rWfzpjzVGhWERJfmnXmniSyKeRZUs9Ws65m+RGIi7mjJK/euCegfn3i7jvqWeWyHe9y3Vgg==} engines: {node: '>=18'} hasBin: true - playwright@1.49.0: - resolution: {integrity: sha512-eKpmys0UFDnfNb3vfsf8Vx2LEOtflgRebl0Im2eQQnYMA4Aqd+Zw8bEOB+7ZKvN76901mRnqdsiOGKxzVTbi7A==} + playwright@1.49.1: + resolution: {integrity: sha512-VYL8zLoNTBxVOrJBbDuRgDWa3i+mfQgDTrL8Ah9QXZ7ax4Dsj0MSq5bYgytRnDVVe+njoKnfsYkH3HzqVj5UZA==} engines: {node: '>=18'} hasBin: true @@ -1337,9 +1337,9 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.49.0': + '@playwright/test@1.49.1': dependencies: - playwright: 1.49.0 + playwright: 1.49.1 '@swc/counter@0.1.3': {} @@ -1729,13 +1729,13 @@ snapshots: nanoid@3.3.7: {} - next-auth@5.0.0-beta.25(next@15.0.3(@playwright/test@1.49.0)(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.0.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: '@auth/core': 0.37.2 - next: 15.0.3(@playwright/test@1.49.0)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) + next: 15.0.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 - next@15.0.3(@playwright/test@1.49.0)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): + next@15.0.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: '@next/env': 15.0.3 '@swc/counter': 0.1.3 @@ -1755,7 +1755,7 @@ snapshots: '@next/swc-linux-x64-musl': 15.0.3 '@next/swc-win32-arm64-msvc': 15.0.3 '@next/swc-win32-x64-msvc': 15.0.3 - '@playwright/test': 1.49.0 + '@playwright/test': 1.49.1 sharp: 0.33.5 transitivePeerDependencies: - '@babel/core' @@ -1815,11 +1815,11 @@ snapshots: pirates@4.0.6: {} - playwright-core@1.49.0: {} + playwright-core@1.49.1: {} - playwright@1.49.0: + playwright@1.49.1: dependencies: - playwright-core: 1.49.0 + playwright-core: 1.49.1 optionalDependencies: fsevents: 2.3.2 From 53811299c8c2b670b8842c16b2960dd93e3f35a2 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 11 Dec 2024 01:10:18 +0000 Subject: [PATCH 106/216] Update dependency node to v23.4.0 --- .nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nvmrc b/.nvmrc index 19e7d57..d313578 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -23.3.0 \ No newline at end of file +23.4.0 \ No newline at end of file From 7dbfbb76b70615af07df38080a086dac9e0ed50a Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Wed, 11 Dec 2024 08:38:50 +0100 Subject: [PATCH 107/216] Load dashboard information from the backend --- app/[slug]/dashboard/page.tsx | 21 +++++++- app/lib/definitions.ts | 22 +++++++- app/ui/components/dashboard-cards.tsx | 4 +- app/ui/dashboard/global-summary.tsx | 74 +++++++++++++-------------- 4 files changed, 77 insertions(+), 44 deletions(-) diff --git a/app/[slug]/dashboard/page.tsx b/app/[slug]/dashboard/page.tsx index 51c96c1..00408ad 100644 --- a/app/[slug]/dashboard/page.tsx +++ b/app/[slug]/dashboard/page.tsx @@ -1,9 +1,26 @@ /* Copyright (C) 2024 Manuel Bustillo*/ +'use client' + +import { GlobalSummary as Summary } from '@/app/lib/definitions'; +import { getSlug } from '@/app/lib/utils'; import GlobalSummary from '@/app/ui/dashboard/global-summary'; +import { useEffect, useState } from 'react'; export default function Page() { - return( - + const [globalSummary, setGlobalSummary] = useState(undefined); + + function refreshSummary() { + fetch(`/api/${getSlug()}/summary`) + .then((response) => response.json()) + .then((data) => { + setGlobalSummary(data); + }) + } + + useEffect(refreshSummary, []); + + return ( + globalSummary && ); } \ No newline at end of file diff --git a/app/lib/definitions.ts b/app/lib/definitions.ts index 218150d..0e1fce7 100644 --- a/app/lib/definitions.ts +++ b/app/lib/definitions.ts @@ -1,5 +1,6 @@ /* Copyright (C) 2024 Manuel Bustillo*/ +import { AttendanceSummary } from "./group"; import { Guest } from "./guest"; export interface Entity { @@ -37,4 +38,23 @@ export type Captcha = { export type StructuredErrors = { [key: string]: string[] | string; -}; \ No newline at end of file +}; + +export type GlobalSummary = { + expenses: ExpenseSummary; + guests: AttendanceSummary +} + +export type ExpenseSummary = { + projected: ExpensePossibleSummary; + confirmed: ExpensePossibleSummary; + status: StatusSummary; +} + +export type ExpensePossibleSummary = { + total: number; + guests: number; +} +export type StatusSummary = { + paid: number; +} \ No newline at end of file diff --git a/app/ui/components/dashboard-cards.tsx b/app/ui/components/dashboard-cards.tsx index 6c72ac4..0240938 100644 --- a/app/ui/components/dashboard-cards.tsx +++ b/app/ui/components/dashboard-cards.tsx @@ -21,7 +21,7 @@ const colorClasses = (style: Style) => { } } -export async function MainCard({ amount, title, subtitle, style, iconName }: +export function MainCard({ amount, title, subtitle, style, iconName }: { amount: string, title: string, @@ -42,7 +42,7 @@ export async function MainCard({ amount, title, subtitle, style, iconName }: ); } -export async function SecondaryCard({ amount, title, iconName, style }: { amount: string, title: string, iconName: keyof typeof HeroIcon, style: Style }) { +export function SecondaryCard({ amount, title, iconName, style }: { amount: string, title: string, iconName: keyof typeof HeroIcon, style: Style }) { return (
diff --git a/app/ui/dashboard/global-summary.tsx b/app/ui/dashboard/global-summary.tsx index 9b00359..8de82ee 100644 --- a/app/ui/dashboard/global-summary.tsx +++ b/app/ui/dashboard/global-summary.tsx @@ -1,45 +1,41 @@ /* Copyright (C) 2024 Manuel Bustillo*/ +import { GlobalSummary } from '@/app/lib/definitions'; import { MainCard, SecondaryCard } from '../components/dashboard-cards'; -export default async function GlobalSummary() { - return ( -
- -
- - -
- - -
-
- - -
- -
- -
- - -
- - -
- -
- - - -
-
- -
- - - -
+export default function GlobalSummary({ summary }: { summary: GlobalSummary }) { + return ( +
+
+
+ +
- ); +
+ + + +
+
+ + +
+ +
+ +
+ + +
+ + +
+ +
+ + +
+
+
+ ); } \ No newline at end of file From 9029d756e75e849aed917cf38f18c4b18064f6fc Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Thu, 12 Dec 2024 00:19:46 +0100 Subject: [PATCH 108/216] Fix compilation issue --- app/ui/dashboard/global-summary.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/ui/dashboard/global-summary.tsx b/app/ui/dashboard/global-summary.tsx index 8de82ee..8aaff3c 100644 --- a/app/ui/dashboard/global-summary.tsx +++ b/app/ui/dashboard/global-summary.tsx @@ -1,9 +1,9 @@ /* Copyright (C) 2024 Manuel Bustillo*/ -import { GlobalSummary } from '@/app/lib/definitions'; +import { GlobalSummary as Summary} from '@/app/lib/definitions'; import { MainCard, SecondaryCard } from '../components/dashboard-cards'; -export default function GlobalSummary({ summary }: { summary: GlobalSummary }) { +export default function GlobalSummary({ summary }: { summary: Summary }) { return (
From 35b42e2bb88303f459f3f84d2bd9da08e3cb01e6 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 12 Dec 2024 01:08:57 +0000 Subject: [PATCH 109/216] Update dependency @types/node to v22.10.2 --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 5311994..bea608f 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "devDependencies": { "@playwright/test": "^1.46.0", "@types/bcrypt": "^5.0.2", - "@types/node": "22.10.1", + "@types/node": "22.10.2", "@types/react": "18.3.12", "@types/react-dom": "18.3.1" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 70f85c4..2bf9e9b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -64,8 +64,8 @@ importers: specifier: ^5.0.2 version: 5.0.2 '@types/node': - specifier: 22.10.1 - version: 22.10.1 + specifier: 22.10.2 + version: 22.10.2 '@types/react': specifier: 18.3.12 version: 18.3.12 @@ -328,8 +328,8 @@ packages: '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/node@22.10.1': - resolution: {integrity: sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==} + '@types/node@22.10.2': + resolution: {integrity: sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==} '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -1354,11 +1354,11 @@ snapshots: '@types/bcrypt@5.0.2': dependencies: - '@types/node': 22.10.1 + '@types/node': 22.10.2 '@types/cookie@0.6.0': {} - '@types/node@22.10.1': + '@types/node@22.10.2': dependencies: undici-types: 6.20.0 From 82dc0a3e35f3087c0a6ede5e23707b9c39a2a06f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 12 Dec 2024 01:09:42 +0000 Subject: [PATCH 110/216] Update dependency zod to v3.24.1 --- pnpm-lock.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 70f85c4..232231a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -55,7 +55,7 @@ importers: version: 10.0.4(react@19.0.0-rc-f38c22b244-20240704) zod: specifier: ^3.23.8 - version: 3.23.8 + version: 3.24.1 devDependencies: '@playwright/test': specifier: ^1.46.0 @@ -1148,8 +1148,8 @@ packages: engines: {node: '>= 14'} hasBin: true - zod@3.23.8: - resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} + zod@3.24.1: + resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} snapshots: @@ -2147,4 +2147,4 @@ snapshots: yaml@2.4.3: {} - zod@3.23.8: {} + zod@3.24.1: {} From 5f9512991ec18494103063ea08602fc46c98686c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 15 Dec 2024 01:21:02 +0000 Subject: [PATCH 111/216] Update dependency @types/react-dom to v18.3.5 --- package.json | 2 +- pnpm-lock.yaml | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index bea608f..f5939df 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@types/bcrypt": "^5.0.2", "@types/node": "22.10.2", "@types/react": "18.3.12", - "@types/react-dom": "18.3.1" + "@types/react-dom": "18.3.5" }, "engines": { "node": ">=23.0.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2a26113..b1cb101 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -70,8 +70,8 @@ importers: specifier: 18.3.12 version: 18.3.12 '@types/react-dom': - specifier: 18.3.1 - version: 18.3.1 + specifier: 18.3.5 + version: 18.3.5(@types/react@18.3.12) packages: @@ -334,8 +334,10 @@ packages: '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} - '@types/react-dom@18.3.1': - resolution: {integrity: sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==} + '@types/react-dom@18.3.5': + resolution: {integrity: sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==} + peerDependencies: + '@types/react': ^18.0.0 '@types/react-transition-group@4.4.11': resolution: {integrity: sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==} @@ -1364,7 +1366,7 @@ snapshots: '@types/prop-types@15.7.12': {} - '@types/react-dom@18.3.1': + '@types/react-dom@18.3.5(@types/react@18.3.12)': dependencies: '@types/react': 18.3.12 From 96655bf62b248e4ba13ed9bd88ff8db29fc6e2e2 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Mon, 16 Dec 2024 23:14:42 +0100 Subject: [PATCH 112/216] Display the discomfort breakdown in the tables diagram --- app/api/abstract-api.tsx | 11 +++ app/lib/definitions.ts | 11 --- app/lib/tableSimulation.tsx | 69 ++++++++++++++ app/ui/arrangements/arrangement.tsx | 53 +++++------ app/ui/components/table.tsx | 142 ++++++++++++++++++---------- package.json | 1 + pnpm-lock.yaml | 9 ++ 7 files changed, 203 insertions(+), 93 deletions(-) create mode 100644 app/lib/tableSimulation.tsx diff --git a/app/api/abstract-api.tsx b/app/api/abstract-api.tsx index b43e72e..f67bea3 100644 --- a/app/api/abstract-api.tsx +++ b/app/api/abstract-api.tsx @@ -5,6 +5,7 @@ import { getCsrfToken, getSlug } from '@/app/lib/utils'; export interface Api { getAll(serializable: Serializable ,callback: (objets: T[]) => void): void; + get(serializable: Serializable, id: string, callback: (object: T) => void): void; create(serializable: Serializable, object: T, callback: () => void): void; update(serializable: Serializable, object: T, callback: () => void): void; destroy(serializable: Serializable, object: T, callback: () => void): void; @@ -29,6 +30,16 @@ export class AbstractApi implements Api { }); } + get(serializable: Serializable, id: string, callback: (object: T) => void): void { + fetch(`/api/${getSlug()}/${serializable.apiPath()}/${id}`) + .then((response) => response.json()) + .then((data) => { + callback(serializable.fromJson(data)); + }, (error) => { + return []; + }); + } + update(serializable: Serializable, object: T, callback: () => void): void { fetch(`/api/${getSlug()}/${serializable.apiPath()}/${object.id}`, { method: 'PUT', diff --git a/app/lib/definitions.ts b/app/lib/definitions.ts index 0e1fce7..f91127a 100644 --- a/app/lib/definitions.ts +++ b/app/lib/definitions.ts @@ -15,17 +15,6 @@ export type TableArrangement = { discomfort?: number } -export type guestsTable = { - id: string; - customer_id: string; - name: string; - email: string; - image_url: string; - date: string; - amount: number; - status: 'pending' | 'paid'; -}; - export type User = { id: string; email: string; diff --git a/app/lib/tableSimulation.tsx b/app/lib/tableSimulation.tsx new file mode 100644 index 0000000..8a9bd22 --- /dev/null +++ b/app/lib/tableSimulation.tsx @@ -0,0 +1,69 @@ +import { Serializable } from "../api/abstract-api"; +import { Entity } from "./definitions"; +import { Guest } from "./guest"; + +export type Discomfort = { + discomfort: number; + breakdown: { + tableSizePenalty: number; + cohesionPenalty: number; + } +} + +export type Table = { + number: number; + guests: Guest[]; + discomfort: Discomfort; +} + +export class TableSimulation implements Entity { + id: string; + tables: Table[]; + + constructor(id: string, tables: Table[]) { + this.id = id; + this.tables = tables; + } +} + +export class TableSimulationSerializer implements Serializable { + fromJson(data: any): TableSimulation { + return new TableSimulation(data.id, data.tables.map((table: any) => { + return { + number: table.number, + guests: table.guests.map((guest: any) => new Guest(guest.id, guest.name, guest.group?.name, guest.group?.id, guest.color)), + discomfort: { + discomfort: table.discomfort.discomfort, + breakdown: { + tableSizePenalty: table.discomfort.breakdown.table_size_penalty, + cohesionPenalty: table.discomfort.breakdown.cohesion_penalty, + } + }, + } + })); + } + + toJson(simulation: TableSimulation): string { + return JSON.stringify({ simulation: { tables: simulation.tables.map((table) => { + return { + number: table.number, + guests: table.guests.map((guest) => { + return { + id: guest.id, + name: guest.name, + group_id: guest.groupId, + color: guest.color, + status: guest.status, + children: guest.children, + } + }), + discomfort: table.discomfort, + } + }) } }); + } + + apiPath(): string { + return 'tables_arrangements'; + } +} + diff --git a/app/ui/arrangements/arrangement.tsx b/app/ui/arrangements/arrangement.tsx index ad466b3..8f82d19 100644 --- a/app/ui/arrangements/arrangement.tsx +++ b/app/ui/arrangements/arrangement.tsx @@ -2,44 +2,37 @@ 'use client'; -import React, { useState } from 'react'; +import { AbstractApi } from '@/app/api/abstract-api'; import { TableArrangement } from '@/app/lib/definitions'; -import { lusitana } from '@/app/ui/fonts'; -import { Table } from '@/app/ui/components/table'; +import { TableSimulation, TableSimulationSerializer } from '@/app/lib/tableSimulation'; import { getSlug } from '@/app/lib/utils'; +import { Table } from '@/app/ui/components/table'; +import { lusitana } from '@/app/ui/fonts'; +import { useState, useEffect } from 'react'; export default function Arrangement({ id }: { id: string }) { - const [tables, setTables] = useState>([]); + const [simulation, setSimulation] = useState(undefined); - function loadTables() { - fetch(`/api/${getSlug()}/tables_arrangements/${id}`) - .then((response) => response.json()) - .then((data) => { - setTables(data.map((record: any) => { - return ({ - id: record.number, - guests: record.guests - }); - })); - }, (error) => { - return []; - }); - } + function loadSimulation() { + new AbstractApi().get(new TableSimulationSerializer(), id, (object: TableSimulation) => { + setSimulation(object); + }); + } - tables.length === 0 && loadTables(); + useEffect(loadSimulation, []); - return ( -
-
-

Table distributions

-
- {tables.map((table) => ( - - ))} - - + return ( +
+
+

Table distributions

+
+ {simulation && simulation.tables.map((table) => ( +
+ ))} - ) + + + ) } \ No newline at end of file diff --git a/app/ui/components/table.tsx b/app/ui/components/table.tsx index d884ed1..4272003 100644 --- a/app/ui/components/table.tsx +++ b/app/ui/components/table.tsx @@ -1,69 +1,107 @@ /* Copyright (C) 2024 Manuel Bustillo*/ import { Guest } from "@/app/lib/guest"; +import { Table as TableType } from "@/app/lib/tableSimulation"; +import { RectangleGroupIcon, UserGroupIcon } from "@heroicons/react/24/outline"; +import { v4 as uuidv4 } from 'uuid'; +import { Tooltip } from "primereact/tooltip"; +import clsx from "clsx"; function Dish({ guest, rotation }: { guest: Guest, rotation?: number }) { - rotation = rotation || 0 - return ( -
- {guest.name} -
- ) + rotation = rotation || 0 + return ( +
+ {guest.name} +
+ ) } - function GuestRow({ guests }: { guests: Guest[] }) { - return ( -
- {guests.map((guest) => )} -
- ) + return ( +
+ {guests.map((guest) => )} +
+ ) } -function RectangularTable({ guests }: { guests: Guest[] }) { - const halfwayThrough = Math.floor(guests.length / 2) - const arrayFirstHalf = guests.slice(0, halfwayThrough); - const arraySecondHalf = guests.slice(halfwayThrough, guests.length); +function RectangularTable({ table }: { table: TableType }) { + const guests = table.guests; + const halfwayThrough = Math.floor(guests.length / 2) + const arrayFirstHalf = guests.slice(0, halfwayThrough); + const arraySecondHalf = guests.slice(halfwayThrough, guests.length); - return ( -
- - -
- ) + return ( +
+ + +
+ ) } -function RoundedTable({ guests }: { guests: Guest[] }) { - const size = 500 - const rotation = 360 / guests.length - return ( -
- { - guests.map((guest, index) => { - return ( -
- -
- ) - }) - } -
- ) +function RoundedTable({ table }: { table: TableType }) { + const guests = table.guests; + const size = 500 + const rotation = 360 / guests.length + + const className = (penalty: number) => { + return clsx("px-2 tooltip-cohesion", { + "hidden": penalty === 0, + "text-orange-300": penalty <= 5, + "text-orange-500": penalty > 5 && penalty <= 10, + "text-orange-700": penalty > 10, + }) + } + + + return ( +
+ + { + guests.map((guest, index) => { + return ( +
+ +
+ ) + }) + } + +
+
{`Table #${table.number}`}
+ + + + + + + + +
+
+ ) } -export function Table({ guests, style }: { guests: Guest[], style: "rectangular" | "rounded" }) { - return ( - <> - {style === "rectangular" && } - {style === "rounded" && } - - ) +export function Table({ table, style }: { table: TableType, style: "rectangular" | "rounded" }) { + return ( + <> + {style === "rectangular" && } + {style === "rounded" && } + + ) } \ No newline at end of file diff --git a/package.json b/package.json index f5939df..1a55fdc 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "tailwindcss": "3.4.16", "typescript": "5.7.2", "use-debounce": "^10.0.1", + "uuid": "11.0.3", "zod": "^3.23.8" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b1cb101..012188f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -53,6 +53,9 @@ importers: use-debounce: specifier: ^10.0.1 version: 10.0.4(react@19.0.0-rc-f38c22b244-20240704) + uuid: + specifier: 11.0.3 + version: 11.0.3 zod: specifier: ^3.23.8 version: 3.24.1 @@ -1117,6 +1120,10 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + uuid@11.0.3: + resolution: {integrity: sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg==} + hasBin: true + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -2116,6 +2123,8 @@ snapshots: util-deprecate@1.0.2: {} + uuid@11.0.3: {} + webidl-conversions@3.0.1: {} whatwg-url@5.0.0: From 658b94a2dc2299a1910576d0ec10a6f6fc487c44 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Mon, 16 Dec 2024 22:17:28 +0000 Subject: [PATCH 113/216] Add copyright notice --- app/lib/tableSimulation.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/lib/tableSimulation.tsx b/app/lib/tableSimulation.tsx index 8a9bd22..cfe4fbf 100644 --- a/app/lib/tableSimulation.tsx +++ b/app/lib/tableSimulation.tsx @@ -1,3 +1,5 @@ +/* Copyright (C) 2024 Manuel Bustillo*/ + import { Serializable } from "../api/abstract-api"; import { Entity } from "./definitions"; import { Guest } from "./guest"; From fac573c69d0360bfc682a7cd427b7dd462bacee9 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 17 Dec 2024 01:06:27 +0000 Subject: [PATCH 114/216] Update dependency @types/react to v18.3.17 --- package.json | 2 +- pnpm-lock.yaml | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 1a55fdc..63cbb1f 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@playwright/test": "^1.46.0", "@types/bcrypt": "^5.0.2", "@types/node": "22.10.2", - "@types/react": "18.3.12", + "@types/react": "18.3.17", "@types/react-dom": "18.3.5" }, "engines": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 012188f..da7f1bc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,7 +37,7 @@ importers: version: 7.0.0 primereact: specifier: ^10.8.2 - version: 10.8.5(@types/react@18.3.12)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) + version: 10.8.5(@types/react@18.3.17)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) react: specifier: 19.0.0-rc-f38c22b244-20240704 version: 19.0.0-rc-f38c22b244-20240704 @@ -70,11 +70,11 @@ importers: specifier: 22.10.2 version: 22.10.2 '@types/react': - specifier: 18.3.12 - version: 18.3.12 + specifier: 18.3.17 + version: 18.3.17 '@types/react-dom': specifier: 18.3.5 - version: 18.3.5(@types/react@18.3.12) + version: 18.3.5(@types/react@18.3.17) packages: @@ -345,8 +345,8 @@ packages: '@types/react-transition-group@4.4.11': resolution: {integrity: sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==} - '@types/react@18.3.12': - resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==} + '@types/react@18.3.17': + resolution: {integrity: sha512-opAQ5no6LqJNo9TqnxBKsgnkIYHozW9KSTlFVoSUJYh1Fl/sswkEoqIugRSm7tbh6pABtYjGAjW+GOS23j8qbw==} abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} @@ -1373,15 +1373,15 @@ snapshots: '@types/prop-types@15.7.12': {} - '@types/react-dom@18.3.5(@types/react@18.3.12)': + '@types/react-dom@18.3.5(@types/react@18.3.17)': dependencies: - '@types/react': 18.3.12 + '@types/react': 18.3.17 '@types/react-transition-group@4.4.11': dependencies: - '@types/react': 18.3.12 + '@types/react': 18.3.17 - '@types/react@18.3.12': + '@types/react@18.3.17': dependencies: '@types/prop-types': 15.7.12 csstype: 3.1.3 @@ -1886,14 +1886,14 @@ snapshots: primeicons@7.0.0: {} - primereact@10.8.5(@types/react@18.3.12)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): + primereact@10.8.5(@types/react@18.3.17)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): dependencies: '@types/react-transition-group': 4.4.11 react: 19.0.0-rc-f38c22b244-20240704 react-dom: 19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704) react-transition-group: 4.4.5(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) optionalDependencies: - '@types/react': 18.3.12 + '@types/react': 18.3.17 prop-types@15.8.1: dependencies: From 96c45ee175c8d5f5b1bafcf6280d64a6794bfaf9 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 18 Dec 2024 01:06:06 +0000 Subject: [PATCH 115/216] Update dependency tailwindcss to v3.4.17 --- package.json | 2 +- pnpm-lock.yaml | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 63cbb1f..8c61227 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "primereact": "^10.8.2", "react": "19.0.0-rc-f38c22b244-20240704", "react-dom": "19.0.0-rc-f38c22b244-20240704", - "tailwindcss": "3.4.16", + "tailwindcss": "3.4.17", "typescript": "5.7.2", "use-debounce": "^10.0.1", "uuid": "11.0.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index da7f1bc..3a40f08 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,7 +13,7 @@ importers: version: 2.2.0(react@19.0.0-rc-f38c22b244-20240704) '@tailwindcss/forms': specifier: ^0.5.7 - version: 0.5.9(tailwindcss@3.4.16) + version: 0.5.9(tailwindcss@3.4.17) autoprefixer: specifier: 10.4.20 version: 10.4.20(postcss@8.4.49) @@ -45,8 +45,8 @@ importers: specifier: 19.0.0-rc-f38c22b244-20240704 version: 19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704) tailwindcss: - specifier: 3.4.16 - version: 3.4.16 + specifier: 3.4.17 + version: 3.4.17 typescript: specifier: 5.7.2 version: 5.7.2 @@ -1068,8 +1068,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - tailwindcss@3.4.16: - resolution: {integrity: sha512-TI4Cyx7gDiZ6r44ewaJmt0o6BrMCT5aK5e0rmJ/G9Xq3w7CX/5VXl/zIPEJZFUK5VEqwByyhqNPycPlvcK4ZNw==} + tailwindcss@3.4.17: + resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} engines: {node: '>=14.0.0'} hasBin: true @@ -1356,10 +1356,10 @@ snapshots: dependencies: tslib: 2.6.3 - '@tailwindcss/forms@0.5.9(tailwindcss@3.4.16)': + '@tailwindcss/forms@0.5.9(tailwindcss@3.4.17)': dependencies: mini-svg-data-uri: 1.4.4 - tailwindcss: 3.4.16 + tailwindcss: 3.4.17 '@types/bcrypt@5.0.2': dependencies: @@ -2053,7 +2053,7 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - tailwindcss@3.4.16: + tailwindcss@3.4.17: dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 From 6dcc87a2c20bc337ce5ec9694eb53105b22f0b7a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 20 Dec 2024 01:06:51 +0000 Subject: [PATCH 116/216] Update pnpm to v9.15.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8c61227..98a4979 100644 --- a/package.json +++ b/package.json @@ -34,5 +34,5 @@ "engines": { "node": ">=23.0.0" }, - "packageManager": "pnpm@9.15.0+sha512.76e2379760a4328ec4415815bcd6628dee727af3779aaa4c914e3944156c4299921a89f976381ee107d41f12cfa4b66681ca9c718f0668fa0831ed4c6d8ba56c" + "packageManager": "pnpm@9.15.1+sha512.1acb565e6193efbebda772702950469150cf12bcc764262e7587e71d19dc98a423dff9536e57ea44c49bdf790ff694e83c27be5faa23d67e0c033b583be4bfcf" } From e536fd1cd122381fc9c85d04b11c33acd486217a Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 20 Dec 2024 01:07:17 +0000 Subject: [PATCH 117/216] Update dependency node to v23.5.0 --- .nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nvmrc b/.nvmrc index d313578..dd6db9f 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -23.4.0 \ No newline at end of file +23.5.0 \ No newline at end of file From 632a2f98155d0b52c90e98c6e571c12332ab8ade Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 21 Dec 2024 01:07:01 +0000 Subject: [PATCH 118/216] Update dependency @types/react to v18.3.18 --- package.json | 2 +- pnpm-lock.yaml | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 98a4979..c135bd6 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@playwright/test": "^1.46.0", "@types/bcrypt": "^5.0.2", "@types/node": "22.10.2", - "@types/react": "18.3.17", + "@types/react": "18.3.18", "@types/react-dom": "18.3.5" }, "engines": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3a40f08..98c6cbe 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,7 +37,7 @@ importers: version: 7.0.0 primereact: specifier: ^10.8.2 - version: 10.8.5(@types/react@18.3.17)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) + version: 10.8.5(@types/react@18.3.18)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) react: specifier: 19.0.0-rc-f38c22b244-20240704 version: 19.0.0-rc-f38c22b244-20240704 @@ -70,11 +70,11 @@ importers: specifier: 22.10.2 version: 22.10.2 '@types/react': - specifier: 18.3.17 - version: 18.3.17 + specifier: 18.3.18 + version: 18.3.18 '@types/react-dom': specifier: 18.3.5 - version: 18.3.5(@types/react@18.3.17) + version: 18.3.5(@types/react@18.3.18) packages: @@ -345,8 +345,8 @@ packages: '@types/react-transition-group@4.4.11': resolution: {integrity: sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==} - '@types/react@18.3.17': - resolution: {integrity: sha512-opAQ5no6LqJNo9TqnxBKsgnkIYHozW9KSTlFVoSUJYh1Fl/sswkEoqIugRSm7tbh6pABtYjGAjW+GOS23j8qbw==} + '@types/react@18.3.18': + resolution: {integrity: sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==} abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} @@ -1373,15 +1373,15 @@ snapshots: '@types/prop-types@15.7.12': {} - '@types/react-dom@18.3.5(@types/react@18.3.17)': + '@types/react-dom@18.3.5(@types/react@18.3.18)': dependencies: - '@types/react': 18.3.17 + '@types/react': 18.3.18 '@types/react-transition-group@4.4.11': dependencies: - '@types/react': 18.3.17 + '@types/react': 18.3.18 - '@types/react@18.3.17': + '@types/react@18.3.18': dependencies: '@types/prop-types': 15.7.12 csstype: 3.1.3 @@ -1886,14 +1886,14 @@ snapshots: primeicons@7.0.0: {} - primereact@10.8.5(@types/react@18.3.17)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): + primereact@10.8.5(@types/react@18.3.18)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): dependencies: '@types/react-transition-group': 4.4.11 react: 19.0.0-rc-f38c22b244-20240704 react-dom: 19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704) react-transition-group: 4.4.5(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) optionalDependencies: - '@types/react': 18.3.17 + '@types/react': 18.3.18 prop-types@15.8.1: dependencies: From 42d02306eb98245ed20ab2bac1bb694abac260e6 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 21 Dec 2024 01:07:14 +0000 Subject: [PATCH 119/216] Update dependency next to v15.1.2 --- package.json | 2 +- pnpm-lock.yaml | 110 ++++++++++++++++++++++++++----------------------- 2 files changed, 59 insertions(+), 53 deletions(-) diff --git a/package.json b/package.json index 98a4979..12d46cd 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "autoprefixer": "10.4.20", "bcrypt": "^5.1.1", "clsx": "^2.1.1", - "next": "15.0.3", + "next": "15.1.2", "next-auth": "5.0.0-beta.25", "postcss": "8.4.49", "primeicons": "^7.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3a40f08..ce141db 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,11 +24,11 @@ importers: specifier: ^2.1.1 version: 2.1.1 next: - specifier: 15.0.3 - version: 15.0.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) + specifier: 15.1.2 + 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) next-auth: specifier: 5.0.0-beta.25 - version: 5.0.0-beta.25(next@15.0.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) + 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) postcss: specifier: 8.4.49 version: 8.4.49 @@ -239,53 +239,53 @@ packages: resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true - '@next/env@15.0.3': - resolution: {integrity: sha512-t9Xy32pjNOvVn2AS+Utt6VmyrshbpfUMhIjFO60gI58deSo/KgLOp31XZ4O+kY/Is8WAGYwA5gR7kOb1eORDBA==} + '@next/env@15.1.2': + resolution: {integrity: sha512-Hm3jIGsoUl6RLB1vzY+dZeqb+/kWPZ+h34yiWxW0dV87l8Im/eMOwpOA+a0L78U0HM04syEjXuRlCozqpwuojQ==} - '@next/swc-darwin-arm64@15.0.3': - resolution: {integrity: sha512-s3Q/NOorCsLYdCKvQlWU+a+GeAd3C8Rb3L1YnetsgwXzhc3UTWrtQpB/3eCjFOdGUj5QmXfRak12uocd1ZiiQw==} + '@next/swc-darwin-arm64@15.1.2': + resolution: {integrity: sha512-b9TN7q+j5/7+rGLhFAVZiKJGIASuo8tWvInGfAd8wsULjB1uNGRCj1z1WZwwPWzVQbIKWFYqc+9L7W09qwt52w==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.0.3': - resolution: {integrity: sha512-Zxl/TwyXVZPCFSf0u2BNj5sE0F2uR6iSKxWpq4Wlk/Sv9Ob6YCKByQTkV2y6BCic+fkabp9190hyrDdPA/dNrw==} + '@next/swc-darwin-x64@15.1.2': + resolution: {integrity: sha512-caR62jNDUCU+qobStO6YJ05p9E+LR0EoXh1EEmyU69cYydsAy7drMcOlUlRtQihM6K6QfvNwJuLhsHcCzNpqtA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.0.3': - resolution: {integrity: sha512-T5+gg2EwpsY3OoaLxUIofmMb7ohAUlcNZW0fPQ6YAutaWJaxt1Z1h+8zdl4FRIOr5ABAAhXtBcpkZNwUcKI2fw==} + '@next/swc-linux-arm64-gnu@15.1.2': + resolution: {integrity: sha512-fHHXBusURjBmN6VBUtu6/5s7cCeEkuGAb/ZZiGHBLVBXMBy4D5QpM8P33Or8JD1nlOjm/ZT9sEE5HouQ0F+hUA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.0.3': - resolution: {integrity: sha512-WkAk6R60mwDjH4lG/JBpb2xHl2/0Vj0ZRu1TIzWuOYfQ9tt9NFsIinI1Epma77JVgy81F32X/AeD+B2cBu/YQA==} + '@next/swc-linux-arm64-musl@15.1.2': + resolution: {integrity: sha512-9CF1Pnivij7+M3G74lxr+e9h6o2YNIe7QtExWq1KUK4hsOLTBv6FJikEwCaC3NeYTflzrm69E5UfwEAbV2U9/g==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.0.3': - resolution: {integrity: sha512-gWL/Cta1aPVqIGgDb6nxkqy06DkwJ9gAnKORdHWX1QBbSZZB+biFYPFti8aKIQL7otCE1pjyPaXpFzGeG2OS2w==} + '@next/swc-linux-x64-gnu@15.1.2': + resolution: {integrity: sha512-tINV7WmcTUf4oM/eN3Yuu/f8jQ5C6AkueZPKeALs/qfdfX57eNv4Ij7rt0SA6iZ8+fMobVfcFVv664Op0caCCg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.0.3': - resolution: {integrity: sha512-QQEMwFd8r7C0GxQS62Zcdy6GKx999I/rTO2ubdXEe+MlZk9ZiinsrjwoiBL5/57tfyjikgh6GOU2WRQVUej3UA==} + '@next/swc-linux-x64-musl@15.1.2': + resolution: {integrity: sha512-jf2IseC4WRsGkzeUw/cK3wci9pxR53GlLAt30+y+B+2qAQxMw6WAC3QrANIKxkcoPU3JFh/10uFfmoMDF9JXKg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.0.3': - resolution: {integrity: sha512-9TEp47AAd/ms9fPNgtgnT7F3M1Hf7koIYYWCMQ9neOwjbVWJsHZxrFbI3iEDJ8rf1TDGpmHbKxXf2IFpAvheIQ==} + '@next/swc-win32-arm64-msvc@15.1.2': + resolution: {integrity: sha512-wvg7MlfnaociP7k8lxLX4s2iBJm4BrNiNFhVUY+Yur5yhAJHfkS8qPPeDEUH8rQiY0PX3u/P7Q/wcg6Mv6GSAA==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.0.3': - resolution: {integrity: sha512-VNAz+HN4OGgvZs6MOoVfnn41kBzT+M+tB+OK4cww6DNyWS6wKaDpaAm/qLeOUbnMh0oVx1+mg0uoYARF69dJyA==} + '@next/swc-win32-x64-msvc@15.1.2': + resolution: {integrity: sha512-D3cNA8NoT3aWISWmo7HF5Eyko/0OdOO+VagkoJuiTk7pyX3P/b+n8XA/MYvyR+xSVcbKn68B1rY9fgqjNISqzQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -317,8 +317,8 @@ packages: '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - '@swc/helpers@0.5.13': - resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} '@tailwindcss/forms@0.5.9': resolution: {integrity: sha512-tM4XVr2+UVTxXJzey9Twx48c1gcxFStqn1pQz0tRsX8o3DvxhN5oY5pvyAbUx7VTaZxpej4Zzvc6h+1RJBzpIg==} @@ -740,16 +740,16 @@ packages: nodemailer: optional: true - next@15.0.3: - resolution: {integrity: sha512-ontCbCRKJUIoivAdGB34yCaOcPgYXr9AAkV/IwqFfWWTXEPUgLYkSkqBhIk9KK7gGmgjc64B+RdoeIDM13Irnw==} + next@15.1.2: + resolution: {integrity: sha512-nLJDV7peNy+0oHlmY2JZjzMfJ8Aj0/dd3jCwSZS8ZiO5nkQfcZRqDrRN3U5rJtqVTQneIOGZzb6LCNrk7trMCQ==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: '@opentelemetry/api': ^1.1.0 '@playwright/test': ^1.41.2 babel-plugin-react-compiler: '*' - react: ^18.2.0 || 19.0.0-rc-66855b96-20241106 - react-dom: ^18.2.0 || 19.0.0-rc-66855b96-20241106 + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 sass: ^1.3.0 peerDependenciesMeta: '@opentelemetry/api': @@ -1097,6 +1097,9 @@ packages: tslib@2.6.3: resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + typescript@5.7.2: resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} engines: {node: '>=14.17'} @@ -1303,30 +1306,30 @@ snapshots: - encoding - supports-color - '@next/env@15.0.3': {} + '@next/env@15.1.2': {} - '@next/swc-darwin-arm64@15.0.3': + '@next/swc-darwin-arm64@15.1.2': optional: true - '@next/swc-darwin-x64@15.0.3': + '@next/swc-darwin-x64@15.1.2': optional: true - '@next/swc-linux-arm64-gnu@15.0.3': + '@next/swc-linux-arm64-gnu@15.1.2': optional: true - '@next/swc-linux-arm64-musl@15.0.3': + '@next/swc-linux-arm64-musl@15.1.2': optional: true - '@next/swc-linux-x64-gnu@15.0.3': + '@next/swc-linux-x64-gnu@15.1.2': optional: true - '@next/swc-linux-x64-musl@15.0.3': + '@next/swc-linux-x64-musl@15.1.2': optional: true - '@next/swc-win32-arm64-msvc@15.0.3': + '@next/swc-win32-arm64-msvc@15.1.2': optional: true - '@next/swc-win32-x64-msvc@15.0.3': + '@next/swc-win32-x64-msvc@15.1.2': optional: true '@nodelib/fs.scandir@2.1.5': @@ -1352,9 +1355,9 @@ snapshots: '@swc/counter@0.1.3': {} - '@swc/helpers@0.5.13': + '@swc/helpers@0.5.15': dependencies: - tslib: 2.6.3 + tslib: 2.8.1 '@tailwindcss/forms@0.5.9(tailwindcss@3.4.17)': dependencies: @@ -1738,17 +1741,17 @@ snapshots: nanoid@3.3.7: {} - next-auth@5.0.0-beta.25(next@15.0.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): + 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): dependencies: '@auth/core': 0.37.2 - next: 15.0.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: 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@15.0.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@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): dependencies: - '@next/env': 15.0.3 + '@next/env': 15.1.2 '@swc/counter': 0.1.3 - '@swc/helpers': 0.5.13 + '@swc/helpers': 0.5.15 busboy: 1.6.0 caniuse-lite: 1.0.30001651 postcss: 8.4.31 @@ -1756,14 +1759,14 @@ snapshots: 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) optionalDependencies: - '@next/swc-darwin-arm64': 15.0.3 - '@next/swc-darwin-x64': 15.0.3 - '@next/swc-linux-arm64-gnu': 15.0.3 - '@next/swc-linux-arm64-musl': 15.0.3 - '@next/swc-linux-x64-gnu': 15.0.3 - '@next/swc-linux-x64-musl': 15.0.3 - '@next/swc-win32-arm64-msvc': 15.0.3 - '@next/swc-win32-x64-msvc': 15.0.3 + '@next/swc-darwin-arm64': 15.1.2 + '@next/swc-darwin-x64': 15.1.2 + '@next/swc-linux-arm64-gnu': 15.1.2 + '@next/swc-linux-arm64-musl': 15.1.2 + '@next/swc-linux-x64-gnu': 15.1.2 + '@next/swc-linux-x64-musl': 15.1.2 + '@next/swc-win32-arm64-msvc': 15.1.2 + '@next/swc-win32-x64-msvc': 15.1.2 '@playwright/test': 1.49.1 sharp: 0.33.5 transitivePeerDependencies: @@ -2105,7 +2108,10 @@ snapshots: ts-interface-checker@0.1.13: {} - tslib@2.6.3: {} + tslib@2.6.3: + optional: true + + tslib@2.8.1: {} typescript@5.7.2: {} From ff73133e05ec946acdb99358e92ce6a342aaa773 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sat, 28 Dec 2024 11:42:22 +0100 Subject: [PATCH 120/216] Define a health endpoint for docker compose --- app/api/health/route.ts | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 app/api/health/route.ts diff --git a/app/api/health/route.ts b/app/api/health/route.ts new file mode 100644 index 0000000..6a3d203 --- /dev/null +++ b/app/api/health/route.ts @@ -0,0 +1,5 @@ +import { NextResponse } from "next/server"; + +export function GET() { + return NextResponse.json({}); +} \ No newline at end of file From b1339e2ce9cae0df3c9fe2e1f5c0597975dbf125 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sat, 28 Dec 2024 11:42:22 +0100 Subject: [PATCH 121/216] Define a health endpoint for docker compose --- app/api/health/route.ts | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 app/api/health/route.ts diff --git a/app/api/health/route.ts b/app/api/health/route.ts new file mode 100644 index 0000000..6a3d203 --- /dev/null +++ b/app/api/health/route.ts @@ -0,0 +1,5 @@ +import { NextResponse } from "next/server"; + +export function GET() { + return NextResponse.json({}); +} \ No newline at end of file From 07476221c3a3af0a5f8593054d2f732875b938a6 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sat, 28 Dec 2024 10:46:08 +0000 Subject: [PATCH 122/216] Add copyright notice --- app/api/health/route.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/api/health/route.ts b/app/api/health/route.ts index 6a3d203..4dc1a10 100644 --- a/app/api/health/route.ts +++ b/app/api/health/route.ts @@ -1,3 +1,5 @@ +/* Copyright (C) 2024 Manuel Bustillo*/ + import { NextResponse } from "next/server"; export function GET() { From b7e2bbb46f7ae54e2f07512d9f7f7a88711300d0 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sat, 28 Dec 2024 13:00:24 +0100 Subject: [PATCH 123/216] Initial approach to configure affinities between groups --- app/lib/affinities.tsx | 3 ++ app/ui/components/form/affinitySlider.tsx | 34 ++++++++++++++++++++ app/ui/components/group-form-dialog.tsx | 39 +++++++++++++++++++---- app/ui/groups/table.tsx | 7 ++-- 4 files changed, 73 insertions(+), 10 deletions(-) create mode 100644 app/lib/affinities.tsx create mode 100644 app/ui/components/form/affinitySlider.tsx diff --git a/app/lib/affinities.tsx b/app/lib/affinities.tsx new file mode 100644 index 0000000..9480936 --- /dev/null +++ b/app/lib/affinities.tsx @@ -0,0 +1,3 @@ +export class Affinities { + [key:string]: number; +} \ No newline at end of file diff --git a/app/ui/components/form/affinitySlider.tsx b/app/ui/components/form/affinitySlider.tsx new file mode 100644 index 0000000..da82ff9 --- /dev/null +++ b/app/ui/components/form/affinitySlider.tsx @@ -0,0 +1,34 @@ +import { Slider } from 'primereact/slider'; +import React, { useEffect, useState } from 'react'; + +export default function AffinitySlider({ initialValue, onChange }: { initialValue: number, onChange?: (value: number) => void }) { + const [value, setValue] = useState(initialValue); + useEffect(() => {setValue(initialValue)}, [initialValue]); + + 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 ( + <> + setValue(e.value)} className='w-80 bg-gray-400' /> + + { label(value) } + + + ) +} \ No newline at end of file diff --git a/app/ui/components/group-form-dialog.tsx b/app/ui/components/group-form-dialog.tsx index d652a13..2a78b67 100644 --- a/app/ui/components/group-form-dialog.tsx +++ b/app/ui/components/group-form-dialog.tsx @@ -2,18 +2,20 @@ 'use client'; +import { AbstractApi } from '@/app/api/abstract-api'; +import { Group, GroupSerializer } from '@/app/lib/group'; import { classNames } from '@/app/ui/components/button'; -import { Dialog } from 'primereact/dialog'; import { ColorPicker } from 'primereact/colorpicker'; +import { Dialog } from 'primereact/dialog'; import { Dropdown } from 'primereact/dropdown'; import { FloatLabel } from 'primereact/floatlabel'; import { InputText } from 'primereact/inputtext'; -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'; +import { useEffect, useState } from 'react'; +import AffinitySlider from './form/affinitySlider'; +import { Affinities } from '@/app/lib/affinities'; +import { getSlug } from '@/app/lib/utils'; -export default function GroupFormDialog({groups, onCreate, onHide, group, visible }: { +export default function GroupFormDialog({ groups, onCreate, onHide, group, visible }: { groups: Group[], onCreate?: () => void, onHide: () => void, @@ -25,6 +27,19 @@ export default function GroupFormDialog({groups, onCreate, onHide, group, visibl const [icon, setIcon] = useState(group?.icon || ''); const [color, setColor] = useState(group?.color || ''); const [parentId, setParentId] = useState(group?.parentId || ''); + const [affinities, setAffinities] = useState({}); + + useEffect(() => { + if (group?.id === undefined) { + setAffinities({}); + } else { + fetch(`/api/${getSlug()}/groups/${group?.id}/affinities`) + .then((response) => response.json()) + .then((data) => { + setAffinities(data); + }); + } + }, []); const api = new AbstractApi(); const serializer = new GroupSerializer(); @@ -90,6 +105,18 @@ export default function GroupFormDialog({groups, onCreate, onHide, group, visibl {group?.id !== undefined ? 'Update' : 'Create'} + +
+ Describe the affinity with the rest of the groups + + { + groups.map((group) => +
+ {group.name} + +
) + } +
); diff --git a/app/ui/groups/table.tsx b/app/ui/groups/table.tsx index 41af307..4088cfa 100644 --- a/app/ui/groups/table.tsx +++ b/app/ui/groups/table.tsx @@ -2,13 +2,12 @@ '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 { TreeTable } from 'primereact/treetable'; +import { Group, GroupSerializer } from '@/app/lib/group'; +import { PencilIcon, TrashIcon } from '@heroicons/react/24/outline'; import { Column } from 'primereact/column'; import { TreeNode } from 'primereact/treenode'; +import { TreeTable } from 'primereact/treetable'; export default function GroupsTable({ groups, onUpdate, onEdit }: { groups: Group[], From d307ff6927aa015e1b4f5402340b2f2abaa5c949 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sat, 28 Dec 2024 13:04:01 +0100 Subject: [PATCH 124/216] Update status of the parent component --- app/ui/components/form/affinitySlider.tsx | 7 ++----- app/ui/components/group-form-dialog.tsx | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/app/ui/components/form/affinitySlider.tsx b/app/ui/components/form/affinitySlider.tsx index da82ff9..b434535 100644 --- a/app/ui/components/form/affinitySlider.tsx +++ b/app/ui/components/form/affinitySlider.tsx @@ -1,9 +1,6 @@ import { Slider } from 'primereact/slider'; -import React, { useEffect, useState } from 'react'; -export default function AffinitySlider({ initialValue, onChange }: { initialValue: number, onChange?: (value: number) => void }) { - const [value, setValue] = useState(initialValue); - useEffect(() => {setValue(initialValue)}, [initialValue]); +export default function AffinitySlider({value , onChange }: { value: number, onChange: (value: number) => void }) { const label = (value: number) => { if (value < 0.2) { @@ -25,7 +22,7 @@ export default function AffinitySlider({ initialValue, onChange }: { initialValu return ( <> - setValue(e.value)} className='w-80 bg-gray-400' /> + onChange(e.value)} className='w-80 bg-gray-400' /> { label(value) } diff --git a/app/ui/components/group-form-dialog.tsx b/app/ui/components/group-form-dialog.tsx index 2a78b67..226d40b 100644 --- a/app/ui/components/group-form-dialog.tsx +++ b/app/ui/components/group-form-dialog.tsx @@ -113,7 +113,7 @@ export default function GroupFormDialog({ groups, onCreate, onHide, group, visib groups.map((group) =>
{group.name} - + setAffinities({...affinities, [group.id || "default"]:value})} />
) } From 52fb808d45af67771a20e7c9ad18efa56bd52ab8 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sat, 28 Dec 2024 14:18:14 +0100 Subject: [PATCH 125/216] Define a dialog to configure the affinities between groups --- app/[slug]/dashboard/guests/page.tsx | 17 ++++- app/ui/components/affinities-form-dialog.tsx | 69 ++++++++++++++++++++ app/ui/components/form/affinitySlider.tsx | 6 +- app/ui/components/group-form-dialog.tsx | 30 +-------- app/ui/groups/table.tsx | 6 +- 5 files changed, 91 insertions(+), 37 deletions(-) create mode 100644 app/ui/components/affinities-form-dialog.tsx diff --git a/app/[slug]/dashboard/guests/page.tsx b/app/[slug]/dashboard/guests/page.tsx index beb73f8..0d68edc 100644 --- a/app/[slug]/dashboard/guests/page.tsx +++ b/app/[slug]/dashboard/guests/page.tsx @@ -2,8 +2,10 @@ '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 AffinitiesFormDialog from '@/app/ui/components/affinities-form-dialog'; import { classNames } from '@/app/ui/components/button'; import GroupFormDialog from '@/app/ui/components/group-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 { TabPanel, TabView } from 'primereact/tabview'; import { Suspense, useState } from 'react'; -import { Group, GroupSerializer } from '@/app/lib/group'; export default function Page() { @@ -34,6 +35,8 @@ export default function Page() { const [groups, setGroups] = useState>([]); const [groupBeingEdited, setGroupBeingEdited] = useState(undefined); + const [groupAffinitiesBeingEditted, setGroupAffinitiesBeingEditted] = useState(undefined); + const [guestsLoaded, setGuestsLoaded] = useState(false); const [guests, setGuests] = useState>([]); const [guestBeingEdited, setGuestBeingEdited] = useState(undefined); @@ -77,11 +80,19 @@ export default function Page() { onHide={() => { setGroupBeingEdited(undefined) }} /> + { setGroupAffinitiesBeingEditted(undefined) }} + /> + }> - setGroupBeingEdited(group)} + onEditAffinities={(group) => setGroupAffinitiesBeingEditted(group)} /> diff --git a/app/ui/components/affinities-form-dialog.tsx b/app/ui/components/affinities-form-dialog.tsx new file mode 100644 index 0000000..7428233 --- /dev/null +++ b/app/ui/components/affinities-form-dialog.tsx @@ -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({}); + 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 ( + + {!isLoadingAffinities &&
+ Describe the affinity with the rest of the groups + + { + groups.filter((currentGroup) => currentGroup.id !== group?.id).map((group) => +
+ {group.name} + setAffinities({ ...affinities, [group.id || "default"]: value })} /> +
) + } + + +
+ } +
+ ); +} \ No newline at end of file diff --git a/app/ui/components/form/affinitySlider.tsx b/app/ui/components/form/affinitySlider.tsx index b434535..56bef94 100644 --- a/app/ui/components/form/affinitySlider.tsx +++ b/app/ui/components/form/affinitySlider.tsx @@ -1,6 +1,6 @@ import { Slider } from 'primereact/slider'; -export default function AffinitySlider({value , onChange }: { value: number, onChange: (value: number) => void }) { +export default function AffinitySlider({ value, onChange }: { value: number, onChange: (value: number) => void }) { const label = (value: number) => { if (value < 0.2) { @@ -22,9 +22,9 @@ export default function AffinitySlider({value , onChange }: { value: number, onC return ( <> - onChange(e.value)} className='w-80 bg-gray-400' /> + onChange(e.value)} className='w-80 bg-gray-400' /> - { label(value) } + {label(value)} ) diff --git a/app/ui/components/group-form-dialog.tsx b/app/ui/components/group-form-dialog.tsx index 226d40b..cc96348 100644 --- a/app/ui/components/group-form-dialog.tsx +++ b/app/ui/components/group-form-dialog.tsx @@ -10,10 +10,7 @@ import { Dialog } from 'primereact/dialog'; import { Dropdown } from 'primereact/dropdown'; import { FloatLabel } from 'primereact/floatlabel'; import { InputText } from 'primereact/inputtext'; -import { useEffect, useState } from 'react'; -import AffinitySlider from './form/affinitySlider'; -import { Affinities } from '@/app/lib/affinities'; -import { getSlug } from '@/app/lib/utils'; +import { useState } from 'react'; export default function GroupFormDialog({ groups, onCreate, onHide, group, visible }: { groups: Group[], @@ -27,19 +24,6 @@ export default function GroupFormDialog({ groups, onCreate, onHide, group, visib const [icon, setIcon] = useState(group?.icon || ''); const [color, setColor] = useState(group?.color || ''); const [parentId, setParentId] = useState(group?.parentId || ''); - const [affinities, setAffinities] = useState({}); - - useEffect(() => { - if (group?.id === undefined) { - setAffinities({}); - } else { - fetch(`/api/${getSlug()}/groups/${group?.id}/affinities`) - .then((response) => response.json()) - .then((data) => { - setAffinities(data); - }); - } - }, []); const api = new AbstractApi(); const serializer = new GroupSerializer(); @@ -105,18 +89,6 @@ export default function GroupFormDialog({ groups, onCreate, onHide, group, visib {group?.id !== undefined ? 'Update' : 'Create'} - -
- Describe the affinity with the rest of the groups - - { - groups.map((group) => -
- {group.name} - setAffinities({...affinities, [group.id || "default"]:value})} /> -
) - } -
); diff --git a/app/ui/groups/table.tsx b/app/ui/groups/table.tsx index 4088cfa..253c271 100644 --- a/app/ui/groups/table.tsx +++ b/app/ui/groups/table.tsx @@ -4,15 +4,16 @@ import { AbstractApi } from '@/app/api/abstract-api'; import { Group, GroupSerializer } from '@/app/lib/group'; -import { PencilIcon, TrashIcon } from '@heroicons/react/24/outline'; +import { AdjustmentsHorizontalIcon, PencilIcon, TrashIcon } from '@heroicons/react/24/outline'; import { Column } from 'primereact/column'; 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[], onUpdate: () => void, onEdit: (group: Group) => void, + onEditAffinities: (group: Group) => void, }) { const api = new AbstractApi(); @@ -22,6 +23,7 @@ export default function GroupsTable({ groups, onUpdate, onEdit }: {
{ api.destroy(serializer, group, onUpdate) }} /> onEdit(group)} /> + onEditAffinities(group)} />
); From dc735f1a2cb72921f17813f2304aaf105c3b0155 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sat, 28 Dec 2024 18:53:59 +0000 Subject: [PATCH 126/216] Add copyright notice --- app/lib/affinities.tsx | 2 ++ app/ui/components/form/affinitySlider.tsx | 2 ++ 2 files changed, 4 insertions(+) diff --git a/app/lib/affinities.tsx b/app/lib/affinities.tsx index 9480936..6c1023e 100644 --- a/app/lib/affinities.tsx +++ b/app/lib/affinities.tsx @@ -1,3 +1,5 @@ +/* Copyright (C) 2024 Manuel Bustillo*/ + export class Affinities { [key:string]: number; } \ No newline at end of file diff --git a/app/ui/components/form/affinitySlider.tsx b/app/ui/components/form/affinitySlider.tsx index 56bef94..f541e4d 100644 --- a/app/ui/components/form/affinitySlider.tsx +++ b/app/ui/components/form/affinitySlider.tsx @@ -1,3 +1,5 @@ +/* Copyright (C) 2024 Manuel Bustillo*/ + import { Slider } from 'primereact/slider'; export default function AffinitySlider({ value, onChange }: { value: number, onChange: (value: number) => void }) { From a6b678c6ae9cdf079919cdd4bb9730b8710fd932 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sat, 28 Dec 2024 20:23:35 +0100 Subject: [PATCH 127/216] Fix build issue with types returned by the Slider component --- app/ui/components/form/affinitySlider.tsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app/ui/components/form/affinitySlider.tsx b/app/ui/components/form/affinitySlider.tsx index f541e4d..56ef3e7 100644 --- a/app/ui/components/form/affinitySlider.tsx +++ b/app/ui/components/form/affinitySlider.tsx @@ -4,6 +4,13 @@ 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'; @@ -24,7 +31,7 @@ export default function AffinitySlider({ value, onChange }: { value: number, onC return ( <> - onChange(e.value)} className='w-80 bg-gray-400' /> + onChange(toNumber(e.value))} className='w-80 bg-gray-400' /> {label(value)} From 7a402d81b91b62718c29f578d1877af3f844d6fe Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 29 Dec 2024 01:10:17 +0000 Subject: [PATCH 128/216] Update dependency next to v15.1.3 --- package.json | 2 +- pnpm-lock.yaml | 96 +++++++++++++++++++++++--------------------------- 2 files changed, 46 insertions(+), 52 deletions(-) diff --git a/package.json b/package.json index 053a9f0..7ff5666 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "autoprefixer": "10.4.20", "bcrypt": "^5.1.1", "clsx": "^2.1.1", - "next": "15.1.2", + "next": "15.1.3", "next-auth": "5.0.0-beta.25", "postcss": "8.4.49", "primeicons": "^7.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bd6a6bc..a9b7945 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,11 +24,11 @@ importers: specifier: ^2.1.1 version: 2.1.1 next: - specifier: 15.1.2 - 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) + specifier: 15.1.3 + 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: 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: specifier: 8.4.49 version: 8.4.49 @@ -239,53 +239,53 @@ packages: resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true - '@next/env@15.1.2': - resolution: {integrity: sha512-Hm3jIGsoUl6RLB1vzY+dZeqb+/kWPZ+h34yiWxW0dV87l8Im/eMOwpOA+a0L78U0HM04syEjXuRlCozqpwuojQ==} + '@next/env@15.1.3': + resolution: {integrity: sha512-Q1tXwQCGWyA3ehMph3VO+E6xFPHDKdHFYosadt0F78EObYxPio0S09H9UGYznDe6Wc8eLKLG89GqcFJJDiK5xw==} - '@next/swc-darwin-arm64@15.1.2': - resolution: {integrity: sha512-b9TN7q+j5/7+rGLhFAVZiKJGIASuo8tWvInGfAd8wsULjB1uNGRCj1z1WZwwPWzVQbIKWFYqc+9L7W09qwt52w==} + '@next/swc-darwin-arm64@15.1.3': + resolution: {integrity: sha512-aZtmIh8jU89DZahXQt1La0f2EMPt/i7W+rG1sLtYJERsP7GRnNFghsciFpQcKHcGh4dUiyTB5C1X3Dde/Gw8gg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.1.2': - resolution: {integrity: sha512-caR62jNDUCU+qobStO6YJ05p9E+LR0EoXh1EEmyU69cYydsAy7drMcOlUlRtQihM6K6QfvNwJuLhsHcCzNpqtA==} + '@next/swc-darwin-x64@15.1.3': + resolution: {integrity: sha512-aw8901rjkVBK5mbq5oV32IqkJg+CQa6aULNlN8zyCWSsePzEG3kpDkAFkkTOh3eJ0p95KbkLyWBzslQKamXsLA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.1.2': - resolution: {integrity: sha512-fHHXBusURjBmN6VBUtu6/5s7cCeEkuGAb/ZZiGHBLVBXMBy4D5QpM8P33Or8JD1nlOjm/ZT9sEE5HouQ0F+hUA==} + '@next/swc-linux-arm64-gnu@15.1.3': + resolution: {integrity: sha512-YbdaYjyHa4fPK4GR4k2XgXV0p8vbU1SZh7vv6El4bl9N+ZSiMfbmqCuCuNU1Z4ebJMumafaz6UCC2zaJCsdzjw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.1.2': - resolution: {integrity: sha512-9CF1Pnivij7+M3G74lxr+e9h6o2YNIe7QtExWq1KUK4hsOLTBv6FJikEwCaC3NeYTflzrm69E5UfwEAbV2U9/g==} + '@next/swc-linux-arm64-musl@15.1.3': + resolution: {integrity: sha512-qgH/aRj2xcr4BouwKG3XdqNu33SDadqbkqB6KaZZkozar857upxKakbRllpqZgWl/NDeSCBYPmUAZPBHZpbA0w==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.1.2': - resolution: {integrity: sha512-tINV7WmcTUf4oM/eN3Yuu/f8jQ5C6AkueZPKeALs/qfdfX57eNv4Ij7rt0SA6iZ8+fMobVfcFVv664Op0caCCg==} + '@next/swc-linux-x64-gnu@15.1.3': + resolution: {integrity: sha512-uzafnTFwZCPN499fNVnS2xFME8WLC9y7PLRs/yqz5lz1X/ySoxfaK2Hbz74zYUdEg+iDZPd8KlsWaw9HKkLEVw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.1.2': - resolution: {integrity: sha512-jf2IseC4WRsGkzeUw/cK3wci9pxR53GlLAt30+y+B+2qAQxMw6WAC3QrANIKxkcoPU3JFh/10uFfmoMDF9JXKg==} + '@next/swc-linux-x64-musl@15.1.3': + resolution: {integrity: sha512-el6GUFi4SiDYnMTTlJJFMU+GHvw0UIFnffP1qhurrN1qJV3BqaSRUjkDUgVV44T6zpw1Lc6u+yn0puDKHs+Sbw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.1.2': - resolution: {integrity: sha512-wvg7MlfnaociP7k8lxLX4s2iBJm4BrNiNFhVUY+Yur5yhAJHfkS8qPPeDEUH8rQiY0PX3u/P7Q/wcg6Mv6GSAA==} + '@next/swc-win32-arm64-msvc@15.1.3': + resolution: {integrity: sha512-6RxKjvnvVMM89giYGI1qye9ODsBQpHSHVo8vqA8xGhmRPZHDQUE4jcDbhBwK0GnFMqBnu+XMg3nYukNkmLOLWw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.1.2': - resolution: {integrity: sha512-D3cNA8NoT3aWISWmo7HF5Eyko/0OdOO+VagkoJuiTk7pyX3P/b+n8XA/MYvyR+xSVcbKn68B1rY9fgqjNISqzQ==} + '@next/swc-win32-x64-msvc@15.1.3': + resolution: {integrity: sha512-VId/f5blObG7IodwC5Grf+aYP0O8Saz1/aeU3YcWqNdIUAmFQY3VEPKPaIzfv32F/clvanOb2K2BR5DtDs6XyQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -740,8 +740,8 @@ packages: nodemailer: optional: true - next@15.1.2: - resolution: {integrity: sha512-nLJDV7peNy+0oHlmY2JZjzMfJ8Aj0/dd3jCwSZS8ZiO5nkQfcZRqDrRN3U5rJtqVTQneIOGZzb6LCNrk7trMCQ==} + next@15.1.3: + resolution: {integrity: sha512-5igmb8N8AEhWDYzogcJvtcRDU6n4cMGtBklxKD4biYv4LXN8+awc/bbQ2IM2NQHdVPgJ6XumYXfo3hBtErg1DA==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -1094,9 +1094,6 @@ packages: ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - tslib@2.6.3: - resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} - tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -1183,7 +1180,7 @@ snapshots: '@emnapi/runtime@1.2.0': dependencies: - tslib: 2.6.3 + tslib: 2.8.1 optional: true '@heroicons/react@2.2.0(react@19.0.0-rc-f38c22b244-20240704)': @@ -1306,30 +1303,30 @@ snapshots: - encoding - 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 - '@next/swc-darwin-x64@15.1.2': + '@next/swc-darwin-x64@15.1.3': optional: true - '@next/swc-linux-arm64-gnu@15.1.2': + '@next/swc-linux-arm64-gnu@15.1.3': optional: true - '@next/swc-linux-arm64-musl@15.1.2': + '@next/swc-linux-arm64-musl@15.1.3': optional: true - '@next/swc-linux-x64-gnu@15.1.2': + '@next/swc-linux-x64-gnu@15.1.3': optional: true - '@next/swc-linux-x64-musl@15.1.2': + '@next/swc-linux-x64-musl@15.1.3': optional: true - '@next/swc-win32-arm64-msvc@15.1.2': + '@next/swc-win32-arm64-msvc@15.1.3': optional: true - '@next/swc-win32-x64-msvc@15.1.2': + '@next/swc-win32-x64-msvc@15.1.3': optional: true '@nodelib/fs.scandir@2.1.5': @@ -1741,15 +1738,15 @@ snapshots: 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: '@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 - 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: - '@next/env': 15.1.2 + '@next/env': 15.1.3 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 @@ -1759,14 +1756,14 @@ snapshots: 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) optionalDependencies: - '@next/swc-darwin-arm64': 15.1.2 - '@next/swc-darwin-x64': 15.1.2 - '@next/swc-linux-arm64-gnu': 15.1.2 - '@next/swc-linux-arm64-musl': 15.1.2 - '@next/swc-linux-x64-gnu': 15.1.2 - '@next/swc-linux-x64-musl': 15.1.2 - '@next/swc-win32-arm64-msvc': 15.1.2 - '@next/swc-win32-x64-msvc': 15.1.2 + '@next/swc-darwin-arm64': 15.1.3 + '@next/swc-darwin-x64': 15.1.3 + '@next/swc-linux-arm64-gnu': 15.1.3 + '@next/swc-linux-arm64-musl': 15.1.3 + '@next/swc-linux-x64-gnu': 15.1.3 + '@next/swc-linux-x64-musl': 15.1.3 + '@next/swc-win32-arm64-msvc': 15.1.3 + '@next/swc-win32-x64-msvc': 15.1.3 '@playwright/test': 1.49.1 sharp: 0.33.5 transitivePeerDependencies: @@ -2108,9 +2105,6 @@ snapshots: ts-interface-checker@0.1.13: {} - tslib@2.6.3: - optional: true - tslib@2.8.1: {} typescript@5.7.2: {} From b799a052a8c8aebef6401228a9ee866c30bdeb3c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 29 Dec 2024 01:12:19 +0000 Subject: [PATCH 129/216] Update pnpm to v9.15.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7ff5666..a3f6a94 100644 --- a/package.json +++ b/package.json @@ -34,5 +34,5 @@ "engines": { "node": ">=23.0.0" }, - "packageManager": "pnpm@9.15.1+sha512.1acb565e6193efbebda772702950469150cf12bcc764262e7587e71d19dc98a423dff9536e57ea44c49bdf790ff694e83c27be5faa23d67e0c033b583be4bfcf" + "packageManager": "pnpm@9.15.2+sha512.93e57b0126f0df74ce6bff29680394c0ba54ec47246b9cf321f0121d8d9bb03f750a705f24edc3c1180853afd7c2c3b94196d0a3d53d3e069d9e2793ef11f321" } From 36c9acee5185c5dd50e1ffd4f2120e2387ac8bc6 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 29 Dec 2024 11:27:54 +0100 Subject: [PATCH 130/216] Fix location of cache-from in Docker build --- .github/workflows/build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1118afa..ad4b3e6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,8 +1,8 @@ name: Build Nginx-based docker image on: push: - branches: - - main + # branches: + # - main concurrency: group: ${{ github.ref }} cancel-in-progress: true @@ -32,5 +32,5 @@ jobs: push: ${{ github.event_name != 'pull_request' }} tags: | ${{ secrets.PRIVATE_REGISTRY_HOST }}/${{ env.GITHUB_REPOSITORY }}:latest - cache-from: type=registry,ref=user/app:latest + cache-from: type=registry,ref=${{ secrets.PRIVATE_REGISTRY_HOST }}/${{ env.GITHUB_REPOSITORY }}:latest cache-to: type=inline \ No newline at end of file From 0594bf9456516833718c1fbb4bb6cb3578b1dfb2 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 29 Dec 2024 11:34:12 +0100 Subject: [PATCH 131/216] Build and cache the intermediate stages --- .github/workflows/build.yml | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ad4b3e6..da0ec57 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -24,13 +24,22 @@ jobs: registry: ${{ secrets.PRIVATE_REGISTRY_HOST }} username: ${{ secrets.PRIVATE_REGISTRY_USERNAME }} password: ${{ secrets.PRIVATE_REGISTRY_TOKEN }} + + - name: Build and push intermediate stages + uses: docker/build-push-action@v6 + with: + context: . + target: build + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ secrets.PRIVATE_REGISTRY_HOST }}/${{ env.GITHUB_REPOSITORY }}:build + cache-from: type=registry,ref=${{ secrets.PRIVATE_REGISTRY_HOST }}/${{ env.GITHUB_REPOSITORY }}:build + cache-to: type=inline - name: Build and push uses: docker/build-push-action@v6 with: context: . push: ${{ github.event_name != 'pull_request' }} - tags: | - ${{ secrets.PRIVATE_REGISTRY_HOST }}/${{ env.GITHUB_REPOSITORY }}:latest + tags: ${{ secrets.PRIVATE_REGISTRY_HOST }}/${{ env.GITHUB_REPOSITORY }}:latest cache-from: type=registry,ref=${{ secrets.PRIVATE_REGISTRY_HOST }}/${{ env.GITHUB_REPOSITORY }}:latest cache-to: type=inline \ No newline at end of file From 3e0fb208e2d118164a913a1f70678a8fa75abffd Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 29 Dec 2024 11:37:11 +0100 Subject: [PATCH 132/216] Fix stage name and add additional stage --- .github/workflows/build.yml | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index da0ec57..98a1caf 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -25,14 +25,24 @@ jobs: username: ${{ secrets.PRIVATE_REGISTRY_USERNAME }} password: ${{ secrets.PRIVATE_REGISTRY_TOKEN }} - - name: Build and push intermediate stages + - name: Build and push intermediate stages (deps) uses: docker/build-push-action@v6 with: context: . - target: build + target: deps push: ${{ github.event_name != 'pull_request' }} - tags: ${{ secrets.PRIVATE_REGISTRY_HOST }}/${{ env.GITHUB_REPOSITORY }}:build - cache-from: type=registry,ref=${{ secrets.PRIVATE_REGISTRY_HOST }}/${{ env.GITHUB_REPOSITORY }}:build + tags: ${{ secrets.PRIVATE_REGISTRY_HOST }}/${{ env.GITHUB_REPOSITORY }}:deps + cache-from: type=registry,ref=${{ secrets.PRIVATE_REGISTRY_HOST }}/${{ env.GITHUB_REPOSITORY }}:deps + cache-to: type=inline + + - name: Build and push intermediate stages (builder) + uses: docker/build-push-action@v6 + with: + context: . + target: builder + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ secrets.PRIVATE_REGISTRY_HOST }}/${{ env.GITHUB_REPOSITORY }}:builder + cache-from: type=registry,ref=${{ secrets.PRIVATE_REGISTRY_HOST }}/${{ env.GITHUB_REPOSITORY }}:builder cache-to: type=inline - name: Build and push From 1269a1a56f0afc9992a3256d4d9ff72d6f54493f Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 29 Dec 2024 13:10:58 +0100 Subject: [PATCH 133/216] Run docker images only on the main branch --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 98a1caf..549df8c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,8 +1,8 @@ name: Build Nginx-based docker image on: push: - # branches: - # - main + branches: + - main concurrency: group: ${{ github.ref }} cancel-in-progress: true From 2ded8676f4e46784dfb3ee4b4f9261695f14d783 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 29 Dec 2024 13:13:44 +0100 Subject: [PATCH 134/216] Push to the remote registry only on the main branch --- .github/workflows/build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 549df8c..1fed3f5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -30,7 +30,7 @@ jobs: with: context: . target: deps - push: ${{ github.event_name != 'pull_request' }} + push: ${{ github.ref == 'refs/heads/main' }} tags: ${{ secrets.PRIVATE_REGISTRY_HOST }}/${{ env.GITHUB_REPOSITORY }}:deps cache-from: type=registry,ref=${{ secrets.PRIVATE_REGISTRY_HOST }}/${{ env.GITHUB_REPOSITORY }}:deps cache-to: type=inline @@ -40,7 +40,7 @@ jobs: with: context: . target: builder - push: ${{ github.event_name != 'pull_request' }} + push: ${{ github.ref == 'refs/heads/main' }} tags: ${{ secrets.PRIVATE_REGISTRY_HOST }}/${{ env.GITHUB_REPOSITORY }}:builder cache-from: type=registry,ref=${{ secrets.PRIVATE_REGISTRY_HOST }}/${{ env.GITHUB_REPOSITORY }}:builder cache-to: type=inline @@ -49,7 +49,7 @@ jobs: uses: docker/build-push-action@v6 with: context: . - push: ${{ github.event_name != 'pull_request' }} + push: ${{ github.ref == 'refs/heads/main' }} tags: ${{ secrets.PRIVATE_REGISTRY_HOST }}/${{ env.GITHUB_REPOSITORY }}:latest cache-from: type=registry,ref=${{ secrets.PRIVATE_REGISTRY_HOST }}/${{ env.GITHUB_REPOSITORY }}:latest cache-to: type=inline \ No newline at end of file From b3dc01bbb5fb6918d0765bfc501460bc382129d9 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 29 Dec 2024 13:14:32 +0100 Subject: [PATCH 135/216] Build nginx image on all branches --- .github/workflows/build.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1fed3f5..e7c0c5d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,8 +1,6 @@ name: Build Nginx-based docker image on: push: - branches: - - main concurrency: group: ${{ github.ref }} cancel-in-progress: true From 5dabecc9eda4dcaa8b3650f18307c8f9f983db9c Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 29 Dec 2024 13:16:46 +0100 Subject: [PATCH 136/216] Update job name to be consistent with other jobs --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e7c0c5d..1e73a81 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -43,7 +43,7 @@ jobs: cache-from: type=registry,ref=${{ secrets.PRIVATE_REGISTRY_HOST }}/${{ env.GITHUB_REPOSITORY }}:builder cache-to: type=inline - - name: Build and push + - name: Build and push (final) uses: docker/build-push-action@v6 with: context: . From 23901834bcd98506910c7349ed919d1dcfcdbc56 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 1 Jan 2025 03:04:48 +0000 Subject: [PATCH 137/216] Update dependency @types/node to v22.10.3 --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index a3f6a94..f695d2c 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@playwright/test": "^1.46.0", "@types/bcrypt": "^5.0.2", - "@types/node": "22.10.2", + "@types/node": "22.10.3", "@types/react": "18.3.18", "@types/react-dom": "18.3.5" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a9b7945..f9092a9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,8 +67,8 @@ importers: specifier: ^5.0.2 version: 5.0.2 '@types/node': - specifier: 22.10.2 - version: 22.10.2 + specifier: 22.10.3 + version: 22.10.3 '@types/react': specifier: 18.3.18 version: 18.3.18 @@ -331,8 +331,8 @@ packages: '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/node@22.10.2': - resolution: {integrity: sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==} + '@types/node@22.10.3': + resolution: {integrity: sha512-DifAyw4BkrufCILvD3ucnuN8eydUfc/C1GlyrnI+LK6543w5/L3VeVgf05o3B4fqSXP1dKYLOZsKfutpxPzZrw==} '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -1363,11 +1363,11 @@ snapshots: '@types/bcrypt@5.0.2': dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.3 '@types/cookie@0.6.0': {} - '@types/node@22.10.2': + '@types/node@22.10.3': dependencies: undici-types: 6.20.0 From ff406c35ec6cd4ca8e66a379bd9525b891441f24 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 3 Jan 2025 03:05:07 +0000 Subject: [PATCH 138/216] Update dependency @types/node to v22.10.4 --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index f695d2c..c66bc08 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@playwright/test": "^1.46.0", "@types/bcrypt": "^5.0.2", - "@types/node": "22.10.3", + "@types/node": "22.10.4", "@types/react": "18.3.18", "@types/react-dom": "18.3.5" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f9092a9..85e3d03 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,8 +67,8 @@ importers: specifier: ^5.0.2 version: 5.0.2 '@types/node': - specifier: 22.10.3 - version: 22.10.3 + specifier: 22.10.4 + version: 22.10.4 '@types/react': specifier: 18.3.18 version: 18.3.18 @@ -331,8 +331,8 @@ packages: '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/node@22.10.3': - resolution: {integrity: sha512-DifAyw4BkrufCILvD3ucnuN8eydUfc/C1GlyrnI+LK6543w5/L3VeVgf05o3B4fqSXP1dKYLOZsKfutpxPzZrw==} + '@types/node@22.10.4': + resolution: {integrity: sha512-99l6wv4HEzBQhvaU/UGoeBoCK61SCROQaCCGyQSgX2tEQ3rKkNZ2S7CEWnS/4s1LV+8ODdK21UeyR1fHP2mXug==} '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -1363,11 +1363,11 @@ snapshots: '@types/bcrypt@5.0.2': dependencies: - '@types/node': 22.10.3 + '@types/node': 22.10.4 '@types/cookie@0.6.0': {} - '@types/node@22.10.3': + '@types/node@22.10.4': dependencies: undici-types: 6.20.0 From 82ebaea27595290a32e308d1344be9c2d587b667 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 3 Jan 2025 03:05:22 +0000 Subject: [PATCH 139/216] Update dependency primereact to v10.9.1 --- pnpm-lock.yaml | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 85e3d03..95ad2fc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,7 +37,7 @@ importers: version: 7.0.0 primereact: specifier: ^10.8.2 - version: 10.8.5(@types/react@18.3.18)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) + version: 10.9.1(@types/react@18.3.18)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) react: specifier: 19.0.0-rc-f38c22b244-20240704 version: 19.0.0-rc-f38c22b244-20240704 @@ -342,8 +342,10 @@ packages: peerDependencies: '@types/react': ^18.0.0 - '@types/react-transition-group@4.4.11': - resolution: {integrity: sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==} + '@types/react-transition-group@4.4.12': + resolution: {integrity: sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==} + peerDependencies: + '@types/react': '*' '@types/react@18.3.18': resolution: {integrity: sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==} @@ -909,8 +911,8 @@ packages: primeicons@7.0.0: resolution: {integrity: sha512-jK3Et9UzwzTsd6tzl2RmwrVY/b8raJ3QZLzoDACj+oTJ0oX7L9Hy+XnVwgo4QVKlKpnP/Ur13SXV/pVh4LzaDw==} - primereact@10.8.5: - resolution: {integrity: sha512-B1LeJdNGGAB8P1VRJE0TDYz6rZSDwxE7Ft8PLFjRYLO44+mIJNDsLYSB56LRJOoqUNRhQrRIe/5ctS5eyQAzwQ==} + primereact@10.9.1: + resolution: {integrity: sha512-mq5Pr6/zySO913RlL5oUWD+n1ygTjJjhhxBoRWhLNKx7Na8pHpswh/QCesShFXlfYyCjDOVXFVT6J2sSDceF1g==} engines: {node: '>=14.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -1377,7 +1379,7 @@ snapshots: dependencies: '@types/react': 18.3.18 - '@types/react-transition-group@4.4.11': + '@types/react-transition-group@4.4.12(@types/react@18.3.18)': dependencies: '@types/react': 18.3.18 @@ -1886,9 +1888,9 @@ snapshots: primeicons@7.0.0: {} - primereact@10.8.5(@types/react@18.3.18)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): + primereact@10.9.1(@types/react@18.3.18)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): dependencies: - '@types/react-transition-group': 4.4.11 + '@types/react-transition-group': 4.4.12(@types/react@18.3.18) react: 19.0.0-rc-f38c22b244-20240704 react-dom: 19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704) react-transition-group: 4.4.5(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) From 2cdf8aca58b2e0537383e4f2633f9d2932ae889c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 4 Jan 2025 03:05:49 +0000 Subject: [PATCH 140/216] Update dependency @types/node to v22.10.5 --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index c66bc08..2e274be 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@playwright/test": "^1.46.0", "@types/bcrypt": "^5.0.2", - "@types/node": "22.10.4", + "@types/node": "22.10.5", "@types/react": "18.3.18", "@types/react-dom": "18.3.5" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 95ad2fc..338b2b7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,8 +67,8 @@ importers: specifier: ^5.0.2 version: 5.0.2 '@types/node': - specifier: 22.10.4 - version: 22.10.4 + specifier: 22.10.5 + version: 22.10.5 '@types/react': specifier: 18.3.18 version: 18.3.18 @@ -331,8 +331,8 @@ packages: '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/node@22.10.4': - resolution: {integrity: sha512-99l6wv4HEzBQhvaU/UGoeBoCK61SCROQaCCGyQSgX2tEQ3rKkNZ2S7CEWnS/4s1LV+8ODdK21UeyR1fHP2mXug==} + '@types/node@22.10.5': + resolution: {integrity: sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==} '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -1365,11 +1365,11 @@ snapshots: '@types/bcrypt@5.0.2': dependencies: - '@types/node': 22.10.4 + '@types/node': 22.10.5 '@types/cookie@0.6.0': {} - '@types/node@22.10.4': + '@types/node@22.10.5': dependencies: undici-types: 6.20.0 From 5951440efb33098b8fd0ebb1d40e9c89cc422538 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 6 Jan 2025 03:05:06 +0000 Subject: [PATCH 141/216] Update dependency uuid to v11.0.4 --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 2e274be..74db554 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "tailwindcss": "3.4.17", "typescript": "5.7.2", "use-debounce": "^10.0.1", - "uuid": "11.0.3", + "uuid": "11.0.4", "zod": "^3.23.8" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 338b2b7..874ad22 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -54,8 +54,8 @@ importers: specifier: ^10.0.1 version: 10.0.4(react@19.0.0-rc-f38c22b244-20240704) uuid: - specifier: 11.0.3 - version: 11.0.3 + specifier: 11.0.4 + version: 11.0.4 zod: specifier: ^3.23.8 version: 3.24.1 @@ -1122,8 +1122,8 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - uuid@11.0.3: - resolution: {integrity: sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg==} + uuid@11.0.4: + resolution: {integrity: sha512-IzL6VtTTYcAhA/oghbFJ1Dkmqev+FpQWnCBaKq/gUluLxliWvO8DPFWfIviRmYbtaavtSQe4WBL++rFjdcGWEg==} hasBin: true webidl-conversions@3.0.1: @@ -2125,7 +2125,7 @@ snapshots: util-deprecate@1.0.2: {} - uuid@11.0.3: {} + uuid@11.0.4: {} webidl-conversions@3.0.1: {} From 7024a9ca1126a917f9c038bbb1e6b88e450316eb Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 6 Jan 2025 03:05:32 +0000 Subject: [PATCH 142/216] Update pnpm to v9.15.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 74db554..5d3db6d 100644 --- a/package.json +++ b/package.json @@ -34,5 +34,5 @@ "engines": { "node": ">=23.0.0" }, - "packageManager": "pnpm@9.15.2+sha512.93e57b0126f0df74ce6bff29680394c0ba54ec47246b9cf321f0121d8d9bb03f750a705f24edc3c1180853afd7c2c3b94196d0a3d53d3e069d9e2793ef11f321" + "packageManager": "pnpm@9.15.3+sha512.1f79bc245a66eb0b07c5d4d83131240774642caaa86ef7d0434ab47c0d16f66b04e21e0c086eb61e62c77efc4d7f7ec071afad3796af64892fae66509173893a" } From 42d2b7091bcb2a1c7b6315e13f26ece6731dd228 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 8 Jan 2025 03:04:40 +0000 Subject: [PATCH 143/216] Update dependency next to v15.1.4 --- package.json | 2 +- pnpm-lock.yaml | 88 +++++++++++++++++++++++++------------------------- 2 files changed, 45 insertions(+), 45 deletions(-) diff --git a/package.json b/package.json index 5d3db6d..fa41224 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "autoprefixer": "10.4.20", "bcrypt": "^5.1.1", "clsx": "^2.1.1", - "next": "15.1.3", + "next": "15.1.4", "next-auth": "5.0.0-beta.25", "postcss": "8.4.49", "primeicons": "^7.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 874ad22..62a458f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,11 +24,11 @@ importers: specifier: ^2.1.1 version: 2.1.1 next: - specifier: 15.1.3 - 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) + specifier: 15.1.4 + version: 15.1.4(@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: specifier: 5.0.0-beta.25 - 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) + version: 5.0.0-beta.25(next@15.1.4(@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: specifier: 8.4.49 version: 8.4.49 @@ -239,53 +239,53 @@ packages: resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true - '@next/env@15.1.3': - resolution: {integrity: sha512-Q1tXwQCGWyA3ehMph3VO+E6xFPHDKdHFYosadt0F78EObYxPio0S09H9UGYznDe6Wc8eLKLG89GqcFJJDiK5xw==} + '@next/env@15.1.4': + resolution: {integrity: sha512-2fZ5YZjedi5AGaeoaC0B20zGntEHRhi2SdWcu61i48BllODcAmmtj8n7YarSPt4DaTsJaBFdxQAVEVzgmx2Zpw==} - '@next/swc-darwin-arm64@15.1.3': - resolution: {integrity: sha512-aZtmIh8jU89DZahXQt1La0f2EMPt/i7W+rG1sLtYJERsP7GRnNFghsciFpQcKHcGh4dUiyTB5C1X3Dde/Gw8gg==} + '@next/swc-darwin-arm64@15.1.4': + resolution: {integrity: sha512-wBEMBs+np+R5ozN1F8Y8d/Dycns2COhRnkxRc+rvnbXke5uZBHkUGFgWxfTXn5rx7OLijuUhyfB+gC/ap58dDw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.1.3': - resolution: {integrity: sha512-aw8901rjkVBK5mbq5oV32IqkJg+CQa6aULNlN8zyCWSsePzEG3kpDkAFkkTOh3eJ0p95KbkLyWBzslQKamXsLA==} + '@next/swc-darwin-x64@15.1.4': + resolution: {integrity: sha512-7sgf5rM7Z81V9w48F02Zz6DgEJulavC0jadab4ZsJ+K2sxMNK0/BtF8J8J3CxnsJN3DGcIdC260wEKssKTukUw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.1.3': - resolution: {integrity: sha512-YbdaYjyHa4fPK4GR4k2XgXV0p8vbU1SZh7vv6El4bl9N+ZSiMfbmqCuCuNU1Z4ebJMumafaz6UCC2zaJCsdzjw==} + '@next/swc-linux-arm64-gnu@15.1.4': + resolution: {integrity: sha512-JaZlIMNaJenfd55kjaLWMfok+vWBlcRxqnRoZrhFQrhM1uAehP3R0+Aoe+bZOogqlZvAz53nY/k3ZyuKDtT2zQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.1.3': - resolution: {integrity: sha512-qgH/aRj2xcr4BouwKG3XdqNu33SDadqbkqB6KaZZkozar857upxKakbRllpqZgWl/NDeSCBYPmUAZPBHZpbA0w==} + '@next/swc-linux-arm64-musl@15.1.4': + resolution: {integrity: sha512-7EBBjNoyTO2ipMDgCiORpwwOf5tIueFntKjcN3NK+GAQD7OzFJe84p7a2eQUeWdpzZvhVXuAtIen8QcH71ZCOQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.1.3': - resolution: {integrity: sha512-uzafnTFwZCPN499fNVnS2xFME8WLC9y7PLRs/yqz5lz1X/ySoxfaK2Hbz74zYUdEg+iDZPd8KlsWaw9HKkLEVw==} + '@next/swc-linux-x64-gnu@15.1.4': + resolution: {integrity: sha512-9TGEgOycqZFuADyFqwmK/9g6S0FYZ3tphR4ebcmCwhL8Y12FW8pIBKJvSwV+UBjMkokstGNH+9F8F031JZKpHw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.1.3': - resolution: {integrity: sha512-el6GUFi4SiDYnMTTlJJFMU+GHvw0UIFnffP1qhurrN1qJV3BqaSRUjkDUgVV44T6zpw1Lc6u+yn0puDKHs+Sbw==} + '@next/swc-linux-x64-musl@15.1.4': + resolution: {integrity: sha512-0578bLRVDJOh+LdIoKvgNDz77+Bd85c5JrFgnlbI1SM3WmEQvsjxTA8ATu9Z9FCiIS/AliVAW2DV/BDwpXbtiQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.1.3': - resolution: {integrity: sha512-6RxKjvnvVMM89giYGI1qye9ODsBQpHSHVo8vqA8xGhmRPZHDQUE4jcDbhBwK0GnFMqBnu+XMg3nYukNkmLOLWw==} + '@next/swc-win32-arm64-msvc@15.1.4': + resolution: {integrity: sha512-JgFCiV4libQavwII+kncMCl30st0JVxpPOtzWcAI2jtum4HjYaclobKhj+JsRu5tFqMtA5CJIa0MvYyuu9xjjQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.1.3': - resolution: {integrity: sha512-VId/f5blObG7IodwC5Grf+aYP0O8Saz1/aeU3YcWqNdIUAmFQY3VEPKPaIzfv32F/clvanOb2K2BR5DtDs6XyQ==} + '@next/swc-win32-x64-msvc@15.1.4': + resolution: {integrity: sha512-xxsJy9wzq7FR5SqPCUqdgSXiNXrMuidgckBa8nH9HtjjxsilgcN6VgXF6tZ3uEWuVEadotQJI8/9EQ6guTC4Yw==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -742,8 +742,8 @@ packages: nodemailer: optional: true - next@15.1.3: - resolution: {integrity: sha512-5igmb8N8AEhWDYzogcJvtcRDU6n4cMGtBklxKD4biYv4LXN8+awc/bbQ2IM2NQHdVPgJ6XumYXfo3hBtErg1DA==} + next@15.1.4: + resolution: {integrity: sha512-mTaq9dwaSuwwOrcu3ebjDYObekkxRnXpuVL21zotM8qE2W0HBOdVIdg2Li9QjMEZrj73LN96LcWcz62V19FjAg==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -1305,30 +1305,30 @@ snapshots: - encoding - supports-color - '@next/env@15.1.3': {} + '@next/env@15.1.4': {} - '@next/swc-darwin-arm64@15.1.3': + '@next/swc-darwin-arm64@15.1.4': optional: true - '@next/swc-darwin-x64@15.1.3': + '@next/swc-darwin-x64@15.1.4': optional: true - '@next/swc-linux-arm64-gnu@15.1.3': + '@next/swc-linux-arm64-gnu@15.1.4': optional: true - '@next/swc-linux-arm64-musl@15.1.3': + '@next/swc-linux-arm64-musl@15.1.4': optional: true - '@next/swc-linux-x64-gnu@15.1.3': + '@next/swc-linux-x64-gnu@15.1.4': optional: true - '@next/swc-linux-x64-musl@15.1.3': + '@next/swc-linux-x64-musl@15.1.4': optional: true - '@next/swc-win32-arm64-msvc@15.1.3': + '@next/swc-win32-arm64-msvc@15.1.4': optional: true - '@next/swc-win32-x64-msvc@15.1.3': + '@next/swc-win32-x64-msvc@15.1.4': optional: true '@nodelib/fs.scandir@2.1.5': @@ -1740,15 +1740,15 @@ snapshots: nanoid@3.3.7: {} - 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): + next-auth@5.0.0-beta.25(next@15.1.4(@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: '@auth/core': 0.37.2 - 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) + next: 15.1.4(@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@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@15.1.4(@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: - '@next/env': 15.1.3 + '@next/env': 15.1.4 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 @@ -1758,14 +1758,14 @@ snapshots: 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) optionalDependencies: - '@next/swc-darwin-arm64': 15.1.3 - '@next/swc-darwin-x64': 15.1.3 - '@next/swc-linux-arm64-gnu': 15.1.3 - '@next/swc-linux-arm64-musl': 15.1.3 - '@next/swc-linux-x64-gnu': 15.1.3 - '@next/swc-linux-x64-musl': 15.1.3 - '@next/swc-win32-arm64-msvc': 15.1.3 - '@next/swc-win32-x64-msvc': 15.1.3 + '@next/swc-darwin-arm64': 15.1.4 + '@next/swc-darwin-x64': 15.1.4 + '@next/swc-linux-arm64-gnu': 15.1.4 + '@next/swc-linux-arm64-musl': 15.1.4 + '@next/swc-linux-x64-gnu': 15.1.4 + '@next/swc-linux-x64-musl': 15.1.4 + '@next/swc-win32-arm64-msvc': 15.1.4 + '@next/swc-win32-x64-msvc': 15.1.4 '@playwright/test': 1.49.1 sharp: 0.33.5 transitivePeerDependencies: From 862d1f85afc0fc704383e61cfb05a18a75268d65 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 9 Jan 2025 03:05:58 +0000 Subject: [PATCH 144/216] Update dependency typescript to v5.7.3 --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index fa41224..804c08c 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "react": "19.0.0-rc-f38c22b244-20240704", "react-dom": "19.0.0-rc-f38c22b244-20240704", "tailwindcss": "3.4.17", - "typescript": "5.7.2", + "typescript": "5.7.3", "use-debounce": "^10.0.1", "uuid": "11.0.4", "zod": "^3.23.8" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 62a458f..bc2fbf9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -48,8 +48,8 @@ importers: specifier: 3.4.17 version: 3.4.17 typescript: - specifier: 5.7.2 - version: 5.7.2 + specifier: 5.7.3 + version: 5.7.3 use-debounce: specifier: ^10.0.1 version: 10.0.4(react@19.0.0-rc-f38c22b244-20240704) @@ -1099,8 +1099,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - typescript@5.7.2: - resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} + typescript@5.7.3: + resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} engines: {node: '>=14.17'} hasBin: true @@ -2109,7 +2109,7 @@ snapshots: tslib@2.8.1: {} - typescript@5.7.2: {} + typescript@5.7.3: {} undici-types@6.20.0: {} From 190118a0d1379cd4b6f371808bf63197bb628a91 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 9 Jan 2025 03:06:02 +0000 Subject: [PATCH 145/216] Update dependency node to v23.6.0 --- .nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nvmrc b/.nvmrc index dd6db9f..708ec23 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -23.5.0 \ No newline at end of file +23.6.0 \ No newline at end of file From be4f9caec7308154e3829cd44abb8d947c9ed3da Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 10 Jan 2025 03:05:58 +0000 Subject: [PATCH 146/216] Update dependency uuid to v11.0.5 --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 804c08c..3e61bb0 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "tailwindcss": "3.4.17", "typescript": "5.7.3", "use-debounce": "^10.0.1", - "uuid": "11.0.4", + "uuid": "11.0.5", "zod": "^3.23.8" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bc2fbf9..4f683ae 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -54,8 +54,8 @@ importers: specifier: ^10.0.1 version: 10.0.4(react@19.0.0-rc-f38c22b244-20240704) uuid: - specifier: 11.0.4 - version: 11.0.4 + specifier: 11.0.5 + version: 11.0.5 zod: specifier: ^3.23.8 version: 3.24.1 @@ -1122,8 +1122,8 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - uuid@11.0.4: - resolution: {integrity: sha512-IzL6VtTTYcAhA/oghbFJ1Dkmqev+FpQWnCBaKq/gUluLxliWvO8DPFWfIviRmYbtaavtSQe4WBL++rFjdcGWEg==} + uuid@11.0.5: + resolution: {integrity: sha512-508e6IcKLrhxKdBbcA2b4KQZlLVp2+J5UwQ6F7Drckkc5N9ZJwFa4TgWtsww9UG8fGHbm6gbV19TdM5pQ4GaIA==} hasBin: true webidl-conversions@3.0.1: @@ -2125,7 +2125,7 @@ snapshots: util-deprecate@1.0.2: {} - uuid@11.0.4: {} + uuid@11.0.5: {} webidl-conversions@3.0.1: {} From 44ba54db95879c1a049b21ef2374a1be61343bfa Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 11 Jan 2025 03:11:24 +0000 Subject: [PATCH 147/216] Update dependency @tailwindcss/forms to v0.5.10 --- pnpm-lock.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4f683ae..48bb621 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,7 +13,7 @@ importers: version: 2.2.0(react@19.0.0-rc-f38c22b244-20240704) '@tailwindcss/forms': specifier: ^0.5.7 - version: 0.5.9(tailwindcss@3.4.17) + version: 0.5.10(tailwindcss@3.4.17) autoprefixer: specifier: 10.4.20 version: 10.4.20(postcss@8.4.49) @@ -320,10 +320,10 @@ packages: '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - '@tailwindcss/forms@0.5.9': - resolution: {integrity: sha512-tM4XVr2+UVTxXJzey9Twx48c1gcxFStqn1pQz0tRsX8o3DvxhN5oY5pvyAbUx7VTaZxpej4Zzvc6h+1RJBzpIg==} + '@tailwindcss/forms@0.5.10': + resolution: {integrity: sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw==} peerDependencies: - tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20' + tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1' '@types/bcrypt@5.0.2': resolution: {integrity: sha512-6atioO8Y75fNcbmj0G7UjI9lXN2pQ/IGJ2FWT4a/btd0Lk9lQalHLKhkgKVZ3r+spnmWUKfbMi1GEe9wyHQfNQ==} @@ -1358,7 +1358,7 @@ snapshots: dependencies: tslib: 2.8.1 - '@tailwindcss/forms@0.5.9(tailwindcss@3.4.17)': + '@tailwindcss/forms@0.5.10(tailwindcss@3.4.17)': dependencies: mini-svg-data-uri: 1.4.4 tailwindcss: 3.4.17 From c233cb60de726c099ae737a58a312a839e564550 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 12 Jan 2025 20:54:41 +0100 Subject: [PATCH 148/216] Define a button to load the default affinities of a group --- app/ui/components/affinities-form-dialog.tsx | 15 ++++++++++++++- app/ui/components/button.tsx | 5 +++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/app/ui/components/affinities-form-dialog.tsx b/app/ui/components/affinities-form-dialog.tsx index 7428233..ff5a21d 100644 --- a/app/ui/components/affinities-form-dialog.tsx +++ b/app/ui/components/affinities-form-dialog.tsx @@ -48,6 +48,16 @@ export default function AffinitiesFormDialog({ groups, group, visible, onHide }: }); } + function resetAffinities() { + fetch(`/api/${getSlug()}/groups/${group?.id}/affinities/default`, { + method: 'GET', + headers: { + 'Accept': 'application/json', + } + }).then((response) => response.json()) + .then(setAffinities); + } + return ( {!isLoadingAffinities &&
@@ -61,7 +71,10 @@ export default function AffinitiesFormDialog({ groups, group, visible, onHide }:
) } - +
+ + +
}
diff --git a/app/ui/components/button.tsx b/app/ui/components/button.tsx index 6b65ba0..ccc54c4 100644 --- a/app/ui/components/button.tsx +++ b/app/ui/components/button.tsx @@ -2,13 +2,14 @@ import clsx from "clsx"; -type ButtonColor = 'primary' | 'blue' | 'green' | 'red' | 'yellow'; +type ButtonColor = 'primary' | 'blue' | 'green' | 'red' | 'yellow' | 'gray'; export function classNames(type: ButtonColor) { return (clsx("text-white py-1 px-2 mx-1 rounded disabled:opacity-50 disabled:cursor-not-allowed", { 'bg-blue-400 hover:bg-blue-600': type === 'primary' || type === 'blue', 'bg-green-500 hover:bg-green-600': type === 'green', 'bg-red-500 hover:bg-red-600': type === 'red', - 'bg-yellow-500 hover:bg-yellow-700': type === 'yellow' + 'bg-yellow-500 hover:bg-yellow-700': type === 'yellow', + 'bg-gray-500 hover:bg-gray-700': type === 'gray' })) } \ No newline at end of file From f0e6ff9425ec6ee7a2e3f1c44886be813024ed83 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 12 Jan 2025 23:14:50 +0100 Subject: [PATCH 149/216] Prevent duplicate groups in the tree list --- app/ui/groups/table.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/app/ui/groups/table.tsx b/app/ui/groups/table.tsx index 253c271..93e6d4b 100644 --- a/app/ui/groups/table.tsx +++ b/app/ui/groups/table.tsx @@ -35,6 +35,7 @@ export default function GroupsTable({ groups, onUpdate, onEdit, onEditAffinities return acc; }, new Map()); + groups.forEach(group => group.children = []); groups.forEach(group => { if (group.parentId) { const parent = index.get(group.parentId); From 5d7c71b9ab2ee1fe9ffdb3992ef2a3ea5d60e0d9 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Mon, 13 Jan 2025 21:29:24 +0100 Subject: [PATCH 150/216] Define a button to reset the affinities of all groups --- app/[slug]/dashboard/guests/page.tsx | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/app/[slug]/dashboard/guests/page.tsx b/app/[slug]/dashboard/guests/page.tsx index 0d68edc..5466928 100644 --- a/app/[slug]/dashboard/guests/page.tsx +++ b/app/[slug]/dashboard/guests/page.tsx @@ -5,6 +5,7 @@ import { AbstractApi, } from '@/app/api/abstract-api'; import { Group, GroupSerializer } from '@/app/lib/group'; import { Guest, GuestSerializer } from '@/app/lib/guest'; +import { getCsrfToken, getSlug } from '@/app/lib/utils'; import AffinitiesFormDialog from '@/app/ui/components/affinities-form-dialog'; import { classNames } from '@/app/ui/components/button'; import GroupFormDialog from '@/app/ui/components/group-form-dialog'; @@ -31,6 +32,16 @@ export default function Page() { }); } + function resetAffinities() { + fetch(`/api/${getSlug()}/groups/affinities/reset`, { + method: 'POST', + headers: { + 'Accept': 'application/json', + 'X-CSRF-TOKEN': getCsrfToken(), + } + }) + } + const [groupsLoaded, setGroupsLoaded] = useState(false); const [groups, setGroups] = useState>([]); const [groupBeingEdited, setGroupBeingEdited] = useState(undefined); @@ -70,7 +81,11 @@ export default function Page() {
- +
+ + +
+ Date: Mon, 13 Jan 2025 21:36:52 +0100 Subject: [PATCH 151/216] Update copyright assignment to cover 2025 and include all contributors --- .github/workflows/copyright_notice.yml | 2 +- app/[slug]/dashboard/expenses/page.tsx | 2 +- app/[slug]/dashboard/guests/page.tsx | 2 +- app/[slug]/dashboard/layout.tsx | 2 +- app/[slug]/dashboard/page.tsx | 2 +- app/[slug]/dashboard/tables/page.tsx | 2 +- app/[slug]/page.tsx | 2 +- app/api/abstract-api.tsx | 2 +- app/api/authentication.tsx | 2 +- app/api/captcha.tsx | 2 +- app/api/health/route.ts | 2 +- app/api/tableSimulations.tsx | 2 +- app/layout.tsx | 2 +- app/lib/affinities.tsx | 2 +- app/lib/definitions.ts | 2 +- app/lib/expense.tsx | 2 +- app/lib/group.tsx | 2 +- app/lib/guest.tsx | 2 +- app/lib/tableSimulation.tsx | 2 +- app/lib/utils.ts | 2 +- app/types.tsx | 2 +- app/ui/arrangements/arrangement.tsx | 2 +- app/ui/arrangements/arrangements-table.tsx | 2 +- app/ui/button.tsx | 2 +- app/ui/components/affinities-form-dialog.tsx | 2 +- app/ui/components/button.tsx | 2 +- app/ui/components/dashboard-cards.tsx | 2 +- app/ui/components/expense-form-dialog.tsx | 2 +- app/ui/components/form/affinitySlider.tsx | 2 +- app/ui/components/form/inlineTextField.tsx | 2 +- app/ui/components/group-form-dialog.tsx | 2 +- app/ui/components/guest-form-dialog.tsx | 2 +- app/ui/components/login-form.tsx | 2 +- app/ui/components/registration-form.tsx | 2 +- app/ui/components/table-of-contents.tsx | 2 +- app/ui/components/table.tsx | 2 +- app/ui/dashboard/global-summary.tsx | 2 +- app/ui/dashboard/loading.tsx | 2 +- app/ui/dashboard/nav-links.tsx | 2 +- app/ui/dashboard/sidenav.tsx | 2 +- app/ui/expenses/table.tsx | 2 +- app/ui/fonts.ts | 2 +- app/ui/groups/table.tsx | 2 +- app/ui/guests/skeleton-row.tsx | 2 +- app/ui/guests/table.tsx | 2 +- app/ui/search.tsx | 2 +- app/ui/skeleton.tsx | 2 +- 47 files changed, 47 insertions(+), 47 deletions(-) diff --git a/.github/workflows/copyright_notice.yml b/.github/workflows/copyright_notice.yml index 321c44e..0536d2d 100644 --- a/.github/workflows/copyright_notice.yml +++ b/.github/workflows/copyright_notice.yml @@ -16,7 +16,7 @@ jobs: ref: ${{ github.head_ref }} - uses: VinnyBabuManjaly/copyright-action@v1.0.0 with: - CopyrightString: '/* Copyright (C) 2024 Manuel Bustillo*/\n\n' + CopyrightString: '/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/\n\n' FileType: '.tsx, .jsx, .ts' Path: 'app/, config/, db/' IgnorePath: 'testfolder1/a/, testfolder3' diff --git a/app/[slug]/dashboard/expenses/page.tsx b/app/[slug]/dashboard/expenses/page.tsx index dfa7bbf..d289255 100644 --- a/app/[slug]/dashboard/expenses/page.tsx +++ b/app/[slug]/dashboard/expenses/page.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ 'use client' diff --git a/app/[slug]/dashboard/guests/page.tsx b/app/[slug]/dashboard/guests/page.tsx index 0d68edc..43ba98d 100644 --- a/app/[slug]/dashboard/guests/page.tsx +++ b/app/[slug]/dashboard/guests/page.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ 'use client'; diff --git a/app/[slug]/dashboard/layout.tsx b/app/[slug]/dashboard/layout.tsx index 69055f9..d765b83 100644 --- a/app/[slug]/dashboard/layout.tsx +++ b/app/[slug]/dashboard/layout.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ import SideNav from '@/app/ui/dashboard/sidenav'; diff --git a/app/[slug]/dashboard/page.tsx b/app/[slug]/dashboard/page.tsx index 00408ad..83f446e 100644 --- a/app/[slug]/dashboard/page.tsx +++ b/app/[slug]/dashboard/page.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ 'use client' diff --git a/app/[slug]/dashboard/tables/page.tsx b/app/[slug]/dashboard/tables/page.tsx index 7f55a77..9890735 100644 --- a/app/[slug]/dashboard/tables/page.tsx +++ b/app/[slug]/dashboard/tables/page.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ 'use client'; diff --git a/app/[slug]/page.tsx b/app/[slug]/page.tsx index ea3b9a4..f189a6a 100644 --- a/app/[slug]/page.tsx +++ b/app/[slug]/page.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ 'use client'; diff --git a/app/api/abstract-api.tsx b/app/api/abstract-api.tsx index f67bea3..7201a08 100644 --- a/app/api/abstract-api.tsx +++ b/app/api/abstract-api.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ import { Entity } from '@/app/lib/definitions'; import { getCsrfToken, getSlug } from '@/app/lib/utils'; diff --git a/app/api/authentication.tsx b/app/api/authentication.tsx index 69a52b4..e361260 100644 --- a/app/api/authentication.tsx +++ b/app/api/authentication.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ import { asArray, getCsrfToken, getSlug } from '@/app/lib/utils'; import { Captcha, StructuredErrors, User } from '@/app/lib/definitions'; diff --git a/app/api/captcha.tsx b/app/api/captcha.tsx index e49ac00..ff6ecb7 100644 --- a/app/api/captcha.tsx +++ b/app/api/captcha.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ import { data } from "autoprefixer"; import { getCsrfToken } from "../lib/utils"; diff --git a/app/api/health/route.ts b/app/api/health/route.ts index 4dc1a10..f43cbdb 100644 --- a/app/api/health/route.ts +++ b/app/api/health/route.ts @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ import { NextResponse } from "next/server"; diff --git a/app/api/tableSimulations.tsx b/app/api/tableSimulations.tsx index 5f6d2d9..6bf36d7 100644 --- a/app/api/tableSimulations.tsx +++ b/app/api/tableSimulations.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ import { TableArrangement } from '@/app/lib/definitions'; import { getSlug } from '../lib/utils'; diff --git a/app/layout.tsx b/app/layout.tsx index e2cd6af..63ee3fd 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ import '@/app/ui/global.css' diff --git a/app/lib/affinities.tsx b/app/lib/affinities.tsx index 6c1023e..5576f1b 100644 --- a/app/lib/affinities.tsx +++ b/app/lib/affinities.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ export class Affinities { [key:string]: number; diff --git a/app/lib/definitions.ts b/app/lib/definitions.ts index f91127a..b03ef4b 100644 --- a/app/lib/definitions.ts +++ b/app/lib/definitions.ts @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ import { AttendanceSummary } from "./group"; import { Guest } from "./guest"; diff --git a/app/lib/expense.tsx b/app/lib/expense.tsx index 785c97a..b024e1b 100644 --- a/app/lib/expense.tsx +++ b/app/lib/expense.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ import { Serializable } from "../api/abstract-api"; import { Entity } from "./definitions"; diff --git a/app/lib/group.tsx b/app/lib/group.tsx index 387e557..aae5d18 100644 --- a/app/lib/group.tsx +++ b/app/lib/group.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ import { Entity } from "./definitions"; diff --git a/app/lib/guest.tsx b/app/lib/guest.tsx index b43edab..80fcfb7 100644 --- a/app/lib/guest.tsx +++ b/app/lib/guest.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ import { Serializable } from "../api/abstract-api"; import { Entity } from "./definitions"; diff --git a/app/lib/tableSimulation.tsx b/app/lib/tableSimulation.tsx index cfe4fbf..9e276a4 100644 --- a/app/lib/tableSimulation.tsx +++ b/app/lib/tableSimulation.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ import { Serializable } from "../api/abstract-api"; import { Entity } from "./definitions"; diff --git a/app/lib/utils.ts b/app/lib/utils.ts index bbd6700..c590751 100644 --- a/app/lib/utils.ts +++ b/app/lib/utils.ts @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ export const getCsrfToken = () => { return document.cookie diff --git a/app/types.tsx b/app/types.tsx index 283e371..5c95b52 100644 --- a/app/types.tsx +++ b/app/types.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ import * as HeroIcon from '@heroicons/react/24/outline' import { ComponentProps } from 'react' diff --git a/app/ui/arrangements/arrangement.tsx b/app/ui/arrangements/arrangement.tsx index 8f82d19..d8bf0b1 100644 --- a/app/ui/arrangements/arrangement.tsx +++ b/app/ui/arrangements/arrangement.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ 'use client'; diff --git a/app/ui/arrangements/arrangements-table.tsx b/app/ui/arrangements/arrangements-table.tsx index 57dd67d..9a650e7 100644 --- a/app/ui/arrangements/arrangements-table.tsx +++ b/app/ui/arrangements/arrangements-table.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ 'use client' diff --git a/app/ui/button.tsx b/app/ui/button.tsx index d30b980..1f1034f 100644 --- a/app/ui/button.tsx +++ b/app/ui/button.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ import clsx from 'clsx'; diff --git a/app/ui/components/affinities-form-dialog.tsx b/app/ui/components/affinities-form-dialog.tsx index ff5a21d..dc8bc72 100644 --- a/app/ui/components/affinities-form-dialog.tsx +++ b/app/ui/components/affinities-form-dialog.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ 'use client'; diff --git a/app/ui/components/button.tsx b/app/ui/components/button.tsx index ccc54c4..2ecfabb 100644 --- a/app/ui/components/button.tsx +++ b/app/ui/components/button.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ import clsx from "clsx"; diff --git a/app/ui/components/dashboard-cards.tsx b/app/ui/components/dashboard-cards.tsx index 0240938..26c7bf7 100644 --- a/app/ui/components/dashboard-cards.tsx +++ b/app/ui/components/dashboard-cards.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ import clsx from "clsx" import { Icon } from "../../types"; diff --git a/app/ui/components/expense-form-dialog.tsx b/app/ui/components/expense-form-dialog.tsx index 3c6747f..18c7299 100644 --- a/app/ui/components/expense-form-dialog.tsx +++ b/app/ui/components/expense-form-dialog.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ 'use client'; diff --git a/app/ui/components/form/affinitySlider.tsx b/app/ui/components/form/affinitySlider.tsx index 56ef3e7..99f7ce6 100644 --- a/app/ui/components/form/affinitySlider.tsx +++ b/app/ui/components/form/affinitySlider.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ import { Slider } from 'primereact/slider'; diff --git a/app/ui/components/form/inlineTextField.tsx b/app/ui/components/form/inlineTextField.tsx index fad7f57..8e07935 100644 --- a/app/ui/components/form/inlineTextField.tsx +++ b/app/ui/components/form/inlineTextField.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ import React, { useState } from 'react'; diff --git a/app/ui/components/group-form-dialog.tsx b/app/ui/components/group-form-dialog.tsx index cc96348..03d5c92 100644 --- a/app/ui/components/group-form-dialog.tsx +++ b/app/ui/components/group-form-dialog.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ 'use client'; diff --git a/app/ui/components/guest-form-dialog.tsx b/app/ui/components/guest-form-dialog.tsx index 9d8bec5..c0b20e0 100644 --- a/app/ui/components/guest-form-dialog.tsx +++ b/app/ui/components/guest-form-dialog.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ 'use client'; diff --git a/app/ui/components/login-form.tsx b/app/ui/components/login-form.tsx index 63ad65d..7b808c2 100644 --- a/app/ui/components/login-form.tsx +++ b/app/ui/components/login-form.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ 'use client'; diff --git a/app/ui/components/registration-form.tsx b/app/ui/components/registration-form.tsx index 3c7b5d7..3de63ea 100644 --- a/app/ui/components/registration-form.tsx +++ b/app/ui/components/registration-form.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ 'use client'; diff --git a/app/ui/components/table-of-contents.tsx b/app/ui/components/table-of-contents.tsx index 70c39e2..410f7b6 100644 --- a/app/ui/components/table-of-contents.tsx +++ b/app/ui/components/table-of-contents.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ export default function TableOfContents({ headers, caption, elements, rowRender }: { headers: string[], caption: string, elements: Type[], rowRender: (element: Type) => JSX.Element }) { return ( diff --git a/app/ui/components/table.tsx b/app/ui/components/table.tsx index 4272003..ec8a999 100644 --- a/app/ui/components/table.tsx +++ b/app/ui/components/table.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ import { Guest } from "@/app/lib/guest"; import { Table as TableType } from "@/app/lib/tableSimulation"; diff --git a/app/ui/dashboard/global-summary.tsx b/app/ui/dashboard/global-summary.tsx index 8aaff3c..810a95b 100644 --- a/app/ui/dashboard/global-summary.tsx +++ b/app/ui/dashboard/global-summary.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ import { GlobalSummary as Summary} from '@/app/lib/definitions'; import { MainCard, SecondaryCard } from '../components/dashboard-cards'; diff --git a/app/ui/dashboard/loading.tsx b/app/ui/dashboard/loading.tsx index 2614837..ca17e8b 100644 --- a/app/ui/dashboard/loading.tsx +++ b/app/ui/dashboard/loading.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ export default function Loading() { return
Loading...
; diff --git a/app/ui/dashboard/nav-links.tsx b/app/ui/dashboard/nav-links.tsx index 0b881dc..ef3e4ea 100644 --- a/app/ui/dashboard/nav-links.tsx +++ b/app/ui/dashboard/nav-links.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ 'use client' diff --git a/app/ui/dashboard/sidenav.tsx b/app/ui/dashboard/sidenav.tsx index 18e2868..fbba770 100644 --- a/app/ui/dashboard/sidenav.tsx +++ b/app/ui/dashboard/sidenav.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ 'use client'; diff --git a/app/ui/expenses/table.tsx b/app/ui/expenses/table.tsx index 28543d6..a90abbd 100644 --- a/app/ui/expenses/table.tsx +++ b/app/ui/expenses/table.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ 'use client' diff --git a/app/ui/fonts.ts b/app/ui/fonts.ts index e520f6f..f32d5f9 100644 --- a/app/ui/fonts.ts +++ b/app/ui/fonts.ts @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ import { Inter, Lusitana, Gloria_Hallelujah} from 'next/font/google'; diff --git a/app/ui/groups/table.tsx b/app/ui/groups/table.tsx index 93e6d4b..d22909c 100644 --- a/app/ui/groups/table.tsx +++ b/app/ui/groups/table.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ 'use client'; diff --git a/app/ui/guests/skeleton-row.tsx b/app/ui/guests/skeleton-row.tsx index 87de2cc..3a46273 100644 --- a/app/ui/guests/skeleton-row.tsx +++ b/app/ui/guests/skeleton-row.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ import Skeleton from '@/app/ui/skeleton'; diff --git a/app/ui/guests/table.tsx b/app/ui/guests/table.tsx index 4f3694b..93972d0 100644 --- a/app/ui/guests/table.tsx +++ b/app/ui/guests/table.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ 'use client'; diff --git a/app/ui/search.tsx b/app/ui/search.tsx index b50d837..6ac5d51 100644 --- a/app/ui/search.tsx +++ b/app/ui/search.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ 'use client'; diff --git a/app/ui/skeleton.tsx b/app/ui/skeleton.tsx index 1a2bdc8..4c64e31 100644 --- a/app/ui/skeleton.tsx +++ b/app/ui/skeleton.tsx @@ -1,4 +1,4 @@ -/* Copyright (C) 2024 Manuel Bustillo*/ +/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/ export default function Skeleton({ className }: { className: string }) { return
; From 46a686f57842af37f04002fb768d03997956e0a7 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 14 Jan 2025 03:05:07 +0000 Subject: [PATCH 152/216] Update dependency @types/node to v22.10.6 --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 3e61bb0..a861871 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@playwright/test": "^1.46.0", "@types/bcrypt": "^5.0.2", - "@types/node": "22.10.5", + "@types/node": "22.10.6", "@types/react": "18.3.18", "@types/react-dom": "18.3.5" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 48bb621..0b89163 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,8 +67,8 @@ importers: specifier: ^5.0.2 version: 5.0.2 '@types/node': - specifier: 22.10.5 - version: 22.10.5 + specifier: 22.10.6 + version: 22.10.6 '@types/react': specifier: 18.3.18 version: 18.3.18 @@ -331,8 +331,8 @@ packages: '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/node@22.10.5': - resolution: {integrity: sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==} + '@types/node@22.10.6': + resolution: {integrity: sha512-qNiuwC4ZDAUNcY47xgaSuS92cjf8JbSUoaKS77bmLG1rU7MlATVSiw/IlrjtIyyskXBZ8KkNfjK/P5na7rgXbQ==} '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -1365,11 +1365,11 @@ snapshots: '@types/bcrypt@5.0.2': dependencies: - '@types/node': 22.10.5 + '@types/node': 22.10.6 '@types/cookie@0.6.0': {} - '@types/node@22.10.5': + '@types/node@22.10.6': dependencies: undici-types: 6.20.0 From cdf688e8afa2306437489e2829e53305aae45eb8 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 14 Jan 2025 03:05:34 +0000 Subject: [PATCH 153/216] Update pnpm to v9.15.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a861871..81382ef 100644 --- a/package.json +++ b/package.json @@ -34,5 +34,5 @@ "engines": { "node": ">=23.0.0" }, - "packageManager": "pnpm@9.15.3+sha512.1f79bc245a66eb0b07c5d4d83131240774642caaa86ef7d0434ab47c0d16f66b04e21e0c086eb61e62c77efc4d7f7ec071afad3796af64892fae66509173893a" + "packageManager": "pnpm@9.15.4+sha512.b2dc20e2fc72b3e18848459b37359a32064663e5627a51e4c74b2c29dd8e8e0491483c3abb40789cfd578bf362fb6ba8261b05f0387d76792ed6e23ea3b1b6a0" } From 4e5202bdbaf6df06fe62ebe3dbc53b1b6ede6cdf Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 16 Jan 2025 03:07:47 +0000 Subject: [PATCH 154/216] Update dependency @types/node to v22.10.7 --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 81382ef..0db2c38 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@playwright/test": "^1.46.0", "@types/bcrypt": "^5.0.2", - "@types/node": "22.10.6", + "@types/node": "22.10.7", "@types/react": "18.3.18", "@types/react-dom": "18.3.5" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0b89163..df02e0f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,8 +67,8 @@ importers: specifier: ^5.0.2 version: 5.0.2 '@types/node': - specifier: 22.10.6 - version: 22.10.6 + specifier: 22.10.7 + version: 22.10.7 '@types/react': specifier: 18.3.18 version: 18.3.18 @@ -331,8 +331,8 @@ packages: '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/node@22.10.6': - resolution: {integrity: sha512-qNiuwC4ZDAUNcY47xgaSuS92cjf8JbSUoaKS77bmLG1rU7MlATVSiw/IlrjtIyyskXBZ8KkNfjK/P5na7rgXbQ==} + '@types/node@22.10.7': + resolution: {integrity: sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg==} '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -1365,11 +1365,11 @@ snapshots: '@types/bcrypt@5.0.2': dependencies: - '@types/node': 22.10.6 + '@types/node': 22.10.7 '@types/cookie@0.6.0': {} - '@types/node@22.10.6': + '@types/node@22.10.7': dependencies: undici-types: 6.20.0 From c691359356173b51464bd588bab0d044f2b5446c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 16 Jan 2025 03:08:04 +0000 Subject: [PATCH 155/216] Update dependency postcss to v8.5.1 --- package.json | 2 +- pnpm-lock.yaml | 51 ++++++++++++++++++++++++++++---------------------- 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/package.json b/package.json index 0db2c38..238bb1a 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "clsx": "^2.1.1", "next": "15.1.4", "next-auth": "5.0.0-beta.25", - "postcss": "8.4.49", + "postcss": "8.5.1", "primeicons": "^7.0.0", "primereact": "^10.8.2", "react": "19.0.0-rc-f38c22b244-20240704", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index df02e0f..ab3ef79 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,7 +16,7 @@ importers: version: 0.5.10(tailwindcss@3.4.17) autoprefixer: specifier: 10.4.20 - version: 10.4.20(postcss@8.4.49) + version: 10.4.20(postcss@8.5.1) bcrypt: specifier: ^5.1.1 version: 5.1.1 @@ -30,8 +30,8 @@ importers: specifier: 5.0.0-beta.25 version: 5.0.0-beta.25(next@15.1.4(@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: - specifier: 8.4.49 - version: 8.4.49 + specifier: 8.5.1 + version: 8.5.1 primeicons: specifier: ^7.0.0 version: 7.0.0 @@ -726,6 +726,11 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + next-auth@5.0.0-beta.25: resolution: {integrity: sha512-2dJJw1sHQl2qxCrRk+KTQbeH+izFbGFPuJj5eGgBZFYyiYYtvlrBeUw1E/OJJxTRjuxbSYGnCTkUIRsIIW0bog==} peerDependencies: @@ -893,8 +898,8 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.4.49: - resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} + postcss@8.5.1: + resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==} engines: {node: ^10 || ^12 || >=14} preact-render-to-string@5.2.3: @@ -1422,14 +1427,14 @@ snapshots: arg@5.0.2: {} - autoprefixer@10.4.20(postcss@8.4.49): + autoprefixer@10.4.20(postcss@8.5.1): dependencies: browserslist: 4.23.3 caniuse-lite: 1.0.30001651 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.1 - postcss: 8.4.49 + postcss: 8.5.1 postcss-value-parser: 4.2.0 balanced-match@1.0.2: {} @@ -1740,6 +1745,8 @@ snapshots: nanoid@3.3.7: {} + nanoid@3.3.8: {} + next-auth@5.0.0-beta.25(next@15.1.4(@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: '@auth/core': 0.37.2 @@ -1834,28 +1841,28 @@ snapshots: optionalDependencies: fsevents: 2.3.2 - postcss-import@15.1.0(postcss@8.4.49): + postcss-import@15.1.0(postcss@8.5.1): dependencies: - postcss: 8.4.49 + postcss: 8.5.1 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - postcss-js@4.0.1(postcss@8.4.49): + postcss-js@4.0.1(postcss@8.5.1): dependencies: camelcase-css: 2.0.1 - postcss: 8.4.49 + postcss: 8.5.1 - postcss-load-config@4.0.2(postcss@8.4.49): + postcss-load-config@4.0.2(postcss@8.5.1): dependencies: lilconfig: 3.1.3 yaml: 2.4.3 optionalDependencies: - postcss: 8.4.49 + postcss: 8.5.1 - postcss-nested@6.2.0(postcss@8.4.49): + postcss-nested@6.2.0(postcss@8.5.1): dependencies: - postcss: 8.4.49 + postcss: 8.5.1 postcss-selector-parser: 6.1.2 postcss-selector-parser@6.1.2: @@ -1871,9 +1878,9 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.4.49: + postcss@8.5.1: dependencies: - nanoid: 3.3.7 + nanoid: 3.3.8 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -2071,11 +2078,11 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.1.1 - postcss: 8.4.49 - postcss-import: 15.1.0(postcss@8.4.49) - postcss-js: 4.0.1(postcss@8.4.49) - postcss-load-config: 4.0.2(postcss@8.4.49) - postcss-nested: 6.2.0(postcss@8.4.49) + postcss: 8.5.1 + postcss-import: 15.1.0(postcss@8.5.1) + postcss-js: 4.0.1(postcss@8.5.1) + postcss-load-config: 4.0.2(postcss@8.5.1) + postcss-nested: 6.2.0(postcss@8.5.1) postcss-selector-parser: 6.1.2 resolve: 1.22.8 sucrase: 3.35.0 From 2b550aa60c30d691c42a2105cd3bf7196a6b1f7f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 22 Jan 2025 03:04:42 +0000 Subject: [PATCH 156/216] Update dependency node to v23.6.1 --- .nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nvmrc b/.nvmrc index 708ec23..336c821 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -23.6.0 \ No newline at end of file +23.6.1 \ No newline at end of file From 2c28b80e23175cc3f73a5c656b00b0b94a9b0abd Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 24 Jan 2025 03:07:25 +0000 Subject: [PATCH 157/216] Update dependency @types/node to v22.10.10 --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 238bb1a..3a1c599 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@playwright/test": "^1.46.0", "@types/bcrypt": "^5.0.2", - "@types/node": "22.10.7", + "@types/node": "22.10.10", "@types/react": "18.3.18", "@types/react-dom": "18.3.5" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ab3ef79..302f7b6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,8 +67,8 @@ importers: specifier: ^5.0.2 version: 5.0.2 '@types/node': - specifier: 22.10.7 - version: 22.10.7 + specifier: 22.10.10 + version: 22.10.10 '@types/react': specifier: 18.3.18 version: 18.3.18 @@ -331,8 +331,8 @@ packages: '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/node@22.10.7': - resolution: {integrity: sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg==} + '@types/node@22.10.10': + resolution: {integrity: sha512-X47y/mPNzxviAGY5TcYPtYL8JsY3kAq2n8fMmKoRCxq/c4v4pyGNCzM2R6+M5/umG4ZfHuT+sgqDYqWc9rJ6ww==} '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -1370,11 +1370,11 @@ snapshots: '@types/bcrypt@5.0.2': dependencies: - '@types/node': 22.10.7 + '@types/node': 22.10.10 '@types/cookie@0.6.0': {} - '@types/node@22.10.7': + '@types/node@22.10.10': dependencies: undici-types: 6.20.0 From b8f878a77a8584905d0782659219d6ffc13a10a0 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 24 Jan 2025 03:07:32 +0000 Subject: [PATCH 158/216] Update dependency @playwright/test to v1.50.0 --- pnpm-lock.yaml | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 302f7b6..75cd0d7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,10 +25,10 @@ importers: version: 2.1.1 next: specifier: 15.1.4 - version: 15.1.4(@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.4(@playwright/test@1.50.0)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) next-auth: specifier: 5.0.0-beta.25 - version: 5.0.0-beta.25(next@15.1.4(@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.4(@playwright/test@1.50.0)(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: specifier: 8.5.1 version: 8.5.1 @@ -62,7 +62,7 @@ importers: devDependencies: '@playwright/test': specifier: ^1.46.0 - version: 1.49.1 + version: 1.50.0 '@types/bcrypt': specifier: ^5.0.2 version: 5.0.2 @@ -309,8 +309,8 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.49.1': - resolution: {integrity: sha512-Ky+BVzPz8pL6PQxHqNRW1k3mIyv933LML7HktS8uik0bUXNCdPhoS/kLihiO1tMf/egaJb4IutXd7UywvXEW+g==} + '@playwright/test@1.50.0': + resolution: {integrity: sha512-ZGNXbt+d65EGjBORQHuYKj+XhCewlwpnSd/EDuLPZGSiEWmgOJB5RmMCCYGy5aMfTs9wx61RivfDKi8H/hcMvw==} engines: {node: '>=18'} hasBin: true @@ -847,13 +847,13 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - playwright-core@1.49.1: - resolution: {integrity: sha512-BzmpVcs4kE2CH15rWfzpjzVGhWERJfmnXmniSyKeRZUs9Ws65m+RGIi7mjJK/euCegfn3i7jvqWeWyHe9y3Vgg==} + playwright-core@1.50.0: + resolution: {integrity: sha512-CXkSSlr4JaZs2tZHI40DsZUN/NIwgaUPsyLuOAaIZp2CyF2sN5MM5NJsyB188lFSSozFxQ5fPT4qM+f0tH/6wQ==} engines: {node: '>=18'} hasBin: true - playwright@1.49.1: - resolution: {integrity: sha512-VYL8zLoNTBxVOrJBbDuRgDWa3i+mfQgDTrL8Ah9QXZ7ax4Dsj0MSq5bYgytRnDVVe+njoKnfsYkH3HzqVj5UZA==} + playwright@1.50.0: + resolution: {integrity: sha512-+GinGfGTrd2IfX1TA4N2gNmeIksSb+IAe589ZH+FlmpV3MYTx6+buChGIuDLQwrGNCw2lWibqV50fU510N7S+w==} engines: {node: '>=18'} hasBin: true @@ -1353,9 +1353,9 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.49.1': + '@playwright/test@1.50.0': dependencies: - playwright: 1.49.1 + playwright: 1.50.0 '@swc/counter@0.1.3': {} @@ -1747,13 +1747,13 @@ snapshots: nanoid@3.3.8: {} - next-auth@5.0.0-beta.25(next@15.1.4(@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.4(@playwright/test@1.50.0)(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: '@auth/core': 0.37.2 - next: 15.1.4(@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.4(@playwright/test@1.50.0)(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@15.1.4(@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.4(@playwright/test@1.50.0)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): dependencies: '@next/env': 15.1.4 '@swc/counter': 0.1.3 @@ -1773,7 +1773,7 @@ snapshots: '@next/swc-linux-x64-musl': 15.1.4 '@next/swc-win32-arm64-msvc': 15.1.4 '@next/swc-win32-x64-msvc': 15.1.4 - '@playwright/test': 1.49.1 + '@playwright/test': 1.50.0 sharp: 0.33.5 transitivePeerDependencies: - '@babel/core' @@ -1833,11 +1833,11 @@ snapshots: pirates@4.0.6: {} - playwright-core@1.49.1: {} + playwright-core@1.50.0: {} - playwright@1.49.1: + playwright@1.50.0: dependencies: - playwright-core: 1.49.1 + playwright-core: 1.50.0 optionalDependencies: fsevents: 2.3.2 From 58962e2f48bd248af13cf7b4798737580c6b404e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 25 Jan 2025 03:10:32 +0000 Subject: [PATCH 159/216] Update dependency next to v15.1.6 --- package.json | 2 +- pnpm-lock.yaml | 97 +++++++++++++++++++++++--------------------------- 2 files changed, 46 insertions(+), 53 deletions(-) diff --git a/package.json b/package.json index 3a1c599..4bb880c 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "autoprefixer": "10.4.20", "bcrypt": "^5.1.1", "clsx": "^2.1.1", - "next": "15.1.4", + "next": "15.1.6", "next-auth": "5.0.0-beta.25", "postcss": "8.5.1", "primeicons": "^7.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 75cd0d7..f50c716 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,11 +24,11 @@ importers: specifier: ^2.1.1 version: 2.1.1 next: - specifier: 15.1.4 - version: 15.1.4(@playwright/test@1.50.0)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) + specifier: 15.1.6 + version: 15.1.6(@playwright/test@1.50.0)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) next-auth: specifier: 5.0.0-beta.25 - version: 5.0.0-beta.25(next@15.1.4(@playwright/test@1.50.0)(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.6(@playwright/test@1.50.0)(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: specifier: 8.5.1 version: 8.5.1 @@ -239,53 +239,53 @@ packages: resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true - '@next/env@15.1.4': - resolution: {integrity: sha512-2fZ5YZjedi5AGaeoaC0B20zGntEHRhi2SdWcu61i48BllODcAmmtj8n7YarSPt4DaTsJaBFdxQAVEVzgmx2Zpw==} + '@next/env@15.1.6': + resolution: {integrity: sha512-d9AFQVPEYNr+aqokIiPLNK/MTyt3DWa/dpKveiAaVccUadFbhFEvY6FXYX2LJO2Hv7PHnLBu2oWwB4uBuHjr/w==} - '@next/swc-darwin-arm64@15.1.4': - resolution: {integrity: sha512-wBEMBs+np+R5ozN1F8Y8d/Dycns2COhRnkxRc+rvnbXke5uZBHkUGFgWxfTXn5rx7OLijuUhyfB+gC/ap58dDw==} + '@next/swc-darwin-arm64@15.1.6': + resolution: {integrity: sha512-u7lg4Mpl9qWpKgy6NzEkz/w0/keEHtOybmIl0ykgItBxEM5mYotS5PmqTpo+Rhg8FiOiWgwr8USxmKQkqLBCrw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.1.4': - resolution: {integrity: sha512-7sgf5rM7Z81V9w48F02Zz6DgEJulavC0jadab4ZsJ+K2sxMNK0/BtF8J8J3CxnsJN3DGcIdC260wEKssKTukUw==} + '@next/swc-darwin-x64@15.1.6': + resolution: {integrity: sha512-x1jGpbHbZoZ69nRuogGL2MYPLqohlhnT9OCU6E6QFewwup+z+M6r8oU47BTeJcWsF2sdBahp5cKiAcDbwwK/lg==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.1.4': - resolution: {integrity: sha512-JaZlIMNaJenfd55kjaLWMfok+vWBlcRxqnRoZrhFQrhM1uAehP3R0+Aoe+bZOogqlZvAz53nY/k3ZyuKDtT2zQ==} + '@next/swc-linux-arm64-gnu@15.1.6': + resolution: {integrity: sha512-jar9sFw0XewXsBzPf9runGzoivajeWJUc/JkfbLTC4it9EhU8v7tCRLH7l5Y1ReTMN6zKJO0kKAGqDk8YSO2bg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.1.4': - resolution: {integrity: sha512-7EBBjNoyTO2ipMDgCiORpwwOf5tIueFntKjcN3NK+GAQD7OzFJe84p7a2eQUeWdpzZvhVXuAtIen8QcH71ZCOQ==} + '@next/swc-linux-arm64-musl@15.1.6': + resolution: {integrity: sha512-+n3u//bfsrIaZch4cgOJ3tXCTbSxz0s6brJtU3SzLOvkJlPQMJ+eHVRi6qM2kKKKLuMY+tcau8XD9CJ1OjeSQQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.1.4': - resolution: {integrity: sha512-9TGEgOycqZFuADyFqwmK/9g6S0FYZ3tphR4ebcmCwhL8Y12FW8pIBKJvSwV+UBjMkokstGNH+9F8F031JZKpHw==} + '@next/swc-linux-x64-gnu@15.1.6': + resolution: {integrity: sha512-SpuDEXixM3PycniL4iVCLyUyvcl6Lt0mtv3am08sucskpG0tYkW1KlRhTgj4LI5ehyxriVVcfdoxuuP8csi3kQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.1.4': - resolution: {integrity: sha512-0578bLRVDJOh+LdIoKvgNDz77+Bd85c5JrFgnlbI1SM3WmEQvsjxTA8ATu9Z9FCiIS/AliVAW2DV/BDwpXbtiQ==} + '@next/swc-linux-x64-musl@15.1.6': + resolution: {integrity: sha512-L4druWmdFSZIIRhF+G60API5sFB7suTbDRhYWSjiw0RbE+15igQvE2g2+S973pMGvwN3guw7cJUjA/TmbPWTHQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.1.4': - resolution: {integrity: sha512-JgFCiV4libQavwII+kncMCl30st0JVxpPOtzWcAI2jtum4HjYaclobKhj+JsRu5tFqMtA5CJIa0MvYyuu9xjjQ==} + '@next/swc-win32-arm64-msvc@15.1.6': + resolution: {integrity: sha512-s8w6EeqNmi6gdvM19tqKKWbCyOBvXFbndkGHl+c9YrzsLARRdCHsD9S1fMj8gsXm9v8vhC8s3N8rjuC/XrtkEg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.1.4': - resolution: {integrity: sha512-xxsJy9wzq7FR5SqPCUqdgSXiNXrMuidgckBa8nH9HtjjxsilgcN6VgXF6tZ3uEWuVEadotQJI8/9EQ6guTC4Yw==} + '@next/swc-win32-x64-msvc@15.1.6': + resolution: {integrity: sha512-6xomMuu54FAFxttYr5PJbEfu96godcxBTRk1OhAvJq0/EnmFU/Ybiax30Snis4vdWZ9LGpf7Roy5fSs7v/5ROQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -721,11 +721,6 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - nanoid@3.3.8: resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -747,8 +742,8 @@ packages: nodemailer: optional: true - next@15.1.4: - resolution: {integrity: sha512-mTaq9dwaSuwwOrcu3ebjDYObekkxRnXpuVL21zotM8qE2W0HBOdVIdg2Li9QjMEZrj73LN96LcWcz62V19FjAg==} + next@15.1.6: + resolution: {integrity: sha512-Hch4wzbaX0vKQtalpXvUiw5sYivBy4cm5rzUKrBnUB/y436LGrvOUqYvlSeNVCWFO/770gDlltR9gqZH62ct4Q==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -1310,30 +1305,30 @@ snapshots: - encoding - supports-color - '@next/env@15.1.4': {} + '@next/env@15.1.6': {} - '@next/swc-darwin-arm64@15.1.4': + '@next/swc-darwin-arm64@15.1.6': optional: true - '@next/swc-darwin-x64@15.1.4': + '@next/swc-darwin-x64@15.1.6': optional: true - '@next/swc-linux-arm64-gnu@15.1.4': + '@next/swc-linux-arm64-gnu@15.1.6': optional: true - '@next/swc-linux-arm64-musl@15.1.4': + '@next/swc-linux-arm64-musl@15.1.6': optional: true - '@next/swc-linux-x64-gnu@15.1.4': + '@next/swc-linux-x64-gnu@15.1.6': optional: true - '@next/swc-linux-x64-musl@15.1.4': + '@next/swc-linux-x64-musl@15.1.6': optional: true - '@next/swc-win32-arm64-msvc@15.1.4': + '@next/swc-win32-arm64-msvc@15.1.6': optional: true - '@next/swc-win32-x64-msvc@15.1.4': + '@next/swc-win32-x64-msvc@15.1.6': optional: true '@nodelib/fs.scandir@2.1.5': @@ -1743,19 +1738,17 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nanoid@3.3.7: {} - nanoid@3.3.8: {} - next-auth@5.0.0-beta.25(next@15.1.4(@playwright/test@1.50.0)(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.6(@playwright/test@1.50.0)(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: '@auth/core': 0.37.2 - next: 15.1.4(@playwright/test@1.50.0)(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.6(@playwright/test@1.50.0)(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@15.1.4(@playwright/test@1.50.0)(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.6(@playwright/test@1.50.0)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): dependencies: - '@next/env': 15.1.4 + '@next/env': 15.1.6 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 @@ -1765,14 +1758,14 @@ snapshots: 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) optionalDependencies: - '@next/swc-darwin-arm64': 15.1.4 - '@next/swc-darwin-x64': 15.1.4 - '@next/swc-linux-arm64-gnu': 15.1.4 - '@next/swc-linux-arm64-musl': 15.1.4 - '@next/swc-linux-x64-gnu': 15.1.4 - '@next/swc-linux-x64-musl': 15.1.4 - '@next/swc-win32-arm64-msvc': 15.1.4 - '@next/swc-win32-x64-msvc': 15.1.4 + '@next/swc-darwin-arm64': 15.1.6 + '@next/swc-darwin-x64': 15.1.6 + '@next/swc-linux-arm64-gnu': 15.1.6 + '@next/swc-linux-arm64-musl': 15.1.6 + '@next/swc-linux-x64-gnu': 15.1.6 + '@next/swc-linux-x64-musl': 15.1.6 + '@next/swc-win32-arm64-msvc': 15.1.6 + '@next/swc-win32-x64-msvc': 15.1.6 '@playwright/test': 1.50.0 sharp: 0.33.5 transitivePeerDependencies: @@ -1874,7 +1867,7 @@ snapshots: postcss@8.4.31: dependencies: - nanoid: 3.3.7 + nanoid: 3.3.8 picocolors: 1.1.1 source-map-js: 1.2.1 From 1184a529cf42cfdcd89a002da3afc6254bd43679 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 26 Jan 2025 13:05:32 +0100 Subject: [PATCH 160/216] Display an icon indicating whether a simulation is still valid --- app/api/tableSimulations.tsx | 1 + app/lib/definitions.ts | 3 +- app/ui/arrangements/arrangements-table.tsx | 79 ++++++++++++---------- 3 files changed, 48 insertions(+), 35 deletions(-) diff --git a/app/api/tableSimulations.tsx b/app/api/tableSimulations.tsx index 6bf36d7..5b0f538 100644 --- a/app/api/tableSimulations.tsx +++ b/app/api/tableSimulations.tsx @@ -12,6 +12,7 @@ export function loadTableSimulations(onLoad?: (tableSimulations: TableArrangemen id: record.id, name: record.name, discomfort: record.discomfort, + valid: record.valid, }); })); }, (error) => { diff --git a/app/lib/definitions.ts b/app/lib/definitions.ts index b03ef4b..5e6ffe8 100644 --- a/app/lib/definitions.ts +++ b/app/lib/definitions.ts @@ -12,7 +12,8 @@ export type TableArrangement = { number: number; name: string; guests?: Guest[]; - discomfort?: number + discomfort?: number; + valid?: boolean; } export type User = { diff --git a/app/ui/arrangements/arrangements-table.tsx b/app/ui/arrangements/arrangements-table.tsx index 9a650e7..fbc132a 100644 --- a/app/ui/arrangements/arrangements-table.tsx +++ b/app/ui/arrangements/arrangements-table.tsx @@ -7,42 +7,53 @@ import { TableArrangement } from '@/app/lib/definitions'; import { classNames } from "../components/button"; import TableOfContents from "../components/table-of-contents"; import { loadTableSimulations } from "@/app/api/tableSimulations"; +import { ArchiveBoxXMarkIcon, CheckBadgeIcon } from "@heroicons/react/24/outline"; +import { Tooltip } from "primereact/tooltip"; -export default function ArrangementsTable ({onArrangementSelected}: {onArrangementSelected: (arrangementId: string) => void}) { - const [arrangements, setArrangements] = useState>([]); - const [arrangementsLoaded, setArrangementsLoaded] = useState(false); +export default function ArrangementsTable({ onArrangementSelected }: { onArrangementSelected: (arrangementId: string) => void }) { + const [arrangements, setArrangements] = useState>([]); + const [arrangementsLoaded, setArrangementsLoaded] = useState(false); - function refreshSimulations() { - loadTableSimulations((arrangements) => { - setArrangements(arrangements); - setArrangementsLoaded(true); - }); - } + function refreshSimulations() { + loadTableSimulations((arrangements) => { + setArrangements(arrangements); + setArrangementsLoaded(true); + }); + } - function arrangementClicked(e: React.MouseEvent) { - onArrangementSelected(e.currentTarget.getAttribute('data-arrangement-id') || ''); - } - - !arrangementsLoaded && refreshSimulations(); + function arrangementClicked(e: React.MouseEvent) { + onArrangementSelected(e.currentTarget.getAttribute('data-arrangement-id') || ''); + } - return( - ( -
- - - - - )} - /> - ); + !arrangementsLoaded && refreshSimulations(); + + return ( + ( + + + + + + + )} + /> + ); } \ No newline at end of file From 53a2752964237c4af60eec5525ce59061df72fca Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 26 Jan 2025 13:06:29 +0100 Subject: [PATCH 161/216] Remove references to unsupported dark theme --- app/ui/arrangements/arrangements-table.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/ui/arrangements/arrangements-table.tsx b/app/ui/arrangements/arrangements-table.tsx index fbc132a..de7a4ec 100644 --- a/app/ui/arrangements/arrangements-table.tsx +++ b/app/ui/arrangements/arrangements-table.tsx @@ -33,8 +33,8 @@ export default function ArrangementsTable({ onArrangementSelected }: { onArrange caption='Simulations' elements={arrangements} rowRender={(arrangement) => ( - - + + From bf7e871a1b683ab771cf644cc2e3d2d8749f9ccc Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 26 Jan 2025 13:21:20 +0100 Subject: [PATCH 163/216] Display a button to create new simulations --- app/[slug]/dashboard/tables/page.tsx | 15 ++++++++++++++- app/lib/tableSimulation.tsx | 6 +++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/app/[slug]/dashboard/tables/page.tsx b/app/[slug]/dashboard/tables/page.tsx index 9890735..3f55aa0 100644 --- a/app/[slug]/dashboard/tables/page.tsx +++ b/app/[slug]/dashboard/tables/page.tsx @@ -2,15 +2,28 @@ 'use client'; +import { AbstractApi } from '@/app/api/abstract-api'; +import { TableSimulation, TableSimulationSerializer } from '@/app/lib/tableSimulation'; import Arrangement from '@/app/ui/arrangements/arrangement'; -import React, { useState } from 'react'; import ArrangementsTable from '@/app/ui/arrangements/arrangements-table'; +import { classNames } from '@/app/ui/components/button'; +import { useState } from 'react'; export default function Page() { const [currentArrangement, setCurrentArrangement] = useState(null); + function createSimulation() { + const api = new AbstractApi(); + const serializer = new TableSimulationSerializer(); + api.create(serializer, new TableSimulation(), () => {}); + } + return ( <> +
+ +
+ {currentArrangement && } diff --git a/app/lib/tableSimulation.tsx b/app/lib/tableSimulation.tsx index 9e276a4..7a01b4d 100644 --- a/app/lib/tableSimulation.tsx +++ b/app/lib/tableSimulation.tsx @@ -19,12 +19,12 @@ export type Table = { } export class TableSimulation implements Entity { - id: string; + id?: string; tables: Table[]; - constructor(id: string, tables: Table[]) { + constructor(id?: string, tables?: Table[]) { this.id = id; - this.tables = tables; + this.tables = tables || []; } } From 157401bae51b957eac6f9ad763b28afafaa9cec6 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 26 Jan 2025 13:33:35 +0100 Subject: [PATCH 164/216] Display a toast message after successfully creating a simulation --- app/[slug]/dashboard/tables/page.tsx | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/app/[slug]/dashboard/tables/page.tsx b/app/[slug]/dashboard/tables/page.tsx index 3f55aa0..8fd4a81 100644 --- a/app/[slug]/dashboard/tables/page.tsx +++ b/app/[slug]/dashboard/tables/page.tsx @@ -7,20 +7,33 @@ import { TableSimulation, TableSimulationSerializer } from '@/app/lib/tableSimul import Arrangement from '@/app/ui/arrangements/arrangement'; import ArrangementsTable from '@/app/ui/arrangements/arrangements-table'; import { classNames } from '@/app/ui/components/button'; -import { useState } from 'react'; +import { Toast } from 'primereact/toast'; +import React, { useRef, useState } from 'react'; export default function Page() { + const toast = useRef(null); + + const show = () => { + toast.current?.show({ + severity: 'success', + summary: 'Simulation created', + detail: 'Table distributions will be calculated shortly, please come back in some minutes' + }); + }; + const [currentArrangement, setCurrentArrangement] = useState(null); function createSimulation() { const api = new AbstractApi(); const serializer = new TableSimulationSerializer(); - api.create(serializer, new TableSimulation(), () => {}); + api.create(serializer, new TableSimulation(), show); } - + return ( <> +
+
From 0d1c46a34962a96bee3fcffdf907951c62cac939 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 26 Jan 2025 13:47:17 +0100 Subject: [PATCH 165/216] Fix redundant class definitions --- app/ui/arrangements/arrangements-table.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/ui/arrangements/arrangements-table.tsx b/app/ui/arrangements/arrangements-table.tsx index 31cfffc..07a3eff 100644 --- a/app/ui/arrangements/arrangements-table.tsx +++ b/app/ui/arrangements/arrangements-table.tsx @@ -34,7 +34,7 @@ export default function ArrangementsTable({ onArrangementSelected }: { onArrange caption='Simulations' elements={arrangements} rowRender={(arrangement) => ( -
From 4b219e922df84b0faf2807c6eb63b30f3375cd97 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 27 Jan 2025 03:05:52 +0000 Subject: [PATCH 166/216] Update dependency primereact to v10.9.2 --- pnpm-lock.yaml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f50c716..648003c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,7 +37,7 @@ importers: version: 7.0.0 primereact: specifier: ^10.8.2 - version: 10.9.1(@types/react@18.3.18)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) + version: 10.9.2(@types/react@18.3.18)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) react: specifier: 19.0.0-rc-f38c22b244-20240704 version: 19.0.0-rc-f38c22b244-20240704 @@ -96,8 +96,8 @@ packages: nodemailer: optional: true - '@babel/runtime@7.26.0': - resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} + '@babel/runtime@7.26.7': + resolution: {integrity: sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==} engines: {node: '>=6.9.0'} '@emnapi/runtime@1.2.0': @@ -911,8 +911,8 @@ packages: primeicons@7.0.0: resolution: {integrity: sha512-jK3Et9UzwzTsd6tzl2RmwrVY/b8raJ3QZLzoDACj+oTJ0oX7L9Hy+XnVwgo4QVKlKpnP/Ur13SXV/pVh4LzaDw==} - primereact@10.9.1: - resolution: {integrity: sha512-mq5Pr6/zySO913RlL5oUWD+n1ygTjJjhhxBoRWhLNKx7Na8pHpswh/QCesShFXlfYyCjDOVXFVT6J2sSDceF1g==} + primereact@10.9.2: + resolution: {integrity: sha512-uJTghCPlnPWJc0mvkqYJDj6bl4udROPGrMEfV4CPh7UurMS+E8b+82ABZ+OPWibQOWxnEQl5NXcfG4F/7YRXwA==} engines: {node: '>=14.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -1176,7 +1176,7 @@ snapshots: preact: 10.11.3 preact-render-to-string: 5.2.3(preact@10.11.3) - '@babel/runtime@7.26.0': + '@babel/runtime@7.26.7': dependencies: regenerator-runtime: 0.14.1 @@ -1542,7 +1542,7 @@ snapshots: dom-helpers@5.2.1: dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.26.7 csstype: 3.1.3 eastasianwidth@0.2.0: {} @@ -1888,7 +1888,7 @@ snapshots: primeicons@7.0.0: {} - primereact@10.9.1(@types/react@18.3.18)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): + primereact@10.9.2(@types/react@18.3.18)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): dependencies: '@types/react-transition-group': 4.4.12(@types/react@18.3.18) react: 19.0.0-rc-f38c22b244-20240704 @@ -1914,7 +1914,7 @@ snapshots: react-transition-group@4.4.5(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): dependencies: - '@babel/runtime': 7.26.0 + '@babel/runtime': 7.26.7 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 From d8bc79e755cfefbca5d2359f79dbfc3d405bb386 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 28 Jan 2025 03:07:42 +0000 Subject: [PATCH 167/216] Update dependency @types/node to v22.12.0 --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 4bb880c..fa42fd9 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@playwright/test": "^1.46.0", "@types/bcrypt": "^5.0.2", - "@types/node": "22.10.10", + "@types/node": "22.12.0", "@types/react": "18.3.18", "@types/react-dom": "18.3.5" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 648003c..2b691fe 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,8 +67,8 @@ importers: specifier: ^5.0.2 version: 5.0.2 '@types/node': - specifier: 22.10.10 - version: 22.10.10 + specifier: 22.12.0 + version: 22.12.0 '@types/react': specifier: 18.3.18 version: 18.3.18 @@ -331,8 +331,8 @@ packages: '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/node@22.10.10': - resolution: {integrity: sha512-X47y/mPNzxviAGY5TcYPtYL8JsY3kAq2n8fMmKoRCxq/c4v4pyGNCzM2R6+M5/umG4ZfHuT+sgqDYqWc9rJ6ww==} + '@types/node@22.12.0': + resolution: {integrity: sha512-Fll2FZ1riMjNmlmJOdAyY5pUbkftXslB5DgEzlIuNaiWhXd00FhWxVC/r4yV/4wBb9JfImTu+jiSvXTkJ7F/gA==} '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -1365,11 +1365,11 @@ snapshots: '@types/bcrypt@5.0.2': dependencies: - '@types/node': 22.10.10 + '@types/node': 22.12.0 '@types/cookie@0.6.0': {} - '@types/node@22.10.10': + '@types/node@22.12.0': dependencies: undici-types: 6.20.0 From 3892e5c885d54db143c7969dbb8566a6631140bc Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 31 Jan 2025 03:03:44 +0000 Subject: [PATCH 168/216] Update dependency node to v23.7.0 --- .nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nvmrc b/.nvmrc index 336c821..b88575e 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -23.6.1 \ No newline at end of file +23.7.0 \ No newline at end of file From c83574466339ea949d5cfab10ee5ea8749409dc6 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 1 Feb 2025 03:06:39 +0000 Subject: [PATCH 169/216] Update dependency @playwright/test to v1.50.1 --- pnpm-lock.yaml | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2b691fe..b46be45 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,10 +25,10 @@ importers: version: 2.1.1 next: specifier: 15.1.6 - version: 15.1.6(@playwright/test@1.50.0)(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.6(@playwright/test@1.50.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: specifier: 5.0.0-beta.25 - version: 5.0.0-beta.25(next@15.1.6(@playwright/test@1.50.0)(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.6(@playwright/test@1.50.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: specifier: 8.5.1 version: 8.5.1 @@ -62,7 +62,7 @@ importers: devDependencies: '@playwright/test': specifier: ^1.46.0 - version: 1.50.0 + version: 1.50.1 '@types/bcrypt': specifier: ^5.0.2 version: 5.0.2 @@ -309,8 +309,8 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.50.0': - resolution: {integrity: sha512-ZGNXbt+d65EGjBORQHuYKj+XhCewlwpnSd/EDuLPZGSiEWmgOJB5RmMCCYGy5aMfTs9wx61RivfDKi8H/hcMvw==} + '@playwright/test@1.50.1': + resolution: {integrity: sha512-Jii3aBg+CEDpgnuDxEp/h7BimHcUTDlpEtce89xEumlJ5ef2hqepZ+PWp1DDpYC/VO9fmWVI1IlEaoI5fK9FXQ==} engines: {node: '>=18'} hasBin: true @@ -842,13 +842,13 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - playwright-core@1.50.0: - resolution: {integrity: sha512-CXkSSlr4JaZs2tZHI40DsZUN/NIwgaUPsyLuOAaIZp2CyF2sN5MM5NJsyB188lFSSozFxQ5fPT4qM+f0tH/6wQ==} + playwright-core@1.50.1: + resolution: {integrity: sha512-ra9fsNWayuYumt+NiM069M6OkcRb1FZSK8bgi66AtpFoWkg2+y0bJSNmkFrWhMbEBbVKC/EruAHH3g0zmtwGmQ==} engines: {node: '>=18'} hasBin: true - playwright@1.50.0: - resolution: {integrity: sha512-+GinGfGTrd2IfX1TA4N2gNmeIksSb+IAe589ZH+FlmpV3MYTx6+buChGIuDLQwrGNCw2lWibqV50fU510N7S+w==} + playwright@1.50.1: + resolution: {integrity: sha512-G8rwsOQJ63XG6BbKj2w5rHeavFjy5zynBA9zsJMMtBoe/Uf757oG12NXz6e6OirF7RCrTVAKFXbLmn1RbL7Qaw==} engines: {node: '>=18'} hasBin: true @@ -1348,9 +1348,9 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.50.0': + '@playwright/test@1.50.1': dependencies: - playwright: 1.50.0 + playwright: 1.50.1 '@swc/counter@0.1.3': {} @@ -1740,13 +1740,13 @@ snapshots: nanoid@3.3.8: {} - next-auth@5.0.0-beta.25(next@15.1.6(@playwright/test@1.50.0)(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.6(@playwright/test@1.50.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: '@auth/core': 0.37.2 - next: 15.1.6(@playwright/test@1.50.0)(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.6(@playwright/test@1.50.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@15.1.6(@playwright/test@1.50.0)(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.6(@playwright/test@1.50.1)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): dependencies: '@next/env': 15.1.6 '@swc/counter': 0.1.3 @@ -1766,7 +1766,7 @@ snapshots: '@next/swc-linux-x64-musl': 15.1.6 '@next/swc-win32-arm64-msvc': 15.1.6 '@next/swc-win32-x64-msvc': 15.1.6 - '@playwright/test': 1.50.0 + '@playwright/test': 1.50.1 sharp: 0.33.5 transitivePeerDependencies: - '@babel/core' @@ -1826,11 +1826,11 @@ snapshots: pirates@4.0.6: {} - playwright-core@1.50.0: {} + playwright-core@1.50.1: {} - playwright@1.50.0: + playwright@1.50.1: dependencies: - playwright-core: 1.50.0 + playwright-core: 1.50.1 optionalDependencies: fsevents: 2.3.2 From dc499893b366c8c0475ec23e9f07e4048c5f3ba3 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 2 Feb 2025 03:08:54 +0000 Subject: [PATCH 170/216] Update dependency @types/node to v22.13.0 --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index fa42fd9..244c805 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@playwright/test": "^1.46.0", "@types/bcrypt": "^5.0.2", - "@types/node": "22.12.0", + "@types/node": "22.13.0", "@types/react": "18.3.18", "@types/react-dom": "18.3.5" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b46be45..dc52e22 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,8 +67,8 @@ importers: specifier: ^5.0.2 version: 5.0.2 '@types/node': - specifier: 22.12.0 - version: 22.12.0 + specifier: 22.13.0 + version: 22.13.0 '@types/react': specifier: 18.3.18 version: 18.3.18 @@ -331,8 +331,8 @@ packages: '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/node@22.12.0': - resolution: {integrity: sha512-Fll2FZ1riMjNmlmJOdAyY5pUbkftXslB5DgEzlIuNaiWhXd00FhWxVC/r4yV/4wBb9JfImTu+jiSvXTkJ7F/gA==} + '@types/node@22.13.0': + resolution: {integrity: sha512-ClIbNe36lawluuvq3+YYhnIN2CELi+6q8NpnM7PYp4hBn/TatfboPgVSm2rwKRfnV2M+Ty9GWDFI64KEe+kysA==} '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -1365,11 +1365,11 @@ snapshots: '@types/bcrypt@5.0.2': dependencies: - '@types/node': 22.12.0 + '@types/node': 22.13.0 '@types/cookie@0.6.0': {} - '@types/node@22.12.0': + '@types/node@22.13.0': dependencies: undici-types: 6.20.0 From c77a1cfbbac01abb2781f433a5325afdcf31a32f Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 4 Feb 2025 03:06:50 +0000 Subject: [PATCH 171/216] Update dependency @types/node to v22.13.1 --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 244c805..315a583 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@playwright/test": "^1.46.0", "@types/bcrypt": "^5.0.2", - "@types/node": "22.13.0", + "@types/node": "22.13.1", "@types/react": "18.3.18", "@types/react-dom": "18.3.5" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dc52e22..cef6e0c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,8 +67,8 @@ importers: specifier: ^5.0.2 version: 5.0.2 '@types/node': - specifier: 22.13.0 - version: 22.13.0 + specifier: 22.13.1 + version: 22.13.1 '@types/react': specifier: 18.3.18 version: 18.3.18 @@ -331,8 +331,8 @@ packages: '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/node@22.13.0': - resolution: {integrity: sha512-ClIbNe36lawluuvq3+YYhnIN2CELi+6q8NpnM7PYp4hBn/TatfboPgVSm2rwKRfnV2M+Ty9GWDFI64KEe+kysA==} + '@types/node@22.13.1': + resolution: {integrity: sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==} '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -1365,11 +1365,11 @@ snapshots: '@types/bcrypt@5.0.2': dependencies: - '@types/node': 22.13.0 + '@types/node': 22.13.1 '@types/cookie@0.6.0': {} - '@types/node@22.13.0': + '@types/node@22.13.1': dependencies: undici-types: 6.20.0 From 95e4949e1d9fb974b234414f7474bf7b07c6d729 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 11 Feb 2025 03:05:44 +0000 Subject: [PATCH 172/216] Update dependency postcss to v8.5.2 --- package.json | 2 +- pnpm-lock.yaml | 42 +++++++++++++++++++++--------------------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/package.json b/package.json index 315a583..da82973 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "clsx": "^2.1.1", "next": "15.1.6", "next-auth": "5.0.0-beta.25", - "postcss": "8.5.1", + "postcss": "8.5.2", "primeicons": "^7.0.0", "primereact": "^10.8.2", "react": "19.0.0-rc-f38c22b244-20240704", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cef6e0c..6615dfd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,7 +16,7 @@ importers: version: 0.5.10(tailwindcss@3.4.17) autoprefixer: specifier: 10.4.20 - version: 10.4.20(postcss@8.5.1) + version: 10.4.20(postcss@8.5.2) bcrypt: specifier: ^5.1.1 version: 5.1.1 @@ -30,8 +30,8 @@ importers: specifier: 5.0.0-beta.25 version: 5.0.0-beta.25(next@15.1.6(@playwright/test@1.50.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: - specifier: 8.5.1 - version: 8.5.1 + specifier: 8.5.2 + version: 8.5.2 primeicons: specifier: ^7.0.0 version: 7.0.0 @@ -893,8 +893,8 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.5.1: - resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==} + postcss@8.5.2: + resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} engines: {node: ^10 || ^12 || >=14} preact-render-to-string@5.2.3: @@ -1422,14 +1422,14 @@ snapshots: arg@5.0.2: {} - autoprefixer@10.4.20(postcss@8.5.1): + autoprefixer@10.4.20(postcss@8.5.2): dependencies: browserslist: 4.23.3 caniuse-lite: 1.0.30001651 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.1 - postcss: 8.5.1 + postcss: 8.5.2 postcss-value-parser: 4.2.0 balanced-match@1.0.2: {} @@ -1834,28 +1834,28 @@ snapshots: optionalDependencies: fsevents: 2.3.2 - postcss-import@15.1.0(postcss@8.5.1): + postcss-import@15.1.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - postcss-js@4.0.1(postcss@8.5.1): + postcss-js@4.0.1(postcss@8.5.2): dependencies: camelcase-css: 2.0.1 - postcss: 8.5.1 + postcss: 8.5.2 - postcss-load-config@4.0.2(postcss@8.5.1): + postcss-load-config@4.0.2(postcss@8.5.2): dependencies: lilconfig: 3.1.3 yaml: 2.4.3 optionalDependencies: - postcss: 8.5.1 + postcss: 8.5.2 - postcss-nested@6.2.0(postcss@8.5.1): + postcss-nested@6.2.0(postcss@8.5.2): dependencies: - postcss: 8.5.1 + postcss: 8.5.2 postcss-selector-parser: 6.1.2 postcss-selector-parser@6.1.2: @@ -1871,7 +1871,7 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.5.1: + postcss@8.5.2: dependencies: nanoid: 3.3.8 picocolors: 1.1.1 @@ -2071,11 +2071,11 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.1.1 - postcss: 8.5.1 - postcss-import: 15.1.0(postcss@8.5.1) - postcss-js: 4.0.1(postcss@8.5.1) - postcss-load-config: 4.0.2(postcss@8.5.1) - postcss-nested: 6.2.0(postcss@8.5.1) + postcss: 8.5.2 + postcss-import: 15.1.0(postcss@8.5.2) + postcss-js: 4.0.1(postcss@8.5.2) + postcss-load-config: 4.0.2(postcss@8.5.2) + postcss-nested: 6.2.0(postcss@8.5.2) postcss-selector-parser: 6.1.2 resolve: 1.22.8 sucrase: 3.35.0 From 61077bb11ea0a8703687c3058fda18a4b6b58e49 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 12 Feb 2025 03:08:42 +0000 Subject: [PATCH 173/216] Update dependency next to v15.1.7 --- package.json | 2 +- pnpm-lock.yaml | 88 +++++++++++++++++++++++++------------------------- 2 files changed, 45 insertions(+), 45 deletions(-) diff --git a/package.json b/package.json index da82973..47b210e 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "autoprefixer": "10.4.20", "bcrypt": "^5.1.1", "clsx": "^2.1.1", - "next": "15.1.6", + "next": "15.1.7", "next-auth": "5.0.0-beta.25", "postcss": "8.5.2", "primeicons": "^7.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6615dfd..12d79c7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,11 +24,11 @@ importers: specifier: ^2.1.1 version: 2.1.1 next: - specifier: 15.1.6 - version: 15.1.6(@playwright/test@1.50.1)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) + specifier: 15.1.7 + version: 15.1.7(@playwright/test@1.50.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: specifier: 5.0.0-beta.25 - version: 5.0.0-beta.25(next@15.1.6(@playwright/test@1.50.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.7(@playwright/test@1.50.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: specifier: 8.5.2 version: 8.5.2 @@ -239,53 +239,53 @@ packages: resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true - '@next/env@15.1.6': - resolution: {integrity: sha512-d9AFQVPEYNr+aqokIiPLNK/MTyt3DWa/dpKveiAaVccUadFbhFEvY6FXYX2LJO2Hv7PHnLBu2oWwB4uBuHjr/w==} + '@next/env@15.1.7': + resolution: {integrity: sha512-d9jnRrkuOH7Mhi+LHav2XW91HOgTAWHxjMPkXMGBc9B2b7614P7kjt8tAplRvJpbSt4nbO1lugcT/kAaWzjlLQ==} - '@next/swc-darwin-arm64@15.1.6': - resolution: {integrity: sha512-u7lg4Mpl9qWpKgy6NzEkz/w0/keEHtOybmIl0ykgItBxEM5mYotS5PmqTpo+Rhg8FiOiWgwr8USxmKQkqLBCrw==} + '@next/swc-darwin-arm64@15.1.7': + resolution: {integrity: sha512-hPFwzPJDpA8FGj7IKV3Yf1web3oz2YsR8du4amKw8d+jAOHfYHYFpMkoF6vgSY4W6vB29RtZEklK9ayinGiCmQ==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.1.6': - resolution: {integrity: sha512-x1jGpbHbZoZ69nRuogGL2MYPLqohlhnT9OCU6E6QFewwup+z+M6r8oU47BTeJcWsF2sdBahp5cKiAcDbwwK/lg==} + '@next/swc-darwin-x64@15.1.7': + resolution: {integrity: sha512-2qoas+fO3OQKkU0PBUfwTiw/EYpN+kdAx62cePRyY1LqKtP09Vp5UcUntfZYajop5fDFTjSxCHfZVRxzi+9FYQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.1.6': - resolution: {integrity: sha512-jar9sFw0XewXsBzPf9runGzoivajeWJUc/JkfbLTC4it9EhU8v7tCRLH7l5Y1ReTMN6zKJO0kKAGqDk8YSO2bg==} + '@next/swc-linux-arm64-gnu@15.1.7': + resolution: {integrity: sha512-sKLLwDX709mPdzxMnRIXLIT9zaX2w0GUlkLYQnKGoXeWUhcvpCrK+yevcwCJPdTdxZEUA0mOXGLdPsGkudGdnA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.1.6': - resolution: {integrity: sha512-+n3u//bfsrIaZch4cgOJ3tXCTbSxz0s6brJtU3SzLOvkJlPQMJ+eHVRi6qM2kKKKLuMY+tcau8XD9CJ1OjeSQQ==} + '@next/swc-linux-arm64-musl@15.1.7': + resolution: {integrity: sha512-zblK1OQbQWdC8fxdX4fpsHDw+VSpBPGEUX4PhSE9hkaWPrWoeIJn+baX53vbsbDRaDKd7bBNcXRovY1hEhFd7w==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.1.6': - resolution: {integrity: sha512-SpuDEXixM3PycniL4iVCLyUyvcl6Lt0mtv3am08sucskpG0tYkW1KlRhTgj4LI5ehyxriVVcfdoxuuP8csi3kQ==} + '@next/swc-linux-x64-gnu@15.1.7': + resolution: {integrity: sha512-GOzXutxuLvLHFDAPsMP2zDBMl1vfUHHpdNpFGhxu90jEzH6nNIgmtw/s1MDwpTOiM+MT5V8+I1hmVFeAUhkbgQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.1.6': - resolution: {integrity: sha512-L4druWmdFSZIIRhF+G60API5sFB7suTbDRhYWSjiw0RbE+15igQvE2g2+S973pMGvwN3guw7cJUjA/TmbPWTHQ==} + '@next/swc-linux-x64-musl@15.1.7': + resolution: {integrity: sha512-WrZ7jBhR7ATW1z5iEQ0ZJfE2twCNSXbpCSaAunF3BKcVeHFADSI/AW1y5Xt3DzTqPF1FzQlwQTewqetAABhZRQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.1.6': - resolution: {integrity: sha512-s8w6EeqNmi6gdvM19tqKKWbCyOBvXFbndkGHl+c9YrzsLARRdCHsD9S1fMj8gsXm9v8vhC8s3N8rjuC/XrtkEg==} + '@next/swc-win32-arm64-msvc@15.1.7': + resolution: {integrity: sha512-LDnj1f3OVbou1BqvvXVqouJZKcwq++mV2F+oFHptToZtScIEnhNRJAhJzqAtTE2dB31qDYL45xJwrc+bLeKM2Q==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.1.6': - resolution: {integrity: sha512-6xomMuu54FAFxttYr5PJbEfu96godcxBTRk1OhAvJq0/EnmFU/Ybiax30Snis4vdWZ9LGpf7Roy5fSs7v/5ROQ==} + '@next/swc-win32-x64-msvc@15.1.7': + resolution: {integrity: sha512-dC01f1quuf97viOfW05/K8XYv2iuBgAxJZl7mbCKEjMgdQl5JjAKJ0D2qMKZCgPWDeFbFT0Q0nYWwytEW0DWTQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -742,8 +742,8 @@ packages: nodemailer: optional: true - next@15.1.6: - resolution: {integrity: sha512-Hch4wzbaX0vKQtalpXvUiw5sYivBy4cm5rzUKrBnUB/y436LGrvOUqYvlSeNVCWFO/770gDlltR9gqZH62ct4Q==} + next@15.1.7: + resolution: {integrity: sha512-GNeINPGS9c6OZKCvKypbL8GTsT5GhWPp4DM0fzkXJuXMilOO2EeFxuAY6JZbtk6XIl6Ws10ag3xRINDjSO5+wg==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -1305,30 +1305,30 @@ snapshots: - encoding - supports-color - '@next/env@15.1.6': {} + '@next/env@15.1.7': {} - '@next/swc-darwin-arm64@15.1.6': + '@next/swc-darwin-arm64@15.1.7': optional: true - '@next/swc-darwin-x64@15.1.6': + '@next/swc-darwin-x64@15.1.7': optional: true - '@next/swc-linux-arm64-gnu@15.1.6': + '@next/swc-linux-arm64-gnu@15.1.7': optional: true - '@next/swc-linux-arm64-musl@15.1.6': + '@next/swc-linux-arm64-musl@15.1.7': optional: true - '@next/swc-linux-x64-gnu@15.1.6': + '@next/swc-linux-x64-gnu@15.1.7': optional: true - '@next/swc-linux-x64-musl@15.1.6': + '@next/swc-linux-x64-musl@15.1.7': optional: true - '@next/swc-win32-arm64-msvc@15.1.6': + '@next/swc-win32-arm64-msvc@15.1.7': optional: true - '@next/swc-win32-x64-msvc@15.1.6': + '@next/swc-win32-x64-msvc@15.1.7': optional: true '@nodelib/fs.scandir@2.1.5': @@ -1740,15 +1740,15 @@ snapshots: nanoid@3.3.8: {} - next-auth@5.0.0-beta.25(next@15.1.6(@playwright/test@1.50.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.7(@playwright/test@1.50.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: '@auth/core': 0.37.2 - next: 15.1.6(@playwright/test@1.50.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.7(@playwright/test@1.50.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@15.1.6(@playwright/test@1.50.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.7(@playwright/test@1.50.1)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): dependencies: - '@next/env': 15.1.6 + '@next/env': 15.1.7 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 @@ -1758,14 +1758,14 @@ snapshots: 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) optionalDependencies: - '@next/swc-darwin-arm64': 15.1.6 - '@next/swc-darwin-x64': 15.1.6 - '@next/swc-linux-arm64-gnu': 15.1.6 - '@next/swc-linux-arm64-musl': 15.1.6 - '@next/swc-linux-x64-gnu': 15.1.6 - '@next/swc-linux-x64-musl': 15.1.6 - '@next/swc-win32-arm64-msvc': 15.1.6 - '@next/swc-win32-x64-msvc': 15.1.6 + '@next/swc-darwin-arm64': 15.1.7 + '@next/swc-darwin-x64': 15.1.7 + '@next/swc-linux-arm64-gnu': 15.1.7 + '@next/swc-linux-arm64-musl': 15.1.7 + '@next/swc-linux-x64-gnu': 15.1.7 + '@next/swc-linux-x64-musl': 15.1.7 + '@next/swc-win32-arm64-msvc': 15.1.7 + '@next/swc-win32-x64-msvc': 15.1.7 '@playwright/test': 1.50.1 sharp: 0.33.5 transitivePeerDependencies: From 38d75ce80d21c296ed29e78e4e1fc72f6bf535e2 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 16 Feb 2025 03:13:18 +0000 Subject: [PATCH 174/216] Update dependency @types/node to v22.13.4 --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 47b210e..708aad4 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@playwright/test": "^1.46.0", "@types/bcrypt": "^5.0.2", - "@types/node": "22.13.1", + "@types/node": "22.13.4", "@types/react": "18.3.18", "@types/react-dom": "18.3.5" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 12d79c7..a875c93 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,8 +67,8 @@ importers: specifier: ^5.0.2 version: 5.0.2 '@types/node': - specifier: 22.13.1 - version: 22.13.1 + specifier: 22.13.4 + version: 22.13.4 '@types/react': specifier: 18.3.18 version: 18.3.18 @@ -331,8 +331,8 @@ packages: '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/node@22.13.1': - resolution: {integrity: sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==} + '@types/node@22.13.4': + resolution: {integrity: sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg==} '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -1365,11 +1365,11 @@ snapshots: '@types/bcrypt@5.0.2': dependencies: - '@types/node': 22.13.1 + '@types/node': 22.13.4 '@types/cookie@0.6.0': {} - '@types/node@22.13.1': + '@types/node@22.13.4': dependencies: undici-types: 6.20.0 From 6ed957c4e5fd95c54049328b787ac6b9381c1c07 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 17 Feb 2025 03:12:57 +0000 Subject: [PATCH 175/216] Update dependency zod to v3.24.2 --- pnpm-lock.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a875c93..b05a9f9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -58,7 +58,7 @@ importers: version: 11.0.5 zod: specifier: ^3.23.8 - version: 3.24.1 + version: 3.24.2 devDependencies: '@playwright/test': specifier: ^1.46.0 @@ -1159,8 +1159,8 @@ packages: engines: {node: '>= 14'} hasBin: true - zod@3.24.1: - resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} + zod@3.24.2: + resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} snapshots: @@ -2160,4 +2160,4 @@ snapshots: yaml@2.4.3: {} - zod@3.24.1: {} + zod@3.24.2: {} From cff2c5ddc2b04fe268ee112038847cce702fbada Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 18 Feb 2025 03:11:39 +0000 Subject: [PATCH 176/216] Update pnpm to v9.15.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 708aad4..eb06739 100644 --- a/package.json +++ b/package.json @@ -34,5 +34,5 @@ "engines": { "node": ">=23.0.0" }, - "packageManager": "pnpm@9.15.4+sha512.b2dc20e2fc72b3e18848459b37359a32064663e5627a51e4c74b2c29dd8e8e0491483c3abb40789cfd578bf362fb6ba8261b05f0387d76792ed6e23ea3b1b6a0" + "packageManager": "pnpm@9.15.5+sha512.845196026aab1cc3f098a0474b64dfbab2afe7a1b4e91dd86895d8e4aa32a7a6d03049e2d0ad770bbe4de023a7122fb68c1a1d6e0d033c7076085f9d5d4800d4" } From fa904b5de2654aa09a29553fd62a1c9950aa75dc Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 19 Feb 2025 03:11:38 +0000 Subject: [PATCH 177/216] Update dependency node to v23.8.0 --- .nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nvmrc b/.nvmrc index b88575e..801a2a0 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -23.7.0 \ No newline at end of file +23.8.0 \ No newline at end of file From cffb4e1c4a12ae9c21fd121c23606b4c89a02f64 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 20 Feb 2025 03:12:42 +0000 Subject: [PATCH 178/216] Update dependency uuid to v11.1.0 --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index eb06739..1bd59b2 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "tailwindcss": "3.4.17", "typescript": "5.7.3", "use-debounce": "^10.0.1", - "uuid": "11.0.5", + "uuid": "11.1.0", "zod": "^3.23.8" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b05a9f9..9305e40 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -54,8 +54,8 @@ importers: specifier: ^10.0.1 version: 10.0.4(react@19.0.0-rc-f38c22b244-20240704) uuid: - specifier: 11.0.5 - version: 11.0.5 + specifier: 11.1.0 + version: 11.1.0 zod: specifier: ^3.23.8 version: 3.24.2 @@ -1122,8 +1122,8 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - uuid@11.0.5: - resolution: {integrity: sha512-508e6IcKLrhxKdBbcA2b4KQZlLVp2+J5UwQ6F7Drckkc5N9ZJwFa4TgWtsww9UG8fGHbm6gbV19TdM5pQ4GaIA==} + uuid@11.1.0: + resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} hasBin: true webidl-conversions@3.0.1: @@ -2125,7 +2125,7 @@ snapshots: util-deprecate@1.0.2: {} - uuid@11.0.5: {} + uuid@11.1.0: {} webidl-conversions@3.0.1: {} From cda483d6f70628fed62dea380e65b8c58fa0c7a1 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 1 Mar 2025 03:08:48 +0000 Subject: [PATCH 179/216] Update dependency typescript to v5.8.2 --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 1bd59b2..c080409 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "react": "19.0.0-rc-f38c22b244-20240704", "react-dom": "19.0.0-rc-f38c22b244-20240704", "tailwindcss": "3.4.17", - "typescript": "5.7.3", + "typescript": "5.8.2", "use-debounce": "^10.0.1", "uuid": "11.1.0", "zod": "^3.23.8" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9305e40..7ce5643 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -48,8 +48,8 @@ importers: specifier: 3.4.17 version: 3.4.17 typescript: - specifier: 5.7.3 - version: 5.7.3 + specifier: 5.8.2 + version: 5.8.2 use-debounce: specifier: ^10.0.1 version: 10.0.4(react@19.0.0-rc-f38c22b244-20240704) @@ -1099,8 +1099,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - typescript@5.7.3: - resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} + typescript@5.8.2: + resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} engines: {node: '>=14.17'} hasBin: true @@ -2109,7 +2109,7 @@ snapshots: tslib@2.8.1: {} - typescript@5.7.3: {} + typescript@5.8.2: {} undici-types@6.20.0: {} From 4c03b428b48bc725016300b4da67266f394292c8 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 2 Mar 2025 03:08:04 +0000 Subject: [PATCH 180/216] Update dependency postcss to v8.5.3 --- package.json | 2 +- pnpm-lock.yaml | 42 +++++++++++++++++++++--------------------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/package.json b/package.json index c080409..505187a 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "clsx": "^2.1.1", "next": "15.1.7", "next-auth": "5.0.0-beta.25", - "postcss": "8.5.2", + "postcss": "8.5.3", "primeicons": "^7.0.0", "primereact": "^10.8.2", "react": "19.0.0-rc-f38c22b244-20240704", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7ce5643..515f4de 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,7 +16,7 @@ importers: version: 0.5.10(tailwindcss@3.4.17) autoprefixer: specifier: 10.4.20 - version: 10.4.20(postcss@8.5.2) + version: 10.4.20(postcss@8.5.3) bcrypt: specifier: ^5.1.1 version: 5.1.1 @@ -30,8 +30,8 @@ importers: specifier: 5.0.0-beta.25 version: 5.0.0-beta.25(next@15.1.7(@playwright/test@1.50.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: - specifier: 8.5.2 - version: 8.5.2 + specifier: 8.5.3 + version: 8.5.3 primeicons: specifier: ^7.0.0 version: 7.0.0 @@ -893,8 +893,8 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.5.2: - resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} engines: {node: ^10 || ^12 || >=14} preact-render-to-string@5.2.3: @@ -1422,14 +1422,14 @@ snapshots: arg@5.0.2: {} - autoprefixer@10.4.20(postcss@8.5.2): + autoprefixer@10.4.20(postcss@8.5.3): dependencies: browserslist: 4.23.3 caniuse-lite: 1.0.30001651 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.1 - postcss: 8.5.2 + postcss: 8.5.3 postcss-value-parser: 4.2.0 balanced-match@1.0.2: {} @@ -1834,28 +1834,28 @@ snapshots: optionalDependencies: fsevents: 2.3.2 - postcss-import@15.1.0(postcss@8.5.2): + postcss-import@15.1.0(postcss@8.5.3): dependencies: - postcss: 8.5.2 + postcss: 8.5.3 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - postcss-js@4.0.1(postcss@8.5.2): + postcss-js@4.0.1(postcss@8.5.3): dependencies: camelcase-css: 2.0.1 - postcss: 8.5.2 + postcss: 8.5.3 - postcss-load-config@4.0.2(postcss@8.5.2): + postcss-load-config@4.0.2(postcss@8.5.3): dependencies: lilconfig: 3.1.3 yaml: 2.4.3 optionalDependencies: - postcss: 8.5.2 + postcss: 8.5.3 - postcss-nested@6.2.0(postcss@8.5.2): + postcss-nested@6.2.0(postcss@8.5.3): dependencies: - postcss: 8.5.2 + postcss: 8.5.3 postcss-selector-parser: 6.1.2 postcss-selector-parser@6.1.2: @@ -1871,7 +1871,7 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.5.2: + postcss@8.5.3: dependencies: nanoid: 3.3.8 picocolors: 1.1.1 @@ -2071,11 +2071,11 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.1.1 - postcss: 8.5.2 - postcss-import: 15.1.0(postcss@8.5.2) - postcss-js: 4.0.1(postcss@8.5.2) - postcss-load-config: 4.0.2(postcss@8.5.2) - postcss-nested: 6.2.0(postcss@8.5.2) + postcss: 8.5.3 + postcss-import: 15.1.0(postcss@8.5.3) + postcss-js: 4.0.1(postcss@8.5.3) + postcss-load-config: 4.0.2(postcss@8.5.3) + postcss-nested: 6.2.0(postcss@8.5.3) postcss-selector-parser: 6.1.2 resolve: 1.22.8 sucrase: 3.35.0 From 31f480c74e31f6c16100d03aabf6290d934843de Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 3 Mar 2025 03:08:58 +0000 Subject: [PATCH 181/216] Update pnpm to v9.15.6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 505187a..9e4a3dc 100644 --- a/package.json +++ b/package.json @@ -34,5 +34,5 @@ "engines": { "node": ">=23.0.0" }, - "packageManager": "pnpm@9.15.5+sha512.845196026aab1cc3f098a0474b64dfbab2afe7a1b4e91dd86895d8e4aa32a7a6d03049e2d0ad770bbe4de023a7122fb68c1a1d6e0d033c7076085f9d5d4800d4" + "packageManager": "pnpm@9.15.6+sha512.139cab068fdf0b751268179ac5f909b5be72afb4a75c513d1905d151befc8977b593d3cf8671ed83d4d6637c5c94b98ffbce108125de4a5a27a31233601a99de" } From 17e1869c9f5f929b0d552792e396f117319c6ebc Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 4 Mar 2025 03:07:14 +0000 Subject: [PATCH 182/216] Update dependency @types/node to v22.13.9 --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 9e4a3dc..5ddd924 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@playwright/test": "^1.46.0", "@types/bcrypt": "^5.0.2", - "@types/node": "22.13.4", + "@types/node": "22.13.9", "@types/react": "18.3.18", "@types/react-dom": "18.3.5" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 515f4de..814d08e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,8 +67,8 @@ importers: specifier: ^5.0.2 version: 5.0.2 '@types/node': - specifier: 22.13.4 - version: 22.13.4 + specifier: 22.13.9 + version: 22.13.9 '@types/react': specifier: 18.3.18 version: 18.3.18 @@ -331,8 +331,8 @@ packages: '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/node@22.13.4': - resolution: {integrity: sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg==} + '@types/node@22.13.9': + resolution: {integrity: sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==} '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -1365,11 +1365,11 @@ snapshots: '@types/bcrypt@5.0.2': dependencies: - '@types/node': 22.13.4 + '@types/node': 22.13.9 '@types/cookie@0.6.0': {} - '@types/node@22.13.4': + '@types/node@22.13.9': dependencies: undici-types: 6.20.0 From 54b7e118f8fd0131dc237c81b2f973ffae5862df Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 5 Mar 2025 03:08:39 +0000 Subject: [PATCH 183/216] Update dependency next to v15.2.1 --- package.json | 2 +- pnpm-lock.yaml | 88 +++++++++++++++++++++++++------------------------- 2 files changed, 45 insertions(+), 45 deletions(-) diff --git a/package.json b/package.json index 5ddd924..0efa369 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "autoprefixer": "10.4.20", "bcrypt": "^5.1.1", "clsx": "^2.1.1", - "next": "15.1.7", + "next": "15.2.1", "next-auth": "5.0.0-beta.25", "postcss": "8.5.3", "primeicons": "^7.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 814d08e..74f08e1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,11 +24,11 @@ importers: specifier: ^2.1.1 version: 2.1.1 next: - specifier: 15.1.7 - version: 15.1.7(@playwright/test@1.50.1)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) + specifier: 15.2.1 + version: 15.2.1(@playwright/test@1.50.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: specifier: 5.0.0-beta.25 - version: 5.0.0-beta.25(next@15.1.7(@playwright/test@1.50.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.2.1(@playwright/test@1.50.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: specifier: 8.5.3 version: 8.5.3 @@ -239,53 +239,53 @@ packages: resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true - '@next/env@15.1.7': - resolution: {integrity: sha512-d9jnRrkuOH7Mhi+LHav2XW91HOgTAWHxjMPkXMGBc9B2b7614P7kjt8tAplRvJpbSt4nbO1lugcT/kAaWzjlLQ==} + '@next/env@15.2.1': + resolution: {integrity: sha512-JmY0qvnPuS2NCWOz2bbby3Pe0VzdAQ7XpEB6uLIHmtXNfAsAO0KLQLkuAoc42Bxbo3/jMC3dcn9cdf+piCcG2Q==} - '@next/swc-darwin-arm64@15.1.7': - resolution: {integrity: sha512-hPFwzPJDpA8FGj7IKV3Yf1web3oz2YsR8du4amKw8d+jAOHfYHYFpMkoF6vgSY4W6vB29RtZEklK9ayinGiCmQ==} + '@next/swc-darwin-arm64@15.2.1': + resolution: {integrity: sha512-aWXT+5KEREoy3K5AKtiKwioeblmOvFFjd+F3dVleLvvLiQ/mD//jOOuUcx5hzcO9ISSw4lrqtUPntTpK32uXXQ==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.1.7': - resolution: {integrity: sha512-2qoas+fO3OQKkU0PBUfwTiw/EYpN+kdAx62cePRyY1LqKtP09Vp5UcUntfZYajop5fDFTjSxCHfZVRxzi+9FYQ==} + '@next/swc-darwin-x64@15.2.1': + resolution: {integrity: sha512-E/w8ervu4fcG5SkLhvn1NE/2POuDCDEy5gFbfhmnYXkyONZR68qbUlJlZwuN82o7BrBVAw+tkR8nTIjGiMW1jQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.1.7': - resolution: {integrity: sha512-sKLLwDX709mPdzxMnRIXLIT9zaX2w0GUlkLYQnKGoXeWUhcvpCrK+yevcwCJPdTdxZEUA0mOXGLdPsGkudGdnA==} + '@next/swc-linux-arm64-gnu@15.2.1': + resolution: {integrity: sha512-gXDX5lIboebbjhiMT6kFgu4svQyjoSed6dHyjx5uZsjlvTwOAnZpn13w9XDaIMFFHw7K8CpBK7HfDKw0VZvUXQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.1.7': - resolution: {integrity: sha512-zblK1OQbQWdC8fxdX4fpsHDw+VSpBPGEUX4PhSE9hkaWPrWoeIJn+baX53vbsbDRaDKd7bBNcXRovY1hEhFd7w==} + '@next/swc-linux-arm64-musl@15.2.1': + resolution: {integrity: sha512-3v0pF/adKZkBWfUffmB/ROa+QcNTrnmYG4/SS+r52HPwAK479XcWoES2I+7F7lcbqc7mTeVXrIvb4h6rR/iDKg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.1.7': - resolution: {integrity: sha512-GOzXutxuLvLHFDAPsMP2zDBMl1vfUHHpdNpFGhxu90jEzH6nNIgmtw/s1MDwpTOiM+MT5V8+I1hmVFeAUhkbgQ==} + '@next/swc-linux-x64-gnu@15.2.1': + resolution: {integrity: sha512-RbsVq2iB6KFJRZ2cHrU67jLVLKeuOIhnQB05ygu5fCNgg8oTewxweJE8XlLV+Ii6Y6u4EHwETdUiRNXIAfpBww==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.1.7': - resolution: {integrity: sha512-WrZ7jBhR7ATW1z5iEQ0ZJfE2twCNSXbpCSaAunF3BKcVeHFADSI/AW1y5Xt3DzTqPF1FzQlwQTewqetAABhZRQ==} + '@next/swc-linux-x64-musl@15.2.1': + resolution: {integrity: sha512-QHsMLAyAIu6/fWjHmkN/F78EFPKmhQlyX5C8pRIS2RwVA7z+t9cTb0IaYWC3EHLOTjsU7MNQW+n2xGXr11QPpg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.1.7': - resolution: {integrity: sha512-LDnj1f3OVbou1BqvvXVqouJZKcwq++mV2F+oFHptToZtScIEnhNRJAhJzqAtTE2dB31qDYL45xJwrc+bLeKM2Q==} + '@next/swc-win32-arm64-msvc@15.2.1': + resolution: {integrity: sha512-Gk42XZXo1cE89i3hPLa/9KZ8OuupTjkDmhLaMKFohjf9brOeZVEa3BQy1J9s9TWUqPhgAEbwv6B2+ciGfe54Vw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.1.7': - resolution: {integrity: sha512-dC01f1quuf97viOfW05/K8XYv2iuBgAxJZl7mbCKEjMgdQl5JjAKJ0D2qMKZCgPWDeFbFT0Q0nYWwytEW0DWTQ==} + '@next/swc-win32-x64-msvc@15.2.1': + resolution: {integrity: sha512-YjqXCl8QGhVlMR8uBftWk0iTmvtntr41PhG1kvzGp0sUP/5ehTM+cwx25hKE54J0CRnHYjSGjSH3gkHEaHIN9g==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -742,8 +742,8 @@ packages: nodemailer: optional: true - next@15.1.7: - resolution: {integrity: sha512-GNeINPGS9c6OZKCvKypbL8GTsT5GhWPp4DM0fzkXJuXMilOO2EeFxuAY6JZbtk6XIl6Ws10ag3xRINDjSO5+wg==} + next@15.2.1: + resolution: {integrity: sha512-zxbsdQv3OqWXybK5tMkPCBKyhIz63RstJ+NvlfkaLMc/m5MwXgz2e92k+hSKcyBpyADhMk2C31RIiaDjUZae7g==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -1305,30 +1305,30 @@ snapshots: - encoding - supports-color - '@next/env@15.1.7': {} + '@next/env@15.2.1': {} - '@next/swc-darwin-arm64@15.1.7': + '@next/swc-darwin-arm64@15.2.1': optional: true - '@next/swc-darwin-x64@15.1.7': + '@next/swc-darwin-x64@15.2.1': optional: true - '@next/swc-linux-arm64-gnu@15.1.7': + '@next/swc-linux-arm64-gnu@15.2.1': optional: true - '@next/swc-linux-arm64-musl@15.1.7': + '@next/swc-linux-arm64-musl@15.2.1': optional: true - '@next/swc-linux-x64-gnu@15.1.7': + '@next/swc-linux-x64-gnu@15.2.1': optional: true - '@next/swc-linux-x64-musl@15.1.7': + '@next/swc-linux-x64-musl@15.2.1': optional: true - '@next/swc-win32-arm64-msvc@15.1.7': + '@next/swc-win32-arm64-msvc@15.2.1': optional: true - '@next/swc-win32-x64-msvc@15.1.7': + '@next/swc-win32-x64-msvc@15.2.1': optional: true '@nodelib/fs.scandir@2.1.5': @@ -1740,15 +1740,15 @@ snapshots: nanoid@3.3.8: {} - next-auth@5.0.0-beta.25(next@15.1.7(@playwright/test@1.50.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.2.1(@playwright/test@1.50.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: '@auth/core': 0.37.2 - next: 15.1.7(@playwright/test@1.50.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.2.1(@playwright/test@1.50.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@15.1.7(@playwright/test@1.50.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.2.1(@playwright/test@1.50.1)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): dependencies: - '@next/env': 15.1.7 + '@next/env': 15.2.1 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 @@ -1758,14 +1758,14 @@ snapshots: 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) optionalDependencies: - '@next/swc-darwin-arm64': 15.1.7 - '@next/swc-darwin-x64': 15.1.7 - '@next/swc-linux-arm64-gnu': 15.1.7 - '@next/swc-linux-arm64-musl': 15.1.7 - '@next/swc-linux-x64-gnu': 15.1.7 - '@next/swc-linux-x64-musl': 15.1.7 - '@next/swc-win32-arm64-msvc': 15.1.7 - '@next/swc-win32-x64-msvc': 15.1.7 + '@next/swc-darwin-arm64': 15.2.1 + '@next/swc-darwin-x64': 15.2.1 + '@next/swc-linux-arm64-gnu': 15.2.1 + '@next/swc-linux-arm64-musl': 15.2.1 + '@next/swc-linux-x64-gnu': 15.2.1 + '@next/swc-linux-x64-musl': 15.2.1 + '@next/swc-win32-arm64-msvc': 15.2.1 + '@next/swc-win32-x64-msvc': 15.2.1 '@playwright/test': 1.50.1 sharp: 0.33.5 transitivePeerDependencies: From aae8e2191db8ac5203bdfc30e351d44c53ebc4b8 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 6 Mar 2025 03:10:40 +0000 Subject: [PATCH 184/216] Update dependency node to v23.9.0 --- .nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nvmrc b/.nvmrc index 801a2a0..138eca4 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -23.8.0 \ No newline at end of file +23.9.0 \ No newline at end of file From 73b42d4850553a0aec84bdc3e953f79576787683 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 7 Mar 2025 03:06:20 +0000 Subject: [PATCH 185/216] Update pnpm to v9.15.7 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0efa369..067ef96 100644 --- a/package.json +++ b/package.json @@ -34,5 +34,5 @@ "engines": { "node": ">=23.0.0" }, - "packageManager": "pnpm@9.15.6+sha512.139cab068fdf0b751268179ac5f909b5be72afb4a75c513d1905d151befc8977b593d3cf8671ed83d4d6637c5c94b98ffbce108125de4a5a27a31233601a99de" + "packageManager": "pnpm@9.15.7+sha512.ed98f9c748442673c46964b70345bd2282c9b305e8eae539b34ab31d6ef24ef8dd59d8b55f27466f705500b009d9c113471cf87e544f3d5036b297330c26e996" } From 7eb5ff8392492632a60b5028f3f2893a8a54b1d1 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 8 Mar 2025 03:04:29 +0000 Subject: [PATCH 186/216] Update dependency @playwright/test to v1.51.0 --- pnpm-lock.yaml | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 74f08e1..19d629f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,10 +25,10 @@ importers: version: 2.1.1 next: specifier: 15.2.1 - version: 15.2.1(@playwright/test@1.50.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.2.1(@playwright/test@1.51.0)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) next-auth: specifier: 5.0.0-beta.25 - version: 5.0.0-beta.25(next@15.2.1(@playwright/test@1.50.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.2.1(@playwright/test@1.51.0)(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: specifier: 8.5.3 version: 8.5.3 @@ -62,7 +62,7 @@ importers: devDependencies: '@playwright/test': specifier: ^1.46.0 - version: 1.50.1 + version: 1.51.0 '@types/bcrypt': specifier: ^5.0.2 version: 5.0.2 @@ -309,8 +309,8 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.50.1': - resolution: {integrity: sha512-Jii3aBg+CEDpgnuDxEp/h7BimHcUTDlpEtce89xEumlJ5ef2hqepZ+PWp1DDpYC/VO9fmWVI1IlEaoI5fK9FXQ==} + '@playwright/test@1.51.0': + resolution: {integrity: sha512-dJ0dMbZeHhI+wb77+ljx/FeC8VBP6j/rj9OAojO08JI80wTZy6vRk9KvHKiDCUh4iMpEiseMgqRBIeW+eKX6RA==} engines: {node: '>=18'} hasBin: true @@ -842,13 +842,13 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - playwright-core@1.50.1: - resolution: {integrity: sha512-ra9fsNWayuYumt+NiM069M6OkcRb1FZSK8bgi66AtpFoWkg2+y0bJSNmkFrWhMbEBbVKC/EruAHH3g0zmtwGmQ==} + playwright-core@1.51.0: + resolution: {integrity: sha512-x47yPE3Zwhlil7wlNU/iktF7t2r/URR3VLbH6EknJd/04Qc/PSJ0EY3CMXipmglLG+zyRxW6HNo2EGbKLHPWMg==} engines: {node: '>=18'} hasBin: true - playwright@1.50.1: - resolution: {integrity: sha512-G8rwsOQJ63XG6BbKj2w5rHeavFjy5zynBA9zsJMMtBoe/Uf757oG12NXz6e6OirF7RCrTVAKFXbLmn1RbL7Qaw==} + playwright@1.51.0: + resolution: {integrity: sha512-442pTfGM0xxfCYxuBa/Pu6B2OqxqqaYq39JS8QDMGThUvIOCd6s0ANDog3uwA0cHavVlnTQzGCN7Id2YekDSXA==} engines: {node: '>=18'} hasBin: true @@ -1348,9 +1348,9 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.50.1': + '@playwright/test@1.51.0': dependencies: - playwright: 1.50.1 + playwright: 1.51.0 '@swc/counter@0.1.3': {} @@ -1740,13 +1740,13 @@ snapshots: nanoid@3.3.8: {} - next-auth@5.0.0-beta.25(next@15.2.1(@playwright/test@1.50.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.2.1(@playwright/test@1.51.0)(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: '@auth/core': 0.37.2 - next: 15.2.1(@playwright/test@1.50.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.2.1(@playwright/test@1.51.0)(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@15.2.1(@playwright/test@1.50.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.2.1(@playwright/test@1.51.0)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): dependencies: '@next/env': 15.2.1 '@swc/counter': 0.1.3 @@ -1766,7 +1766,7 @@ snapshots: '@next/swc-linux-x64-musl': 15.2.1 '@next/swc-win32-arm64-msvc': 15.2.1 '@next/swc-win32-x64-msvc': 15.2.1 - '@playwright/test': 1.50.1 + '@playwright/test': 1.51.0 sharp: 0.33.5 transitivePeerDependencies: - '@babel/core' @@ -1826,11 +1826,11 @@ snapshots: pirates@4.0.6: {} - playwright-core@1.50.1: {} + playwright-core@1.51.0: {} - playwright@1.50.1: + playwright@1.51.0: dependencies: - playwright-core: 1.50.1 + playwright-core: 1.51.0 optionalDependencies: fsevents: 2.3.2 From 6dd213709e8807fa7185b3a9569a1d9ddba60032 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 9 Mar 2025 16:44:26 +0000 Subject: [PATCH 187/216] Update dependency autoprefixer to v10.4.21 --- package.json | 2 +- pnpm-lock.yaml | 68 +++++++++++++++++++++++++------------------------- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/package.json b/package.json index 067ef96..0e58564 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "dependencies": { "@heroicons/react": "^2.1.4", "@tailwindcss/forms": "^0.5.7", - "autoprefixer": "10.4.20", + "autoprefixer": "10.4.21", "bcrypt": "^5.1.1", "clsx": "^2.1.1", "next": "15.2.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 19d629f..4690c50 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,8 +15,8 @@ importers: specifier: ^0.5.7 version: 0.5.10(tailwindcss@3.4.17) autoprefixer: - specifier: 10.4.20 - version: 10.4.20(postcss@8.5.3) + specifier: 10.4.21 + version: 10.4.21(postcss@8.5.3) bcrypt: specifier: ^5.1.1 version: 5.1.1 @@ -391,8 +391,8 @@ packages: arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - autoprefixer@10.4.20: - resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} + autoprefixer@10.4.21: + resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: @@ -419,8 +419,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.23.3: - resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -435,6 +435,9 @@ packages: caniuse-lite@1.0.30001651: resolution: {integrity: sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==} + caniuse-lite@1.0.30001702: + resolution: {integrity: sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==} + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -522,8 +525,8 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.5.6: - resolution: {integrity: sha512-jwXWsM5RPf6j9dPYzaorcBSUg6AiqocPEyMpkchkvntaH9HGfOOMZwxMJjDY/XEs3T5dM7uyH1VhRMkqUU9qVw==} + electron-to-chromium@1.5.113: + resolution: {integrity: sha512-wjT2O4hX+wdWPJ76gWSkMhcHAV2PTMX+QetUCPYEdCIe+cxmgzzSSiGRCKW8nuh4mwKZlpv0xvoW7OF2X+wmHg==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -531,8 +534,8 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} fast-glob@3.3.2: @@ -775,8 +778,8 @@ packages: encoding: optional: true - node-releases@2.0.18: - resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} nopt@5.0.0: resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} @@ -824,9 +827,6 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -1107,8 +1107,8 @@ packages: undici-types@6.20.0: resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} - update-browserslist-db@1.1.0: - resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -1422,13 +1422,13 @@ snapshots: arg@5.0.2: {} - autoprefixer@10.4.20(postcss@8.5.3): + autoprefixer@10.4.21(postcss@8.5.3): dependencies: - browserslist: 4.23.3 - caniuse-lite: 1.0.30001651 + browserslist: 4.24.4 + caniuse-lite: 1.0.30001702 fraction.js: 4.3.7 normalize-range: 0.1.2 - picocolors: 1.0.1 + picocolors: 1.1.1 postcss: 8.5.3 postcss-value-parser: 4.2.0 @@ -1457,12 +1457,12 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.23.3: + browserslist@4.24.4: dependencies: - caniuse-lite: 1.0.30001651 - electron-to-chromium: 1.5.6 - node-releases: 2.0.18 - update-browserslist-db: 1.1.0(browserslist@4.23.3) + caniuse-lite: 1.0.30001702 + electron-to-chromium: 1.5.113 + node-releases: 2.0.19 + update-browserslist-db: 1.1.3(browserslist@4.24.4) busboy@1.6.0: dependencies: @@ -1472,6 +1472,8 @@ snapshots: caniuse-lite@1.0.30001651: {} + caniuse-lite@1.0.30001702: {} + chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -1547,13 +1549,13 @@ snapshots: eastasianwidth@0.2.0: {} - electron-to-chromium@1.5.6: {} + electron-to-chromium@1.5.113: {} emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} - escalade@3.1.2: {} + escalade@3.2.0: {} fast-glob@3.3.2: dependencies: @@ -1778,7 +1780,7 @@ snapshots: dependencies: whatwg-url: 5.0.0 - node-releases@2.0.18: {} + node-releases@2.0.19: {} nopt@5.0.0: dependencies: @@ -1816,8 +1818,6 @@ snapshots: lru-cache: 10.2.2 minipass: 7.1.2 - picocolors@1.0.1: {} - picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -2113,10 +2113,10 @@ snapshots: undici-types@6.20.0: {} - update-browserslist-db@1.1.0(browserslist@4.23.3): + update-browserslist-db@1.1.3(browserslist@4.24.4): dependencies: - browserslist: 4.23.3 - escalade: 3.1.2 + browserslist: 4.24.4 + escalade: 3.2.0 picocolors: 1.1.1 use-debounce@10.0.4(react@19.0.0-rc-f38c22b244-20240704): From ce46cd9b258f81f58771b09876f6034477afb4cf Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 11 Mar 2025 03:06:08 +0000 Subject: [PATCH 188/216] Update dependency @types/node to v22.13.10 --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 0e58564..77ecba7 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@playwright/test": "^1.46.0", "@types/bcrypt": "^5.0.2", - "@types/node": "22.13.9", + "@types/node": "22.13.10", "@types/react": "18.3.18", "@types/react-dom": "18.3.5" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4690c50..785799e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,8 +67,8 @@ importers: specifier: ^5.0.2 version: 5.0.2 '@types/node': - specifier: 22.13.9 - version: 22.13.9 + specifier: 22.13.10 + version: 22.13.10 '@types/react': specifier: 18.3.18 version: 18.3.18 @@ -331,8 +331,8 @@ packages: '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/node@22.13.9': - resolution: {integrity: sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==} + '@types/node@22.13.10': + resolution: {integrity: sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==} '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -1365,11 +1365,11 @@ snapshots: '@types/bcrypt@5.0.2': dependencies: - '@types/node': 22.13.9 + '@types/node': 22.13.10 '@types/cookie@0.6.0': {} - '@types/node@22.13.9': + '@types/node@22.13.10': dependencies: undici-types: 6.20.0 From 63a258c39dbff5a2c9aae2d197d4512ee1d23a30 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 12 Mar 2025 03:06:52 +0000 Subject: [PATCH 189/216] Update dependency next to v15.2.2 --- package.json | 2 +- pnpm-lock.yaml | 95 ++++++++++++++++++++++++-------------------------- 2 files changed, 46 insertions(+), 51 deletions(-) diff --git a/package.json b/package.json index 77ecba7..04085b1 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "autoprefixer": "10.4.21", "bcrypt": "^5.1.1", "clsx": "^2.1.1", - "next": "15.2.1", + "next": "15.2.2", "next-auth": "5.0.0-beta.25", "postcss": "8.5.3", "primeicons": "^7.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 785799e..2769199 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,11 +24,11 @@ importers: specifier: ^2.1.1 version: 2.1.1 next: - specifier: 15.2.1 - version: 15.2.1(@playwright/test@1.51.0)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) + specifier: 15.2.2 + version: 15.2.2(@playwright/test@1.51.0)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) next-auth: specifier: 5.0.0-beta.25 - version: 5.0.0-beta.25(next@15.2.1(@playwright/test@1.51.0)(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.2.2(@playwright/test@1.51.0)(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: specifier: 8.5.3 version: 8.5.3 @@ -239,53 +239,53 @@ packages: resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true - '@next/env@15.2.1': - resolution: {integrity: sha512-JmY0qvnPuS2NCWOz2bbby3Pe0VzdAQ7XpEB6uLIHmtXNfAsAO0KLQLkuAoc42Bxbo3/jMC3dcn9cdf+piCcG2Q==} + '@next/env@15.2.2': + resolution: {integrity: sha512-yWgopCfA9XDR8ZH3taB5nRKtKJ1Q5fYsTOuYkzIIoS8TJ0UAUKAGF73JnGszbjk2ufAQDj6mDdgsJAFx5CLtYQ==} - '@next/swc-darwin-arm64@15.2.1': - resolution: {integrity: sha512-aWXT+5KEREoy3K5AKtiKwioeblmOvFFjd+F3dVleLvvLiQ/mD//jOOuUcx5hzcO9ISSw4lrqtUPntTpK32uXXQ==} + '@next/swc-darwin-arm64@15.2.2': + resolution: {integrity: sha512-HNBRnz+bkZ+KfyOExpUxTMR0Ow8nkkcE6IlsdEa9W/rI7gefud19+Sn1xYKwB9pdCdxIP1lPru/ZfjfA+iT8pw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.2.1': - resolution: {integrity: sha512-E/w8ervu4fcG5SkLhvn1NE/2POuDCDEy5gFbfhmnYXkyONZR68qbUlJlZwuN82o7BrBVAw+tkR8nTIjGiMW1jQ==} + '@next/swc-darwin-x64@15.2.2': + resolution: {integrity: sha512-mJOUwp7al63tDpLpEFpKwwg5jwvtL1lhRW2fI1Aog0nYCPAhxbJsaZKdoVyPZCy8MYf/iQVNDuk/+i29iLCzIA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.2.1': - resolution: {integrity: sha512-gXDX5lIboebbjhiMT6kFgu4svQyjoSed6dHyjx5uZsjlvTwOAnZpn13w9XDaIMFFHw7K8CpBK7HfDKw0VZvUXQ==} + '@next/swc-linux-arm64-gnu@15.2.2': + resolution: {integrity: sha512-5ZZ0Zwy3SgMr7MfWtRE7cQWVssfOvxYfD9O7XHM7KM4nrf5EOeqwq67ZXDgo86LVmffgsu5tPO57EeFKRnrfSQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.2.1': - resolution: {integrity: sha512-3v0pF/adKZkBWfUffmB/ROa+QcNTrnmYG4/SS+r52HPwAK479XcWoES2I+7F7lcbqc7mTeVXrIvb4h6rR/iDKg==} + '@next/swc-linux-arm64-musl@15.2.2': + resolution: {integrity: sha512-cgKWBuFMLlJ4TWcFHl1KOaVVUAF8vy4qEvX5KsNd0Yj5mhu989QFCq1WjuaEbv/tO1ZpsQI6h/0YR8bLwEi+nA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.2.1': - resolution: {integrity: sha512-RbsVq2iB6KFJRZ2cHrU67jLVLKeuOIhnQB05ygu5fCNgg8oTewxweJE8XlLV+Ii6Y6u4EHwETdUiRNXIAfpBww==} + '@next/swc-linux-x64-gnu@15.2.2': + resolution: {integrity: sha512-c3kWSOSsVL8rcNBBfOq1+/j2PKs2nsMwJUV4icUxRgGBwUOfppeh7YhN5s79enBQFU+8xRgVatFkhHU1QW7yUA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.2.1': - resolution: {integrity: sha512-QHsMLAyAIu6/fWjHmkN/F78EFPKmhQlyX5C8pRIS2RwVA7z+t9cTb0IaYWC3EHLOTjsU7MNQW+n2xGXr11QPpg==} + '@next/swc-linux-x64-musl@15.2.2': + resolution: {integrity: sha512-PXTW9PLTxdNlVYgPJ0equojcq1kNu5NtwcNjRjHAB+/sdoKZ+X8FBu70fdJFadkxFIGekQTyRvPMFF+SOJaQjw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.2.1': - resolution: {integrity: sha512-Gk42XZXo1cE89i3hPLa/9KZ8OuupTjkDmhLaMKFohjf9brOeZVEa3BQy1J9s9TWUqPhgAEbwv6B2+ciGfe54Vw==} + '@next/swc-win32-arm64-msvc@15.2.2': + resolution: {integrity: sha512-nG644Es5llSGEcTaXhnGWR/aThM/hIaz0jx4MDg4gWC8GfTCp8eDBWZ77CVuv2ha/uL9Ce+nPTfYkSLG67/sHg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.2.1': - resolution: {integrity: sha512-YjqXCl8QGhVlMR8uBftWk0iTmvtntr41PhG1kvzGp0sUP/5ehTM+cwx25hKE54J0CRnHYjSGjSH3gkHEaHIN9g==} + '@next/swc-win32-x64-msvc@15.2.2': + resolution: {integrity: sha512-52nWy65S/R6/kejz3jpvHAjZDPKIbEQu4x9jDBzmB9jJfuOy5rspjKu4u77+fI4M/WzLXrrQd57hlFGzz1ubcQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -432,9 +432,6 @@ packages: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - caniuse-lite@1.0.30001651: - resolution: {integrity: sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==} - caniuse-lite@1.0.30001702: resolution: {integrity: sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==} @@ -745,8 +742,8 @@ packages: nodemailer: optional: true - next@15.2.1: - resolution: {integrity: sha512-zxbsdQv3OqWXybK5tMkPCBKyhIz63RstJ+NvlfkaLMc/m5MwXgz2e92k+hSKcyBpyADhMk2C31RIiaDjUZae7g==} + next@15.2.2: + resolution: {integrity: sha512-dgp8Kcx5XZRjMw2KNwBtUzhngRaURPioxoNIVl5BOyJbhi9CUgEtKDO7fx5wh8Z8vOVX1nYZ9meawJoRrlASYA==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -1305,30 +1302,30 @@ snapshots: - encoding - supports-color - '@next/env@15.2.1': {} + '@next/env@15.2.2': {} - '@next/swc-darwin-arm64@15.2.1': + '@next/swc-darwin-arm64@15.2.2': optional: true - '@next/swc-darwin-x64@15.2.1': + '@next/swc-darwin-x64@15.2.2': optional: true - '@next/swc-linux-arm64-gnu@15.2.1': + '@next/swc-linux-arm64-gnu@15.2.2': optional: true - '@next/swc-linux-arm64-musl@15.2.1': + '@next/swc-linux-arm64-musl@15.2.2': optional: true - '@next/swc-linux-x64-gnu@15.2.1': + '@next/swc-linux-x64-gnu@15.2.2': optional: true - '@next/swc-linux-x64-musl@15.2.1': + '@next/swc-linux-x64-musl@15.2.2': optional: true - '@next/swc-win32-arm64-msvc@15.2.1': + '@next/swc-win32-arm64-msvc@15.2.2': optional: true - '@next/swc-win32-x64-msvc@15.2.1': + '@next/swc-win32-x64-msvc@15.2.2': optional: true '@nodelib/fs.scandir@2.1.5': @@ -1470,8 +1467,6 @@ snapshots: camelcase-css@2.0.1: {} - caniuse-lite@1.0.30001651: {} - caniuse-lite@1.0.30001702: {} chokidar@3.6.0: @@ -1742,32 +1737,32 @@ snapshots: nanoid@3.3.8: {} - next-auth@5.0.0-beta.25(next@15.2.1(@playwright/test@1.51.0)(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.2.2(@playwright/test@1.51.0)(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: '@auth/core': 0.37.2 - next: 15.2.1(@playwright/test@1.51.0)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) + next: 15.2.2(@playwright/test@1.51.0)(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@15.2.1(@playwright/test@1.51.0)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): + next@15.2.2(@playwright/test@1.51.0)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): dependencies: - '@next/env': 15.2.1 + '@next/env': 15.2.2 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 - caniuse-lite: 1.0.30001651 + caniuse-lite: 1.0.30001702 postcss: 8.4.31 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) optionalDependencies: - '@next/swc-darwin-arm64': 15.2.1 - '@next/swc-darwin-x64': 15.2.1 - '@next/swc-linux-arm64-gnu': 15.2.1 - '@next/swc-linux-arm64-musl': 15.2.1 - '@next/swc-linux-x64-gnu': 15.2.1 - '@next/swc-linux-x64-musl': 15.2.1 - '@next/swc-win32-arm64-msvc': 15.2.1 - '@next/swc-win32-x64-msvc': 15.2.1 + '@next/swc-darwin-arm64': 15.2.2 + '@next/swc-darwin-x64': 15.2.2 + '@next/swc-linux-arm64-gnu': 15.2.2 + '@next/swc-linux-arm64-musl': 15.2.2 + '@next/swc-linux-x64-gnu': 15.2.2 + '@next/swc-linux-x64-musl': 15.2.2 + '@next/swc-win32-arm64-msvc': 15.2.2 + '@next/swc-win32-x64-msvc': 15.2.2 '@playwright/test': 1.51.0 sharp: 0.33.5 transitivePeerDependencies: From e7dea7bf948a80e5f0f35dda32ff93f6379beb9e Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 13 Mar 2025 03:07:37 +0000 Subject: [PATCH 190/216] Update dependency primereact to v10.9.3 --- pnpm-lock.yaml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2769199..d1fd23e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,7 +37,7 @@ importers: version: 7.0.0 primereact: specifier: ^10.8.2 - version: 10.9.2(@types/react@18.3.18)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) + version: 10.9.3(@types/react@18.3.18)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) react: specifier: 19.0.0-rc-f38c22b244-20240704 version: 19.0.0-rc-f38c22b244-20240704 @@ -96,8 +96,8 @@ packages: nodemailer: optional: true - '@babel/runtime@7.26.7': - resolution: {integrity: sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==} + '@babel/runtime@7.26.10': + resolution: {integrity: sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==} engines: {node: '>=6.9.0'} '@emnapi/runtime@1.2.0': @@ -908,8 +908,8 @@ packages: primeicons@7.0.0: resolution: {integrity: sha512-jK3Et9UzwzTsd6tzl2RmwrVY/b8raJ3QZLzoDACj+oTJ0oX7L9Hy+XnVwgo4QVKlKpnP/Ur13SXV/pVh4LzaDw==} - primereact@10.9.2: - resolution: {integrity: sha512-uJTghCPlnPWJc0mvkqYJDj6bl4udROPGrMEfV4CPh7UurMS+E8b+82ABZ+OPWibQOWxnEQl5NXcfG4F/7YRXwA==} + primereact@10.9.3: + resolution: {integrity: sha512-mvIVw4Ap5HfEviWdnPFY14h9Bf8k4rTMkq7swHsJhNfgyH88osrdbjuDQ66mPwjPgI6DwqN2jMo4zxNNxe7nGQ==} engines: {node: '>=14.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -1173,7 +1173,7 @@ snapshots: preact: 10.11.3 preact-render-to-string: 5.2.3(preact@10.11.3) - '@babel/runtime@7.26.7': + '@babel/runtime@7.26.10': dependencies: regenerator-runtime: 0.14.1 @@ -1539,7 +1539,7 @@ snapshots: dom-helpers@5.2.1: dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.10 csstype: 3.1.3 eastasianwidth@0.2.0: {} @@ -1883,7 +1883,7 @@ snapshots: primeicons@7.0.0: {} - primereact@10.9.2(@types/react@18.3.18)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): + primereact@10.9.3(@types/react@18.3.18)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): dependencies: '@types/react-transition-group': 4.4.12(@types/react@18.3.18) react: 19.0.0-rc-f38c22b244-20240704 @@ -1909,7 +1909,7 @@ snapshots: react-transition-group@4.4.5(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.26.10 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 From f5cdb559cfa51915b546708f2cc094cbfef74259 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 14 Mar 2025 03:08:04 +0000 Subject: [PATCH 191/216] Update pnpm to v9.15.9 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 04085b1..86e6345 100644 --- a/package.json +++ b/package.json @@ -34,5 +34,5 @@ "engines": { "node": ">=23.0.0" }, - "packageManager": "pnpm@9.15.7+sha512.ed98f9c748442673c46964b70345bd2282c9b305e8eae539b34ab31d6ef24ef8dd59d8b55f27466f705500b009d9c113471cf87e544f3d5036b297330c26e996" + "packageManager": "pnpm@9.15.9+sha512.68046141893c66fad01c079231128e9afb89ef87e2691d69e4d40eee228988295fd4682181bae55b58418c3a253bde65a505ec7c5f9403ece5cc3cd37dcf2531" } From 6cde7a90234e3ce88c3f833c509f625acaff37bf Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 18 Mar 2025 03:04:57 +0000 Subject: [PATCH 192/216] Update dependency @playwright/test to v1.51.1 --- pnpm-lock.yaml | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d1fd23e..bad9b05 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,10 +25,10 @@ importers: version: 2.1.1 next: specifier: 15.2.2 - version: 15.2.2(@playwright/test@1.51.0)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) + version: 15.2.2(@playwright/test@1.51.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: specifier: 5.0.0-beta.25 - version: 5.0.0-beta.25(next@15.2.2(@playwright/test@1.51.0)(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.2.2(@playwright/test@1.51.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: specifier: 8.5.3 version: 8.5.3 @@ -62,7 +62,7 @@ importers: devDependencies: '@playwright/test': specifier: ^1.46.0 - version: 1.51.0 + version: 1.51.1 '@types/bcrypt': specifier: ^5.0.2 version: 5.0.2 @@ -309,8 +309,8 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.51.0': - resolution: {integrity: sha512-dJ0dMbZeHhI+wb77+ljx/FeC8VBP6j/rj9OAojO08JI80wTZy6vRk9KvHKiDCUh4iMpEiseMgqRBIeW+eKX6RA==} + '@playwright/test@1.51.1': + resolution: {integrity: sha512-nM+kEaTSAoVlXmMPH10017vn3FSiFqr/bh4fKg9vmAdMfd9SDqRZNvPSiAHADc/itWak+qPvMPZQOPwCBW7k7Q==} engines: {node: '>=18'} hasBin: true @@ -839,13 +839,13 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - playwright-core@1.51.0: - resolution: {integrity: sha512-x47yPE3Zwhlil7wlNU/iktF7t2r/URR3VLbH6EknJd/04Qc/PSJ0EY3CMXipmglLG+zyRxW6HNo2EGbKLHPWMg==} + playwright-core@1.51.1: + resolution: {integrity: sha512-/crRMj8+j/Nq5s8QcvegseuyeZPxpQCZb6HNk3Sos3BlZyAknRjoyJPFWkpNn8v0+P3WiwqFF8P+zQo4eqiNuw==} engines: {node: '>=18'} hasBin: true - playwright@1.51.0: - resolution: {integrity: sha512-442pTfGM0xxfCYxuBa/Pu6B2OqxqqaYq39JS8QDMGThUvIOCd6s0ANDog3uwA0cHavVlnTQzGCN7Id2YekDSXA==} + playwright@1.51.1: + resolution: {integrity: sha512-kkx+MB2KQRkyxjYPc3a0wLZZoDczmppyGJIvQ43l+aZihkaVvmu/21kiyaHeHjiFxjxNNFnUncKmcGIyOojsaw==} engines: {node: '>=18'} hasBin: true @@ -1345,9 +1345,9 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.51.0': + '@playwright/test@1.51.1': dependencies: - playwright: 1.51.0 + playwright: 1.51.1 '@swc/counter@0.1.3': {} @@ -1737,13 +1737,13 @@ snapshots: nanoid@3.3.8: {} - next-auth@5.0.0-beta.25(next@15.2.2(@playwright/test@1.51.0)(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.2.2(@playwright/test@1.51.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: '@auth/core': 0.37.2 - next: 15.2.2(@playwright/test@1.51.0)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) + next: 15.2.2(@playwright/test@1.51.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@15.2.2(@playwright/test@1.51.0)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): + next@15.2.2(@playwright/test@1.51.1)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): dependencies: '@next/env': 15.2.2 '@swc/counter': 0.1.3 @@ -1763,7 +1763,7 @@ snapshots: '@next/swc-linux-x64-musl': 15.2.2 '@next/swc-win32-arm64-msvc': 15.2.2 '@next/swc-win32-x64-msvc': 15.2.2 - '@playwright/test': 1.51.0 + '@playwright/test': 1.51.1 sharp: 0.33.5 transitivePeerDependencies: - '@babel/core' @@ -1821,11 +1821,11 @@ snapshots: pirates@4.0.6: {} - playwright-core@1.51.0: {} + playwright-core@1.51.1: {} - playwright@1.51.0: + playwright@1.51.1: dependencies: - playwright-core: 1.51.0 + playwright-core: 1.51.1 optionalDependencies: fsevents: 2.3.2 From f512872f16dc2ed04715a55bf3d331080b5a9cf4 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 19 Mar 2025 03:04:25 +0000 Subject: [PATCH 193/216] Update dependency next to v15.2.3 --- package.json | 2 +- pnpm-lock.yaml | 88 +++++++++++++++++++++++++------------------------- 2 files changed, 45 insertions(+), 45 deletions(-) diff --git a/package.json b/package.json index 86e6345..2f0b7d3 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "autoprefixer": "10.4.21", "bcrypt": "^5.1.1", "clsx": "^2.1.1", - "next": "15.2.2", + "next": "15.2.3", "next-auth": "5.0.0-beta.25", "postcss": "8.5.3", "primeicons": "^7.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bad9b05..7721896 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,11 +24,11 @@ importers: specifier: ^2.1.1 version: 2.1.1 next: - specifier: 15.2.2 - version: 15.2.2(@playwright/test@1.51.1)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) + specifier: 15.2.3 + version: 15.2.3(@playwright/test@1.51.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: specifier: 5.0.0-beta.25 - version: 5.0.0-beta.25(next@15.2.2(@playwright/test@1.51.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.2.3(@playwright/test@1.51.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: specifier: 8.5.3 version: 8.5.3 @@ -239,53 +239,53 @@ packages: resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true - '@next/env@15.2.2': - resolution: {integrity: sha512-yWgopCfA9XDR8ZH3taB5nRKtKJ1Q5fYsTOuYkzIIoS8TJ0UAUKAGF73JnGszbjk2ufAQDj6mDdgsJAFx5CLtYQ==} + '@next/env@15.2.3': + resolution: {integrity: sha512-a26KnbW9DFEUsSxAxKBORR/uD9THoYoKbkpFywMN/AFvboTt94b8+g/07T8J6ACsdLag8/PDU60ov4rPxRAixw==} - '@next/swc-darwin-arm64@15.2.2': - resolution: {integrity: sha512-HNBRnz+bkZ+KfyOExpUxTMR0Ow8nkkcE6IlsdEa9W/rI7gefud19+Sn1xYKwB9pdCdxIP1lPru/ZfjfA+iT8pw==} + '@next/swc-darwin-arm64@15.2.3': + resolution: {integrity: sha512-uaBhA8aLbXLqwjnsHSkxs353WrRgQgiFjduDpc7YXEU0B54IKx3vU+cxQlYwPCyC8uYEEX7THhtQQsfHnvv8dw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.2.2': - resolution: {integrity: sha512-mJOUwp7al63tDpLpEFpKwwg5jwvtL1lhRW2fI1Aog0nYCPAhxbJsaZKdoVyPZCy8MYf/iQVNDuk/+i29iLCzIA==} + '@next/swc-darwin-x64@15.2.3': + resolution: {integrity: sha512-pVwKvJ4Zk7h+4hwhqOUuMx7Ib02u3gDX3HXPKIShBi9JlYllI0nU6TWLbPT94dt7FSi6mSBhfc2JrHViwqbOdw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.2.2': - resolution: {integrity: sha512-5ZZ0Zwy3SgMr7MfWtRE7cQWVssfOvxYfD9O7XHM7KM4nrf5EOeqwq67ZXDgo86LVmffgsu5tPO57EeFKRnrfSQ==} + '@next/swc-linux-arm64-gnu@15.2.3': + resolution: {integrity: sha512-50ibWdn2RuFFkOEUmo9NCcQbbV9ViQOrUfG48zHBCONciHjaUKtHcYFiCwBVuzD08fzvzkWuuZkd4AqbvKO7UQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.2.2': - resolution: {integrity: sha512-cgKWBuFMLlJ4TWcFHl1KOaVVUAF8vy4qEvX5KsNd0Yj5mhu989QFCq1WjuaEbv/tO1ZpsQI6h/0YR8bLwEi+nA==} + '@next/swc-linux-arm64-musl@15.2.3': + resolution: {integrity: sha512-2gAPA7P652D3HzR4cLyAuVYwYqjG0mt/3pHSWTCyKZq/N/dJcUAEoNQMyUmwTZWCJRKofB+JPuDVP2aD8w2J6Q==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.2.2': - resolution: {integrity: sha512-c3kWSOSsVL8rcNBBfOq1+/j2PKs2nsMwJUV4icUxRgGBwUOfppeh7YhN5s79enBQFU+8xRgVatFkhHU1QW7yUA==} + '@next/swc-linux-x64-gnu@15.2.3': + resolution: {integrity: sha512-ODSKvrdMgAJOVU4qElflYy1KSZRM3M45JVbeZu42TINCMG3anp7YCBn80RkISV6bhzKwcUqLBAmOiWkaGtBA9w==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.2.2': - resolution: {integrity: sha512-PXTW9PLTxdNlVYgPJ0equojcq1kNu5NtwcNjRjHAB+/sdoKZ+X8FBu70fdJFadkxFIGekQTyRvPMFF+SOJaQjw==} + '@next/swc-linux-x64-musl@15.2.3': + resolution: {integrity: sha512-ZR9kLwCWrlYxwEoytqPi1jhPd1TlsSJWAc+H/CJHmHkf2nD92MQpSRIURR1iNgA/kuFSdxB8xIPt4p/T78kwsg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.2.2': - resolution: {integrity: sha512-nG644Es5llSGEcTaXhnGWR/aThM/hIaz0jx4MDg4gWC8GfTCp8eDBWZ77CVuv2ha/uL9Ce+nPTfYkSLG67/sHg==} + '@next/swc-win32-arm64-msvc@15.2.3': + resolution: {integrity: sha512-+G2FrDcfm2YDbhDiObDU/qPriWeiz/9cRR0yMWJeTLGGX6/x8oryO3tt7HhodA1vZ8r2ddJPCjtLcpaVl7TE2Q==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.2.2': - resolution: {integrity: sha512-52nWy65S/R6/kejz3jpvHAjZDPKIbEQu4x9jDBzmB9jJfuOy5rspjKu4u77+fI4M/WzLXrrQd57hlFGzz1ubcQ==} + '@next/swc-win32-x64-msvc@15.2.3': + resolution: {integrity: sha512-gHYS9tc+G2W0ZC8rBL+H6RdtXIyk40uLiaos0yj5US85FNhbFEndMA2nW3z47nzOWiSvXTZ5kBClc3rD0zJg0w==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -742,8 +742,8 @@ packages: nodemailer: optional: true - next@15.2.2: - resolution: {integrity: sha512-dgp8Kcx5XZRjMw2KNwBtUzhngRaURPioxoNIVl5BOyJbhi9CUgEtKDO7fx5wh8Z8vOVX1nYZ9meawJoRrlASYA==} + next@15.2.3: + resolution: {integrity: sha512-x6eDkZxk2rPpu46E1ZVUWIBhYCLszmUY6fvHBFcbzJ9dD+qRX6vcHusaqqDlnY+VngKzKbAiG2iRCkPbmi8f7w==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -1302,30 +1302,30 @@ snapshots: - encoding - supports-color - '@next/env@15.2.2': {} + '@next/env@15.2.3': {} - '@next/swc-darwin-arm64@15.2.2': + '@next/swc-darwin-arm64@15.2.3': optional: true - '@next/swc-darwin-x64@15.2.2': + '@next/swc-darwin-x64@15.2.3': optional: true - '@next/swc-linux-arm64-gnu@15.2.2': + '@next/swc-linux-arm64-gnu@15.2.3': optional: true - '@next/swc-linux-arm64-musl@15.2.2': + '@next/swc-linux-arm64-musl@15.2.3': optional: true - '@next/swc-linux-x64-gnu@15.2.2': + '@next/swc-linux-x64-gnu@15.2.3': optional: true - '@next/swc-linux-x64-musl@15.2.2': + '@next/swc-linux-x64-musl@15.2.3': optional: true - '@next/swc-win32-arm64-msvc@15.2.2': + '@next/swc-win32-arm64-msvc@15.2.3': optional: true - '@next/swc-win32-x64-msvc@15.2.2': + '@next/swc-win32-x64-msvc@15.2.3': optional: true '@nodelib/fs.scandir@2.1.5': @@ -1737,15 +1737,15 @@ snapshots: nanoid@3.3.8: {} - next-auth@5.0.0-beta.25(next@15.2.2(@playwright/test@1.51.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.2.3(@playwright/test@1.51.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: '@auth/core': 0.37.2 - next: 15.2.2(@playwright/test@1.51.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.2.3(@playwright/test@1.51.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@15.2.2(@playwright/test@1.51.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.2.3(@playwright/test@1.51.1)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): dependencies: - '@next/env': 15.2.2 + '@next/env': 15.2.3 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 @@ -1755,14 +1755,14 @@ snapshots: 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) optionalDependencies: - '@next/swc-darwin-arm64': 15.2.2 - '@next/swc-darwin-x64': 15.2.2 - '@next/swc-linux-arm64-gnu': 15.2.2 - '@next/swc-linux-arm64-musl': 15.2.2 - '@next/swc-linux-x64-gnu': 15.2.2 - '@next/swc-linux-x64-musl': 15.2.2 - '@next/swc-win32-arm64-msvc': 15.2.2 - '@next/swc-win32-x64-msvc': 15.2.2 + '@next/swc-darwin-arm64': 15.2.3 + '@next/swc-darwin-x64': 15.2.3 + '@next/swc-linux-arm64-gnu': 15.2.3 + '@next/swc-linux-arm64-musl': 15.2.3 + '@next/swc-linux-x64-gnu': 15.2.3 + '@next/swc-linux-x64-musl': 15.2.3 + '@next/swc-win32-arm64-msvc': 15.2.3 + '@next/swc-win32-x64-msvc': 15.2.3 '@playwright/test': 1.51.1 sharp: 0.33.5 transitivePeerDependencies: From 0e17a2ac22a1460271af25c04f9e6a714887e709 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 20 Mar 2025 03:04:45 +0000 Subject: [PATCH 194/216] Update dependency @types/react to v18.3.19 --- package.json | 2 +- pnpm-lock.yaml | 28 ++++++++++++++-------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index 2f0b7d3..a9123be 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@playwright/test": "^1.46.0", "@types/bcrypt": "^5.0.2", "@types/node": "22.13.10", - "@types/react": "18.3.18", + "@types/react": "18.3.19", "@types/react-dom": "18.3.5" }, "engines": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7721896..eeacfa9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,7 +37,7 @@ importers: version: 7.0.0 primereact: specifier: ^10.8.2 - version: 10.9.3(@types/react@18.3.18)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) + version: 10.9.3(@types/react@18.3.19)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) react: specifier: 19.0.0-rc-f38c22b244-20240704 version: 19.0.0-rc-f38c22b244-20240704 @@ -70,11 +70,11 @@ importers: specifier: 22.13.10 version: 22.13.10 '@types/react': - specifier: 18.3.18 - version: 18.3.18 + specifier: 18.3.19 + version: 18.3.19 '@types/react-dom': specifier: 18.3.5 - version: 18.3.5(@types/react@18.3.18) + version: 18.3.5(@types/react@18.3.19) packages: @@ -347,8 +347,8 @@ packages: peerDependencies: '@types/react': '*' - '@types/react@18.3.18': - resolution: {integrity: sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==} + '@types/react@18.3.19': + resolution: {integrity: sha512-fcdJqaHOMDbiAwJnXv6XCzX0jDW77yI3tJqYh1Byn8EL5/S628WRx9b/y3DnNe55zTukUQKrfYxiZls2dHcUMw==} abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} @@ -1372,15 +1372,15 @@ snapshots: '@types/prop-types@15.7.12': {} - '@types/react-dom@18.3.5(@types/react@18.3.18)': + '@types/react-dom@18.3.5(@types/react@18.3.19)': dependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.19 - '@types/react-transition-group@4.4.12(@types/react@18.3.18)': + '@types/react-transition-group@4.4.12(@types/react@18.3.19)': dependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.19 - '@types/react@18.3.18': + '@types/react@18.3.19': dependencies: '@types/prop-types': 15.7.12 csstype: 3.1.3 @@ -1883,14 +1883,14 @@ snapshots: primeicons@7.0.0: {} - primereact@10.9.3(@types/react@18.3.18)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): + primereact@10.9.3(@types/react@18.3.19)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): dependencies: - '@types/react-transition-group': 4.4.12(@types/react@18.3.18) + '@types/react-transition-group': 4.4.12(@types/react@18.3.19) react: 19.0.0-rc-f38c22b244-20240704 react-dom: 19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704) react-transition-group: 4.4.5(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) optionalDependencies: - '@types/react': 18.3.18 + '@types/react': 18.3.19 prop-types@15.8.1: dependencies: From 6cfdf1f93b5fa37e488c62b2b21d9a3f5daaad71 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 21 Mar 2025 03:05:28 +0000 Subject: [PATCH 195/216] Update dependency node to v23.10.0 --- .nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nvmrc b/.nvmrc index 138eca4..5135fc7 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -23.9.0 \ No newline at end of file +23.10.0 \ No newline at end of file From 48b72f0501beb8efd09c08b555311f3be53c70d9 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 22 Mar 2025 03:04:40 +0000 Subject: [PATCH 196/216] Update dependency @types/node to v22.13.11 --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index a9123be..6d5eba1 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@playwright/test": "^1.46.0", "@types/bcrypt": "^5.0.2", - "@types/node": "22.13.10", + "@types/node": "22.13.11", "@types/react": "18.3.19", "@types/react-dom": "18.3.5" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index eeacfa9..6f93676 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,8 +67,8 @@ importers: specifier: ^5.0.2 version: 5.0.2 '@types/node': - specifier: 22.13.10 - version: 22.13.10 + specifier: 22.13.11 + version: 22.13.11 '@types/react': specifier: 18.3.19 version: 18.3.19 @@ -331,8 +331,8 @@ packages: '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/node@22.13.10': - resolution: {integrity: sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==} + '@types/node@22.13.11': + resolution: {integrity: sha512-iEUCUJoU0i3VnrCmgoWCXttklWcvoCIx4jzcP22fioIVSdTmjgoEvmAO/QPw6TcS9k5FrNgn4w7q5lGOd1CT5g==} '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -1362,11 +1362,11 @@ snapshots: '@types/bcrypt@5.0.2': dependencies: - '@types/node': 22.13.10 + '@types/node': 22.13.11 '@types/cookie@0.6.0': {} - '@types/node@22.13.10': + '@types/node@22.13.11': dependencies: undici-types: 6.20.0 From c44c2dedd6c444f6edb4e9ded371c352c4055395 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 25 Mar 2025 03:05:41 +0000 Subject: [PATCH 197/216] Update dependency @types/node to v22.13.13 --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 6d5eba1..0f24b4d 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@playwright/test": "^1.46.0", "@types/bcrypt": "^5.0.2", - "@types/node": "22.13.11", + "@types/node": "22.13.13", "@types/react": "18.3.19", "@types/react-dom": "18.3.5" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6f93676..afd4410 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,8 +67,8 @@ importers: specifier: ^5.0.2 version: 5.0.2 '@types/node': - specifier: 22.13.11 - version: 22.13.11 + specifier: 22.13.13 + version: 22.13.13 '@types/react': specifier: 18.3.19 version: 18.3.19 @@ -331,8 +331,8 @@ packages: '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/node@22.13.11': - resolution: {integrity: sha512-iEUCUJoU0i3VnrCmgoWCXttklWcvoCIx4jzcP22fioIVSdTmjgoEvmAO/QPw6TcS9k5FrNgn4w7q5lGOd1CT5g==} + '@types/node@22.13.13': + resolution: {integrity: sha512-ClsL5nMwKaBRwPcCvH8E7+nU4GxHVx1axNvMZTFHMEfNI7oahimt26P5zjVCRrjiIWj6YFXfE1v3dEp94wLcGQ==} '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -1362,11 +1362,11 @@ snapshots: '@types/bcrypt@5.0.2': dependencies: - '@types/node': 22.13.11 + '@types/node': 22.13.13 '@types/cookie@0.6.0': {} - '@types/node@22.13.11': + '@types/node@22.13.13': dependencies: undici-types: 6.20.0 From b3ac60c3858418a02c9e93ef6703485d18cdee83 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 26 Mar 2025 03:05:57 +0000 Subject: [PATCH 198/216] Update dependency @types/react to v18.3.20 --- package.json | 2 +- pnpm-lock.yaml | 28 ++++++++++++++-------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index 0f24b4d..8871a04 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@playwright/test": "^1.46.0", "@types/bcrypt": "^5.0.2", "@types/node": "22.13.13", - "@types/react": "18.3.19", + "@types/react": "18.3.20", "@types/react-dom": "18.3.5" }, "engines": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index afd4410..a9370fb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,7 +37,7 @@ importers: version: 7.0.0 primereact: specifier: ^10.8.2 - version: 10.9.3(@types/react@18.3.19)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) + version: 10.9.3(@types/react@18.3.20)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) react: specifier: 19.0.0-rc-f38c22b244-20240704 version: 19.0.0-rc-f38c22b244-20240704 @@ -70,11 +70,11 @@ importers: specifier: 22.13.13 version: 22.13.13 '@types/react': - specifier: 18.3.19 - version: 18.3.19 + specifier: 18.3.20 + version: 18.3.20 '@types/react-dom': specifier: 18.3.5 - version: 18.3.5(@types/react@18.3.19) + version: 18.3.5(@types/react@18.3.20) packages: @@ -347,8 +347,8 @@ packages: peerDependencies: '@types/react': '*' - '@types/react@18.3.19': - resolution: {integrity: sha512-fcdJqaHOMDbiAwJnXv6XCzX0jDW77yI3tJqYh1Byn8EL5/S628WRx9b/y3DnNe55zTukUQKrfYxiZls2dHcUMw==} + '@types/react@18.3.20': + resolution: {integrity: sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==} abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} @@ -1372,15 +1372,15 @@ snapshots: '@types/prop-types@15.7.12': {} - '@types/react-dom@18.3.5(@types/react@18.3.19)': + '@types/react-dom@18.3.5(@types/react@18.3.20)': dependencies: - '@types/react': 18.3.19 + '@types/react': 18.3.20 - '@types/react-transition-group@4.4.12(@types/react@18.3.19)': + '@types/react-transition-group@4.4.12(@types/react@18.3.20)': dependencies: - '@types/react': 18.3.19 + '@types/react': 18.3.20 - '@types/react@18.3.19': + '@types/react@18.3.20': dependencies: '@types/prop-types': 15.7.12 csstype: 3.1.3 @@ -1883,14 +1883,14 @@ snapshots: primeicons@7.0.0: {} - primereact@10.9.3(@types/react@18.3.19)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): + primereact@10.9.3(@types/react@18.3.20)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): dependencies: - '@types/react-transition-group': 4.4.12(@types/react@18.3.19) + '@types/react-transition-group': 4.4.12(@types/react@18.3.20) react: 19.0.0-rc-f38c22b244-20240704 react-dom: 19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704) react-transition-group: 4.4.5(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) optionalDependencies: - '@types/react': 18.3.19 + '@types/react': 18.3.20 prop-types@15.8.1: dependencies: From a77f8b33de7c13dbfb9f314beb3688da61748014 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 27 Mar 2025 03:06:24 +0000 Subject: [PATCH 199/216] Update dependency next to v15.2.4 --- package.json | 2 +- pnpm-lock.yaml | 88 +++++++++++++++++++++++++------------------------- 2 files changed, 45 insertions(+), 45 deletions(-) diff --git a/package.json b/package.json index 8871a04..c1d74e5 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "autoprefixer": "10.4.21", "bcrypt": "^5.1.1", "clsx": "^2.1.1", - "next": "15.2.3", + "next": "15.2.4", "next-auth": "5.0.0-beta.25", "postcss": "8.5.3", "primeicons": "^7.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a9370fb..b258746 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,11 +24,11 @@ importers: specifier: ^2.1.1 version: 2.1.1 next: - specifier: 15.2.3 - version: 15.2.3(@playwright/test@1.51.1)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) + specifier: 15.2.4 + version: 15.2.4(@playwright/test@1.51.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: specifier: 5.0.0-beta.25 - version: 5.0.0-beta.25(next@15.2.3(@playwright/test@1.51.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.2.4(@playwright/test@1.51.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: specifier: 8.5.3 version: 8.5.3 @@ -239,53 +239,53 @@ packages: resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true - '@next/env@15.2.3': - resolution: {integrity: sha512-a26KnbW9DFEUsSxAxKBORR/uD9THoYoKbkpFywMN/AFvboTt94b8+g/07T8J6ACsdLag8/PDU60ov4rPxRAixw==} + '@next/env@15.2.4': + resolution: {integrity: sha512-+SFtMgoiYP3WoSswuNmxJOCwi06TdWE733D+WPjpXIe4LXGULwEaofiiAy6kbS0+XjM5xF5n3lKuBwN2SnqD9g==} - '@next/swc-darwin-arm64@15.2.3': - resolution: {integrity: sha512-uaBhA8aLbXLqwjnsHSkxs353WrRgQgiFjduDpc7YXEU0B54IKx3vU+cxQlYwPCyC8uYEEX7THhtQQsfHnvv8dw==} + '@next/swc-darwin-arm64@15.2.4': + resolution: {integrity: sha512-1AnMfs655ipJEDC/FHkSr0r3lXBgpqKo4K1kiwfUf3iE68rDFXZ1TtHdMvf7D0hMItgDZ7Vuq3JgNMbt/+3bYw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.2.3': - resolution: {integrity: sha512-pVwKvJ4Zk7h+4hwhqOUuMx7Ib02u3gDX3HXPKIShBi9JlYllI0nU6TWLbPT94dt7FSi6mSBhfc2JrHViwqbOdw==} + '@next/swc-darwin-x64@15.2.4': + resolution: {integrity: sha512-3qK2zb5EwCwxnO2HeO+TRqCubeI/NgCe+kL5dTJlPldV/uwCnUgC7VbEzgmxbfrkbjehL4H9BPztWOEtsoMwew==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.2.3': - resolution: {integrity: sha512-50ibWdn2RuFFkOEUmo9NCcQbbV9ViQOrUfG48zHBCONciHjaUKtHcYFiCwBVuzD08fzvzkWuuZkd4AqbvKO7UQ==} + '@next/swc-linux-arm64-gnu@15.2.4': + resolution: {integrity: sha512-HFN6GKUcrTWvem8AZN7tT95zPb0GUGv9v0d0iyuTb303vbXkkbHDp/DxufB04jNVD+IN9yHy7y/6Mqq0h0YVaQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.2.3': - resolution: {integrity: sha512-2gAPA7P652D3HzR4cLyAuVYwYqjG0mt/3pHSWTCyKZq/N/dJcUAEoNQMyUmwTZWCJRKofB+JPuDVP2aD8w2J6Q==} + '@next/swc-linux-arm64-musl@15.2.4': + resolution: {integrity: sha512-Oioa0SORWLwi35/kVB8aCk5Uq+5/ZIumMK1kJV+jSdazFm2NzPDztsefzdmzzpx5oGCJ6FkUC7vkaUseNTStNA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.2.3': - resolution: {integrity: sha512-ODSKvrdMgAJOVU4qElflYy1KSZRM3M45JVbeZu42TINCMG3anp7YCBn80RkISV6bhzKwcUqLBAmOiWkaGtBA9w==} + '@next/swc-linux-x64-gnu@15.2.4': + resolution: {integrity: sha512-yb5WTRaHdkgOqFOZiu6rHV1fAEK0flVpaIN2HB6kxHVSy/dIajWbThS7qON3W9/SNOH2JWkVCyulgGYekMePuw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.2.3': - resolution: {integrity: sha512-ZR9kLwCWrlYxwEoytqPi1jhPd1TlsSJWAc+H/CJHmHkf2nD92MQpSRIURR1iNgA/kuFSdxB8xIPt4p/T78kwsg==} + '@next/swc-linux-x64-musl@15.2.4': + resolution: {integrity: sha512-Dcdv/ix6srhkM25fgXiyOieFUkz+fOYkHlydWCtB0xMST6X9XYI3yPDKBZt1xuhOytONsIFJFB08xXYsxUwJLw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.2.3': - resolution: {integrity: sha512-+G2FrDcfm2YDbhDiObDU/qPriWeiz/9cRR0yMWJeTLGGX6/x8oryO3tt7HhodA1vZ8r2ddJPCjtLcpaVl7TE2Q==} + '@next/swc-win32-arm64-msvc@15.2.4': + resolution: {integrity: sha512-dW0i7eukvDxtIhCYkMrZNQfNicPDExt2jPb9AZPpL7cfyUo7QSNl1DjsHjmmKp6qNAqUESyT8YFl/Aw91cNJJg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.2.3': - resolution: {integrity: sha512-gHYS9tc+G2W0ZC8rBL+H6RdtXIyk40uLiaos0yj5US85FNhbFEndMA2nW3z47nzOWiSvXTZ5kBClc3rD0zJg0w==} + '@next/swc-win32-x64-msvc@15.2.4': + resolution: {integrity: sha512-SbnWkJmkS7Xl3kre8SdMF6F/XDh1DTFEhp0jRTj/uB8iPKoU2bb2NDfcu+iifv1+mxQEd1g2vvSxcZbXSKyWiQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -742,8 +742,8 @@ packages: nodemailer: optional: true - next@15.2.3: - resolution: {integrity: sha512-x6eDkZxk2rPpu46E1ZVUWIBhYCLszmUY6fvHBFcbzJ9dD+qRX6vcHusaqqDlnY+VngKzKbAiG2iRCkPbmi8f7w==} + next@15.2.4: + resolution: {integrity: sha512-VwL+LAaPSxEkd3lU2xWbgEOtrM8oedmyhBqaVNmgKB+GvZlCy9rgaEc+y2on0wv+l0oSFqLtYD6dcC1eAedUaQ==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -1302,30 +1302,30 @@ snapshots: - encoding - supports-color - '@next/env@15.2.3': {} + '@next/env@15.2.4': {} - '@next/swc-darwin-arm64@15.2.3': + '@next/swc-darwin-arm64@15.2.4': optional: true - '@next/swc-darwin-x64@15.2.3': + '@next/swc-darwin-x64@15.2.4': optional: true - '@next/swc-linux-arm64-gnu@15.2.3': + '@next/swc-linux-arm64-gnu@15.2.4': optional: true - '@next/swc-linux-arm64-musl@15.2.3': + '@next/swc-linux-arm64-musl@15.2.4': optional: true - '@next/swc-linux-x64-gnu@15.2.3': + '@next/swc-linux-x64-gnu@15.2.4': optional: true - '@next/swc-linux-x64-musl@15.2.3': + '@next/swc-linux-x64-musl@15.2.4': optional: true - '@next/swc-win32-arm64-msvc@15.2.3': + '@next/swc-win32-arm64-msvc@15.2.4': optional: true - '@next/swc-win32-x64-msvc@15.2.3': + '@next/swc-win32-x64-msvc@15.2.4': optional: true '@nodelib/fs.scandir@2.1.5': @@ -1737,15 +1737,15 @@ snapshots: nanoid@3.3.8: {} - next-auth@5.0.0-beta.25(next@15.2.3(@playwright/test@1.51.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.2.4(@playwright/test@1.51.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: '@auth/core': 0.37.2 - next: 15.2.3(@playwright/test@1.51.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.2.4(@playwright/test@1.51.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@15.2.3(@playwright/test@1.51.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.2.4(@playwright/test@1.51.1)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): dependencies: - '@next/env': 15.2.3 + '@next/env': 15.2.4 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 @@ -1755,14 +1755,14 @@ snapshots: 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) optionalDependencies: - '@next/swc-darwin-arm64': 15.2.3 - '@next/swc-darwin-x64': 15.2.3 - '@next/swc-linux-arm64-gnu': 15.2.3 - '@next/swc-linux-arm64-musl': 15.2.3 - '@next/swc-linux-x64-gnu': 15.2.3 - '@next/swc-linux-x64-musl': 15.2.3 - '@next/swc-win32-arm64-msvc': 15.2.3 - '@next/swc-win32-x64-msvc': 15.2.3 + '@next/swc-darwin-arm64': 15.2.4 + '@next/swc-darwin-x64': 15.2.4 + '@next/swc-linux-arm64-gnu': 15.2.4 + '@next/swc-linux-arm64-musl': 15.2.4 + '@next/swc-linux-x64-gnu': 15.2.4 + '@next/swc-linux-x64-musl': 15.2.4 + '@next/swc-win32-arm64-msvc': 15.2.4 + '@next/swc-win32-x64-msvc': 15.2.4 '@playwright/test': 1.51.1 sharp: 0.33.5 transitivePeerDependencies: From b8d1489115390950b47b066f40b8a46ea751a693 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 28 Mar 2025 03:08:59 +0000 Subject: [PATCH 200/216] Update dependency @types/node to v22.13.14 --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index c1d74e5..009bda4 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@playwright/test": "^1.46.0", "@types/bcrypt": "^5.0.2", - "@types/node": "22.13.13", + "@types/node": "22.13.14", "@types/react": "18.3.20", "@types/react-dom": "18.3.5" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b258746..6e48fdc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,8 +67,8 @@ importers: specifier: ^5.0.2 version: 5.0.2 '@types/node': - specifier: 22.13.13 - version: 22.13.13 + specifier: 22.13.14 + version: 22.13.14 '@types/react': specifier: 18.3.20 version: 18.3.20 @@ -331,8 +331,8 @@ packages: '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/node@22.13.13': - resolution: {integrity: sha512-ClsL5nMwKaBRwPcCvH8E7+nU4GxHVx1axNvMZTFHMEfNI7oahimt26P5zjVCRrjiIWj6YFXfE1v3dEp94wLcGQ==} + '@types/node@22.13.14': + resolution: {integrity: sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w==} '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -1362,11 +1362,11 @@ snapshots: '@types/bcrypt@5.0.2': dependencies: - '@types/node': 22.13.13 + '@types/node': 22.13.14 '@types/cookie@0.6.0': {} - '@types/node@22.13.13': + '@types/node@22.13.14': dependencies: undici-types: 6.20.0 From 9045b04874ee2e04bd8c9410d5116790b50dec1c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 1 Apr 2025 02:04:38 +0000 Subject: [PATCH 201/216] Update dependency primereact to v10.9.4 --- pnpm-lock.yaml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6e48fdc..69c1a67 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,7 +37,7 @@ importers: version: 7.0.0 primereact: specifier: ^10.8.2 - version: 10.9.3(@types/react@18.3.20)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) + version: 10.9.4(@types/react@18.3.20)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) react: specifier: 19.0.0-rc-f38c22b244-20240704 version: 19.0.0-rc-f38c22b244-20240704 @@ -96,8 +96,8 @@ packages: nodemailer: optional: true - '@babel/runtime@7.26.10': - resolution: {integrity: sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==} + '@babel/runtime@7.27.0': + resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==} engines: {node: '>=6.9.0'} '@emnapi/runtime@1.2.0': @@ -908,8 +908,8 @@ packages: primeicons@7.0.0: resolution: {integrity: sha512-jK3Et9UzwzTsd6tzl2RmwrVY/b8raJ3QZLzoDACj+oTJ0oX7L9Hy+XnVwgo4QVKlKpnP/Ur13SXV/pVh4LzaDw==} - primereact@10.9.3: - resolution: {integrity: sha512-mvIVw4Ap5HfEviWdnPFY14h9Bf8k4rTMkq7swHsJhNfgyH88osrdbjuDQ66mPwjPgI6DwqN2jMo4zxNNxe7nGQ==} + primereact@10.9.4: + resolution: {integrity: sha512-GMrelh07Wd1cwKjHpay3LCpwP346D43qBVkt8H/anGYC3z7kv5/AP0pizZv+aGQs2Fg5ufTTf+SI7IKWmyzgGg==} engines: {node: '>=14.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -1173,7 +1173,7 @@ snapshots: preact: 10.11.3 preact-render-to-string: 5.2.3(preact@10.11.3) - '@babel/runtime@7.26.10': + '@babel/runtime@7.27.0': dependencies: regenerator-runtime: 0.14.1 @@ -1539,7 +1539,7 @@ snapshots: dom-helpers@5.2.1: dependencies: - '@babel/runtime': 7.26.10 + '@babel/runtime': 7.27.0 csstype: 3.1.3 eastasianwidth@0.2.0: {} @@ -1883,7 +1883,7 @@ snapshots: primeicons@7.0.0: {} - primereact@10.9.3(@types/react@18.3.20)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): + primereact@10.9.4(@types/react@18.3.20)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): dependencies: '@types/react-transition-group': 4.4.12(@types/react@18.3.20) react: 19.0.0-rc-f38c22b244-20240704 @@ -1909,7 +1909,7 @@ snapshots: react-transition-group@4.4.5(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): dependencies: - '@babel/runtime': 7.26.10 + '@babel/runtime': 7.27.0 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 From a920a5017e97dd72094d1274467b264dea1230e1 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 3 Apr 2025 02:04:58 +0000 Subject: [PATCH 202/216] Update dependency @types/react-dom to v18.3.6 --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 009bda4..246d0bd 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@types/bcrypt": "^5.0.2", "@types/node": "22.13.14", "@types/react": "18.3.20", - "@types/react-dom": "18.3.5" + "@types/react-dom": "18.3.6" }, "engines": { "node": ">=23.0.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 69c1a67..da7d9c1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -73,8 +73,8 @@ importers: specifier: 18.3.20 version: 18.3.20 '@types/react-dom': - specifier: 18.3.5 - version: 18.3.5(@types/react@18.3.20) + specifier: 18.3.6 + version: 18.3.6(@types/react@18.3.20) packages: @@ -337,8 +337,8 @@ packages: '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} - '@types/react-dom@18.3.5': - resolution: {integrity: sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==} + '@types/react-dom@18.3.6': + resolution: {integrity: sha512-nf22//wEbKXusP6E9pfOCDwFdHAX4u172eaJI4YkDRQEZiorm6KfYnSC2SWLDMVWUOWPERmJnN0ujeAfTBLvrw==} peerDependencies: '@types/react': ^18.0.0 @@ -1372,7 +1372,7 @@ snapshots: '@types/prop-types@15.7.12': {} - '@types/react-dom@18.3.5(@types/react@18.3.20)': + '@types/react-dom@18.3.6(@types/react@18.3.20)': dependencies: '@types/react': 18.3.20 From 4f41a849122565c42ee1d021d1d31bbe840975ad Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 4 Apr 2025 02:06:43 +0000 Subject: [PATCH 203/216] Update dependency @types/node to v22.14.0 --- package.json | 2 +- pnpm-lock.yaml | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 246d0bd..1f048db 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@playwright/test": "^1.46.0", "@types/bcrypt": "^5.0.2", - "@types/node": "22.13.14", + "@types/node": "22.14.0", "@types/react": "18.3.20", "@types/react-dom": "18.3.6" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index da7d9c1..d03d194 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,8 +67,8 @@ importers: specifier: ^5.0.2 version: 5.0.2 '@types/node': - specifier: 22.13.14 - version: 22.13.14 + specifier: 22.14.0 + version: 22.14.0 '@types/react': specifier: 18.3.20 version: 18.3.20 @@ -331,8 +331,8 @@ packages: '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/node@22.13.14': - resolution: {integrity: sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w==} + '@types/node@22.14.0': + resolution: {integrity: sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==} '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -1101,8 +1101,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - undici-types@6.20.0: - resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} update-browserslist-db@1.1.3: resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} @@ -1362,13 +1362,13 @@ snapshots: '@types/bcrypt@5.0.2': dependencies: - '@types/node': 22.13.14 + '@types/node': 22.14.0 '@types/cookie@0.6.0': {} - '@types/node@22.13.14': + '@types/node@22.14.0': dependencies: - undici-types: 6.20.0 + undici-types: 6.21.0 '@types/prop-types@15.7.12': {} @@ -2106,7 +2106,7 @@ snapshots: typescript@5.8.2: {} - undici-types@6.20.0: {} + undici-types@6.21.0: {} update-browserslist-db@1.1.3(browserslist@4.24.4): dependencies: From 479ce993b688052a44ac89600518f4b427b6a9fc Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 5 Apr 2025 02:05:23 +0000 Subject: [PATCH 204/216] Update dependency typescript to v5.8.3 --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 1f048db..6f34608 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "react": "19.0.0-rc-f38c22b244-20240704", "react-dom": "19.0.0-rc-f38c22b244-20240704", "tailwindcss": "3.4.17", - "typescript": "5.8.2", + "typescript": "5.8.3", "use-debounce": "^10.0.1", "uuid": "11.1.0", "zod": "^3.23.8" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d03d194..cd186e0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -48,8 +48,8 @@ importers: specifier: 3.4.17 version: 3.4.17 typescript: - specifier: 5.8.2 - version: 5.8.2 + specifier: 5.8.3 + version: 5.8.3 use-debounce: specifier: ^10.0.1 version: 10.0.4(react@19.0.0-rc-f38c22b244-20240704) @@ -1096,8 +1096,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - typescript@5.8.2: - resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} + typescript@5.8.3: + resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} engines: {node: '>=14.17'} hasBin: true @@ -2104,7 +2104,7 @@ snapshots: tslib@2.8.1: {} - typescript@5.8.2: {} + typescript@5.8.3: {} undici-types@6.21.0: {} From 334bc4dd606f86bd041b625317ea91847c594f2b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 6 Apr 2025 02:05:29 +0000 Subject: [PATCH 205/216] Update dependency node to v23.11.0 --- .nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nvmrc b/.nvmrc index 5135fc7..47202b6 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -23.10.0 \ No newline at end of file +23.11.0 \ No newline at end of file From 03be408a5a00ff07705d1f99ad0bd2de299b0f11 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Thu, 10 Apr 2025 02:05:02 +0000 Subject: [PATCH 206/216] Update dependency next to v15.3.0 --- package.json | 2 +- pnpm-lock.yaml | 289 +++++++++++++++++++++++++------------------------ 2 files changed, 150 insertions(+), 141 deletions(-) diff --git a/package.json b/package.json index 6f34608..5baa48d 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "autoprefixer": "10.4.21", "bcrypt": "^5.1.1", "clsx": "^2.1.1", - "next": "15.2.4", + "next": "15.3.0", "next-auth": "5.0.0-beta.25", "postcss": "8.5.3", "primeicons": "^7.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cd186e0..1deb645 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,11 +24,11 @@ importers: specifier: ^2.1.1 version: 2.1.1 next: - specifier: 15.2.4 - version: 15.2.4(@playwright/test@1.51.1)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) + specifier: 15.3.0 + version: 15.3.0(@playwright/test@1.51.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: specifier: 5.0.0-beta.25 - version: 5.0.0-beta.25(next@15.2.4(@playwright/test@1.51.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.3.0(@playwright/test@1.51.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: specifier: 8.5.3 version: 8.5.3 @@ -100,115 +100,120 @@ packages: resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==} engines: {node: '>=6.9.0'} - '@emnapi/runtime@1.2.0': - resolution: {integrity: sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==} + '@emnapi/runtime@1.4.0': + resolution: {integrity: sha512-64WYIf4UYcdLnbKn/umDlNjQDSS8AgZrI/R9+x5ilkUVFxXcA1Ebl+gQLc/6mERA4407Xof0R7wEyEuj091CVw==} '@heroicons/react@2.2.0': resolution: {integrity: sha512-LMcepvRaS9LYHJGsF0zzmgKCUim/X3N/DQKc4jepAXJ7l8QxJ1PmxJzqplF2Z3FE4PqBAIGyJAQ/w4B5dsqbtQ==} peerDependencies: react: '>= 16 || ^19.0.0-rc' - '@img/sharp-darwin-arm64@0.33.5': - resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} + '@img/sharp-darwin-arm64@0.34.1': + resolution: {integrity: sha512-pn44xgBtgpEbZsu+lWf2KNb6OAf70X68k+yk69Ic2Xz11zHR/w24/U49XT7AeRwJ0Px+mhALhU5LPci1Aymk7A==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.33.5': - resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} + '@img/sharp-darwin-x64@0.34.1': + resolution: {integrity: sha512-VfuYgG2r8BpYiOUN+BfYeFo69nP/MIwAtSJ7/Zpxc5QF3KS22z8Pvg3FkrSFJBPNQ7mmcUcYQFBmEQp7eu1F8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.0.4': - resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} + '@img/sharp-libvips-darwin-arm64@1.1.0': + resolution: {integrity: sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==} cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.0.4': - resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} + '@img/sharp-libvips-darwin-x64@1.1.0': + resolution: {integrity: sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==} cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.0.4': - resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} + '@img/sharp-libvips-linux-arm64@1.1.0': + resolution: {integrity: sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linux-arm@1.0.5': - resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} + '@img/sharp-libvips-linux-arm@1.1.0': + resolution: {integrity: sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==} cpu: [arm] os: [linux] - '@img/sharp-libvips-linux-s390x@1.0.4': - resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} + '@img/sharp-libvips-linux-ppc64@1.1.0': + resolution: {integrity: sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==} + cpu: [ppc64] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.1.0': + resolution: {integrity: sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==} cpu: [s390x] os: [linux] - '@img/sharp-libvips-linux-x64@1.0.4': - resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} + '@img/sharp-libvips-linux-x64@1.1.0': + resolution: {integrity: sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==} cpu: [x64] os: [linux] - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': - resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} + '@img/sharp-libvips-linuxmusl-arm64@1.1.0': + resolution: {integrity: sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linuxmusl-x64@1.0.4': - resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} + '@img/sharp-libvips-linuxmusl-x64@1.1.0': + resolution: {integrity: sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==} cpu: [x64] os: [linux] - '@img/sharp-linux-arm64@0.33.5': - resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} + '@img/sharp-linux-arm64@0.34.1': + resolution: {integrity: sha512-kX2c+vbvaXC6vly1RDf/IWNXxrlxLNpBVWkdpRq5Ka7OOKj6nr66etKy2IENf6FtOgklkg9ZdGpEu9kwdlcwOQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linux-arm@0.33.5': - resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} + '@img/sharp-linux-arm@0.34.1': + resolution: {integrity: sha512-anKiszvACti2sGy9CirTlNyk7BjjZPiML1jt2ZkTdcvpLU1YH6CXwRAZCA2UmRXnhiIftXQ7+Oh62Ji25W72jA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] - '@img/sharp-linux-s390x@0.33.5': - resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} + '@img/sharp-linux-s390x@0.34.1': + resolution: {integrity: sha512-7s0KX2tI9mZI2buRipKIw2X1ufdTeaRgwmRabt5bi9chYfhur+/C1OXg3TKg/eag1W+6CCWLVmSauV1owmRPxA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] - '@img/sharp-linux-x64@0.33.5': - resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} + '@img/sharp-linux-x64@0.34.1': + resolution: {integrity: sha512-wExv7SH9nmoBW3Wr2gvQopX1k8q2g5V5Iag8Zk6AVENsjwd+3adjwxtp3Dcu2QhOXr8W9NusBU6XcQUohBZ5MA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-linuxmusl-arm64@0.33.5': - resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} + '@img/sharp-linuxmusl-arm64@0.34.1': + resolution: {integrity: sha512-DfvyxzHxw4WGdPiTF0SOHnm11Xv4aQexvqhRDAoD00MzHekAj9a/jADXeXYCDFH/DzYruwHbXU7uz+H+nWmSOQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linuxmusl-x64@0.33.5': - resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} + '@img/sharp-linuxmusl-x64@0.34.1': + resolution: {integrity: sha512-pax/kTR407vNb9qaSIiWVnQplPcGU8LRIJpDT5o8PdAx5aAA7AS3X9PS8Isw1/WfqgQorPotjrZL3Pqh6C5EBg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-wasm32@0.33.5': - resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} + '@img/sharp-wasm32@0.34.1': + resolution: {integrity: sha512-YDybQnYrLQfEpzGOQe7OKcyLUCML4YOXl428gOOzBgN6Gw0rv8dpsJ7PqTHxBnXnwXr8S1mYFSLSa727tpz0xg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] - '@img/sharp-win32-ia32@0.33.5': - resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} + '@img/sharp-win32-ia32@0.34.1': + resolution: {integrity: sha512-WKf/NAZITnonBf3U1LfdjoMgNO5JYRSlhovhRhMxXVdvWYveM4kM3L8m35onYIdh75cOMCo1BexgVQcCDzyoWw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.33.5': - resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} + '@img/sharp-win32-x64@0.34.1': + resolution: {integrity: sha512-hw1iIAHpNE8q3uMIRCgGOeDoz9KtFNarFLQclLxr/LK1VBkj8nby18RjFvr6aP7USRYAjTZW6yisnBWMX571Tw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] @@ -239,53 +244,53 @@ packages: resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true - '@next/env@15.2.4': - resolution: {integrity: sha512-+SFtMgoiYP3WoSswuNmxJOCwi06TdWE733D+WPjpXIe4LXGULwEaofiiAy6kbS0+XjM5xF5n3lKuBwN2SnqD9g==} + '@next/env@15.3.0': + resolution: {integrity: sha512-6mDmHX24nWlHOlbwUiAOmMyY7KELimmi+ed8qWcJYjqXeC+G6JzPZ3QosOAfjNwgMIzwhXBiRiCgdh8axTTdTA==} - '@next/swc-darwin-arm64@15.2.4': - resolution: {integrity: sha512-1AnMfs655ipJEDC/FHkSr0r3lXBgpqKo4K1kiwfUf3iE68rDFXZ1TtHdMvf7D0hMItgDZ7Vuq3JgNMbt/+3bYw==} + '@next/swc-darwin-arm64@15.3.0': + resolution: {integrity: sha512-PDQcByT0ZfF2q7QR9d+PNj3wlNN4K6Q8JoHMwFyk252gWo4gKt7BF8Y2+KBgDjTFBETXZ/TkBEUY7NIIY7A/Kw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.2.4': - resolution: {integrity: sha512-3qK2zb5EwCwxnO2HeO+TRqCubeI/NgCe+kL5dTJlPldV/uwCnUgC7VbEzgmxbfrkbjehL4H9BPztWOEtsoMwew==} + '@next/swc-darwin-x64@15.3.0': + resolution: {integrity: sha512-m+eO21yg80En8HJ5c49AOQpFDq+nP51nu88ZOMCorvw3g//8g1JSUsEiPSiFpJo1KCTQ+jm9H0hwXK49H/RmXg==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.2.4': - resolution: {integrity: sha512-HFN6GKUcrTWvem8AZN7tT95zPb0GUGv9v0d0iyuTb303vbXkkbHDp/DxufB04jNVD+IN9yHy7y/6Mqq0h0YVaQ==} + '@next/swc-linux-arm64-gnu@15.3.0': + resolution: {integrity: sha512-H0Kk04ZNzb6Aq/G6e0un4B3HekPnyy6D+eUBYPJv9Abx8KDYgNMWzKt4Qhj57HXV3sTTjsfc1Trc1SxuhQB+Tg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.2.4': - resolution: {integrity: sha512-Oioa0SORWLwi35/kVB8aCk5Uq+5/ZIumMK1kJV+jSdazFm2NzPDztsefzdmzzpx5oGCJ6FkUC7vkaUseNTStNA==} + '@next/swc-linux-arm64-musl@15.3.0': + resolution: {integrity: sha512-k8GVkdMrh/+J9uIv/GpnHakzgDQhrprJ/FbGQvwWmstaeFG06nnAoZCJV+wO/bb603iKV1BXt4gHG+s2buJqZA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.2.4': - resolution: {integrity: sha512-yb5WTRaHdkgOqFOZiu6rHV1fAEK0flVpaIN2HB6kxHVSy/dIajWbThS7qON3W9/SNOH2JWkVCyulgGYekMePuw==} + '@next/swc-linux-x64-gnu@15.3.0': + resolution: {integrity: sha512-ZMQ9yzDEts/vkpFLRAqfYO1wSpIJGlQNK9gZ09PgyjBJUmg8F/bb8fw2EXKgEaHbCc4gmqMpDfh+T07qUphp9A==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.2.4': - resolution: {integrity: sha512-Dcdv/ix6srhkM25fgXiyOieFUkz+fOYkHlydWCtB0xMST6X9XYI3yPDKBZt1xuhOytONsIFJFB08xXYsxUwJLw==} + '@next/swc-linux-x64-musl@15.3.0': + resolution: {integrity: sha512-RFwq5VKYTw9TMr4T3e5HRP6T4RiAzfDJ6XsxH8j/ZeYq2aLsBqCkFzwMI0FmnSsLaUbOb46Uov0VvN3UciHX5A==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.2.4': - resolution: {integrity: sha512-dW0i7eukvDxtIhCYkMrZNQfNicPDExt2jPb9AZPpL7cfyUo7QSNl1DjsHjmmKp6qNAqUESyT8YFl/Aw91cNJJg==} + '@next/swc-win32-arm64-msvc@15.3.0': + resolution: {integrity: sha512-a7kUbqa/k09xPjfCl0RSVAvEjAkYBYxUzSVAzk2ptXiNEL+4bDBo9wNC43G/osLA/EOGzG4CuNRFnQyIHfkRgQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.2.4': - resolution: {integrity: sha512-SbnWkJmkS7Xl3kre8SdMF6F/XDh1DTFEhp0jRTj/uB8iPKoU2bb2NDfcu+iifv1+mxQEd1g2vvSxcZbXSKyWiQ==} + '@next/swc-win32-x64-msvc@15.3.0': + resolution: {integrity: sha512-vHUQS4YVGJPmpjn7r5lEZuMhK5UQBNBRSB+iGDvJjaNk649pTIcRluDWNb9siunyLLiu/LDPHfvxBtNamyuLTw==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -742,8 +747,8 @@ packages: nodemailer: optional: true - next@15.2.4: - resolution: {integrity: sha512-VwL+LAaPSxEkd3lU2xWbgEOtrM8oedmyhBqaVNmgKB+GvZlCy9rgaEc+y2on0wv+l0oSFqLtYD6dcC1eAedUaQ==} + next@15.3.0: + resolution: {integrity: sha512-k0MgP6BsK8cZ73wRjMazl2y2UcXj49ZXLDEgx6BikWuby/CN+nh81qFFI16edgd7xYpe/jj2OZEIwCoqnzz0bQ==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -988,16 +993,16 @@ packages: engines: {node: '>=10'} hasBin: true - semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} engines: {node: '>=10'} hasBin: true set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - sharp@0.33.5: - resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} + sharp@0.34.1: + resolution: {integrity: sha512-1j0w61+eVxu7DawFJtnfYcvSv6qPFvfTaqzTQ2BLknVhHTwGS8sc63ZBF4rzkWMBVKybo4S5OBtDdZahh2A1xg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} shebang-command@2.0.0: @@ -1177,7 +1182,7 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 - '@emnapi/runtime@1.2.0': + '@emnapi/runtime@1.4.0': dependencies: tslib: 2.8.1 optional: true @@ -1186,79 +1191,82 @@ snapshots: dependencies: react: 19.0.0-rc-f38c22b244-20240704 - '@img/sharp-darwin-arm64@0.33.5': + '@img/sharp-darwin-arm64@0.34.1': optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.0.4 + '@img/sharp-libvips-darwin-arm64': 1.1.0 optional: true - '@img/sharp-darwin-x64@0.33.5': + '@img/sharp-darwin-x64@0.34.1': optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.0.4 + '@img/sharp-libvips-darwin-x64': 1.1.0 optional: true - '@img/sharp-libvips-darwin-arm64@1.0.4': + '@img/sharp-libvips-darwin-arm64@1.1.0': optional: true - '@img/sharp-libvips-darwin-x64@1.0.4': + '@img/sharp-libvips-darwin-x64@1.1.0': optional: true - '@img/sharp-libvips-linux-arm64@1.0.4': + '@img/sharp-libvips-linux-arm64@1.1.0': optional: true - '@img/sharp-libvips-linux-arm@1.0.5': + '@img/sharp-libvips-linux-arm@1.1.0': optional: true - '@img/sharp-libvips-linux-s390x@1.0.4': + '@img/sharp-libvips-linux-ppc64@1.1.0': optional: true - '@img/sharp-libvips-linux-x64@1.0.4': + '@img/sharp-libvips-linux-s390x@1.1.0': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + '@img/sharp-libvips-linux-x64@1.1.0': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.0.4': + '@img/sharp-libvips-linuxmusl-arm64@1.1.0': optional: true - '@img/sharp-linux-arm64@0.33.5': + '@img/sharp-libvips-linuxmusl-x64@1.1.0': + optional: true + + '@img/sharp-linux-arm64@0.34.1': optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.0.4 + '@img/sharp-libvips-linux-arm64': 1.1.0 optional: true - '@img/sharp-linux-arm@0.33.5': + '@img/sharp-linux-arm@0.34.1': optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.0.5 + '@img/sharp-libvips-linux-arm': 1.1.0 optional: true - '@img/sharp-linux-s390x@0.33.5': + '@img/sharp-linux-s390x@0.34.1': optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.0.4 + '@img/sharp-libvips-linux-s390x': 1.1.0 optional: true - '@img/sharp-linux-x64@0.33.5': + '@img/sharp-linux-x64@0.34.1': optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.0.4 + '@img/sharp-libvips-linux-x64': 1.1.0 optional: true - '@img/sharp-linuxmusl-arm64@0.33.5': + '@img/sharp-linuxmusl-arm64@0.34.1': optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 optional: true - '@img/sharp-linuxmusl-x64@0.33.5': + '@img/sharp-linuxmusl-x64@0.34.1': optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + '@img/sharp-libvips-linuxmusl-x64': 1.1.0 optional: true - '@img/sharp-wasm32@0.33.5': + '@img/sharp-wasm32@0.34.1': dependencies: - '@emnapi/runtime': 1.2.0 + '@emnapi/runtime': 1.4.0 optional: true - '@img/sharp-win32-ia32@0.33.5': + '@img/sharp-win32-ia32@0.34.1': optional: true - '@img/sharp-win32-x64@0.33.5': + '@img/sharp-win32-x64@0.34.1': optional: true '@isaacs/cliui@8.0.2': @@ -1302,30 +1310,30 @@ snapshots: - encoding - supports-color - '@next/env@15.2.4': {} + '@next/env@15.3.0': {} - '@next/swc-darwin-arm64@15.2.4': + '@next/swc-darwin-arm64@15.3.0': optional: true - '@next/swc-darwin-x64@15.2.4': + '@next/swc-darwin-x64@15.3.0': optional: true - '@next/swc-linux-arm64-gnu@15.2.4': + '@next/swc-linux-arm64-gnu@15.3.0': optional: true - '@next/swc-linux-arm64-musl@15.2.4': + '@next/swc-linux-arm64-musl@15.3.0': optional: true - '@next/swc-linux-x64-gnu@15.2.4': + '@next/swc-linux-x64-gnu@15.3.0': optional: true - '@next/swc-linux-x64-musl@15.2.4': + '@next/swc-linux-x64-musl@15.3.0': optional: true - '@next/swc-win32-arm64-msvc@15.2.4': + '@next/swc-win32-arm64-msvc@15.3.0': optional: true - '@next/swc-win32-x64-msvc@15.2.4': + '@next/swc-win32-x64-msvc@15.3.0': optional: true '@nodelib/fs.scandir@2.1.5': @@ -1737,15 +1745,15 @@ snapshots: nanoid@3.3.8: {} - next-auth@5.0.0-beta.25(next@15.2.4(@playwright/test@1.51.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.3.0(@playwright/test@1.51.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: '@auth/core': 0.37.2 - next: 15.2.4(@playwright/test@1.51.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.3.0(@playwright/test@1.51.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@15.2.4(@playwright/test@1.51.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.3.0(@playwright/test@1.51.1)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): dependencies: - '@next/env': 15.2.4 + '@next/env': 15.3.0 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 @@ -1755,16 +1763,16 @@ snapshots: 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) optionalDependencies: - '@next/swc-darwin-arm64': 15.2.4 - '@next/swc-darwin-x64': 15.2.4 - '@next/swc-linux-arm64-gnu': 15.2.4 - '@next/swc-linux-arm64-musl': 15.2.4 - '@next/swc-linux-x64-gnu': 15.2.4 - '@next/swc-linux-x64-musl': 15.2.4 - '@next/swc-win32-arm64-msvc': 15.2.4 - '@next/swc-win32-x64-msvc': 15.2.4 + '@next/swc-darwin-arm64': 15.3.0 + '@next/swc-darwin-x64': 15.3.0 + '@next/swc-linux-arm64-gnu': 15.3.0 + '@next/swc-linux-arm64-musl': 15.3.0 + '@next/swc-linux-x64-gnu': 15.3.0 + '@next/swc-linux-x64-musl': 15.3.0 + '@next/swc-win32-arm64-msvc': 15.3.0 + '@next/swc-win32-x64-msvc': 15.3.0 '@playwright/test': 1.51.1 - sharp: 0.33.5 + sharp: 0.34.1 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -1958,36 +1966,37 @@ snapshots: semver@7.6.2: {} - semver@7.6.3: + semver@7.7.1: optional: true set-blocking@2.0.0: {} - sharp@0.33.5: + sharp@0.34.1: dependencies: color: 4.2.3 detect-libc: 2.0.3 - semver: 7.6.3 + semver: 7.7.1 optionalDependencies: - '@img/sharp-darwin-arm64': 0.33.5 - '@img/sharp-darwin-x64': 0.33.5 - '@img/sharp-libvips-darwin-arm64': 1.0.4 - '@img/sharp-libvips-darwin-x64': 1.0.4 - '@img/sharp-libvips-linux-arm': 1.0.5 - '@img/sharp-libvips-linux-arm64': 1.0.4 - '@img/sharp-libvips-linux-s390x': 1.0.4 - '@img/sharp-libvips-linux-x64': 1.0.4 - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 - '@img/sharp-linux-arm': 0.33.5 - '@img/sharp-linux-arm64': 0.33.5 - '@img/sharp-linux-s390x': 0.33.5 - '@img/sharp-linux-x64': 0.33.5 - '@img/sharp-linuxmusl-arm64': 0.33.5 - '@img/sharp-linuxmusl-x64': 0.33.5 - '@img/sharp-wasm32': 0.33.5 - '@img/sharp-win32-ia32': 0.33.5 - '@img/sharp-win32-x64': 0.33.5 + '@img/sharp-darwin-arm64': 0.34.1 + '@img/sharp-darwin-x64': 0.34.1 + '@img/sharp-libvips-darwin-arm64': 1.1.0 + '@img/sharp-libvips-darwin-x64': 1.1.0 + '@img/sharp-libvips-linux-arm': 1.1.0 + '@img/sharp-libvips-linux-arm64': 1.1.0 + '@img/sharp-libvips-linux-ppc64': 1.1.0 + '@img/sharp-libvips-linux-s390x': 1.1.0 + '@img/sharp-libvips-linux-x64': 1.1.0 + '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 + '@img/sharp-libvips-linuxmusl-x64': 1.1.0 + '@img/sharp-linux-arm': 0.34.1 + '@img/sharp-linux-arm64': 0.34.1 + '@img/sharp-linux-s390x': 0.34.1 + '@img/sharp-linux-x64': 0.34.1 + '@img/sharp-linuxmusl-arm64': 0.34.1 + '@img/sharp-linuxmusl-x64': 0.34.1 + '@img/sharp-wasm32': 0.34.1 + '@img/sharp-win32-ia32': 0.34.1 + '@img/sharp-win32-x64': 0.34.1 optional: true shebang-command@2.0.0: From 72078f9e9277d40f81cdd723e34cf339735003ba Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 12 Apr 2025 02:04:37 +0000 Subject: [PATCH 207/216] Update dependency @types/node to v22.14.1 --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 5baa48d..1c9be9c 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@playwright/test": "^1.46.0", "@types/bcrypt": "^5.0.2", - "@types/node": "22.14.0", + "@types/node": "22.14.1", "@types/react": "18.3.20", "@types/react-dom": "18.3.6" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1deb645..9ed88f6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,8 +67,8 @@ importers: specifier: ^5.0.2 version: 5.0.2 '@types/node': - specifier: 22.14.0 - version: 22.14.0 + specifier: 22.14.1 + version: 22.14.1 '@types/react': specifier: 18.3.20 version: 18.3.20 @@ -336,8 +336,8 @@ packages: '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/node@22.14.0': - resolution: {integrity: sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==} + '@types/node@22.14.1': + resolution: {integrity: sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==} '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -1370,11 +1370,11 @@ snapshots: '@types/bcrypt@5.0.2': dependencies: - '@types/node': 22.14.0 + '@types/node': 22.14.1 '@types/cookie@0.6.0': {} - '@types/node@22.14.0': + '@types/node@22.14.1': dependencies: undici-types: 6.21.0 From 7e87120e6ba46fabfc40ae44feb318ffed3a54d2 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 18 Apr 2025 02:03:58 +0000 Subject: [PATCH 208/216] Update dependency next to v15.3.1 --- package.json | 2 +- pnpm-lock.yaml | 88 +++++++++++++++++++++++++------------------------- 2 files changed, 45 insertions(+), 45 deletions(-) diff --git a/package.json b/package.json index 1c9be9c..552869d 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "autoprefixer": "10.4.21", "bcrypt": "^5.1.1", "clsx": "^2.1.1", - "next": "15.3.0", + "next": "15.3.1", "next-auth": "5.0.0-beta.25", "postcss": "8.5.3", "primeicons": "^7.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9ed88f6..9645b3a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,11 +24,11 @@ importers: specifier: ^2.1.1 version: 2.1.1 next: - specifier: 15.3.0 - version: 15.3.0(@playwright/test@1.51.1)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) + specifier: 15.3.1 + version: 15.3.1(@playwright/test@1.51.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: specifier: 5.0.0-beta.25 - version: 5.0.0-beta.25(next@15.3.0(@playwright/test@1.51.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.3.1(@playwright/test@1.51.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: specifier: 8.5.3 version: 8.5.3 @@ -244,53 +244,53 @@ packages: resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true - '@next/env@15.3.0': - resolution: {integrity: sha512-6mDmHX24nWlHOlbwUiAOmMyY7KELimmi+ed8qWcJYjqXeC+G6JzPZ3QosOAfjNwgMIzwhXBiRiCgdh8axTTdTA==} + '@next/env@15.3.1': + resolution: {integrity: sha512-cwK27QdzrMblHSn9DZRV+DQscHXRuJv6MydlJRpFSqJWZrTYMLzKDeyueJNN9MGd8NNiUKzDQADAf+dMLXX7YQ==} - '@next/swc-darwin-arm64@15.3.0': - resolution: {integrity: sha512-PDQcByT0ZfF2q7QR9d+PNj3wlNN4K6Q8JoHMwFyk252gWo4gKt7BF8Y2+KBgDjTFBETXZ/TkBEUY7NIIY7A/Kw==} + '@next/swc-darwin-arm64@15.3.1': + resolution: {integrity: sha512-hjDw4f4/nla+6wysBL07z52Gs55Gttp5Bsk5/8AncQLJoisvTBP0pRIBK/B16/KqQyH+uN4Ww8KkcAqJODYH3w==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.3.0': - resolution: {integrity: sha512-m+eO21yg80En8HJ5c49AOQpFDq+nP51nu88ZOMCorvw3g//8g1JSUsEiPSiFpJo1KCTQ+jm9H0hwXK49H/RmXg==} + '@next/swc-darwin-x64@15.3.1': + resolution: {integrity: sha512-q+aw+cJ2ooVYdCEqZVk+T4Ni10jF6Fo5DfpEV51OupMaV5XL6pf3GCzrk6kSSZBsMKZtVC1Zm/xaNBFpA6bJ2g==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.3.0': - resolution: {integrity: sha512-H0Kk04ZNzb6Aq/G6e0un4B3HekPnyy6D+eUBYPJv9Abx8KDYgNMWzKt4Qhj57HXV3sTTjsfc1Trc1SxuhQB+Tg==} + '@next/swc-linux-arm64-gnu@15.3.1': + resolution: {integrity: sha512-wBQ+jGUI3N0QZyWmmvRHjXjTWFy8o+zPFLSOyAyGFI94oJi+kK/LIZFJXeykvgXUk1NLDAEFDZw/NVINhdk9FQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.3.0': - resolution: {integrity: sha512-k8GVkdMrh/+J9uIv/GpnHakzgDQhrprJ/FbGQvwWmstaeFG06nnAoZCJV+wO/bb603iKV1BXt4gHG+s2buJqZA==} + '@next/swc-linux-arm64-musl@15.3.1': + resolution: {integrity: sha512-IIxXEXRti/AulO9lWRHiCpUUR8AR/ZYLPALgiIg/9ENzMzLn3l0NSxVdva7R/VDcuSEBo0eGVCe3evSIHNz0Hg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.3.0': - resolution: {integrity: sha512-ZMQ9yzDEts/vkpFLRAqfYO1wSpIJGlQNK9gZ09PgyjBJUmg8F/bb8fw2EXKgEaHbCc4gmqMpDfh+T07qUphp9A==} + '@next/swc-linux-x64-gnu@15.3.1': + resolution: {integrity: sha512-bfI4AMhySJbyXQIKH5rmLJ5/BP7bPwuxauTvVEiJ/ADoddaA9fgyNNCcsbu9SlqfHDoZmfI6g2EjzLwbsVTr5A==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.3.0': - resolution: {integrity: sha512-RFwq5VKYTw9TMr4T3e5HRP6T4RiAzfDJ6XsxH8j/ZeYq2aLsBqCkFzwMI0FmnSsLaUbOb46Uov0VvN3UciHX5A==} + '@next/swc-linux-x64-musl@15.3.1': + resolution: {integrity: sha512-FeAbR7FYMWR+Z+M5iSGytVryKHiAsc0x3Nc3J+FD5NVbD5Mqz7fTSy8CYliXinn7T26nDMbpExRUI/4ekTvoiA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.3.0': - resolution: {integrity: sha512-a7kUbqa/k09xPjfCl0RSVAvEjAkYBYxUzSVAzk2ptXiNEL+4bDBo9wNC43G/osLA/EOGzG4CuNRFnQyIHfkRgQ==} + '@next/swc-win32-arm64-msvc@15.3.1': + resolution: {integrity: sha512-yP7FueWjphQEPpJQ2oKmshk/ppOt+0/bB8JC8svPUZNy0Pi3KbPx2Llkzv1p8CoQa+D2wknINlJpHf3vtChVBw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.3.0': - resolution: {integrity: sha512-vHUQS4YVGJPmpjn7r5lEZuMhK5UQBNBRSB+iGDvJjaNk649pTIcRluDWNb9siunyLLiu/LDPHfvxBtNamyuLTw==} + '@next/swc-win32-x64-msvc@15.3.1': + resolution: {integrity: sha512-3PMvF2zRJAifcRNni9uMk/gulWfWS+qVI/pagd+4yLF5bcXPZPPH2xlYRYOsUjmCJOXSTAC2PjRzbhsRzR2fDQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -747,8 +747,8 @@ packages: nodemailer: optional: true - next@15.3.0: - resolution: {integrity: sha512-k0MgP6BsK8cZ73wRjMazl2y2UcXj49ZXLDEgx6BikWuby/CN+nh81qFFI16edgd7xYpe/jj2OZEIwCoqnzz0bQ==} + next@15.3.1: + resolution: {integrity: sha512-8+dDV0xNLOgHlyBxP1GwHGVaNXsmp+2NhZEYrXr24GWLHtt27YrBPbPuHvzlhi7kZNYjeJNR93IF5zfFu5UL0g==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -1310,30 +1310,30 @@ snapshots: - encoding - supports-color - '@next/env@15.3.0': {} + '@next/env@15.3.1': {} - '@next/swc-darwin-arm64@15.3.0': + '@next/swc-darwin-arm64@15.3.1': optional: true - '@next/swc-darwin-x64@15.3.0': + '@next/swc-darwin-x64@15.3.1': optional: true - '@next/swc-linux-arm64-gnu@15.3.0': + '@next/swc-linux-arm64-gnu@15.3.1': optional: true - '@next/swc-linux-arm64-musl@15.3.0': + '@next/swc-linux-arm64-musl@15.3.1': optional: true - '@next/swc-linux-x64-gnu@15.3.0': + '@next/swc-linux-x64-gnu@15.3.1': optional: true - '@next/swc-linux-x64-musl@15.3.0': + '@next/swc-linux-x64-musl@15.3.1': optional: true - '@next/swc-win32-arm64-msvc@15.3.0': + '@next/swc-win32-arm64-msvc@15.3.1': optional: true - '@next/swc-win32-x64-msvc@15.3.0': + '@next/swc-win32-x64-msvc@15.3.1': optional: true '@nodelib/fs.scandir@2.1.5': @@ -1745,15 +1745,15 @@ snapshots: nanoid@3.3.8: {} - next-auth@5.0.0-beta.25(next@15.3.0(@playwright/test@1.51.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.3.1(@playwright/test@1.51.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: '@auth/core': 0.37.2 - next: 15.3.0(@playwright/test@1.51.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.3.1(@playwright/test@1.51.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@15.3.0(@playwright/test@1.51.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.3.1(@playwright/test@1.51.1)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): dependencies: - '@next/env': 15.3.0 + '@next/env': 15.3.1 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 @@ -1763,14 +1763,14 @@ snapshots: 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) optionalDependencies: - '@next/swc-darwin-arm64': 15.3.0 - '@next/swc-darwin-x64': 15.3.0 - '@next/swc-linux-arm64-gnu': 15.3.0 - '@next/swc-linux-arm64-musl': 15.3.0 - '@next/swc-linux-x64-gnu': 15.3.0 - '@next/swc-linux-x64-musl': 15.3.0 - '@next/swc-win32-arm64-msvc': 15.3.0 - '@next/swc-win32-x64-msvc': 15.3.0 + '@next/swc-darwin-arm64': 15.3.1 + '@next/swc-darwin-x64': 15.3.1 + '@next/swc-linux-arm64-gnu': 15.3.1 + '@next/swc-linux-arm64-musl': 15.3.1 + '@next/swc-linux-x64-gnu': 15.3.1 + '@next/swc-linux-x64-musl': 15.3.1 + '@next/swc-win32-arm64-msvc': 15.3.1 + '@next/swc-win32-x64-msvc': 15.3.1 '@playwright/test': 1.51.1 sharp: 0.34.1 transitivePeerDependencies: From 547231194e6d366315c9cf4014f9a70a6e7e481b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 19 Apr 2025 02:05:29 +0000 Subject: [PATCH 209/216] Update dependency zod to v3.24.3 --- pnpm-lock.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9645b3a..0083e66 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -58,7 +58,7 @@ importers: version: 11.1.0 zod: specifier: ^3.23.8 - version: 3.24.2 + version: 3.24.3 devDependencies: '@playwright/test': specifier: ^1.46.0 @@ -1161,8 +1161,8 @@ packages: engines: {node: '>= 14'} hasBin: true - zod@3.24.2: - resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} + zod@3.24.3: + resolution: {integrity: sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==} snapshots: @@ -2164,4 +2164,4 @@ snapshots: yaml@2.4.3: {} - zod@3.24.2: {} + zod@3.24.3: {} From a3b321ea4cc07135fb0ef9f0022512a6421c48d1 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Mon, 21 Apr 2025 02:05:35 +0000 Subject: [PATCH 210/216] Update dependency next-auth to v5.0.0-beta.26 --- package.json | 2 +- pnpm-lock.yaml | 71 ++++++++++++++++++-------------------------------- 2 files changed, 27 insertions(+), 46 deletions(-) diff --git a/package.json b/package.json index 552869d..e831c3a 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "bcrypt": "^5.1.1", "clsx": "^2.1.1", "next": "15.3.1", - "next-auth": "5.0.0-beta.25", + "next-auth": "5.0.0-beta.26", "postcss": "8.5.3", "primeicons": "^7.0.0", "primereact": "^10.8.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0083e66..964fc81 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,8 +27,8 @@ importers: specifier: 15.3.1 version: 15.3.1(@playwright/test@1.51.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: - specifier: 5.0.0-beta.25 - version: 5.0.0-beta.25(next@15.3.1(@playwright/test@1.51.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) + specifier: 5.0.0-beta.26 + version: 5.0.0-beta.26(next@15.3.1(@playwright/test@1.51.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: specifier: 8.5.3 version: 8.5.3 @@ -82,8 +82,8 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@auth/core@0.37.2': - resolution: {integrity: sha512-kUvzyvkcd6h1vpeMAojK2y7+PAV5H+0Cc9+ZlKYDFhDY31AlvsB+GW5vNO4qE3Y07KeQgvNO9U0QUx/fN62kBw==} + '@auth/core@0.39.0': + resolution: {integrity: sha512-jusviw/sUSfAh6S/wjY5tRmJOq0Itd3ImF+c/b4HB9DfmfChtcfVJTNJeqCeExeCG8oh4PBKRsMQJsn2W6NhFQ==} peerDependencies: '@simplewebauthn/browser': ^9.0.1 '@simplewebauthn/server': ^9.0.2 @@ -333,9 +333,6 @@ packages: '@types/bcrypt@5.0.2': resolution: {integrity: sha512-6atioO8Y75fNcbmj0G7UjI9lXN2pQ/IGJ2FWT4a/btd0Lk9lQalHLKhkgKVZ3r+spnmWUKfbMi1GEe9wyHQfNQ==} - '@types/cookie@0.6.0': - resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/node@22.14.1': resolution: {integrity: sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==} @@ -483,10 +480,6 @@ packages: console-control-strings@1.1.0: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} - cookie@0.7.1: - resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} - engines: {node: '>= 0.6'} - cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -655,8 +648,8 @@ packages: resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} hasBin: true - jose@5.9.6: - resolution: {integrity: sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ==} + jose@6.0.10: + resolution: {integrity: sha512-skIAxZqcMkOrSwjJvplIPYrlXGpxTPnro2/QWTDCxAdWQrSTV5/KqspMWmi5WAx5+ULswASJiZ0a+1B/Lxt9cw==} js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -731,8 +724,8 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - next-auth@5.0.0-beta.25: - resolution: {integrity: sha512-2dJJw1sHQl2qxCrRk+KTQbeH+izFbGFPuJj5eGgBZFYyiYYtvlrBeUw1E/OJJxTRjuxbSYGnCTkUIRsIIW0bog==} + next-auth@5.0.0-beta.26: + resolution: {integrity: sha512-yAQLIP2x6FAM+GX6FTlQjoPph6msO/9HI3pjI1z1yws3VnvS77atetcxQOmCpxSLTO4jzvpQqPaBZMgRxDgsYg==} peerDependencies: '@simplewebauthn/browser': ^9.0.1 '@simplewebauthn/server': ^9.0.2 @@ -800,8 +793,8 @@ packages: resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} deprecated: This package is no longer supported. - oauth4webapi@3.1.1: - resolution: {integrity: sha512-0h4FZjsntbKQ5IHGM9mFT7uOwQCRdcTG7YhC0xXlWIcCch24wUa6Vggaipa3Sw6Ab7nEnmO4rctROmyuHBfP7Q==} + oauth4webapi@3.5.0: + resolution: {integrity: sha512-DF3mLWNuxPkxJkHmWxbSFz4aE5CjWOsm465VBfBdWzmzX4Mg3vF8icxK+iKqfdWrIumBJ2TaoNQWx+SQc2bsPQ==} object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} @@ -899,16 +892,13 @@ packages: resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} engines: {node: ^10 || ^12 || >=14} - preact-render-to-string@5.2.3: - resolution: {integrity: sha512-aPDxUn5o3GhWdtJtW0svRC2SS/l8D9MAgo2+AWml+BhDImb27ALf04Q2d+AHqUUOc6RdSXFIBVa2gxzgMKgtZA==} + preact-render-to-string@6.5.11: + resolution: {integrity: sha512-ubnauqoGczeGISiOh6RjX0/cdaF8v/oDXIjO85XALCQjwQP+SB4RDXXtvZ6yTYSjG+PC1QRP2AhPgCEsM2EvUw==} peerDependencies: preact: '>=10' - preact@10.11.3: - resolution: {integrity: sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg==} - - pretty-format@3.8.0: - resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==} + preact@10.24.3: + resolution: {integrity: sha512-Z2dPnBnMUfyQfSQ+GBdsGa16hz35YmLmtTLhM169uW944hYL6xzTYkJjC07j+Wosz733pMWx0fgON3JNw1jJQA==} primeicons@7.0.0: resolution: {integrity: sha512-jK3Et9UzwzTsd6tzl2RmwrVY/b8raJ3QZLzoDACj+oTJ0oX7L9Hy+XnVwgo4QVKlKpnP/Ur13SXV/pVh4LzaDw==} @@ -1168,15 +1158,13 @@ snapshots: '@alloc/quick-lru@5.2.0': {} - '@auth/core@0.37.2': + '@auth/core@0.39.0': dependencies: '@panva/hkdf': 1.2.1 - '@types/cookie': 0.6.0 - cookie: 0.7.1 - jose: 5.9.6 - oauth4webapi: 3.1.1 - preact: 10.11.3 - preact-render-to-string: 5.2.3(preact@10.11.3) + jose: 6.0.10 + oauth4webapi: 3.5.0 + preact: 10.24.3 + preact-render-to-string: 6.5.11(preact@10.24.3) '@babel/runtime@7.27.0': dependencies: @@ -1372,8 +1360,6 @@ snapshots: dependencies: '@types/node': 22.14.1 - '@types/cookie@0.6.0': {} - '@types/node@22.14.1': dependencies: undici-types: 6.21.0 @@ -1521,8 +1507,6 @@ snapshots: console-control-strings@1.1.0: {} - cookie@0.7.1: {} - cross-spawn@7.0.3: dependencies: path-key: 3.1.1 @@ -1685,7 +1669,7 @@ snapshots: jiti@1.21.6: {} - jose@5.9.6: {} + jose@6.0.10: {} js-tokens@4.0.0: {} @@ -1745,9 +1729,9 @@ snapshots: nanoid@3.3.8: {} - next-auth@5.0.0-beta.25(next@15.3.1(@playwright/test@1.51.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.26(next@15.3.1(@playwright/test@1.51.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: - '@auth/core': 0.37.2 + '@auth/core': 0.39.0 next: 15.3.1(@playwright/test@1.51.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 @@ -1800,7 +1784,7 @@ snapshots: gauge: 3.0.2 set-blocking: 2.0.0 - oauth4webapi@3.1.1: {} + oauth4webapi@3.5.0: {} object-assign@4.1.1: {} @@ -1880,14 +1864,11 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - preact-render-to-string@5.2.3(preact@10.11.3): + preact-render-to-string@6.5.11(preact@10.24.3): dependencies: - preact: 10.11.3 - pretty-format: 3.8.0 + preact: 10.24.3 - preact@10.11.3: {} - - pretty-format@3.8.0: {} + preact@10.24.3: {} primeicons@7.0.0: {} From fd8a0d58519cdabfb223970e146b34a452fba37b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Tue, 22 Apr 2025 02:05:41 +0000 Subject: [PATCH 211/216] Update dependency @playwright/test to v1.52.0 --- pnpm-lock.yaml | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 964fc81..5d9ef2a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,10 +25,10 @@ importers: version: 2.1.1 next: specifier: 15.3.1 - version: 15.3.1(@playwright/test@1.51.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.3.1(@playwright/test@1.52.0)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) next-auth: specifier: 5.0.0-beta.26 - version: 5.0.0-beta.26(next@15.3.1(@playwright/test@1.51.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.26(next@15.3.1(@playwright/test@1.52.0)(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: specifier: 8.5.3 version: 8.5.3 @@ -62,7 +62,7 @@ importers: devDependencies: '@playwright/test': specifier: ^1.46.0 - version: 1.51.1 + version: 1.52.0 '@types/bcrypt': specifier: ^5.0.2 version: 5.0.2 @@ -314,8 +314,8 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.51.1': - resolution: {integrity: sha512-nM+kEaTSAoVlXmMPH10017vn3FSiFqr/bh4fKg9vmAdMfd9SDqRZNvPSiAHADc/itWak+qPvMPZQOPwCBW7k7Q==} + '@playwright/test@1.52.0': + resolution: {integrity: sha512-uh6W7sb55hl7D6vsAeA+V2p5JnlAqzhqFyF0VcJkKZXkgnFcVG9PziERRHQfPLfNGx1C292a4JqbWzhR8L4R1g==} engines: {node: '>=18'} hasBin: true @@ -837,13 +837,13 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - playwright-core@1.51.1: - resolution: {integrity: sha512-/crRMj8+j/Nq5s8QcvegseuyeZPxpQCZb6HNk3Sos3BlZyAknRjoyJPFWkpNn8v0+P3WiwqFF8P+zQo4eqiNuw==} + playwright-core@1.52.0: + resolution: {integrity: sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==} engines: {node: '>=18'} hasBin: true - playwright@1.51.1: - resolution: {integrity: sha512-kkx+MB2KQRkyxjYPc3a0wLZZoDczmppyGJIvQ43l+aZihkaVvmu/21kiyaHeHjiFxjxNNFnUncKmcGIyOojsaw==} + playwright@1.52.0: + resolution: {integrity: sha512-JAwMNMBlxJ2oD1kce4KPtMkDeKGHQstdpFPcPH3maElAXon/QZeTvtsfXmTMRyO9TslfoYOXkSsvao2nE1ilTw==} engines: {node: '>=18'} hasBin: true @@ -1341,9 +1341,9 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.51.1': + '@playwright/test@1.52.0': dependencies: - playwright: 1.51.1 + playwright: 1.52.0 '@swc/counter@0.1.3': {} @@ -1729,13 +1729,13 @@ snapshots: nanoid@3.3.8: {} - next-auth@5.0.0-beta.26(next@15.3.1(@playwright/test@1.51.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.26(next@15.3.1(@playwright/test@1.52.0)(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: '@auth/core': 0.39.0 - next: 15.3.1(@playwright/test@1.51.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.3.1(@playwright/test@1.52.0)(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@15.3.1(@playwright/test@1.51.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.3.1(@playwright/test@1.52.0)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): dependencies: '@next/env': 15.3.1 '@swc/counter': 0.1.3 @@ -1755,7 +1755,7 @@ snapshots: '@next/swc-linux-x64-musl': 15.3.1 '@next/swc-win32-arm64-msvc': 15.3.1 '@next/swc-win32-x64-msvc': 15.3.1 - '@playwright/test': 1.51.1 + '@playwright/test': 1.52.0 sharp: 0.34.1 transitivePeerDependencies: - '@babel/core' @@ -1813,11 +1813,11 @@ snapshots: pirates@4.0.6: {} - playwright-core@1.51.1: {} + playwright-core@1.52.0: {} - playwright@1.51.1: + playwright@1.52.0: dependencies: - playwright-core: 1.51.1 + playwright-core: 1.52.0 optionalDependencies: fsevents: 2.3.2 From 676ab5e22df135aa2eb394ec23da039458bbce3c Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Wed, 23 Apr 2025 02:07:40 +0000 Subject: [PATCH 212/216] Update pnpm to v10 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e831c3a..56ec58a 100644 --- a/package.json +++ b/package.json @@ -34,5 +34,5 @@ "engines": { "node": ">=23.0.0" }, - "packageManager": "pnpm@9.15.9+sha512.68046141893c66fad01c079231128e9afb89ef87e2691d69e4d40eee228988295fd4682181bae55b58418c3a253bde65a505ec7c5f9403ece5cc3cd37dcf2531" + "packageManager": "pnpm@10.9.0+sha512.0486e394640d3c1fb3c9d43d49cf92879ff74f8516959c235308f5a8f62e2e19528a65cdc2a3058f587cde71eba3d5b56327c8c33a97e4c4051ca48a10ca2d5f" } From 6eec7dd8dbefaae64fd0720480f0c90a92d41bcc Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 25 Apr 2025 02:06:57 +0000 Subject: [PATCH 213/216] Update dependency next-auth to v5.0.0-beta.27 --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index e831c3a..b773451 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "bcrypt": "^5.1.1", "clsx": "^2.1.1", "next": "15.3.1", - "next-auth": "5.0.0-beta.26", + "next-auth": "5.0.0-beta.27", "postcss": "8.5.3", "primeicons": "^7.0.0", "primereact": "^10.8.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5d9ef2a..cb2a061 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,8 +27,8 @@ importers: specifier: 15.3.1 version: 15.3.1(@playwright/test@1.52.0)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) next-auth: - specifier: 5.0.0-beta.26 - version: 5.0.0-beta.26(next@15.3.1(@playwright/test@1.52.0)(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) + specifier: 5.0.0-beta.27 + version: 5.0.0-beta.27(next@15.3.1(@playwright/test@1.52.0)(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: specifier: 8.5.3 version: 8.5.3 @@ -724,8 +724,8 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - next-auth@5.0.0-beta.26: - resolution: {integrity: sha512-yAQLIP2x6FAM+GX6FTlQjoPph6msO/9HI3pjI1z1yws3VnvS77atetcxQOmCpxSLTO4jzvpQqPaBZMgRxDgsYg==} + next-auth@5.0.0-beta.27: + resolution: {integrity: sha512-/QtP9C0C99YpEuBEJqMaDXH3ISWMgObQalwVZEoC7sskaIPhv5fQl6fXS/rXJQKqLY6MNJ42rqjqmRdoXZH2EQ==} peerDependencies: '@simplewebauthn/browser': ^9.0.1 '@simplewebauthn/server': ^9.0.2 @@ -1729,7 +1729,7 @@ snapshots: nanoid@3.3.8: {} - next-auth@5.0.0-beta.26(next@15.3.1(@playwright/test@1.52.0)(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.27(next@15.3.1(@playwright/test@1.52.0)(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: '@auth/core': 0.39.0 next: 15.3.1(@playwright/test@1.52.0)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) From bee0abc8d0d3ac6dd9e092fc311656e7bd16b964 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 25 Apr 2025 02:07:11 +0000 Subject: [PATCH 214/216] Update dependency @types/node to v22.15.0 --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index e831c3a..fb77319 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@playwright/test": "^1.46.0", "@types/bcrypt": "^5.0.2", - "@types/node": "22.14.1", + "@types/node": "22.15.0", "@types/react": "18.3.20", "@types/react-dom": "18.3.6" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5d9ef2a..9c8c2c7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,8 +67,8 @@ importers: specifier: ^5.0.2 version: 5.0.2 '@types/node': - specifier: 22.14.1 - version: 22.14.1 + specifier: 22.15.0 + version: 22.15.0 '@types/react': specifier: 18.3.20 version: 18.3.20 @@ -333,8 +333,8 @@ packages: '@types/bcrypt@5.0.2': resolution: {integrity: sha512-6atioO8Y75fNcbmj0G7UjI9lXN2pQ/IGJ2FWT4a/btd0Lk9lQalHLKhkgKVZ3r+spnmWUKfbMi1GEe9wyHQfNQ==} - '@types/node@22.14.1': - resolution: {integrity: sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==} + '@types/node@22.15.0': + resolution: {integrity: sha512-99S8dWD2DkeE6PBaEDw+In3aar7hdoBvjyJMR6vaKBTzpvR0P00ClzJMOoVrj9D2+Sy/YCwACYHnBTpMhg1UCA==} '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -1358,9 +1358,9 @@ snapshots: '@types/bcrypt@5.0.2': dependencies: - '@types/node': 22.14.1 + '@types/node': 22.15.0 - '@types/node@22.14.1': + '@types/node@22.15.0': dependencies: undici-types: 6.21.0 From 0e7419ee606c4c240f981973ef2853ce39f2b825 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 26 Apr 2025 02:06:20 +0000 Subject: [PATCH 215/216] Update dependency @types/node to v22.15.2 --- package.json | 2 +- pnpm-lock.yaml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 962a519..953ad94 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "devDependencies": { "@playwright/test": "^1.46.0", "@types/bcrypt": "^5.0.2", - "@types/node": "22.15.0", + "@types/node": "22.15.2", "@types/react": "18.3.20", "@types/react-dom": "18.3.6" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b26b08e..c9879f8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,8 +67,8 @@ importers: specifier: ^5.0.2 version: 5.0.2 '@types/node': - specifier: 22.15.0 - version: 22.15.0 + specifier: 22.15.2 + version: 22.15.2 '@types/react': specifier: 18.3.20 version: 18.3.20 @@ -333,8 +333,8 @@ packages: '@types/bcrypt@5.0.2': resolution: {integrity: sha512-6atioO8Y75fNcbmj0G7UjI9lXN2pQ/IGJ2FWT4a/btd0Lk9lQalHLKhkgKVZ3r+spnmWUKfbMi1GEe9wyHQfNQ==} - '@types/node@22.15.0': - resolution: {integrity: sha512-99S8dWD2DkeE6PBaEDw+In3aar7hdoBvjyJMR6vaKBTzpvR0P00ClzJMOoVrj9D2+Sy/YCwACYHnBTpMhg1UCA==} + '@types/node@22.15.2': + resolution: {integrity: sha512-uKXqKN9beGoMdBfcaTY1ecwz6ctxuJAcUlwE55938g0ZJ8lRxwAZqRz2AJ4pzpt5dHdTPMB863UZ0ESiFUcP7A==} '@types/prop-types@15.7.12': resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} @@ -1358,9 +1358,9 @@ snapshots: '@types/bcrypt@5.0.2': dependencies: - '@types/node': 22.15.0 + '@types/node': 22.15.2 - '@types/node@22.15.0': + '@types/node@22.15.2': dependencies: undici-types: 6.21.0 From b77831fb27bad972b1cb47ba6169a7b6cf3893da Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 27 Apr 2025 02:07:22 +0000 Subject: [PATCH 216/216] Update dependency primereact to v10.9.5 --- pnpm-lock.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c9879f8..26f50e1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,7 +37,7 @@ importers: version: 7.0.0 primereact: specifier: ^10.8.2 - version: 10.9.4(@types/react@18.3.20)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) + version: 10.9.5(@types/react@18.3.20)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) react: specifier: 19.0.0-rc-f38c22b244-20240704 version: 19.0.0-rc-f38c22b244-20240704 @@ -903,8 +903,8 @@ packages: primeicons@7.0.0: resolution: {integrity: sha512-jK3Et9UzwzTsd6tzl2RmwrVY/b8raJ3QZLzoDACj+oTJ0oX7L9Hy+XnVwgo4QVKlKpnP/Ur13SXV/pVh4LzaDw==} - primereact@10.9.4: - resolution: {integrity: sha512-GMrelh07Wd1cwKjHpay3LCpwP346D43qBVkt8H/anGYC3z7kv5/AP0pizZv+aGQs2Fg5ufTTf+SI7IKWmyzgGg==} + primereact@10.9.5: + resolution: {integrity: sha512-4O6gm0LrKF7Ml8zQmb8mGiWS/ugJ94KBOAS/CAxWFQh9qyNgfNw/qcpCeomPIkjWd98jrM2XDiEbgq+W0395Hw==} engines: {node: '>=14.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -1872,7 +1872,7 @@ snapshots: primeicons@7.0.0: {} - primereact@10.9.4(@types/react@18.3.20)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): + primereact@10.9.5(@types/react@18.3.20)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): dependencies: '@types/react-transition-group': 4.4.12(@types/react@18.3.20) react: 19.0.0-rc-f38c22b244-20240704
- {arrangement.name} - - {arrangement.discomfort} - - -
+ {arrangement.name} + + {arrangement.discomfort} + + + + + + { + arrangement.valid ? + : + + } +
+
{arrangement.name} From e597b4fc00d15a0bff78ff67023bd617ccf5bbaa Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 26 Jan 2025 13:09:31 +0100 Subject: [PATCH 162/216] Mark expired rows with red background --- app/ui/arrangements/arrangements-table.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/ui/arrangements/arrangements-table.tsx b/app/ui/arrangements/arrangements-table.tsx index de7a4ec..31cfffc 100644 --- a/app/ui/arrangements/arrangements-table.tsx +++ b/app/ui/arrangements/arrangements-table.tsx @@ -9,6 +9,7 @@ import TableOfContents from "../components/table-of-contents"; import { loadTableSimulations } from "@/app/api/tableSimulations"; import { ArchiveBoxXMarkIcon, CheckBadgeIcon } from "@heroicons/react/24/outline"; import { Tooltip } from "primereact/tooltip"; +import clsx from "clsx"; export default function ArrangementsTable({ onArrangementSelected }: { onArrangementSelected: (arrangementId: string) => void }) { const [arrangements, setArrangements] = useState>([]); @@ -33,7 +34,10 @@ export default function ArrangementsTable({ onArrangementSelected }: { onArrange caption='Simulations' elements={arrangements} rowRender={(arrangement) => ( -
{arrangement.name}