From 53da201fa6e72b7534e868c83282e2012d910f67 Mon Sep 17 00:00:00 2001 From: Semir Date: Thu, 15 May 2025 08:40:12 +0200 Subject: [PATCH 01/39] feat: Basic Calendar without any functions --- package.json | 3 +- src/app/home/page.tsx | 121 ++++++++++- yarn.lock | 477 ++++++++++++++++++++++++------------------ 3 files changed, 385 insertions(+), 216 deletions(-) diff --git a/package.json b/package.json index 99b975d..8deaf17 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,8 @@ "next": "15.3.3", "next-auth": "^5.0.0-beta.25", "next-themes": "^0.4.6", - "react": "^19.0.0", + "react": "^19.1.0", + "react-calendar": "^5.1.0", "react-dom": "^19.0.0", "react-hook-form": "^7.56.4", "tailwind-merge": "^3.2.0", diff --git a/src/app/home/page.tsx b/src/app/home/page.tsx index 4e6773b..527b231 100644 --- a/src/app/home/page.tsx +++ b/src/app/home/page.tsx @@ -1,15 +1,114 @@ -import { RedirectButton } from '@/components/user/redirect-button'; -import { ThemePicker } from '@/components/user/theme-picker'; +import React from 'react'; + +const Calendar: React.FC = () => { + const today = new Date(); + const currentYear = today.getFullYear(); + const currentMonth = today.getMonth(); + const currentDate = today.getDate(); + + const firstDayMonth = new Date(currentYear, currentMonth, 1); + const lastDayMonth = new Date(currentYear, currentMonth + 1, 0); + const startDay = (firstDayMonth.getDay() + 6) % 7; + const daysMonth = lastDayMonth.getDate(); + + const weeks: (number | null)[][] = []; + let currentDay = 1; + + const firstWeek: (number | null)[] = []; + for (let i = 0; i < 7; i++) { + if (i < startDay) { + firstWeek.push(null); + } else { + firstWeek.push(currentDay); + currentDay++; + } + } + weeks.push(firstWeek); + + while (currentDay <= daysMonth) { + const week: (number | null)[] = []; + for (let i = 0; i < 7; i++) { + if (currentDay <= daysMonth) { + week.push(currentDay); + currentDay++; + } else { + week.push(null); + } + } + weeks.push(week); + } + + const weekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']; -export default function Home() { return ( -
-
{}
-
-

Home

- - -
+
+

+ {new Date(currentYear, currentMonth).toLocaleString('en-EN', { + month: 'long', + year: 'numeric' + })} +

+ + + + {weekdays.map((day, index) => ( + + ))} + + + + {weeks.map((week, weekIndex) => ( + + {week.map((day, dayIndex) => ( + + ))} + + ))} + +
+ {day} +
+ {day && ( +
+ {day} +
+ )} +
); -} +}; + +export default Calendar; \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 8deaa5a..32af57e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -115,9 +115,9 @@ __metadata: linkType: hard "@eslint/config-helpers@npm:^0.2.1": - version: 0.2.2 - resolution: "@eslint/config-helpers@npm:0.2.2" - checksum: 10c0/98f7cefe484bb754674585d9e73cf1414a3ab4fd0783c385465288d13eb1a8d8e7d7b0611259fc52b76b396c11a13517be5036d1f48eeb877f6f0a6b9c4f03ad + version: 0.2.3 + resolution: "@eslint/config-helpers@npm:0.2.3" + checksum: 10c0/8fd36d7f33013628787947c81894807c7498b31eacf6648efa6d7c7a99aac6bf0d59a8a4d14f968ec2aeebefb76a1a7e4fd4cd556a296323d4711b3d7a7cda22 languageName: node linkType: hard @@ -130,6 +130,15 @@ __metadata: languageName: node linkType: hard +"@eslint/core@npm:^0.15.0": + version: 0.15.0 + resolution: "@eslint/core@npm:0.15.0" + dependencies: + "@types/json-schema": "npm:^7.0.15" + checksum: 10c0/9882c69acfe29743ce473a619d5248589c6687561afaabe8ec8d7ffed07592db16edcca3af022f33ea92fe5f6cfbe3545ee53e89292579d22a944ebaeddcf72d + languageName: node + linkType: hard + "@eslint/eslintrc@npm:3.3.1, @eslint/eslintrc@npm:^3.3.1": version: 3.3.1 resolution: "@eslint/eslintrc@npm:3.3.1" @@ -162,12 +171,12 @@ __metadata: linkType: hard "@eslint/plugin-kit@npm:^0.3.1": - version: 0.3.1 - resolution: "@eslint/plugin-kit@npm:0.3.1" + version: 0.3.2 + resolution: "@eslint/plugin-kit@npm:0.3.2" dependencies: - "@eslint/core": "npm:^0.14.0" + "@eslint/core": "npm:^0.15.0" levn: "npm:^0.4.1" - checksum: 10c0/a75f0b5d38430318a551b83e27bee570747eb50beeb76b03f64b0e78c2c27ef3d284cfda3443134df028db3251719bc0850c105f778122f6ad762d5270ec8063 + checksum: 10c0/e069b0a46eb9fa595a1ac7dea4540a9daa493afba88875ee054e9117609c1c41555e779303cb4cff36cf88f603ba6eba2556a927e8ced77002828206ee17fc7e languageName: node linkType: hard @@ -553,14 +562,14 @@ __metadata: languageName: node linkType: hard -"@napi-rs/wasm-runtime@npm:^0.2.10": - version: 0.2.10 - resolution: "@napi-rs/wasm-runtime@npm:0.2.10" +"@napi-rs/wasm-runtime@npm:^0.2.10, @napi-rs/wasm-runtime@npm:^0.2.11": + version: 0.2.11 + resolution: "@napi-rs/wasm-runtime@npm:0.2.11" dependencies: "@emnapi/core": "npm:^1.4.3" "@emnapi/runtime": "npm:^1.4.3" "@tybys/wasm-util": "npm:^0.9.0" - checksum: 10c0/4dce9bbb94a8969805574e1b55fdbeb7623348190265d77f6507ba32e535610deeb53a33ba0bb8b05a6520f379d418b92e8a01c5cd7b9486b136d2c0c26be0bd + checksum: 10c0/049bd14c58b99fbe0967b95e9921c5503df196b59be22948d2155f17652eb305cff6728efd8685338b855da7e476dd2551fbe3a313fc2d810938f0717478441e languageName: node linkType: hard @@ -1687,104 +1696,104 @@ __metadata: linkType: hard "@typescript-eslint/eslint-plugin@npm:^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": - version: 8.33.1 - resolution: "@typescript-eslint/eslint-plugin@npm:8.33.1" + version: 8.34.1 + resolution: "@typescript-eslint/eslint-plugin@npm:8.34.1" dependencies: "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:8.33.1" - "@typescript-eslint/type-utils": "npm:8.33.1" - "@typescript-eslint/utils": "npm:8.33.1" - "@typescript-eslint/visitor-keys": "npm:8.33.1" + "@typescript-eslint/scope-manager": "npm:8.34.1" + "@typescript-eslint/type-utils": "npm:8.34.1" + "@typescript-eslint/utils": "npm:8.34.1" + "@typescript-eslint/visitor-keys": "npm:8.34.1" graphemer: "npm:^1.4.0" ignore: "npm:^7.0.0" natural-compare: "npm:^1.4.0" ts-api-utils: "npm:^2.1.0" peerDependencies: - "@typescript-eslint/parser": ^8.33.1 + "@typescript-eslint/parser": ^8.34.1 eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/35544068f175ca25296b42d0905065b40653a92c62e55414be68f62ddab580d7d768ee3c1276195fd8b8dd49de738ab7b41b8685e6fe2cd341cfca7320569166 + checksum: 10c0/f1c9f25e4fe4b59622312dfa0ca1e80fa7945296ba5c04362a5fda084a17e23a6b98dac331f5a13bcb1ba34a2b598a3f5c41aa288f0c51fe60196e912954e56a languageName: node linkType: hard "@typescript-eslint/parser@npm:^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": - version: 8.33.1 - resolution: "@typescript-eslint/parser@npm:8.33.1" + version: 8.34.1 + resolution: "@typescript-eslint/parser@npm:8.34.1" dependencies: - "@typescript-eslint/scope-manager": "npm:8.33.1" - "@typescript-eslint/types": "npm:8.33.1" - "@typescript-eslint/typescript-estree": "npm:8.33.1" - "@typescript-eslint/visitor-keys": "npm:8.33.1" + "@typescript-eslint/scope-manager": "npm:8.34.1" + "@typescript-eslint/types": "npm:8.34.1" + "@typescript-eslint/typescript-estree": "npm:8.34.1" + "@typescript-eslint/visitor-keys": "npm:8.34.1" debug: "npm:^4.3.4" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/be1c1313c342d956f5adfbd56f79865894cc9cabf93992515a690559c3758538868270671b222f90e4cabc2dcab82256aeb3ccea7502de9cc69e47b9b17ed45f + checksum: 10c0/bf8070245d53ef6926ff6630bb72f245923f545304e2a61508fb944802a83fed8eab961d9010956d07999d51afdfbbec82aea9d6185295551a7c17c00d759183 languageName: node linkType: hard -"@typescript-eslint/project-service@npm:8.33.1": - version: 8.33.1 - resolution: "@typescript-eslint/project-service@npm:8.33.1" +"@typescript-eslint/project-service@npm:8.34.1": + version: 8.34.1 + resolution: "@typescript-eslint/project-service@npm:8.34.1" dependencies: - "@typescript-eslint/tsconfig-utils": "npm:^8.33.1" - "@typescript-eslint/types": "npm:^8.33.1" + "@typescript-eslint/tsconfig-utils": "npm:^8.34.1" + "@typescript-eslint/types": "npm:^8.34.1" debug: "npm:^4.3.4" peerDependencies: typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/b2ff7653aef4648bdff8aafc69b9de434184827216709f8a36427536ac7082a8adf1c5ac12a0a2bb023b46dfad8f6fee238028acc94af622956af7f22362de6f + checksum: 10c0/9333a890625f6777054db17a6b299281ae7502bb7615261d15b885a75b8cf65fc91591389c93b37ecd14b651d8e94851dac8718e5dcc8ed0600533535dae855c languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:8.33.1": - version: 8.33.1 - resolution: "@typescript-eslint/scope-manager@npm:8.33.1" +"@typescript-eslint/scope-manager@npm:8.34.1": + version: 8.34.1 + resolution: "@typescript-eslint/scope-manager@npm:8.34.1" dependencies: - "@typescript-eslint/types": "npm:8.33.1" - "@typescript-eslint/visitor-keys": "npm:8.33.1" - checksum: 10c0/03a6fd2b0a8ebeb62083a8f51658f0c42391cbfb632411542569a3a227d53bdb0332026ef4d5adc4780e5350d1d8b89e5b19667ed899afd26506e60c70192692 + "@typescript-eslint/types": "npm:8.34.1" + "@typescript-eslint/visitor-keys": "npm:8.34.1" + checksum: 10c0/2af608fa3900f4726322e33bf4f3a376fdace3ac0f310cf7d9256bbc2905c3896138176a47dd195d2c2229f27fe43f5deb4bc7729db2eb18389926dedea78077 languageName: node linkType: hard -"@typescript-eslint/tsconfig-utils@npm:8.33.1, @typescript-eslint/tsconfig-utils@npm:^8.33.1": - version: 8.33.1 - resolution: "@typescript-eslint/tsconfig-utils@npm:8.33.1" +"@typescript-eslint/tsconfig-utils@npm:8.34.1, @typescript-eslint/tsconfig-utils@npm:^8.34.1": + version: 8.34.1 + resolution: "@typescript-eslint/tsconfig-utils@npm:8.34.1" peerDependencies: typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/242e8f271d2e6e51446d337e1e59e8c91b66c0241da0fb861f536eb86cc3b53d1727c41e12e1ba070fa2451c8bc517c1ec50decaffa92a7c612b2aba29872777 + checksum: 10c0/8d1ead8b7c279b48e2ed96f083ec119a9aeea1ca9cdd40576ec271b996b9fd8cfa0ddb0aafbb4e14bc27fc62c69c5be66d39b1de68eab9ddd7f1861da267423d languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:8.33.1": - version: 8.33.1 - resolution: "@typescript-eslint/type-utils@npm:8.33.1" +"@typescript-eslint/type-utils@npm:8.34.1": + version: 8.34.1 + resolution: "@typescript-eslint/type-utils@npm:8.34.1" dependencies: - "@typescript-eslint/typescript-estree": "npm:8.33.1" - "@typescript-eslint/utils": "npm:8.33.1" + "@typescript-eslint/typescript-estree": "npm:8.34.1" + "@typescript-eslint/utils": "npm:8.34.1" debug: "npm:^4.3.4" ts-api-utils: "npm:^2.1.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/59843eeb7c652306d130104d7cb0f7dea1cc95a6cf6345609efbae130f24e3c4a9472780332af4247337e152b7955540b15fd9b907c04a5d265b888139818266 + checksum: 10c0/502a2cdfe47f1f34206c747b5a70e0242dd99f570511db3dda9c5f999d9abadfbbb1dfa82a1fa437a1689d232715412e61c97d95f19c9314ba5ad23196b4096d languageName: node linkType: hard -"@typescript-eslint/types@npm:8.33.1, @typescript-eslint/types@npm:^8.33.1": - version: 8.33.1 - resolution: "@typescript-eslint/types@npm:8.33.1" - checksum: 10c0/3083c184c882475eed1f9d1a8961dad30ef834c662bc826ff9a959ff1eed49aad21a73b2b93c4062799feafff5f5f24aebb1df17e198808aa19d4c8de1e64095 +"@typescript-eslint/types@npm:8.34.1, @typescript-eslint/types@npm:^8.34.1": + version: 8.34.1 + resolution: "@typescript-eslint/types@npm:8.34.1" + checksum: 10c0/db1b3dce6a70b28ddb13c76fbb5983240d9395656df5f7cbd99bfd9905e39c0dab2132870f01dbc406b48739c437f7d344a879a824cedaba81b91a53110dc23a languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:8.33.1": - version: 8.33.1 - resolution: "@typescript-eslint/typescript-estree@npm:8.33.1" +"@typescript-eslint/typescript-estree@npm:8.34.1": + version: 8.34.1 + resolution: "@typescript-eslint/typescript-estree@npm:8.34.1" dependencies: - "@typescript-eslint/project-service": "npm:8.33.1" - "@typescript-eslint/tsconfig-utils": "npm:8.33.1" - "@typescript-eslint/types": "npm:8.33.1" - "@typescript-eslint/visitor-keys": "npm:8.33.1" + "@typescript-eslint/project-service": "npm:8.34.1" + "@typescript-eslint/tsconfig-utils": "npm:8.34.1" + "@typescript-eslint/types": "npm:8.34.1" + "@typescript-eslint/visitor-keys": "npm:8.34.1" debug: "npm:^4.3.4" fast-glob: "npm:^3.3.2" is-glob: "npm:^4.0.3" @@ -1793,156 +1802,177 @@ __metadata: ts-api-utils: "npm:^2.1.0" peerDependencies: typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/293a93d25046e05fdc3887232191c3f3ee771c0f5b1426d63deaf0541db1cb80b4307a80805c78b092206c9b267884a7e6b5905dc1b3c26f28bb4de47fd9ee8f + checksum: 10c0/4ee7249db91b9840361f34f80b7b6d646a3af159c7298d79a33d8a11c98792fd3a395343e5e17e0fa29529e8f0113bac8baadcef90d1e140bd736a48f0485042 languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.33.1": - version: 8.33.1 - resolution: "@typescript-eslint/utils@npm:8.33.1" +"@typescript-eslint/utils@npm:8.34.1": + version: 8.34.1 + resolution: "@typescript-eslint/utils@npm:8.34.1" dependencies: "@eslint-community/eslint-utils": "npm:^4.7.0" - "@typescript-eslint/scope-manager": "npm:8.33.1" - "@typescript-eslint/types": "npm:8.33.1" - "@typescript-eslint/typescript-estree": "npm:8.33.1" + "@typescript-eslint/scope-manager": "npm:8.34.1" + "@typescript-eslint/types": "npm:8.34.1" + "@typescript-eslint/typescript-estree": "npm:8.34.1" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/12263df6eb32e8175236ad899687c062b50cfe4a0e66307d25ad2bf85a3e911faacbfbea4df180a59ebb5913fe1cc1f53fe3914695c7d802dd318bbc846fea26 + checksum: 10c0/e3085877f7940c02a37653e6bc52ac6cde115e755b1f788fe4331202f371b3421cc4d0878c7d3eb054e14e9b3a064496a707a73eac471cb2b73593b9e9d4b998 languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:8.33.1": - version: 8.33.1 - resolution: "@typescript-eslint/visitor-keys@npm:8.33.1" +"@typescript-eslint/visitor-keys@npm:8.34.1": + version: 8.34.1 + resolution: "@typescript-eslint/visitor-keys@npm:8.34.1" dependencies: - "@typescript-eslint/types": "npm:8.33.1" - eslint-visitor-keys: "npm:^4.2.0" - checksum: 10c0/3eb99072e7c2741d5dfc38945d1e7617b15ed10d06b24658a6e919e4153983b3d3c5f5f775ce140f83a84dbde219948d187de97defb09c1a91f3cf0a96704a94 + "@typescript-eslint/types": "npm:8.34.1" + eslint-visitor-keys: "npm:^4.2.1" + checksum: 10c0/0e5a9b3d93905d16d3cf8cb5fb346dcc6f760482eb7d0ac209aefc09a32f78ef28a687634df6ad08e81fb3e1083e8805f34472de6bbc501c0105ad654d518f40 languageName: node linkType: hard -"@unrs/resolver-binding-darwin-arm64@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-darwin-arm64@npm:1.7.11" +"@unrs/resolver-binding-android-arm-eabi@npm:1.9.0": + version: 1.9.0 + resolution: "@unrs/resolver-binding-android-arm-eabi@npm:1.9.0" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@unrs/resolver-binding-android-arm64@npm:1.9.0": + version: 1.9.0 + resolution: "@unrs/resolver-binding-android-arm64@npm:1.9.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@unrs/resolver-binding-darwin-arm64@npm:1.9.0": + version: 1.9.0 + resolution: "@unrs/resolver-binding-darwin-arm64@npm:1.9.0" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@unrs/resolver-binding-darwin-x64@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-darwin-x64@npm:1.7.11" +"@unrs/resolver-binding-darwin-x64@npm:1.9.0": + version: 1.9.0 + resolution: "@unrs/resolver-binding-darwin-x64@npm:1.9.0" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@unrs/resolver-binding-freebsd-x64@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-freebsd-x64@npm:1.7.11" +"@unrs/resolver-binding-freebsd-x64@npm:1.9.0": + version: 1.9.0 + resolution: "@unrs/resolver-binding-freebsd-x64@npm:1.9.0" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.7.11" +"@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.9.0": + version: 1.9.0 + resolution: "@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.9.0" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@unrs/resolver-binding-linux-arm-musleabihf@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-linux-arm-musleabihf@npm:1.7.11" +"@unrs/resolver-binding-linux-arm-musleabihf@npm:1.9.0": + version: 1.9.0 + resolution: "@unrs/resolver-binding-linux-arm-musleabihf@npm:1.9.0" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@unrs/resolver-binding-linux-arm64-gnu@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-linux-arm64-gnu@npm:1.7.11" +"@unrs/resolver-binding-linux-arm64-gnu@npm:1.9.0": + version: 1.9.0 + resolution: "@unrs/resolver-binding-linux-arm64-gnu@npm:1.9.0" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@unrs/resolver-binding-linux-arm64-musl@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-linux-arm64-musl@npm:1.7.11" +"@unrs/resolver-binding-linux-arm64-musl@npm:1.9.0": + version: 1.9.0 + resolution: "@unrs/resolver-binding-linux-arm64-musl@npm:1.9.0" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@unrs/resolver-binding-linux-ppc64-gnu@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-linux-ppc64-gnu@npm:1.7.11" +"@unrs/resolver-binding-linux-ppc64-gnu@npm:1.9.0": + version: 1.9.0 + resolution: "@unrs/resolver-binding-linux-ppc64-gnu@npm:1.9.0" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@unrs/resolver-binding-linux-riscv64-gnu@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-linux-riscv64-gnu@npm:1.7.11" +"@unrs/resolver-binding-linux-riscv64-gnu@npm:1.9.0": + version: 1.9.0 + resolution: "@unrs/resolver-binding-linux-riscv64-gnu@npm:1.9.0" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@unrs/resolver-binding-linux-riscv64-musl@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-linux-riscv64-musl@npm:1.7.11" +"@unrs/resolver-binding-linux-riscv64-musl@npm:1.9.0": + version: 1.9.0 + resolution: "@unrs/resolver-binding-linux-riscv64-musl@npm:1.9.0" conditions: os=linux & cpu=riscv64 & libc=musl languageName: node linkType: hard -"@unrs/resolver-binding-linux-s390x-gnu@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-linux-s390x-gnu@npm:1.7.11" +"@unrs/resolver-binding-linux-s390x-gnu@npm:1.9.0": + version: 1.9.0 + resolution: "@unrs/resolver-binding-linux-s390x-gnu@npm:1.9.0" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@unrs/resolver-binding-linux-x64-gnu@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-linux-x64-gnu@npm:1.7.11" +"@unrs/resolver-binding-linux-x64-gnu@npm:1.9.0": + version: 1.9.0 + resolution: "@unrs/resolver-binding-linux-x64-gnu@npm:1.9.0" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@unrs/resolver-binding-linux-x64-musl@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-linux-x64-musl@npm:1.7.11" +"@unrs/resolver-binding-linux-x64-musl@npm:1.9.0": + version: 1.9.0 + resolution: "@unrs/resolver-binding-linux-x64-musl@npm:1.9.0" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@unrs/resolver-binding-wasm32-wasi@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-wasm32-wasi@npm:1.7.11" +"@unrs/resolver-binding-wasm32-wasi@npm:1.9.0": + version: 1.9.0 + resolution: "@unrs/resolver-binding-wasm32-wasi@npm:1.9.0" dependencies: - "@napi-rs/wasm-runtime": "npm:^0.2.10" + "@napi-rs/wasm-runtime": "npm:^0.2.11" conditions: cpu=wasm32 languageName: node linkType: hard -"@unrs/resolver-binding-win32-arm64-msvc@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-win32-arm64-msvc@npm:1.7.11" +"@unrs/resolver-binding-win32-arm64-msvc@npm:1.9.0": + version: 1.9.0 + resolution: "@unrs/resolver-binding-win32-arm64-msvc@npm:1.9.0" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@unrs/resolver-binding-win32-ia32-msvc@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-win32-ia32-msvc@npm:1.7.11" +"@unrs/resolver-binding-win32-ia32-msvc@npm:1.9.0": + version: 1.9.0 + resolution: "@unrs/resolver-binding-win32-ia32-msvc@npm:1.9.0" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@unrs/resolver-binding-win32-x64-msvc@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-win32-x64-msvc@npm:1.7.11" +"@unrs/resolver-binding-win32-x64-msvc@npm:1.9.0": + version: 1.9.0 + resolution: "@unrs/resolver-binding-win32-x64-msvc@npm:1.9.0" conditions: os=win32 & cpu=x64 languageName: node linkType: hard +"@wojtekmaj/date-utils@npm:^1.1.3": + version: 1.5.1 + resolution: "@wojtekmaj/date-utils@npm:1.5.1" + checksum: 10c0/7c213cca5ab6b84ef61b9aea2b9fb8a04bf4c9764b28a97ffc4ee46a3e81560532a74d106a6f8aeef4792e1aaa6ea3dfd3c4a639dddbea560eb3f33cd62b8d7d + languageName: node + linkType: hard + "acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" @@ -1952,15 +1982,6 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.14.0": - version: 8.14.1 - resolution: "acorn@npm:8.14.1" - bin: - acorn: bin/acorn - checksum: 10c0/dbd36c1ed1d2fa3550140000371fcf721578095b18777b85a79df231ca093b08edc6858d75d6e48c73e431c174dcf9214edbd7e6fa5911b93bd8abfa54e47123 - languageName: node - linkType: hard - "acorn@npm:^8.15.0": version: 8.15.0 resolution: "acorn@npm:8.15.0" @@ -2175,21 +2196,21 @@ __metadata: linkType: hard "brace-expansion@npm:^1.1.7": - version: 1.1.11 - resolution: "brace-expansion@npm:1.1.11" + version: 1.1.12 + resolution: "brace-expansion@npm:1.1.12" dependencies: balanced-match: "npm:^1.0.0" concat-map: "npm:0.0.1" - checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668 + checksum: 10c0/975fecac2bb7758c062c20d0b3b6288c7cc895219ee25f0a64a9de662dbac981ff0b6e89909c3897c1f84fa353113a721923afdec5f8b2350255b097f12b1f73 languageName: node linkType: hard "brace-expansion@npm:^2.0.1": - version: 2.0.1 - resolution: "brace-expansion@npm:2.0.1" + version: 2.0.2 + resolution: "brace-expansion@npm:2.0.2" dependencies: balanced-match: "npm:^1.0.0" - checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f + checksum: 10c0/6d117a4c793488af86b83172deb6af143e94c17bc53b0b3cec259733923b4ca84679d506ac261f4ba3c7ed37c46018e2ff442f9ce453af8643ecd64f4a54e6cf languageName: node linkType: hard @@ -2251,9 +2272,9 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.30001579": - version: 1.0.30001721 - resolution: "caniuse-lite@npm:1.0.30001721" - checksum: 10c0/fa3a8926899824b385279f1f886fe34c5efb1321c9ece1b9df25c8d567a2706db8450cc5b4d969e769e641593e08ea644909324aba93636a43e4949a75f81c4c + version: 1.0.30001723 + resolution: "caniuse-lite@npm:1.0.30001723" + checksum: 10c0/e019503061759b96017c4d27ddd7ca1b48533eabcd0431b51d2e3156f99f6b031075e46c279c0db63424cdfc874bba992caec2db51b922a0f945e686246886f6 languageName: node linkType: hard @@ -2290,7 +2311,7 @@ __metadata: languageName: node linkType: hard -"clsx@npm:^2.1.1": +"clsx@npm:^2.0.0, clsx@npm:^2.1.1": version: 2.1.1 resolution: "clsx@npm:2.1.1" checksum: 10c0/c4c8eb865f8c82baab07e71bfa8897c73454881c4f99d6bc81585aecd7c441746c1399d08363dc096c550cceaf97bd4ce1e8854e1771e9998d9f94c4fe075839 @@ -2865,13 +2886,6 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^4.2.0": - version: 4.2.0 - resolution: "eslint-visitor-keys@npm:4.2.0" - checksum: 10c0/2ed81c663b147ca6f578312919483eb040295bbab759e5a371953456c636c5b49a559883e2677112453728d66293c0a4c90ab11cab3428cf02a0236d2e738269 - languageName: node - linkType: hard - "eslint-visitor-keys@npm:^4.2.1": version: 4.2.1 resolution: "eslint-visitor-keys@npm:4.2.1" @@ -2929,18 +2943,7 @@ __metadata: languageName: node linkType: hard -"espree@npm:^10.0.1": - version: 10.3.0 - resolution: "espree@npm:10.3.0" - dependencies: - acorn: "npm:^8.14.0" - acorn-jsx: "npm:^5.3.2" - eslint-visitor-keys: "npm:^4.2.0" - checksum: 10c0/272beeaca70d0a1a047d61baff64db04664a33d7cfb5d144f84bc8a5c6194c6c8ebe9cc594093ca53add88baa23e59b01e69e8a0160ab32eac570482e165c462 - languageName: node - linkType: hard - -"espree@npm:^10.4.0": +"espree@npm:^10.0.1, espree@npm:^10.4.0": version: 10.4.0 resolution: "espree@npm:10.4.0" dependencies: @@ -3040,14 +3043,14 @@ __metadata: linkType: hard "fdir@npm:^6.4.4": - version: 6.4.5 - resolution: "fdir@npm:6.4.5" + version: 6.4.6 + resolution: "fdir@npm:6.4.6" peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: picomatch: optional: true - checksum: 10c0/5d63330a1b97165e9b0fb20369fafc7cf826bc4b3e374efcb650bc77d7145ac01193b5da1a7591eab89ae6fd6b15cdd414085910b2a2b42296b1480c9f2677af + checksum: 10c0/45b559cff889934ebb8bc498351e5acba40750ada7e7d6bde197768d2fa67c149be8ae7f8ff34d03f4e1eb20f2764116e56440aaa2f6689e9a4aa7ef06acafe9 languageName: node linkType: hard @@ -3188,6 +3191,15 @@ __metadata: languageName: node linkType: hard +"get-user-locale@npm:^2.2.1": + version: 2.3.2 + resolution: "get-user-locale@npm:2.3.2" + dependencies: + mem: "npm:^8.0.0" + checksum: 10c0/2796b3fc3782b1f4826f31e899642cf72eeb23e296e1cf55280aab5caf7a25f4b906491ee1508a001519d6a410902ccf8fa8edaa895b7aee5dfd422ffe5523b9 + languageName: node + linkType: hard + "glob-parent@npm:^5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" @@ -3858,7 +3870,7 @@ __metadata: languageName: node linkType: hard -"loose-envify@npm:^1.4.0": +"loose-envify@npm:^1.0.0, loose-envify@npm:^1.4.0": version: 1.4.0 resolution: "loose-envify@npm:1.4.0" dependencies: @@ -3887,6 +3899,15 @@ __metadata: languageName: node linkType: hard +"map-age-cleaner@npm:^0.1.3": + version: 0.1.3 + resolution: "map-age-cleaner@npm:0.1.3" + dependencies: + p-defer: "npm:^1.0.0" + checksum: 10c0/7495236c7b0950956c144fd8b4bc6399d4e78072a8840a4232fe1c4faccbb5eb5d842e5c0a56a60afc36d723f315c1c672325ca03c1b328650f7fcc478f385fd + languageName: node + linkType: hard + "math-intrinsics@npm:^1.1.0": version: 1.1.0 resolution: "math-intrinsics@npm:1.1.0" @@ -3934,7 +3955,8 @@ __metadata: postcss: "npm:8.5.6" prettier: "npm:3.5.3" prisma: "npm:6.9.0" - react: "npm:^19.0.0" + react: "npm:^19.1.0" + react-calendar: "npm:^5.1.0" react-dom: "npm:^19.0.0" react-hook-form: "npm:^7.56.4" tailwind-merge: "npm:^3.2.0" @@ -3945,6 +3967,16 @@ __metadata: languageName: unknown linkType: soft +"mem@npm:^8.0.0": + version: 8.1.1 + resolution: "mem@npm:8.1.1" + dependencies: + map-age-cleaner: "npm:^0.1.3" + mimic-fn: "npm:^3.1.0" + checksum: 10c0/5829c404d024c1accaf76ebacbc7eae9b59e5ce5722d184aa24e8387a8097a499f6aa7e181021003c51eb87b2dcdc9a2270050c58753cce761de206643cba91c + languageName: node + linkType: hard + "merge2@npm:^1.3.0": version: 1.4.1 resolution: "merge2@npm:1.4.1" @@ -3962,6 +3994,13 @@ __metadata: languageName: node linkType: hard +"mimic-fn@npm:^3.1.0": + version: 3.1.0 + resolution: "mimic-fn@npm:3.1.0" + checksum: 10c0/a07cdd8ed6490c2dff5b11f889b245d9556b80f5a653a552a651d17cff5a2d156e632d235106c2369f00cccef4071704589574cf3601bc1b1400a1f620dff067 + languageName: node + linkType: hard + "minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" @@ -4138,9 +4177,9 @@ __metadata: linkType: hard "oauth4webapi@npm:^3.3.0": - version: 3.5.1 - resolution: "oauth4webapi@npm:3.5.1" - checksum: 10c0/5d57ba4299d61173b28ff0612fdfcc550b02c2ce4afcd1641103960c02af18268b55a70f26d47bbfc956680967c307546284b4a0b1f13845589e247f798ff395 + version: 3.5.2 + resolution: "oauth4webapi@npm:3.5.2" + checksum: 10c0/fd056001ce67c9e4aba9b170b6aabe26315bd9ce67787534575ea66a475115fdae7c68b8b193e8607156a8e97a56a3eef552abb34ec3447b28cfe7c18749468a languageName: node linkType: hard @@ -4251,6 +4290,13 @@ __metadata: languageName: node linkType: hard +"p-defer@npm:^1.0.0": + version: 1.0.0 + resolution: "p-defer@npm:1.0.0" + checksum: 10c0/ed603c3790e74b061ac2cb07eb6e65802cf58dce0fbee646c113a7b71edb711101329ad38f99e462bd2e343a74f6e9366b496a35f1d766c187084d3109900487 + languageName: node + linkType: hard + "p-limit@npm:^3.0.2": version: 3.1.0 resolution: "p-limit@npm:3.1.0" @@ -4338,7 +4384,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:8.5.6": +"postcss@npm:8.5.6, postcss@npm:^8.4.41": version: 8.5.6 resolution: "postcss@npm:8.5.6" dependencies: @@ -4349,17 +4395,6 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.4.41": - version: 8.5.4 - resolution: "postcss@npm:8.5.4" - dependencies: - nanoid: "npm:^3.3.11" - picocolors: "npm:^1.1.1" - source-map-js: "npm:^1.2.1" - checksum: 10c0/0feff648614a834f7cd5396ea6b05b658ca0507e10a4eaad03b56c348f6aec93f42a885fc1b30522630c6a7e49ae53b38a061e3cba526f2d9857afbe095a22bb - languageName: node - linkType: hard - "preact-render-to-string@npm:6.5.11": version: 6.5.11 resolution: "preact-render-to-string@npm:6.5.11" @@ -4434,6 +4469,25 @@ __metadata: languageName: node linkType: hard +"react-calendar@npm:^5.1.0": + version: 5.1.0 + resolution: "react-calendar@npm:5.1.0" + dependencies: + "@wojtekmaj/date-utils": "npm:^1.1.3" + clsx: "npm:^2.0.0" + get-user-locale: "npm:^2.2.1" + warning: "npm:^4.0.0" + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/27673f639c5d6296342a2a888436b31a5d602faeaae01be83b2beb98ff568b0a3d1514f5cc50fcacf3ac50b9c0b9d2fb423b0c001a8f5f1a22816671409e2616 + languageName: node + linkType: hard + "react-dom@npm:^19.0.0": version: 19.1.0 resolution: "react-dom@npm:19.1.0" @@ -4512,7 +4566,7 @@ __metadata: languageName: node linkType: hard -"react@npm:^19.0.0": +"react@npm:^19.1.0": version: 19.1.0 resolution: "react@npm:19.1.0" checksum: 10c0/530fb9a62237d54137a13d2cfb67a7db6a2156faed43eecc423f4713d9b20c6f2728b026b45e28fcd72e8eadb9e9ed4b089e99f5e295d2f0ad3134251bdd3698 @@ -5223,28 +5277,34 @@ __metadata: linkType: hard "unrs-resolver@npm:^1.6.2": - version: 1.7.11 - resolution: "unrs-resolver@npm:1.7.11" + version: 1.9.0 + resolution: "unrs-resolver@npm:1.9.0" dependencies: - "@unrs/resolver-binding-darwin-arm64": "npm:1.7.11" - "@unrs/resolver-binding-darwin-x64": "npm:1.7.11" - "@unrs/resolver-binding-freebsd-x64": "npm:1.7.11" - "@unrs/resolver-binding-linux-arm-gnueabihf": "npm:1.7.11" - "@unrs/resolver-binding-linux-arm-musleabihf": "npm:1.7.11" - "@unrs/resolver-binding-linux-arm64-gnu": "npm:1.7.11" - "@unrs/resolver-binding-linux-arm64-musl": "npm:1.7.11" - "@unrs/resolver-binding-linux-ppc64-gnu": "npm:1.7.11" - "@unrs/resolver-binding-linux-riscv64-gnu": "npm:1.7.11" - "@unrs/resolver-binding-linux-riscv64-musl": "npm:1.7.11" - "@unrs/resolver-binding-linux-s390x-gnu": "npm:1.7.11" - "@unrs/resolver-binding-linux-x64-gnu": "npm:1.7.11" - "@unrs/resolver-binding-linux-x64-musl": "npm:1.7.11" - "@unrs/resolver-binding-wasm32-wasi": "npm:1.7.11" - "@unrs/resolver-binding-win32-arm64-msvc": "npm:1.7.11" - "@unrs/resolver-binding-win32-ia32-msvc": "npm:1.7.11" - "@unrs/resolver-binding-win32-x64-msvc": "npm:1.7.11" + "@unrs/resolver-binding-android-arm-eabi": "npm:1.9.0" + "@unrs/resolver-binding-android-arm64": "npm:1.9.0" + "@unrs/resolver-binding-darwin-arm64": "npm:1.9.0" + "@unrs/resolver-binding-darwin-x64": "npm:1.9.0" + "@unrs/resolver-binding-freebsd-x64": "npm:1.9.0" + "@unrs/resolver-binding-linux-arm-gnueabihf": "npm:1.9.0" + "@unrs/resolver-binding-linux-arm-musleabihf": "npm:1.9.0" + "@unrs/resolver-binding-linux-arm64-gnu": "npm:1.9.0" + "@unrs/resolver-binding-linux-arm64-musl": "npm:1.9.0" + "@unrs/resolver-binding-linux-ppc64-gnu": "npm:1.9.0" + "@unrs/resolver-binding-linux-riscv64-gnu": "npm:1.9.0" + "@unrs/resolver-binding-linux-riscv64-musl": "npm:1.9.0" + "@unrs/resolver-binding-linux-s390x-gnu": "npm:1.9.0" + "@unrs/resolver-binding-linux-x64-gnu": "npm:1.9.0" + "@unrs/resolver-binding-linux-x64-musl": "npm:1.9.0" + "@unrs/resolver-binding-wasm32-wasi": "npm:1.9.0" + "@unrs/resolver-binding-win32-arm64-msvc": "npm:1.9.0" + "@unrs/resolver-binding-win32-ia32-msvc": "npm:1.9.0" + "@unrs/resolver-binding-win32-x64-msvc": "npm:1.9.0" napi-postinstall: "npm:^0.2.2" dependenciesMeta: + "@unrs/resolver-binding-android-arm-eabi": + optional: true + "@unrs/resolver-binding-android-arm64": + optional: true "@unrs/resolver-binding-darwin-arm64": optional: true "@unrs/resolver-binding-darwin-x64": @@ -5279,7 +5339,7 @@ __metadata: optional: true "@unrs/resolver-binding-win32-x64-msvc": optional: true - checksum: 10c0/37e6caf2884b7ce65f77fc5b945997b94523656d477ae0e67fb8df970939930b674091f3fac6beee93b0370fa64a925ad707edc76897aa8cb14866efbe4a6693 + checksum: 10c0/73c184514a82197145539c0506dd6633a28fc380192b1677d31348537c2783405e7392cf2bf18b96d84b8068f502868de3ae741edd580683ddb39f10d46d49e8 languageName: node linkType: hard @@ -5323,6 +5383,15 @@ __metadata: languageName: node linkType: hard +"warning@npm:^4.0.0": + version: 4.0.3 + resolution: "warning@npm:4.0.3" + dependencies: + loose-envify: "npm:^1.0.0" + checksum: 10c0/aebab445129f3e104c271f1637fa38e55eb25f968593e3825bd2f7a12bd58dc3738bb70dc8ec85826621d80b4acfed5a29ebc9da17397c6125864d72301b937e + languageName: node + linkType: hard + "which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1": version: 1.1.1 resolution: "which-boxed-primitive@npm:1.1.1" From fe94793fb537bea475350022d2f9a9fbfb4b85e4 Mon Sep 17 00:00:00 2001 From: Semir Date: Fri, 23 May 2025 15:23:01 +0200 Subject: [PATCH 02/39] feat: Calendar Update --- package.json | 3 +- src/app/home/page.tsx | 135 ++++---------------- yarn.lock | 285 ++++++++++++++++++++++++++++++++---------- 3 files changed, 248 insertions(+), 175 deletions(-) diff --git a/package.json b/package.json index 8deaf17..5d8483e 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "next-auth": "^5.0.0-beta.25", "next-themes": "^0.4.6", "react": "^19.1.0", - "react-calendar": "^5.1.0", + "react-big-calendar": "^1.18.0", "react-dom": "^19.0.0", "react-hook-form": "^7.56.4", "tailwind-merge": "^3.2.0", @@ -52,6 +52,7 @@ "@tailwindcss/postcss": "4.1.10", "@types/node": "22.15.32", "@types/react": "19.1.8", + "@types/react-big-calendar": "^1", "@types/react-dom": "19.1.6", "dotenv-cli": "8.0.0", "eslint": "9.29.0", diff --git a/src/app/home/page.tsx b/src/app/home/page.tsx index 527b231..b20d042 100644 --- a/src/app/home/page.tsx +++ b/src/app/home/page.tsx @@ -1,114 +1,31 @@ -import React from 'react'; +"use client"; -const Calendar: React.FC = () => { - const today = new Date(); - const currentYear = today.getFullYear(); - const currentMonth = today.getMonth(); - const currentDate = today.getDate(); +import { Calendar, momentLocalizer } from 'react-big-calendar'; +import moment from 'moment'; +import 'react-big-calendar/lib/css/react-big-calendar.css'; +import 'react-big-calendar/lib/addons/dragAndDrop/styles.css'; - const firstDayMonth = new Date(currentYear, currentMonth, 1); - const lastDayMonth = new Date(currentYear, currentMonth + 1, 0); - const startDay = (firstDayMonth.getDay() + 6) % 7; - const daysMonth = lastDayMonth.getDate(); +moment.updateLocale('en', { + week: { + dow: 1, + doy: 4, + }, +}); - const weeks: (number | null)[][] = []; - let currentDay = 1; +const localizer = momentLocalizer(moment) - const firstWeek: (number | null)[] = []; - for (let i = 0; i < 7; i++) { - if (i < startDay) { - firstWeek.push(null); - } else { - firstWeek.push(currentDay); - currentDay++; - } - } - weeks.push(firstWeek); +const MyCalendar = (props) => ( +
+ +
+) - while (currentDay <= daysMonth) { - const week: (number | null)[] = []; - for (let i = 0; i < 7; i++) { - if (currentDay <= daysMonth) { - week.push(currentDay); - currentDay++; - } else { - week.push(null); - } - } - weeks.push(week); - } - - const weekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']; - - return ( -
-

- {new Date(currentYear, currentMonth).toLocaleString('en-EN', { - month: 'long', - year: 'numeric' - })} -

- - - - {weekdays.map((day, index) => ( - - ))} - - - - {weeks.map((week, weekIndex) => ( - - {week.map((day, dayIndex) => ( - - ))} - - ))} - -
- {day} -
- {day && ( -
- {day} -
- )} -
-
- ); -}; - -export default Calendar; \ No newline at end of file +export default MyCalendar; \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 32af57e..245196a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -57,6 +57,13 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:^7.13.8, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.6.3, @babel/runtime@npm:^7.8.7": + version: 7.27.6 + resolution: "@babel/runtime@npm:7.27.6" + checksum: 10c0/89726be83f356f511dcdb74d3ea4d873a5f0cf0017d4530cb53aa27380c01ca102d573eff8b8b77815e624b1f8c24e7f0311834ad4fb632c90a770fda00bd4c8 + languageName: node + linkType: hard + "@emnapi/core@npm:^1.4.3": version: 1.4.3 resolution: "@emnapi/core@npm:1.4.3" @@ -686,6 +693,13 @@ __metadata: languageName: node linkType: hard +"@popperjs/core@npm:^2.11.6": + version: 2.11.8 + resolution: "@popperjs/core@npm:2.11.8" + checksum: 10c0/4681e682abc006d25eb380d0cf3efc7557043f53b6aea7a5057d0d1e7df849a00e281cd8ea79c902a35a414d7919621fc2ba293ecec05f413598e0b23d5a1e63 + languageName: node + linkType: hard + "@prisma/client@npm:^6.9.0": version: 6.9.0 resolution: "@prisma/client@npm:6.9.0" @@ -1435,6 +1449,17 @@ __metadata: languageName: node linkType: hard +"@restart/hooks@npm:^0.4.7": + version: 0.4.16 + resolution: "@restart/hooks@npm:0.4.16" + dependencies: + dequal: "npm:^2.0.3" + peerDependencies: + react: ">=16.8.0" + checksum: 10c0/b6a0f1db046cdec28737092ab5defdfb25fad498d37d218646f7f123aed02a5078b1c89ae631bda14d9ee35f7bb8c9e0f15379b1a45003144dc30cd15e8ba668 + languageName: node + linkType: hard + "@rtsao/scc@npm:^1.1.0": version: 1.1.0 resolution: "@rtsao/scc@npm:1.1.0" @@ -1647,6 +1672,13 @@ __metadata: languageName: node linkType: hard +"@types/date-arithmetic@npm:*": + version: 4.1.4 + resolution: "@types/date-arithmetic@npm:4.1.4" + checksum: 10c0/4ee68b5a422bd5f1cf08923d18a08db558e653bbdc597677e0465a330f1e807da0e79b06b72651b62b19b4b922a779470f84657cbd765805f84f33af518b408f + languageName: node + linkType: hard + "@types/estree@npm:^1.0.6": version: 1.0.8 resolution: "@types/estree@npm:1.0.8" @@ -1677,6 +1709,24 @@ __metadata: languageName: node linkType: hard +"@types/prop-types@npm:*": + version: 15.7.15 + resolution: "@types/prop-types@npm:15.7.15" + checksum: 10c0/b59aad1ad19bf1733cf524fd4e618196c6c7690f48ee70a327eb450a42aab8e8a063fbe59ca0a5701aebe2d92d582292c0fb845ea57474f6a15f6994b0e260b2 + languageName: node + linkType: hard + +"@types/react-big-calendar@npm:^1": + version: 1.16.2 + resolution: "@types/react-big-calendar@npm:1.16.2" + dependencies: + "@types/date-arithmetic": "npm:*" + "@types/prop-types": "npm:*" + "@types/react": "npm:*" + checksum: 10c0/a2ea4116b999cf8dac014fdc4a9f0c10fb2fd9d9886857e93649c0a601057e93e73e3d9096a756b76e227e08f68e4c979f91bf4cfd96692aea3ab7f3df0745d0 + languageName: node + linkType: hard + "@types/react-dom@npm:19.1.6": version: 19.1.6 resolution: "@types/react-dom@npm:19.1.6" @@ -1686,7 +1736,7 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:19.1.8": +"@types/react@npm:*, @types/react@npm:19.1.8, @types/react@npm:>=16.9.11": version: 19.1.8 resolution: "@types/react@npm:19.1.8" dependencies: @@ -1695,6 +1745,13 @@ __metadata: languageName: node linkType: hard +"@types/warning@npm:^3.0.0": + version: 3.0.3 + resolution: "@types/warning@npm:3.0.3" + checksum: 10c0/82c1235bd05d7f6940f80012404844e225d589ad338aa4585b231a2c8deacc695b683f4168757c82c10047b81854cbeaaeefd60536dd67bb48f8a65e20410652 + languageName: node + linkType: hard + "@typescript-eslint/eslint-plugin@npm:^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": version: 8.34.1 resolution: "@typescript-eslint/eslint-plugin@npm:8.34.1" @@ -1966,13 +2023,6 @@ __metadata: languageName: node linkType: hard -"@wojtekmaj/date-utils@npm:^1.1.3": - version: 1.5.1 - resolution: "@wojtekmaj/date-utils@npm:1.5.1" - checksum: 10c0/7c213cca5ab6b84ef61b9aea2b9fb8a04bf4c9764b28a97ffc4ee46a3e81560532a74d106a6f8aeef4792e1aaa6ea3dfd3c4a639dddbea560eb3f33cd62b8d7d - languageName: node - linkType: hard - "acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" @@ -2311,7 +2361,14 @@ __metadata: languageName: node linkType: hard -"clsx@npm:^2.0.0, clsx@npm:^2.1.1": +"clsx@npm:^1.2.1": + version: 1.2.1 + resolution: "clsx@npm:1.2.1" + checksum: 10c0/34dead8bee24f5e96f6e7937d711978380647e936a22e76380290e35486afd8634966ce300fc4b74a32f3762c7d4c0303f442c3e259f4ce02374eb0c82834f27 + languageName: node + linkType: hard + +"clsx@npm:^2.1.1": version: 2.1.1 resolution: "clsx@npm:2.1.1" checksum: 10c0/c4c8eb865f8c82baab07e71bfa8897c73454881c4f99d6bc81585aecd7c441746c1399d08363dc096c550cceaf97bd4ce1e8854e1771e9998d9f94c4fe075839 @@ -2419,6 +2476,20 @@ __metadata: languageName: node linkType: hard +"date-arithmetic@npm:^4.1.0": + version: 4.1.0 + resolution: "date-arithmetic@npm:4.1.0" + checksum: 10c0/697774a1a6a1b226004b5527326599c01a095bf715a0d43089e0493a565a91e7f4342b1b73b855c0e7b0caaf4bc947a61bc35ec60d162d52ef3c3c08eab26b6e + languageName: node + linkType: hard + +"dayjs@npm:^1.11.7": + version: 1.11.13 + resolution: "dayjs@npm:1.11.13" + checksum: 10c0/a3caf6ac8363c7dade9d1ee797848ddcf25c1ace68d9fe8678ecf8ba0675825430de5d793672ec87b24a69bf04a1544b176547b2539982275d5542a7955f35b7 + languageName: node + linkType: hard + "debug@npm:^3.2.7": version: 3.2.7 resolution: "debug@npm:3.2.7" @@ -2469,6 +2540,13 @@ __metadata: languageName: node linkType: hard +"dequal@npm:^2.0.3": + version: 2.0.3 + resolution: "dequal@npm:2.0.3" + checksum: 10c0/f98860cdf58b64991ae10205137c0e97d384c3a4edc7f807603887b7c4b850af1224a33d88012009f150861cbee4fa2d322c4cc04b9313bee312e47f6ecaa888 + languageName: node + linkType: hard + "detect-libc@npm:^2.0.3, detect-libc@npm:^2.0.4": version: 2.0.4 resolution: "detect-libc@npm:2.0.4" @@ -2492,6 +2570,16 @@ __metadata: languageName: node linkType: hard +"dom-helpers@npm:^5.2.0, dom-helpers@npm:^5.2.1": + version: 5.2.1 + resolution: "dom-helpers@npm:5.2.1" + dependencies: + "@babel/runtime": "npm:^7.8.7" + csstype: "npm:^3.0.2" + checksum: 10c0/f735074d66dd759b36b158fa26e9d00c9388ee0e8c9b16af941c38f014a37fc80782de83afefd621681b19ac0501034b4f1c4a3bff5caa1b8667f0212b5e124c + languageName: node + linkType: hard + "dotenv-cli@npm:8.0.0": version: 8.0.0 resolution: "dotenv-cli@npm:8.0.0" @@ -3191,15 +3279,6 @@ __metadata: languageName: node linkType: hard -"get-user-locale@npm:^2.2.1": - version: 2.3.2 - resolution: "get-user-locale@npm:2.3.2" - dependencies: - mem: "npm:^8.0.0" - checksum: 10c0/2796b3fc3782b1f4826f31e899642cf72eeb23e296e1cf55280aab5caf7a25f4b906491ee1508a001519d6a410902ccf8fa8edaa895b7aee5dfd422ffe5523b9 - languageName: node - linkType: hard - "glob-parent@npm:^5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" @@ -3218,6 +3297,13 @@ __metadata: languageName: node linkType: hard +"globalize@npm:^0.1.1": + version: 0.1.1 + resolution: "globalize@npm:0.1.1" + checksum: 10c0/6d4687e7c52a38e7f16f77339aef9b3364c34ce8cc1c8b8495b76418013252eaf5b2453fbc2d8bb9e6e56c739262665484dc7ac51b729501ff0a3b822730116b + languageName: node + linkType: hard + "globals@npm:^14.0.0": version: 14.0.0 resolution: "globals@npm:14.0.0" @@ -3355,6 +3441,15 @@ __metadata: languageName: node linkType: hard +"invariant@npm:^2.2.4": + version: 2.2.4 + resolution: "invariant@npm:2.2.4" + dependencies: + loose-envify: "npm:^1.0.0" + checksum: 10c0/5af133a917c0bcf65e84e7f23e779e7abc1cd49cb7fdc62d00d1de74b0d8c1b5ee74ac7766099fb3be1b05b26dfc67bab76a17030d2fe7ea2eef867434362dfc + languageName: node + linkType: hard + "is-array-buffer@npm:^3.0.4, is-array-buffer@npm:^3.0.5": version: 3.0.5 resolution: "is-array-buffer@npm:3.0.5" @@ -3863,6 +3958,13 @@ __metadata: languageName: node linkType: hard +"lodash-es@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash-es@npm:4.17.21" + checksum: 10c0/fb407355f7e6cd523a9383e76e6b455321f0f153a6c9625e21a8827d10c54c2a2341bd2ae8d034358b60e07325e1330c14c224ff582d04612a46a4f0479ff2f2 + languageName: node + linkType: hard + "lodash.merge@npm:^4.6.2": version: 4.6.2 resolution: "lodash.merge@npm:4.6.2" @@ -3870,6 +3972,13 @@ __metadata: languageName: node linkType: hard +"lodash@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c + languageName: node + linkType: hard + "loose-envify@npm:^1.0.0, loose-envify@npm:^1.4.0": version: 1.4.0 resolution: "loose-envify@npm:1.4.0" @@ -3890,6 +3999,13 @@ __metadata: languageName: node linkType: hard +"luxon@npm:^3.2.1": + version: 3.6.1 + resolution: "luxon@npm:3.6.1" + checksum: 10c0/906d57a9dc4d1de9383f2e9223e378c298607c1b4d17b6657b836a3cd120feb1c1de3b5d06d846a3417e1ca764de8476e8c23b3cd4083b5cdb870adcb06a99d5 + languageName: node + linkType: hard + "magic-string@npm:^0.30.17": version: 0.30.17 resolution: "magic-string@npm:0.30.17" @@ -3899,15 +4015,6 @@ __metadata: languageName: node linkType: hard -"map-age-cleaner@npm:^0.1.3": - version: 0.1.3 - resolution: "map-age-cleaner@npm:0.1.3" - dependencies: - p-defer: "npm:^1.0.0" - checksum: 10c0/7495236c7b0950956c144fd8b4bc6399d4e78072a8840a4232fe1c4faccbb5eb5d842e5c0a56a60afc36d723f315c1c672325ca03c1b328650f7fcc478f385fd - languageName: node - linkType: hard - "math-intrinsics@npm:^1.1.0": version: 1.1.0 resolution: "math-intrinsics@npm:1.1.0" @@ -3940,6 +4047,7 @@ __metadata: "@tailwindcss/postcss": "npm:4.1.10" "@types/node": "npm:22.15.32" "@types/react": "npm:19.1.8" + "@types/react-big-calendar": "npm:^1" "@types/react-dom": "npm:19.1.6" bcryptjs: "npm:^3.0.2" class-variance-authority: "npm:^0.7.1" @@ -3956,7 +4064,7 @@ __metadata: prettier: "npm:3.5.3" prisma: "npm:6.9.0" react: "npm:^19.1.0" - react-calendar: "npm:^5.1.0" + react-big-calendar: "npm:^1.18.0" react-dom: "npm:^19.0.0" react-hook-form: "npm:^7.56.4" tailwind-merge: "npm:^3.2.0" @@ -3967,13 +4075,10 @@ __metadata: languageName: unknown linkType: soft -"mem@npm:^8.0.0": - version: 8.1.1 - resolution: "mem@npm:8.1.1" - dependencies: - map-age-cleaner: "npm:^0.1.3" - mimic-fn: "npm:^3.1.0" - checksum: 10c0/5829c404d024c1accaf76ebacbc7eae9b59e5ce5722d184aa24e8387a8097a499f6aa7e181021003c51eb87b2dcdc9a2270050c58753cce761de206643cba91c +"memoize-one@npm:^6.0.0": + version: 6.0.0 + resolution: "memoize-one@npm:6.0.0" + checksum: 10c0/45c88e064fd715166619af72e8cf8a7a17224d6edf61f7a8633d740ed8c8c0558a4373876c9b8ffc5518c2b65a960266adf403cc215cb1e90f7e262b58991f54 languageName: node linkType: hard @@ -3994,13 +4099,6 @@ __metadata: languageName: node linkType: hard -"mimic-fn@npm:^3.1.0": - version: 3.1.0 - resolution: "mimic-fn@npm:3.1.0" - checksum: 10c0/a07cdd8ed6490c2dff5b11f889b245d9556b80f5a653a552a651d17cff5a2d156e632d235106c2369f00cccef4071704589574cf3601bc1b1400a1f620dff067 - languageName: node - linkType: hard - "minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" @@ -4051,6 +4149,22 @@ __metadata: languageName: node linkType: hard +"moment-timezone@npm:^0.5.40": + version: 0.5.48 + resolution: "moment-timezone@npm:0.5.48" + dependencies: + moment: "npm:^2.29.4" + checksum: 10c0/ab14ec9d94bc33f29ac18e5417b7f8aca0b17130b952c5cc9697b8fea839e5ece9313af5fd3c9703a05db472b1560ddbfc7ad2aa24aac9afd047d6da6c3c6033 + languageName: node + linkType: hard + +"moment@npm:^2.29.4": + version: 2.30.1 + resolution: "moment@npm:2.30.1" + checksum: 10c0/865e4279418c6de666fca7786607705fd0189d8a7b7624e2e56be99290ac846f90878a6f602e34b4e0455c549b85385b1baf9966845962b313699e7cb847543a + languageName: node + linkType: hard + "ms@npm:^2.1.1, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" @@ -4290,13 +4404,6 @@ __metadata: languageName: node linkType: hard -"p-defer@npm:^1.0.0": - version: 1.0.0 - resolution: "p-defer@npm:1.0.0" - checksum: 10c0/ed603c3790e74b061ac2cb07eb6e65802cf58dce0fbee646c113a7b71edb711101329ad38f99e462bd2e343a74f6e9366b496a35f1d766c187084d3109900487 - languageName: node - linkType: hard - "p-limit@npm:^3.0.2": version: 3.1.0 resolution: "p-limit@npm:3.1.0" @@ -4444,7 +4551,7 @@ __metadata: languageName: node linkType: hard -"prop-types@npm:^15.8.1": +"prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" dependencies: @@ -4469,22 +4576,30 @@ __metadata: languageName: node linkType: hard -"react-calendar@npm:^5.1.0": - version: 5.1.0 - resolution: "react-calendar@npm:5.1.0" +"react-big-calendar@npm:^1.18.0": + version: 1.19.2 + resolution: "react-big-calendar@npm:1.19.2" dependencies: - "@wojtekmaj/date-utils": "npm:^1.1.3" - clsx: "npm:^2.0.0" - get-user-locale: "npm:^2.2.1" - warning: "npm:^4.0.0" + "@babel/runtime": "npm:^7.20.7" + clsx: "npm:^1.2.1" + date-arithmetic: "npm:^4.1.0" + dayjs: "npm:^1.11.7" + dom-helpers: "npm:^5.2.1" + globalize: "npm:^0.1.1" + invariant: "npm:^2.2.4" + lodash: "npm:^4.17.21" + lodash-es: "npm:^4.17.21" + luxon: "npm:^3.2.1" + memoize-one: "npm:^6.0.0" + moment: "npm:^2.29.4" + moment-timezone: "npm:^0.5.40" + prop-types: "npm:^15.8.1" + react-overlays: "npm:^5.2.1" + uncontrollable: "npm:^7.2.1" peerDependencies: - "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/27673f639c5d6296342a2a888436b31a5d602faeaae01be83b2beb98ff568b0a3d1514f5cc50fcacf3ac50b9c0b9d2fb423b0c001a8f5f1a22816671409e2616 + react: ^16.14.0 || ^17 || ^18 || ^19 + react-dom: ^16.14.0 || ^17 || ^18 || ^19 + checksum: 10c0/d60b12733d6c0dfb1b3bf89226a18b613dff66b3a4e03d90b0e7a68ad90478a3f4150b859a803474bfa98730bad3be622dc94326e90ac998e2e78ab36cef74db languageName: node linkType: hard @@ -4515,6 +4630,32 @@ __metadata: languageName: node linkType: hard +"react-lifecycles-compat@npm:^3.0.4": + version: 3.0.4 + resolution: "react-lifecycles-compat@npm:3.0.4" + checksum: 10c0/1d0df3c85af79df720524780f00c064d53a9dd1899d785eddb7264b378026979acbddb58a4b7e06e7d0d12aa1494fd5754562ee55d32907b15601068dae82c27 + languageName: node + linkType: hard + +"react-overlays@npm:^5.2.1": + version: 5.2.1 + resolution: "react-overlays@npm:5.2.1" + dependencies: + "@babel/runtime": "npm:^7.13.8" + "@popperjs/core": "npm:^2.11.6" + "@restart/hooks": "npm:^0.4.7" + "@types/warning": "npm:^3.0.0" + dom-helpers: "npm:^5.2.0" + prop-types: "npm:^15.7.2" + uncontrollable: "npm:^7.2.1" + warning: "npm:^4.0.3" + peerDependencies: + react: ">=16.3.0" + react-dom: ">=16.3.0" + checksum: 10c0/61836490040cfcdebc792b6eddcfac47b7b7e159f99304165371e9eb389a6875f20ddba3433421413ccfb918e8da6042ab2829f9b1f6f5dd9f8476aa16ddcfbe + languageName: node + linkType: hard + "react-remove-scroll-bar@npm:^2.3.7": version: 2.3.8 resolution: "react-remove-scroll-bar@npm:2.3.8" @@ -5269,6 +5410,20 @@ __metadata: languageName: node linkType: hard +"uncontrollable@npm:^7.2.1": + version: 7.2.1 + resolution: "uncontrollable@npm:7.2.1" + dependencies: + "@babel/runtime": "npm:^7.6.3" + "@types/react": "npm:>=16.9.11" + invariant: "npm:^2.2.4" + react-lifecycles-compat: "npm:^3.0.4" + peerDependencies: + react: ">=15.0.0" + checksum: 10c0/81473e892027a99f1ead6b9afd16db65097651cd36c4b6db710728f206f1fc4b82ba9170ecb4a1127a23857e01ba51c0194d0a7cfeecfea61ba9418e0276cb56 + languageName: node + linkType: hard + "undici-types@npm:~6.21.0": version: 6.21.0 resolution: "undici-types@npm:6.21.0" @@ -5383,7 +5538,7 @@ __metadata: languageName: node linkType: hard -"warning@npm:^4.0.0": +"warning@npm:^4.0.3": version: 4.0.3 resolution: "warning@npm:4.0.3" dependencies: From 4b848b4981d32aa915c42808ff092fb4be0421d2 Mon Sep 17 00:00:00 2001 From: Semir Date: Fri, 23 May 2025 15:27:16 +0200 Subject: [PATCH 03/39] feat: Calendar Update 1.1 --- src/app/home/page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/home/page.tsx b/src/app/home/page.tsx index b20d042..fcee5ad 100644 --- a/src/app/home/page.tsx +++ b/src/app/home/page.tsx @@ -28,4 +28,4 @@ const MyCalendar = (props) => (
) -export default MyCalendar; \ No newline at end of file +export default MyCalendar; From 149439b2b4357c4fcf29e613b7943463bb1e9c32 Mon Sep 17 00:00:00 2001 From: Semir Date: Wed, 28 May 2025 09:51:16 +0200 Subject: [PATCH 04/39] feat: Custom Calendar Toolbar Add Custom Calendar Toolbar --- package.json | 1 + src/app/home/page.tsx | 7 + src/components/custom-toolbar.css | 139 +++++++++++++++++++ src/components/custom-toolbar.tsx | 218 ++++++++++++++++++++++++++++++ yarn.lock | 8 ++ 5 files changed, 373 insertions(+) create mode 100644 src/components/custom-toolbar.css create mode 100644 src/components/custom-toolbar.tsx diff --git a/package.json b/package.json index 5d8483e..1315ce6 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "bcryptjs": "^3.0.2", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", + "date-fns": "^4.1.0", "lucide-react": "^0.511.0", "next": "15.3.3", "next-auth": "^5.0.0-beta.25", diff --git a/src/app/home/page.tsx b/src/app/home/page.tsx index fcee5ad..6149d47 100644 --- a/src/app/home/page.tsx +++ b/src/app/home/page.tsx @@ -4,6 +4,7 @@ import { Calendar, momentLocalizer } from 'react-big-calendar'; import moment from 'moment'; import 'react-big-calendar/lib/css/react-big-calendar.css'; import 'react-big-calendar/lib/addons/dragAndDrop/styles.css'; +import CustomToolbar from '@/components/custom-toolbar'; moment.updateLocale('en', { week: { @@ -24,6 +25,12 @@ const MyCalendar = (props) => ( style={{ height: 500 }} culture="de-DE" defaultView='week' + + /*CustomToolbar*/ + components={{ + toolbar: CustomToolbar + }} + /*CustomToolbar*/ /> ) diff --git a/src/components/custom-toolbar.css b/src/components/custom-toolbar.css new file mode 100644 index 0000000..16e86ed --- /dev/null +++ b/src/components/custom-toolbar.css @@ -0,0 +1,139 @@ +/* custom-toolbar.css */ + +/* Container der Toolbar */ +.custom-toolbar { + display: flex; + flex-direction: column; + gap: 12px; + padding: 16px; + background-color: #ffffff; + border: 1px solid #e0e0e0; + /*border-radius: 8px;*/ + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; +} + +/* Style für den Bereich, in dem die Ansichten (Month, Week, etc.) gewechselt werden */ +.custom-toolbar .view-change .view-switcher { + display: flex; + gap: 8px; + justify-content: center; +} + +.custom-toolbar .view-change .view-switcher button { + padding: 8px 16px; + background-color: #c1830d; + /*border: 1px solid #ccc;*/ + border-radius: 11px; + font-size: 12px; + cursor: pointer; + transition: background-color 0.2s, border-color 0.2s; + height: 30px; + margin-top: 3.5px; + color: #ffffff; +} + +.custom-toolbar .view-change .view-switcher button:hover:not(:disabled) { + background-color: #e0e0e0; + border-color: #999; +} + +.custom-toolbar .view-change .view-switcher button:disabled { + background-color: #d0d0d0; + border-color: #aaa; + cursor: default; +} + +/* Anzeige des aktuellen Datums (Monat und Jahr) */ +.custom-toolbar .current-date { + font-weight: bold; + font-size: 12px; + text-align: center; + color: #ffffff; + margin: 4px 0; + background-color: #717171; + width: 178px; + height: 37px; + border-radius: 11px; +} + +/* Navigationsbereich (Today, Prev, Next) */ +.custom-toolbar .navigation-controls { + display: flex; + gap: 8px; + justify-content: center; +} + +.custom-toolbar .navigation-controls button { + padding: 8px 12px; + /*background-color: #2196F3;*/ + color: #ffffff; + border: none; + border-radius: 11px; + font-size: 12px; + cursor: pointer; + transition: background-color 0.2s; +} + +.custom-toolbar .navigation-controls button:hover { + background-color: #1976D2; +} + +.custom-toolbar .navigation-controls button:active { + background-color: #1565C0; +} + +/* Dropdown-Bereich für Woche und Jahr */ +.custom-toolbar .dropdowns { + display: flex; + gap: 8px; + justify-content: center; + height: 30px; + font-size: 10px; + margin-top: 3.5px; + border-radius: 11px; +} + +.custom-toolbar .dropdowns select { + padding: 8px 12px; + /*border: 1px solid #ccc;*/ + border-radius: 11px; + font-size: 10px; + background-color: #555555; + color: #ffffff; + cursor: pointer; + transition: border-color 0.2s; +} + +.custom-toolbar .dropdowns select:hover { + border-color: #999; +} + +.right-section { + background-color: #717171; + width: 393px; + height: 37px; + border-radius: 11px; +} + +.custom-toolbar .navigation-controls .handleWeek button { + background-color: #717171; + height: 30px; + width: 30px; + margin-bottom: 3.5px; +} + +.custom-toolbar .navigation-controls .today button { + background-color: #c6c6c6; + height: 30px; + width: 100px; + color: #000000; + margin-top: 3.5px; +} + +.view-change { + background-color: #717171; + height: 37px; + width: 290px; + border-radius: 11px; +} diff --git a/src/components/custom-toolbar.tsx b/src/components/custom-toolbar.tsx new file mode 100644 index 0000000..10feafa --- /dev/null +++ b/src/components/custom-toolbar.tsx @@ -0,0 +1,218 @@ +import React, { useState, useEffect } from 'react'; +import { format } from 'date-fns'; +import './custom-toolbar.css'; + +interface CustomToolbarProps { + // Das aktuell angezeigte Datum (wird z. B. von der Calendar-Komponente geliefert) + date: Date; + // Aktuelle Ansicht: "month", "week", "day" oder "agenda" + view: 'month' | 'week' | 'day' | 'agenda'; + /** + * onNavigate ermöglicht das Wechseln des angezeigten Datums. + * Action kann bspw. 'TODAY' oder 'SET_DATE' sein; newDate wird übergeben, wenn benötigt. + */ + onNavigate: (action: string, newDate?: Date) => void; + // onView wechselt die Ansicht + onView: (newView: 'month' | 'week' | 'day' | 'agenda') => void; +} + +const CustomToolbar: React.FC = ({ date, view, onNavigate, onView }) => { + + // Hilfsfunktion, um die ISO-Wochennummer eines Datums zu ermitteln + const getISOWeek = (date: Date): number => { + const tmp = new Date(date.getTime()); + // Verschiebe das Datum so, dass der nächste Donnerstag erreicht wird (ISO: Woche beginnt am Montag) + tmp.setDate(tmp.getDate() + 4 - (tmp.getDay() || 7)); + const yearStart = new Date(tmp.getFullYear(), 0, 1); + const weekNo = Math.ceil((((tmp.getTime() - yearStart.getTime()) / 86400000) + 1) / 7); + return weekNo; + }; + + // Neue Funktion: Ermittelt das ISO-Wochenjahr eines Datums. + // Das ISO-Wochenjahr entspricht dem Jahr des Donnerstags in dieser Woche. + const getISOWeekYear = (date: Date): number => { + const tmp = new Date(date.getTime()); + tmp.setDate(tmp.getDate() + 4 - (tmp.getDay() || 7)); + return tmp.getFullYear(); + }; + + // Ermittelt die Anzahl der ISO-Wochen im Jahr + const getISOWeeksInYear = (year: number): number => { + const d = new Date(year, 11, 31); + const week = getISOWeek(d); + return week === 1 ? getISOWeek(new Date(year, 11, 24)) : week; + }; + + /* + Berechnet den Montag der gewünschten ISO-Woche eines Jahres. + Wir ermitteln zunächst den ersten Montag der ersten ISO-Woche und addieren dann (week - 1) * 7 Tage. + */ + const getDateOfISOWeek = (week: number, year: number): Date => { + const jan1 = new Date(year, 0, 1); + const dayOfWeek = jan1.getDay(); + const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek; + let firstMonday: Date; + if (isoDayOfWeek <= 4) { + // Jan 1 gehört zur ersten ISO-Woche – bestimme den Montag dieser Woche + firstMonday = new Date(year, 0, 1 - isoDayOfWeek + 1); + } else { + // Andernfalls liegt der erste Montag in der darauffolgenden Woche + firstMonday = new Date(year, 0, 1 + (8 - isoDayOfWeek)); + } + firstMonday.setDate(firstMonday.getDate() + (week - 1) * 7); + return firstMonday; + }; + + // Lokaler State für Woche und ISO-Wochenjahr (statt des reinen Kalenderjahrs) + const [selectedWeek, setSelectedWeek] = useState(getISOWeek(date)); + const [selectedYear, setSelectedYear] = useState(getISOWeekYear(date)); + + // Aktualisiere die Auswahl, wenn sich die Prop "date" ändert + useEffect(() => { + setSelectedWeek(getISOWeek(date)); + setSelectedYear(getISOWeekYear(date)); + }, [date]); + + // Für die Dropdown-Liste der Wochen: Liste von 1 bis totalWeeks + const totalWeeks = getISOWeeksInYear(selectedYear); + const weekOptions = Array.from({ length: totalWeeks }, (_, i) => i + 1); + + // Beispielhafte Jahresliste: aktuelles ISO-Wochenjahr ± 10 + const yearOptions = Array.from({ length: 21 }, (_, i) => selectedYear - 10 + i); + + // Berechne den Start (Montag) und das Ende (Sonntag) der aktuell angezeigten Woche + const weekStartDate = getDateOfISOWeek(selectedWeek, selectedYear); + const weekEndDate = new Date(weekStartDate); + weekEndDate.setDate(weekStartDate.getDate() + 6); + + // Ermittele Monat und Jahr von Start- und Enddatum (normales Kalenderjahr) + const monthStart = format(weekStartDate, 'MMMM'); + const monthEnd = format(weekEndDate, 'MMMM'); + const yearAtStart = format(weekStartDate, 'yyyy'); + const yearAtEnd = format(weekEndDate, 'yyyy'); + + // Erstelle das Label: + // 1. Falls der Wochenanfang und das Wochenende in unterschiedlichen Jahren liegen, + // wird z. B. "Dezember 2025 - Januar 2026" angezeigt. + // 2. Liegen beide im gleichen Jahr, wird unterschieden zwischen gleichem Monat und unterschiedlichem Monat. + let dateLabel: string; + if (yearAtStart !== yearAtEnd) { + dateLabel = `${monthStart} ${yearAtStart} - ${monthEnd} ${yearAtEnd}`; + } else if (monthStart !== monthEnd) { + dateLabel = `${monthStart} - ${monthEnd} ${yearAtStart}`; + } else { + dateLabel = `${monthStart} ${yearAtStart}`; + } + + // Handler zum Wechseln der Ansicht + const handleViewChange = (newView: 'month' | 'week' | 'day' | 'agenda') => { + onView(newView); + }; + + // "Today"-Button: setzt das Datum auf das heutige Datum (unter Verwendung des ISO-Wochenjahrs) + const handleToday = () => { + const today = new Date(); + setSelectedWeek(getISOWeek(today)); + setSelectedYear(getISOWeekYear(today)); + onNavigate('TODAY', today); + }; + + // Wechselt zur vorherigen Woche. Bei Woche < 1, wird ins Vorjahr gewechselt. + const handlePrevWeek = () => { + let newWeek = selectedWeek - 1; + let newYear = selectedYear; + if (newWeek < 1) { + newYear = selectedYear - 1; + newWeek = getISOWeeksInYear(newYear); + } + setSelectedWeek(newWeek); + setSelectedYear(newYear); + const newDate = getDateOfISOWeek(newWeek, newYear); + onNavigate('SET_DATE', newDate); + }; + + // Wechselt zur nächsten Woche. Überschreitet die Woche die maximale Zahl, wechselt ins nächste Jahr. + const handleNextWeek = () => { + let newWeek = selectedWeek + 1; + let newYear = selectedYear; + if (newWeek > getISOWeeksInYear(selectedYear)) { + newYear = selectedYear + 1; + newWeek = 1; + } + setSelectedWeek(newWeek); + setSelectedYear(newYear); + const newDate = getDateOfISOWeek(newWeek, newYear); + onNavigate('SET_DATE', newDate); + }; + + // Handler, wenn der Nutzer über das Dropdown eine Woche auswählt + const handleWeekChange = (event: React.ChangeEvent) => { + const newWeek = parseInt(event.target.value, 10); + setSelectedWeek(newWeek); + const newDate = getDateOfISOWeek(newWeek, selectedYear); + onNavigate('SET_DATE', newDate); + }; + + // Handler, wenn der Nutzer über das Dropdown ein Jahr auswählt + const handleYearChange = (event: React.ChangeEvent) => { + const newYear = parseInt(event.target.value, 10); + setSelectedYear(newYear); + const totalWeeksInNewYear = getISOWeeksInYear(newYear); + const newWeek = Math.min(selectedWeek, totalWeeksInNewYear); + setSelectedWeek(newWeek); + const newDate = getDateOfISOWeek(newWeek, newYear); + onNavigate('SET_DATE', newDate); + }; + + return ( +
+ {/* Anzeige des Datums-Labels */} +
+ {dateLabel} +
+ + {/* Ansicht wechseln */} +
+
+ + + + +
+
+ +
+ {/* Navigationsbuttons */} +
+
+ + +
+
+ +
+
+ + {/* DropDowns für Woche und Jahr */} +
+ + +
+
+
+ ); +}; + +export default CustomToolbar; diff --git a/yarn.lock b/yarn.lock index 245196a..7ce9778 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2483,6 +2483,13 @@ __metadata: languageName: node linkType: hard +"date-fns@npm:^4.1.0": + version: 4.1.0 + resolution: "date-fns@npm:4.1.0" + checksum: 10c0/b79ff32830e6b7faa009590af6ae0fb8c3fd9ffad46d930548fbb5acf473773b4712ae887e156ba91a7b3dc30591ce0f517d69fd83bd9c38650fdc03b4e0bac8 + languageName: node + linkType: hard + "dayjs@npm:^1.11.7": version: 1.11.13 resolution: "dayjs@npm:1.11.13" @@ -4052,6 +4059,7 @@ __metadata: bcryptjs: "npm:^3.0.2" class-variance-authority: "npm:^0.7.1" clsx: "npm:^2.1.1" + date-fns: "npm:^4.1.0" dotenv-cli: "npm:8.0.0" eslint: "npm:9.29.0" eslint-config-next: "npm:15.3.3" From 3992b05f4cb538225ac552c82e5b9c8ac211d282 Mon Sep 17 00:00:00 2001 From: Semir Date: Fri, 6 Jun 2025 10:43:25 +0200 Subject: [PATCH 05/39] feat: Calendar Layout and Function Update --- package.json | 1 + src/app/home/page.tsx | 39 +- src/components/calendar.tsx | 38 ++ src/components/custom-toolbar.css | 70 +- src/components/custom-toolbar.tsx | 249 ++++--- src/components/react-big-calendar.css | 904 ++++++++++++++++++++++++++ yarn.lock | 38 +- 7 files changed, 1172 insertions(+), 167 deletions(-) create mode 100644 src/components/calendar.tsx create mode 100644 src/components/react-big-calendar.css diff --git a/package.json b/package.json index 1315ce6..0e7bb30 100644 --- a/package.json +++ b/package.json @@ -43,6 +43,7 @@ "next-themes": "^0.4.6", "react": "^19.1.0", "react-big-calendar": "^1.18.0", + "react-datepicker": "^8.4.0", "react-dom": "^19.0.0", "react-hook-form": "^7.56.4", "tailwind-merge": "^3.2.0", diff --git a/src/app/home/page.tsx b/src/app/home/page.tsx index 6149d47..0b7515a 100644 --- a/src/app/home/page.tsx +++ b/src/app/home/page.tsx @@ -1,38 +1,3 @@ -"use client"; +import Calendar from '@/components/calendar'; -import { Calendar, momentLocalizer } from 'react-big-calendar'; -import moment from 'moment'; -import 'react-big-calendar/lib/css/react-big-calendar.css'; -import 'react-big-calendar/lib/addons/dragAndDrop/styles.css'; -import CustomToolbar from '@/components/custom-toolbar'; - -moment.updateLocale('en', { - week: { - dow: 1, - doy: 4, - }, -}); - -const localizer = momentLocalizer(moment) - -const MyCalendar = (props) => ( -
- -
-) - -export default MyCalendar; +export default function home () {return } \ No newline at end of file diff --git a/src/components/calendar.tsx b/src/components/calendar.tsx new file mode 100644 index 0000000..defedab --- /dev/null +++ b/src/components/calendar.tsx @@ -0,0 +1,38 @@ +"use client"; + +import { Calendar, momentLocalizer } from 'react-big-calendar'; +import moment from 'moment'; +import '@/components/react-big-calendar.css'; +import 'react-big-calendar/lib/addons/dragAndDrop/styles.css'; +import CustomToolbar from '@/components/custom-toolbar'; + +moment.updateLocale('en', { + week: { + dow: 1, + doy: 4, + }, +}); + +const localizer = momentLocalizer(moment) + +const MyCalendar = (props) => ( +
+ +
+) + +export default MyCalendar; diff --git a/src/components/custom-toolbar.css b/src/components/custom-toolbar.css index 16e86ed..e16a8e4 100644 --- a/src/components/custom-toolbar.css +++ b/src/components/custom-toolbar.css @@ -13,8 +13,7 @@ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } -/* Style für den Bereich, in dem die Ansichten (Month, Week, etc.) gewechselt werden */ -.custom-toolbar .view-change .view-switcher { +/*.custom-toolbar .view-change .view-switcher { display: flex; gap: 8px; justify-content: center; @@ -24,7 +23,7 @@ padding: 8px 16px; background-color: #c1830d; /*border: 1px solid #ccc;*/ - border-radius: 11px; +/* border-radius: 11px; font-size: 12px; cursor: pointer; transition: background-color 0.2s, border-color 0.2s; @@ -42,7 +41,7 @@ background-color: #d0d0d0; border-color: #aaa; cursor: default; -} +}*/ /* Anzeige des aktuellen Datums (Monat und Jahr) */ .custom-toolbar .current-date { @@ -50,7 +49,7 @@ font-size: 12px; text-align: center; color: #ffffff; - margin: 4px 0; + /*margin: 4px 0;*/ background-color: #717171; width: 178px; height: 37px; @@ -110,30 +109,53 @@ } .right-section { - background-color: #717171; - width: 393px; - height: 37px; - border-radius: 11px; + background-color: #717171; + width: 393px; + height: 48px; + border-radius: 11px; + justify-items: center; + align-items: center; } .custom-toolbar .navigation-controls .handleWeek button { - background-color: #717171; - height: 30px; - width: 30px; - margin-bottom: 3.5px; + background-color: #717171; + height: 30px; + width: 30px; + margin-bottom: 3.5px; } -.custom-toolbar .navigation-controls .today button { - background-color: #c6c6c6; - height: 30px; - width: 100px; - color: #000000; - margin-top: 3.5px; -} +/*.custom-toolbar .navigation-controls .today button { + background-color: #c6c6c6; + height: 30px; + width: 100px; + color: #000000; + margin-top: 3.5px; +}*/ .view-change { - background-color: #717171; - height: 37px; - width: 290px; - border-radius: 11px; + background-color: #717171; + height: 48px; + width: 323px; + border-radius: 11px; + justify-items: center; +} + +.right-section .datepicker-box { + color: #000000; + background-color: #c6c6c6; + height: 36px; + width: 85px; + border-radius: 11px; + font-size: 12px; + align-self: center; +} + +.datepicker { + text-align: center; + width: 85px; + height: 30px; +} + +.datepicker-box { + z-index: 9999; } diff --git a/src/components/custom-toolbar.tsx b/src/components/custom-toolbar.tsx index 10feafa..5f9a2cf 100644 --- a/src/components/custom-toolbar.tsx +++ b/src/components/custom-toolbar.tsx @@ -1,214 +1,253 @@ import React, { useState, useEffect } from 'react'; import { format } from 'date-fns'; import './custom-toolbar.css'; +import { Button } from '@/components/custom-ui/button'; +import DatePicker from 'react-datepicker'; +import 'react-datepicker/dist/react-datepicker.css'; interface CustomToolbarProps { - // Das aktuell angezeigte Datum (wird z. B. von der Calendar-Komponente geliefert) + //Aktuell angezeigtes Datum date: Date; - // Aktuelle Ansicht: "month", "week", "day" oder "agenda" + //Aktuelle Ansicht view: 'month' | 'week' | 'day' | 'agenda'; - /** - * onNavigate ermöglicht das Wechseln des angezeigten Datums. - * Action kann bspw. 'TODAY' oder 'SET_DATE' sein; newDate wird übergeben, wenn benötigt. - */ + onNavigate: (action: string, newDate?: Date) => void; - // onView wechselt die Ansicht + //Ansichtwechsel onView: (newView: 'month' | 'week' | 'day' | 'agenda') => void; } const CustomToolbar: React.FC = ({ date, view, onNavigate, onView }) => { - // Hilfsfunktion, um die ISO-Wochennummer eines Datums zu ermitteln + //ISO-Wochennummer eines Datums ermitteln const getISOWeek = (date: Date): number => { const tmp = new Date(date.getTime()); - // Verschiebe das Datum so, dass der nächste Donnerstag erreicht wird (ISO: Woche beginnt am Montag) + //Datum so verschieben, dass der nächste Donnerstag erreicht wird (ISO: Woche beginnt am Montag) tmp.setDate(tmp.getDate() + 4 - (tmp.getDay() || 7)); const yearStart = new Date(tmp.getFullYear(), 0, 1); const weekNo = Math.ceil((((tmp.getTime() - yearStart.getTime()) / 86400000) + 1) / 7); return weekNo; }; - // Neue Funktion: Ermittelt das ISO-Wochenjahr eines Datums. - // Das ISO-Wochenjahr entspricht dem Jahr des Donnerstags in dieser Woche. + //ISO-Wochenjahr eines Datums ermitteln const getISOWeekYear = (date: Date): number => { const tmp = new Date(date.getTime()); tmp.setDate(tmp.getDate() + 4 - (tmp.getDay() || 7)); return tmp.getFullYear(); }; - // Ermittelt die Anzahl der ISO-Wochen im Jahr + //Ermittlung der Anzahl der Wochen im Jahr const getISOWeeksInYear = (year: number): number => { const d = new Date(year, 11, 31); const week = getISOWeek(d); return week === 1 ? getISOWeek(new Date(year, 11, 24)) : week; }; - /* - Berechnet den Montag der gewünschten ISO-Woche eines Jahres. - Wir ermitteln zunächst den ersten Montag der ersten ISO-Woche und addieren dann (week - 1) * 7 Tage. - */ const getDateOfISOWeek = (week: number, year: number): Date => { const jan1 = new Date(year, 0, 1); const dayOfWeek = jan1.getDay(); const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek; let firstMonday: Date; if (isoDayOfWeek <= 4) { - // Jan 1 gehört zur ersten ISO-Woche – bestimme den Montag dieser Woche + //1. Januar gehört zur ersten ISO-Woche (Montag dieser Woche bestimmen) firstMonday = new Date(year, 0, 1 - isoDayOfWeek + 1); } else { - // Andernfalls liegt der erste Montag in der darauffolgenden Woche + //Ansonsten liegt der erste Montag in der darauffolgenden Woche firstMonday = new Date(year, 0, 1 + (8 - isoDayOfWeek)); } firstMonday.setDate(firstMonday.getDate() + (week - 1) * 7); return firstMonday; }; - // Lokaler State für Woche und ISO-Wochenjahr (statt des reinen Kalenderjahrs) + //Lokaler State für Woche und ISO-Wochenjahr (statt des reinen Kalenderjahrs) const [selectedWeek, setSelectedWeek] = useState(getISOWeek(date)); const [selectedYear, setSelectedYear] = useState(getISOWeekYear(date)); - // Aktualisiere die Auswahl, wenn sich die Prop "date" ändert + //Auswahl aktualisieren, wenn sich die Prop "date" ändert useEffect(() => { setSelectedWeek(getISOWeek(date)); setSelectedYear(getISOWeekYear(date)); }, [date]); - // Für die Dropdown-Liste der Wochen: Liste von 1 bis totalWeeks + //Dropdown-Liste der Wochen const totalWeeks = getISOWeeksInYear(selectedYear); const weekOptions = Array.from({ length: totalWeeks }, (_, i) => i + 1); - // Beispielhafte Jahresliste: aktuelles ISO-Wochenjahr ± 10 + //Jahresliste const yearOptions = Array.from({ length: 21 }, (_, i) => selectedYear - 10 + i); - // Berechne den Start (Montag) und das Ende (Sonntag) der aktuell angezeigten Woche + //Start (Montag) und Ende (Sonntag) der aktuell angezeigten Woche berechnen const weekStartDate = getDateOfISOWeek(selectedWeek, selectedYear); const weekEndDate = new Date(weekStartDate); weekEndDate.setDate(weekStartDate.getDate() + 6); - // Ermittele Monat und Jahr von Start- und Enddatum (normales Kalenderjahr) + //Monat und Jahr von Start- und Enddatum ermitteln const monthStart = format(weekStartDate, 'MMMM'); const monthEnd = format(weekEndDate, 'MMMM'); const yearAtStart = format(weekStartDate, 'yyyy'); const yearAtEnd = format(weekEndDate, 'yyyy'); - // Erstelle das Label: - // 1. Falls der Wochenanfang und das Wochenende in unterschiedlichen Jahren liegen, - // wird z. B. "Dezember 2025 - Januar 2026" angezeigt. - // 2. Liegen beide im gleichen Jahr, wird unterschieden zwischen gleichem Monat und unterschiedlichem Monat. - let dateLabel: string; - if (yearAtStart !== yearAtEnd) { - dateLabel = `${monthStart} ${yearAtStart} - ${monthEnd} ${yearAtEnd}`; - } else if (monthStart !== monthEnd) { - dateLabel = `${monthStart} - ${monthEnd} ${yearAtStart}`; - } else { - dateLabel = `${monthStart} ${yearAtStart}`; - } - - // Handler zum Wechseln der Ansicht + //Ansichtwechsel const handleViewChange = (newView: 'month' | 'week' | 'day' | 'agenda') => { onView(newView); }; - // "Today"-Button: setzt das Datum auf das heutige Datum (unter Verwendung des ISO-Wochenjahrs) + //Today-Button aktualisiert das Datum im DatePicker auf das heutige const handleToday = () => { const today = new Date(); + setSelectedDate(today); setSelectedWeek(getISOWeek(today)); setSelectedYear(getISOWeekYear(today)); onNavigate('TODAY', today); }; - // Wechselt zur vorherigen Woche. Bei Woche < 1, wird ins Vorjahr gewechselt. - const handlePrevWeek = () => { - let newWeek = selectedWeek - 1; - let newYear = selectedYear; - if (newWeek < 1) { - newYear = selectedYear - 1; - newWeek = getISOWeeksInYear(newYear); + //Pfeiltaste nach Vorne + const handleNext = () => { + let newDate: Date; + if (view === 'day' || view === 'agenda') { + newDate = new Date(date); + newDate.setDate(newDate.getDate() + 1); + } else if (view === 'week') { + let newWeek = selectedWeek + 1; + let newYear = selectedYear; + if (newWeek > getISOWeeksInYear(selectedYear)) { + newYear = selectedYear + 1; + newWeek = 1; + } + setSelectedWeek(newWeek); + setSelectedYear(newYear); + newDate = getDateOfISOWeek(newWeek, newYear); + } else if (view === 'month') { + newDate = new Date(date.getFullYear(), date.getMonth() + 1, 1); + } else { + newDate = new Date(date); } - setSelectedWeek(newWeek); - setSelectedYear(newYear); - const newDate = getDateOfISOWeek(newWeek, newYear); + //Datum im DatePicker aktualisieren + setSelectedDate(newDate); onNavigate('SET_DATE', newDate); }; - // Wechselt zur nächsten Woche. Überschreitet die Woche die maximale Zahl, wechselt ins nächste Jahr. - const handleNextWeek = () => { - let newWeek = selectedWeek + 1; - let newYear = selectedYear; - if (newWeek > getISOWeeksInYear(selectedYear)) { - newYear = selectedYear + 1; - newWeek = 1; + //Pfeiltaste nach Hinten + const handlePrev = () => { + let newDate: Date; + if (view === 'day' || view === 'agenda') { + newDate = new Date(date); + newDate.setDate(newDate.getDate() - 1); + } else if (view === 'week') { + let newWeek = selectedWeek - 1; + let newYear = selectedYear; + if (newWeek < 1) { + newYear = selectedYear - 1; + newWeek = getISOWeeksInYear(newYear); + } + setSelectedWeek(newWeek); + setSelectedYear(newYear); + newDate = getDateOfISOWeek(newWeek, newYear); + } else if (view === 'month') { + newDate = new Date(date.getFullYear(), date.getMonth() - 1, 1); + } else { + newDate = new Date(date); } - setSelectedWeek(newWeek); - setSelectedYear(newYear); - const newDate = getDateOfISOWeek(newWeek, newYear); + //Datum im DatePicker aktualisieren + setSelectedDate(newDate); onNavigate('SET_DATE', newDate); }; - // Handler, wenn der Nutzer über das Dropdown eine Woche auswählt - const handleWeekChange = (event: React.ChangeEvent) => { - const newWeek = parseInt(event.target.value, 10); - setSelectedWeek(newWeek); - const newDate = getDateOfISOWeek(newWeek, selectedYear); - onNavigate('SET_DATE', newDate); + const [selectedDate, setSelectedDate] = useState(new Date()); + + const handleDateChange = (date: Date | null) => { + setSelectedDate(date); + if (date) { + if (view === 'week') { + const newWeek = getISOWeek(date); + const newYear = getISOWeekYear(date); + setSelectedWeek(newWeek); + setSelectedYear(newYear); + const newDate = getDateOfISOWeek(newWeek, newYear); + onNavigate('SET_DATE', newDate); + } else if (view === 'day') { + onNavigate('SET_DATE', date); + } else if (view === 'month') { + const newDate = new Date(date.getFullYear(), date.getMonth(), 1); + onNavigate('SET_DATE', newDate); + } else if (view === 'agenda') { + onNavigate('SET_DATE', date); + } + } }; - // Handler, wenn der Nutzer über das Dropdown ein Jahr auswählt - const handleYearChange = (event: React.ChangeEvent) => { - const newYear = parseInt(event.target.value, 10); - setSelectedYear(newYear); - const totalWeeksInNewYear = getISOWeeksInYear(newYear); - const newWeek = Math.min(selectedWeek, totalWeeksInNewYear); - setSelectedWeek(newWeek); - const newDate = getDateOfISOWeek(newWeek, newYear); - onNavigate('SET_DATE', newDate); - }; return (
- {/* Anzeige des Datums-Labels */} -
- {dateLabel} -
- - {/* Ansicht wechseln */}
- - - - + + + +
- {/* Navigationsbuttons */}
- - + +
- +
- {/* DropDowns für Woche und Jahr */} -
- - +
+
diff --git a/src/components/react-big-calendar.css b/src/components/react-big-calendar.css new file mode 100644 index 0000000..305dce0 --- /dev/null +++ b/src/components/react-big-calendar.css @@ -0,0 +1,904 @@ +@charset "UTF-8"; +.rbc-btn { + color: inherit; + font: inherit; + margin: 0; +} + +button.rbc-btn { + overflow: visible; + text-transform: none; + -webkit-appearance: button; + -moz-appearance: button; + appearance: button; + cursor: pointer; +} + +button[disabled].rbc-btn { + cursor: not-allowed; +} + +button.rbc-input::-moz-focus-inner { + border: 0; + padding: 0; +} + +.rbc-calendar { + -webkit-box-sizing: border-box; + box-sizing: border-box; + height: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: stretch; + -ms-flex-align: stretch; + align-items: stretch; +} + +.rbc-m-b-negative-3 { + margin-bottom: -3px; +} + +.rbc-h-full { + height: 100%; +} + +.rbc-calendar *, +.rbc-calendar *:before, +.rbc-calendar *:after { + -webkit-box-sizing: inherit; + box-sizing: inherit; +} + +.rbc-abs-full, .rbc-row-bg { + overflow: hidden; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; +} + +.rbc-ellipsis, .rbc-show-more, .rbc-row-segment .rbc-event-content, .rbc-event-label { + display: block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.rbc-rtl { + direction: rtl; +} + +.rbc-off-range { + color: #999999; +} + +.rbc-off-range-bg { + background: #e6e6e6; +} + +.rbc-header { + overflow: hidden; + -webkit-box-flex: 1; + -ms-flex: 1 0 0%; + flex: 1 0 0%; + text-overflow: ellipsis; + white-space: nowrap; + padding: 0 3px; + text-align: center; + vertical-align: middle; + font-weight: bold; + font-size: 90%; + min-height: 0; + border-bottom: 1px solid #ddd; +} +.rbc-header + .rbc-header { + border-left: 1px solid #c6c6c6; /*#ddd*/ +} +.rbc-rtl .rbc-header + .rbc-header { + border-left-width: 0; + border-right: 1px solid #ddd; +} +.rbc-header > a, .rbc-header > a:active, .rbc-header > a:visited { + color: inherit; + text-decoration: none; +} + +.rbc-button-link { + color: inherit; + background: none; + margin: 0; + padding: 0; + border: none; + cursor: pointer; + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + user-select: text; +} + +.rbc-row-content { + position: relative; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-user-select: none; + z-index: 4; +} + +.rbc-row-content-scrollable { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + height: 100%; +} +.rbc-row-content-scrollable .rbc-row-content-scroll-container { + height: 100%; + overflow-y: scroll; + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ + /* Hide scrollbar for Chrome, Safari and Opera */ +} +.rbc-row-content-scrollable .rbc-row-content-scroll-container::-webkit-scrollbar { + display: none; +} + +.rbc-today { + background-color: #5770ff; /*#eaf6ff*/ +} +/*Own changes 10*/ +.rbc-allday-cell .rbc-row-bg .rbc-day-bg.rbc-today { + background-color: transparent !important; + /*border: none !important;*/ +} +/*Own changes 10*/ + +/*Own changes 11*/ +.rbc-time-header-cell .rbc-header:first-child.rbc-today { + border-top-left-radius: 11px !important; +} + +.rbc-time-header-cell .rbc-header:last-child.rbc-today { + border-top-right-radius: 11px !important; +} +/*Own changes 11*/ + +.rbc-toolbar { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + margin-bottom: 10px; + font-size: 16px; +} +.rbc-toolbar .rbc-toolbar-label { + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + padding: 0 10px; + text-align: center; + + /*Own changes 01*/ + background-color: #717171; + color: #ffffff; + /*Own changes 01*/ +} +.rbc-toolbar button { + color: #373a3c; + display: inline-block; + margin: 0; + text-align: center; + vertical-align: middle; + background: none; + background-image: none; + border: 1px solid #ccc; + padding: 0.375rem 1rem; + border-radius: 4px; + line-height: normal; + white-space: nowrap; +} +.rbc-toolbar button:active, .rbc-toolbar button.rbc-active { + background-image: none; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + background-color: #e6e6e6; + border-color: #adadad; +} +.rbc-toolbar button:active:hover, .rbc-toolbar button:active:focus, .rbc-toolbar button.rbc-active:hover, .rbc-toolbar button.rbc-active:focus { + color: #373a3c; + background-color: #d4d4d4; + border-color: #8c8c8c; +} +.rbc-toolbar button:focus { + color: #373a3c; + background-color: #e6e6e6; + border-color: #adadad; +} +.rbc-toolbar button:hover { + color: #373a3c; + cursor: pointer; + background-color: #e6e6e6; + border-color: #adadad; +} + +.rbc-btn-group { + display: inline-block; + white-space: nowrap; +} +.rbc-btn-group > button:first-child:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + + /*Own changes 02*/ + background-color: #c6c6c6; + color: #000000; + /*Own changes 02*/ +} +.rbc-btn-group > button:last-child:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + + /*Own changes 03*/ + background-color: #c6c6c6; + color: #000000; + /*Own changes 03*/ +} +.rbc-rtl .rbc-btn-group > button:first-child:not(:last-child) { + border-radius: 4px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.rbc-rtl .rbc-btn-group > button:last-child:not(:first-child) { + border-radius: 4px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.rbc-btn-group > button:not(:first-child):not(:last-child) { + border-radius: 0; + + /*Own changes 04*/ + background-color: #c6c6c6; + color: #000000; + /*Own changes 04*/ +} +.rbc-btn-group button + button { + margin-left: -1px; +} +.rbc-rtl .rbc-btn-group button + button { + margin-left: 0; + margin-right: -1px; +} +.rbc-btn-group + .rbc-btn-group, .rbc-btn-group + button { + margin-left: 10px; +} + +@media (max-width: 767px) { + .rbc-toolbar { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + } +} +.rbc-event, .rbc-day-slot .rbc-background-event { + border: none; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-shadow: none; + box-shadow: none; + margin: 0; + padding: 2px 5px; + background-color: #3174ad; + border-radius: 5px; + color: #fff; + cursor: pointer; + width: 100%; + text-align: left; +} +.rbc-slot-selecting .rbc-event, .rbc-slot-selecting .rbc-day-slot .rbc-background-event, .rbc-day-slot .rbc-slot-selecting .rbc-background-event { + cursor: inherit; + pointer-events: none; +} +.rbc-event.rbc-selected, .rbc-day-slot .rbc-selected.rbc-background-event { + background-color: #265985; +} +.rbc-event:focus, .rbc-day-slot .rbc-background-event:focus { + outline: 5px auto #3b99fc; +} + +.rbc-event-label { + font-size: 80%; +} + +.rbc-event-overlaps { + -webkit-box-shadow: -1px 1px 5px 0px rgba(51, 51, 51, 0.5); + box-shadow: -1px 1px 5px 0px rgba(51, 51, 51, 0.5); +} + +.rbc-event-continues-prior { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.rbc-event-continues-after { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.rbc-event-continues-earlier { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.rbc-event-continues-later { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.rbc-row { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; +} + +.rbc-row-segment { + padding: 0 1px 1px 1px; +} +.rbc-selected-cell { + background-color: rgba(0, 0, 0, 0.1); +} + +.rbc-show-more { + background-color: rgba(255, 255, 255, 0.3); + z-index: 4; + font-weight: bold; + font-size: 85%; + height: auto; + line-height: normal; + color: #3174ad; +} +.rbc-show-more:hover, .rbc-show-more:focus { + color: #265985; +} + +.rbc-month-view { + position: relative; + border: 1px solid #ddd; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-flex: 1; + -ms-flex: 1 0 0px; + flex: 1 0 0; + width: 100%; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-user-select: none; + height: 100%; +} + +.rbc-month-header { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; +} + +.rbc-month-row { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + position: relative; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-flex: 1; + -ms-flex: 1 0 0px; + flex: 1 0 0; + -ms-flex-preferred-size: 0px; + flex-basis: 0px; + overflow: hidden; + height: 100%; +} +.rbc-month-row + .rbc-month-row { + border-top: 1px solid #ddd; +} + +.rbc-date-cell { + -webkit-box-flex: 1; + -ms-flex: 1 1 0px; + flex: 1 1 0; + min-width: 0; + padding-right: 5px; + text-align: right; +} +.rbc-date-cell.rbc-now { + font-weight: bold; +} +.rbc-date-cell > a, .rbc-date-cell > a:active, .rbc-date-cell > a:visited { + color: inherit; + text-decoration: none; +} + +.rbc-row-bg { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-flex: 1; + -ms-flex: 1 0 0px; + flex: 1 0 0; + overflow: hidden; + right: 1px; +} + +.rbc-day-bg { + -webkit-box-flex: 1; + -ms-flex: 1 0 0%; + flex: 1 0 0%; +} +.rbc-day-bg + .rbc-day-bg { + border-left: 1px solid #ddd; +} +.rbc-rtl .rbc-day-bg + .rbc-day-bg { + border-left-width: 0; + border-right: 1px solid #ddd; +} + +.rbc-overlay { + position: absolute; + z-index: 5; + border: 1px solid #e5e5e5; + background-color: #fff; + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.25); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.25); + padding: 10px; +} +.rbc-overlay > * + * { + margin-top: 1px; +} + +.rbc-overlay-header { + border-bottom: 1px solid #e5e5e5; + margin: -10px -10px 5px -10px; + padding: 2px 10px; +} + +.rbc-agenda-view { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-flex: 1; + -ms-flex: 1 0 0px; + flex: 1 0 0; + overflow: auto; +} +.rbc-agenda-view table.rbc-agenda-table { + width: 100%; + border: 1px solid #ddd; + border-spacing: 0; + border-collapse: collapse; +} +.rbc-agenda-view table.rbc-agenda-table tbody > tr > td { + padding: 5px 10px; + vertical-align: top; +} +.rbc-agenda-view table.rbc-agenda-table .rbc-agenda-time-cell { + padding-left: 15px; + padding-right: 15px; + text-transform: lowercase; +} +.rbc-agenda-view table.rbc-agenda-table tbody > tr > td + td { + border-left: 1px solid #ddd; +} +.rbc-rtl .rbc-agenda-view table.rbc-agenda-table tbody > tr > td + td { + border-left-width: 0; + border-right: 1px solid #ddd; +} +.rbc-agenda-view table.rbc-agenda-table tbody > tr + tr { + border-top: 1px solid #ddd; +} +.rbc-agenda-view table.rbc-agenda-table thead > tr > th { + padding: 3px 5px; + text-align: left; + border-bottom: 1px solid #ddd; +} +.rbc-rtl .rbc-agenda-view table.rbc-agenda-table thead > tr > th { + text-align: right; +} + +.rbc-agenda-time-cell { + text-transform: lowercase; +} +.rbc-agenda-time-cell .rbc-continues-after:after { + content: " »"; +} +.rbc-agenda-time-cell .rbc-continues-prior:before { + content: "« "; +} + +.rbc-agenda-date-cell, +.rbc-agenda-time-cell { + white-space: nowrap; +} + +.rbc-agenda-event-cell { + width: 100%; +} + +.rbc-time-column { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + min-height: 100%; + + /*Own changes 06*/ + background-color: #383838; + /*Own changes 06*/ +} +.rbc-time-column .rbc-timeslot-group { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; +} + +.rbc-timeslot-group { + border-bottom: 1px solid #8d8d8d; /*#ddd*/ + min-height: 40px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-flow: column nowrap; + flex-flow: column nowrap; +} + +.rbc-time-gutter, +.rbc-header-gutter { + -webkit-box-flex: 0; + -ms-flex: none; + flex: none; + + /*Own changes 07*/ + background-color: #8d8d8d; + /*Own changes 07*/ +} + +.rbc-label { + padding: 0 5px; +} + +.rbc-day-slot { + position: relative; +} +.rbc-day-slot .rbc-events-container { + bottom: 0; + left: 0; + position: absolute; + right: 0; + margin-right: 10px; + top: 0; +} +.rbc-day-slot .rbc-events-container.rbc-rtl { + left: 10px; + right: 0; +} +.rbc-day-slot .rbc-event, .rbc-day-slot .rbc-background-event { + border: 1px solid #265985; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + max-height: 100%; + min-height: 20px; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-flow: column wrap; + flex-flow: column wrap; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + overflow: hidden; + position: absolute; +} +.rbc-day-slot .rbc-background-event { + opacity: 0.75; +} +.rbc-day-slot .rbc-event-label { + -webkit-box-flex: 0; + -ms-flex: none; + flex: none; + padding-right: 5px; + width: auto; +} +.rbc-day-slot .rbc-event-content { + width: 100%; + -webkit-box-flex: 1; + -ms-flex: 1 1 0px; + flex: 1 1 0; + word-wrap: break-word; + line-height: 1; + height: 100%; + min-height: 1em; +} +.rbc-day-slot .rbc-time-slot { + border-top: 1px solid #383838; /*#f7f7f7*/ +} + +.rbc-time-view-resources .rbc-time-gutter, +.rbc-time-view-resources .rbc-time-header-gutter { + position: sticky; + left: 0; + background-color: white; + border-right: 1px solid #ddd; + z-index: 10; + margin-right: -1px; +} +.rbc-time-view-resources .rbc-time-header { + overflow: hidden; +} +.rbc-time-view-resources .rbc-time-header-content { + min-width: auto; + -webkit-box-flex: 1; + -ms-flex: 1 0 0px; + flex: 1 0 0; + -ms-flex-preferred-size: 0px; + flex-basis: 0px; +} +.rbc-time-view-resources .rbc-time-header-cell-single-day { + display: none; +} +.rbc-time-view-resources .rbc-day-slot { + min-width: 140px; +} +.rbc-time-view-resources .rbc-header, +.rbc-time-view-resources .rbc-day-bg { + width: 140px; + -webkit-box-flex: 1; + -ms-flex: 1 1 0px; + flex: 1 1 0; + -ms-flex-preferred-size: 0 px; + flex-basis: 0 px; +} + +.rbc-time-header-content + .rbc-time-header-content { + margin-left: -1px; +} + +.rbc-time-slot { + -webkit-box-flex: 1; + -ms-flex: 1 0 0px; + flex: 1 0 0; +} +.rbc-time-slot.rbc-now { + font-weight: bold; +} + +.rbc-day-header { + text-align: center; +} + +.rbc-slot-selection { + z-index: 10; + position: absolute; + background-color: rgba(0, 0, 0, 0.5); + color: white; + font-size: 75%; + width: 100%; + padding: 3px; +} + +.rbc-slot-selecting { + cursor: move; +} + +.rbc-time-view { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + width: 100%; + border: 1px solid #ddd; + min-height: 0; +} +.rbc-time-view .rbc-time-gutter { + white-space: nowrap; + text-align: right; +} +.rbc-time-view .rbc-allday-cell { + -webkit-box-sizing: content-box; + box-sizing: content-box; + width: 100%; + height: 100%; + position: relative; + + /*Own changes 05*/ + background-color: #555555; + /*Own changes 05*/ +} +.rbc-time-view .rbc-allday-cell + .rbc-allday-cell { + border-left: 1px solid #ddd; +} +.rbc-time-view .rbc-allday-events { + position: relative; + z-index: 4; +} +.rbc-time-view .rbc-row { + -webkit-box-sizing: border-box; + box-sizing: border-box; + min-height: 20px; +} + +.rbc-time-header { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; +} +.rbc-time-header.rbc-overflowing { + border-right: 1px solid #ddd; +} +.rbc-rtl .rbc-time-header.rbc-overflowing { + border-right-width: 0; + border-left: 1px solid #ddd; +} +.rbc-time-header > .rbc-row:first-child { + border-bottom: 1px solid #ddd; +} +.rbc-time-header > .rbc-row.rbc-row-resource { + border-bottom: 1px solid #ddd; +} + +.rbc-time-header-cell-single-day { + display: none; +} + +.rbc-time-header-content { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + min-width: 0; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + border-left: 1px solid #ddd; + + /*Own changes 08*/ + background-color: #c6c6c6; + color: #000000; + border-top-left-radius: 11px; + border-top-right-radius: 11px; + /*Own changes 08*/ +} +.rbc-rtl .rbc-time-header-content { + border-left-width: 0; + border-right: 1px solid #ddd; +} +.rbc-time-header-content > .rbc-row.rbc-row-resource { + border-bottom: 1px solid #ddd; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.rbc-time-content { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 1; + -ms-flex: 1 0 0%; + flex: 1 0 0%; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + width: 100%; + border-top: 2px solid #717171; /*#ddd*/ + overflow-y: auto; + position: relative; +} +.rbc-time-content > .rbc-time-gutter { + -webkit-box-flex: 0; + -ms-flex: none; + flex: none; + + /*Own changes 09*/ + border-top-left-radius: 11px; + border-bottom-left-radius: 11px; + /*Own changes 09*/ +} +.rbc-time-content > * + * > * { + border-left: 1px solid #c6c6c6; /*#ddd*/ +} +.rbc-rtl .rbc-time-content > * + * > * { + border-left-width: 0; + border-right: 1px solid #ddd; +} +.rbc-time-content > .rbc-day-slot { + width: 100%; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-user-select: none; +} + +.rbc-current-time-indicator { + position: absolute; + z-index: 3; + left: 0; + right: 0; + height: 1px; + background-color: #74ad31; + pointer-events: none; +} + +.rbc-resource-grouping.rbc-time-header-content { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; +} +.rbc-resource-grouping .rbc-row .rbc-header { + width: 141px; +} + +/*# sourceMappingURL=react-big-calendar.css.map */ \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 7ce9778..03f45f1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -206,7 +206,7 @@ __metadata: languageName: node linkType: hard -"@floating-ui/react-dom@npm:^2.0.0": +"@floating-ui/react-dom@npm:^2.0.0, @floating-ui/react-dom@npm:^2.1.3": version: 2.1.3 resolution: "@floating-ui/react-dom@npm:2.1.3" dependencies: @@ -218,6 +218,20 @@ __metadata: languageName: node linkType: hard +"@floating-ui/react@npm:^0.27.3": + version: 0.27.12 + resolution: "@floating-ui/react@npm:0.27.12" + dependencies: + "@floating-ui/react-dom": "npm:^2.1.3" + "@floating-ui/utils": "npm:^0.2.9" + tabbable: "npm:^6.0.0" + peerDependencies: + react: ">=17.0.0" + react-dom: ">=17.0.0" + checksum: 10c0/da453965074bd4ded8e3de97ceb2c0833df8df2ecd9eff5ae4d336413443ea5abde5c9e37b092956901b97e7b47f9138d51d4896fa82da68e77eb0090289bf64 + languageName: node + linkType: hard + "@floating-ui/utils@npm:^0.2.9": version: 0.2.9 resolution: "@floating-ui/utils@npm:0.2.9" @@ -4073,6 +4087,7 @@ __metadata: prisma: "npm:6.9.0" react: "npm:^19.1.0" react-big-calendar: "npm:^1.18.0" + react-datepicker: "npm:^8.4.0" react-dom: "npm:^19.0.0" react-hook-form: "npm:^7.56.4" tailwind-merge: "npm:^3.2.0" @@ -4611,6 +4626,20 @@ __metadata: languageName: node linkType: hard +"react-datepicker@npm:^8.4.0": + version: 8.4.0 + resolution: "react-datepicker@npm:8.4.0" + dependencies: + "@floating-ui/react": "npm:^0.27.3" + clsx: "npm:^2.1.1" + date-fns: "npm:^4.1.0" + peerDependencies: + react: ^16.9.0 || ^17 || ^18 || ^19 || ^19.0.0-rc + react-dom: ^16.9.0 || ^17 || ^18 || ^19 || ^19.0.0-rc + checksum: 10c0/e96ba4f2b54476f66bfa33aa0c21729095c83d293671b07a9ddd96ab48dad85b6530acc5ca016e83ef8907feeebfefb7133bf7a02dc550175c48c5d9f66d70ac + languageName: node + linkType: hard + "react-dom@npm:^19.0.0": version: 19.1.0 resolution: "react-dom@npm:19.1.0" @@ -5235,6 +5264,13 @@ __metadata: languageName: node linkType: hard +"tabbable@npm:^6.0.0": + version: 6.2.0 + resolution: "tabbable@npm:6.2.0" + checksum: 10c0/ced8b38f05f2de62cd46836d77c2646c42b8c9713f5bd265daf0e78ff5ac73d3ba48a7ca45f348bafeef29b23da7187c72250742d37627883ef89cbd7fa76898 + languageName: node + linkType: hard + "tailwind-merge@npm:^3.2.0": version: 3.3.1 resolution: "tailwind-merge@npm:3.3.1" From f954d0dbc0515497942e1873301ca6507528cd3b Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Mon, 16 Jun 2025 19:44:09 +0200 Subject: [PATCH 06/39] style: format code --- src/app/home/page.tsx | 4 +- src/components/calendar.tsx | 15 +- src/components/custom-toolbar.css | 4 +- src/components/custom-toolbar.tsx | 43 ++-- src/components/react-big-calendar.css | 273 ++++++++++++++------------ 5 files changed, 190 insertions(+), 149 deletions(-) diff --git a/src/app/home/page.tsx b/src/app/home/page.tsx index 0b7515a..68e51bf 100644 --- a/src/app/home/page.tsx +++ b/src/app/home/page.tsx @@ -1,3 +1,5 @@ import Calendar from '@/components/calendar'; -export default function home () {return } \ No newline at end of file +export default function home() { + return ; +} diff --git a/src/components/calendar.tsx b/src/components/calendar.tsx index defedab..6e10dab 100644 --- a/src/components/calendar.tsx +++ b/src/components/calendar.tsx @@ -1,4 +1,4 @@ -"use client"; +'use client'; import { Calendar, momentLocalizer } from 'react-big-calendar'; import moment from 'moment'; @@ -13,26 +13,25 @@ moment.updateLocale('en', { }, }); -const localizer = momentLocalizer(moment) +const localizer = momentLocalizer(moment); const MyCalendar = (props) => (
-) +); export default MyCalendar; diff --git a/src/components/custom-toolbar.css b/src/components/custom-toolbar.css index e16a8e4..55e9b77 100644 --- a/src/components/custom-toolbar.css +++ b/src/components/custom-toolbar.css @@ -75,11 +75,11 @@ } .custom-toolbar .navigation-controls button:hover { - background-color: #1976D2; + background-color: #1976d2; } .custom-toolbar .navigation-controls button:active { - background-color: #1565C0; + background-color: #1565c0; } /* Dropdown-Bereich für Woche und Jahr */ diff --git a/src/components/custom-toolbar.tsx b/src/components/custom-toolbar.tsx index 5f9a2cf..bcbb9f9 100644 --- a/src/components/custom-toolbar.tsx +++ b/src/components/custom-toolbar.tsx @@ -16,15 +16,21 @@ interface CustomToolbarProps { onView: (newView: 'month' | 'week' | 'day' | 'agenda') => void; } -const CustomToolbar: React.FC = ({ date, view, onNavigate, onView }) => { - +const CustomToolbar: React.FC = ({ + date, + view, + onNavigate, + onView, +}) => { //ISO-Wochennummer eines Datums ermitteln const getISOWeek = (date: Date): number => { const tmp = new Date(date.getTime()); //Datum so verschieben, dass der nächste Donnerstag erreicht wird (ISO: Woche beginnt am Montag) tmp.setDate(tmp.getDate() + 4 - (tmp.getDay() || 7)); const yearStart = new Date(tmp.getFullYear(), 0, 1); - const weekNo = Math.ceil((((tmp.getTime() - yearStart.getTime()) / 86400000) + 1) / 7); + const weekNo = Math.ceil( + ((tmp.getTime() - yearStart.getTime()) / 86400000 + 1) / 7, + ); return weekNo; }; @@ -60,7 +66,9 @@ const CustomToolbar: React.FC = ({ date, view, onNavigate, o //Lokaler State für Woche und ISO-Wochenjahr (statt des reinen Kalenderjahrs) const [selectedWeek, setSelectedWeek] = useState(getISOWeek(date)); - const [selectedYear, setSelectedYear] = useState(getISOWeekYear(date)); + const [selectedYear, setSelectedYear] = useState( + getISOWeekYear(date), + ); //Auswahl aktualisieren, wenn sich die Prop "date" ändert useEffect(() => { @@ -73,7 +81,10 @@ const CustomToolbar: React.FC = ({ date, view, onNavigate, o const weekOptions = Array.from({ length: totalWeeks }, (_, i) => i + 1); //Jahresliste - const yearOptions = Array.from({ length: 21 }, (_, i) => selectedYear - 10 + i); + const yearOptions = Array.from( + { length: 21 }, + (_, i) => selectedYear - 10 + i, + ); //Start (Montag) und Ende (Sonntag) der aktuell angezeigten Woche berechnen const weekStartDate = getDateOfISOWeek(selectedWeek, selectedYear); @@ -175,11 +186,13 @@ const CustomToolbar: React.FC = ({ date, view, onNavigate, o } }; - return ( -
+
-
+
-
-
-
+
+
+
-
+
+ + + dancing penguin + +
- - - - - - dancing penguin - -
); } diff --git a/src/app/logout/page.tsx b/src/app/logout/page.tsx index 38311da..e3da2fd 100644 --- a/src/app/logout/page.tsx +++ b/src/app/logout/page.tsx @@ -1,5 +1,5 @@ import { signOut } from '@/auth'; -import { Button } from '@/components/custom-ui/button'; +import { Button } from '@/components/ui/button'; import { Card, CardContent, diff --git a/src/app/settings/page.tsx b/src/app/settings/page.tsx index 7c005aa..563ebab 100644 --- a/src/app/settings/page.tsx +++ b/src/app/settings/page.tsx @@ -1,4 +1,4 @@ -import { Button } from '@/components/custom-ui/button'; +import { Button } from '@/components/ui/button'; import { Card, CardContent, diff --git a/src/components/icon-button.tsx b/src/components/buttons/icon-button.tsx similarity index 88% rename from src/components/icon-button.tsx rename to src/components/buttons/icon-button.tsx index ad67eaa..17f9945 100644 --- a/src/components/icon-button.tsx +++ b/src/components/buttons/icon-button.tsx @@ -1,4 +1,4 @@ -import { Button } from '@/components/custom-ui/button'; +import { Button } from '@/components/ui/button'; import { IconProp } from '@fortawesome/fontawesome-svg-core'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; diff --git a/src/components/user/redirect-button.tsx b/src/components/buttons/redirect-button.tsx similarity index 84% rename from src/components/user/redirect-button.tsx rename to src/components/buttons/redirect-button.tsx index e4f8a62..c4bf997 100644 --- a/src/components/user/redirect-button.tsx +++ b/src/components/buttons/redirect-button.tsx @@ -1,4 +1,4 @@ -import { Button } from '../custom-ui/button'; +import { Button } from '../ui/button'; import Link from 'next/link'; export function RedirectButton({ diff --git a/src/components/user/sso-login-button.tsx b/src/components/buttons/sso-login-button.tsx similarity index 90% rename from src/components/user/sso-login-button.tsx rename to src/components/buttons/sso-login-button.tsx index dc070b5..644efce 100644 --- a/src/components/user/sso-login-button.tsx +++ b/src/components/buttons/sso-login-button.tsx @@ -1,5 +1,5 @@ import { signIn } from '@/auth'; -import { IconButton } from '@/components/icon-button'; +import { IconButton } from '@/components/buttons/icon-button'; import { faOpenid } from '@fortawesome/free-brands-svg-icons'; export default function SSOLogin({ diff --git a/src/components/labeled-input.tsx b/src/components/custom-ui/labeled-input.tsx similarity index 100% rename from src/components/labeled-input.tsx rename to src/components/custom-ui/labeled-input.tsx diff --git a/src/components/user/login-form.tsx b/src/components/forms/login-form.tsx similarity index 98% rename from src/components/user/login-form.tsx rename to src/components/forms/login-form.tsx index a0167e2..67d161c 100644 --- a/src/components/user/login-form.tsx +++ b/src/components/forms/login-form.tsx @@ -3,8 +3,8 @@ import React, { useState, useRef } from 'react'; import { useRouter } from 'next/navigation'; -import LabeledInput from '@/components/labeled-input'; -import { Button } from '@/components/custom-ui/button'; +import LabeledInput from '@/components/custom-ui/labeled-input'; +import { Button } from '@/components/ui/button'; import useZodForm from '@/lib/hooks/useZodForm'; import { loginSchema, registerSchema } from '@/lib/validation/user'; import { loginAction } from '@/lib/auth/login'; diff --git a/src/components/logo.tsx b/src/components/misc/logo.tsx similarity index 100% rename from src/components/logo.tsx rename to src/components/misc/logo.tsx diff --git a/src/components/user/theme-picker.tsx b/src/components/misc/theme-picker.tsx similarity index 95% rename from src/components/user/theme-picker.tsx rename to src/components/misc/theme-picker.tsx index 2a1649d..b3397ed 100644 --- a/src/components/user/theme-picker.tsx +++ b/src/components/misc/theme-picker.tsx @@ -4,7 +4,7 @@ import * as React from 'react'; import { Moon, Sun } from 'lucide-react'; import { useTheme } from 'next-themes'; -import { Button } from '@/components/custom-ui/button'; +import { Button } from '@/components/ui/button'; import { DropdownMenu, DropdownMenuContent, diff --git a/src/components/custom-ui/button.tsx b/src/components/ui/button.tsx similarity index 100% rename from src/components/custom-ui/button.tsx rename to src/components/ui/button.tsx diff --git a/src/components/custom-ui/separator.tsx b/src/components/ui/separator.tsx similarity index 100% rename from src/components/custom-ui/separator.tsx rename to src/components/ui/separator.tsx diff --git a/src/components/theme-provider.tsx b/src/components/wrappers/theme-provider.tsx similarity index 100% rename from src/components/theme-provider.tsx rename to src/components/wrappers/theme-provider.tsx From 87dc6162f48cb6e00d3307cfe81f99c92368376c Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Fri, 20 Jun 2025 13:23:52 +0200 Subject: [PATCH 14/39] feat(api): upgrade zod to v4 and implement api docs and client generation --- .gitignore | 2 +- Dockerfile | 2 + docker-compose.dev.yml | 5 + entrypoint.dev.sh | 3 + exportSwagger.ts | 62 + orval.config.js | 10 + package.json | 14 +- prisma/schema.prisma | 26 +- src/app/api-doc/page.tsx | 11 + src/app/api-doc/react-swagger.tsx | 14 + src/app/globals.css | 5 + src/app/layout.tsx | 3 +- src/auth.ts | 25 +- src/components/forms/login-form.tsx | 2 +- src/components/query-provider.tsx | 12 + src/lib/apiHelpers.ts | 38 + src/lib/auth/login.ts | 4 +- src/lib/auth/register.ts | 36 +- src/lib/auth/validation.ts | 53 + src/lib/defaultApiResponses.ts | 60 + src/lib/hooks/useZodForm.tsx | 5 +- src/lib/swagger.ts | 36 + src/lib/validation/user.ts | 67 - src/middleware.ts | 2 +- tsconfig.json | 5 + yarn.lock | 4744 +++++++++++++++++++++++++-- 26 files changed, 4827 insertions(+), 419 deletions(-) create mode 100644 exportSwagger.ts create mode 100644 orval.config.js create mode 100644 src/app/api-doc/page.tsx create mode 100644 src/app/api-doc/react-swagger.tsx create mode 100644 src/components/query-provider.tsx create mode 100644 src/lib/apiHelpers.ts create mode 100644 src/lib/auth/validation.ts create mode 100644 src/lib/defaultApiResponses.ts create mode 100644 src/lib/swagger.ts delete mode 100644 src/lib/validation/user.ts diff --git a/.gitignore b/.gitignore index 918f651..cda64ee 100644 --- a/.gitignore +++ b/.gitignore @@ -43,5 +43,5 @@ next-env.d.ts # database /prisma/*.db* -src/generated/prisma +src/generated/* data diff --git a/Dockerfile b/Dockerfile index ffd911a..b60e118 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,6 +16,8 @@ RUN corepack enable COPY --from=deps /app/node_modules ./node_modules COPY . . RUN yarn prisma:generate +RUN yarn swagger:generate +RUN yarn orval:generate RUN yarn build # ----- Runner ----- diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 3aa4174..feae683 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -13,6 +13,7 @@ services: - .env.local volumes: - ./data:/data + - ./src/generated:/app/src/generated develop: watch: - action: sync @@ -20,8 +21,12 @@ services: target: /app/src ignore: - node_modules/ + - generated/ - action: rebuild path: package.json - action: sync+restart path: prisma target: /app/prisma + - action: sync+restart + path: ./src/app/api + target: /app/src/app/api diff --git a/entrypoint.dev.sh b/entrypoint.dev.sh index ec103bf..64b45df 100644 --- a/entrypoint.dev.sh +++ b/entrypoint.dev.sh @@ -7,4 +7,7 @@ if [ -d "prisma" ]; then yarn prisma:db:push fi +yarn swagger:generate +yarn orval:generate + exec yarn dev diff --git a/exportSwagger.ts b/exportSwagger.ts new file mode 100644 index 0000000..1eb2837 --- /dev/null +++ b/exportSwagger.ts @@ -0,0 +1,62 @@ +import { registry } from '@/lib/swagger'; +import { OpenApiGeneratorV3 } from '@asteasolutions/zod-to-openapi'; +import fs from 'fs'; +import path from 'path'; + +function recursiveFileSearch(dir: string, fileList: string[] = []): string[] { + const files = fs.readdirSync(dir); + files.forEach((file) => { + const filePath = path.join(dir, file); + if (fs.statSync(filePath).isDirectory()) { + recursiveFileSearch(filePath, fileList); + } else if (file.match(/swagger\.ts$/)) { + fileList.push(filePath); + } + }); + return fileList; +} + +async function exportSwagger() { + const filesToImport = recursiveFileSearch( + path.join(process.cwd(), 'src', 'app', 'api'), + ); + + await Promise.all( + filesToImport.map((file) => { + return import(file) + .then((module) => { + if (module.default) { + module.default(registry); + } + }) + .catch((error) => { + console.error(`Error importing ${file}:`, error); + }); + }), + ); + + await import('./src/app/api/validation'); + + const generator = new OpenApiGeneratorV3(registry.definitions); + const spec = generator.generateDocument({ + openapi: '3.0.0', + info: { + version: '1.0.0', + title: 'MeetUP', + description: 'API documentation for MeetUP application', + }, + }); + + const outputPath = path.join( + process.cwd(), + 'src', + 'generated', + 'swagger.json', + ); + fs.writeFileSync(outputPath, JSON.stringify(spec, null, 2), 'utf8'); + console.log(`Swagger JSON generated at ${outputPath}`); +} + +exportSwagger().catch((error) => { + console.error('Error exporting Swagger:', error); +}); diff --git a/orval.config.js b/orval.config.js new file mode 100644 index 0000000..718a86a --- /dev/null +++ b/orval.config.js @@ -0,0 +1,10 @@ +module.exports = { + meetup: { + input: './src/generated/swagger.json', + output: { + mode: 'tags-split', + target: './src/generated/api/meetup.ts', + client: 'react-query', + }, + }, +}; diff --git a/package.json b/package.json index 47fb175..12d6e4e 100644 --- a/package.json +++ b/package.json @@ -13,9 +13,12 @@ "prisma:studio": "dotenv -e .env.local -- prisma studio", "prisma:db:push": "dotenv -e .env.local -- prisma db push", "prisma:migrate:reset": "dotenv -e .env.local -- prisma migrate reset", - "dev_container": "docker compose -f docker-compose.dev.yml up --watch --build" + "dev_container": "docker compose -f docker-compose.dev.yml up --watch --build", + "swagger:generate": "ts-node -r tsconfig-paths/register exportSwagger.ts", + "orval:generate": "orval" }, "dependencies": { + "@asteasolutions/zod-to-openapi": "^8.0.0-beta.4", "@auth/prisma-adapter": "^2.9.1", "@fortawesome/fontawesome-svg-core": "^6.7.2", "@fortawesome/free-brands-svg-icons": "^6.7.2", @@ -33,16 +36,18 @@ "@radix-ui/react-slot": "^1.2.2", "@radix-ui/react-switch": "^1.2.4", "@radix-ui/react-tabs": "^1.1.11", + "@tanstack/react-query": "^5.80.7", "bcryptjs": "^3.0.2", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "lucide-react": "^0.511.0", - "next": "15.3.4", + "next": "15.4.0-canary.85", "next-auth": "^5.0.0-beta.25", "next-themes": "^0.4.6", "react": "^19.0.0", "react-dom": "^19.0.0", "react-hook-form": "^7.56.4", + "swagger-ui-react": "^5.24.1", "tailwind-merge": "^3.2.0", "zod": "^3.25.60" }, @@ -52,14 +57,19 @@ "@types/node": "22.15.32", "@types/react": "19.1.8", "@types/react-dom": "19.1.6", + "@types/swagger-ui-react": "5", + "@types/webpack-env": "1.18.8", "dotenv-cli": "8.0.0", "eslint": "9.29.0", "eslint-config-next": "15.3.4", "eslint-config-prettier": "10.1.5", + "orval": "7.10.0", "postcss": "8.5.6", "prettier": "3.5.3", "prisma": "6.9.0", "tailwindcss": "4.1.10", + "ts-node": "10.9.2", + "tsconfig-paths": "4.2.0", "tw-animate-css": "1.3.4", "typescript": "5.8.3" }, diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 712a068..ffa1c86 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -158,8 +158,8 @@ model Friendship { requested_at DateTime @default(now()) accepted_at DateTime? - user1 User @relation("FriendshipUser1", fields: [user_id_1], references: [id]) - user2 User @relation("FriendshipUser2", fields: [user_id_2], references: [id]) + user1 User @relation("FriendshipUser1", fields: [user_id_1], references: [id], onDelete: Cascade) + user2 User @relation("FriendshipUser2", fields: [user_id_2], references: [id], onDelete: Cascade) @@id([user_id_1, user_id_2]) @@index([user_id_2, status], name: "idx_friendships_user2_status") @@ -187,8 +187,8 @@ model GroupMember { role group_member_role @default(MEMBER) added_at DateTime @default(now()) - group Group @relation(fields: [group_id], references: [id]) - user User @relation(fields: [user_id], references: [id]) + group Group @relation(fields: [group_id], references: [id], onDelete: Cascade) + user User @relation(fields: [user_id], references: [id], onDelete: Cascade) @@id([group_id, user_id]) @@index([user_id]) @@ -207,7 +207,7 @@ model BlockedSlot { created_at DateTime @default(now()) updated_at DateTime @updatedAt - user User @relation(fields: [user_id], references: [id]) + user User @relation(fields: [user_id], references: [id], onDelete: Cascade) @@index([user_id, start_time, end_time]) @@index([user_id, is_recurring]) @@ -241,8 +241,8 @@ model MeetingParticipant { status participant_status @default(PENDING) added_at DateTime @default(now()) - meeting Meeting @relation(fields: [meeting_id], references: [id]) - user User @relation(fields: [user_id], references: [id]) + meeting Meeting @relation(fields: [meeting_id], references: [id], onDelete: Cascade) + user User @relation(fields: [user_id], references: [id], onDelete: Cascade) @@id([meeting_id, user_id]) @@index([user_id, status], name: "idx_participants_user_status") @@ -259,7 +259,7 @@ model Notification { is_read Boolean @default(false) created_at DateTime @default(now()) - user User @relation(fields: [user_id], references: [id]) + user User @relation(fields: [user_id], references: [id], onDelete: Cascade) @@index([user_id, is_read, created_at], name: "idx_notifications_user_read_time") @@map("notifications") @@ -271,7 +271,7 @@ model UserNotificationPreference { email_enabled Boolean @default(false) updated_at DateTime @default(now()) - user User @relation(fields: [user_id], references: [id]) + user User @relation(fields: [user_id], references: [id], onDelete: Cascade) @@id([user_id, notification_type]) @@map("user_notification_preferences") @@ -292,7 +292,7 @@ model EmailQueue { created_at DateTime @default(now()) updated_at DateTime @updatedAt - user User @relation(fields: [user_id], references: [id]) + user User @relation(fields: [user_id], references: [id], onDelete: Cascade) @@index([status, scheduled_at], name: "idx_email_queue_pending_jobs") @@index([user_id, created_at], name: "idx_email_queue_user_history") @@ -308,7 +308,7 @@ model CalendarExportToken { created_at DateTime @default(now()) last_accessed_at DateTime? - user User @relation(fields: [user_id], references: [id]) + user User @relation(fields: [user_id], references: [id], onDelete: Cascade) @@index([user_id]) @@map("calendar_export_tokens") @@ -327,7 +327,7 @@ model CalendarSubscription { created_at DateTime @default(now()) updated_at DateTime @updatedAt - user User @relation(fields: [user_id], references: [id]) + user User @relation(fields: [user_id], references: [id], onDelete: Cascade) externalEvents ExternalEvent[] @@index([user_id, is_enabled]) @@ -350,7 +350,7 @@ model ExternalEvent { show_as_free Boolean @default(false) last_fetched_at DateTime @default(now()) - subscription CalendarSubscription @relation(fields: [subscription_id], references: [id]) + subscription CalendarSubscription @relation(fields: [subscription_id], references: [id], onDelete: Cascade) @@unique([subscription_id, ical_uid], name: "uq_external_event_sub_uid") @@index([subscription_id, start_time, end_time]) diff --git a/src/app/api-doc/page.tsx b/src/app/api-doc/page.tsx new file mode 100644 index 0000000..c6e9694 --- /dev/null +++ b/src/app/api-doc/page.tsx @@ -0,0 +1,11 @@ +import { getApiDocs } from '@/lib/swagger'; +import ReactSwagger from './react-swagger'; + +export default async function IndexPage() { + const spec = await getApiDocs(); + return ( +
+ +
+ ); +} diff --git a/src/app/api-doc/react-swagger.tsx b/src/app/api-doc/react-swagger.tsx new file mode 100644 index 0000000..0dd3931 --- /dev/null +++ b/src/app/api-doc/react-swagger.tsx @@ -0,0 +1,14 @@ +'use client'; + +import SwaggerUI from 'swagger-ui-react'; +import 'swagger-ui-react/swagger-ui.css'; + +type Props = { + spec: object; +}; + +function ReactSwagger({ spec }: Props) { + return ; +} + +export default ReactSwagger; diff --git a/src/app/globals.css b/src/app/globals.css index ec97843..f85cb2f 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -364,3 +364,8 @@ @apply bg-background text-foreground; } } + +/* Fix for swagger ui readability */ +body:has(.swagger-ui) { + @apply bg-white text-black; +} diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 55cdd2c..201a730 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -2,6 +2,7 @@ import { ThemeProvider } from '@/components/wrappers/theme-provider'; import type { Metadata } from 'next'; import './globals.css'; +import { QueryProvider } from '@/components/query-provider'; export const metadata: Metadata = { title: 'MeetUp', @@ -55,7 +56,7 @@ export default function RootLayout({ enableSystem disableTransitionOnChange > - {children} + {children} diff --git a/src/auth.ts b/src/auth.ts index 8ec5994..405b729 100644 --- a/src/auth.ts +++ b/src/auth.ts @@ -8,9 +8,8 @@ import Authentik from 'next-auth/providers/authentik'; import { PrismaAdapter } from '@auth/prisma-adapter'; import { prisma } from '@/prisma'; -import { loginSchema } from './lib/validation/user'; - -import { ZodError } from 'zod'; +import { loginSchema } from '@/lib/auth/validation'; +import { ZodError } from 'zod/v4'; class InvalidLoginError extends CredentialsSignin { constructor(code: string) { @@ -25,7 +24,11 @@ const providers: Provider[] = [ Credentials({ credentials: { password: { label: 'Password', type: 'password' } }, async authorize(c) { - if (process.env.NODE_ENV === 'development' && c.password === 'password') + if ( + process.env.NODE_ENV === 'development' && + process.env.DISABLE_AUTH_TEST_USER !== 'true' && + c.password === 'password' + ) return { id: 'test', name: 'Test User', @@ -37,7 +40,7 @@ const providers: Provider[] = [ const { email, password } = await loginSchema.parseAsync(c); const user = await prisma.user.findFirst({ - where: { email }, + where: { OR: [{ email }, { name: email }] }, include: { accounts: true }, }); @@ -113,6 +116,18 @@ export const { handlers, signIn, signOut, auth } = NextAuth({ authorized({ auth }) { return !!auth?.user; }, + session: async ({ session, token }) => { + if (session?.user) { + session.user.id = token.sub as string; + } + return session; + }, + jwt: async ({ user, token }) => { + if (user) { + token.uid = user.id; + } + return token; + }, }, debug: process.env.NODE_ENV === 'development', }); diff --git a/src/components/forms/login-form.tsx b/src/components/forms/login-form.tsx index 67d161c..8f6b709 100644 --- a/src/components/forms/login-form.tsx +++ b/src/components/forms/login-form.tsx @@ -6,7 +6,7 @@ import { useRouter } from 'next/navigation'; import LabeledInput from '@/components/custom-ui/labeled-input'; import { Button } from '@/components/ui/button'; import useZodForm from '@/lib/hooks/useZodForm'; -import { loginSchema, registerSchema } from '@/lib/validation/user'; +import { loginSchema, registerSchema } from '@/lib/auth/validation'; import { loginAction } from '@/lib/auth/login'; import { registerAction } from '@/lib/auth/register'; diff --git a/src/components/query-provider.tsx b/src/components/query-provider.tsx new file mode 100644 index 0000000..4d05c6c --- /dev/null +++ b/src/components/query-provider.tsx @@ -0,0 +1,12 @@ +'use client'; + +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import * as React from 'react'; + +const queryClient = new QueryClient(); + +export function QueryProvider({ children }: { children: React.ReactNode }) { + return ( + {children} + ); +} diff --git a/src/lib/apiHelpers.ts b/src/lib/apiHelpers.ts new file mode 100644 index 0000000..7f5c28e --- /dev/null +++ b/src/lib/apiHelpers.ts @@ -0,0 +1,38 @@ +import { NextAuthRequest } from 'next-auth'; +import { extendZodWithOpenApi } from '@asteasolutions/zod-to-openapi'; +import zod from 'zod/v4'; +import { NextResponse } from 'next/server'; + +extendZodWithOpenApi(zod); + +export function userAuthenticated(req: NextAuthRequest) { + if (!req.auth || !req.auth.user || !req.auth.user.id) + return { + continue: false, + response: { success: false, message: 'Not authenticated' }, + metadata: { status: 401 }, + } as const; + return { continue: true, user: req.auth.user } as const; +} + +export function returnZodTypeCheckedResponse< + // eslint-disable-next-line @typescript-eslint/no-explicit-any + Schema extends zod.ZodType, +>( + expectedType: Schema, + response: zod.input, + metadata?: { status: number }, +): NextResponse { + const result = expectedType.safeParse(response); + if (!result.success) { + return NextResponse.json( + { + success: false, + message: 'Invalid response format', + errors: result.error.issues, + }, + { status: 500 }, + ); + } + return NextResponse.json(result.data, { status: metadata?.status || 200 }); +} diff --git a/src/lib/auth/login.ts b/src/lib/auth/login.ts index 0019ae0..1c03356 100644 --- a/src/lib/auth/login.ts +++ b/src/lib/auth/login.ts @@ -1,7 +1,7 @@ 'use server'; -import { z } from 'zod'; -import { loginSchema } from '@/lib/validation/user'; +import { z } from 'zod/v4'; +import { loginSchema } from './validation'; import { signIn } from '@/auth'; export async function loginAction(data: z.infer) { diff --git a/src/lib/auth/register.ts b/src/lib/auth/register.ts index 9eba8e9..0ca8eb3 100644 --- a/src/lib/auth/register.ts +++ b/src/lib/auth/register.ts @@ -1,46 +1,24 @@ 'use server'; -import type { z } from 'zod'; +import type { z } from 'zod/v4'; import bcrypt from 'bcryptjs'; -import { registerSchema } from '@/lib/validation/user'; +import { registerServerSchema } from './validation'; import { prisma } from '@/prisma'; -export async function registerAction(data: z.infer) { +export async function registerAction( + data: z.infer, +) { try { - const result = await registerSchema.safeParseAsync(data); + const result = await registerServerSchema.safeParseAsync(data); if (!result.success) { return { - error: result.error.errors[0].message, + error: result.error.issues[0].message, }; } const { email, password, firstName, lastName, username } = result.data; - const user = await prisma.user.findUnique({ - where: { - email, - }, - }); - - if (user) { - return { - error: 'User already exist with this email', - }; - } - - const existingUsername = await prisma.user.findUnique({ - where: { - name: username, - }, - }); - - if (existingUsername) { - return { - error: 'Username already exists', - }; - } - const passwordHash = await bcrypt.hash(password, 10); await prisma.$transaction(async (tx) => { diff --git a/src/lib/auth/validation.ts b/src/lib/auth/validation.ts new file mode 100644 index 0000000..50a6b23 --- /dev/null +++ b/src/lib/auth/validation.ts @@ -0,0 +1,53 @@ +import zod from 'zod/v4'; +import { + emailSchema, + firstNameSchema, + lastNameSchema, + newUserEmailServerSchema, + newUserNameServerSchema, + passwordSchema, + userNameSchema, +} from '@/app/api/user/validation'; + +// ---------------------------------------- +// +// Login Validation +// +// ---------------------------------------- +export const loginSchema = zod.object({ + email: emailSchema.or(userNameSchema), + password: zod.string().min(1, 'Password is required'), +}); + +// ---------------------------------------- +// +// Register Validation +// +// ---------------------------------------- +export const registerServerSchema = zod + .object({ + firstName: firstNameSchema, + lastName: lastNameSchema, + email: newUserEmailServerSchema, + password: passwordSchema, + confirmPassword: passwordSchema, + username: newUserNameServerSchema, + }) + .refine((data) => data.password === data.confirmPassword, { + message: 'Passwords do not match', + path: ['confirmPassword'], + }); + +export const registerSchema = zod + .object({ + firstName: firstNameSchema, + lastName: lastNameSchema, + email: emailSchema, + password: passwordSchema, + confirmPassword: passwordSchema, + username: userNameSchema, + }) + .refine((data) => data.password === data.confirmPassword, { + message: 'Passwords do not match', + path: ['confirmPassword'], + }); diff --git a/src/lib/defaultApiResponses.ts b/src/lib/defaultApiResponses.ts new file mode 100644 index 0000000..3e8a314 --- /dev/null +++ b/src/lib/defaultApiResponses.ts @@ -0,0 +1,60 @@ +import { + ErrorResponseSchema, + ZodErrorResponseSchema, +} from '@/app/api/validation'; + +export const invalidRequestDataResponse = { + 400: { + description: 'Invalid request data', + content: { + 'application/json': { + schema: ZodErrorResponseSchema, + }, + }, + }, +}; + +export const notAuthenticatedResponse = { + 401: { + description: 'Not authenticated', + content: { + 'application/json': { + schema: ErrorResponseSchema, + example: { + success: false, + message: 'Not authenticated', + }, + }, + }, + }, +}; + +export const userNotFoundResponse = { + 404: { + description: 'User not found', + content: { + 'application/json': { + schema: ErrorResponseSchema, + example: { + success: false, + message: 'User not found', + }, + }, + }, + }, +}; + +export const serverReturnedDataValidationErrorResponse = { + 500: { + description: 'Server returned data validation error', + content: { + 'application/json': { + schema: ZodErrorResponseSchema, + example: { + success: false, + message: 'Server returned data validation error', + }, + }, + }, + }, +}; diff --git a/src/lib/hooks/useZodForm.tsx b/src/lib/hooks/useZodForm.tsx index 8b8eb62..13dbf1d 100644 --- a/src/lib/hooks/useZodForm.tsx +++ b/src/lib/hooks/useZodForm.tsx @@ -1,13 +1,14 @@ import { zodResolver } from '@hookform/resolvers/zod'; import { useForm } from 'react-hook-form'; -import { z } from 'zod'; +import { z } from 'zod/v4'; export default function useZodForm< // eslint-disable-next-line @typescript-eslint/no-explicit-any Schema extends z.ZodType, Values extends z.infer, >(schema: Schema, defaultValues?: Values) { - return useForm({ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return useForm, any, z.output>({ resolver: zodResolver(schema), defaultValues, }); diff --git a/src/lib/swagger.ts b/src/lib/swagger.ts new file mode 100644 index 0000000..dc6436e --- /dev/null +++ b/src/lib/swagger.ts @@ -0,0 +1,36 @@ +import { + OpenAPIRegistry, + OpenApiGeneratorV3, +} from '@asteasolutions/zod-to-openapi'; + +export const registry = new OpenAPIRegistry(); + +export const getApiDocs = async () => { + const swaggerFiles = require.context('../app', true, /swagger\.ts$/); + + swaggerFiles + .keys() + .sort((a, b) => b.length - a.length) + .forEach((file) => { + console.log(`Registering Swagger file: ${file}`); + swaggerFiles(file).default?.(registry); + }); + // eslint-disable-next-line @typescript-eslint/no-require-imports + require('@/app/api/validation'); + + try { + const generator = new OpenApiGeneratorV3(registry.definitions); + const spec = generator.generateDocument({ + openapi: '3.0.0', + info: { + version: '1.0.0', + title: 'MeetUP', + description: 'API documentation for MeetUP application', + }, + }); + return spec; + } catch (error) { + console.error('Error generating API docs:', error); + throw new Error('Failed to generate API documentation'); + } +}; diff --git a/src/lib/validation/user.ts b/src/lib/validation/user.ts deleted file mode 100644 index a2efa5e..0000000 --- a/src/lib/validation/user.ts +++ /dev/null @@ -1,67 +0,0 @@ -import zod from 'zod'; - -export const loginSchema = zod.object({ - email: zod - .string() - .email('Invalid email address') - .min(3, 'Email is required') - .or( - zod - .string() - .min(3, 'Username is required') - .max(32, 'Username must be at most 32 characters long') - .regex( - /^[a-zA-Z0-9_]+$/, - 'Username can only contain letters, numbers, and underscores', - ), - ), - password: zod.string().min(1, 'Password is required'), -}); - -export const registerSchema = zod - .object({ - firstName: zod - .string() - .min(1, 'First name is required') - .max(32, 'First name must be at most 32 characters long'), - lastName: zod - .string() - .min(1, 'Last name is required') - .max(32, 'Last name must be at most 32 characters long'), - email: zod - .string() - .email('Invalid email address') - .min(3, 'Email is required'), - password: zod - .string() - .min(8, 'Password must be at least 8 characters long') - .max(128, 'Password must be at most 128 characters long'), - confirmPassword: zod - .string() - .min(8, 'Password must be at least 8 characters long') - .max(128, 'Password must be at most 128 characters long'), - username: zod - .string() - .min(3, 'Username is required') - .max(32, 'Username must be at most 32 characters long') - .regex( - /^[a-zA-Z0-9_]+$/, - 'Username can only contain letters, numbers, and underscores', - ), - }) - .refine((data) => data.password === data.confirmPassword, { - message: 'Passwords do not match', - path: ['confirmPassword'], - }) - .refine( - (data) => - !data.password.includes(data.firstName) && - !data.password.includes(data.lastName) && - !data.password.includes(data.email) && - !data.password.includes(data.username), - { - message: - 'Password cannot contain your first name, last name, email, or username', - path: ['password'], - }, - ); diff --git a/src/middleware.ts b/src/middleware.ts index b2f73cf..a1ae8e1 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -2,6 +2,6 @@ export { auth as middleware } from '@/auth'; export const config = { matcher: [ - '/((?!api|_next/static|_next/image|site\.webmanifest|web-app-manifest-(?:192x192|512x512)\.png|favicon(?:-(?:dark|light))?\.(?:png|svg|ico)|fonts).*)', + '/((?!api|_next/static|api-doc|_next/image|site\.webmanifest|web-app-manifest-(?:192x192|512x512)\.png|apple-touch-icon.png|favicon(?:-(?:dark|light))?\.(?:png|svg|ico)|fonts).*)', ], }; diff --git a/tsconfig.json b/tsconfig.json index c133409..251099e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -22,6 +22,11 @@ "@/*": ["./src/*"] } }, + "ts-node": { + "compilerOptions": { + "module": "commonjs" + } + }, "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], "exclude": ["node_modules"] } diff --git a/yarn.lock b/yarn.lock index 8118aeb..d40bfd6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22,6 +22,68 @@ __metadata: languageName: node linkType: hard +"@apidevtools/json-schema-ref-parser@npm:11.7.2": + version: 11.7.2 + resolution: "@apidevtools/json-schema-ref-parser@npm:11.7.2" + dependencies: + "@jsdevtools/ono": "npm:^7.1.3" + "@types/json-schema": "npm:^7.0.15" + js-yaml: "npm:^4.1.0" + checksum: 10c0/90dd8e60e25ccfe5c7de2453de893d5f5bb7c6cabcce028edf0678a119f0e433f422d730aa14fd718542e80fa7b3acf40923d69dc8e9f6c25603842b76ad2f16 + languageName: node + linkType: hard + +"@apidevtools/openapi-schemas@npm:^2.1.0": + version: 2.1.0 + resolution: "@apidevtools/openapi-schemas@npm:2.1.0" + checksum: 10c0/f4aa0f9df32e474d166c84ef91bceb18fa1c4f44b5593879529154ef340846811ea57dc2921560f157f692262827d28d988dd6e19fb21f00320e9961964176b4 + languageName: node + linkType: hard + +"@apidevtools/swagger-methods@npm:^3.0.2": + version: 3.0.2 + resolution: "@apidevtools/swagger-methods@npm:3.0.2" + checksum: 10c0/8c390e8e50c0be7787ba0ba4c3758488bde7c66c2d995209b4b48c1f8bc988faf393cbb24a4bd1cd2d42ce5167c26538e8adea5c85eb922761b927e4dab9fa1c + languageName: node + linkType: hard + +"@apidevtools/swagger-parser@npm:^10.1.1": + version: 10.1.1 + resolution: "@apidevtools/swagger-parser@npm:10.1.1" + dependencies: + "@apidevtools/json-schema-ref-parser": "npm:11.7.2" + "@apidevtools/openapi-schemas": "npm:^2.1.0" + "@apidevtools/swagger-methods": "npm:^3.0.2" + "@jsdevtools/ono": "npm:^7.1.3" + ajv: "npm:^8.17.1" + ajv-draft-04: "npm:^1.0.0" + call-me-maybe: "npm:^1.0.2" + peerDependencies: + openapi-types: ">=7" + checksum: 10c0/21be668c64311d54579ef06e71b6d5640df032f4cdd959dfde93210f26128cbe3c84eb29ead1895c93af703cd4f2fd7efae31dd316549f1f9d29293c78b0ccd4 + languageName: node + linkType: hard + +"@asteasolutions/zod-to-openapi@npm:^8.0.0-beta.4": + version: 8.0.0-beta.4 + resolution: "@asteasolutions/zod-to-openapi@npm:8.0.0-beta.4" + dependencies: + openapi3-ts: "npm:^4.1.2" + peerDependencies: + zod: ~3.25.1 + checksum: 10c0/596a149bc1c132f640befc1a9c58ca31d651146ea83ee98861cf65bddca3be6dbb324d82179ef45717f49c4e73114e3f86213711671c9065eaf01d594b408ff2 + languageName: node + linkType: hard + +"@asyncapi/specs@npm:^6.8.0": + version: 6.8.1 + resolution: "@asyncapi/specs@npm:6.8.1" + dependencies: + "@types/json-schema": "npm:^7.0.11" + checksum: 10c0/a7bb241a7b3c5c5027a5a9d46ccf6920305d9bc7560112058a040c22c49a1d3725e736ff1742f9bf85a3f922f6d73fe84d1518566744ba8598f36d85f92affc2 + languageName: node + linkType: hard + "@auth/core@npm:0.39.1": version: 0.39.1 resolution: "@auth/core@npm:0.39.1" @@ -57,6 +119,31 @@ __metadata: languageName: node linkType: hard +"@babel/runtime-corejs3@npm:^7.20.7, @babel/runtime-corejs3@npm:^7.22.15, @babel/runtime-corejs3@npm:^7.26.10, @babel/runtime-corejs3@npm:^7.27.1": + version: 7.27.6 + resolution: "@babel/runtime-corejs3@npm:7.27.6" + dependencies: + core-js-pure: "npm:^3.30.2" + checksum: 10c0/0ec7725824fdc3dd1e9580c1887ea60088d1cc3ec2fcfad9ccf54909262786b70e74f4b90513718d18f062a918b45add94c4dc243186f1423ed03cacf9935863 + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.3.1": + version: 7.27.6 + resolution: "@babel/runtime@npm:7.27.6" + checksum: 10c0/89726be83f356f511dcdb74d3ea4d873a5f0cf0017d4530cb53aa27380c01ca102d573eff8b8b77815e624b1f8c24e7f0311834ad4fb632c90a770fda00bd4c8 + languageName: node + linkType: hard + +"@cspotcode/source-map-support@npm:^0.8.0": + version: 0.8.1 + resolution: "@cspotcode/source-map-support@npm:0.8.1" + dependencies: + "@jridgewell/trace-mapping": "npm:0.3.9" + checksum: 10c0/05c5368c13b662ee4c122c7bfbe5dc0b613416672a829f3e78bc49a357a197e0218d6e74e7c66cfcd04e15a179acab080bd3c69658c9fbefd0e1ccd950a07fc6 + languageName: node + linkType: hard + "@emnapi/core@npm:^1.4.3": version: 1.4.3 resolution: "@emnapi/core@npm:1.4.3" @@ -85,6 +172,181 @@ __metadata: languageName: node linkType: hard +"@esbuild/aix-ppc64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/aix-ppc64@npm:0.25.5" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/android-arm64@npm:0.25.5" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/android-arm@npm:0.25.5" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/android-x64@npm:0.25.5" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/darwin-arm64@npm:0.25.5" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/darwin-x64@npm:0.25.5" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/freebsd-arm64@npm:0.25.5" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/freebsd-x64@npm:0.25.5" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/linux-arm64@npm:0.25.5" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/linux-arm@npm:0.25.5" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/linux-ia32@npm:0.25.5" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/linux-loong64@npm:0.25.5" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/linux-mips64el@npm:0.25.5" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/linux-ppc64@npm:0.25.5" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/linux-riscv64@npm:0.25.5" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/linux-s390x@npm:0.25.5" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/linux-x64@npm:0.25.5" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-arm64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/netbsd-arm64@npm:0.25.5" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/netbsd-x64@npm:0.25.5" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-arm64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/openbsd-arm64@npm:0.25.5" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/openbsd-x64@npm:0.25.5" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/sunos-x64@npm:0.25.5" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/win32-arm64@npm:0.25.5" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/win32-ia32@npm:0.25.5" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.25.5": + version: 0.25.5 + resolution: "@esbuild/win32-x64@npm:0.25.5" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.7.0": version: 4.7.0 resolution: "@eslint-community/eslint-utils@npm:4.7.0" @@ -115,9 +377,9 @@ __metadata: linkType: hard "@eslint/config-helpers@npm:^0.2.1": - version: 0.2.2 - resolution: "@eslint/config-helpers@npm:0.2.2" - checksum: 10c0/98f7cefe484bb754674585d9e73cf1414a3ab4fd0783c385465288d13eb1a8d8e7d7b0611259fc52b76b396c11a13517be5036d1f48eeb877f6f0a6b9c4f03ad + version: 0.2.3 + resolution: "@eslint/config-helpers@npm:0.2.3" + checksum: 10c0/8fd36d7f33013628787947c81894807c7498b31eacf6648efa6d7c7a99aac6bf0d59a8a4d14f968ec2aeebefb76a1a7e4fd4cd556a296323d4711b3d7a7cda22 languageName: node linkType: hard @@ -130,6 +392,15 @@ __metadata: languageName: node linkType: hard +"@eslint/core@npm:^0.15.0": + version: 0.15.0 + resolution: "@eslint/core@npm:0.15.0" + dependencies: + "@types/json-schema": "npm:^7.0.15" + checksum: 10c0/9882c69acfe29743ce473a619d5248589c6687561afaabe8ec8d7ffed07592db16edcca3af022f33ea92fe5f6cfbe3545ee53e89292579d22a944ebaeddcf72d + languageName: node + linkType: hard + "@eslint/eslintrc@npm:3.3.1, @eslint/eslintrc@npm:^3.3.1": version: 3.3.1 resolution: "@eslint/eslintrc@npm:3.3.1" @@ -162,12 +433,19 @@ __metadata: linkType: hard "@eslint/plugin-kit@npm:^0.3.1": - version: 0.3.1 - resolution: "@eslint/plugin-kit@npm:0.3.1" + version: 0.3.2 + resolution: "@eslint/plugin-kit@npm:0.3.2" dependencies: - "@eslint/core": "npm:^0.14.0" + "@eslint/core": "npm:^0.15.0" levn: "npm:^0.4.1" - checksum: 10c0/a75f0b5d38430318a551b83e27bee570747eb50beeb76b03f64b0e78c2c27ef3d284cfda3443134df028db3251719bc0850c105f778122f6ad762d5270ec8063 + checksum: 10c0/e069b0a46eb9fa595a1ac7dea4540a9daa493afba88875ee054e9117609c1c41555e779303cb4cff36cf88f603ba6eba2556a927e8ced77002828206ee17fc7e + languageName: node + linkType: hard + +"@exodus/schemasafe@npm:^1.0.0-rc.2": + version: 1.3.0 + resolution: "@exodus/schemasafe@npm:1.3.0" + checksum: 10c0/e19397c14db76342154c32a9088536149babfd9b18ecae815add0b2f911d9aa292aa51c6ab33b857b4b6bb371a74ebde845e6f17b2824e73b4e307230f23f86a languageName: node linkType: hard @@ -264,6 +542,19 @@ __metadata: languageName: node linkType: hard +"@gerrit0/mini-shiki@npm:^3.2.2": + version: 3.6.0 + resolution: "@gerrit0/mini-shiki@npm:3.6.0" + dependencies: + "@shikijs/engine-oniguruma": "npm:^3.6.0" + "@shikijs/langs": "npm:^3.6.0" + "@shikijs/themes": "npm:^3.6.0" + "@shikijs/types": "npm:^3.6.0" + "@shikijs/vscode-textmate": "npm:^10.0.2" + checksum: 10c0/347456c9da8a1fadd3c1f63097da459a5f930ef4bca6431cce913a379012c551e061d0a94ff7a0f307215b87f2418b7c198a55fba888fc97fb02ab36247adf6b + languageName: node + linkType: hard + "@hookform/resolvers@npm:^5.0.1": version: 5.1.1 resolution: "@hookform/resolvers@npm:5.1.1" @@ -313,6 +604,32 @@ __metadata: languageName: node linkType: hard +"@ibm-cloud/openapi-ruleset-utilities@npm:1.9.0": + version: 1.9.0 + resolution: "@ibm-cloud/openapi-ruleset-utilities@npm:1.9.0" + checksum: 10c0/8a95857406e8ea4c9b6337ce790f0d24207d901db6d070d76fa87e26557c3a5ce833000cca6db598094d8e8cc60263ff39d95b6c505e6195493b3fa6b63bf047 + languageName: node + linkType: hard + +"@ibm-cloud/openapi-ruleset@npm:^1.29.4": + version: 1.31.1 + resolution: "@ibm-cloud/openapi-ruleset@npm:1.31.1" + dependencies: + "@ibm-cloud/openapi-ruleset-utilities": "npm:1.9.0" + "@stoplight/spectral-formats": "npm:^1.8.2" + "@stoplight/spectral-functions": "npm:^1.9.3" + "@stoplight/spectral-rulesets": "npm:^1.21.3" + chalk: "npm:^4.1.2" + jsonschema: "npm:^1.5.0" + lodash: "npm:^4.17.21" + loglevel: "npm:^1.9.2" + loglevel-plugin-prefix: "npm:0.8.4" + minimatch: "npm:^6.2.0" + validator: "npm:^13.11.0" + checksum: 10c0/b81180e87b22a9ecef135fc9d25c7796ebeb0de6fd569164033249a1e96f41191d0c91d453d8692ace54ee3aa8cbe5a3377ec435c727b3b1c8e0740460f16ddf + languageName: node + linkType: hard + "@img/sharp-darwin-arm64@npm:0.34.2": version: 0.34.2 resolution: "@img/sharp-darwin-arm64@npm:0.34.2" @@ -502,6 +819,20 @@ __metadata: languageName: node linkType: hard +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: "npm:^5.1.2" + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: "npm:^7.0.1" + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: "npm:^8.1.0" + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e + languageName: node + linkType: hard + "@isaacs/fs-minipass@npm:^4.0.0": version: 4.0.1 resolution: "@isaacs/fs-minipass@npm:4.0.1" @@ -522,7 +853,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/resolve-uri@npm:^3.1.0": +"@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0": version: 3.1.2 resolution: "@jridgewell/resolve-uri@npm:3.1.2" checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e @@ -543,6 +874,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/trace-mapping@npm:0.3.9": + version: 0.3.9 + resolution: "@jridgewell/trace-mapping@npm:0.3.9" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.0.3" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + checksum: 10c0/fa425b606d7c7ee5bfa6a31a7b050dd5814b4082f318e0e4190f991902181b4330f43f4805db1dd4f2433fd0ed9cc7a7b9c2683f1deeab1df1b0a98b1e24055b + languageName: node + linkType: hard + "@jridgewell/trace-mapping@npm:^0.3.24": version: 0.3.25 resolution: "@jridgewell/trace-mapping@npm:0.3.25" @@ -553,21 +894,55 @@ __metadata: languageName: node linkType: hard -"@napi-rs/wasm-runtime@npm:^0.2.10": - version: 0.2.10 - resolution: "@napi-rs/wasm-runtime@npm:0.2.10" +"@jsdevtools/ono@npm:^7.1.3": + version: 7.1.3 + resolution: "@jsdevtools/ono@npm:7.1.3" + checksum: 10c0/a9f7e3e8e3bc315a34959934a5e2f874c423cf4eae64377d3fc9de0400ed9f36cb5fd5ebce3300d2e8f4085f557c4a8b591427a583729a87841fda46e6c216b9 + languageName: node + linkType: hard + +"@jsep-plugin/assignment@npm:^1.3.0": + version: 1.3.0 + resolution: "@jsep-plugin/assignment@npm:1.3.0" + peerDependencies: + jsep: ^0.4.0||^1.0.0 + checksum: 10c0/d749554dc691798116eb068eebe2d9bcb0b0d89ef6c7cc7c2a9f37d03da15fdbf8053407e97008090cd1bd6f256ea6c26abbada7399cf79f0b6b502e164b084b + languageName: node + linkType: hard + +"@jsep-plugin/regex@npm:^1.0.1, @jsep-plugin/regex@npm:^1.0.4": + version: 1.0.4 + resolution: "@jsep-plugin/regex@npm:1.0.4" + peerDependencies: + jsep: ^0.4.0||^1.0.0 + checksum: 10c0/bec7eb7ea6ab453a2672edc808644c5be3dc06b2a9d77182e18cd595b37deba6dcdb3760849d8684afc5779a86b7d2604dd525cb612a548f9ed9f31a8032ec24 + languageName: node + linkType: hard + +"@jsep-plugin/ternary@npm:^1.0.2": + version: 1.1.4 + resolution: "@jsep-plugin/ternary@npm:1.1.4" + peerDependencies: + jsep: ^0.4.0||^1.0.0 + checksum: 10c0/d50c9eb28d1872e333a5229b66ae6347aa4333a5fac4a8fff86c585a78acff6d8ed2184554b8dc888df70786a272deba530ccfdb216b6abff7f1ab48df3248e7 + languageName: node + linkType: hard + +"@napi-rs/wasm-runtime@npm:^0.2.10, @napi-rs/wasm-runtime@npm:^0.2.11": + version: 0.2.11 + resolution: "@napi-rs/wasm-runtime@npm:0.2.11" dependencies: "@emnapi/core": "npm:^1.4.3" "@emnapi/runtime": "npm:^1.4.3" "@tybys/wasm-util": "npm:^0.9.0" - checksum: 10c0/4dce9bbb94a8969805574e1b55fdbeb7623348190265d77f6507ba32e535610deeb53a33ba0bb8b05a6520f379d418b92e8a01c5cd7b9486b136d2c0c26be0bd + checksum: 10c0/049bd14c58b99fbe0967b95e9921c5503df196b59be22948d2155f17652eb305cff6728efd8685338b855da7e476dd2551fbe3a313fc2d810938f0717478441e languageName: node linkType: hard -"@next/env@npm:15.3.4": - version: 15.3.4 - resolution: "@next/env@npm:15.3.4" - checksum: 10c0/43d37896e1422c9c353d9ded1d1b01545aa30b2bb125bcc40ffd4474dbc6e0ba603a77fc2a598616964a925379bb5a39eb1a242f0c49fc933e39e099fb2f7d75 +"@next/env@npm:15.4.0-canary.85": + version: 15.4.0-canary.85 + resolution: "@next/env@npm:15.4.0-canary.85" + checksum: 10c0/2a11c5530bd87edf993413044af5175f7e230d6db41145e3c56059a0cd1fc675b6150e1644b1e8731ff1c590927b4d6c27550ca1bafae3318fffd6483e75d1da languageName: node linkType: hard @@ -580,58 +955,58 @@ __metadata: languageName: node linkType: hard -"@next/swc-darwin-arm64@npm:15.3.4": - version: 15.3.4 - resolution: "@next/swc-darwin-arm64@npm:15.3.4" +"@next/swc-darwin-arm64@npm:15.4.0-canary.85": + version: 15.4.0-canary.85 + resolution: "@next/swc-darwin-arm64@npm:15.4.0-canary.85" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@next/swc-darwin-x64@npm:15.3.4": - version: 15.3.4 - resolution: "@next/swc-darwin-x64@npm:15.3.4" +"@next/swc-darwin-x64@npm:15.4.0-canary.85": + version: 15.4.0-canary.85 + resolution: "@next/swc-darwin-x64@npm:15.4.0-canary.85" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@next/swc-linux-arm64-gnu@npm:15.3.4": - version: 15.3.4 - resolution: "@next/swc-linux-arm64-gnu@npm:15.3.4" +"@next/swc-linux-arm64-gnu@npm:15.4.0-canary.85": + version: 15.4.0-canary.85 + resolution: "@next/swc-linux-arm64-gnu@npm:15.4.0-canary.85" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-arm64-musl@npm:15.3.4": - version: 15.3.4 - resolution: "@next/swc-linux-arm64-musl@npm:15.3.4" +"@next/swc-linux-arm64-musl@npm:15.4.0-canary.85": + version: 15.4.0-canary.85 + resolution: "@next/swc-linux-arm64-musl@npm:15.4.0-canary.85" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@next/swc-linux-x64-gnu@npm:15.3.4": - version: 15.3.4 - resolution: "@next/swc-linux-x64-gnu@npm:15.3.4" +"@next/swc-linux-x64-gnu@npm:15.4.0-canary.85": + version: 15.4.0-canary.85 + resolution: "@next/swc-linux-x64-gnu@npm:15.4.0-canary.85" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-x64-musl@npm:15.3.4": - version: 15.3.4 - resolution: "@next/swc-linux-x64-musl@npm:15.3.4" +"@next/swc-linux-x64-musl@npm:15.4.0-canary.85": + version: 15.4.0-canary.85 + resolution: "@next/swc-linux-x64-musl@npm:15.4.0-canary.85" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@next/swc-win32-arm64-msvc@npm:15.3.4": - version: 15.3.4 - resolution: "@next/swc-win32-arm64-msvc@npm:15.3.4" +"@next/swc-win32-arm64-msvc@npm:15.4.0-canary.85": + version: 15.4.0-canary.85 + resolution: "@next/swc-win32-arm64-msvc@npm:15.4.0-canary.85" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@next/swc-win32-x64-msvc@npm:15.3.4": - version: 15.3.4 - resolution: "@next/swc-win32-x64-msvc@npm:15.3.4" +"@next/swc-win32-x64-msvc@npm:15.4.0-canary.85": + version: 15.4.0-canary.85 + resolution: "@next/swc-win32-x64-msvc@npm:15.4.0-canary.85" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -670,6 +1045,143 @@ __metadata: languageName: node linkType: hard +"@npmcli/agent@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/agent@npm:3.0.0" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^10.0.1" + socks-proxy-agent: "npm:^8.0.3" + checksum: 10c0/efe37b982f30740ee77696a80c196912c274ecd2cb243bc6ae7053a50c733ce0f6c09fda085145f33ecf453be19654acca74b69e81eaad4c90f00ccffe2f9271 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/fs@npm:4.0.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/c90935d5ce670c87b6b14fab04a965a3b8137e585f8b2a6257263bd7f97756dd736cb165bb470e5156a9e718ecd99413dccc54b1138c1a46d6ec7cf325982fe5 + languageName: node + linkType: hard + +"@orval/angular@npm:7.10.0": + version: 7.10.0 + resolution: "@orval/angular@npm:7.10.0" + dependencies: + "@orval/core": "npm:7.10.0" + checksum: 10c0/9ffd4cd4cede6e112226b1e319fadf48075a1b7b591cdb5f55abb5f0734fa033413faa6fbee4d5daa8761c7c04b8cda099fb3f9d43f1ffad9324ddb6c71dc587 + languageName: node + linkType: hard + +"@orval/axios@npm:7.10.0": + version: 7.10.0 + resolution: "@orval/axios@npm:7.10.0" + dependencies: + "@orval/core": "npm:7.10.0" + checksum: 10c0/4fc488b2f8d8bace5e6452ba76d37d0aa26e0c751d90969911acbba00b06037fe35f275b0e94a13ee106bff7bf93e0d751c4d25a0638745ce8d8b9e4681730b2 + languageName: node + linkType: hard + +"@orval/core@npm:7.10.0": + version: 7.10.0 + resolution: "@orval/core@npm:7.10.0" + dependencies: + "@apidevtools/swagger-parser": "npm:^10.1.1" + "@ibm-cloud/openapi-ruleset": "npm:^1.29.4" + acorn: "npm:^8.14.1" + ajv: "npm:^8.17.1" + chalk: "npm:^4.1.2" + compare-versions: "npm:^6.1.1" + debug: "npm:^4.4.0" + esbuild: "npm:^0.25.1" + esutils: "npm:2.0.3" + fs-extra: "npm:^11.3.0" + globby: "npm:11.1.0" + lodash.isempty: "npm:^4.4.0" + lodash.uniq: "npm:^4.5.0" + lodash.uniqby: "npm:^4.7.0" + lodash.uniqwith: "npm:^4.5.0" + micromatch: "npm:^4.0.8" + openapi3-ts: "npm:4.4.0" + swagger2openapi: "npm:^7.0.8" + checksum: 10c0/fc0b8bd3b1ea45983460ca776558cc316c0d0d421fc321bae46ae00a8b56ef3caa86b4de9ad4367a03e82cbcb0223e8e45ea8d38624134ee20aee5100aadff36 + languageName: node + linkType: hard + +"@orval/fetch@npm:7.10.0": + version: 7.10.0 + resolution: "@orval/fetch@npm:7.10.0" + dependencies: + "@orval/core": "npm:7.10.0" + checksum: 10c0/f79b51b6d8944966fc9cfd643c27abdd72d0a2b13a7bff05e59cb58b92d040480c5eb3cb8d727778a6cc87d26cd4f7f3cde85432b9b57d01322fd0330567c879 + languageName: node + linkType: hard + +"@orval/hono@npm:7.10.0": + version: 7.10.0 + resolution: "@orval/hono@npm:7.10.0" + dependencies: + "@orval/core": "npm:7.10.0" + "@orval/zod": "npm:7.10.0" + lodash.uniq: "npm:^4.5.0" + checksum: 10c0/05997000025d68b9c274e447d4f450b702b145dd37acc234cc31814cb81eab9093470355807f5130bf854311b4cb7dc92c0486bb5f98ad30142480b419144c8a + languageName: node + linkType: hard + +"@orval/mcp@npm:7.10.0": + version: 7.10.0 + resolution: "@orval/mcp@npm:7.10.0" + dependencies: + "@orval/core": "npm:7.10.0" + "@orval/zod": "npm:7.10.0" + checksum: 10c0/08b65ef2a7a389e9282e9790eac2b01024e275d460a459a0368858f40ed91a276921d545d486749a4b98f4962e37295f87b26aca0d404578ac595b2bcd68ba52 + languageName: node + linkType: hard + +"@orval/mock@npm:7.10.0": + version: 7.10.0 + resolution: "@orval/mock@npm:7.10.0" + dependencies: + "@orval/core": "npm:7.10.0" + openapi3-ts: "npm:^4.2.2" + checksum: 10c0/6a6b24aa337a249a0600ccfae6f05ce6aa991e86945459dd203951eba83a2698ef41670058f75760370550b03e387b2a9fce8302ecc0059ca26f7b2660ff9f0b + languageName: node + linkType: hard + +"@orval/query@npm:7.10.0": + version: 7.10.0 + resolution: "@orval/query@npm:7.10.0" + dependencies: + "@orval/core": "npm:7.10.0" + "@orval/fetch": "npm:7.10.0" + lodash.omitby: "npm:^4.6.0" + checksum: 10c0/6a343e4f5905cf3f6946e16fef0dc6d0ed30f01a4cde7072f6c717e5495cab8b5d7505486220fcd21c39a8fad195d2c120d5190226d1eaf368d7ea6dd9928292 + languageName: node + linkType: hard + +"@orval/swr@npm:7.10.0": + version: 7.10.0 + resolution: "@orval/swr@npm:7.10.0" + dependencies: + "@orval/core": "npm:7.10.0" + "@orval/fetch": "npm:7.10.0" + checksum: 10c0/6beb2c75285897ce931d1ca5b4ac8eb5f285d44252ec30cab70d56b882d6bc7e3d875abb66955fbd4f138bf2e59e0bf597a287cde0119d890cfebffea0d9b369 + languageName: node + linkType: hard + +"@orval/zod@npm:7.10.0": + version: 7.10.0 + resolution: "@orval/zod@npm:7.10.0" + dependencies: + "@orval/core": "npm:7.10.0" + lodash.uniq: "npm:^4.5.0" + checksum: 10c0/e2e892b0fb586bd1e4e50ded4d3313c6d4ee760656fd6c089a5e4f2468a265ad92416dfd78eacbc0d32330878dc250b9665d847598ee6bb33f37820daa03fbfd + languageName: node + linkType: hard + "@panva/hkdf@npm:^1.2.1": version: 1.2.1 resolution: "@panva/hkdf@npm:1.2.1" @@ -677,9 +1189,16 @@ __metadata: languageName: node linkType: hard +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd + languageName: node + linkType: hard + "@prisma/client@npm:^6.9.0": - version: 6.9.0 - resolution: "@prisma/client@npm:6.9.0" + version: 6.10.1 + resolution: "@prisma/client@npm:6.10.1" peerDependencies: prisma: "*" typescript: ">=5.1.0" @@ -688,7 +1207,7 @@ __metadata: optional: true typescript: optional: true - checksum: 10c0/4877d9d0f93ca404c066ce0536f4c2180a8a16a2b0ade8f15df9dd5286c74db55c5a99f4632f13b32045b966cb5f01e010806edda865aa22bbb0aef65f8b6e9f + checksum: 10c0/f6f7b1c43c45d7c73a46b55df17a3c5de2ec30eeb7463fcd9b45e5d67036c5c9059e762aa99a536bc212f8aff836bfd0f674c995ab07a5cb3a92ac56dc82d173 languageName: node linkType: hard @@ -1440,6 +1959,58 @@ __metadata: languageName: node linkType: hard +"@scarf/scarf@npm:=1.4.0": + version: 1.4.0 + resolution: "@scarf/scarf@npm:1.4.0" + checksum: 10c0/332118bb488e7a70eaad068fb1a33f016d30442fb0498b37a80cb425c1e741853a5de1a04dce03526ed6265481ecf744aa6e13f072178d19e6b94b19f623ae1c + languageName: node + linkType: hard + +"@shikijs/engine-oniguruma@npm:^3.6.0": + version: 3.7.0 + resolution: "@shikijs/engine-oniguruma@npm:3.7.0" + dependencies: + "@shikijs/types": "npm:3.7.0" + "@shikijs/vscode-textmate": "npm:^10.0.2" + checksum: 10c0/e1ec52ec2255e3330812084d62bde8853d20162b1cd285dbb63440d63d0b16c03b6ce6983982e41ac2fc2eceb3e2f6b2bc1c627d093482c4c3836c4fbb9567b0 + languageName: node + linkType: hard + +"@shikijs/langs@npm:^3.6.0": + version: 3.7.0 + resolution: "@shikijs/langs@npm:3.7.0" + dependencies: + "@shikijs/types": "npm:3.7.0" + checksum: 10c0/326e8b014e74d25ce84a63bf7fdd47d5582f85c8404d4c48d6bdacf2f32ab92ddb39b41710ee7eff3daaecbbea7ee96a6c49d427344ee8375551597c74010a81 + languageName: node + linkType: hard + +"@shikijs/themes@npm:^3.6.0": + version: 3.7.0 + resolution: "@shikijs/themes@npm:3.7.0" + dependencies: + "@shikijs/types": "npm:3.7.0" + checksum: 10c0/6887eb99b55439988edab21a1af00302eaed6ba0dd7e2bea6c844ff4dfb8879a0c6c2178ba3fcfe2dbf3fd9f3ab6105572c57ae871e147aaceaf53bcc345d0cd + languageName: node + linkType: hard + +"@shikijs/types@npm:3.7.0, @shikijs/types@npm:^3.6.0": + version: 3.7.0 + resolution: "@shikijs/types@npm:3.7.0" + dependencies: + "@shikijs/vscode-textmate": "npm:^10.0.2" + "@types/hast": "npm:^3.0.4" + checksum: 10c0/d7c4fcca358c0585602090e2b4ed0a3f6742b55bea340030c115cb7aa643eac79836baa095517a538d695415458bb48c08b7be7f3c8d1cf1c1c7749a58913a3f + languageName: node + linkType: hard + +"@shikijs/vscode-textmate@npm:^10.0.2": + version: 10.0.2 + resolution: "@shikijs/vscode-textmate@npm:10.0.2" + checksum: 10c0/36b682d691088ec244de292dc8f91b808f95c89466af421cf84cbab92230f03c8348649c14b3251991b10ce632b0c715e416e992dd5f28ff3221dc2693fd9462 + languageName: node + linkType: hard + "@standard-schema/utils@npm:^0.3.0": version: 0.3.0 resolution: "@standard-schema/utils@npm:0.3.0" @@ -1447,10 +2018,784 @@ __metadata: languageName: node linkType: hard -"@swc/counter@npm:0.1.3": - version: 0.1.3 - resolution: "@swc/counter@npm:0.1.3" - checksum: 10c0/8424f60f6bf8694cfd2a9bca45845bce29f26105cda8cf19cdb9fd3e78dc6338699e4db77a89ae449260bafa1cc6bec307e81e7fb96dbf7dcfce0eea55151356 +"@stoplight/better-ajv-errors@npm:1.0.3": + version: 1.0.3 + resolution: "@stoplight/better-ajv-errors@npm:1.0.3" + dependencies: + jsonpointer: "npm:^5.0.0" + leven: "npm:^3.1.0" + peerDependencies: + ajv: ">=8" + checksum: 10c0/0021c1a17fcc514d1922c0456bb976283c3282ebd63ca3d1816295d1fb3d8517442262fa7eafa83fb0a62c433abcac6c16c985258f6fb55116df8ce88b23cbed + languageName: node + linkType: hard + +"@stoplight/json-ref-readers@npm:1.2.2": + version: 1.2.2 + resolution: "@stoplight/json-ref-readers@npm:1.2.2" + dependencies: + node-fetch: "npm:^2.6.0" + tslib: "npm:^1.14.1" + checksum: 10c0/c7b9b18a842b4d4c1d39daf7280e1e7bdd1dbaf770d25f6cdff99cba3c857d3c22d608c0a1c00fbb3f3a0bfe0ca7d1ed4ec62e4130ac0346ad882e379a9c9a22 + languageName: node + linkType: hard + +"@stoplight/json-ref-resolver@npm:~3.1.6": + version: 3.1.6 + resolution: "@stoplight/json-ref-resolver@npm:3.1.6" + dependencies: + "@stoplight/json": "npm:^3.21.0" + "@stoplight/path": "npm:^1.3.2" + "@stoplight/types": "npm:^12.3.0 || ^13.0.0" + "@types/urijs": "npm:^1.19.19" + dependency-graph: "npm:~0.11.0" + fast-memoize: "npm:^2.5.2" + immer: "npm:^9.0.6" + lodash: "npm:^4.17.21" + tslib: "npm:^2.6.0" + urijs: "npm:^1.19.11" + checksum: 10c0/ebacb3cc3d1b7e6de9559b1ebc6c199aabb06311e81863829f1d2ea0be8d677b297fd32a016c81626cf733a256ad99a7bd8d24f7d9144d872e42db58c80eab9a + languageName: node + linkType: hard + +"@stoplight/json@npm:^3.17.0, @stoplight/json@npm:^3.17.1, @stoplight/json@npm:^3.20.1, @stoplight/json@npm:^3.21.0, @stoplight/json@npm:~3.21.0": + version: 3.21.7 + resolution: "@stoplight/json@npm:3.21.7" + dependencies: + "@stoplight/ordered-object-literal": "npm:^1.0.3" + "@stoplight/path": "npm:^1.3.2" + "@stoplight/types": "npm:^13.6.0" + jsonc-parser: "npm:~2.2.1" + lodash: "npm:^4.17.21" + safe-stable-stringify: "npm:^1.1" + checksum: 10c0/7a60acbbf8d2c34d8812d988bab4e4687da80d45e0a11e05731a6e83586548421d5901713dcbb17b749ef32128eca2029a66f1e2e417578e5a3504b89db5c807 + languageName: node + linkType: hard + +"@stoplight/ordered-object-literal@npm:^1.0.3, @stoplight/ordered-object-literal@npm:^1.0.5": + version: 1.0.5 + resolution: "@stoplight/ordered-object-literal@npm:1.0.5" + checksum: 10c0/e14402990f66f48478fb0871c14fd3c034f1bf9c56161921c354ccaa6dfb2639408fe9a8c77275119d6b734ee5513258f51a0ee2459d1cc6d9068b67eeb48862 + languageName: node + linkType: hard + +"@stoplight/path@npm:1.3.2, @stoplight/path@npm:^1.3.2": + version: 1.3.2 + resolution: "@stoplight/path@npm:1.3.2" + checksum: 10c0/c26ebbd123f1ad0a44485a63763802133080b0455578fa52d01a8ae85230497a561d0073344d00cc73494328489575fe9fadad3ad4d67b015866b6ef01aaad84 + languageName: node + linkType: hard + +"@stoplight/spectral-core@npm:^1.19.2, @stoplight/spectral-core@npm:^1.19.4": + version: 1.20.0 + resolution: "@stoplight/spectral-core@npm:1.20.0" + dependencies: + "@stoplight/better-ajv-errors": "npm:1.0.3" + "@stoplight/json": "npm:~3.21.0" + "@stoplight/path": "npm:1.3.2" + "@stoplight/spectral-parsers": "npm:^1.0.0" + "@stoplight/spectral-ref-resolver": "npm:^1.0.4" + "@stoplight/spectral-runtime": "npm:^1.1.2" + "@stoplight/types": "npm:~13.6.0" + "@types/es-aggregate-error": "npm:^1.0.2" + "@types/json-schema": "npm:^7.0.11" + ajv: "npm:^8.17.1" + ajv-errors: "npm:~3.0.0" + ajv-formats: "npm:~2.1.1" + es-aggregate-error: "npm:^1.0.7" + jsonpath-plus: "npm:^10.3.0" + lodash: "npm:~4.17.21" + lodash.topath: "npm:^4.5.2" + minimatch: "npm:3.1.2" + nimma: "npm:0.2.3" + pony-cause: "npm:^1.1.1" + simple-eval: "npm:1.0.1" + tslib: "npm:^2.8.1" + checksum: 10c0/ebf6adeefded181b7c220a6cae70ebed37aa9e2ca73d9bd386d7e4c2bef965aea154fd6bb7613c822d37ae3440745fe1408c1369a11475e1050fcb986e64b63a + languageName: node + linkType: hard + +"@stoplight/spectral-formats@npm:^1.8.1, @stoplight/spectral-formats@npm:^1.8.2": + version: 1.8.2 + resolution: "@stoplight/spectral-formats@npm:1.8.2" + dependencies: + "@stoplight/json": "npm:^3.17.0" + "@stoplight/spectral-core": "npm:^1.19.2" + "@types/json-schema": "npm:^7.0.7" + tslib: "npm:^2.8.1" + checksum: 10c0/4401ebe05442e6f48d54d18c020a2dbc4b87b650dc3af2e278f41a569b16a957fab417dbb4dffb14f4c19a8b91f6e9df49defff2fabeaa97bbfb259a980c1d2e + languageName: node + linkType: hard + +"@stoplight/spectral-functions@npm:^1.9.1, @stoplight/spectral-functions@npm:^1.9.3": + version: 1.10.1 + resolution: "@stoplight/spectral-functions@npm:1.10.1" + dependencies: + "@stoplight/better-ajv-errors": "npm:1.0.3" + "@stoplight/json": "npm:^3.17.1" + "@stoplight/spectral-core": "npm:^1.19.4" + "@stoplight/spectral-formats": "npm:^1.8.1" + "@stoplight/spectral-runtime": "npm:^1.1.2" + ajv: "npm:^8.17.1" + ajv-draft-04: "npm:~1.0.0" + ajv-errors: "npm:~3.0.0" + ajv-formats: "npm:~2.1.1" + lodash: "npm:~4.17.21" + tslib: "npm:^2.8.1" + checksum: 10c0/f26af18a8ff107f5d49a86e4134f10d244fc9bc64833b92c487d1372740b2b3839a72bb76d2061320f33498e65c2704aba5062635ec4c24c16139a4cf83497ca + languageName: node + linkType: hard + +"@stoplight/spectral-parsers@npm:^1.0.0": + version: 1.0.5 + resolution: "@stoplight/spectral-parsers@npm:1.0.5" + dependencies: + "@stoplight/json": "npm:~3.21.0" + "@stoplight/types": "npm:^14.1.1" + "@stoplight/yaml": "npm:~4.3.0" + tslib: "npm:^2.8.1" + checksum: 10c0/3c6578226964d9207b8108d8026b95bbd979640361bb5b0b988da9dc3a2fcd94452f96f5cb41e972baf105fb7ab29b6e8921f21e976a39afc7d368a3a0bf1c0a + languageName: node + linkType: hard + +"@stoplight/spectral-ref-resolver@npm:^1.0.4": + version: 1.0.5 + resolution: "@stoplight/spectral-ref-resolver@npm:1.0.5" + dependencies: + "@stoplight/json-ref-readers": "npm:1.2.2" + "@stoplight/json-ref-resolver": "npm:~3.1.6" + "@stoplight/spectral-runtime": "npm:^1.1.2" + dependency-graph: "npm:0.11.0" + tslib: "npm:^2.8.1" + checksum: 10c0/db7f31d1679c3d6f1adb4b63a8a5288be3b1bfee4515a05fa7092b7eb3ee3d228a9bcd693df4b4e5e1f49323f8a7603ded0163cafd752ce5b4e50fe3b16e446b + languageName: node + linkType: hard + +"@stoplight/spectral-rulesets@npm:^1.21.3": + version: 1.22.0 + resolution: "@stoplight/spectral-rulesets@npm:1.22.0" + dependencies: + "@asyncapi/specs": "npm:^6.8.0" + "@stoplight/better-ajv-errors": "npm:1.0.3" + "@stoplight/json": "npm:^3.17.0" + "@stoplight/spectral-core": "npm:^1.19.4" + "@stoplight/spectral-formats": "npm:^1.8.1" + "@stoplight/spectral-functions": "npm:^1.9.1" + "@stoplight/spectral-runtime": "npm:^1.1.2" + "@stoplight/types": "npm:^13.6.0" + "@types/json-schema": "npm:^7.0.7" + ajv: "npm:^8.17.1" + ajv-formats: "npm:~2.1.1" + json-schema-traverse: "npm:^1.0.0" + leven: "npm:3.1.0" + lodash: "npm:~4.17.21" + tslib: "npm:^2.8.1" + checksum: 10c0/9a19bc55ee4f800089f943ff0cb5f8c3902b689060c2b2b9de0c298cc5e8e9baa74767c218c3fa037483470fb10268c4d70d48ba7513b293ad184126459ebc71 + languageName: node + linkType: hard + +"@stoplight/spectral-runtime@npm:^1.1.2": + version: 1.1.4 + resolution: "@stoplight/spectral-runtime@npm:1.1.4" + dependencies: + "@stoplight/json": "npm:^3.20.1" + "@stoplight/path": "npm:^1.3.2" + "@stoplight/types": "npm:^13.6.0" + abort-controller: "npm:^3.0.0" + lodash: "npm:^4.17.21" + node-fetch: "npm:^2.7.0" + tslib: "npm:^2.8.1" + checksum: 10c0/5a12286fcea26899ba8a9a87f3f9859bb5d5697695bc8dc0c2a7cbc4f0dbfa314df39cbe36e516c9a502f1654bd8e5b56ecc730a6193e7dee74d01f52f320a9b + languageName: node + linkType: hard + +"@stoplight/types@npm:^12.3.0 || ^13.0.0, @stoplight/types@npm:^13.6.0": + version: 13.20.0 + resolution: "@stoplight/types@npm:13.20.0" + dependencies: + "@types/json-schema": "npm:^7.0.4" + utility-types: "npm:^3.10.0" + checksum: 10c0/11d741bd71c6a286cef946b10e003b9b13b031f512d576ed1274c194540f0ee928332108d2b4d1bc87a8e5ba9703d1266951e6a53b8eb0a8db4dc68b1a798cab + languageName: node + linkType: hard + +"@stoplight/types@npm:^14.1.1": + version: 14.1.1 + resolution: "@stoplight/types@npm:14.1.1" + dependencies: + "@types/json-schema": "npm:^7.0.4" + utility-types: "npm:^3.10.0" + checksum: 10c0/1573d842fee99a7f1eea1f2b17c28dcbfb1be51b72f2ef794e07d265b2fb8900654b5848f608952cd1e3dedf6c7ec157c82c65d4d95728d6309f4b1722a11450 + languageName: node + linkType: hard + +"@stoplight/types@npm:~13.6.0": + version: 13.6.0 + resolution: "@stoplight/types@npm:13.6.0" + dependencies: + "@types/json-schema": "npm:^7.0.4" + utility-types: "npm:^3.10.0" + checksum: 10c0/64de299a1d1fbe819b601d72192e44f63c665f13e7a39a9c80930a2bdd54a6361ce9e7d60992ccc42ac8e4ac3b9c9d88a026deea59fe3f6e96a791c169c7a458 + languageName: node + linkType: hard + +"@stoplight/yaml-ast-parser@npm:0.0.50": + version: 0.0.50 + resolution: "@stoplight/yaml-ast-parser@npm:0.0.50" + checksum: 10c0/44d83c7081888402bee88ad0c1e90cd191478005773d8f9767015e109f8499c17da57eb790cca30ba1c02d2f1b74f82992f01ca8ffa272085d17b5f4b5a618cf + languageName: node + linkType: hard + +"@stoplight/yaml@npm:~4.3.0": + version: 4.3.0 + resolution: "@stoplight/yaml@npm:4.3.0" + dependencies: + "@stoplight/ordered-object-literal": "npm:^1.0.5" + "@stoplight/types": "npm:^14.1.1" + "@stoplight/yaml-ast-parser": "npm:0.0.50" + tslib: "npm:^2.2.0" + checksum: 10c0/d72b26e05a9cf96cb8321ea14bd03ba85aae023d48484d038e1f231ebdd7b8abcda496f55676944c5d138b177294991c25a3ae49cb5182f16c7eaa4660bc9928 + languageName: node + linkType: hard + +"@swagger-api/apidom-ast@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-ast@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-error": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + unraw: "npm:^3.0.0" + checksum: 10c0/ccb8b32f05b35f53637c1d704428383a5bfc3173928b41183e6b611ef17250cc1587f6db8a20717684cf13644432b8f187b75818cd21cdc262983389ca421744 + languageName: node + linkType: hard + +"@swagger-api/apidom-core@npm:>=1.0.0-beta.41 <1.0.0-rc.0, @swagger-api/apidom-core@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-core@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-ast": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-error": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + minim: "npm:~0.23.8" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + short-unique-id: "npm:^5.3.2" + ts-mixer: "npm:^6.0.3" + checksum: 10c0/3409541bee4a6b576b2d9042b51fc72f8167493a95e35a9672a88a05912dd134bc20676373bc5c73c42d20ac0c72c6353c19912c04aea391a6bb4a7a24f1575d + languageName: node + linkType: hard + +"@swagger-api/apidom-error@npm:>=1.0.0-beta.41 <1.0.0-rc.0, @swagger-api/apidom-error@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-error@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.20.7" + checksum: 10c0/8680952816170aed8d00726bf5a7b19cc77c1f008bdc14abb30c707eeae5777a1187668faa001ace947728f02272de85317cd51dd16d428b78af3f0a3919db03 + languageName: node + linkType: hard + +"@swagger-api/apidom-json-pointer@npm:>=1.0.0-beta.41 <1.0.0-rc.0, @swagger-api/apidom-json-pointer@npm:^1.0.0-beta.40 <1.0.0-rc.0, @swagger-api/apidom-json-pointer@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-json-pointer@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-error": "npm:^1.0.0-beta.43" + "@swaggerexpert/json-pointer": "npm:^2.10.1" + checksum: 10c0/983a4db04d9e35b2f901e735303d15b72b4a6a0eb30a6ae8e9f15dbe14e9f177142512eeccf2260b1266dc2bbe5c2ddbfe5ae2f3d315aff452c3cc576653672d + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-api-design-systems@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-ns-api-design-systems@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-error": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-openapi-3-1": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + ts-mixer: "npm:^6.0.3" + checksum: 10c0/fef4fac684d69865fe6b033584615ca25ba1ce86fa38ce7a7f8f53d86d29aebf7b3e14ee26bc633b05d10948591334cbd3730b59c4d28f77a1c254c4d9fbb7c8 + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-arazzo-1@npm:^1.0.0-beta.40 <1.0.0-rc.0, @swagger-api/apidom-ns-arazzo-1@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-ns-arazzo-1@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-json-schema-2020-12": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + ts-mixer: "npm:^6.0.3" + checksum: 10c0/a8b12d9247f79ff3a2022eb140c088f5d6dca5360c87a7e5b135ef477930bb0b45c41e8def169676197f0b4a53437b5efb095eacad2775ac70f0bbf468eec61b + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-asyncapi-2@npm:^1.0.0-beta.40 <1.0.0-rc.0, @swagger-api/apidom-ns-asyncapi-2@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-ns-asyncapi-2@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-json-schema-draft-7": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + ts-mixer: "npm:^6.0.3" + checksum: 10c0/1519adcf2a23355166f82c2e7e862bcd5e2c838210b0e60d3bf10e497e57bd6e69e2a3e9840e81e628f939718c956ba81e6eedbeab4e55381ea4550d12414e74 + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-json-schema-2019-09@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-ns-json-schema-2019-09@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-error": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-json-schema-draft-7": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + ts-mixer: "npm:^6.0.4" + checksum: 10c0/4a704f9f810a2682a418c63b6876c1058247bedee1ee06b6dd146ccdafee25ed47ef14829097306bac970cee503537b5c8fc2bc76dfd4c47ddf0b44730686673 + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-json-schema-2020-12@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-ns-json-schema-2020-12@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-error": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-json-schema-2019-09": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + ts-mixer: "npm:^6.0.4" + checksum: 10c0/69ce2dd5c861f8fd7fe55edb0c5efad7d83529b4d2879f2999aea950c764237c22ebd976b16591e29dc073780e85fb48db1c6091bedb9c49dd8cc1f8ed6ccd6b + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-json-schema-draft-4@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-ns-json-schema-draft-4@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-ast": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + ts-mixer: "npm:^6.0.4" + checksum: 10c0/86b454cadcb1785947808c6aae0b04052b1d3f0a15140e97e92ccb9b546e55475b7845189144304a86ecf7d8445d9fef417024ccbe85c74a1736e39d553dfc45 + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-json-schema-draft-6@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-ns-json-schema-draft-6@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-error": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-json-schema-draft-4": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + ts-mixer: "npm:^6.0.4" + checksum: 10c0/da9ae7e1a25c1906ba4f572aa2ebe666703b55f0ba389d2b99c22ed50e8605c0ae6eb0340548d2d0f523f8356135c1b09fbd5daeb3f466bb09c4ac9a9e6b099b + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-json-schema-draft-7@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-ns-json-schema-draft-7@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-error": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-json-schema-draft-6": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + ts-mixer: "npm:^6.0.4" + checksum: 10c0/5afe3969063204eabf0777fec0cba424b057e375f06a0eee3349f45a65a4f9e5d2c98311d68cd4dc2241f407499b924ed956b2c69f67b02d10b69a66f4b4bf07 + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-openapi-2@npm:^1.0.0-beta.40 <1.0.0-rc.0, @swagger-api/apidom-ns-openapi-2@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-ns-openapi-2@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-error": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-json-schema-draft-4": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + ts-mixer: "npm:^6.0.3" + checksum: 10c0/a805cfc37f5d185faa6d3659f01434c6838473cb1387238987d9013628334b17c2c25f70963df09b89a67a27e5c9b97c50e4e0a6ba80683642b7ceba6bdf8e9c + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-openapi-3-0@npm:^1.0.0-beta.40 <1.0.0-rc.0, @swagger-api/apidom-ns-openapi-3-0@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-ns-openapi-3-0@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-error": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-json-schema-draft-4": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + ts-mixer: "npm:^6.0.3" + checksum: 10c0/9f4ca7451ec07018971d21d87c1b688ef7ca1bd423a9de661a9c1d24410f3d587e7d4878a55983b2e98f3b092afa6126a64166c76badfbe855448cbd86302b8a + languageName: node + linkType: hard + +"@swagger-api/apidom-ns-openapi-3-1@npm:>=1.0.0-beta.41 <1.0.0-rc.0, @swagger-api/apidom-ns-openapi-3-1@npm:^1.0.0-beta.40 <1.0.0-rc.0, @swagger-api/apidom-ns-openapi-3-1@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-ns-openapi-3-1@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-ast": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-json-pointer": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-json-schema-2020-12": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-openapi-3-0": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + ts-mixer: "npm:^6.0.3" + checksum: 10c0/f8d1e7e57b178ff9efbe7658281d6400666d9153c46c2dc39695be1e62397341c67b6cd9dbebcbe19a015ad4ed07116011510d123f297caa30f149a04ea67290 + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-api-design-systems-json@npm:^1.0.0-beta.40 <1.0.0-rc.0": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-parser-adapter-api-design-systems-json@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-api-design-systems": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-parser-adapter-json": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + checksum: 10c0/86717c996ec748f25fbb8e46ac77fba80240516b3adefdf02c932018a36d7c5657c394bedd2651afc5edd6ec2a4cc169e91e8ef3c89001f48ec446f3a2d40b06 + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-api-design-systems-yaml@npm:^1.0.0-beta.40 <1.0.0-rc.0": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-parser-adapter-api-design-systems-yaml@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-api-design-systems": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-parser-adapter-yaml-1-2": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + checksum: 10c0/e1e574d8dfa5720cedb9624def0f8caf59a052d9ad5e937c30d85507e228f6ff4195eefde4b7a2683731a7aa5a1e94a5563384d8da13e7d85c99ab71f4eb53d9 + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-arazzo-json-1@npm:^1.0.0-beta.40 <1.0.0-rc.0": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-parser-adapter-arazzo-json-1@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-arazzo-1": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-parser-adapter-json": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + checksum: 10c0/bbc14d4206966c87e916818c1b4608668c489f0d694bbfebeb74490474296b2ef63fae91758a7bc6958ec90d4b0a06730d30b216489e1221c8f3763ea046e447 + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-arazzo-yaml-1@npm:^1.0.0-beta.40 <1.0.0-rc.0": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-parser-adapter-arazzo-yaml-1@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-arazzo-1": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-parser-adapter-yaml-1-2": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + checksum: 10c0/7fb20f15928137919e454c257fd578859c7acc69f28c83fee32d5a355e9f4b307d911d05abebc1bb4bd0c511592d6978f0b8c5647bcddc575461b07f097bdb45 + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-asyncapi-json-2@npm:^1.0.0-beta.40 <1.0.0-rc.0": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-parser-adapter-asyncapi-json-2@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-asyncapi-2": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-parser-adapter-json": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + checksum: 10c0/05bf86fc41ebf238a7e56cb51427e1ed721c01335c29cc037876fde7662e5a13327f4f8ab4bc7828a85017b036910b1d9ca2c6cc9d61c1dd7aabb321216a0fda + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@npm:^1.0.0-beta.40 <1.0.0-rc.0": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-asyncapi-2": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-parser-adapter-yaml-1-2": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + checksum: 10c0/7b245997cfa4f7a241543dcbdffeb52faf88868008bbe69ecf5500fcad5f80eb56212b8b11fe302938c84292329fba1aa4eb5a3e91b5c59ab5dc899a6a540b66 + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-json@npm:^1.0.0-beta.40 <1.0.0-rc.0, @swagger-api/apidom-parser-adapter-json@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-parser-adapter-json@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-ast": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-error": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + node-gyp: "npm:latest" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + tree-sitter: "npm:=0.21.1" + tree-sitter-json: "npm:=0.24.8" + web-tree-sitter: "npm:=0.24.5" + checksum: 10c0/9b3c39510106fbaad56e31db168b80312405b229eab91f7bd0842d80ab4a145f52234c25ced737c3788cc7e23accb46c98d86fbb219a133137a5718ba659fc09 + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-openapi-json-2@npm:^1.0.0-beta.40 <1.0.0-rc.0": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-parser-adapter-openapi-json-2@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-openapi-2": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-parser-adapter-json": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + checksum: 10c0/75279386ef2072d970a50508ba12478ef55cfd6024f7d240185736e81d73cd1703f20a5bff2a282ab394ee4514781ae9b8d173315058cb760af56a788940701b + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-openapi-json-3-0@npm:^1.0.0-beta.40 <1.0.0-rc.0": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-parser-adapter-openapi-json-3-0@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-openapi-3-0": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-parser-adapter-json": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + checksum: 10c0/ab2d5fc05041b4feb0ba75903aaacd744dfa203b087286da7912ee0b220856bcdf3c6232a0293bb39d9b2f43ed45ed2791885bab327c8538d97380adbb15b971 + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-openapi-json-3-1@npm:^1.0.0-beta.40 <1.0.0-rc.0": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-parser-adapter-openapi-json-3-1@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-openapi-3-1": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-parser-adapter-json": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + checksum: 10c0/cbbcb3a66bd5b6c22eee9be1f6417c38bd99955727ad913888bfedabdc528696bbc462ee00b94b7c1b52d53c6f801e1d2a6cdcd1a2ca9c98e714691de56c9645 + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-openapi-yaml-2@npm:^1.0.0-beta.40 <1.0.0-rc.0": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-parser-adapter-openapi-yaml-2@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-openapi-2": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-parser-adapter-yaml-1-2": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + checksum: 10c0/7dd0025849af6c5fa5bc1011d964de997c4e3505d3b7b51cd3cab450c5a2bde10a13a904b9c21f06e205dcaf0da6ae1b5aa56382c90c795634516c883e1ed834 + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@npm:^1.0.0-beta.40 <1.0.0-rc.0": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-openapi-3-0": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-parser-adapter-yaml-1-2": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + checksum: 10c0/5ce9603bc156629d0095ef40a2308b85fab62680236c594cf758a03bc552b641236c6addd20a5ce72adeb4c7ad73845e7c9482a46a6992abb1674f297cdacdfd + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@npm:^1.0.0-beta.40 <1.0.0-rc.0": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-ns-openapi-3-1": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-parser-adapter-yaml-1-2": "npm:^1.0.0-beta.43" + "@types/ramda": "npm:~0.30.0" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + checksum: 10c0/a3631ac62606b0574119614c12c93de5aad799bf913f4d15a9098352882c7da551f940b0858e537a4b78749305744d80c05fc9b517c82722deeb46c09048bc9f + languageName: node + linkType: hard + +"@swagger-api/apidom-parser-adapter-yaml-1-2@npm:^1.0.0-beta.40 <1.0.0-rc.0, @swagger-api/apidom-parser-adapter-yaml-1-2@npm:^1.0.0-beta.43": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-parser-adapter-yaml-1-2@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-ast": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-error": "npm:^1.0.0-beta.43" + "@tree-sitter-grammars/tree-sitter-yaml": "npm:=0.7.1" + "@types/ramda": "npm:~0.30.0" + node-gyp: "npm:latest" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + tree-sitter: "npm:=0.22.4" + web-tree-sitter: "npm:=0.24.5" + checksum: 10c0/5fda71d63d0c1d36971f6a6931335c1b315450e3cfec1494f1592d59b8e4297cd8a5fdfa2e8dfac06fe9d71060425e1d06b6f6dc3ef6be2ddd75101d0bd96b3d + languageName: node + linkType: hard + +"@swagger-api/apidom-reference@npm:>=1.0.0-beta.41 <1.0.0-rc.0": + version: 1.0.0-beta.43 + resolution: "@swagger-api/apidom-reference@npm:1.0.0-beta.43" + dependencies: + "@babel/runtime-corejs3": "npm:^7.26.10" + "@swagger-api/apidom-core": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-error": "npm:^1.0.0-beta.43" + "@swagger-api/apidom-json-pointer": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-ns-arazzo-1": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-ns-asyncapi-2": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-ns-openapi-2": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-ns-openapi-3-0": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-ns-openapi-3-1": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-parser-adapter-api-design-systems-json": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-parser-adapter-arazzo-json-1": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-parser-adapter-arazzo-yaml-1": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-parser-adapter-asyncapi-json-2": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-parser-adapter-json": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-parser-adapter-openapi-json-2": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-parser-adapter-openapi-json-3-0": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-parser-adapter-openapi-json-3-1": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-parser-adapter-openapi-yaml-2": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-parser-adapter-yaml-1-2": "npm:^1.0.0-beta.40 <1.0.0-rc.0" + "@types/ramda": "npm:~0.30.0" + axios: "npm:^1.9.0" + minimatch: "npm:^7.4.3" + process: "npm:^0.11.10" + ramda: "npm:~0.30.0" + ramda-adjunct: "npm:^5.0.0" + dependenciesMeta: + "@swagger-api/apidom-json-pointer": + optional: true + "@swagger-api/apidom-ns-arazzo-1": + optional: true + "@swagger-api/apidom-ns-asyncapi-2": + optional: true + "@swagger-api/apidom-ns-openapi-2": + optional: true + "@swagger-api/apidom-ns-openapi-3-0": + optional: true + "@swagger-api/apidom-ns-openapi-3-1": + optional: true + "@swagger-api/apidom-parser-adapter-api-design-systems-json": + optional: true + "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": + optional: true + "@swagger-api/apidom-parser-adapter-arazzo-json-1": + optional: true + "@swagger-api/apidom-parser-adapter-arazzo-yaml-1": + optional: true + "@swagger-api/apidom-parser-adapter-asyncapi-json-2": + optional: true + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": + optional: true + "@swagger-api/apidom-parser-adapter-json": + optional: true + "@swagger-api/apidom-parser-adapter-openapi-json-2": + optional: true + "@swagger-api/apidom-parser-adapter-openapi-json-3-0": + optional: true + "@swagger-api/apidom-parser-adapter-openapi-json-3-1": + optional: true + "@swagger-api/apidom-parser-adapter-openapi-yaml-2": + optional: true + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": + optional: true + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": + optional: true + "@swagger-api/apidom-parser-adapter-yaml-1-2": + optional: true + checksum: 10c0/0e670482dbba811674ea5ecbacd6ea86307f0712ad0a7caec257bcefee9056ec751b2d16619d1cd02191938f3cc165f89dfc8bd6f4fd1e4da0b5fdc4681ffdf3 + languageName: node + linkType: hard + +"@swaggerexpert/cookie@npm:^2.0.2": + version: 2.0.2 + resolution: "@swaggerexpert/cookie@npm:2.0.2" + dependencies: + apg-lite: "npm:^1.0.3" + checksum: 10c0/50b9e57e6a35d802d408541e95d8dac8506b3ad82658f5af5beaefdf7b8f405b04eafa1beeaf4fa27b5bd24ac94189edc70841bb1ecf6bc8222dcb8efd62a4f9 + languageName: node + linkType: hard + +"@swaggerexpert/json-pointer@npm:^2.10.1": + version: 2.10.2 + resolution: "@swaggerexpert/json-pointer@npm:2.10.2" + dependencies: + apg-lite: "npm:^1.0.4" + checksum: 10c0/9033a0f1d786c071fda6410aaa0a5986b3e9c1cc5b94706969644cdcb1792c815c8e1e68a12c453813e990c2d4dc5f22add04a196555bdb3cffd82cb1303e2c4 languageName: node linkType: hard @@ -1629,6 +2974,68 @@ __metadata: languageName: node linkType: hard +"@tanstack/query-core@npm:5.80.10": + version: 5.80.10 + resolution: "@tanstack/query-core@npm:5.80.10" + checksum: 10c0/6391f4439f1f4676f5efeb07271e6b0b1418bd1192779f55cac537f0b35ec31c729eb43a30e0269534328c259c3ed6dd2f31555c42c68b6dd0c9ede410d46eb1 + languageName: node + linkType: hard + +"@tanstack/react-query@npm:^5.80.7": + version: 5.80.10 + resolution: "@tanstack/react-query@npm:5.80.10" + dependencies: + "@tanstack/query-core": "npm:5.80.10" + peerDependencies: + react: ^18 || ^19 + checksum: 10c0/1a759b264cc94b389f802f1183183a3fbe1669ec1bb354951cfab6b6cf175276885c5f5c9b3fc00340a87140fdff4b9cf0c688fb7af103d34fb3b209d33a0a95 + languageName: node + linkType: hard + +"@tree-sitter-grammars/tree-sitter-yaml@npm:=0.7.1": + version: 0.7.1 + resolution: "@tree-sitter-grammars/tree-sitter-yaml@npm:0.7.1" + dependencies: + node-addon-api: "npm:^8.3.1" + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.8.4" + peerDependencies: + tree-sitter: ^0.22.4 + peerDependenciesMeta: + tree-sitter: + optional: true + checksum: 10c0/29191c5f7acd6d0ba9f2f6aa2a3b83b6c9f60d70286399be37ec3f2eed78152e3777632855dfcb9e988d934bae10817bb4c4ba38ad0786f2303fbb4806f7bcae + languageName: node + linkType: hard + +"@tsconfig/node10@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node10@npm:1.0.11" + checksum: 10c0/28a0710e5d039e0de484bdf85fee883bfd3f6a8980601f4d44066b0a6bcd821d31c4e231d1117731c4e24268bd4cf2a788a6787c12fc7f8d11014c07d582783c + languageName: node + linkType: hard + +"@tsconfig/node12@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node12@npm:1.0.11" + checksum: 10c0/dddca2b553e2bee1308a056705103fc8304e42bb2d2cbd797b84403a223b25c78f2c683ec3e24a095e82cd435387c877239bffcb15a590ba817cd3f6b9a99fd9 + languageName: node + linkType: hard + +"@tsconfig/node14@npm:^1.0.0": + version: 1.0.3 + resolution: "@tsconfig/node14@npm:1.0.3" + checksum: 10c0/67c1316d065fdaa32525bc9449ff82c197c4c19092b9663b23213c8cbbf8d88b6ed6a17898e0cbc2711950fbfaf40388938c1c748a2ee89f7234fc9e7fe2bf44 + languageName: node + linkType: hard + +"@tsconfig/node16@npm:^1.0.2": + version: 1.0.4 + resolution: "@tsconfig/node16@npm:1.0.4" + checksum: 10c0/05f8f2734e266fb1839eb1d57290df1664fe2aa3b0fdd685a9035806daa635f7519bf6d5d9b33f6e69dd545b8c46bd6e2b5c79acb2b1f146e885f7f11a42a5bb + languageName: node + linkType: hard + "@tybys/wasm-util@npm:^0.9.0": version: 0.9.0 resolution: "@tybys/wasm-util@npm:0.9.0" @@ -1638,6 +3045,15 @@ __metadata: languageName: node linkType: hard +"@types/es-aggregate-error@npm:^1.0.2": + version: 1.0.6 + resolution: "@types/es-aggregate-error@npm:1.0.6" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/2a86724ba34495b3a86329b86f71ac83695086be9407afc60d104af5ce2b9ae549f6d19aa48741357ab03c6fe605c1653fdd35ac743541fb0419f8d7188f4b4f + languageName: node + linkType: hard + "@types/estree@npm:^1.0.6": version: 1.0.8 resolution: "@types/estree@npm:1.0.8" @@ -1645,7 +3061,25 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:^7.0.15": +"@types/hast@npm:^2.0.0": + version: 2.3.10 + resolution: "@types/hast@npm:2.3.10" + dependencies: + "@types/unist": "npm:^2" + checksum: 10c0/16daac35d032e656defe1f103f9c09c341a6dc553c7ec17b388274076fa26e904a71ea5ea41fd368a6d5f1e9e53be275c80af7942b9c466d8511d261c9529c7e + languageName: node + linkType: hard + +"@types/hast@npm:^3.0.4": + version: 3.0.4 + resolution: "@types/hast@npm:3.0.4" + dependencies: + "@types/unist": "npm:*" + checksum: 10c0/3249781a511b38f1d330fd1e3344eed3c4e7ea8eff82e835d35da78e637480d36fad37a78be5a7aed8465d237ad0446abc1150859d0fde395354ea634decf9f7 + languageName: node + linkType: hard + +"@types/json-schema@npm:^7.0.11, @types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.7": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db @@ -1659,6 +3093,15 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:*": + version: 24.0.3 + resolution: "@types/node@npm:24.0.3" + dependencies: + undici-types: "npm:~7.8.0" + checksum: 10c0/9c3c4e87600d1cf11e291c2fd4bfd806a615455463c30a0ef6dc9c801b3423344d9b82b8084e3ccabce485a7421ebb61a66e9676181bd7d9aea4759998a120d5 + languageName: node + linkType: hard + "@types/node@npm:22.15.32": version: 22.15.32 resolution: "@types/node@npm:22.15.32" @@ -1668,6 +3111,15 @@ __metadata: languageName: node linkType: hard +"@types/ramda@npm:~0.30.0": + version: 0.30.2 + resolution: "@types/ramda@npm:0.30.2" + dependencies: + types-ramda: "npm:^0.30.1" + checksum: 10c0/dda95008860f594eb7b4fd9819adeb2dcd4d4e2baca6cb33f692f6f8ea76d04a7fd81f9a057c5c67555612769e5592cb15f91de6c9f8b619b8b1d806d19dc9ea + languageName: node + linkType: hard + "@types/react-dom@npm:19.1.6": version: 19.1.6 resolution: "@types/react-dom@npm:19.1.6" @@ -1677,7 +3129,7 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:19.1.8": +"@types/react@npm:*, @types/react@npm:19.1.8": version: 19.1.8 resolution: "@types/react@npm:19.1.8" dependencies: @@ -1686,105 +3138,156 @@ __metadata: languageName: node linkType: hard +"@types/swagger-ui-react@npm:5": + version: 5.18.0 + resolution: "@types/swagger-ui-react@npm:5.18.0" + dependencies: + "@types/react": "npm:*" + checksum: 10c0/948cdd763e7f247a5a620ccef109b2f3baa967e44ec0e02e11492543bcd39793b65dfa5399600d6e7233ffd21917cab403d63c6d614109b83e11017384b8a023 + languageName: node + linkType: hard + +"@types/trusted-types@npm:^2.0.7": + version: 2.0.7 + resolution: "@types/trusted-types@npm:2.0.7" + checksum: 10c0/4c4855f10de7c6c135e0d32ce462419d8abbbc33713b31d294596c0cc34ae1fa6112a2f9da729c8f7a20707782b0d69da3b1f8df6645b0366d08825ca1522e0c + languageName: node + linkType: hard + +"@types/unist@npm:*": + version: 3.0.3 + resolution: "@types/unist@npm:3.0.3" + checksum: 10c0/2b1e4adcab78388e088fcc3c0ae8700f76619dbcb4741d7d201f87e2cb346bfc29a89003cfea2d76c996e1061452e14fcd737e8b25aacf949c1f2d6b2bc3dd60 + languageName: node + linkType: hard + +"@types/unist@npm:^2": + version: 2.0.11 + resolution: "@types/unist@npm:2.0.11" + checksum: 10c0/24dcdf25a168f453bb70298145eb043cfdbb82472db0bc0b56d6d51cd2e484b9ed8271d4ac93000a80da568f2402e9339723db262d0869e2bf13bc58e081768d + languageName: node + linkType: hard + +"@types/urijs@npm:^1.19.19": + version: 1.19.25 + resolution: "@types/urijs@npm:1.19.25" + checksum: 10c0/462464294f0cd5f2271e1ab760a45abe252a946559444188a4ad0edba39b1a8bff41b140b79596a5e3c44a5d0d29f78c9ab97b5e82efb1e8617093a549c22bf6 + languageName: node + linkType: hard + +"@types/use-sync-external-store@npm:^0.0.6": + version: 0.0.6 + resolution: "@types/use-sync-external-store@npm:0.0.6" + checksum: 10c0/77c045a98f57488201f678b181cccd042279aff3da34540ad242f893acc52b358bd0a8207a321b8ac09adbcef36e3236944390e2df4fcedb556ce7bb2a88f2a8 + languageName: node + linkType: hard + +"@types/webpack-env@npm:1.18.8": + version: 1.18.8 + resolution: "@types/webpack-env@npm:1.18.8" + checksum: 10c0/527a5d1eb75c5243e4f3665d956c7c340f899955dd25d16c9fd9750406f32e95a3a17d207640295038e8235c0c2a2daf084f420e088e58b965d82fc74f6012d7 + languageName: node + linkType: hard + "@typescript-eslint/eslint-plugin@npm:^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": - version: 8.33.1 - resolution: "@typescript-eslint/eslint-plugin@npm:8.33.1" + version: 8.34.1 + resolution: "@typescript-eslint/eslint-plugin@npm:8.34.1" dependencies: "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:8.33.1" - "@typescript-eslint/type-utils": "npm:8.33.1" - "@typescript-eslint/utils": "npm:8.33.1" - "@typescript-eslint/visitor-keys": "npm:8.33.1" + "@typescript-eslint/scope-manager": "npm:8.34.1" + "@typescript-eslint/type-utils": "npm:8.34.1" + "@typescript-eslint/utils": "npm:8.34.1" + "@typescript-eslint/visitor-keys": "npm:8.34.1" graphemer: "npm:^1.4.0" ignore: "npm:^7.0.0" natural-compare: "npm:^1.4.0" ts-api-utils: "npm:^2.1.0" peerDependencies: - "@typescript-eslint/parser": ^8.33.1 + "@typescript-eslint/parser": ^8.34.1 eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/35544068f175ca25296b42d0905065b40653a92c62e55414be68f62ddab580d7d768ee3c1276195fd8b8dd49de738ab7b41b8685e6fe2cd341cfca7320569166 + checksum: 10c0/f1c9f25e4fe4b59622312dfa0ca1e80fa7945296ba5c04362a5fda084a17e23a6b98dac331f5a13bcb1ba34a2b598a3f5c41aa288f0c51fe60196e912954e56a languageName: node linkType: hard "@typescript-eslint/parser@npm:^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": - version: 8.33.1 - resolution: "@typescript-eslint/parser@npm:8.33.1" + version: 8.34.1 + resolution: "@typescript-eslint/parser@npm:8.34.1" dependencies: - "@typescript-eslint/scope-manager": "npm:8.33.1" - "@typescript-eslint/types": "npm:8.33.1" - "@typescript-eslint/typescript-estree": "npm:8.33.1" - "@typescript-eslint/visitor-keys": "npm:8.33.1" + "@typescript-eslint/scope-manager": "npm:8.34.1" + "@typescript-eslint/types": "npm:8.34.1" + "@typescript-eslint/typescript-estree": "npm:8.34.1" + "@typescript-eslint/visitor-keys": "npm:8.34.1" debug: "npm:^4.3.4" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/be1c1313c342d956f5adfbd56f79865894cc9cabf93992515a690559c3758538868270671b222f90e4cabc2dcab82256aeb3ccea7502de9cc69e47b9b17ed45f + checksum: 10c0/bf8070245d53ef6926ff6630bb72f245923f545304e2a61508fb944802a83fed8eab961d9010956d07999d51afdfbbec82aea9d6185295551a7c17c00d759183 languageName: node linkType: hard -"@typescript-eslint/project-service@npm:8.33.1": - version: 8.33.1 - resolution: "@typescript-eslint/project-service@npm:8.33.1" +"@typescript-eslint/project-service@npm:8.34.1": + version: 8.34.1 + resolution: "@typescript-eslint/project-service@npm:8.34.1" dependencies: - "@typescript-eslint/tsconfig-utils": "npm:^8.33.1" - "@typescript-eslint/types": "npm:^8.33.1" + "@typescript-eslint/tsconfig-utils": "npm:^8.34.1" + "@typescript-eslint/types": "npm:^8.34.1" debug: "npm:^4.3.4" peerDependencies: typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/b2ff7653aef4648bdff8aafc69b9de434184827216709f8a36427536ac7082a8adf1c5ac12a0a2bb023b46dfad8f6fee238028acc94af622956af7f22362de6f + checksum: 10c0/9333a890625f6777054db17a6b299281ae7502bb7615261d15b885a75b8cf65fc91591389c93b37ecd14b651d8e94851dac8718e5dcc8ed0600533535dae855c languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:8.33.1": - version: 8.33.1 - resolution: "@typescript-eslint/scope-manager@npm:8.33.1" +"@typescript-eslint/scope-manager@npm:8.34.1": + version: 8.34.1 + resolution: "@typescript-eslint/scope-manager@npm:8.34.1" dependencies: - "@typescript-eslint/types": "npm:8.33.1" - "@typescript-eslint/visitor-keys": "npm:8.33.1" - checksum: 10c0/03a6fd2b0a8ebeb62083a8f51658f0c42391cbfb632411542569a3a227d53bdb0332026ef4d5adc4780e5350d1d8b89e5b19667ed899afd26506e60c70192692 + "@typescript-eslint/types": "npm:8.34.1" + "@typescript-eslint/visitor-keys": "npm:8.34.1" + checksum: 10c0/2af608fa3900f4726322e33bf4f3a376fdace3ac0f310cf7d9256bbc2905c3896138176a47dd195d2c2229f27fe43f5deb4bc7729db2eb18389926dedea78077 languageName: node linkType: hard -"@typescript-eslint/tsconfig-utils@npm:8.33.1, @typescript-eslint/tsconfig-utils@npm:^8.33.1": - version: 8.33.1 - resolution: "@typescript-eslint/tsconfig-utils@npm:8.33.1" +"@typescript-eslint/tsconfig-utils@npm:8.34.1, @typescript-eslint/tsconfig-utils@npm:^8.34.1": + version: 8.34.1 + resolution: "@typescript-eslint/tsconfig-utils@npm:8.34.1" peerDependencies: typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/242e8f271d2e6e51446d337e1e59e8c91b66c0241da0fb861f536eb86cc3b53d1727c41e12e1ba070fa2451c8bc517c1ec50decaffa92a7c612b2aba29872777 + checksum: 10c0/8d1ead8b7c279b48e2ed96f083ec119a9aeea1ca9cdd40576ec271b996b9fd8cfa0ddb0aafbb4e14bc27fc62c69c5be66d39b1de68eab9ddd7f1861da267423d languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:8.33.1": - version: 8.33.1 - resolution: "@typescript-eslint/type-utils@npm:8.33.1" +"@typescript-eslint/type-utils@npm:8.34.1": + version: 8.34.1 + resolution: "@typescript-eslint/type-utils@npm:8.34.1" dependencies: - "@typescript-eslint/typescript-estree": "npm:8.33.1" - "@typescript-eslint/utils": "npm:8.33.1" + "@typescript-eslint/typescript-estree": "npm:8.34.1" + "@typescript-eslint/utils": "npm:8.34.1" debug: "npm:^4.3.4" ts-api-utils: "npm:^2.1.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/59843eeb7c652306d130104d7cb0f7dea1cc95a6cf6345609efbae130f24e3c4a9472780332af4247337e152b7955540b15fd9b907c04a5d265b888139818266 + checksum: 10c0/502a2cdfe47f1f34206c747b5a70e0242dd99f570511db3dda9c5f999d9abadfbbb1dfa82a1fa437a1689d232715412e61c97d95f19c9314ba5ad23196b4096d languageName: node linkType: hard -"@typescript-eslint/types@npm:8.33.1, @typescript-eslint/types@npm:^8.33.1": - version: 8.33.1 - resolution: "@typescript-eslint/types@npm:8.33.1" - checksum: 10c0/3083c184c882475eed1f9d1a8961dad30ef834c662bc826ff9a959ff1eed49aad21a73b2b93c4062799feafff5f5f24aebb1df17e198808aa19d4c8de1e64095 +"@typescript-eslint/types@npm:8.34.1, @typescript-eslint/types@npm:^8.34.1": + version: 8.34.1 + resolution: "@typescript-eslint/types@npm:8.34.1" + checksum: 10c0/db1b3dce6a70b28ddb13c76fbb5983240d9395656df5f7cbd99bfd9905e39c0dab2132870f01dbc406b48739c437f7d344a879a824cedaba81b91a53110dc23a languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:8.33.1": - version: 8.33.1 - resolution: "@typescript-eslint/typescript-estree@npm:8.33.1" +"@typescript-eslint/typescript-estree@npm:8.34.1": + version: 8.34.1 + resolution: "@typescript-eslint/typescript-estree@npm:8.34.1" dependencies: - "@typescript-eslint/project-service": "npm:8.33.1" - "@typescript-eslint/tsconfig-utils": "npm:8.33.1" - "@typescript-eslint/types": "npm:8.33.1" - "@typescript-eslint/visitor-keys": "npm:8.33.1" + "@typescript-eslint/project-service": "npm:8.34.1" + "@typescript-eslint/tsconfig-utils": "npm:8.34.1" + "@typescript-eslint/types": "npm:8.34.1" + "@typescript-eslint/visitor-keys": "npm:8.34.1" debug: "npm:^4.3.4" fast-glob: "npm:^3.3.2" is-glob: "npm:^4.0.3" @@ -1793,156 +3296,186 @@ __metadata: ts-api-utils: "npm:^2.1.0" peerDependencies: typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/293a93d25046e05fdc3887232191c3f3ee771c0f5b1426d63deaf0541db1cb80b4307a80805c78b092206c9b267884a7e6b5905dc1b3c26f28bb4de47fd9ee8f + checksum: 10c0/4ee7249db91b9840361f34f80b7b6d646a3af159c7298d79a33d8a11c98792fd3a395343e5e17e0fa29529e8f0113bac8baadcef90d1e140bd736a48f0485042 languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.33.1": - version: 8.33.1 - resolution: "@typescript-eslint/utils@npm:8.33.1" +"@typescript-eslint/utils@npm:8.34.1": + version: 8.34.1 + resolution: "@typescript-eslint/utils@npm:8.34.1" dependencies: "@eslint-community/eslint-utils": "npm:^4.7.0" - "@typescript-eslint/scope-manager": "npm:8.33.1" - "@typescript-eslint/types": "npm:8.33.1" - "@typescript-eslint/typescript-estree": "npm:8.33.1" + "@typescript-eslint/scope-manager": "npm:8.34.1" + "@typescript-eslint/types": "npm:8.34.1" + "@typescript-eslint/typescript-estree": "npm:8.34.1" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/12263df6eb32e8175236ad899687c062b50cfe4a0e66307d25ad2bf85a3e911faacbfbea4df180a59ebb5913fe1cc1f53fe3914695c7d802dd318bbc846fea26 + checksum: 10c0/e3085877f7940c02a37653e6bc52ac6cde115e755b1f788fe4331202f371b3421cc4d0878c7d3eb054e14e9b3a064496a707a73eac471cb2b73593b9e9d4b998 languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:8.33.1": - version: 8.33.1 - resolution: "@typescript-eslint/visitor-keys@npm:8.33.1" +"@typescript-eslint/visitor-keys@npm:8.34.1": + version: 8.34.1 + resolution: "@typescript-eslint/visitor-keys@npm:8.34.1" dependencies: - "@typescript-eslint/types": "npm:8.33.1" - eslint-visitor-keys: "npm:^4.2.0" - checksum: 10c0/3eb99072e7c2741d5dfc38945d1e7617b15ed10d06b24658a6e919e4153983b3d3c5f5f775ce140f83a84dbde219948d187de97defb09c1a91f3cf0a96704a94 + "@typescript-eslint/types": "npm:8.34.1" + eslint-visitor-keys: "npm:^4.2.1" + checksum: 10c0/0e5a9b3d93905d16d3cf8cb5fb346dcc6f760482eb7d0ac209aefc09a32f78ef28a687634df6ad08e81fb3e1083e8805f34472de6bbc501c0105ad654d518f40 languageName: node linkType: hard -"@unrs/resolver-binding-darwin-arm64@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-darwin-arm64@npm:1.7.11" +"@unrs/resolver-binding-android-arm-eabi@npm:1.9.1": + version: 1.9.1 + resolution: "@unrs/resolver-binding-android-arm-eabi@npm:1.9.1" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@unrs/resolver-binding-android-arm64@npm:1.9.1": + version: 1.9.1 + resolution: "@unrs/resolver-binding-android-arm64@npm:1.9.1" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@unrs/resolver-binding-darwin-arm64@npm:1.9.1": + version: 1.9.1 + resolution: "@unrs/resolver-binding-darwin-arm64@npm:1.9.1" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@unrs/resolver-binding-darwin-x64@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-darwin-x64@npm:1.7.11" +"@unrs/resolver-binding-darwin-x64@npm:1.9.1": + version: 1.9.1 + resolution: "@unrs/resolver-binding-darwin-x64@npm:1.9.1" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@unrs/resolver-binding-freebsd-x64@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-freebsd-x64@npm:1.7.11" +"@unrs/resolver-binding-freebsd-x64@npm:1.9.1": + version: 1.9.1 + resolution: "@unrs/resolver-binding-freebsd-x64@npm:1.9.1" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.7.11" +"@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.9.1": + version: 1.9.1 + resolution: "@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.9.1" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@unrs/resolver-binding-linux-arm-musleabihf@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-linux-arm-musleabihf@npm:1.7.11" +"@unrs/resolver-binding-linux-arm-musleabihf@npm:1.9.1": + version: 1.9.1 + resolution: "@unrs/resolver-binding-linux-arm-musleabihf@npm:1.9.1" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@unrs/resolver-binding-linux-arm64-gnu@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-linux-arm64-gnu@npm:1.7.11" +"@unrs/resolver-binding-linux-arm64-gnu@npm:1.9.1": + version: 1.9.1 + resolution: "@unrs/resolver-binding-linux-arm64-gnu@npm:1.9.1" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@unrs/resolver-binding-linux-arm64-musl@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-linux-arm64-musl@npm:1.7.11" +"@unrs/resolver-binding-linux-arm64-musl@npm:1.9.1": + version: 1.9.1 + resolution: "@unrs/resolver-binding-linux-arm64-musl@npm:1.9.1" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@unrs/resolver-binding-linux-ppc64-gnu@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-linux-ppc64-gnu@npm:1.7.11" +"@unrs/resolver-binding-linux-ppc64-gnu@npm:1.9.1": + version: 1.9.1 + resolution: "@unrs/resolver-binding-linux-ppc64-gnu@npm:1.9.1" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@unrs/resolver-binding-linux-riscv64-gnu@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-linux-riscv64-gnu@npm:1.7.11" +"@unrs/resolver-binding-linux-riscv64-gnu@npm:1.9.1": + version: 1.9.1 + resolution: "@unrs/resolver-binding-linux-riscv64-gnu@npm:1.9.1" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@unrs/resolver-binding-linux-riscv64-musl@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-linux-riscv64-musl@npm:1.7.11" +"@unrs/resolver-binding-linux-riscv64-musl@npm:1.9.1": + version: 1.9.1 + resolution: "@unrs/resolver-binding-linux-riscv64-musl@npm:1.9.1" conditions: os=linux & cpu=riscv64 & libc=musl languageName: node linkType: hard -"@unrs/resolver-binding-linux-s390x-gnu@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-linux-s390x-gnu@npm:1.7.11" +"@unrs/resolver-binding-linux-s390x-gnu@npm:1.9.1": + version: 1.9.1 + resolution: "@unrs/resolver-binding-linux-s390x-gnu@npm:1.9.1" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@unrs/resolver-binding-linux-x64-gnu@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-linux-x64-gnu@npm:1.7.11" +"@unrs/resolver-binding-linux-x64-gnu@npm:1.9.1": + version: 1.9.1 + resolution: "@unrs/resolver-binding-linux-x64-gnu@npm:1.9.1" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@unrs/resolver-binding-linux-x64-musl@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-linux-x64-musl@npm:1.7.11" +"@unrs/resolver-binding-linux-x64-musl@npm:1.9.1": + version: 1.9.1 + resolution: "@unrs/resolver-binding-linux-x64-musl@npm:1.9.1" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@unrs/resolver-binding-wasm32-wasi@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-wasm32-wasi@npm:1.7.11" +"@unrs/resolver-binding-wasm32-wasi@npm:1.9.1": + version: 1.9.1 + resolution: "@unrs/resolver-binding-wasm32-wasi@npm:1.9.1" dependencies: - "@napi-rs/wasm-runtime": "npm:^0.2.10" + "@napi-rs/wasm-runtime": "npm:^0.2.11" conditions: cpu=wasm32 languageName: node linkType: hard -"@unrs/resolver-binding-win32-arm64-msvc@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-win32-arm64-msvc@npm:1.7.11" +"@unrs/resolver-binding-win32-arm64-msvc@npm:1.9.1": + version: 1.9.1 + resolution: "@unrs/resolver-binding-win32-arm64-msvc@npm:1.9.1" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@unrs/resolver-binding-win32-ia32-msvc@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-win32-ia32-msvc@npm:1.7.11" +"@unrs/resolver-binding-win32-ia32-msvc@npm:1.9.1": + version: 1.9.1 + resolution: "@unrs/resolver-binding-win32-ia32-msvc@npm:1.9.1" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@unrs/resolver-binding-win32-x64-msvc@npm:1.7.11": - version: 1.7.11 - resolution: "@unrs/resolver-binding-win32-x64-msvc@npm:1.7.11" +"@unrs/resolver-binding-win32-x64-msvc@npm:1.9.1": + version: 1.9.1 + resolution: "@unrs/resolver-binding-win32-x64-msvc@npm:1.9.1" conditions: os=win32 & cpu=x64 languageName: node linkType: hard +"abbrev@npm:^3.0.0": + version: 3.0.1 + resolution: "abbrev@npm:3.0.1" + checksum: 10c0/21ba8f574ea57a3106d6d35623f2c4a9111d9ee3e9a5be47baed46ec2457d2eac46e07a5c4a60186f88cb98abbe3e24f2d4cca70bc2b12f1692523e2209a9ccf + languageName: node + linkType: hard + +"abort-controller@npm:^3.0.0": + version: 3.0.0 + resolution: "abort-controller@npm:3.0.0" + dependencies: + event-target-shim: "npm:^5.0.0" + checksum: 10c0/90ccc50f010250152509a344eb2e71977fbf8db0ab8f1061197e3275ddf6c61a41a6edfd7b9409c664513131dd96e962065415325ef23efa5db931b382d24ca5 + languageName: node + linkType: hard + "acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" @@ -1952,16 +3485,16 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.14.0": - version: 8.14.1 - resolution: "acorn@npm:8.14.1" - bin: - acorn: bin/acorn - checksum: 10c0/dbd36c1ed1d2fa3550140000371fcf721578095b18777b85a79df231ca093b08edc6858d75d6e48c73e431c174dcf9214edbd7e6fa5911b93bd8abfa54e47123 +"acorn-walk@npm:^8.1.1": + version: 8.3.4 + resolution: "acorn-walk@npm:8.3.4" + dependencies: + acorn: "npm:^8.11.0" + checksum: 10c0/76537ac5fb2c37a64560feaf3342023dadc086c46da57da363e64c6148dc21b57d49ace26f949e225063acb6fb441eabffd89f7a3066de5ad37ab3e328927c62 languageName: node linkType: hard -"acorn@npm:^8.15.0": +"acorn@npm:^8.11.0, acorn@npm:^8.14.1, acorn@npm:^8.15.0, acorn@npm:^8.4.1": version: 8.15.0 resolution: "acorn@npm:8.15.0" bin: @@ -1970,6 +3503,48 @@ __metadata: languageName: node linkType: hard +"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": + version: 7.1.3 + resolution: "agent-base@npm:7.1.3" + checksum: 10c0/6192b580c5b1d8fb399b9c62bf8343d76654c2dd62afcb9a52b2cf44a8b6ace1e3b704d3fe3547d91555c857d3df02603341ff2cb961b9cfe2b12f9f3c38ee11 + languageName: node + linkType: hard + +"ajv-draft-04@npm:^1.0.0, ajv-draft-04@npm:~1.0.0": + version: 1.0.0 + resolution: "ajv-draft-04@npm:1.0.0" + peerDependencies: + ajv: ^8.5.0 + peerDependenciesMeta: + ajv: + optional: true + checksum: 10c0/6044310bd38c17d77549fd326bd40ce1506fa10b0794540aa130180808bf94117fac8c9b448c621512bea60e4a947278f6a978e87f10d342950c15b33ddd9271 + languageName: node + linkType: hard + +"ajv-errors@npm:~3.0.0": + version: 3.0.0 + resolution: "ajv-errors@npm:3.0.0" + peerDependencies: + ajv: ^8.0.1 + checksum: 10c0/f3d864ebd4bc0b51ad622b5a889cc8903000295eaa058d59c2102f293fe126c3d901419da143eaa817b863cac2e92ae2ef6f55e6c31d07bf272099afe73961ae + languageName: node + linkType: hard + +"ajv-formats@npm:~2.1.1": + version: 2.1.1 + resolution: "ajv-formats@npm:2.1.1" + dependencies: + ajv: "npm:^8.0.0" + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + checksum: 10c0/e43ba22e91b6a48d96224b83d260d3a3a561b42d391f8d3c6d2c1559f9aa5b253bfb306bc94bbeca1d967c014e15a6efe9a207309e95b3eaae07fcbcdc2af662 + languageName: node + linkType: hard + "ajv@npm:^6.12.4": version: 6.12.6 resolution: "ajv@npm:6.12.6" @@ -1982,7 +3557,40 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^4.1.0": +"ajv@npm:^8.0.0, ajv@npm:^8.17.1": + version: 8.17.1 + resolution: "ajv@npm:8.17.1" + dependencies: + fast-deep-equal: "npm:^3.1.3" + fast-uri: "npm:^3.0.1" + json-schema-traverse: "npm:^1.0.0" + require-from-string: "npm:^2.0.2" + checksum: 10c0/ec3ba10a573c6b60f94639ffc53526275917a2df6810e4ab5a6b959d87459f9ef3f00d5e7865b82677cb7d21590355b34da14d1d0b9c32d75f95a187e76fff35 + languageName: node + linkType: hard + +"ansi-colors@npm:^4.1.1": + version: 4.1.3 + resolution: "ansi-colors@npm:4.1.3" + checksum: 10c0/ec87a2f59902f74e61eada7f6e6fe20094a628dab765cfdbd03c3477599368768cffccdb5d3bb19a1b6c99126783a143b1fee31aab729b31ffe5836c7e5e28b9 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.1.0 + resolution: "ansi-regex@npm:6.1.0" + checksum: 10c0/a91daeddd54746338478eef88af3439a7edf30f8e23196e2d6ed182da9add559c601266dbef01c2efa46a958ad6f1f8b176799657616c702b5b02e799e7fd8dc + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": version: 4.3.0 resolution: "ansi-styles@npm:4.3.0" dependencies: @@ -1991,6 +3599,36 @@ __metadata: languageName: node linkType: hard +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c + languageName: node + linkType: hard + +"apg-lite@npm:^1.0.3, apg-lite@npm:^1.0.4": + version: 1.0.5 + resolution: "apg-lite@npm:1.0.5" + checksum: 10c0/60060daf71743539df845382bdfa0bffe2268bd02f0285d4714a4ed8ce610b5810eb157b831cf2b3133d248e6de338c83c48ab9164a5f6069bb0e9c146531b53 + languageName: node + linkType: hard + +"arg@npm:^4.1.0": + version: 4.1.3 + resolution: "arg@npm:4.1.3" + checksum: 10c0/070ff801a9d236a6caa647507bdcc7034530604844d64408149a26b9e87c2f97650055c0f049abd1efc024b334635c01f29e0b632b371ac3f26130f4cf65997a + languageName: node + linkType: hard + +"argparse@npm:^1.0.10": + version: 1.0.10 + resolution: "argparse@npm:1.0.10" + dependencies: + sprintf-js: "npm:~1.0.2" + checksum: 10c0/b2972c5c23c63df66bca144dbc65d180efa74f25f8fd9b7d9a0a6c88ae839db32df3d54770dcb6460cf840d232b60695d1a6b1053f599d84e73f7437087712de + languageName: node + linkType: hard + "argparse@npm:^2.0.1": version: 2.0.1 resolution: "argparse@npm:2.0.1" @@ -2040,6 +3678,13 @@ __metadata: languageName: node linkType: hard +"array-union@npm:^2.1.0": + version: 2.1.0 + resolution: "array-union@npm:2.1.0" + checksum: 10c0/429897e68110374f39b771ec47a7161fc6a8fc33e196857c0a396dc75df0b5f65e4d046674db764330b6bb66b39ef48dd7c53b6a2ee75cfb0681e0c1a7033962 + languageName: node + linkType: hard + "array.prototype.findlast@npm:^1.2.5": version: 1.2.5 resolution: "array.prototype.findlast@npm:1.2.5" @@ -2128,6 +3773,15 @@ __metadata: languageName: node linkType: hard +"astring@npm:^1.8.1": + version: 1.9.0 + resolution: "astring@npm:1.9.0" + bin: + astring: bin/astring + checksum: 10c0/e7519544d9824494e80ef0e722bb3a0c543a31440d59691c13aeaceb75b14502af536b23f08db50aa6c632dafaade54caa25f0788aa7550b6b2d6e2df89e0830 + languageName: node + linkType: hard + "async-function@npm:^1.0.0": version: 1.0.0 resolution: "async-function@npm:1.0.0" @@ -2135,6 +3789,22 @@ __metadata: languageName: node linkType: hard +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d + languageName: node + linkType: hard + +"autolinker@npm:^3.11.0": + version: 3.16.2 + resolution: "autolinker@npm:3.16.2" + dependencies: + tslib: "npm:^2.3.0" + checksum: 10c0/91e083bfa4393fdcd29f595e1db657d852fd74cbd1fec719f30f3d57c910e72d5e0a0b10f2b17e1e6297b52b2f5c12eb6d0cbe024c0d92671e81d8ab906fe981 + languageName: node + linkType: hard + "available-typed-arrays@npm:^1.0.7": version: 1.0.7 resolution: "available-typed-arrays@npm:1.0.7" @@ -2151,6 +3821,17 @@ __metadata: languageName: node linkType: hard +"axios@npm:^1.9.0": + version: 1.10.0 + resolution: "axios@npm:1.10.0" + dependencies: + follow-redirects: "npm:^1.15.6" + form-data: "npm:^4.0.0" + proxy-from-env: "npm:^1.1.0" + checksum: 10c0/2239cb269cc789eac22f5d1aabd58e1a83f8f364c92c2caa97b6f5cbb4ab2903d2e557d9dc670b5813e9bcdebfb149e783fb8ab3e45098635cd2f559b06bd5d8 + languageName: node + linkType: hard + "axobject-query@npm:^4.1.0": version: 4.1.0 resolution: "axobject-query@npm:4.1.0" @@ -2165,6 +3846,13 @@ __metadata: languageName: node linkType: hard +"base64-js@npm:^1.5.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 10c0/f23823513b63173a001030fae4f2dabe283b99a9d324ade3ad3d148e218134676f1ee8568c877cd79ec1c53158dcf2d2ba527a97c606618928ba99dd930102bf + languageName: node + linkType: hard + "bcryptjs@npm:^3.0.2": version: 3.0.2 resolution: "bcryptjs@npm:3.0.2" @@ -2175,21 +3863,21 @@ __metadata: linkType: hard "brace-expansion@npm:^1.1.7": - version: 1.1.11 - resolution: "brace-expansion@npm:1.1.11" + version: 1.1.12 + resolution: "brace-expansion@npm:1.1.12" dependencies: balanced-match: "npm:^1.0.0" concat-map: "npm:0.0.1" - checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668 + checksum: 10c0/975fecac2bb7758c062c20d0b3b6288c7cc895219ee25f0a64a9de662dbac981ff0b6e89909c3897c1f84fa353113a721923afdec5f8b2350255b097f12b1f73 languageName: node linkType: hard "brace-expansion@npm:^2.0.1": - version: 2.0.1 - resolution: "brace-expansion@npm:2.0.1" + version: 2.0.2 + resolution: "brace-expansion@npm:2.0.2" dependencies: balanced-match: "npm:^1.0.0" - checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f + checksum: 10c0/6d117a4c793488af86b83172deb6af143e94c17bc53b0b3cec259733923b4ca84679d506ac261f4ba3c7ed37c46018e2ff442f9ce453af8643ecd64f4a54e6cf languageName: node linkType: hard @@ -2202,12 +3890,30 @@ __metadata: languageName: node linkType: hard -"busboy@npm:1.6.0": - version: 1.6.0 - resolution: "busboy@npm:1.6.0" +"cac@npm:^6.7.14": + version: 6.7.14 + resolution: "cac@npm:6.7.14" + checksum: 10c0/4ee06aaa7bab8981f0d54e5f5f9d4adcd64058e9697563ce336d8a3878ed018ee18ebe5359b2430eceae87e0758e62ea2019c3f52ae6e211b1bd2e133856cd10 + languageName: node + linkType: hard + +"cacache@npm:^19.0.1": + version: 19.0.1 + resolution: "cacache@npm:19.0.1" dependencies: - streamsearch: "npm:^1.1.0" - checksum: 10c0/fa7e836a2b82699b6e074393428b91ae579d4f9e21f5ac468e1b459a244341d722d2d22d10920cdd849743dbece6dca11d72de939fb75a7448825cf2babfba1f + "@npmcli/fs": "npm:^4.0.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^10.2.2" + lru-cache: "npm:^10.0.1" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^7.0.2" + ssri: "npm:^12.0.0" + tar: "npm:^7.4.3" + unique-filename: "npm:^4.0.0" + checksum: 10c0/01f2134e1bd7d3ab68be851df96c8d63b492b1853b67f2eecb2c37bb682d37cb70bb858a16f2f0554d3c0071be6dfe21456a1ff6fa4b7eed996570d6a25ffe9c languageName: node linkType: hard @@ -2243,6 +3949,13 @@ __metadata: languageName: node linkType: hard +"call-me-maybe@npm:^1.0.1, call-me-maybe@npm:^1.0.2": + version: 1.0.2 + resolution: "call-me-maybe@npm:1.0.2" + checksum: 10c0/8eff5dbb61141ebb236ed71b4e9549e488bcb5451c48c11e5667d5c75b0532303788a1101e6978cafa2d0c8c1a727805599c2741e3e0982855c9f1d78cd06c9f + languageName: node + linkType: hard + "callsites@npm:^3.0.0": version: 3.1.0 resolution: "callsites@npm:3.1.0" @@ -2251,13 +3964,13 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.30001579": - version: 1.0.30001721 - resolution: "caniuse-lite@npm:1.0.30001721" - checksum: 10c0/fa3a8926899824b385279f1f886fe34c5efb1321c9ece1b9df25c8d567a2706db8450cc5b4d969e769e641593e08ea644909324aba93636a43e4949a75f81c4c + version: 1.0.30001724 + resolution: "caniuse-lite@npm:1.0.30001724" + checksum: 10c0/ed9ec0bcf619f0e7ef2d33aac74d2346d1faf52060dfded1fb9c32d87854de5c2988b3ba338c281034c88bf797d6b55468a804ce8396a7e16a48cb0d481d4bfe languageName: node linkType: hard -"chalk@npm:^4.0.0": +"chalk@npm:^4.0.0, chalk@npm:^4.1.2": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: @@ -2267,6 +3980,36 @@ __metadata: languageName: node linkType: hard +"character-entities-legacy@npm:^1.0.0": + version: 1.1.4 + resolution: "character-entities-legacy@npm:1.1.4" + checksum: 10c0/ea4ca9c29887335eed86d78fc67a640168342b1274da84c097abb0575a253d1265281a5052f9a863979e952bcc267b4ecaaf4fe233a7e1e0d8a47806c65b96c7 + languageName: node + linkType: hard + +"character-entities@npm:^1.0.0": + version: 1.2.4 + resolution: "character-entities@npm:1.2.4" + checksum: 10c0/ad015c3d7163563b8a0ee1f587fb0ef305ef344e9fd937f79ca51cccc233786a01d591d989d5bf7b2e66b528ac9efba47f3b1897358324e69932f6d4b25adfe1 + languageName: node + linkType: hard + +"character-reference-invalid@npm:^1.0.0": + version: 1.1.4 + resolution: "character-reference-invalid@npm:1.1.4" + checksum: 10c0/29f05081c5817bd1e975b0bf61e77b60a40f62ad371d0f0ce0fdb48ab922278bc744d1fbe33771dced751887a8403f265ff634542675c8d7375f6ff4811efd0e + languageName: node + linkType: hard + +"chokidar@npm:^4.0.3": + version: 4.0.3 + resolution: "chokidar@npm:4.0.3" + dependencies: + readdirp: "npm:^4.0.1" + checksum: 10c0/a58b9df05bb452f7d105d9e7229ac82fa873741c0c40ddcc7bb82f8a909fbe3f7814c9ebe9bc9a2bef9b737c0ec6e2d699d179048ef06ad3ec46315df0ebe6ad + languageName: node + linkType: hard + "chownr@npm:^3.0.0": version: 3.0.0 resolution: "chownr@npm:3.0.0" @@ -2283,6 +4026,13 @@ __metadata: languageName: node linkType: hard +"classnames@npm:^2.5.1": + version: 2.5.1 + resolution: "classnames@npm:2.5.1" + checksum: 10c0/afff4f77e62cea2d79c39962980bf316bacb0d7c49e13a21adaadb9221e1c6b9d3cdb829d8bb1b23c406f4e740507f37e1dcf506f7e3b7113d17c5bab787aa69 + languageName: node + linkType: hard + "client-only@npm:0.0.1": version: 0.0.1 resolution: "client-only@npm:0.0.1" @@ -2290,6 +4040,17 @@ __metadata: languageName: node linkType: hard +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: "npm:^4.2.0" + strip-ansi: "npm:^6.0.1" + wrap-ansi: "npm:^7.0.0" + checksum: 10c0/4bda0f09c340cbb6dfdc1ed508b3ca080f12992c18d68c6be4d9cf51756033d5266e61ec57529e610dacbf4da1c634423b0c1b11037709cc6b09045cbd815df5 + languageName: node + linkType: hard + "clsx@npm:^2.1.1": version: 2.1.1 resolution: "clsx@npm:2.1.1" @@ -2333,6 +4094,29 @@ __metadata: languageName: node linkType: hard +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: "npm:~1.0.0" + checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 + languageName: node + linkType: hard + +"comma-separated-tokens@npm:^1.0.0": + version: 1.0.8 + resolution: "comma-separated-tokens@npm:1.0.8" + checksum: 10c0/c3bcfeaa6d50313528a006a40bcc0f9576086665c9b48d4b3a76ddd63e7d6174734386c98be1881cbf6ecfc25e1db61cd775a7b896d2ea7a65de28f83a0f9b17 + languageName: node + linkType: hard + +"compare-versions@npm:^6.1.1": + version: 6.1.1 + resolution: "compare-versions@npm:6.1.1" + checksum: 10c0/415205c7627f9e4f358f571266422980c9fe2d99086be0c9a48008ef7c771f32b0fbe8e97a441ffedc3910872f917a0675fe0fe3c3b6d331cda6d8690be06338 + languageName: node + linkType: hard + "concat-map@npm:0.0.1": version: 0.0.1 resolution: "concat-map@npm:0.0.1" @@ -2340,7 +4124,30 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.6": +"copy-to-clipboard@npm:^3.3.1": + version: 3.3.3 + resolution: "copy-to-clipboard@npm:3.3.3" + dependencies: + toggle-selection: "npm:^1.0.6" + checksum: 10c0/3ebf5e8ee00601f8c440b83ec08d838e8eabb068c1fae94a9cda6b42f288f7e1b552f3463635f419af44bf7675afc8d0390d30876cf5c2d5d35f86d9c56a3e5f + languageName: node + linkType: hard + +"core-js-pure@npm:^3.30.2": + version: 3.43.0 + resolution: "core-js-pure@npm:3.43.0" + checksum: 10c0/b888513800543af7aac13b8e33eb5153d5a8304f11fe0ec7a331878df830dcb428c723ebd5266ae52b047ffb4a86750b384aed24de731b23bc5ebdbcf05aeec5 + languageName: node + linkType: hard + +"create-require@npm:^1.1.0": + version: 1.1.1 + resolution: "create-require@npm:1.1.1" + checksum: 10c0/157cbc59b2430ae9a90034a5f3a1b398b6738bf510f713edc4d4e45e169bc514d3d99dd34d8d01ca7ae7830b5b8b537e46ae8f3c8f932371b0875c0151d7ec91 + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.3, cross-spawn@npm:^7.0.6": version: 7.0.6 resolution: "cross-spawn@npm:7.0.6" dependencies: @@ -2351,6 +4158,13 @@ __metadata: languageName: node linkType: hard +"css.escape@npm:1.5.1": + version: 1.5.1 + resolution: "css.escape@npm:1.5.1" + checksum: 10c0/5e09035e5bf6c2c422b40c6df2eb1529657a17df37fda5d0433d722609527ab98090baf25b13970ca754079a0f3161dd3dfc0e743563ded8cfa0749d861c1525 + languageName: node + linkType: hard + "csstype@npm:^3.0.2": version: 3.1.3 resolution: "csstype@npm:3.1.3" @@ -2398,16 +4212,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:^3.2.7": - version: 3.2.7 - resolution: "debug@npm:3.2.7" - dependencies: - ms: "npm:^2.1.1" - checksum: 10c0/37d96ae42cbc71c14844d2ae3ba55adf462ec89fd3a999459dec3833944cd999af6007ff29c780f1c61153bcaaf2c842d1e4ce1ec621e4fc4923244942e4a02a - languageName: node - linkType: hard - -"debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.4.0": +"debug@npm:4, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.4.0": version: 4.4.1 resolution: "debug@npm:4.4.1" dependencies: @@ -2419,6 +4224,22 @@ __metadata: languageName: node linkType: hard +"debug@npm:^3.2.7": + version: 3.2.7 + resolution: "debug@npm:3.2.7" + dependencies: + ms: "npm:^2.1.1" + checksum: 10c0/37d96ae42cbc71c14844d2ae3ba55adf462ec89fd3a999459dec3833944cd999af6007ff29c780f1c61153bcaaf2c842d1e4ce1ec621e4fc4923244942e4a02a + languageName: node + linkType: hard + +"deep-extend@npm:0.6.0": + version: 0.6.0 + resolution: "deep-extend@npm:0.6.0" + checksum: 10c0/1c6b0abcdb901e13a44c7d699116d3d4279fdb261983122a3783e7273844d5f2537dc2e1c454a23fcf645917f93fbf8d07101c1d03c015a87faa662755212566 + languageName: node + linkType: hard + "deep-is@npm:^0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" @@ -2426,6 +4247,13 @@ __metadata: languageName: node linkType: hard +"deepmerge@npm:~4.3.0": + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: 10c0/e53481aaf1aa2c4082b5342be6b6d8ad9dfe387bc92ce197a66dea08bd4265904a087e75e464f14d1347cf2ac8afe1e4c16b266e0561cc5df29382d3c5f80044 + languageName: node + linkType: hard + "define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": version: 1.1.4 resolution: "define-data-property@npm:1.1.4" @@ -2448,6 +4276,20 @@ __metadata: languageName: node linkType: hard +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 + languageName: node + linkType: hard + +"dependency-graph@npm:0.11.0, dependency-graph@npm:~0.11.0": + version: 0.11.0 + resolution: "dependency-graph@npm:0.11.0" + checksum: 10c0/9e6968d1534fdb502f7f3a25a3819b499f9d60f8389193950ed0b4d1618f1341b36b5d039f2cee256cfe10c9e8198ace16b271e370df06a93fac206e81602e7c + languageName: node + linkType: hard + "detect-libc@npm:^2.0.3, detect-libc@npm:^2.0.4": version: 2.0.4 resolution: "detect-libc@npm:2.0.4" @@ -2462,6 +4304,22 @@ __metadata: languageName: node linkType: hard +"diff@npm:^4.0.1": + version: 4.0.2 + resolution: "diff@npm:4.0.2" + checksum: 10c0/81b91f9d39c4eaca068eb0c1eb0e4afbdc5bb2941d197f513dd596b820b956fef43485876226d65d497bebc15666aa2aa82c679e84f65d5f2bfbf14ee46e32c1 + languageName: node + linkType: hard + +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: "npm:^4.0.0" + checksum: 10c0/dcac00920a4d503e38bb64001acb19df4efc14536ada475725e12f52c16777afdee4db827f55f13a908ee7efc0cb282e2e3dbaeeb98c0993dd93d1802d3bf00c + languageName: node + linkType: hard + "doctrine@npm:^2.1.0": version: 2.1.0 resolution: "doctrine@npm:2.1.0" @@ -2471,6 +4329,18 @@ __metadata: languageName: node linkType: hard +"dompurify@npm:=3.2.4": + version: 3.2.4 + resolution: "dompurify@npm:3.2.4" + dependencies: + "@types/trusted-types": "npm:^2.0.7" + dependenciesMeta: + "@types/trusted-types": + optional: true + checksum: 10c0/6be56810fb7ad2776155c8fc2967af5056783c030094362c7d0cf1ad13f2129cf922d8eefab528a34bdebfb98e2f44b306a983ab93aefb9d6f24c18a3d027a05 + languageName: node + linkType: hard + "dotenv-cli@npm:8.0.0": version: 8.0.0 resolution: "dotenv-cli@npm:8.0.0" @@ -2499,6 +4369,13 @@ __metadata: languageName: node linkType: hard +"drange@npm:^1.0.2": + version: 1.1.1 + resolution: "drange@npm:1.1.1" + checksum: 10c0/d63f364467be64d766d2dae10ee7e4f305fa50375f910c7525fb5983cab326ad0f1a4a3abdf2379e7d7949c0011a291114d5c6c238970a940a08a6ccba02f7b3 + languageName: node + linkType: hard + "dunder-proto@npm:^1.0.0, dunder-proto@npm:^1.0.1": version: 1.0.1 resolution: "dunder-proto@npm:1.0.1" @@ -2510,6 +4387,20 @@ __metadata: languageName: node linkType: hard +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 + languageName: node + linkType: hard + "emoji-regex@npm:^9.2.2": version: 9.2.2 resolution: "emoji-regex@npm:9.2.2" @@ -2517,6 +4408,15 @@ __metadata: languageName: node linkType: hard +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: "npm:^0.6.2" + checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 + languageName: node + linkType: hard + "enhanced-resolve@npm:^5.18.1": version: 5.18.1 resolution: "enhanced-resolve@npm:5.18.1" @@ -2527,6 +4427,37 @@ __metadata: languageName: node linkType: hard +"enquirer@npm:^2.4.1": + version: 2.4.1 + resolution: "enquirer@npm:2.4.1" + dependencies: + ansi-colors: "npm:^4.1.1" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/43850479d7a51d36a9c924b518dcdc6373b5a8ae3401097d336b7b7e258324749d0ad37a1fcaa5706f04799baa05585cd7af19ebdf7667673e7694435fcea918 + languageName: node + linkType: hard + +"entities@npm:^4.4.0": + version: 4.5.0 + resolution: "entities@npm:4.5.0" + checksum: 10c0/5b039739f7621f5d1ad996715e53d964035f75ad3b9a4d38c6b3804bb226e282ffeae2443624d8fdd9c47d8e926ae9ac009c54671243f0c3294c26af7cc85250 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 + languageName: node + linkType: hard + "es-abstract@npm:^1.17.5, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3, es-abstract@npm:^1.23.5, es-abstract@npm:^1.23.6, es-abstract@npm:^1.23.9, es-abstract@npm:^1.24.0": version: 1.24.0 resolution: "es-abstract@npm:1.24.0" @@ -2589,6 +4520,22 @@ __metadata: languageName: node linkType: hard +"es-aggregate-error@npm:^1.0.7": + version: 1.0.14 + resolution: "es-aggregate-error@npm:1.0.14" + dependencies: + define-data-property: "npm:^1.1.4" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.24.0" + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + globalthis: "npm:^1.0.4" + has-property-descriptors: "npm:^1.0.2" + set-function-name: "npm:^2.0.2" + checksum: 10c0/65922e6183c970a08e60eb1452c7695807fd761b0de90a93b6682446b07f2fa8272204f5c219295a26c99849fbff987c8c8112afe5f6efda1a0bc19d1e3a15ca + languageName: node + linkType: hard + "es-define-property@npm:^1.0.0, es-define-property@npm:^1.0.1": version: 1.0.1 resolution: "es-define-property@npm:1.0.1" @@ -2668,6 +4615,106 @@ __metadata: languageName: node linkType: hard +"es6-promise@npm:^3.2.1": + version: 3.3.1 + resolution: "es6-promise@npm:3.3.1" + checksum: 10c0/b4fc87cb8509c001f62f860f97b05d1fd3f87220c8b832578e6a483c719ca272b73a77f2231cb26395fa865e1cab2fd4298ab67786b69e97b8d757b938f4fc1f + languageName: node + linkType: hard + +"esbuild@npm:^0.25.1": + version: 0.25.5 + resolution: "esbuild@npm:0.25.5" + dependencies: + "@esbuild/aix-ppc64": "npm:0.25.5" + "@esbuild/android-arm": "npm:0.25.5" + "@esbuild/android-arm64": "npm:0.25.5" + "@esbuild/android-x64": "npm:0.25.5" + "@esbuild/darwin-arm64": "npm:0.25.5" + "@esbuild/darwin-x64": "npm:0.25.5" + "@esbuild/freebsd-arm64": "npm:0.25.5" + "@esbuild/freebsd-x64": "npm:0.25.5" + "@esbuild/linux-arm": "npm:0.25.5" + "@esbuild/linux-arm64": "npm:0.25.5" + "@esbuild/linux-ia32": "npm:0.25.5" + "@esbuild/linux-loong64": "npm:0.25.5" + "@esbuild/linux-mips64el": "npm:0.25.5" + "@esbuild/linux-ppc64": "npm:0.25.5" + "@esbuild/linux-riscv64": "npm:0.25.5" + "@esbuild/linux-s390x": "npm:0.25.5" + "@esbuild/linux-x64": "npm:0.25.5" + "@esbuild/netbsd-arm64": "npm:0.25.5" + "@esbuild/netbsd-x64": "npm:0.25.5" + "@esbuild/openbsd-arm64": "npm:0.25.5" + "@esbuild/openbsd-x64": "npm:0.25.5" + "@esbuild/sunos-x64": "npm:0.25.5" + "@esbuild/win32-arm64": "npm:0.25.5" + "@esbuild/win32-ia32": "npm:0.25.5" + "@esbuild/win32-x64": "npm:0.25.5" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-arm64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/aba8cbc11927fa77562722ed5e95541ce2853f67ad7bdc40382b558abc2e0ec57d92ffb820f082ba2047b4ef9f3bc3da068cdebe30dfd3850cfa3827a78d604e + languageName: node + linkType: hard + +"escalade@npm:^3.1.1": + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65 + languageName: node + linkType: hard + "escape-string-regexp@npm:^4.0.0": version: 4.0.0 resolution: "escape-string-regexp@npm:4.0.0" @@ -2746,14 +4793,14 @@ __metadata: linkType: hard "eslint-module-utils@npm:^2.12.0": - version: 2.12.0 - resolution: "eslint-module-utils@npm:2.12.0" + version: 2.12.1 + resolution: "eslint-module-utils@npm:2.12.1" dependencies: debug: "npm:^3.2.7" peerDependenciesMeta: eslint: optional: true - checksum: 10c0/4d8b46dcd525d71276f9be9ffac1d2be61c9d54cc53c992e6333cf957840dee09381842b1acbbb15fc6b255ebab99cd481c5007ab438e5455a14abe1a0468558 + checksum: 10c0/6f4efbe7a91ae49bf67b4ab3644cb60bc5bd7db4cb5521de1b65be0847ffd3fb6bce0dd68f0995e1b312d137f768e2a1f842ee26fe73621afa05f850628fdc40 languageName: node linkType: hard @@ -2865,13 +4912,6 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^4.2.0": - version: 4.2.0 - resolution: "eslint-visitor-keys@npm:4.2.0" - checksum: 10c0/2ed81c663b147ca6f578312919483eb040295bbab759e5a371953456c636c5b49a559883e2677112453728d66293c0a4c90ab11cab3428cf02a0236d2e738269 - languageName: node - linkType: hard - "eslint-visitor-keys@npm:^4.2.1": version: 4.2.1 resolution: "eslint-visitor-keys@npm:4.2.1" @@ -2929,18 +4969,7 @@ __metadata: languageName: node linkType: hard -"espree@npm:^10.0.1": - version: 10.3.0 - resolution: "espree@npm:10.3.0" - dependencies: - acorn: "npm:^8.14.0" - acorn-jsx: "npm:^5.3.2" - eslint-visitor-keys: "npm:^4.2.0" - checksum: 10c0/272beeaca70d0a1a047d61baff64db04664a33d7cfb5d144f84bc8a5c6194c6c8ebe9cc594093ca53add88baa23e59b01e69e8a0160ab32eac570482e165c462 - languageName: node - linkType: hard - -"espree@npm:^10.4.0": +"espree@npm:^10.0.1, espree@npm:^10.4.0": version: 10.4.0 resolution: "espree@npm:10.4.0" dependencies: @@ -2976,13 +5005,44 @@ __metadata: languageName: node linkType: hard -"esutils@npm:^2.0.2": +"esutils@npm:2.0.3, esutils@npm:^2.0.2": version: 2.0.3 resolution: "esutils@npm:2.0.3" checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 languageName: node linkType: hard +"event-target-shim@npm:^5.0.0": + version: 5.0.1 + resolution: "event-target-shim@npm:5.0.1" + checksum: 10c0/0255d9f936215fd206156fd4caa9e8d35e62075d720dc7d847e89b417e5e62cf1ce6c9b4e0a1633a9256de0efefaf9f8d26924b1f3c8620cffb9db78e7d3076b + languageName: node + linkType: hard + +"execa@npm:^5.1.1": + version: 5.1.1 + resolution: "execa@npm:5.1.1" + dependencies: + cross-spawn: "npm:^7.0.3" + get-stream: "npm:^6.0.0" + human-signals: "npm:^2.1.0" + is-stream: "npm:^2.0.0" + merge-stream: "npm:^2.0.0" + npm-run-path: "npm:^4.0.1" + onetime: "npm:^5.1.2" + signal-exit: "npm:^3.0.3" + strip-final-newline: "npm:^2.0.0" + checksum: 10c0/c8e615235e8de4c5addf2fa4c3da3e3aa59ce975a3e83533b4f6a71750fb816a2e79610dc5f1799b6e28976c9ae86747a36a606655bf8cb414a74d8d507b304f + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.2 + resolution: "exponential-backoff@npm:3.1.2" + checksum: 10c0/d9d3e1eafa21b78464297df91f1776f7fbaa3d5e3f7f0995648ca5b89c069d17055033817348d9f4a43d1c20b0eab84f75af6991751e839df53e4dfd6f22e844 + languageName: node + linkType: hard + "fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" @@ -3003,7 +5063,7 @@ __metadata: languageName: node linkType: hard -"fast-glob@npm:^3.3.2": +"fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.2": version: 3.3.3 resolution: "fast-glob@npm:3.3.3" dependencies: @@ -3016,6 +5076,13 @@ __metadata: languageName: node linkType: hard +"fast-json-patch@npm:^3.0.0-1": + version: 3.1.1 + resolution: "fast-json-patch@npm:3.1.1" + checksum: 10c0/8a0438b4818bb53153275fe5b38033610e8c9d9eb11869e6a7dc05eb92fa70f3caa57015e344eb3ae1e71c7a75ad4cc6bc2dc9e0ff281d6ed8ecd44505210ca8 + languageName: node + linkType: hard + "fast-json-stable-stringify@npm:^2.0.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" @@ -3030,6 +5097,27 @@ __metadata: languageName: node linkType: hard +"fast-memoize@npm:^2.5.2": + version: 2.5.2 + resolution: "fast-memoize@npm:2.5.2" + checksum: 10c0/6f658f182f6eaf25a8ecdaf49affee4cac20df4e61e7ef3f04145fb86e887e7a0bd9975740ce88a9015da99459d7386eaf1342ac15be820f72f4be1ecf934d95 + languageName: node + linkType: hard + +"fast-safe-stringify@npm:^2.0.7": + version: 2.1.1 + resolution: "fast-safe-stringify@npm:2.1.1" + checksum: 10c0/d90ec1c963394919828872f21edaa3ad6f1dddd288d2bd4e977027afff09f5db40f94e39536d4646f7e01761d704d72d51dce5af1b93717f3489ef808f5f4e4d + languageName: node + linkType: hard + +"fast-uri@npm:^3.0.1": + version: 3.0.6 + resolution: "fast-uri@npm:3.0.6" + checksum: 10c0/74a513c2af0584448aee71ce56005185f81239eab7a2343110e5bad50c39ad4fb19c5a6f99783ead1cac7ccaf3461a6034fda89fffa2b30b6d99b9f21c2f9d29 + languageName: node + linkType: hard + "fastq@npm:^1.6.0": version: 1.19.1 resolution: "fastq@npm:1.19.1" @@ -3039,15 +5127,24 @@ __metadata: languageName: node linkType: hard +"fault@npm:^1.0.0": + version: 1.0.4 + resolution: "fault@npm:1.0.4" + dependencies: + format: "npm:^0.2.0" + checksum: 10c0/c86c11500c1b676787296f31ade8473adcc6784f118f07c1a9429730b6288d0412f96e069ce010aa57e4f65a9cccb5abee8868bbe3c5f10de63b20482c9baebd + languageName: node + linkType: hard + "fdir@npm:^6.4.4": - version: 6.4.5 - resolution: "fdir@npm:6.4.5" + version: 6.4.6 + resolution: "fdir@npm:6.4.6" peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: picomatch: optional: true - checksum: 10c0/5d63330a1b97165e9b0fb20369fafc7cf826bc4b3e374efcb650bc77d7145ac01193b5da1a7591eab89ae6fd6b15cdd414085910b2a2b42296b1480c9f2677af + checksum: 10c0/45b559cff889934ebb8bc498351e5acba40750ada7e7d6bde197768d2fa67c149be8ae7f8ff34d03f4e1eb20f2764116e56440aaa2f6689e9a4aa7ef06acafe9 languageName: node linkType: hard @@ -3069,7 +5166,7 @@ __metadata: languageName: node linkType: hard -"find-up@npm:^5.0.0": +"find-up@npm:5.0.0, find-up@npm:^5.0.0": version: 5.0.0 resolution: "find-up@npm:5.0.0" dependencies: @@ -3096,6 +5193,16 @@ __metadata: languageName: node linkType: hard +"follow-redirects@npm:^1.15.6": + version: 1.15.9 + resolution: "follow-redirects@npm:1.15.9" + peerDependenciesMeta: + debug: + optional: true + checksum: 10c0/5829165bd112c3c0e82be6c15b1a58fa9dcfaede3b3c54697a82fe4a62dd5ae5e8222956b448d2f98e331525f05d00404aba7d696de9e761ef6e42fdc780244f + languageName: node + linkType: hard + "for-each@npm:^0.3.3, for-each@npm:^0.3.5": version: 0.3.5 resolution: "for-each@npm:0.3.5" @@ -3105,6 +5212,56 @@ __metadata: languageName: node linkType: hard +"foreground-child@npm:^3.1.0": + version: 3.3.1 + resolution: "foreground-child@npm:3.3.1" + dependencies: + cross-spawn: "npm:^7.0.6" + signal-exit: "npm:^4.0.1" + checksum: 10c0/8986e4af2430896e65bc2788d6679067294d6aee9545daefc84923a0a4b399ad9c7a3ea7bd8c0b2b80fdf4a92de4c69df3f628233ff3224260e9c1541a9e9ed3 + languageName: node + linkType: hard + +"form-data@npm:^4.0.0": + version: 4.0.3 + resolution: "form-data@npm:4.0.3" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.8" + es-set-tostringtag: "npm:^2.1.0" + hasown: "npm:^2.0.2" + mime-types: "npm:^2.1.12" + checksum: 10c0/f0cf45873d600110b5fadf5804478377694f73a1ed97aaa370a74c90cebd7fe6e845a081171668a5476477d0d55a73a4e03d6682968fa8661eac2a81d651fcdb + languageName: node + linkType: hard + +"format@npm:^0.2.0": + version: 0.2.2 + resolution: "format@npm:0.2.2" + checksum: 10c0/6032ba747541a43abf3e37b402b2f72ee08ebcb58bf84d816443dd228959837f1cddf1e8775b29fa27ff133f4bd146d041bfca5f9cf27f048edf3d493cf8fee6 + languageName: node + linkType: hard + +"fs-extra@npm:^11.3.0": + version: 11.3.0 + resolution: "fs-extra@npm:11.3.0" + dependencies: + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: 10c0/5f95e996186ff45463059feb115a22fb048bdaf7e487ecee8a8646c78ed8fdca63630e3077d4c16ce677051f5e60d3355a06f3cd61f3ca43f48cc58822a44d0a + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 + languageName: node + linkType: hard + "function-bind@npm:^1.1.2": version: 1.1.2 resolution: "function-bind@npm:1.1.2" @@ -3133,6 +5290,13 @@ __metadata: languageName: node linkType: hard +"get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: 10c0/c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde + languageName: node + linkType: hard + "get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.2.7, get-intrinsic@npm:^1.3.0": version: 1.3.0 resolution: "get-intrinsic@npm:1.3.0" @@ -3168,6 +5332,13 @@ __metadata: languageName: node linkType: hard +"get-stream@npm:^6.0.0": + version: 6.0.1 + resolution: "get-stream@npm:6.0.1" + checksum: 10c0/49825d57d3fd6964228e6200a58169464b8e8970489b3acdc24906c782fb7f01f9f56f8e6653c4a50713771d6658f7cfe051e5eb8c12e334138c9c918b296341 + languageName: node + linkType: hard + "get-symbol-description@npm:^1.1.0": version: 1.1.0 resolution: "get-symbol-description@npm:1.1.0" @@ -3206,6 +5377,22 @@ __metadata: languageName: node linkType: hard +"glob@npm:^10.2.2": + version: 10.4.5 + resolution: "glob@npm:10.4.5" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^3.1.2" + minimatch: "npm:^9.0.4" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^1.11.1" + bin: + glob: dist/esm/bin.mjs + checksum: 10c0/19a9759ea77b8e3ca0a43c2f07ecddc2ad46216b786bb8f993c445aee80d345925a21e5280c7b7c6c59e860a0154b84e4b2b60321fea92cd3c56b4a7489f160e + languageName: node + linkType: hard + "globals@npm:^14.0.0": version: 14.0.0 resolution: "globals@npm:14.0.0" @@ -3223,6 +5410,20 @@ __metadata: languageName: node linkType: hard +"globby@npm:11.1.0": + version: 11.1.0 + resolution: "globby@npm:11.1.0" + dependencies: + array-union: "npm:^2.1.0" + dir-glob: "npm:^3.0.1" + fast-glob: "npm:^3.2.9" + ignore: "npm:^5.2.0" + merge2: "npm:^1.4.1" + slash: "npm:^3.0.0" + checksum: 10c0/b39511b4afe4bd8a7aead3a27c4ade2b9968649abab0a6c28b1a90141b96ca68ca5db1302f7c7bd29eab66bf51e13916b8e0a3d0ac08f75e1e84a39b35691189 + languageName: node + linkType: hard + "gopd@npm:^1.0.1, gopd@npm:^1.2.0": version: 1.2.0 resolution: "gopd@npm:1.2.0" @@ -3230,7 +5431,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.2.4": +"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 @@ -3301,6 +5502,97 @@ __metadata: languageName: node linkType: hard +"hast-util-parse-selector@npm:^2.0.0": + version: 2.2.5 + resolution: "hast-util-parse-selector@npm:2.2.5" + checksum: 10c0/29b7ee77960ded6a99d30c287d922243071cc07b39f2006f203bd08ee54eb8f66bdaa86ef6527477c766e2382d520b60ee4e4087f189888c35d8bcc020173648 + languageName: node + linkType: hard + +"hastscript@npm:^6.0.0": + version: 6.0.0 + resolution: "hastscript@npm:6.0.0" + dependencies: + "@types/hast": "npm:^2.0.0" + comma-separated-tokens: "npm:^1.0.0" + hast-util-parse-selector: "npm:^2.0.0" + property-information: "npm:^5.0.0" + space-separated-tokens: "npm:^1.0.0" + checksum: 10c0/f76d9cf373cb075c8523c8ad52709f09f7e02b7c9d3152b8d35c65c265b9f1878bed6023f215a7d16523921036d40a7da292cb6f4399af9b5eccac2a5a5eb330 + languageName: node + linkType: hard + +"highlight.js@npm:^10.4.1, highlight.js@npm:~10.7.0": + version: 10.7.3 + resolution: "highlight.js@npm:10.7.3" + checksum: 10c0/073837eaf816922427a9005c56c42ad8786473dc042332dfe7901aa065e92bc3d94ebf704975257526482066abb2c8677cc0326559bb8621e046c21c5991c434 + languageName: node + linkType: hard + +"highlightjs-vue@npm:^1.0.0": + version: 1.0.0 + resolution: "highlightjs-vue@npm:1.0.0" + checksum: 10c0/9be378c70b864ca5eee87b07859222e31c946a8ad176227e54f7006a498223974ebe19fcce6e38ad5eb3c1ed0e16a580c4edefdf2cb882b6dfab1c3866cc047a + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.2.0 + resolution: "http-cache-semantics@npm:4.2.0" + checksum: 10c0/45b66a945cf13ec2d1f29432277201313babf4a01d9e52f44b31ca923434083afeca03f18417f599c9ab3d0e7b618ceb21257542338b57c54b710463b4a53e37 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: "npm:^7.1.0" + debug: "npm:^4.3.4" + checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 + languageName: node + linkType: hard + +"http2-client@npm:^1.2.5": + version: 1.3.5 + resolution: "http2-client@npm:1.3.5" + checksum: 10c0/4974f10f5c8b5b7b9e23771190471d02690e9a22c22e028d84715b7ecdcda05017fc9e565476558da3bdf0ba642d24186a94818d0b9afee706ccf9874034be73 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1": + version: 7.0.6 + resolution: "https-proxy-agent@npm:7.0.6" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:4" + checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac + languageName: node + linkType: hard + +"human-signals@npm:^2.1.0": + version: 2.1.0 + resolution: "human-signals@npm:2.1.0" + checksum: 10c0/695edb3edfcfe9c8b52a76926cd31b36978782062c0ed9b1192b36bebc75c4c87c82e178dfcb0ed0fc27ca59d434198aac0bd0be18f5781ded775604db22304a + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 + languageName: node + linkType: hard + +"ieee754@npm:^1.2.1": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 10c0/b0782ef5e0935b9f12883a2e2aa37baa75da6e66ce6515c168697b42160807d9330de9a32ec1ed73149aea02e0d822e572bca6f1e22bdcbd2149e13b050b17bb + languageName: node + linkType: hard + "ignore@npm:^5.2.0": version: 5.3.2 resolution: "ignore@npm:5.3.2" @@ -3315,6 +5607,20 @@ __metadata: languageName: node linkType: hard +"immer@npm:^9.0.6": + version: 9.0.21 + resolution: "immer@npm:9.0.21" + checksum: 10c0/03ea3ed5d4d72e8bd428df4a38ad7e483ea8308e9a113d3b42e0ea2cc0cc38340eb0a6aca69592abbbf047c685dbda04e3d34bf2ff438ab57339ed0a34cc0a05 + languageName: node + linkType: hard + +"immutable@npm:^3.x.x": + version: 3.8.2 + resolution: "immutable@npm:3.8.2" + checksum: 10c0/fb6a2999ad3bda9e51741721e42547076dd492635ee4df9241224055fe953ec843583a700088cc4915f23dc326e5084f4e17f1bbd7388c3e872ef5a242e0ac5e + languageName: node + linkType: hard + "import-fresh@npm:^3.2.1": version: 3.3.1 resolution: "import-fresh@npm:3.3.1" @@ -3332,6 +5638,13 @@ __metadata: languageName: node linkType: hard +"inherits@npm:^2.0.1": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 + languageName: node + linkType: hard + "internal-slot@npm:^1.1.0": version: 1.1.0 resolution: "internal-slot@npm:1.1.0" @@ -3343,6 +5656,42 @@ __metadata: languageName: node linkType: hard +"invariant@npm:^2.2.2": + version: 2.2.4 + resolution: "invariant@npm:2.2.4" + dependencies: + loose-envify: "npm:^1.0.0" + checksum: 10c0/5af133a917c0bcf65e84e7f23e779e7abc1cd49cb7fdc62d00d1de74b0d8c1b5ee74ac7766099fb3be1b05b26dfc67bab76a17030d2fe7ea2eef867434362dfc + languageName: node + linkType: hard + +"ip-address@npm:^9.0.5": + version: 9.0.5 + resolution: "ip-address@npm:9.0.5" + dependencies: + jsbn: "npm:1.1.0" + sprintf-js: "npm:^1.1.3" + checksum: 10c0/331cd07fafcb3b24100613e4b53e1a2b4feab11e671e655d46dc09ee233da5011284d09ca40c4ecbdfe1d0004f462958675c224a804259f2f78d2465a87824bc + languageName: node + linkType: hard + +"is-alphabetical@npm:^1.0.0": + version: 1.0.4 + resolution: "is-alphabetical@npm:1.0.4" + checksum: 10c0/1505b1de5a1fd74022c05fb21b0e683a8f5229366bac8dc4d34cf6935bcfd104d1125a5e6b083fb778847629f76e5bdac538de5367bdf2b927a1356164e23985 + languageName: node + linkType: hard + +"is-alphanumerical@npm:^1.0.0": + version: 1.0.4 + resolution: "is-alphanumerical@npm:1.0.4" + dependencies: + is-alphabetical: "npm:^1.0.0" + is-decimal: "npm:^1.0.0" + checksum: 10c0/d623abae7130a7015c6bf33d99151d4e7005572fd170b86568ff4de5ae86ac7096608b87dd4a1d4dbbd497e392b6396930ba76c9297a69455909cebb68005905 + languageName: node + linkType: hard + "is-array-buffer@npm:^3.0.4, is-array-buffer@npm:^3.0.5": version: 3.0.5 resolution: "is-array-buffer@npm:3.0.5" @@ -3439,6 +5788,13 @@ __metadata: languageName: node linkType: hard +"is-decimal@npm:^1.0.0": + version: 1.0.4 + resolution: "is-decimal@npm:1.0.4" + checksum: 10c0/a4ad53c4c5c4f5a12214e7053b10326711f6a71f0c63ba1314a77bd71df566b778e4ebd29f9fb6815f07a4dc50c3767fb19bd6fc9fa05e601410f1d64ffeac48 + languageName: node + linkType: hard + "is-extglob@npm:^2.1.1": version: 2.1.1 resolution: "is-extglob@npm:2.1.1" @@ -3455,6 +5811,13 @@ __metadata: languageName: node linkType: hard +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc + languageName: node + linkType: hard + "is-generator-function@npm:^1.0.10": version: 1.1.0 resolution: "is-generator-function@npm:1.1.0" @@ -3476,6 +5839,13 @@ __metadata: languageName: node linkType: hard +"is-hexadecimal@npm:^1.0.0": + version: 1.0.4 + resolution: "is-hexadecimal@npm:1.0.4" + checksum: 10c0/ec4c64e5624c0f240922324bc697e166554f09d3ddc7633fc526084502626445d0a871fbd8cae52a9844e83bd0bb414193cc5a66806d7b2867907003fc70c5ea + languageName: node + linkType: hard + "is-map@npm:^2.0.3": version: 2.0.3 resolution: "is-map@npm:2.0.3" @@ -3535,6 +5905,13 @@ __metadata: languageName: node linkType: hard +"is-stream@npm:^2.0.0": + version: 2.0.1 + resolution: "is-stream@npm:2.0.1" + checksum: 10c0/7c284241313fc6efc329b8d7f08e16c0efeb6baab1b4cd0ba579eb78e5af1aa5da11e68559896a2067cd6c526bd29241dda4eb1225e627d5aa1a89a76d4635a5 + languageName: node + linkType: hard + "is-string@npm:^1.1.1": version: 1.1.1 resolution: "is-string@npm:1.1.1" @@ -3605,6 +5982,13 @@ __metadata: languageName: node linkType: hard +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 + languageName: node + linkType: hard + "iterator.prototype@npm:^1.1.4": version: 1.1.5 resolution: "iterator.prototype@npm:1.1.5" @@ -3619,6 +6003,19 @@ __metadata: languageName: node linkType: hard +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 + languageName: node + linkType: hard + "jiti@npm:2.4.2, jiti@npm:^2.4.2": version: 2.4.2 resolution: "jiti@npm:2.4.2" @@ -3635,6 +6032,13 @@ __metadata: languageName: node linkType: hard +"js-file-download@npm:^0.4.12": + version: 0.4.12 + resolution: "js-file-download@npm:0.4.12" + checksum: 10c0/3caec1491fa744214409e0bcb1fb18d76e3d56715c477ee033cb7d8becb5cf777803409dc1995c913bf1a2270dac98d78f07d83bba319b8e800bc7bf2a7266a7 + languageName: node + linkType: hard + "js-tokens@npm:^3.0.0 || ^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" @@ -3642,7 +6046,7 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:^4.1.0": +"js-yaml@npm:=4.1.0, js-yaml@npm:^4.1.0": version: 4.1.0 resolution: "js-yaml@npm:4.1.0" dependencies: @@ -3653,6 +6057,20 @@ __metadata: languageName: node linkType: hard +"jsbn@npm:1.1.0": + version: 1.1.0 + resolution: "jsbn@npm:1.1.0" + checksum: 10c0/4f907fb78d7b712e11dea8c165fe0921f81a657d3443dde75359ed52eb2b5d33ce6773d97985a089f09a65edd80b11cb75c767b57ba47391fee4c969f7215c96 + languageName: node + linkType: hard + +"jsep@npm:^1.2.0, jsep@npm:^1.3.6, jsep@npm:^1.4.0": + version: 1.4.0 + resolution: "jsep@npm:1.4.0" + checksum: 10c0/fe60adf47e050e22eadced42514a51a15a3cf0e2d147896584486acd8ee670fc16641101b9aeb81f4aaba382043d29744b7aac41171e8106515b14f27e0c7116 + languageName: node + linkType: hard + "json-buffer@npm:3.0.1": version: 3.0.1 resolution: "json-buffer@npm:3.0.1" @@ -3667,6 +6085,13 @@ __metadata: languageName: node linkType: hard +"json-schema-traverse@npm:^1.0.0": + version: 1.0.0 + resolution: "json-schema-traverse@npm:1.0.0" + checksum: 10c0/71e30015d7f3d6dc1c316d6298047c8ef98a06d31ad064919976583eb61e1018a60a0067338f0f79cabc00d84af3fcc489bd48ce8a46ea165d9541ba17fb30c6 + languageName: node + linkType: hard + "json-stable-stringify-without-jsonify@npm:^1.0.1": version: 1.0.1 resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" @@ -3685,6 +6110,63 @@ __metadata: languageName: node linkType: hard +"json5@npm:^2.2.2": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 10c0/5a04eed94810fa55c5ea138b2f7a5c12b97c3750bc63d11e511dcecbfef758003861522a070c2272764ee0f4e3e323862f386945aeb5b85b87ee43f084ba586c + languageName: node + linkType: hard + +"jsonc-parser@npm:~2.2.1": + version: 2.2.1 + resolution: "jsonc-parser@npm:2.2.1" + checksum: 10c0/cfb4e9d0050355f6c30602ed2330e5a6d5bac9b1bc98426cf83f624d43e6306c069db0ab1532c49383337303188e9db2f28625d1b147d6927594071dc605e792 + languageName: node + linkType: hard + +"jsonfile@npm:^6.0.1": + version: 6.1.0 + resolution: "jsonfile@npm:6.1.0" + dependencies: + graceful-fs: "npm:^4.1.6" + universalify: "npm:^2.0.0" + dependenciesMeta: + graceful-fs: + optional: true + checksum: 10c0/4f95b5e8a5622b1e9e8f33c96b7ef3158122f595998114d1e7f03985649ea99cb3cd99ce1ed1831ae94c8c8543ab45ebd044207612f31a56fd08462140e46865 + languageName: node + linkType: hard + +"jsonpath-plus@npm:^10.3.0, jsonpath-plus@npm:^6.0.1 || ^10.1.0": + version: 10.3.0 + resolution: "jsonpath-plus@npm:10.3.0" + dependencies: + "@jsep-plugin/assignment": "npm:^1.3.0" + "@jsep-plugin/regex": "npm:^1.0.4" + jsep: "npm:^1.4.0" + bin: + jsonpath: bin/jsonpath-cli.js + jsonpath-plus: bin/jsonpath-cli.js + checksum: 10c0/f5ff53078ecab98e8afd1dcdb4488e528653fa5a03a32d671f52db1ae9c3236e6e072d75e1949a80929fd21b07603924a586f829b40ad35993fa0247fa4f7506 + languageName: node + linkType: hard + +"jsonpointer@npm:^5.0.0": + version: 5.0.1 + resolution: "jsonpointer@npm:5.0.1" + checksum: 10c0/89929e58b400fcb96928c0504fcf4fc3f919d81e9543ceb055df125538470ee25290bb4984251e172e6ef8fcc55761eb998c118da763a82051ad89d4cb073fe7 + languageName: node + linkType: hard + +"jsonschema@npm:^1.5.0": + version: 1.5.0 + resolution: "jsonschema@npm:1.5.0" + checksum: 10c0/c24ddb8d741f02efc0da3ad9b597a275f6b595062903d3edbfaa535c3f9c4c98613df68da5cb6635ed9aeab30d658986fea61d7662fc5b2b92840d5a1e21235e + languageName: node + linkType: hard + "jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.5": version: 3.3.5 resolution: "jsx-ast-utils@npm:3.3.5" @@ -3722,6 +6204,13 @@ __metadata: languageName: node linkType: hard +"leven@npm:3.1.0, leven@npm:^3.1.0": + version: 3.1.0 + resolution: "leven@npm:3.1.0" + checksum: 10c0/cd778ba3fbab0f4d0500b7e87d1f6e1f041507c56fdcd47e8256a3012c98aaee371d4c15e0a76e0386107af2d42e2b7466160a2d80688aaa03e66e49949f42df + languageName: node + linkType: hard + "levn@npm:^0.4.1": version: 0.4.1 resolution: "levn@npm:0.4.1" @@ -3842,6 +6331,15 @@ __metadata: languageName: node linkType: hard +"linkify-it@npm:^5.0.0": + version: 5.0.0 + resolution: "linkify-it@npm:5.0.0" + dependencies: + uc.micro: "npm:^2.0.0" + checksum: 10c0/ff4abbcdfa2003472fc3eb4b8e60905ec97718e11e33cca52059919a4c80cc0e0c2a14d23e23d8c00e5402bc5a885cdba8ca053a11483ab3cc8b3c7a52f88e2d + languageName: node + linkType: hard + "locate-path@npm:^6.0.0": version: 6.0.0 resolution: "locate-path@npm:6.0.0" @@ -3851,6 +6349,20 @@ __metadata: languageName: node linkType: hard +"lodash.debounce@npm:^4": + version: 4.0.8 + resolution: "lodash.debounce@npm:4.0.8" + checksum: 10c0/762998a63e095412b6099b8290903e0a8ddcb353ac6e2e0f2d7e7d03abd4275fe3c689d88960eb90b0dde4f177554d51a690f22a343932ecbc50a5d111849987 + languageName: node + linkType: hard + +"lodash.isempty@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.isempty@npm:4.4.0" + checksum: 10c0/6c7eaa0802398736809b9e8aed8b8ac1abca9be71788fd719ba9d7f5b4c23e8dc63b7f049df4131713dda30a2fdedc2f655268e9deb8cd5a985dfc934afca194 + languageName: node + linkType: hard + "lodash.merge@npm:^4.6.2": version: 4.6.2 resolution: "lodash.merge@npm:4.6.2" @@ -3858,7 +6370,63 @@ __metadata: languageName: node linkType: hard -"loose-envify@npm:^1.4.0": +"lodash.omitby@npm:^4.6.0": + version: 4.6.0 + resolution: "lodash.omitby@npm:4.6.0" + checksum: 10c0/4608b1d8c4063b63349a3462852465fbe74781d737fbb26a0a7f00b0e65f6ccbc13fa490a38f9380103d93fc398e3873983038efadfafc67ccafbb25d9bc7bf4 + languageName: node + linkType: hard + +"lodash.topath@npm:^4.5.2": + version: 4.5.2 + resolution: "lodash.topath@npm:4.5.2" + checksum: 10c0/f555a1459c11c807517be6c3a3e8030a9e92a291b2d6b598511e0bddbe99297e870b20e097019b613a3035d061bac63cb42621386c0b9dc22fd3d85e58459653 + languageName: node + linkType: hard + +"lodash.uniq@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.uniq@npm:4.5.0" + checksum: 10c0/262d400bb0952f112162a320cc4a75dea4f66078b9e7e3075ffbc9c6aa30b3e9df3cf20e7da7d566105e1ccf7804e4fbd7d804eee0b53de05d83f16ffbf41c5e + languageName: node + linkType: hard + +"lodash.uniqby@npm:^4.7.0": + version: 4.7.0 + resolution: "lodash.uniqby@npm:4.7.0" + checksum: 10c0/c505c0de20ca759599a2ba38710e8fb95ff2d2028e24d86c901ef2c74be8056518571b9b754bfb75053b2818d30dd02243e4a4621a6940c206bbb3f7626db656 + languageName: node + linkType: hard + +"lodash.uniqwith@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.uniqwith@npm:4.5.0" + checksum: 10c0/3db1748302f5903cd2e4c361eb084bcfc48fe4062e37be4860363a0be643bf6617c1f115d61189b69623056a55acbcd451a52b3042b4864d5acc86a3b0ac83df + languageName: node + linkType: hard + +"lodash@npm:^4.15.0, lodash@npm:^4.17.21, lodash@npm:~4.17.21": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c + languageName: node + linkType: hard + +"loglevel-plugin-prefix@npm:0.8.4": + version: 0.8.4 + resolution: "loglevel-plugin-prefix@npm:0.8.4" + checksum: 10c0/357524eec4c165ff823b5bbf72e8373ff529e5cb95c1f4b20749847bd5b5b16ab328d6d33d1a9019f1a2dc52e28fca5d595e52f2ee20e24986182a6f9552a9ec + languageName: node + linkType: hard + +"loglevel@npm:^1.9.2": + version: 1.9.2 + resolution: "loglevel@npm:1.9.2" + checksum: 10c0/1e317fa4648fe0b4a4cffef6de037340592cee8547b07d4ce97a487abe9153e704b98451100c799b032c72bb89c9366d71c9fb8192ada8703269263ae77acdc7 + languageName: node + linkType: hard + +"loose-envify@npm:^1.0.0, loose-envify@npm:^1.4.0": version: 1.4.0 resolution: "loose-envify@npm:1.4.0" dependencies: @@ -3869,6 +6437,23 @@ __metadata: languageName: node linkType: hard +"lowlight@npm:^1.17.0": + version: 1.20.0 + resolution: "lowlight@npm:1.20.0" + dependencies: + fault: "npm:^1.0.0" + highlight.js: "npm:~10.7.0" + checksum: 10c0/728bce6f6fe8b157f48d3324e597f452ce0eed2ccff1c0f41a9047380f944e971eb45bceb31f08fbb64d8f338dabb166f10049b35b92c7ec5cf0241d6adb3dea + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb + languageName: node + linkType: hard + "lucide-react@npm:^0.511.0": version: 0.511.0 resolution: "lucide-react@npm:0.511.0" @@ -3878,6 +6463,13 @@ __metadata: languageName: node linkType: hard +"lunr@npm:^2.3.9": + version: 2.3.9 + resolution: "lunr@npm:2.3.9" + checksum: 10c0/77d7dbb4fbd602aac161e2b50887d8eda28c0fa3b799159cee380fbb311f1e614219126ecbbd2c3a9c685f1720a8109b3c1ca85cc893c39b6c9cc6a62a1d8a8b + languageName: node + linkType: hard + "magic-string@npm:^0.30.17": version: 0.30.17 resolution: "magic-string@npm:0.30.17" @@ -3887,6 +6479,48 @@ __metadata: languageName: node linkType: hard +"make-error@npm:^1.1.1": + version: 1.3.6 + resolution: "make-error@npm:1.3.6" + checksum: 10c0/171e458d86854c6b3fc46610cfacf0b45149ba043782558c6875d9f42f222124384ad0b468c92e996d815a8a2003817a710c0a160e49c1c394626f76fa45396f + languageName: node + linkType: hard + +"make-fetch-happen@npm:^14.0.3": + version: 14.0.3 + resolution: "make-fetch-happen@npm:14.0.3" + dependencies: + "@npmcli/agent": "npm:^3.0.0" + cacache: "npm:^19.0.1" + http-cache-semantics: "npm:^4.1.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^4.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^1.0.0" + proc-log: "npm:^5.0.0" + promise-retry: "npm:^2.0.1" + ssri: "npm:^12.0.0" + checksum: 10c0/c40efb5e5296e7feb8e37155bde8eb70bc57d731b1f7d90e35a092fde403d7697c56fb49334d92d330d6f1ca29a98142036d6480a12681133a0a1453164cb2f0 + languageName: node + linkType: hard + +"markdown-it@npm:^14.1.0": + version: 14.1.0 + resolution: "markdown-it@npm:14.1.0" + dependencies: + argparse: "npm:^2.0.1" + entities: "npm:^4.4.0" + linkify-it: "npm:^5.0.0" + mdurl: "npm:^2.0.0" + punycode.js: "npm:^2.3.1" + uc.micro: "npm:^2.1.0" + bin: + markdown-it: bin/markdown-it.mjs + checksum: 10c0/9a6bb444181d2db7016a4173ae56a95a62c84d4cbfb6916a399b11d3e6581bf1cc2e4e1d07a2f022ae72c25f56db90fbe1e529fca16fbf9541659dc53480d4b4 + languageName: node + linkType: hard + "math-intrinsics@npm:^1.1.0": version: 1.1.0 resolution: "math-intrinsics@npm:1.1.0" @@ -3894,10 +6528,18 @@ __metadata: languageName: node linkType: hard +"mdurl@npm:^2.0.0": + version: 2.0.0 + resolution: "mdurl@npm:2.0.0" + checksum: 10c0/633db522272f75ce4788440669137c77540d74a83e9015666a9557a152c02e245b192edc20bc90ae953bbab727503994a53b236b4d9c99bdaee594d0e7dd2ce0 + languageName: node + linkType: hard + "meetup@workspace:.": version: 0.0.0-use.local resolution: "meetup@workspace:." dependencies: + "@asteasolutions/zod-to-openapi": "npm:^8.0.0-beta.4" "@auth/prisma-adapter": "npm:^2.9.1" "@eslint/eslintrc": "npm:3.3.1" "@fortawesome/fontawesome-svg-core": "npm:^6.7.2" @@ -3917,9 +6559,12 @@ __metadata: "@radix-ui/react-switch": "npm:^1.2.4" "@radix-ui/react-tabs": "npm:^1.1.11" "@tailwindcss/postcss": "npm:4.1.10" + "@tanstack/react-query": "npm:^5.80.7" "@types/node": "npm:22.15.32" "@types/react": "npm:19.1.8" "@types/react-dom": "npm:19.1.6" + "@types/swagger-ui-react": "npm:5" + "@types/webpack-env": "npm:1.18.8" bcryptjs: "npm:^3.0.2" class-variance-authority: "npm:^0.7.1" clsx: "npm:^2.1.1" @@ -3928,24 +6573,35 @@ __metadata: eslint-config-next: "npm:15.3.4" eslint-config-prettier: "npm:10.1.5" lucide-react: "npm:^0.511.0" - next: "npm:15.3.4" + next: "npm:15.4.0-canary.85" next-auth: "npm:^5.0.0-beta.25" next-themes: "npm:^0.4.6" + orval: "npm:7.10.0" postcss: "npm:8.5.6" prettier: "npm:3.5.3" prisma: "npm:6.9.0" react: "npm:^19.0.0" react-dom: "npm:^19.0.0" react-hook-form: "npm:^7.56.4" + swagger-ui-react: "npm:^5.24.1" tailwind-merge: "npm:^3.2.0" tailwindcss: "npm:4.1.10" + ts-node: "npm:10.9.2" + tsconfig-paths: "npm:4.2.0" tw-animate-css: "npm:1.3.4" typescript: "npm:5.8.3" zod: "npm:^3.25.60" languageName: unknown linkType: soft -"merge2@npm:^1.3.0": +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 10c0/867fdbb30a6d58b011449b8885601ec1690c3e41c759ecd5a9d609094f7aed0096c37823ff4a7190ef0b8f22cc86beb7049196ff68c016e3b3c671d0dac91ce5 + languageName: node + linkType: hard + +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": version: 1.4.1 resolution: "merge2@npm:1.4.1" checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb @@ -3962,7 +6618,39 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^3.1.2": +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: "npm:1.52.0" + checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 + languageName: node + linkType: hard + +"mimic-fn@npm:^2.1.0": + version: 2.1.0 + resolution: "mimic-fn@npm:2.1.0" + checksum: 10c0/b26f5479d7ec6cc2bce275a08f146cf78f5e7b661b18114e2506dd91ec7ec47e7a25bf4360e5438094db0560bcc868079fb3b1fb3892b833c1ecbf63f80c95a4 + languageName: node + linkType: hard + +"minim@npm:~0.23.8": + version: 0.23.8 + resolution: "minim@npm:0.23.8" + dependencies: + lodash: "npm:^4.15.0" + checksum: 10c0/51563ef7481a262ae9bda18ae927b339977f77f1a11adfba0d7bef0096dbd9303ca9d6cb5d7ffea68c16b47fc124358670bc0bee136289f61d6ae3632256577f + languageName: node + linkType: hard + +"minimatch@npm:3.1.2, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: @@ -3971,7 +6659,25 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^9.0.4": +"minimatch@npm:^6.2.0": + version: 6.2.0 + resolution: "minimatch@npm:6.2.0" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/0884fcf2dd6d3cb5b76e21c33e1797f32c6d4bdd3cefe693ea4f8bb829734b2ca0eee94f0a4f622e9f9fa305f838d2b4f5251df38fcbf98bf1a03a0d07d4ce2d + languageName: node + linkType: hard + +"minimatch@npm:^7.4.3": + version: 7.4.6 + resolution: "minimatch@npm:7.4.6" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/e587bf3d90542555a3d58aca94c549b72d58b0a66545dd00eef808d0d66e5d9a163d3084da7f874e83ca8cc47e91c670e6c6f6593a3e7bb27fcc0e6512e87c67 + languageName: node + linkType: hard + +"minimatch@npm:^9.0.4, minimatch@npm:^9.0.5": version: 9.0.5 resolution: "minimatch@npm:9.0.5" dependencies: @@ -3987,7 +6693,67 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^7.0.4, minipass@npm:^7.1.2": +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e + languageName: node + linkType: hard + +"minipass-fetch@npm:^4.0.0": + version: 4.0.1 + resolution: "minipass-fetch@npm:4.0.1" + dependencies: + encoding: "npm:^0.1.13" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^1.0.3" + minizlib: "npm:^3.0.1" + dependenciesMeta: + encoding: + optional: true + checksum: 10c0/a3147b2efe8e078c9bf9d024a0059339c5a09c5b1dded6900a219c218cc8b1b78510b62dae556b507304af226b18c3f1aeb1d48660283602d5b6586c399eed5c + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": version: 7.1.2 resolution: "minipass@npm:7.1.2" checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 @@ -4044,6 +6810,20 @@ __metadata: languageName: node linkType: hard +"negotiator@npm:^1.0.0": + version: 1.0.0 + resolution: "negotiator@npm:1.0.0" + checksum: 10c0/4c559dd52669ea48e1914f9d634227c561221dd54734070791f999c52ed0ff36e437b2e07d5c1f6e32909fc625fe46491c16e4a8f0572567d4dd15c3a4fda04b + languageName: node + linkType: hard + +"neotraverse@npm:=0.6.18": + version: 0.6.18 + resolution: "neotraverse@npm:0.6.18" + checksum: 10c0/46f4c53cbbdc53671150916b544a9f46e27781f8003985237507542190173bec131168d89b846535f9c34c0a2a7debb1ab3a4f7a93d08218e2c194a363708ffa + languageName: node + linkType: hard + "next-auth@npm:^5.0.0-beta.25": version: 5.0.0-beta.28 resolution: "next-auth@npm:5.0.0-beta.28" @@ -4076,29 +6856,27 @@ __metadata: languageName: node linkType: hard -"next@npm:15.3.4": - version: 15.3.4 - resolution: "next@npm:15.3.4" +"next@npm:15.4.0-canary.85": + version: 15.4.0-canary.85 + resolution: "next@npm:15.4.0-canary.85" dependencies: - "@next/env": "npm:15.3.4" - "@next/swc-darwin-arm64": "npm:15.3.4" - "@next/swc-darwin-x64": "npm:15.3.4" - "@next/swc-linux-arm64-gnu": "npm:15.3.4" - "@next/swc-linux-arm64-musl": "npm:15.3.4" - "@next/swc-linux-x64-gnu": "npm:15.3.4" - "@next/swc-linux-x64-musl": "npm:15.3.4" - "@next/swc-win32-arm64-msvc": "npm:15.3.4" - "@next/swc-win32-x64-msvc": "npm:15.3.4" - "@swc/counter": "npm:0.1.3" + "@next/env": "npm:15.4.0-canary.85" + "@next/swc-darwin-arm64": "npm:15.4.0-canary.85" + "@next/swc-darwin-x64": "npm:15.4.0-canary.85" + "@next/swc-linux-arm64-gnu": "npm:15.4.0-canary.85" + "@next/swc-linux-arm64-musl": "npm:15.4.0-canary.85" + "@next/swc-linux-x64-gnu": "npm:15.4.0-canary.85" + "@next/swc-linux-x64-musl": "npm:15.4.0-canary.85" + "@next/swc-win32-arm64-msvc": "npm:15.4.0-canary.85" + "@next/swc-win32-x64-msvc": "npm:15.4.0-canary.85" "@swc/helpers": "npm:0.5.15" - busboy: "npm:1.6.0" caniuse-lite: "npm:^1.0.30001579" postcss: "npm:8.4.31" sharp: "npm:^0.34.1" styled-jsx: "npm:5.1.6" peerDependencies: "@opentelemetry/api": ^1.1.0 - "@playwright/test": ^1.41.2 + "@playwright/test": ^1.51.1 babel-plugin-react-compiler: "*" react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 @@ -4133,14 +6911,207 @@ __metadata: optional: true bin: next: dist/bin/next - checksum: 10c0/52d3fba6f53d5d2a339cbde433ab360301e9a0a0d9b95a656bf29ce1af43f02e9cc32571d5d4095bcb8ab7a795207d6e75c64b33fc1f90d21f2f9b157cc9a503 + checksum: 10c0/756f84e1412b690b7c4687f3da4984ed3134c571a5d1568dcf7e764e4328ed7789f1898b43490682021a3b27f38975804bc9770495ae495925aeb50cd706dfdb + languageName: node + linkType: hard + +"nimma@npm:0.2.3": + version: 0.2.3 + resolution: "nimma@npm:0.2.3" + dependencies: + "@jsep-plugin/regex": "npm:^1.0.1" + "@jsep-plugin/ternary": "npm:^1.0.2" + astring: "npm:^1.8.1" + jsep: "npm:^1.2.0" + jsonpath-plus: "npm:^6.0.1 || ^10.1.0" + lodash.topath: "npm:^4.5.2" + dependenciesMeta: + jsonpath-plus: + optional: true + lodash.topath: + optional: true + checksum: 10c0/7e31b03e84b1c9ce0aeacce5a026629e3bc8ed7be1989ec098de416d071227506b290069e88bb54e2005642c6a6012696f5c427b52a0a9bbe1a9d193f4a9efb5 + languageName: node + linkType: hard + +"node-abort-controller@npm:^3.1.1": + version: 3.1.1 + resolution: "node-abort-controller@npm:3.1.1" + checksum: 10c0/f7ad0e7a8e33809d4f3a0d1d65036a711c39e9d23e0319d80ebe076b9a3b4432b4d6b86a7fab65521de3f6872ffed36fc35d1327487c48eb88c517803403eda3 + languageName: node + linkType: hard + +"node-addon-api@npm:^8.0.0, node-addon-api@npm:^8.2.2, node-addon-api@npm:^8.3.0, node-addon-api@npm:^8.3.1": + version: 8.4.0 + resolution: "node-addon-api@npm:8.4.0" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/d51be099e1b9a6ac4a72f1a60787004d44c8ffe4be1efa38755d54b2a9f4f66647cc6913070e0ed20256d0e6eacceabfff90175fba2ef71153c2d06f8db8e7a9 + languageName: node + linkType: hard + +"node-domexception@npm:^1.0.0": + version: 1.0.0 + resolution: "node-domexception@npm:1.0.0" + checksum: 10c0/5e5d63cda29856402df9472335af4bb13875e1927ad3be861dc5ebde38917aecbf9ae337923777af52a48c426b70148815e890a5d72760f1b4d758cc671b1a2b + languageName: node + linkType: hard + +"node-fetch-commonjs@npm:^3.3.2": + version: 3.3.2 + resolution: "node-fetch-commonjs@npm:3.3.2" + dependencies: + node-domexception: "npm:^1.0.0" + web-streams-polyfill: "npm:^3.0.3" + checksum: 10c0/87d36ed3e6dcb9dea96783700bc0becf0fdbcdc26c975e16b01a0d3a6e2f420c7e589e765bbfad461ae5377d4c5bd5f6937969a9dd34a0d736a81ac898f5c26a + languageName: node + linkType: hard + +"node-fetch-h2@npm:^2.3.0": + version: 2.3.0 + resolution: "node-fetch-h2@npm:2.3.0" + dependencies: + http2-client: "npm:^1.2.5" + checksum: 10c0/10f117c5aa1d475fff05028dddd617a61606083e4d6c4195dd5f5b03c973182e0d125e804771e6888d04f7d92b5c9c27a6149d1beedd6af1e0744f163e8a02d9 + languageName: node + linkType: hard + +"node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.7.0": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: "npm:^5.0.0" + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 10c0/b55786b6028208e6fbe594ccccc213cab67a72899c9234eb59dba51062a299ea853210fcf526998eaa2867b0963ad72338824450905679ff0fa304b8c5093ae8 + languageName: node + linkType: hard + +"node-gyp-build@npm:^4.8.0, node-gyp-build@npm:^4.8.2, node-gyp-build@npm:^4.8.4": + version: 4.8.4 + resolution: "node-gyp-build@npm:4.8.4" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: 10c0/444e189907ece2081fe60e75368784f7782cfddb554b60123743dfb89509df89f1f29c03bbfa16b3a3e0be3f48799a4783f487da6203245fa5bed239ba7407e1 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 11.2.0 + resolution: "node-gyp@npm:11.2.0" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^14.0.3" + nopt: "npm:^8.0.0" + proc-log: "npm:^5.0.0" + semver: "npm:^7.3.5" + tar: "npm:^7.4.3" + tinyglobby: "npm:^0.2.12" + which: "npm:^5.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/bd8d8c76b06be761239b0c8680f655f6a6e90b48e44d43415b11c16f7e8c15be346fba0cbf71588c7cdfb52c419d928a7d3db353afc1d952d19756237d8f10b9 + languageName: node + linkType: hard + +"node-readfiles@npm:^0.2.0": + version: 0.2.0 + resolution: "node-readfiles@npm:0.2.0" + dependencies: + es6-promise: "npm:^3.2.1" + checksum: 10c0/9de2f741baae29f2422b22ef4399b5f7cb6c20372d4e88447a98d00a92cf1a35efdf942d24eee153a87d885aa7e7442b4bc6de33d4b91c47ba9da501780c76a1 + languageName: node + linkType: hard + +"nopt@npm:^8.0.0": + version: 8.1.0 + resolution: "nopt@npm:8.1.0" + dependencies: + abbrev: "npm:^3.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/62e9ea70c7a3eb91d162d2c706b6606c041e4e7b547cbbb48f8b3695af457dd6479904d7ace600856bf923dd8d1ed0696f06195c8c20f02ac87c1da0e1d315ef + languageName: node + linkType: hard + +"npm-run-path@npm:^4.0.1": + version: 4.0.1 + resolution: "npm-run-path@npm:4.0.1" + dependencies: + path-key: "npm:^3.0.0" + checksum: 10c0/6f9353a95288f8455cf64cbeb707b28826a7f29690244c1e4bb61ec573256e021b6ad6651b394eb1ccfd00d6ec50147253aba2c5fe58a57ceb111fad62c519ac + languageName: node + linkType: hard + +"oas-kit-common@npm:^1.0.8": + version: 1.0.8 + resolution: "oas-kit-common@npm:1.0.8" + dependencies: + fast-safe-stringify: "npm:^2.0.7" + checksum: 10c0/5619a0bd19a07b52af1afeff26e44601002c0fd558d0020fdb720cb3723b60c83b80efede3a62110ce315f15b971751fb46396760e0e507fb8fd412cdc3808dd + languageName: node + linkType: hard + +"oas-linter@npm:^3.2.2": + version: 3.2.2 + resolution: "oas-linter@npm:3.2.2" + dependencies: + "@exodus/schemasafe": "npm:^1.0.0-rc.2" + should: "npm:^13.2.1" + yaml: "npm:^1.10.0" + checksum: 10c0/5a8ea3d8a0bf185b676659d1e1c0b9b50695aeff53ccd5c264c8e99b4a7c0021f802b937913d76f0bc1a6a2b8ae151df764d95302b0829063b9b26f8c436871c + languageName: node + linkType: hard + +"oas-resolver@npm:^2.5.6": + version: 2.5.6 + resolution: "oas-resolver@npm:2.5.6" + dependencies: + node-fetch-h2: "npm:^2.3.0" + oas-kit-common: "npm:^1.0.8" + reftools: "npm:^1.1.9" + yaml: "npm:^1.10.0" + yargs: "npm:^17.0.1" + bin: + resolve: resolve.js + checksum: 10c0/cfba5ba3f7ea6673a840836cf194a80ba7f77e6d1ee005aa35cc838cad56d7e455fa53753ae7cc38810c96405b8606e675098ea7023639cf546cb10343f180f9 + languageName: node + linkType: hard + +"oas-schema-walker@npm:^1.1.5": + version: 1.1.5 + resolution: "oas-schema-walker@npm:1.1.5" + checksum: 10c0/8ba6bd2a9a8ede2c5574f217653a9e2b889a7c5be69c664a57e293591c58952e8510f4f9e2a82fd5f52491c859ce5c2b68342e9b971e9667f6b811e7fb56fd54 + languageName: node + linkType: hard + +"oas-validator@npm:^5.0.8": + version: 5.0.8 + resolution: "oas-validator@npm:5.0.8" + dependencies: + call-me-maybe: "npm:^1.0.1" + oas-kit-common: "npm:^1.0.8" + oas-linter: "npm:^3.2.2" + oas-resolver: "npm:^2.5.6" + oas-schema-walker: "npm:^1.1.5" + reftools: "npm:^1.1.9" + should: "npm:^13.2.1" + yaml: "npm:^1.10.0" + checksum: 10c0/16bb722042dcba93892c50db2201df6aeea9c3dd60e2f7bc18b36f23c610d136f52a5946908817f6fdd4139219fa4b177f952b9831039078b4c8730fa026b180 languageName: node linkType: hard "oauth4webapi@npm:^3.3.0": - version: 3.5.1 - resolution: "oauth4webapi@npm:3.5.1" - checksum: 10c0/5d57ba4299d61173b28ff0612fdfcc550b02c2ce4afcd1641103960c02af18268b55a70f26d47bbfc956680967c307546284b4a0b1f13845589e247f798ff395 + version: 3.5.3 + resolution: "oauth4webapi@npm:3.5.3" + checksum: 10c0/3c8b6854c68067481b4934386354e39824201dc4eade50b02448330a0eca3f4a68038548861e2a193eb12c55d934097c8c4b7e556036813da60646e556f61056 languageName: node linkType: hard @@ -4226,6 +7197,51 @@ __metadata: languageName: node linkType: hard +"onetime@npm:^5.1.2": + version: 5.1.2 + resolution: "onetime@npm:5.1.2" + dependencies: + mimic-fn: "npm:^2.1.0" + checksum: 10c0/ffcef6fbb2692c3c40749f31ea2e22677a876daea92959b8a80b521d95cca7a668c884d8b2045d1d8ee7d56796aa405c405462af112a1477594cc63531baeb8f + languageName: node + linkType: hard + +"openapi-path-templating@npm:^2.2.1": + version: 2.2.1 + resolution: "openapi-path-templating@npm:2.2.1" + dependencies: + apg-lite: "npm:^1.0.4" + checksum: 10c0/5b42e2d6c1f709272e227502b94aea072d7157cd9bc1f3e7f9c74ea81ed51138fd23de096991fff8cefcdd73ab6f5292fe495804ba9c7ae9071b9d30c0c50575 + languageName: node + linkType: hard + +"openapi-server-url-templating@npm:^1.3.0": + version: 1.3.0 + resolution: "openapi-server-url-templating@npm:1.3.0" + dependencies: + apg-lite: "npm:^1.0.4" + checksum: 10c0/8018822c2932d675457f3d1ad632d308e1d5c3becbda9eed27518a9e0117a792e320354f4b5ccbc4db89980899e82f0de420e36ecf71ba5d47d5b5c51e703ac0 + languageName: node + linkType: hard + +"openapi3-ts@npm:4.2.2": + version: 4.2.2 + resolution: "openapi3-ts@npm:4.2.2" + dependencies: + yaml: "npm:^2.3.4" + checksum: 10c0/8569c0cecf12353d57d7cebe28d495a2b33a06f6f9ebb1b9c808490f9ea87e7e480c62ffb9c3632f78647b09ca722bbc39b36804e73cea1f8fc7626785a23b99 + languageName: node + linkType: hard + +"openapi3-ts@npm:4.4.0, openapi3-ts@npm:^4.1.2, openapi3-ts@npm:^4.2.2": + version: 4.4.0 + resolution: "openapi3-ts@npm:4.4.0" + dependencies: + yaml: "npm:^2.5.0" + checksum: 10c0/900b834279fc8a43c545728ad75ec7c26934ec5344225b60d1e1c0df44d742d7e7379aea18d9034e03031f079d3308ba5a68600682eece3ed41cdbdd10346a9e + languageName: node + linkType: hard + "optionator@npm:^0.9.3": version: 0.9.4 resolution: "optionator@npm:0.9.4" @@ -4240,6 +7256,42 @@ __metadata: languageName: node linkType: hard +"orval@npm:7.10.0": + version: 7.10.0 + resolution: "orval@npm:7.10.0" + dependencies: + "@apidevtools/swagger-parser": "npm:^10.1.1" + "@orval/angular": "npm:7.10.0" + "@orval/axios": "npm:7.10.0" + "@orval/core": "npm:7.10.0" + "@orval/fetch": "npm:7.10.0" + "@orval/hono": "npm:7.10.0" + "@orval/mcp": "npm:7.10.0" + "@orval/mock": "npm:7.10.0" + "@orval/query": "npm:7.10.0" + "@orval/swr": "npm:7.10.0" + "@orval/zod": "npm:7.10.0" + ajv: "npm:^8.17.1" + cac: "npm:^6.7.14" + chalk: "npm:^4.1.2" + chokidar: "npm:^4.0.3" + enquirer: "npm:^2.4.1" + execa: "npm:^5.1.1" + find-up: "npm:5.0.0" + fs-extra: "npm:^11.3.0" + lodash.uniq: "npm:^4.5.0" + openapi3-ts: "npm:4.2.2" + string-argv: "npm:^0.3.2" + tsconfck: "npm:^2.0.1" + typedoc: "npm:^0.28.0" + typedoc-plugin-markdown: "npm:^4.4.2" + typescript: "npm:^5.6.3" + bin: + orval: dist/bin/orval.js + checksum: 10c0/ed789c0ee3ba26777fbf8fac9d77d682ac507c4733e9123784af3e457e290285b966f97050b0257ffacdd0b721239d26b1847c6231264f80a964b1ca8189bf01 + languageName: node + linkType: hard + "own-keys@npm:^1.0.1": version: 1.0.1 resolution: "own-keys@npm:1.0.1" @@ -4269,6 +7321,20 @@ __metadata: languageName: node linkType: hard +"p-map@npm:^7.0.2": + version: 7.0.3 + resolution: "p-map@npm:7.0.3" + checksum: 10c0/46091610da2b38ce47bcd1d8b4835a6fa4e832848a6682cf1652bc93915770f4617afc844c10a77d1b3e56d2472bb2d5622353fa3ead01a7f42b04fc8e744a5c + languageName: node + linkType: hard + +"package-json-from-dist@npm:^1.0.0": + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 10c0/62ba2785eb655fec084a257af34dbe24292ab74516d6aecef97ef72d4897310bc6898f6c85b5cd22770eaa1ce60d55a0230e150fb6a966e3ecd6c511e23d164b + languageName: node + linkType: hard + "parent-module@npm:^1.0.0": version: 1.0.1 resolution: "parent-module@npm:1.0.1" @@ -4278,6 +7344,20 @@ __metadata: languageName: node linkType: hard +"parse-entities@npm:^2.0.0": + version: 2.0.0 + resolution: "parse-entities@npm:2.0.0" + dependencies: + character-entities: "npm:^1.0.0" + character-entities-legacy: "npm:^1.0.0" + character-reference-invalid: "npm:^1.0.0" + is-alphanumerical: "npm:^1.0.0" + is-decimal: "npm:^1.0.0" + is-hexadecimal: "npm:^1.0.0" + checksum: 10c0/f85a22c0ea406ff26b53fdc28641f01cc36fa49eb2e3135f02693286c89ef0bcefc2262d99b3688e20aac2a14fd10b75c518583e875c1b9fe3d1f937795e0854 + languageName: node + linkType: hard + "path-exists@npm:^4.0.0": version: 4.0.0 resolution: "path-exists@npm:4.0.0" @@ -4285,7 +7365,7 @@ __metadata: languageName: node linkType: hard -"path-key@npm:^3.1.0": +"path-key@npm:^3.0.0, path-key@npm:^3.1.0": version: 3.1.1 resolution: "path-key@npm:3.1.1" checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c @@ -4299,6 +7379,23 @@ __metadata: languageName: node linkType: hard +"path-scurry@npm:^1.11.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: "npm:^10.2.0" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 10c0/666f6973f332f27581371efaf303fd6c272cc43c2057b37aa99e3643158c7e4b2626549555d88626e99ea9e046f82f32e41bbde5f1508547e9a11b149b52387c + languageName: node + linkType: hard + "picocolors@npm:^1.0.0, picocolors@npm:^1.1.1": version: 1.1.1 resolution: "picocolors@npm:1.1.1" @@ -4320,6 +7417,13 @@ __metadata: languageName: node linkType: hard +"pony-cause@npm:^1.1.1": + version: 1.1.1 + resolution: "pony-cause@npm:1.1.1" + checksum: 10c0/63ee3e22c3a9ddda3aca17c2368657934b6c713a1af5b44b48aa6d06a1afc0f0c1f49e20b641be94f33f6c5bd2877977c4b6ca8de2514756b9351318ec4f14a5 + languageName: node + linkType: hard + "possible-typed-array-names@npm:^1.0.0": version: 1.1.0 resolution: "possible-typed-array-names@npm:1.1.0" @@ -4338,7 +7442,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:8.5.6": +"postcss@npm:8.5.6, postcss@npm:^8.4.41": version: 8.5.6 resolution: "postcss@npm:8.5.6" dependencies: @@ -4349,17 +7453,6 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.4.41": - version: 8.5.4 - resolution: "postcss@npm:8.5.4" - dependencies: - nanoid: "npm:^3.3.11" - picocolors: "npm:^1.1.1" - source-map-js: "npm:^1.2.1" - checksum: 10c0/0feff648614a834f7cd5396ea6b05b658ca0507e10a4eaad03b56c348f6aec93f42a885fc1b30522630c6a7e49ae53b38a061e3cba526f2d9857afbe095a22bb - languageName: node - linkType: hard - "preact-render-to-string@npm:6.5.11": version: 6.5.11 resolution: "preact-render-to-string@npm:6.5.11" @@ -4409,6 +7502,44 @@ __metadata: languageName: node linkType: hard +"prismjs@npm:^1.27.0": + version: 1.30.0 + resolution: "prismjs@npm:1.30.0" + checksum: 10c0/f56205bfd58ef71ccfcbcb691fd0eb84adc96c6ff21b0b69fc6fdcf02be42d6ef972ba4aed60466310de3d67733f6a746f89f2fb79c00bf217406d465b3e8f23 + languageName: node + linkType: hard + +"prismjs@npm:~1.27.0": + version: 1.27.0 + resolution: "prismjs@npm:1.27.0" + checksum: 10c0/841cbf53e837a42df9155c5ce1be52c4a0a8967ac916b52a27d066181a3578186c634e52d06d0547fb62b65c486b99b95f826dd54966619f9721b884f486b498 + languageName: node + linkType: hard + +"proc-log@npm:^5.0.0": + version: 5.0.0 + resolution: "proc-log@npm:5.0.0" + checksum: 10c0/bbe5edb944b0ad63387a1d5b1911ae93e05ce8d0f60de1035b218cdcceedfe39dbd2c697853355b70f1a090f8f58fe90da487c85216bf9671f9499d1a897e9e3 + languageName: node + linkType: hard + +"process@npm:^0.11.10": + version: 0.11.10 + resolution: "process@npm:0.11.10" + checksum: 10c0/40c3ce4b7e6d4b8c3355479df77aeed46f81b279818ccdc500124e6a5ab882c0cc81ff7ea16384873a95a74c4570b01b120f287abbdd4c877931460eca6084b3 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: "npm:^2.0.2" + retry: "npm:^0.12.0" + checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 + languageName: node + linkType: hard + "prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" @@ -4420,6 +7551,29 @@ __metadata: languageName: node linkType: hard +"property-information@npm:^5.0.0": + version: 5.6.0 + resolution: "property-information@npm:5.6.0" + dependencies: + xtend: "npm:^4.0.0" + checksum: 10c0/d54b77c31dc13bb6819559080b2c67d37d94be7dc271f404f139a16a57aa96fcc0b3ad806d4a5baef9e031744853e4afe3df2e37275aacb1f78079bbb652c5af + languageName: node + linkType: hard + +"proxy-from-env@npm:^1.1.0": + version: 1.1.0 + resolution: "proxy-from-env@npm:1.1.0" + checksum: 10c0/fe7dd8b1bdbbbea18d1459107729c3e4a2243ca870d26d34c2c1bcd3e4425b7bcc5112362df2d93cc7fb9746f6142b5e272fd1cc5c86ddf8580175186f6ad42b + languageName: node + linkType: hard + +"punycode.js@npm:^2.3.1": + version: 2.3.1 + resolution: "punycode.js@npm:2.3.1" + checksum: 10c0/1d12c1c0e06127fa5db56bd7fdf698daf9a78104456a6b67326877afc21feaa821257b171539caedd2f0524027fa38e67b13dd094159c8d70b6d26d2bea4dfdb + languageName: node + linkType: hard + "punycode@npm:^2.1.0": version: 2.3.1 resolution: "punycode@npm:2.3.1" @@ -4427,6 +7581,13 @@ __metadata: languageName: node linkType: hard +"querystringify@npm:^2.1.1": + version: 2.2.0 + resolution: "querystringify@npm:2.2.0" + checksum: 10c0/3258bc3dbdf322ff2663619afe5947c7926a6ef5fb78ad7d384602974c467fadfc8272af44f5eb8cddd0d011aae8fabf3a929a8eee4b86edcc0a21e6bd10f9aa + languageName: node + linkType: hard + "queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" @@ -4434,6 +7595,65 @@ __metadata: languageName: node linkType: hard +"ramda-adjunct@npm:^5.0.0, ramda-adjunct@npm:^5.1.0": + version: 5.1.0 + resolution: "ramda-adjunct@npm:5.1.0" + peerDependencies: + ramda: ">= 0.30.0" + checksum: 10c0/8d8e74648439b3b68f3d6e8d094e9a4f3a9e95db115b8d7b0b96510ac6b9724e80e7917890bdfeade4f6e44c299e4a629e8fb6048778115c2c21001cabed6544 + languageName: node + linkType: hard + +"ramda@npm:^0.30.1, ramda@npm:~0.30.0": + version: 0.30.1 + resolution: "ramda@npm:0.30.1" + checksum: 10c0/3ea3e35c80e1a1b78c23de0c72d3382c3446f42052b113b851f1b7fc421e33a45ce92e7aef3c705cc6de3812a209d03417af5c264f67126cda539fd66c8bea71 + languageName: node + linkType: hard + +"randexp@npm:^0.5.3": + version: 0.5.3 + resolution: "randexp@npm:0.5.3" + dependencies: + drange: "npm:^1.0.2" + ret: "npm:^0.2.0" + checksum: 10c0/44ad4e6e7661c090939e062916ccf1477de27eb2b91dfa8c113de9f3116ddf2016ac090323d5d2fa0947c3ff8e9b24798ee5e25cb2c37f22df2e72cda56232b6 + languageName: node + linkType: hard + +"randombytes@npm:^2.1.0": + version: 2.1.0 + resolution: "randombytes@npm:2.1.0" + dependencies: + safe-buffer: "npm:^5.1.0" + checksum: 10c0/50395efda7a8c94f5dffab564f9ff89736064d32addf0cc7e8bf5e4166f09f8ded7a0849ca6c2d2a59478f7d90f78f20d8048bca3cdf8be09d8e8a10790388f3 + languageName: node + linkType: hard + +"react-copy-to-clipboard@npm:5.1.0": + version: 5.1.0 + resolution: "react-copy-to-clipboard@npm:5.1.0" + dependencies: + copy-to-clipboard: "npm:^3.3.1" + prop-types: "npm:^15.8.1" + peerDependencies: + react: ^15.3.0 || 16 || 17 || 18 + checksum: 10c0/de70d9f9c2d17cee207888ed791d4a042c300e5ca732503434d49e6745cff56c0d5ebcc82ab86237e9c2248e636d1d031b9f9cf9913ecec61d82a0e5ebc93881 + languageName: node + linkType: hard + +"react-debounce-input@npm:=3.3.0": + version: 3.3.0 + resolution: "react-debounce-input@npm:3.3.0" + dependencies: + lodash.debounce: "npm:^4" + prop-types: "npm:^15.8.1" + peerDependencies: + react: ^15.3.0 || 16 || 17 || 18 + checksum: 10c0/a015dc31ebb2777bdcc14b2b466994ff670f823c978bd5d3ee0bfd7955ccf4de48fadeac39a0a97bd8d628502c0808f384e48bf650d6a141b2f04c43275f0e29 + languageName: node + linkType: hard + "react-dom@npm:^19.0.0": version: 19.1.0 resolution: "react-dom@npm:19.1.0" @@ -4454,6 +7674,37 @@ __metadata: languageName: node linkType: hard +"react-immutable-proptypes@npm:2.2.0": + version: 2.2.0 + resolution: "react-immutable-proptypes@npm:2.2.0" + dependencies: + invariant: "npm:^2.2.2" + peerDependencies: + immutable: ">=3.6.2" + checksum: 10c0/4f3e147303be418d157a00246c9988068df0d21cb92e40f9d78a09538da71b967f5ddbd7f7facf54f05b5ddb011cc717afa82c8c490b0188bf90a6251acc9fb9 + languageName: node + linkType: hard + +"react-immutable-pure-component@npm:^2.2.0": + version: 2.2.2 + resolution: "react-immutable-pure-component@npm:2.2.2" + peerDependencies: + immutable: ">= 2 || >= 4.0.0-rc" + react: ">= 16.6" + react-dom: ">= 16.6" + checksum: 10c0/d13dc10069bd13059ab91741169c6adaa2a44efb425fc3cf7506925f8cfcde40ef8c7d88f0ac5977a9b1eb5b6456f7fe530a1c670df727424dd72a1642163675 + languageName: node + linkType: hard + +"react-inspector@npm:^6.0.1": + version: 6.0.2 + resolution: "react-inspector@npm:6.0.2" + peerDependencies: + react: ^16.8.4 || ^17.0.0 || ^18.0.0 + checksum: 10c0/8f9b23c21b4d95722e28c9455c2bf00fd9437347714382594461f98e5b9954d60864d0f4e74e881639b065e752a97ba52a65e39930c234072e5bff291bb02b5e + languageName: node + linkType: hard + "react-is@npm:^16.13.1": version: 16.13.1 resolution: "react-is@npm:16.13.1" @@ -4461,6 +7712,25 @@ __metadata: languageName: node linkType: hard +"react-redux@npm:^9.2.0": + version: 9.2.0 + resolution: "react-redux@npm:9.2.0" + dependencies: + "@types/use-sync-external-store": "npm:^0.0.6" + use-sync-external-store: "npm:^1.4.0" + peerDependencies: + "@types/react": ^18.2.25 || ^19 + react: ^18.0 || ^19 + redux: ^5.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + redux: + optional: true + checksum: 10c0/00d485f9d9219ca1507b4d30dde5f6ff8fb68ba642458f742e0ec83af052f89e65cd668249b99299e1053cc6ad3d2d8ac6cb89e2f70d2ac5585ae0d7fa0ef259 + languageName: node + linkType: hard + "react-remove-scroll-bar@npm:^2.3.7": version: 2.3.8 resolution: "react-remove-scroll-bar@npm:2.3.8" @@ -4512,6 +7782,22 @@ __metadata: languageName: node linkType: hard +"react-syntax-highlighter@npm:^15.6.1": + version: 15.6.1 + resolution: "react-syntax-highlighter@npm:15.6.1" + dependencies: + "@babel/runtime": "npm:^7.3.1" + highlight.js: "npm:^10.4.1" + highlightjs-vue: "npm:^1.0.0" + lowlight: "npm:^1.17.0" + prismjs: "npm:^1.27.0" + refractor: "npm:^3.6.0" + peerDependencies: + react: ">= 0.14.0" + checksum: 10c0/4a4cf4695c45d7a6b25078970fb79ae5a85edeba5be0a2508766ee18e8aee1c0c4cdd97bf54f5055e4af671fe7e5e71348e81cafe09a0eb07a763ae876b7f073 + languageName: node + linkType: hard + "react@npm:^19.0.0": version: 19.1.0 resolution: "react@npm:19.1.0" @@ -4519,6 +7805,29 @@ __metadata: languageName: node linkType: hard +"readdirp@npm:^4.0.1": + version: 4.1.2 + resolution: "readdirp@npm:4.1.2" + checksum: 10c0/60a14f7619dec48c9c850255cd523e2717001b0e179dc7037cfa0895da7b9e9ab07532d324bfb118d73a710887d1e35f79c495fa91582784493e085d18c72c62 + languageName: node + linkType: hard + +"redux-immutable@npm:^4.0.0": + version: 4.0.0 + resolution: "redux-immutable@npm:4.0.0" + peerDependencies: + immutable: ^3.8.1 || ^4.0.0-rc.1 + checksum: 10c0/c706c9f72a1fbce92d54ab9117ab641b6d7ee69f2860ec6de827dbed5bed918d4677a0895e6564bb59011202bb5e639cf69f4e2d2d14086053b32e5c4e35f512 + languageName: node + linkType: hard + +"redux@npm:^5.0.1": + version: 5.0.1 + resolution: "redux@npm:5.0.1" + checksum: 10c0/b10c28357194f38e7d53b760ed5e64faa317cc63de1fb95bc5d9e127fab956392344368c357b8e7a9bedb0c35b111e7efa522210cfdc3b3c75e5074718e9069c + languageName: node + linkType: hard + "reflect.getprototypeof@npm:^1.0.6, reflect.getprototypeof@npm:^1.0.9": version: 1.0.10 resolution: "reflect.getprototypeof@npm:1.0.10" @@ -4535,6 +7844,24 @@ __metadata: languageName: node linkType: hard +"refractor@npm:^3.6.0": + version: 3.6.0 + resolution: "refractor@npm:3.6.0" + dependencies: + hastscript: "npm:^6.0.0" + parse-entities: "npm:^2.0.0" + prismjs: "npm:~1.27.0" + checksum: 10c0/63ab62393c8c2fd7108c2ea1eff721c0ad2a1a6eee60fdd1b47f4bb25cf298667dc97d041405b3e718b0817da12b37a86ed07ebee5bd2ca6405611f1bae456db + languageName: node + linkType: hard + +"reftools@npm:^1.1.9": + version: 1.1.9 + resolution: "reftools@npm:1.1.9" + checksum: 10c0/4b44c9e75d6e5328b43b974de08776ee1718a0b48f24e033b2699f872cc9a698234a4aa0553b9e1a766b828aeb9834e4aa988410f0279e86179edb33b270da6c + languageName: node + linkType: hard + "regexp.prototype.flags@npm:^1.5.3, regexp.prototype.flags@npm:^1.5.4": version: 1.5.4 resolution: "regexp.prototype.flags@npm:1.5.4" @@ -4549,6 +7876,53 @@ __metadata: languageName: node linkType: hard +"remarkable@npm:^2.0.1": + version: 2.0.1 + resolution: "remarkable@npm:2.0.1" + dependencies: + argparse: "npm:^1.0.10" + autolinker: "npm:^3.11.0" + bin: + remarkable: bin/remarkable.js + checksum: 10c0/e2c23bfd2e45234110bc3220e44fcac5e4a8199691ff6959d9cd0bac34ffca2f123d3913946cbef517018bc8e5ab00beafc527a04782b7afbe5e9706d1c0c77a + languageName: node + linkType: hard + +"repeat-string@npm:^1.5.2": + version: 1.6.1 + resolution: "repeat-string@npm:1.6.1" + checksum: 10c0/87fa21bfdb2fbdedc44b9a5b118b7c1239bdd2c2c1e42742ef9119b7d412a5137a1d23f1a83dc6bb686f4f27429ac6f542e3d923090b44181bafa41e8ac0174d + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: 10c0/83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99 + languageName: node + linkType: hard + +"require-from-string@npm:^2.0.2": + version: 2.0.2 + resolution: "require-from-string@npm:2.0.2" + checksum: 10c0/aaa267e0c5b022fc5fd4eef49d8285086b15f2a1c54b28240fdf03599cbd9c26049fee3eab894f2e1f6ca65e513b030a7c264201e3f005601e80c49fb2937ce2 + languageName: node + linkType: hard + +"requires-port@npm:^1.0.0": + version: 1.0.0 + resolution: "requires-port@npm:1.0.0" + checksum: 10c0/b2bfdd09db16c082c4326e573a82c0771daaf7b53b9ce8ad60ea46aa6e30aaf475fe9b164800b89f93b748d2c234d8abff945d2551ba47bf5698e04cd7713267 + languageName: node + linkType: hard + +"reselect@npm:^5.1.1": + version: 5.1.1 + resolution: "reselect@npm:5.1.1" + checksum: 10c0/219c30da122980f61853db3aebd173524a2accd4b3baec770e3d51941426c87648a125ca08d8c57daa6b8b086f2fdd2703cb035dd6231db98cdbe1176a71f489 + languageName: node + linkType: hard + "resolve-from@npm:^4.0.0": version: 4.0.0 resolution: "resolve-from@npm:4.0.0" @@ -4615,6 +7989,20 @@ __metadata: languageName: node linkType: hard +"ret@npm:^0.2.0": + version: 0.2.2 + resolution: "ret@npm:0.2.2" + checksum: 10c0/1a41e543913cda851abb1dae4852efa97bb693ce58fde3b51cc1cae94e2599dd70b91ad6268a4a07fc238305be06fed91723ef6d08863c48a0d02e0a74b943cd + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe + languageName: node + linkType: hard + "reusify@npm:^1.0.4": version: 1.1.0 resolution: "reusify@npm:1.1.0" @@ -4644,6 +8032,13 @@ __metadata: languageName: node linkType: hard +"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 + languageName: node + linkType: hard + "safe-push-apply@npm:^1.0.0": version: 1.0.0 resolution: "safe-push-apply@npm:1.0.0" @@ -4665,6 +8060,20 @@ __metadata: languageName: node linkType: hard +"safe-stable-stringify@npm:^1.1": + version: 1.1.1 + resolution: "safe-stable-stringify@npm:1.1.1" + checksum: 10c0/03e36df1444fc52eacb069b1ca1289061b6ffe75b184ac7df22bc962ee7e7226a4371491be21574bc8df81e33fa5a11eb54a85b6a68bf25394ee4453fe0d9d81 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 + languageName: node + linkType: hard + "scheduler@npm:^0.26.0": version: 0.26.0 resolution: "scheduler@npm:0.26.0" @@ -4681,7 +8090,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.6.0, semver@npm:^7.7.1, semver@npm:^7.7.2": +"semver@npm:^7.3.5, semver@npm:^7.6.0, semver@npm:^7.7.1, semver@npm:^7.7.2": version: 7.7.2 resolution: "semver@npm:7.7.2" bin: @@ -4690,6 +8099,15 @@ __metadata: languageName: node linkType: hard +"serialize-error@npm:^8.1.0": + version: 8.1.0 + resolution: "serialize-error@npm:8.1.0" + dependencies: + type-fest: "npm:^0.20.2" + checksum: 10c0/8cfd89f43ca93e283c5f1d16178a536bdfac9bc6029f4a9df988610cc399bc4f2478d1f10ce40b9dff66b863a5158a19b438fbec929045c96d92174f6bca1e88 + languageName: node + linkType: hard + "set-function-length@npm:^1.2.2": version: 1.2.2 resolution: "set-function-length@npm:1.2.2" @@ -4727,6 +8145,18 @@ __metadata: languageName: node linkType: hard +"sha.js@npm:^2.4.11": + version: 2.4.11 + resolution: "sha.js@npm:2.4.11" + dependencies: + inherits: "npm:^2.0.1" + safe-buffer: "npm:^5.0.1" + bin: + sha.js: ./bin.js + checksum: 10c0/b7a371bca8821c9cc98a0aeff67444a03d48d745cb103f17228b96793f455f0eb0a691941b89ea1e60f6359207e36081d9be193252b0f128e0daf9cfea2815a5 + languageName: node + linkType: hard + "sharp@npm:^0.34.1": version: 0.34.2 resolution: "sharp@npm:0.34.2" @@ -4818,6 +8248,72 @@ __metadata: languageName: node linkType: hard +"short-unique-id@npm:^5.3.2": + version: 5.3.2 + resolution: "short-unique-id@npm:5.3.2" + bin: + short-unique-id: bin/short-unique-id + suid: bin/short-unique-id + checksum: 10c0/d411ca922731f5e9dbce0820616fa3a62b2a42692094a7d99d32b230fcae556284a3b89f86ca17e449b2bc7efee08f185abc63000570a4e0d451f5e883b55a8d + languageName: node + linkType: hard + +"should-equal@npm:^2.0.0": + version: 2.0.0 + resolution: "should-equal@npm:2.0.0" + dependencies: + should-type: "npm:^1.4.0" + checksum: 10c0/b375e1da2586671e2b9442ac5b700af508f56438af9923f69123b1fe4e02ccddc9a8a3eb803447a6df91e616cec236c41d6f28fdaa100467f9fdb81651089538 + languageName: node + linkType: hard + +"should-format@npm:^3.0.3": + version: 3.0.3 + resolution: "should-format@npm:3.0.3" + dependencies: + should-type: "npm:^1.3.0" + should-type-adaptors: "npm:^1.0.1" + checksum: 10c0/ef2a31148d79a3fabd0dc6c1c1b10f90d9e071ad8e1f99452bd01e8aceaca62985b43974cf8103185fa1a3ade85947c6f664e44ca9af253afd1ce93c223bd8e4 + languageName: node + linkType: hard + +"should-type-adaptors@npm:^1.0.1": + version: 1.1.0 + resolution: "should-type-adaptors@npm:1.1.0" + dependencies: + should-type: "npm:^1.3.0" + should-util: "npm:^1.0.0" + checksum: 10c0/cf127f8807f69ace9db04dbec3f274330a854405feef9821b5fa525748961da65747869cca36c813132b98757bd3e42d53541579cb16630ccf3c0dd9c0082320 + languageName: node + linkType: hard + +"should-type@npm:^1.3.0, should-type@npm:^1.4.0": + version: 1.4.0 + resolution: "should-type@npm:1.4.0" + checksum: 10c0/50cb50d776ee117b151068367c09ec12ac8e6f5fe2bd4d167413972813f06e930fe8624232a56c335846d3afcb784455f9a9690baa4350b3919bd001f0c4c94b + languageName: node + linkType: hard + +"should-util@npm:^1.0.0": + version: 1.0.1 + resolution: "should-util@npm:1.0.1" + checksum: 10c0/1790719e05eae9edae86e44cbbad98529bd333df3f7cdfd63ea80acb6af718990e70abbc173aa9ccb93fff5ab6ee08d38412d707ff4003840be2256a278a61f3 + languageName: node + linkType: hard + +"should@npm:^13.2.1": + version: 13.2.3 + resolution: "should@npm:13.2.3" + dependencies: + should-equal: "npm:^2.0.0" + should-format: "npm:^3.0.3" + should-type: "npm:^1.4.0" + should-type-adaptors: "npm:^1.0.1" + should-util: "npm:^1.0.0" + checksum: 10c0/99581d8615f6fb27cd23c9f431cfacef58d118a90d0cccf58775b90631a47441397cfbdcbe6379e2718e9e60f293e3dfc0e87857f4b5a36fe962814e46ab05fa + languageName: node + linkType: hard + "side-channel-list@npm:^1.0.0": version: 1.0.0 resolution: "side-channel-list@npm:1.0.0" @@ -4866,6 +8362,29 @@ __metadata: languageName: node linkType: hard +"signal-exit@npm:^3.0.3": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 + languageName: node + linkType: hard + +"simple-eval@npm:1.0.1": + version: 1.0.1 + resolution: "simple-eval@npm:1.0.1" + dependencies: + jsep: "npm:^1.3.6" + checksum: 10c0/0fc9f84e3bca0c87c78d12dac7dd04bcb448d4060b95101ea7bfdf8aec941cdbbb924230bd0b0a40a319e335c92abd439760be65c06bab04b2d829688c6fcd2a + languageName: node + linkType: hard + "simple-swizzle@npm:^0.2.2": version: 0.2.2 resolution: "simple-swizzle@npm:0.2.2" @@ -4875,6 +8394,41 @@ __metadata: languageName: node linkType: hard +"slash@npm:^3.0.0": + version: 3.0.0 + resolution: "slash@npm:3.0.0" + checksum: 10c0/e18488c6a42bdfd4ac5be85b2ced3ccd0224773baae6ad42cfbb9ec74fc07f9fa8396bd35ee638084ead7a2a0818eb5e7151111544d4731ce843019dab4be47b + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.5 + resolution: "socks-proxy-agent@npm:8.0.5" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:^4.3.4" + socks: "npm:^2.8.3" + checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6 + languageName: node + linkType: hard + +"socks@npm:^2.8.3": + version: 2.8.5 + resolution: "socks@npm:2.8.5" + dependencies: + ip-address: "npm:^9.0.5" + smart-buffer: "npm:^4.2.0" + checksum: 10c0/e427d0eb0451cfd04e20b9156ea8c0e9b5e38a8d70f21e55c30fbe4214eda37cfc25d782c63f9adc5fbdad6d062a0f127ef2cefc9a44b6fee2b9ea5d1ed10827 + languageName: node + linkType: hard + "source-map-js@npm:^1.0.2, source-map-js@npm:^1.2.1": version: 1.2.1 resolution: "source-map-js@npm:1.2.1" @@ -4882,6 +8436,36 @@ __metadata: languageName: node linkType: hard +"space-separated-tokens@npm:^1.0.0": + version: 1.1.5 + resolution: "space-separated-tokens@npm:1.1.5" + checksum: 10c0/3ee0a6905f89e1ffdfe474124b1ade9fe97276a377a0b01350bc079b6ec566eb5b219e26064cc5b7f3899c05bde51ffbc9154290b96eaf82916a1e2c2c13ead9 + languageName: node + linkType: hard + +"sprintf-js@npm:^1.1.3": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: 10c0/09270dc4f30d479e666aee820eacd9e464215cdff53848b443964202bf4051490538e5dd1b42e1a65cf7296916ca17640aebf63dae9812749c7542ee5f288dec + languageName: node + linkType: hard + +"sprintf-js@npm:~1.0.2": + version: 1.0.3 + resolution: "sprintf-js@npm:1.0.3" + checksum: 10c0/ecadcfe4c771890140da5023d43e190b7566d9cf8b2d238600f31bec0fc653f328da4450eb04bd59a431771a8e9cc0e118f0aa3974b683a4981b4e07abc2a5bb + languageName: node + linkType: hard + +"ssri@npm:^12.0.0": + version: 12.0.0 + resolution: "ssri@npm:12.0.0" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/caddd5f544b2006e88fa6b0124d8d7b28208b83c72d7672d5ade44d794525d23b540f3396108c4eb9280dcb7c01f0bef50682f5b4b2c34291f7c5e211fd1417d + languageName: node + linkType: hard + "stable-hash@npm:^0.0.5": version: 0.0.5 resolution: "stable-hash@npm:0.0.5" @@ -4899,10 +8483,32 @@ __metadata: languageName: node linkType: hard -"streamsearch@npm:^1.1.0": - version: 1.1.0 - resolution: "streamsearch@npm:1.1.0" - checksum: 10c0/fbd9aecc2621364384d157f7e59426f4bfd385e8b424b5aaa79c83a6f5a1c8fd2e4e3289e95de1eb3511cb96bb333d6281a9919fafce760e4edb35b2cd2facab +"string-argv@npm:^0.3.2": + version: 0.3.2 + resolution: "string-argv@npm:0.3.2" + checksum: 10c0/75c02a83759ad1722e040b86823909d9a2fc75d15dd71ec4b537c3560746e33b5f5a07f7332d1e3f88319909f82190843aa2f0a0d8c8d591ec08e93d5b8dec82 + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: "npm:^8.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: "npm:^0.2.0" + emoji-regex: "npm:^9.2.2" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca languageName: node linkType: hard @@ -4986,6 +8592,24 @@ __metadata: languageName: node linkType: hard +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: "npm:^5.0.1" + checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: "npm:^6.0.1" + checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 + languageName: node + linkType: hard + "strip-bom@npm:^3.0.0": version: 3.0.0 resolution: "strip-bom@npm:3.0.0" @@ -4993,6 +8617,13 @@ __metadata: languageName: node linkType: hard +"strip-final-newline@npm:^2.0.0": + version: 2.0.0 + resolution: "strip-final-newline@npm:2.0.0" + checksum: 10c0/bddf8ccd47acd85c0e09ad7375409d81653f645fda13227a9d459642277c253d877b68f2e5e4d819fe75733b0e626bac7e954c04f3236f6d196f79c94fa4a96f + languageName: node + linkType: hard + "strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" @@ -5032,6 +8663,99 @@ __metadata: languageName: node linkType: hard +"swagger-client@npm:^3.35.5": + version: 3.35.5 + resolution: "swagger-client@npm:3.35.5" + dependencies: + "@babel/runtime-corejs3": "npm:^7.22.15" + "@scarf/scarf": "npm:=1.4.0" + "@swagger-api/apidom-core": "npm:>=1.0.0-beta.41 <1.0.0-rc.0" + "@swagger-api/apidom-error": "npm:>=1.0.0-beta.41 <1.0.0-rc.0" + "@swagger-api/apidom-json-pointer": "npm:>=1.0.0-beta.41 <1.0.0-rc.0" + "@swagger-api/apidom-ns-openapi-3-1": "npm:>=1.0.0-beta.41 <1.0.0-rc.0" + "@swagger-api/apidom-reference": "npm:>=1.0.0-beta.41 <1.0.0-rc.0" + "@swaggerexpert/cookie": "npm:^2.0.2" + deepmerge: "npm:~4.3.0" + fast-json-patch: "npm:^3.0.0-1" + js-yaml: "npm:^4.1.0" + neotraverse: "npm:=0.6.18" + node-abort-controller: "npm:^3.1.1" + node-fetch-commonjs: "npm:^3.3.2" + openapi-path-templating: "npm:^2.2.1" + openapi-server-url-templating: "npm:^1.3.0" + ramda: "npm:^0.30.1" + ramda-adjunct: "npm:^5.1.0" + checksum: 10c0/7179807ac977c1b7ee4f121d16a8f9f902467dfc026f4cff7fadb4d02e3b4f6a21f54612614435b3d43efbbce1376871aedb34f2c186de9391625f1c1674d948 + languageName: node + linkType: hard + +"swagger-ui-react@npm:^5.24.1": + version: 5.25.2 + resolution: "swagger-ui-react@npm:5.25.2" + dependencies: + "@babel/runtime-corejs3": "npm:^7.27.1" + "@scarf/scarf": "npm:=1.4.0" + base64-js: "npm:^1.5.1" + classnames: "npm:^2.5.1" + css.escape: "npm:1.5.1" + deep-extend: "npm:0.6.0" + dompurify: "npm:=3.2.4" + ieee754: "npm:^1.2.1" + immutable: "npm:^3.x.x" + js-file-download: "npm:^0.4.12" + js-yaml: "npm:=4.1.0" + lodash: "npm:^4.17.21" + prop-types: "npm:^15.8.1" + randexp: "npm:^0.5.3" + randombytes: "npm:^2.1.0" + react-copy-to-clipboard: "npm:5.1.0" + react-debounce-input: "npm:=3.3.0" + react-immutable-proptypes: "npm:2.2.0" + react-immutable-pure-component: "npm:^2.2.0" + react-inspector: "npm:^6.0.1" + react-redux: "npm:^9.2.0" + react-syntax-highlighter: "npm:^15.6.1" + redux: "npm:^5.0.1" + redux-immutable: "npm:^4.0.0" + remarkable: "npm:^2.0.1" + reselect: "npm:^5.1.1" + serialize-error: "npm:^8.1.0" + sha.js: "npm:^2.4.11" + swagger-client: "npm:^3.35.5" + url-parse: "npm:^1.5.10" + xml: "npm:=1.0.1" + xml-but-prettier: "npm:^1.0.1" + zenscroll: "npm:^4.0.2" + peerDependencies: + react: ">=16.8.0 <19" + react-dom: ">=16.8.0 <19" + checksum: 10c0/036fe857782ecba1410be7789a23be185a2af369274aaafa853b4b17c5216df2f39e7470149487de55fab8be7ca3f0e9174c752f4ffcb97f0e7909a8b002d2fa + languageName: node + linkType: hard + +"swagger2openapi@npm:^7.0.8": + version: 7.0.8 + resolution: "swagger2openapi@npm:7.0.8" + dependencies: + call-me-maybe: "npm:^1.0.1" + node-fetch: "npm:^2.6.1" + node-fetch-h2: "npm:^2.3.0" + node-readfiles: "npm:^0.2.0" + oas-kit-common: "npm:^1.0.8" + oas-resolver: "npm:^2.5.6" + oas-schema-walker: "npm:^1.1.5" + oas-validator: "npm:^5.0.8" + reftools: "npm:^1.1.9" + yaml: "npm:^1.10.0" + yargs: "npm:^17.0.1" + bin: + boast: boast.js + oas-validate: oas-validate.js + swagger2openapi: swagger2openapi.js + checksum: 10c0/441a4d3a7d353f99395b14a0c8d6124be6390f2f8aa53336905e7314a7f80b66f5f2a40ac0dc2dbe2f7bc01f52a223a94f54a2ece345095fd3ad8ae8b03d688b + languageName: node + linkType: hard + "tailwind-merge@npm:^3.2.0": version: 3.3.1 resolution: "tailwind-merge@npm:3.3.1" @@ -5067,7 +8791,7 @@ __metadata: languageName: node linkType: hard -"tinyglobby@npm:^0.2.13": +"tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.13": version: 0.2.14 resolution: "tinyglobby@npm:0.2.14" dependencies: @@ -5086,6 +8810,58 @@ __metadata: languageName: node linkType: hard +"toggle-selection@npm:^1.0.6": + version: 1.0.6 + resolution: "toggle-selection@npm:1.0.6" + checksum: 10c0/f2cf1f2c70f374fd87b0cdc8007453ba9e981c4305a8bf4eac10a30e62ecdfd28bca7d18f8f15b15a506bf8a7bfb20dbe3539f0fcf2a2c8396c1a78d53e1f179 + languageName: node + linkType: hard + +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 10c0/047cb209a6b60c742f05c9d3ace8fa510bff609995c129a37ace03476a9b12db4dbf975e74600830ef0796e18882b2381fb5fb1f6b4f96b832c374de3ab91a11 + languageName: node + linkType: hard + +"tree-sitter-json@npm:=0.24.8": + version: 0.24.8 + resolution: "tree-sitter-json@npm:0.24.8" + dependencies: + node-addon-api: "npm:^8.2.2" + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.8.2" + peerDependencies: + tree-sitter: ^0.21.1 + peerDependenciesMeta: + tree-sitter: + optional: true + checksum: 10c0/cc528770947d4b24e2a389b8c9f9ac103841a4447278903700cbb893414d21564366a9d9c0fc1c6b7c2d4bbe311b8622e95f3b4df3886ee3c8e2e44c839261c1 + languageName: node + linkType: hard + +"tree-sitter@npm:=0.21.1": + version: 0.21.1 + resolution: "tree-sitter@npm:0.21.1" + dependencies: + node-addon-api: "npm:^8.0.0" + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.8.0" + checksum: 10c0/c144830c28ce588f5c5cf060390286ffece760636bfff03cf9110a7910504be3da6873d3bdc4faa9d5424433401122adbba605c9754bfd6fca63500265738ffb + languageName: node + linkType: hard + +"tree-sitter@npm:=0.22.4": + version: 0.22.4 + resolution: "tree-sitter@npm:0.22.4" + dependencies: + node-addon-api: "npm:^8.3.0" + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.8.4" + checksum: 10c0/28d03778bdd8b4910aa064a9f3478c3e0ee697948282556b11452f6987a721535f4a9a8c528d9c04e0a0e8b759b8372a2118b9f21f5e200b48438a57a18e9977 + languageName: node + linkType: hard + "ts-api-utils@npm:^2.1.0": version: 2.1.0 resolution: "ts-api-utils@npm:2.1.0" @@ -5095,6 +8871,83 @@ __metadata: languageName: node linkType: hard +"ts-mixer@npm:^6.0.3, ts-mixer@npm:^6.0.4": + version: 6.0.4 + resolution: "ts-mixer@npm:6.0.4" + checksum: 10c0/4c442fc99cdffd4a3f0ce55c624fb703f4ded5cab6912f97705489565c4a74d3e4213f10c33499ec5150900a628d38537a9a6a9e35b5045b65129a84b4db21ae + languageName: node + linkType: hard + +"ts-node@npm:10.9.2": + version: 10.9.2 + resolution: "ts-node@npm:10.9.2" + dependencies: + "@cspotcode/source-map-support": "npm:^0.8.0" + "@tsconfig/node10": "npm:^1.0.7" + "@tsconfig/node12": "npm:^1.0.7" + "@tsconfig/node14": "npm:^1.0.0" + "@tsconfig/node16": "npm:^1.0.2" + acorn: "npm:^8.4.1" + acorn-walk: "npm:^8.1.1" + arg: "npm:^4.1.0" + create-require: "npm:^1.1.0" + diff: "npm:^4.0.1" + make-error: "npm:^1.1.1" + v8-compile-cache-lib: "npm:^3.0.1" + yn: "npm:3.1.1" + peerDependencies: + "@swc/core": ">=1.2.50" + "@swc/wasm": ">=1.2.50" + "@types/node": "*" + typescript: ">=2.7" + peerDependenciesMeta: + "@swc/core": + optional: true + "@swc/wasm": + optional: true + bin: + ts-node: dist/bin.js + ts-node-cwd: dist/bin-cwd.js + ts-node-esm: dist/bin-esm.js + ts-node-script: dist/bin-script.js + ts-node-transpile-only: dist/bin-transpile.js + ts-script: dist/bin-script-deprecated.js + checksum: 10c0/5f29938489f96982a25ba650b64218e83a3357d76f7bede80195c65ab44ad279c8357264639b7abdd5d7e75fc269a83daa0e9c62fd8637a3def67254ecc9ddc2 + languageName: node + linkType: hard + +"ts-toolbelt@npm:^9.6.0": + version: 9.6.0 + resolution: "ts-toolbelt@npm:9.6.0" + checksum: 10c0/838f9a2f0fe881d5065257a23b402c41315b33ff987b73db3e2b39fcb70640c4c7220e1ef118ed5676763543724fdbf4eda7b0e2c17acb667ed1401336af9f8c + languageName: node + linkType: hard + +"tsconfck@npm:^2.0.1": + version: 2.1.2 + resolution: "tsconfck@npm:2.1.2" + peerDependencies: + typescript: ^4.3.5 || ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + bin: + tsconfck: bin/tsconfck.js + checksum: 10c0/6efc9cbbccdbbcafc86a744a1804fcd8438097c2beaac370444cc413fa1582a019a74002a111e3005b89ca0b0169ace730161864628fc751754e29b335c3c79f + languageName: node + linkType: hard + +"tsconfig-paths@npm:4.2.0": + version: 4.2.0 + resolution: "tsconfig-paths@npm:4.2.0" + dependencies: + json5: "npm:^2.2.2" + minimist: "npm:^1.2.6" + strip-bom: "npm:^3.0.0" + checksum: 10c0/09a5877402d082bb1134930c10249edeebc0211f36150c35e1c542e5b91f1047b1ccf7da1e59babca1ef1f014c525510f4f870de7c9bda470c73bb4e2721b3ea + languageName: node + linkType: hard + "tsconfig-paths@npm:^3.15.0": version: 3.15.0 resolution: "tsconfig-paths@npm:3.15.0" @@ -5107,7 +8960,14 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.0, tslib@npm:^2.1.0, tslib@npm:^2.4.0, tslib@npm:^2.8.0": +"tslib@npm:^1.14.1": + version: 1.14.1 + resolution: "tslib@npm:1.14.1" + checksum: 10c0/69ae09c49eea644bc5ebe1bca4fa4cc2c82b7b3e02f43b84bd891504edf66dbc6b2ec0eef31a957042de2269139e4acff911e6d186a258fb14069cd7f6febce2 + languageName: node + linkType: hard + +"tslib@npm:^2.0.0, tslib@npm:^2.1.0, tslib@npm:^2.2.0, tslib@npm:^2.3.0, tslib@npm:^2.4.0, tslib@npm:^2.6.0, tslib@npm:^2.8.0, tslib@npm:^2.8.1": version: 2.8.1 resolution: "tslib@npm:2.8.1" checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 @@ -5130,6 +8990,13 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^0.20.2": + version: 0.20.2 + resolution: "type-fest@npm:0.20.2" + checksum: 10c0/dea9df45ea1f0aaa4e2d3bed3f9a0bfe9e5b2592bddb92eb1bf06e50bcf98dbb78189668cd8bc31a0511d3fc25539b4cd5c704497e53e93e2d40ca764b10bfc3 + languageName: node + linkType: hard + "typed-array-buffer@npm:^1.0.3": version: 1.0.3 resolution: "typed-array-buffer@npm:1.0.3" @@ -5183,7 +9050,42 @@ __metadata: languageName: node linkType: hard -"typescript@npm:5.8.3": +"typedoc-plugin-markdown@npm:^4.4.2": + version: 4.7.0 + resolution: "typedoc-plugin-markdown@npm:4.7.0" + peerDependencies: + typedoc: 0.28.x + checksum: 10c0/066cb8a0f96bb24c22069830d189904d624204b7ceaaeab78c72008ebb2c2bddb55170ae39fac31352caf20516a1a2360300cf384c9683f7b42465dc2c354bd1 + languageName: node + linkType: hard + +"typedoc@npm:^0.28.0": + version: 0.28.5 + resolution: "typedoc@npm:0.28.5" + dependencies: + "@gerrit0/mini-shiki": "npm:^3.2.2" + lunr: "npm:^2.3.9" + markdown-it: "npm:^14.1.0" + minimatch: "npm:^9.0.5" + yaml: "npm:^2.7.1" + peerDependencies: + typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x + bin: + typedoc: bin/typedoc + checksum: 10c0/fc8235dbe8f14da24fdb088467b01887b3f1375b27d5caf0276ae405f03aa1f523e94aea52fe8ce1a3d477ae9e3f4f69fdc28614275445a828a77db88784e6ce + languageName: node + linkType: hard + +"types-ramda@npm:^0.30.1": + version: 0.30.1 + resolution: "types-ramda@npm:0.30.1" + dependencies: + ts-toolbelt: "npm:^9.6.0" + checksum: 10c0/4a8b230ae9772e6534f65b1a154dd5604bcd1d74e27b49686337a215e83aa8fc93e49f8c49af395418d2950cb9fb9b900662077c1d4b73ff6fe4f4bcb83ab2d6 + languageName: node + linkType: hard + +"typescript@npm:5.8.3, typescript@npm:^5.6.3": version: 5.8.3 resolution: "typescript@npm:5.8.3" bin: @@ -5193,7 +9095,7 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@npm%3A5.8.3#optional!builtin": +"typescript@patch:typescript@npm%3A5.8.3#optional!builtin, typescript@patch:typescript@npm%3A^5.6.3#optional!builtin": version: 5.8.3 resolution: "typescript@patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5" bin: @@ -5203,6 +9105,13 @@ __metadata: languageName: node linkType: hard +"uc.micro@npm:^2.0.0, uc.micro@npm:^2.1.0": + version: 2.1.0 + resolution: "uc.micro@npm:2.1.0" + checksum: 10c0/8862eddb412dda76f15db8ad1c640ccc2f47cdf8252a4a30be908d535602c8d33f9855dfcccb8b8837855c1ce1eaa563f7fa7ebe3c98fd0794351aab9b9c55fa + languageName: node + linkType: hard + "unbox-primitive@npm:^1.1.0": version: 1.1.0 resolution: "unbox-primitive@npm:1.1.0" @@ -5222,29 +9131,74 @@ __metadata: languageName: node linkType: hard -"unrs-resolver@npm:^1.6.2": - version: 1.7.11 - resolution: "unrs-resolver@npm:1.7.11" +"undici-types@npm:~7.8.0": + version: 7.8.0 + resolution: "undici-types@npm:7.8.0" + checksum: 10c0/9d9d246d1dc32f318d46116efe3cfca5a72d4f16828febc1918d94e58f6ffcf39c158aa28bf5b4fc52f410446bc7858f35151367bd7a49f21746cab6497b709b + languageName: node + linkType: hard + +"unique-filename@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-filename@npm:4.0.0" dependencies: - "@unrs/resolver-binding-darwin-arm64": "npm:1.7.11" - "@unrs/resolver-binding-darwin-x64": "npm:1.7.11" - "@unrs/resolver-binding-freebsd-x64": "npm:1.7.11" - "@unrs/resolver-binding-linux-arm-gnueabihf": "npm:1.7.11" - "@unrs/resolver-binding-linux-arm-musleabihf": "npm:1.7.11" - "@unrs/resolver-binding-linux-arm64-gnu": "npm:1.7.11" - "@unrs/resolver-binding-linux-arm64-musl": "npm:1.7.11" - "@unrs/resolver-binding-linux-ppc64-gnu": "npm:1.7.11" - "@unrs/resolver-binding-linux-riscv64-gnu": "npm:1.7.11" - "@unrs/resolver-binding-linux-riscv64-musl": "npm:1.7.11" - "@unrs/resolver-binding-linux-s390x-gnu": "npm:1.7.11" - "@unrs/resolver-binding-linux-x64-gnu": "npm:1.7.11" - "@unrs/resolver-binding-linux-x64-musl": "npm:1.7.11" - "@unrs/resolver-binding-wasm32-wasi": "npm:1.7.11" - "@unrs/resolver-binding-win32-arm64-msvc": "npm:1.7.11" - "@unrs/resolver-binding-win32-ia32-msvc": "npm:1.7.11" - "@unrs/resolver-binding-win32-x64-msvc": "npm:1.7.11" + unique-slug: "npm:^5.0.0" + checksum: 10c0/38ae681cceb1408ea0587b6b01e29b00eee3c84baee1e41fd5c16b9ed443b80fba90c40e0ba69627e30855570a34ba8b06702d4a35035d4b5e198bf5a64c9ddc + languageName: node + linkType: hard + +"unique-slug@npm:^5.0.0": + version: 5.0.0 + resolution: "unique-slug@npm:5.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: 10c0/d324c5a44887bd7e105ce800fcf7533d43f29c48757ac410afd42975de82cc38ea2035c0483f4de82d186691bf3208ef35c644f73aa2b1b20b8e651be5afd293 + languageName: node + linkType: hard + +"universalify@npm:^2.0.0": + version: 2.0.1 + resolution: "universalify@npm:2.0.1" + checksum: 10c0/73e8ee3809041ca8b818efb141801a1004e3fc0002727f1531f4de613ea281b494a40909596dae4a042a4fb6cd385af5d4db2e137b1362e0e91384b828effd3a + languageName: node + linkType: hard + +"unraw@npm:^3.0.0": + version: 3.0.0 + resolution: "unraw@npm:3.0.0" + checksum: 10c0/cd1e7a961c8dc075bdf07300bc046da6bc8c4f1b88c68191c392520f0c64914fa783d48f2431c668f79b1afbd4bab16e864c7aca3cc06ddc94567c1fec114b43 + languageName: node + linkType: hard + +"unrs-resolver@npm:^1.6.2": + version: 1.9.1 + resolution: "unrs-resolver@npm:1.9.1" + dependencies: + "@unrs/resolver-binding-android-arm-eabi": "npm:1.9.1" + "@unrs/resolver-binding-android-arm64": "npm:1.9.1" + "@unrs/resolver-binding-darwin-arm64": "npm:1.9.1" + "@unrs/resolver-binding-darwin-x64": "npm:1.9.1" + "@unrs/resolver-binding-freebsd-x64": "npm:1.9.1" + "@unrs/resolver-binding-linux-arm-gnueabihf": "npm:1.9.1" + "@unrs/resolver-binding-linux-arm-musleabihf": "npm:1.9.1" + "@unrs/resolver-binding-linux-arm64-gnu": "npm:1.9.1" + "@unrs/resolver-binding-linux-arm64-musl": "npm:1.9.1" + "@unrs/resolver-binding-linux-ppc64-gnu": "npm:1.9.1" + "@unrs/resolver-binding-linux-riscv64-gnu": "npm:1.9.1" + "@unrs/resolver-binding-linux-riscv64-musl": "npm:1.9.1" + "@unrs/resolver-binding-linux-s390x-gnu": "npm:1.9.1" + "@unrs/resolver-binding-linux-x64-gnu": "npm:1.9.1" + "@unrs/resolver-binding-linux-x64-musl": "npm:1.9.1" + "@unrs/resolver-binding-wasm32-wasi": "npm:1.9.1" + "@unrs/resolver-binding-win32-arm64-msvc": "npm:1.9.1" + "@unrs/resolver-binding-win32-ia32-msvc": "npm:1.9.1" + "@unrs/resolver-binding-win32-x64-msvc": "npm:1.9.1" napi-postinstall: "npm:^0.2.2" dependenciesMeta: + "@unrs/resolver-binding-android-arm-eabi": + optional: true + "@unrs/resolver-binding-android-arm64": + optional: true "@unrs/resolver-binding-darwin-arm64": optional: true "@unrs/resolver-binding-darwin-x64": @@ -5279,7 +9233,7 @@ __metadata: optional: true "@unrs/resolver-binding-win32-x64-msvc": optional: true - checksum: 10c0/37e6caf2884b7ce65f77fc5b945997b94523656d477ae0e67fb8df970939930b674091f3fac6beee93b0370fa64a925ad707edc76897aa8cb14866efbe4a6693 + checksum: 10c0/fded9251b6c180c92c0510abe63e4fa9a5a4adcdcf3c9f7920507dc9f1ec756de5e71d1258f12bf4a32f7042e1fe142b6dc1003d8a6fb4d0bf1234226c879b01 languageName: node linkType: hard @@ -5292,6 +9246,23 @@ __metadata: languageName: node linkType: hard +"urijs@npm:^1.19.11": + version: 1.19.11 + resolution: "urijs@npm:1.19.11" + checksum: 10c0/96e15eea5b41a99361d506e4d8fcc64dc43f334bd5fd34e08261467b6954b97a6b45929a8d6c79e2dc76aadfd6ca950e0f4bd7f3c0757a08978429634d07eda1 + languageName: node + linkType: hard + +"url-parse@npm:^1.5.10": + version: 1.5.10 + resolution: "url-parse@npm:1.5.10" + dependencies: + querystringify: "npm:^2.1.1" + requires-port: "npm:^1.0.0" + checksum: 10c0/bd5aa9389f896974beb851c112f63b466505a04b4807cea2e5a3b7092f6fbb75316f0491ea84e44f66fed55f1b440df5195d7e3a8203f64fcefa19d182f5be87 + languageName: node + linkType: hard + "use-callback-ref@npm:^1.3.3": version: 1.3.3 resolution: "use-callback-ref@npm:1.3.3" @@ -5323,6 +9294,67 @@ __metadata: languageName: node linkType: hard +"use-sync-external-store@npm:^1.4.0": + version: 1.5.0 + resolution: "use-sync-external-store@npm:1.5.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: 10c0/1b8663515c0be34fa653feb724fdcce3984037c78dd4a18f68b2c8be55cc1a1084c578d5b75f158d41b5ddffc2bf5600766d1af3c19c8e329bb20af2ec6f52f4 + languageName: node + linkType: hard + +"utility-types@npm:^3.10.0": + version: 3.11.0 + resolution: "utility-types@npm:3.11.0" + checksum: 10c0/2f1580137b0c3e6cf5405f37aaa8f5249961a76d26f1ca8efc0ff49a2fc0e0b2db56de8e521a174d075758e0c7eb3e590edec0832eb44478b958f09914920f19 + languageName: node + linkType: hard + +"v8-compile-cache-lib@npm:^3.0.1": + version: 3.0.1 + resolution: "v8-compile-cache-lib@npm:3.0.1" + checksum: 10c0/bdc36fb8095d3b41df197f5fb6f11e3a26adf4059df3213e3baa93810d8f0cc76f9a74aaefc18b73e91fe7e19154ed6f134eda6fded2e0f1c8d2272ed2d2d391 + languageName: node + linkType: hard + +"validator@npm:^13.11.0": + version: 13.15.15 + resolution: "validator@npm:13.15.15" + checksum: 10c0/f5349d1fbb9cc36f9f6c5dab1880764ddad1d0d2b084e2a71e5964f7de1635d20e406611559df9a3db24828ce775cbee5e3b6dd52f0d555a61939ed7ea5990bd + languageName: node + linkType: hard + +"web-streams-polyfill@npm:^3.0.3": + version: 3.3.3 + resolution: "web-streams-polyfill@npm:3.3.3" + checksum: 10c0/64e855c47f6c8330b5436147db1c75cb7e7474d924166800e8e2aab5eb6c76aac4981a84261dd2982b3e754490900b99791c80ae1407a9fa0dcff74f82ea3a7f + languageName: node + linkType: hard + +"web-tree-sitter@npm:=0.24.5": + version: 0.24.5 + resolution: "web-tree-sitter@npm:0.24.5" + checksum: 10c0/e6b88e4967227ab4272fb20a063882fe877c6a948a0367e6fae324807a31f082151f5110f1f2beeddba98714af20bc13cb6b62aac6aad986e24da31796ba1ce1 + languageName: node + linkType: hard + +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: 10c0/5612d5f3e54760a797052eb4927f0ddc01383550f542ccd33d5238cfd65aeed392a45ad38364970d0a0f4fea32e1f4d231b3d8dac4a3bdd385e5cf802ae097db + languageName: node + linkType: hard + +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: "npm:~0.0.3" + webidl-conversions: "npm:^3.0.0" + checksum: 10c0/1588bed84d10b72d5eec1d0faa0722ba1962f1821e7539c535558fb5398d223b0c50d8acab950b8c488b4ba69043fd833cc2697056b167d8ad46fac3995a55d5 + languageName: node + linkType: hard + "which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1": version: 1.1.1 resolution: "which-boxed-primitive@npm:1.1.1" @@ -5395,6 +9427,17 @@ __metadata: languageName: node linkType: hard +"which@npm:^5.0.0": + version: 5.0.0 + resolution: "which@npm:5.0.0" + dependencies: + isexe: "npm:^3.1.1" + bin: + node-which: bin/which.js + checksum: 10c0/e556e4cd8b7dbf5df52408c9a9dd5ac6518c8c5267c8953f5b0564073c66ed5bf9503b14d876d0e9c7844d4db9725fb0dcf45d6e911e17e26ab363dc3965ae7b + languageName: node + linkType: hard + "word-wrap@npm:^1.2.5": version: 1.2.5 resolution: "word-wrap@npm:1.2.5" @@ -5402,6 +9445,65 @@ __metadata: languageName: node linkType: hard +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: "npm:^6.1.0" + string-width: "npm:^5.0.1" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 + languageName: node + linkType: hard + +"xml-but-prettier@npm:^1.0.1": + version: 1.0.1 + resolution: "xml-but-prettier@npm:1.0.1" + dependencies: + repeat-string: "npm:^1.5.2" + checksum: 10c0/d493d7bf0f9f94faa9e6e142355045cbab10593770fa1a5e502369169f4abb1ab7ff134194f7de501ccebfe0f440a72b97363b1ad55172d3cd21fc2eab0b7ce9 + languageName: node + linkType: hard + +"xml@npm:=1.0.1": + version: 1.0.1 + resolution: "xml@npm:1.0.1" + checksum: 10c0/04bcc9b8b5e7b49392072fbd9c6b0f0958bd8e8f8606fee460318e43991349a68cbc5384038d179ff15aef7d222285f69ca0f067f53d071084eb14c7fdb30411 + languageName: node + linkType: hard + +"xtend@npm:^4.0.0": + version: 4.0.2 + resolution: "xtend@npm:4.0.2" + checksum: 10c0/366ae4783eec6100f8a02dff02ac907bf29f9a00b82ac0264b4d8b832ead18306797e283cf19de776538babfdcb2101375ec5646b59f08c52128ac4ab812ed0e + languageName: node + linkType: hard + +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 10c0/4df2842c36e468590c3691c894bc9cdbac41f520566e76e24f59401ba7d8b4811eb1e34524d57e54bc6d864bcb66baab7ffd9ca42bf1eda596618f9162b91249 + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a + languageName: node + linkType: hard + "yallist@npm:^5.0.0": version: 5.0.0 resolution: "yallist@npm:5.0.0" @@ -5409,6 +9511,51 @@ __metadata: languageName: node linkType: hard +"yaml@npm:^1.10.0": + version: 1.10.2 + resolution: "yaml@npm:1.10.2" + checksum: 10c0/5c28b9eb7adc46544f28d9a8d20c5b3cb1215a886609a2fd41f51628d8aaa5878ccd628b755dbcd29f6bb4921bd04ffbc6dcc370689bb96e594e2f9813d2605f + languageName: node + linkType: hard + +"yaml@npm:^2.3.4, yaml@npm:^2.5.0, yaml@npm:^2.7.1": + version: 2.8.0 + resolution: "yaml@npm:2.8.0" + bin: + yaml: bin.mjs + checksum: 10c0/f6f7310cf7264a8107e72c1376f4de37389945d2fb4656f8060eca83f01d2d703f9d1b925dd8f39852a57034fafefde6225409ddd9f22aebfda16c6141b71858 + languageName: node + linkType: hard + +"yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: 10c0/f84b5e48169479d2f402239c59f084cfd1c3acc197a05c59b98bab067452e6b3ea46d4dd8ba2985ba7b3d32a343d77df0debd6b343e5dae3da2aab2cdf5886b2 + languageName: node + linkType: hard + +"yargs@npm:^17.0.1": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" + dependencies: + cliui: "npm:^8.0.1" + escalade: "npm:^3.1.1" + get-caller-file: "npm:^2.0.5" + require-directory: "npm:^2.1.1" + string-width: "npm:^4.2.3" + y18n: "npm:^5.0.5" + yargs-parser: "npm:^21.1.1" + checksum: 10c0/ccd7e723e61ad5965fffbb791366db689572b80cca80e0f96aad968dfff4156cd7cd1ad18607afe1046d8241e6fb2d6c08bf7fa7bfb5eaec818735d8feac8f05 + languageName: node + linkType: hard + +"yn@npm:3.1.1": + version: 3.1.1 + resolution: "yn@npm:3.1.1" + checksum: 10c0/0732468dd7622ed8a274f640f191f3eaf1f39d5349a1b72836df484998d7d9807fbea094e2f5486d6b0cd2414aad5775972df0e68f8604db89a239f0f4bf7443 + languageName: node + linkType: hard + "yocto-queue@npm:^0.1.0": version: 0.1.0 resolution: "yocto-queue@npm:0.1.0" @@ -5416,6 +9563,13 @@ __metadata: languageName: node linkType: hard +"zenscroll@npm:^4.0.2": + version: 4.0.2 + resolution: "zenscroll@npm:4.0.2" + checksum: 10c0/419e87ebe3a22a3b2ac22cd02aeccb900c9c330f539efdb1efc382090157d466373ee615812caef5bbe2da140e3c7df222236c8cfd8e697e97d4d91cf3f81c63 + languageName: node + linkType: hard + "zod@npm:^3.25.60": version: 3.25.67 resolution: "zod@npm:3.25.67" From 3e890d4363310bd3404c4710d10b4e0f3b0bbf83 Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Fri, 20 Jun 2025 13:28:33 +0200 Subject: [PATCH 15/39] feat(api): implement /api/user/me endpoint --- src/app/api/user/me/route.ts | 119 ++++++++++++++++++++++++ src/app/api/user/me/swagger.ts | 63 +++++++++++++ src/app/api/user/me/validation.ts | 21 +++++ src/app/api/user/validation.ts | 149 ++++++++++++++++++++++++++++++ src/app/api/validation.ts | 87 +++++++++++++++++ 5 files changed, 439 insertions(+) create mode 100644 src/app/api/user/me/route.ts create mode 100644 src/app/api/user/me/swagger.ts create mode 100644 src/app/api/user/me/validation.ts create mode 100644 src/app/api/user/validation.ts create mode 100644 src/app/api/validation.ts diff --git a/src/app/api/user/me/route.ts b/src/app/api/user/me/route.ts new file mode 100644 index 0000000..5ba9792 --- /dev/null +++ b/src/app/api/user/me/route.ts @@ -0,0 +1,119 @@ +import { auth } from '@/auth'; +import { prisma } from '@/prisma'; +import { updateUserServerSchema } from './validation'; +import { + returnZodTypeCheckedResponse, + userAuthenticated, +} from '@/lib/apiHelpers'; +import { FullUserResponseSchema } from '../validation'; +import { + ErrorResponseSchema, + ZodErrorResponseSchema, +} from '@/app/api/validation'; + +export const GET = auth(async function GET(req) { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const dbUser = await prisma.user.findUnique({ + where: { + id: authCheck.user.id, + }, + select: { + id: true, + name: true, + first_name: true, + last_name: true, + email: true, + image: true, + timezone: true, + created_at: true, + updated_at: true, + }, + }); + if (!dbUser) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { + success: false, + message: 'User not found', + }, + { status: 404 }, + ); + + return returnZodTypeCheckedResponse(FullUserResponseSchema, { + success: true, + user: dbUser, + }); +}); + +export const PATCH = auth(async function PATCH(req) { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const dataRaw = await req.json(); + const data = await updateUserServerSchema.safeParseAsync(dataRaw); + if (!data.success) { + return returnZodTypeCheckedResponse( + ZodErrorResponseSchema, + { + success: false, + message: 'Invalid request data', + errors: data.error.issues, + }, + { status: 400 }, + ); + } + if (Object.keys(data.data).length === 0) { + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'No data to update' }, + { status: 400 }, + ); + } + + const updatedUser = await prisma.user.update({ + where: { + id: authCheck.user.id, + }, + data: data.data, + select: { + id: true, + name: true, + first_name: true, + last_name: true, + email: true, + image: true, + timezone: true, + created_at: true, + updated_at: true, + }, + }); + if (!updatedUser) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { + success: false, + message: 'User not found', + }, + { status: 404 }, + ); + return returnZodTypeCheckedResponse( + FullUserResponseSchema, + { + success: true, + user: updatedUser, + }, + { status: 200 }, + ); +}); diff --git a/src/app/api/user/me/swagger.ts b/src/app/api/user/me/swagger.ts new file mode 100644 index 0000000..e0a36a1 --- /dev/null +++ b/src/app/api/user/me/swagger.ts @@ -0,0 +1,63 @@ +import { OpenAPIRegistry } from '@asteasolutions/zod-to-openapi'; +import { FullUserResponseSchema } from '../validation'; +import { updateUserServerSchema } from './validation'; +import { + invalidRequestDataResponse, + notAuthenticatedResponse, + serverReturnedDataValidationErrorResponse, + userNotFoundResponse, +} from '@/lib/defaultApiResponses'; + +export default function registerSwaggerPaths(registry: OpenAPIRegistry) { + registry.registerPath({ + method: 'get', + path: '/api/user/me', + description: 'Get the currently authenticated user', + responses: { + 200: { + description: 'User information retrieved successfully', + content: { + 'application/json': { + schema: FullUserResponseSchema, + }, + }, + }, + ...notAuthenticatedResponse, + ...userNotFoundResponse, + ...serverReturnedDataValidationErrorResponse, + }, + tags: ['User'], + }); + + registry.registerPath({ + method: 'patch', + path: '/api/user/me', + description: 'Update the currently authenticated user', + request: { + body: { + description: 'User information to update', + required: true, + content: { + 'application/json': { + schema: updateUserServerSchema, + }, + }, + }, + }, + responses: { + 200: { + description: 'User information updated successfully', + content: { + 'application/json': { + schema: FullUserResponseSchema, + }, + }, + }, + ...invalidRequestDataResponse, + ...notAuthenticatedResponse, + ...userNotFoundResponse, + ...serverReturnedDataValidationErrorResponse, + }, + tags: ['User'], + }); +} diff --git a/src/app/api/user/me/validation.ts b/src/app/api/user/me/validation.ts new file mode 100644 index 0000000..49c6219 --- /dev/null +++ b/src/app/api/user/me/validation.ts @@ -0,0 +1,21 @@ +import zod from 'zod/v4'; +import { + firstNameSchema, + lastNameSchema, + newUserEmailServerSchema, + newUserNameServerSchema, +} from '@/app/api/user/validation'; + +// ---------------------------------------- +// +// Update User Validation +// +// ---------------------------------------- +export const updateUserServerSchema = zod.object({ + name: newUserNameServerSchema.optional(), + first_name: firstNameSchema.optional(), + last_name: lastNameSchema.optional(), + email: newUserEmailServerSchema.optional(), + image: zod.string().optional(), + timezone: zod.string().optional(), +}); diff --git a/src/app/api/user/validation.ts b/src/app/api/user/validation.ts new file mode 100644 index 0000000..79b1e7e --- /dev/null +++ b/src/app/api/user/validation.ts @@ -0,0 +1,149 @@ +import { extendZodWithOpenApi } from '@asteasolutions/zod-to-openapi'; +import { prisma } from '@/prisma'; +import zod from 'zod/v4'; + +extendZodWithOpenApi(zod); + +// ---------------------------------------- +// +// Email Validation +// +// ---------------------------------------- +export const emailSchema = zod + .email('Invalid email address') + .min(3, 'Email is required'); + +export const newUserEmailServerSchema = emailSchema.refine(async (val) => { + const existingUser = await prisma.user.findUnique({ + where: { email: val }, + }); + return !existingUser; +}, 'Email in use by another account'); + +export const existingUserEmailServerSchema = emailSchema.refine(async (val) => { + const existingUser = await prisma.user.findUnique({ + where: { email: val }, + }); + return !!existingUser; +}, 'Email not found'); + +// ---------------------------------------- +// +// First Name Validation +// +// ---------------------------------------- +export const firstNameSchema = zod + .string() + .min(1, 'First name is required') + .max(32, 'First name must be at most 32 characters long'); + +// ---------------------------------------- +// +// Last Name Validation +// +// ---------------------------------------- +export const lastNameSchema = zod + .string() + .min(1, 'Last name is required') + .max(32, 'Last name must be at most 32 characters long'); + +// ---------------------------------------- +// +// Username Validation +// +// ---------------------------------------- +export const userNameSchema = zod + .string() + .min(3, 'Username is required') + .max(32, 'Username must be at most 32 characters long') + .regex( + /^[a-zA-Z0-9_]+$/, + 'Username can only contain letters, numbers, and underscores', + ); + +export const newUserNameServerSchema = userNameSchema.refine(async (val) => { + const existingUser = await prisma.user.findUnique({ + where: { name: val }, + }); + return !existingUser; +}, 'Username in use by another account'); + +export const existingUserNameServerSchema = userNameSchema.refine( + async (val) => { + const existingUser = await prisma.user.findUnique({ + where: { name: val }, + }); + return !!existingUser; + }, + 'Username not found', +); + +// ---------------------------------------- +// +// User ID Validation +// +// ---------------------------------------- +export const existingUserIdServerSchema = zod + .string() + .min(1, 'User ID is required') + .refine(async (val) => { + const user = await prisma.user.findUnique({ + where: { id: val }, + }); + return !!user; + }, 'User not found'); + +// ---------------------------------------- +// +// Password Validation +// +// ---------------------------------------- +export const passwordSchema = zod + .string() + .min(8, 'Password must be at least 8 characters long') + .max(128, 'Password must be at most 128 characters long') + .regex( + /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*()_+={}\[\]:;"'<>,.?\/\\-]).{8,}$/, + 'Password must contain at least one uppercase letter, one lowercase letter, one number, and one special character', + ); + +// ---------------------------------------- +// +// User Schema Validation (for API responses) +// +// ---------------------------------------- +export const FullUserSchema = zod + .object({ + id: zod.string(), + name: zod.string(), + first_name: zod.string().nullish(), + last_name: zod.string().nullish(), + email: zod.email(), + image: zod.string().nullish(), + timezone: zod.string(), + created_at: zod.date(), + updated_at: zod.date(), + }) + .openapi('FullUser', { + description: 'Full user information including all fields', + }); + +export const PublicUserSchema = FullUserSchema.pick({ + id: true, + name: true, + first_name: true, + last_name: true, + image: true, + timezone: true, +}).openapi('PublicUser', { + description: 'Public user information excluding sensitive data', +}); + +export const FullUserResponseSchema = zod.object({ + success: zod.boolean(), + user: FullUserSchema, +}); +export const PublicUserResponseSchema = zod.object({ + success: zod.boolean(), + user: PublicUserSchema, +}); diff --git a/src/app/api/validation.ts b/src/app/api/validation.ts new file mode 100644 index 0000000..38b95bd --- /dev/null +++ b/src/app/api/validation.ts @@ -0,0 +1,87 @@ +import { registry } from '@/lib/swagger'; +import { extendZodWithOpenApi } from '@asteasolutions/zod-to-openapi'; +import zod from 'zod/v4'; + +extendZodWithOpenApi(zod); + +export const ErrorResponseSchema = zod + .object({ + success: zod.boolean(), + message: zod.string(), + }) + .openapi('ErrorResponseSchema', { + description: 'Error response schema', + example: { + success: false, + message: 'An error occurred', + }, + }); + +export const ZodErrorResponseSchema = ErrorResponseSchema.extend({ + errors: zod.array( + zod.object({ + expected: zod.string().optional(), + code: zod.string(), + path: zod.array( + zod + .string() + .or(zod.number()) + .or( + zod.symbol().openapi({ + type: 'string', + }), + ), + ), + message: zod.string(), + }), + ), +}).openapi('ZodErrorResponseSchema', { + description: 'Zod error response schema', + example: { + success: false, + message: 'Invalid request data', + errors: [ + { + expected: 'string', + code: 'invalid_type', + path: ['first_name'], + message: 'Invalid input: expected string, received number', + }, + ], + }, +}); + +export const SuccessResponseSchema = zod + .object({ + success: zod.boolean(), + message: zod.string().optional(), + }) + .openapi('SuccessResponseSchema', { + description: 'Success response schema', + example: { + success: true, + message: 'Operation completed successfully', + }, + }); + +export const UserIdParamSchema = registry.registerParameter( + 'UserIdOrNameParam', + zod.string().openapi({ + param: { + name: 'user', + in: 'path', + }, + example: '12345', + }), +); + +export const EventIdParamSchema = registry.registerParameter( + 'EventIdParam', + zod.string().openapi({ + param: { + name: 'eventID', + in: 'path', + }, + example: '67890', + }), +); From eb04c276abee719963ad90a7eb090a021adfcb7e Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Fri, 20 Jun 2025 13:28:59 +0200 Subject: [PATCH 16/39] feat(api): implement /api/user/[user] endpoint --- src/app/api/user/[user]/route.ts | 55 ++++++++++++++++++++++++++++++ src/app/api/user/[user]/swagger.ts | 33 ++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 src/app/api/user/[user]/route.ts create mode 100644 src/app/api/user/[user]/swagger.ts diff --git a/src/app/api/user/[user]/route.ts b/src/app/api/user/[user]/route.ts new file mode 100644 index 0000000..b90b1f8 --- /dev/null +++ b/src/app/api/user/[user]/route.ts @@ -0,0 +1,55 @@ +import { auth } from '@/auth'; +import { prisma } from '@/prisma'; +import { + returnZodTypeCheckedResponse, + userAuthenticated, +} from '@/lib/apiHelpers'; +import { PublicUserResponseSchema } from '../validation'; +import { ErrorResponseSchema } from '@/app/api/validation'; + +export const GET = auth(async function GET(req, { params }) { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const requestedUser = (await params).user; + const dbUser = await prisma.user.findFirst({ + where: { + OR: [{ id: requestedUser }, { name: requestedUser }], + }, + select: { + id: true, + name: true, + first_name: true, + last_name: true, + email: true, + created_at: true, + updated_at: true, + image: true, + timezone: true, + }, + }); + + if (!dbUser) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { + success: false, + message: 'User not found', + }, + { status: 404 }, + ); + + return returnZodTypeCheckedResponse( + PublicUserResponseSchema, + { + success: true, + user: dbUser, + }, + { status: 200 }, + ); +}); diff --git a/src/app/api/user/[user]/swagger.ts b/src/app/api/user/[user]/swagger.ts new file mode 100644 index 0000000..741cbf9 --- /dev/null +++ b/src/app/api/user/[user]/swagger.ts @@ -0,0 +1,33 @@ +import { PublicUserResponseSchema } from '../validation'; +import { + notAuthenticatedResponse, + userNotFoundResponse, +} from '@/lib/defaultApiResponses'; +import { OpenAPIRegistry } from '@asteasolutions/zod-to-openapi'; +import zod from 'zod/v4'; +import { UserIdParamSchema } from '../../validation'; + +export default function registerSwaggerPaths(registry: OpenAPIRegistry) { + registry.registerPath({ + method: 'get', + path: '/api/user/{user}', + request: { + params: zod.object({ + user: UserIdParamSchema, + }), + }, + responses: { + 200: { + description: 'User information retrieved successfully.', + content: { + 'application/json': { + schema: PublicUserResponseSchema, + }, + }, + }, + ...notAuthenticatedResponse, + ...userNotFoundResponse, + }, + tags: ['User'], + }); +} From c71de4a14cd241623cf66007d5966af5a462b46b Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Fri, 20 Jun 2025 13:29:22 +0200 Subject: [PATCH 17/39] feat(api): implement /api/user/[user]/calendar endpoint --- src/app/api/user/[user]/calendar/route.ts | 212 ++++++++++++++++++ src/app/api/user/[user]/calendar/swagger.ts | 37 +++ .../api/user/[user]/calendar/validation.ts | 99 ++++++++ 3 files changed, 348 insertions(+) create mode 100644 src/app/api/user/[user]/calendar/route.ts create mode 100644 src/app/api/user/[user]/calendar/swagger.ts create mode 100644 src/app/api/user/[user]/calendar/validation.ts diff --git a/src/app/api/user/[user]/calendar/route.ts b/src/app/api/user/[user]/calendar/route.ts new file mode 100644 index 0000000..f6b6098 --- /dev/null +++ b/src/app/api/user/[user]/calendar/route.ts @@ -0,0 +1,212 @@ +import { auth } from '@/auth'; +import { prisma } from '@/prisma'; +import { + returnZodTypeCheckedResponse, + userAuthenticated, +} from '@/lib/apiHelpers'; +import { + userCalendarQuerySchema, + UserCalendarResponseSchema, + UserCalendarSchema, +} from './validation'; +import { + ErrorResponseSchema, + ZodErrorResponseSchema, +} from '@/app/api/validation'; +import { z } from 'zod/v4'; + +export const GET = auth(async function GET(req, { params }) { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const dataRaw = Object.fromEntries(new URL(req.url).searchParams); + const data = await userCalendarQuerySchema.safeParseAsync(dataRaw); + if (!data.success) + return returnZodTypeCheckedResponse( + ZodErrorResponseSchema, + { + success: false, + message: 'Invalid request data', + errors: data.error.issues, + }, + { status: 400 }, + ); + const { end, start } = data.data; + + const requestUserId = authCheck.user.id; + + const requestedUserId = (await params).user; + + const requestedUser = await prisma.user.findFirst({ + where: { + id: requestedUserId, + }, + select: { + meetingParts: { + where: { + meeting: { + start_time: { + lte: end, + }, + end_time: { + gte: start, + }, + }, + }, + orderBy: { + meeting: { + start_time: 'asc', + }, + }, + select: { + meeting: { + select: { + id: true, + title: true, + description: true, + start_time: true, + end_time: true, + status: true, + location: true, + created_at: true, + updated_at: true, + organizer_id: true, + participants: { + select: { + user: { + select: { + id: true, + }, + }, + }, + }, + }, + }, + }, + }, + meetingsOrg: { + where: { + start_time: { + lte: end, + }, + end_time: { + gte: start, + }, + }, + orderBy: { + start_time: 'asc', + }, + select: { + id: true, + title: true, + description: true, + start_time: true, + end_time: true, + status: true, + location: true, + created_at: true, + updated_at: true, + organizer_id: true, + participants: { + select: { + user: { + select: { + id: true, + }, + }, + }, + }, + }, + }, + blockedSlots: { + where: { + start_time: { + lte: end, + }, + end_time: { + gte: start, + }, + }, + orderBy: { + start_time: 'asc', + }, + select: { + id: requestUserId === requestedUserId ? true : false, + reason: requestUserId === requestedUserId ? true : false, + start_time: true, + end_time: true, + is_recurring: requestUserId === requestedUserId ? true : false, + recurrence_end_date: requestUserId === requestedUserId ? true : false, + rrule: requestUserId === requestedUserId ? true : false, + created_at: requestUserId === requestedUserId ? true : false, + updated_at: requestUserId === requestedUserId ? true : false, + }, + }, + }, + }); + + if (!requestedUser) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'User not found' }, + { status: 404 }, + ); + + const calendar: z.input = []; + + for (const event of requestedUser.meetingParts) { + if ( + event.meeting.participants.some((p) => p.user.id === requestUserId) || + event.meeting.organizer_id === requestUserId + ) { + calendar.push({ ...event.meeting, type: 'event' }); + } else { + calendar.push({ + start_time: event.meeting.start_time, + end_time: event.meeting.end_time, + type: 'blocked_private', + }); + } + } + + for (const event of requestedUser.meetingsOrg) { + if ( + event.participants.some((p) => p.user.id === requestUserId) || + event.organizer_id === requestUserId + ) { + calendar.push({ ...event, type: 'event' }); + } else { + calendar.push({ + start_time: event.start_time, + end_time: event.end_time, + type: 'blocked_private', + }); + } + } + + for (const slot of requestedUser.blockedSlots) { + calendar.push({ + start_time: slot.start_time, + end_time: slot.end_time, + id: slot.id, + reason: slot.reason, + is_recurring: slot.is_recurring, + recurrence_end_date: slot.recurrence_end_date, + rrule: slot.rrule, + created_at: slot.created_at, + updated_at: slot.updated_at, + type: + requestUserId === requestedUserId ? 'blocked_owned' : 'blocked_private', + }); + } + + return returnZodTypeCheckedResponse(UserCalendarResponseSchema, { + success: true, + calendar, + }); +}); diff --git a/src/app/api/user/[user]/calendar/swagger.ts b/src/app/api/user/[user]/calendar/swagger.ts new file mode 100644 index 0000000..fb48629 --- /dev/null +++ b/src/app/api/user/[user]/calendar/swagger.ts @@ -0,0 +1,37 @@ +import { + userCalendarQuerySchema, + UserCalendarResponseSchema, +} from './validation'; +import { + notAuthenticatedResponse, + userNotFoundResponse, +} from '@/lib/defaultApiResponses'; +import { OpenAPIRegistry } from '@asteasolutions/zod-to-openapi'; +import zod from 'zod/v4'; +import { UserIdParamSchema } from '@/app/api/validation'; + +export default function registerSwaggerPaths(registry: OpenAPIRegistry) { + registry.registerPath({ + method: 'get', + path: '/api/user/{user}/calendar', + request: { + params: zod.object({ + user: UserIdParamSchema, + }), + query: userCalendarQuerySchema, + }, + responses: { + 200: { + description: 'User calendar retrieved successfully.', + content: { + 'application/json': { + schema: UserCalendarResponseSchema, + }, + }, + }, + ...notAuthenticatedResponse, + ...userNotFoundResponse, + }, + tags: ['User'], + }); +} diff --git a/src/app/api/user/[user]/calendar/validation.ts b/src/app/api/user/[user]/calendar/validation.ts new file mode 100644 index 0000000..a0d179f --- /dev/null +++ b/src/app/api/user/[user]/calendar/validation.ts @@ -0,0 +1,99 @@ +import { extendZodWithOpenApi } from '@asteasolutions/zod-to-openapi'; +import zod from 'zod/v4'; +import { + eventEndTimeSchema, + EventSchema, + eventStartTimeSchema, +} from '@/app/api/event/validation'; + +extendZodWithOpenApi(zod); + +export const BlockedSlotSchema = zod + .object({ + start_time: eventStartTimeSchema, + end_time: eventEndTimeSchema, + type: zod.literal('blocked_private'), + }) + .openapi('BlockedSlotSchema', { + description: 'Blocked time slot in the user calendar', + }); + +export const OwnedBlockedSlotSchema = BlockedSlotSchema.extend({ + id: zod.string(), + reason: zod.string().nullish(), + is_recurring: zod.boolean().default(false), + recurrence_end_date: zod.date().nullish(), + rrule: zod.string().nullish(), + created_at: zod.date().nullish(), + updated_at: zod.date().nullish(), + type: zod.literal('blocked_owned'), +}).openapi('OwnedBlockedSlotSchema', { + description: 'Blocked slot owned by the user', +}); + +export const VisibleSlotSchema = EventSchema.omit({ + organizer: true, + participants: true, +}) + .extend({ + type: zod.literal('event'), + }) + .openapi('VisibleSlotSchema', { + description: 'Visible time slot in the user calendar', + }); + +export const UserCalendarSchema = zod + .array(VisibleSlotSchema.or(BlockedSlotSchema).or(OwnedBlockedSlotSchema)) + .openapi('UserCalendarSchema', { + description: 'Array of events in the user calendar', + }); + +export const UserCalendarResponseSchema = zod.object({ + success: zod.boolean().default(true), + calendar: UserCalendarSchema, +}); + +export const userCalendarQuerySchema = zod + .object({ + start: zod.iso + .datetime() + .optional() + .transform((val) => { + if (val) return new Date(val); + const now = new Date(); + const startOfWeek = new Date( + now.getFullYear(), + now.getMonth(), + now.getDate() - now.getDay(), + ); + return startOfWeek; + }), + end: zod.iso + .datetime() + .optional() + .transform((val) => { + if (val) return new Date(val); + const now = new Date(); + const endOfWeek = new Date( + now.getFullYear(), + now.getMonth(), + now.getDate() + (6 - now.getDay()), + ); + return endOfWeek; + }), + }) + .openapi('UserCalendarQuerySchema', { + description: 'Query parameters for filtering the user calendar', + properties: { + start: { + type: 'string', + format: 'date-time', + description: 'Start date for filtering the calendar events', + }, + end: { + type: 'string', + format: 'date-time', + description: 'End date for filtering the calendar events', + }, + }, + }); From b10b374b841bb56664f74198ce249688f6271594 Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Fri, 20 Jun 2025 13:29:41 +0200 Subject: [PATCH 18/39] feat(api): implement /api/search/user endpoint --- src/app/api/search/user/route.ts | 79 +++++++++++++++++++++++++++ src/app/api/search/user/swagger.ts | 33 +++++++++++ src/app/api/search/user/validation.ts | 20 +++++++ 3 files changed, 132 insertions(+) create mode 100644 src/app/api/search/user/route.ts create mode 100644 src/app/api/search/user/swagger.ts create mode 100644 src/app/api/search/user/validation.ts diff --git a/src/app/api/search/user/route.ts b/src/app/api/search/user/route.ts new file mode 100644 index 0000000..a8b6414 --- /dev/null +++ b/src/app/api/search/user/route.ts @@ -0,0 +1,79 @@ +import { auth } from '@/auth'; +import { prisma } from '@/prisma'; +import { searchUserSchema, searchUserResponseSchema } from './validation'; +import { + returnZodTypeCheckedResponse, + userAuthenticated, +} from '@/lib/apiHelpers'; +import { + ErrorResponseSchema, + ZodErrorResponseSchema, +} from '@/app/api/validation'; + +export const GET = auth(async function GET(req) { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const dataRaw = Object.fromEntries(new URL(req.url).searchParams); + const data = await searchUserSchema.safeParseAsync(dataRaw); + if (!data.success) + return returnZodTypeCheckedResponse( + ZodErrorResponseSchema, + { + success: false, + message: 'Invalid request data', + errors: data.error.issues, + }, + { status: 400 }, + ); + const { query, count, page, sort_by, sort_order } = data.data; + + const dbUsers = await prisma.user.findMany({ + where: { + OR: [ + { name: { contains: query } }, + { first_name: { contains: query } }, + { last_name: { contains: query } }, + ], + }, + orderBy: { + [sort_by]: sort_order, + }, + skip: (page - 1) * count, + take: count, + select: { + id: true, + name: true, + first_name: true, + last_name: true, + timezone: true, + image: true, + }, + }); + + const userCount = await prisma.user.count({ + where: { + OR: [ + { name: { contains: query } }, + { first_name: { contains: query } }, + { last_name: { contains: query } }, + ], + }, + }); + + return returnZodTypeCheckedResponse( + searchUserResponseSchema, + { + success: true, + users: dbUsers, + total_count: userCount, + total_pages: Math.ceil(userCount / count), + }, + { status: 200 }, + ); +}); diff --git a/src/app/api/search/user/swagger.ts b/src/app/api/search/user/swagger.ts new file mode 100644 index 0000000..90ca54e --- /dev/null +++ b/src/app/api/search/user/swagger.ts @@ -0,0 +1,33 @@ +import { OpenAPIRegistry } from '@asteasolutions/zod-to-openapi'; +import { searchUserResponseSchema, searchUserSchema } from './validation'; +import { + invalidRequestDataResponse, + notAuthenticatedResponse, + serverReturnedDataValidationErrorResponse, + userNotFoundResponse, +} from '@/lib/defaultApiResponses'; + +export default function registerSwaggerPaths(registry: OpenAPIRegistry) { + registry.registerPath({ + method: 'get', + path: '/api/search/user', + request: { + query: searchUserSchema, + }, + responses: { + 200: { + description: 'User search results', + content: { + 'application/json': { + schema: searchUserResponseSchema, + }, + }, + }, + ...invalidRequestDataResponse, + ...notAuthenticatedResponse, + ...userNotFoundResponse, + ...serverReturnedDataValidationErrorResponse, + }, + tags: ['Search'], + }); +} diff --git a/src/app/api/search/user/validation.ts b/src/app/api/search/user/validation.ts new file mode 100644 index 0000000..c1662b0 --- /dev/null +++ b/src/app/api/search/user/validation.ts @@ -0,0 +1,20 @@ +import zod from 'zod/v4'; +import { PublicUserSchema } from '../../user/validation'; + +export const searchUserSchema = zod.object({ + query: zod.string().optional().default(''), + count: zod.coerce.number().min(1).max(100).default(10), + page: zod.coerce.number().min(1).default(1), + sort_by: zod + .enum(['created_at', 'name', 'first_name', 'last_name', 'id']) + .optional() + .default('created_at'), + sort_order: zod.enum(['asc', 'desc']).optional().default('desc'), +}); + +export const searchUserResponseSchema = zod.object({ + success: zod.boolean(), + users: zod.array(PublicUserSchema), + total_count: zod.number(), + total_pages: zod.number(), +}); From 50d915854f23541269271579281f3a3e1fa6c291 Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Fri, 20 Jun 2025 13:30:04 +0200 Subject: [PATCH 19/39] feat(api): implement /api/event endpoint --- src/app/api/event/route.ts | 178 ++++++++++++++++++++++++++++++++ src/app/api/event/swagger.ts | 62 +++++++++++ src/app/api/event/validation.ts | 167 ++++++++++++++++++++++++++++++ 3 files changed, 407 insertions(+) create mode 100644 src/app/api/event/route.ts create mode 100644 src/app/api/event/swagger.ts create mode 100644 src/app/api/event/validation.ts diff --git a/src/app/api/event/route.ts b/src/app/api/event/route.ts new file mode 100644 index 0000000..fb734b1 --- /dev/null +++ b/src/app/api/event/route.ts @@ -0,0 +1,178 @@ +import { prisma } from '@/prisma'; +import { auth } from '@/auth'; +import { + returnZodTypeCheckedResponse, + userAuthenticated, +} from '@/lib/apiHelpers'; +import { ErrorResponseSchema, ZodErrorResponseSchema } from '../validation'; +import { + createEventSchema, + EventResponseSchema, + EventsResponseSchema, +} from './validation'; + +export const GET = auth(async (req) => { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const dbUser = await prisma.user.findUnique({ + where: { + id: authCheck.user.id, + }, + }); + + if (!dbUser) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'User not found' }, + { status: 404 }, + ); + + const userEvents = await prisma.meeting.findMany({ + where: { + OR: [ + { organizer_id: dbUser.id }, + { participants: { some: { user_id: dbUser.id } } }, + ], + }, + select: { + id: true, + title: true, + description: true, + start_time: true, + end_time: true, + status: true, + location: true, + created_at: true, + updated_at: true, + organizer: { + select: { + id: true, + name: true, + first_name: true, + last_name: true, + image: true, + timezone: true, + }, + }, + participants: { + select: { + user: { + select: { + id: true, + name: true, + first_name: true, + last_name: true, + image: true, + timezone: true, + }, + }, + status: true, + }, + }, + }, + }); + + return returnZodTypeCheckedResponse( + EventsResponseSchema, + { + success: true, + events: userEvents, + }, + { status: 200 }, + ); +}); + +export const POST = auth(async (req) => { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const dataRaw = await req.json(); + const data = await createEventSchema.safeParseAsync(dataRaw); + if (!data.success) { + return returnZodTypeCheckedResponse( + ZodErrorResponseSchema, + { + success: false, + message: 'Invalid request data', + errors: data.error.issues, + }, + { status: 400 }, + ); + } + const { title, description, start_time, end_time, location, participants } = + data.data; + + const newEvent = await prisma.meeting.create({ + data: { + title, + description, + start_time, + end_time, + location, + organizer_id: authCheck.user.id!, + participants: participants + ? { + create: participants.map((userId) => ({ + user: { connect: { id: userId } }, + })), + } + : undefined, + }, + select: { + id: true, + title: true, + description: true, + start_time: true, + end_time: true, + status: true, + location: true, + created_at: true, + updated_at: true, + organizer: { + select: { + id: true, + name: true, + first_name: true, + last_name: true, + image: true, + timezone: true, + }, + }, + participants: { + select: { + user: { + select: { + id: true, + name: true, + first_name: true, + last_name: true, + image: true, + timezone: true, + }, + }, + status: true, + }, + }, + }, + }); + + return returnZodTypeCheckedResponse( + EventResponseSchema, + { + success: true, + event: newEvent, + }, + { status: 201 }, + ); +}); diff --git a/src/app/api/event/swagger.ts b/src/app/api/event/swagger.ts new file mode 100644 index 0000000..b78afef --- /dev/null +++ b/src/app/api/event/swagger.ts @@ -0,0 +1,62 @@ +import { OpenAPIRegistry } from '@asteasolutions/zod-to-openapi'; +import { + EventResponseSchema, + EventsResponseSchema, + createEventSchema, +} from './validation'; +import { + invalidRequestDataResponse, + notAuthenticatedResponse, + serverReturnedDataValidationErrorResponse, + userNotFoundResponse, +} from '@/lib/defaultApiResponses'; + +export default function registerSwaggerPaths(registry: OpenAPIRegistry) { + registry.registerPath({ + method: 'get', + path: '/api/event', + responses: { + 200: { + description: 'List of events for the authenticated user', + content: { + 'application/json': { + schema: EventsResponseSchema, + }, + }, + }, + ...notAuthenticatedResponse, + ...userNotFoundResponse, + ...serverReturnedDataValidationErrorResponse, + }, + tags: ['Event'], + }); + + registry.registerPath({ + method: 'post', + path: '/api/event', + request: { + body: { + content: { + 'application/json': { + schema: createEventSchema, + }, + }, + }, + }, + responses: { + 201: { + description: 'Event created successfully.', + content: { + 'application/json': { + schema: EventResponseSchema, + }, + }, + }, + ...invalidRequestDataResponse, + ...notAuthenticatedResponse, + ...userNotFoundResponse, + ...serverReturnedDataValidationErrorResponse, + }, + tags: ['Event'], + }); +} diff --git a/src/app/api/event/validation.ts b/src/app/api/event/validation.ts new file mode 100644 index 0000000..b8e176b --- /dev/null +++ b/src/app/api/event/validation.ts @@ -0,0 +1,167 @@ +import { extendZodWithOpenApi } from '@asteasolutions/zod-to-openapi'; +import zod from 'zod/v4'; +import { + existingUserIdServerSchema, + PublicUserSchema, +} from '../user/validation'; +import { ParticipantSchema } from './[eventID]/participant/validation'; + +extendZodWithOpenApi(zod); + +// ---------------------------------------- +// +// Event ID Validation +// +// ---------------------------------------- +export const eventIdSchema = zod.string().min(1, 'Event ID is required'); + +// ---------------------------------------- +// +// Event Title Validation +// +// ---------------------------------------- +export const eventTitleSchema = zod + .string() + .min(1, 'Title is required') + .max(100, 'Title must be at most 100 characters long'); + +// ---------------------------------------- +// +// Event Description Validation +// +// ---------------------------------------- +export const eventDescriptionSchema = zod + .string() + .max(500, 'Description must be at most 500 characters long'); + +// ---------------------------------------- +// +// Event start time Validation +// +// ---------------------------------------- +export const eventStartTimeSchema = zod.iso + .datetime() + .or(zod.date().transform((date) => date.toISOString())) + .refine((date) => !isNaN(new Date(date).getTime()), { + message: 'Invalid start time', + }); + +// ---------------------------------------- +// +// Event end time Validation +// +// ---------------------------------------- +export const eventEndTimeSchema = zod.iso.datetime().or( + zod + .date() + .transform((date) => date.toISOString()) + .refine((date) => !isNaN(new Date(date).getTime()), { + message: 'Invalid end time', + }), +); + +// ---------------------------------------- +// +// Event Location Validation +// +// ---------------------------------------- +export const eventLocationSchema = zod + .string() + .max(200, 'Location must be at most 200 characters long'); + +// ---------------------------------------- +// +// Event Participants Validation +// +// ---------------------------------------- +export const eventParticipantsSchema = zod.array(existingUserIdServerSchema); + +// ---------------------------------------- +// +// Event Status Validation +// +// ---------------------------------------- +export const eventStatusSchema = zod.enum([ + 'TENTATIVE', + 'CONFIRMED', + 'CANCELLED', +]); + +// ---------------------------------------- +// +// Create Event Schema +// +// ---------------------------------------- +export const createEventSchema = zod + .object({ + title: eventTitleSchema, + description: eventDescriptionSchema.optional(), + start_time: eventStartTimeSchema, + end_time: eventEndTimeSchema, + location: eventLocationSchema.optional().default(''), + participants: eventParticipantsSchema.optional(), + status: eventStatusSchema.optional().default('TENTATIVE'), + }) + .refine((data) => new Date(data.start_time) < new Date(data.end_time), { + message: 'Start time must be before end time', + }); + +// ---------------------------------------- +// +// Update Event Schema +// +// ---------------------------------------- +export const updateEventSchema = zod + .object({ + title: eventTitleSchema.optional(), + description: eventDescriptionSchema.optional(), + start_time: eventStartTimeSchema.optional(), + end_time: eventEndTimeSchema.optional(), + location: eventLocationSchema.optional().default(''), + participants: eventParticipantsSchema.optional(), + status: eventStatusSchema.optional(), + }) + .refine( + (data) => { + if (data.start_time && data.end_time) { + return new Date(data.start_time) < new Date(data.end_time); + } + return true; + }, + { + message: 'Start time must be before end time', + }, + ); + +// ---------------------------------------- +// +// Event Schema Validation (for API responses) +// +// ---------------------------------------- +export const EventSchema = zod + .object({ + id: eventIdSchema, + title: eventTitleSchema, + description: eventDescriptionSchema.nullish(), + start_time: eventStartTimeSchema, + end_time: eventEndTimeSchema, + location: eventLocationSchema.nullish(), + status: eventStatusSchema, + created_at: zod.date(), + updated_at: zod.date(), + organizer: PublicUserSchema, + participants: zod.array(ParticipantSchema).nullish(), + }) + .openapi('Event', { + description: 'Event information including all fields', + }); + +export const EventResponseSchema = zod.object({ + success: zod.boolean(), + event: EventSchema, +}); + +export const EventsResponseSchema = zod.object({ + success: zod.boolean(), + events: zod.array(EventSchema), +}); From f5a5704be315979dd8f4a23141207b477c881042 Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Fri, 20 Jun 2025 13:30:27 +0200 Subject: [PATCH 20/39] feat(api): implement /api/event/[eventID] endpoint --- src/app/api/event/[eventID]/route.ts | 318 +++++++++++++++++++++++++ src/app/api/event/[eventID]/swagger.ts | 94 ++++++++ 2 files changed, 412 insertions(+) create mode 100644 src/app/api/event/[eventID]/route.ts create mode 100644 src/app/api/event/[eventID]/swagger.ts diff --git a/src/app/api/event/[eventID]/route.ts b/src/app/api/event/[eventID]/route.ts new file mode 100644 index 0000000..8c06b64 --- /dev/null +++ b/src/app/api/event/[eventID]/route.ts @@ -0,0 +1,318 @@ +import { prisma } from '@/prisma'; +import { auth } from '@/auth'; +import { + returnZodTypeCheckedResponse, + userAuthenticated, +} from '@/lib/apiHelpers'; +import { + ErrorResponseSchema, + SuccessResponseSchema, + ZodErrorResponseSchema, +} from '../../validation'; +import { EventResponseSchema } from '../validation'; +import { updateEventSchema } from '../validation'; + +export const GET = auth(async (req, { params }) => { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const dbUser = await prisma.user.findUnique({ + where: { + id: authCheck.user.id, + }, + }); + + if (!dbUser) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'User not found' }, + { status: 404 }, + ); + + const eventID = (await params).eventID; + + const event = await prisma.meeting.findUnique({ + where: { + id: eventID, + OR: [ + { organizer_id: dbUser.id }, + { participants: { some: { user_id: dbUser.id } } }, + ], + }, + select: { + id: true, + title: true, + description: true, + start_time: true, + end_time: true, + status: true, + location: true, + organizer_id: true, + created_at: true, + updated_at: true, + organizer: { + select: { + id: true, + name: true, + first_name: true, + last_name: true, + image: true, + timezone: true, + }, + }, + participants: { + select: { + user: { + select: { + id: true, + name: true, + first_name: true, + last_name: true, + image: true, + timezone: true, + }, + }, + status: true, + }, + }, + }, + }); + + if (!event) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'Event not found' }, + { status: 404 }, + ); + + return returnZodTypeCheckedResponse( + EventResponseSchema, + { success: true, event }, + { status: 200 }, + ); +}); + +export const DELETE = auth(async (req, { params }) => { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const dbUser = await prisma.user.findUnique({ + where: { + id: authCheck.user.id, + }, + }); + + if (!dbUser) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'User not found' }, + { status: 404 }, + ); + + const eventID = (await params).eventID; + + const event = await prisma.meeting.findUnique({ + where: { + id: eventID, + OR: [ + { organizer_id: dbUser.id }, + { participants: { some: { user_id: dbUser.id } } }, + ], + }, + }); + + if (!event) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'Event not found' }, + { status: 404 }, + ); + + if (event.organizer_id !== dbUser.id) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'You are not the organizer of this event' }, + { status: 403 }, + ); + + await prisma.meeting.delete({ + where: { + id: eventID, + }, + }); + + return returnZodTypeCheckedResponse( + SuccessResponseSchema, + { success: true, message: 'Event deleted successfully' }, + { status: 200 }, + ); +}); + +export const PATCH = auth(async (req, { params }) => { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const dbUser = await prisma.user.findUnique({ + where: { + id: authCheck.user.id, + }, + }); + + if (!dbUser) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'User not found' }, + { status: 404 }, + ); + + const eventID = (await params).eventID; + + const event = await prisma.meeting.findUnique({ + where: { + id: eventID, + OR: [ + { organizer_id: dbUser.id }, + { participants: { some: { user_id: dbUser.id } } }, + ], + }, + }); + + if (!event) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'Event not found' }, + { status: 404 }, + ); + + if (event.organizer_id !== dbUser.id) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'You are not the organizer of this event' }, + { status: 403 }, + ); + + const dataRaw = await req.json(); + const data = await updateEventSchema.safeParseAsync(dataRaw); + if (!data.success) { + return returnZodTypeCheckedResponse( + ZodErrorResponseSchema, + { + success: false, + message: 'Invalid input data', + errors: data.error.issues, + }, + { status: 400 }, + ); + } + const { + title, + description, + start_time, + end_time, + location, + status, + participants, + } = data.data; + + if (participants !== undefined) + for (const participant of participants) { + await prisma.meetingParticipant.upsert({ + where: { + meeting_id_user_id: { + user_id: participant, + meeting_id: eventID, + }, + }, + create: { + user_id: participant, + meeting_id: eventID, + }, + update: {}, + }); + } + + const updatedEvent = await prisma.meeting.update({ + where: { + id: eventID, + }, + data: { + title, + description, + start_time, + end_time, + location, + status, + participants: + participants !== undefined + ? { + deleteMany: { + user_id: { + notIn: participants || [], + }, + }, + } + : {}, + }, + select: { + id: true, + title: true, + description: true, + start_time: true, + end_time: true, + status: true, + location: true, + organizer_id: true, + created_at: true, + updated_at: true, + organizer: { + select: { + id: true, + name: true, + first_name: true, + last_name: true, + image: true, + timezone: true, + }, + }, + participants: { + select: { + user: { + select: { + id: true, + name: true, + first_name: true, + last_name: true, + image: true, + timezone: true, + }, + }, + status: true, + }, + }, + }, + }); + + return returnZodTypeCheckedResponse( + EventResponseSchema, + { + success: true, + event: updatedEvent, + }, + { status: 200 }, + ); +}); diff --git a/src/app/api/event/[eventID]/swagger.ts b/src/app/api/event/[eventID]/swagger.ts new file mode 100644 index 0000000..4703556 --- /dev/null +++ b/src/app/api/event/[eventID]/swagger.ts @@ -0,0 +1,94 @@ +import { OpenAPIRegistry } from '@asteasolutions/zod-to-openapi'; +import { EventResponseSchema, updateEventSchema } from '../validation'; +import { + invalidRequestDataResponse, + notAuthenticatedResponse, + serverReturnedDataValidationErrorResponse, + userNotFoundResponse, +} from '@/lib/defaultApiResponses'; +import { + EventIdParamSchema, + SuccessResponseSchema, +} from '@/app/api/validation'; +import zod from 'zod/v4'; + +export default function registerSwaggerPaths(registry: OpenAPIRegistry) { + registry.registerPath({ + method: 'get', + path: '/api/event/{eventID}', + request: { + params: zod.object({ + eventID: EventIdParamSchema, + }), + }, + responses: { + 200: { + description: 'Event retrieved successfully', + content: { + 'application/json': { + schema: EventResponseSchema, + }, + }, + }, + ...userNotFoundResponse, + ...serverReturnedDataValidationErrorResponse, + }, + tags: ['Event'], + }); + + registry.registerPath({ + method: 'delete', + path: '/api/event/{eventID}', + request: { + params: zod.object({ + eventID: EventIdParamSchema, + }), + }, + responses: { + 200: { + description: 'Event deleted successfully', + content: { + 'application/json': { + schema: SuccessResponseSchema, + }, + }, + }, + ...notAuthenticatedResponse, + ...userNotFoundResponse, + ...serverReturnedDataValidationErrorResponse, + }, + tags: ['Event'], + }); + + registry.registerPath({ + method: 'patch', + path: '/api/event/{eventID}', + request: { + params: zod.object({ + eventID: EventIdParamSchema, + }), + body: { + content: { + 'application/json': { + schema: updateEventSchema, + }, + }, + }, + }, + responses: { + 200: { + description: 'Event updated successfully', + content: { + 'application/json': { + schema: EventResponseSchema, + }, + }, + }, + ...invalidRequestDataResponse, + ...notAuthenticatedResponse, + ...userNotFoundResponse, + ...serverReturnedDataValidationErrorResponse, + }, + tags: ['Event'], + }); +} From 68cafccec7ed59bd801e92aed7c8817776e4f21e Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Fri, 20 Jun 2025 13:30:49 +0200 Subject: [PATCH 21/39] feat(api): implement /api/event/[eventID]/participant endpoint --- .../api/event/[eventID]/participant/route.ts | 200 ++++++++++++++++++ .../event/[eventID]/participant/swagger.ts | 72 +++++++ .../event/[eventID]/participant/validation.ts | 50 +++++ 3 files changed, 322 insertions(+) create mode 100644 src/app/api/event/[eventID]/participant/route.ts create mode 100644 src/app/api/event/[eventID]/participant/swagger.ts create mode 100644 src/app/api/event/[eventID]/participant/validation.ts diff --git a/src/app/api/event/[eventID]/participant/route.ts b/src/app/api/event/[eventID]/participant/route.ts new file mode 100644 index 0000000..91ce965 --- /dev/null +++ b/src/app/api/event/[eventID]/participant/route.ts @@ -0,0 +1,200 @@ +import { prisma } from '@/prisma'; +import { auth } from '@/auth'; +import { + returnZodTypeCheckedResponse, + userAuthenticated, +} from '@/lib/apiHelpers'; +import { + ErrorResponseSchema, + ZodErrorResponseSchema, +} from '@/app/api/validation'; +import { + inviteParticipantSchema, + ParticipantResponseSchema, + ParticipantsResponseSchema, +} from './validation'; + +export const GET = auth(async (req, { params }) => { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const dbUser = await prisma.user.findUnique({ + where: { + id: authCheck.user.id, + }, + }); + + if (!dbUser) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'User not found' }, + { status: 404 }, + ); + + const eventID = (await params).eventID; + + const isParticipant = await prisma.meetingParticipant.findFirst({ + where: { + meeting_id: eventID, + user_id: dbUser.id, + }, + select: { + status: true, + }, + }); + + const isOrganizer = await prisma.meeting.findFirst({ + where: { + id: eventID, + organizer_id: dbUser.id, + }, + select: { + id: true, + }, + }); + + if (!isParticipant && !isOrganizer) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { + success: false, + message: 'User is not a participant or organizer of this event', + }, + { status: 403 }, + ); + + const participants = await prisma.meetingParticipant.findMany({ + where: { + meeting_id: eventID, + }, + select: { + user: { + select: { + id: true, + name: true, + first_name: true, + last_name: true, + image: true, + timezone: true, + }, + }, + status: true, + }, + }); + + return returnZodTypeCheckedResponse(ParticipantsResponseSchema, { + success: true, + participants, + }); +}); + +export const POST = auth(async (req, { params }) => { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const dbUser = await prisma.user.findUnique({ + where: { + id: authCheck.user.id, + }, + }); + + if (!dbUser) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'User not found' }, + { status: 404 }, + ); + + const eventID = (await params).eventID; + + const isOrganizer = await prisma.meeting.findFirst({ + where: { + id: eventID, + organizer_id: dbUser.id, + }, + }); + + if (!isOrganizer) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'Only organizers can add participants' }, + { status: 403 }, + ); + + const dataRaw = await req.json(); + const data = await inviteParticipantSchema.safeParseAsync(dataRaw); + if (!data.success) { + return returnZodTypeCheckedResponse( + ZodErrorResponseSchema, + { + success: false, + message: 'Invalid request data', + errors: data.error.issues, + }, + { status: 400 }, + ); + } + const { user_id } = data.data; + + const participantExists = await prisma.meetingParticipant.findFirst({ + where: { + meeting_id: eventID, + user_id, + }, + }); + + if (participantExists) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { + success: false, + message: 'User is already a participant of this event', + }, + { status: 409 }, + ); + + const newParticipant = await prisma.meetingParticipant.create({ + data: { + meeting_id: eventID, + user_id, + }, + select: { + user: { + select: { + id: true, + name: true, + first_name: true, + last_name: true, + image: true, + timezone: true, + }, + }, + status: true, + }, + }); + + return returnZodTypeCheckedResponse(ParticipantResponseSchema, { + success: true, + participant: { + user: { + id: newParticipant.user.id, + name: newParticipant.user.name, + first_name: newParticipant.user.first_name, + last_name: newParticipant.user.last_name, + image: newParticipant.user.image, + timezone: newParticipant.user.timezone, + }, + status: newParticipant.status, + }, + }); +}); diff --git a/src/app/api/event/[eventID]/participant/swagger.ts b/src/app/api/event/[eventID]/participant/swagger.ts new file mode 100644 index 0000000..38dfd58 --- /dev/null +++ b/src/app/api/event/[eventID]/participant/swagger.ts @@ -0,0 +1,72 @@ +import { OpenAPIRegistry } from '@asteasolutions/zod-to-openapi'; +import zod from 'zod/v4'; +import { + ParticipantsResponseSchema, + ParticipantResponseSchema, + inviteParticipantSchema, +} from './validation'; +import { + invalidRequestDataResponse, + notAuthenticatedResponse, + serverReturnedDataValidationErrorResponse, + userNotFoundResponse, +} from '@/lib/defaultApiResponses'; +import { EventIdParamSchema } from '@/app/api/validation'; + +export default function registerSwaggerPaths(registry: OpenAPIRegistry) { + registry.registerPath({ + method: 'get', + path: '/api/event/{eventID}/participant', + request: { + params: zod.object({ + eventID: EventIdParamSchema, + }), + }, + responses: { + 200: { + description: 'List participants for the event', + content: { + 'application/json': { + schema: ParticipantsResponseSchema, + }, + }, + }, + ...notAuthenticatedResponse, + ...userNotFoundResponse, + ...serverReturnedDataValidationErrorResponse, + }, + tags: ['Event Participant'], + }); + + registry.registerPath({ + method: 'post', + path: '/api/event/{eventID}/participant', + request: { + params: zod.object({ + eventID: EventIdParamSchema, + }), + body: { + content: { + 'application/json': { + schema: inviteParticipantSchema, + }, + }, + }, + }, + responses: { + 200: { + description: 'Participant invited successfully', + content: { + 'application/json': { + schema: ParticipantResponseSchema, + }, + }, + }, + ...invalidRequestDataResponse, + ...notAuthenticatedResponse, + ...userNotFoundResponse, + ...serverReturnedDataValidationErrorResponse, + }, + tags: ['Event Participant'], + }); +} diff --git a/src/app/api/event/[eventID]/participant/validation.ts b/src/app/api/event/[eventID]/participant/validation.ts new file mode 100644 index 0000000..bacb9ac --- /dev/null +++ b/src/app/api/event/[eventID]/participant/validation.ts @@ -0,0 +1,50 @@ +import { extendZodWithOpenApi } from '@asteasolutions/zod-to-openapi'; +import zod from 'zod/v4'; +import { + existingUserIdServerSchema, + PublicUserSchema, +} from '@/app/api/user/validation'; + +extendZodWithOpenApi(zod); + +export const participantStatusSchema = zod.enum([ + 'ACCEPTED', + 'DECLINED', + 'TENTATIVE', + 'PENDING', +]); + +export const inviteParticipantSchema = zod + .object({ + user_id: existingUserIdServerSchema, + }) + .openapi('InviteParticipant', { + description: 'Schema for inviting a participant to an event', + }); + +export const updateParticipantSchema = zod + .object({ + status: participantStatusSchema, + }) + .openapi('UpdateParticipant', { + description: 'Schema for updating participant status in an event', + }); + +export const ParticipantSchema = zod + .object({ + user: PublicUserSchema, + status: participantStatusSchema, + }) + .openapi('Participant', { + description: 'Participant information including user and status', + }); + +export const ParticipantResponseSchema = zod.object({ + success: zod.boolean(), + participant: ParticipantSchema, +}); + +export const ParticipantsResponseSchema = zod.object({ + success: zod.boolean(), + participants: zod.array(ParticipantSchema), +}); From 40d13101a3c8dfd7a1616c8b130a9d333000c23f Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Fri, 20 Jun 2025 13:31:08 +0200 Subject: [PATCH 22/39] feat(api): implement /api/event/[eventID]/participant/[user] endpoint --- .../[eventID]/participant/[user]/route.ts | 276 ++++++++++++++++++ .../[eventID]/participant/[user]/swagger.ts | 102 +++++++ 2 files changed, 378 insertions(+) create mode 100644 src/app/api/event/[eventID]/participant/[user]/route.ts create mode 100644 src/app/api/event/[eventID]/participant/[user]/swagger.ts diff --git a/src/app/api/event/[eventID]/participant/[user]/route.ts b/src/app/api/event/[eventID]/participant/[user]/route.ts new file mode 100644 index 0000000..890308c --- /dev/null +++ b/src/app/api/event/[eventID]/participant/[user]/route.ts @@ -0,0 +1,276 @@ +import { prisma } from '@/prisma'; +import { auth } from '@/auth'; +import { + returnZodTypeCheckedResponse, + userAuthenticated, +} from '@/lib/apiHelpers'; +import { + ErrorResponseSchema, + SuccessResponseSchema, + ZodErrorResponseSchema, +} from '@/app/api/validation'; +import { + ParticipantResponseSchema, + updateParticipantSchema, +} from '../validation'; + +export const GET = auth(async (req, { params }) => { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const dbUser = await prisma.user.findUnique({ + where: { + id: authCheck.user.id, + }, + }); + + if (!dbUser) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'User not found' }, + { status: 404 }, + ); + + const eventID = (await params).eventID; + const user = (await params).user; + + const isParticipant = await prisma.meetingParticipant.findFirst({ + where: { + meeting_id: eventID, + user_id: dbUser.id, + }, + }); + + const isOrganizer = await prisma.meeting.findFirst({ + where: { + id: eventID, + organizer_id: dbUser.id, + }, + }); + + if (!isParticipant && !isOrganizer) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { + success: false, + message: 'User is not a participant or organizer of this event', + }, + { status: 403 }, + ); + + const participant = await prisma.meetingParticipant.findUnique({ + where: { + meeting_id_user_id: { + meeting_id: eventID, + user_id: user, + }, + }, + select: { + user: { + select: { + id: true, + name: true, + first_name: true, + last_name: true, + image: true, + timezone: true, + }, + }, + status: true, + }, + }); + + if (!participant) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'Participant not found' }, + { status: 404 }, + ); + + return returnZodTypeCheckedResponse(ParticipantResponseSchema, { + success: true, + participant, + }); +}); + +export const DELETE = auth(async (req, { params }) => { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const dbUser = await prisma.user.findUnique({ + where: { + id: authCheck.user.id, + }, + }); + + if (!dbUser) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'User not found' }, + { status: 404 }, + ); + + const eventID = (await params).eventID; + const user = (await params).user; + + const isOrganizer = await prisma.meeting.findFirst({ + where: { + id: eventID, + organizer_id: dbUser.id, + }, + }); + + if (!isOrganizer) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'Only organizer can remove participants' }, + { status: 403 }, + ); + + const participant = await prisma.meetingParticipant.findUnique({ + where: { + meeting_id_user_id: { + meeting_id: eventID, + user_id: user, + }, + }, + }); + + if (!participant) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'Participant not found' }, + { status: 404 }, + ); + + await prisma.meetingParticipant.delete({ + where: { + meeting_id_user_id: { + meeting_id: eventID, + user_id: user, + }, + }, + }); + + return returnZodTypeCheckedResponse( + SuccessResponseSchema, + { success: true, message: 'Participant removed successfully' }, + { status: 200 }, + ); +}); + +export const PATCH = auth(async (req, { params }) => { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const dbUser = await prisma.user.findUnique({ + where: { + id: authCheck.user.id, + }, + }); + + if (!dbUser) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'User not found' }, + { status: 404 }, + ); + + const eventID = (await params).eventID; + const user = (await params).user; + + if (dbUser.id !== user && dbUser.name !== user) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'You can only update your own participation' }, + { status: 403 }, + ); + + const participant = await prisma.meetingParticipant.findUnique({ + where: { + meeting_id_user_id: { + meeting_id: eventID, + user_id: dbUser.id, + }, + }, + select: { + user: { + select: { + id: true, + name: true, + first_name: true, + last_name: true, + image: true, + timezone: true, + }, + }, + status: true, + }, + }); + + if (!participant) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { success: false, message: 'Participant not found' }, + { status: 404 }, + ); + + const body = await req.json(); + const parsedBody = await updateParticipantSchema.safeParseAsync(body); + if (!parsedBody.success) + return returnZodTypeCheckedResponse( + ZodErrorResponseSchema, + { + success: false, + message: 'Invalid request body', + errors: parsedBody.error.issues, + }, + { status: 400 }, + ); + const { status } = parsedBody.data; + + const updatedParticipant = await prisma.meetingParticipant.update({ + where: { + meeting_id_user_id: { + meeting_id: eventID, + user_id: dbUser.id, + }, + }, + data: { + status, + }, + select: { + user: { + select: { + id: true, + name: true, + first_name: true, + last_name: true, + image: true, + timezone: true, + }, + }, + status: true, + }, + }); + + return returnZodTypeCheckedResponse(ParticipantResponseSchema, { + success: true, + participant: updatedParticipant, + }); +}); diff --git a/src/app/api/event/[eventID]/participant/[user]/swagger.ts b/src/app/api/event/[eventID]/participant/[user]/swagger.ts new file mode 100644 index 0000000..b08bd74 --- /dev/null +++ b/src/app/api/event/[eventID]/participant/[user]/swagger.ts @@ -0,0 +1,102 @@ +import { OpenAPIRegistry } from '@asteasolutions/zod-to-openapi'; +import zod from 'zod/v4'; +import { + ParticipantResponseSchema, + updateParticipantSchema, +} from '../validation'; +import { + invalidRequestDataResponse, + notAuthenticatedResponse, + serverReturnedDataValidationErrorResponse, + userNotFoundResponse, +} from '@/lib/defaultApiResponses'; +import { + EventIdParamSchema, + UserIdParamSchema, + SuccessResponseSchema, +} from '@/app/api/validation'; + +export default function registerSwaggerPaths(registry: OpenAPIRegistry) { + registry.registerPath({ + method: 'get', + path: '/api/event/{eventID}/participant/{user}', + request: { + params: zod.object({ + eventID: EventIdParamSchema, + user: UserIdParamSchema, + }), + }, + responses: { + 200: { + description: 'Get a participant for the event', + content: { + 'application/json': { + schema: ParticipantResponseSchema, + }, + }, + }, + ...notAuthenticatedResponse, + ...userNotFoundResponse, + ...serverReturnedDataValidationErrorResponse, + }, + tags: ['Event Participant'], + }); + + registry.registerPath({ + method: 'delete', + path: '/api/event/{eventID}/participant/{user}', + request: { + params: zod.object({ + eventID: EventIdParamSchema, + user: UserIdParamSchema, + }), + }, + responses: { + 200: { + description: 'Participant removed successfully', + content: { + 'application/json': { + schema: SuccessResponseSchema, + }, + }, + }, + ...notAuthenticatedResponse, + ...userNotFoundResponse, + ...serverReturnedDataValidationErrorResponse, + }, + tags: ['Event Participant'], + }); + + registry.registerPath({ + method: 'patch', + path: '/api/event/{eventID}/participant/{user}', + request: { + params: zod.object({ + eventID: EventIdParamSchema, + user: UserIdParamSchema, + }), + body: { + content: { + 'application/json': { + schema: updateParticipantSchema, + }, + }, + }, + }, + responses: { + 200: { + description: 'Participant updated successfully', + content: { + 'application/json': { + schema: ParticipantResponseSchema, + }, + }, + }, + ...notAuthenticatedResponse, + ...userNotFoundResponse, + ...serverReturnedDataValidationErrorResponse, + ...invalidRequestDataResponse, + }, + tags: ['Event Participant'], + }); +} From 445a15ccc7f0d07a33f0a580e9d4544a5bee5c61 Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Fri, 20 Jun 2025 13:32:04 +0200 Subject: [PATCH 23/39] feat(api): add username to homepage example for the api usage --- src/app/home/page.tsx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/app/home/page.tsx b/src/app/home/page.tsx index b3294a0..77f3cf8 100644 --- a/src/app/home/page.tsx +++ b/src/app/home/page.tsx @@ -1,12 +1,20 @@ +'use client'; + import { RedirectButton } from '@/components/buttons/redirect-button'; import { ThemePicker } from '@/components/misc/theme-picker'; +import { useGetApiUserMe } from '@/generated/api/user/user'; export default function Home() { + const { data, isLoading } = useGetApiUserMe(); + return (
{}
-

Home

+

+ Hello{' '} + {isLoading ? 'Loading...' : data?.data.user?.name || 'Unknown User'} +

From 58cf178968f63924255d2503021d0f340c24b1c0 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 20 Jun 2025 23:01:56 +0000 Subject: [PATCH 24/39] fix(deps): update dependency next to v15.4.0-canary.89 --- package.json | 2 +- yarn.lock | 84 ++++++++++++++++++++++++++-------------------------- 2 files changed, 43 insertions(+), 43 deletions(-) diff --git a/package.json b/package.json index 12d6e4e..5e1494a 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "lucide-react": "^0.511.0", - "next": "15.4.0-canary.85", + "next": "15.4.0-canary.89", "next-auth": "^5.0.0-beta.25", "next-themes": "^0.4.6", "react": "^19.0.0", diff --git a/yarn.lock b/yarn.lock index d40bfd6..2ffe07b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -939,10 +939,10 @@ __metadata: languageName: node linkType: hard -"@next/env@npm:15.4.0-canary.85": - version: 15.4.0-canary.85 - resolution: "@next/env@npm:15.4.0-canary.85" - checksum: 10c0/2a11c5530bd87edf993413044af5175f7e230d6db41145e3c56059a0cd1fc675b6150e1644b1e8731ff1c590927b4d6c27550ca1bafae3318fffd6483e75d1da +"@next/env@npm:15.4.0-canary.89": + version: 15.4.0-canary.89 + resolution: "@next/env@npm:15.4.0-canary.89" + checksum: 10c0/5809605b66cc4762b3792cafca0ad36e1add73b85821b12751eddd34097c41d9d5bd29ce789eceb573020bd2ce7af65f7bc9250f6d1aa36088f29997e5278cb5 languageName: node linkType: hard @@ -955,58 +955,58 @@ __metadata: languageName: node linkType: hard -"@next/swc-darwin-arm64@npm:15.4.0-canary.85": - version: 15.4.0-canary.85 - resolution: "@next/swc-darwin-arm64@npm:15.4.0-canary.85" +"@next/swc-darwin-arm64@npm:15.4.0-canary.89": + version: 15.4.0-canary.89 + resolution: "@next/swc-darwin-arm64@npm:15.4.0-canary.89" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@next/swc-darwin-x64@npm:15.4.0-canary.85": - version: 15.4.0-canary.85 - resolution: "@next/swc-darwin-x64@npm:15.4.0-canary.85" +"@next/swc-darwin-x64@npm:15.4.0-canary.89": + version: 15.4.0-canary.89 + resolution: "@next/swc-darwin-x64@npm:15.4.0-canary.89" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@next/swc-linux-arm64-gnu@npm:15.4.0-canary.85": - version: 15.4.0-canary.85 - resolution: "@next/swc-linux-arm64-gnu@npm:15.4.0-canary.85" +"@next/swc-linux-arm64-gnu@npm:15.4.0-canary.89": + version: 15.4.0-canary.89 + resolution: "@next/swc-linux-arm64-gnu@npm:15.4.0-canary.89" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-arm64-musl@npm:15.4.0-canary.85": - version: 15.4.0-canary.85 - resolution: "@next/swc-linux-arm64-musl@npm:15.4.0-canary.85" +"@next/swc-linux-arm64-musl@npm:15.4.0-canary.89": + version: 15.4.0-canary.89 + resolution: "@next/swc-linux-arm64-musl@npm:15.4.0-canary.89" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@next/swc-linux-x64-gnu@npm:15.4.0-canary.85": - version: 15.4.0-canary.85 - resolution: "@next/swc-linux-x64-gnu@npm:15.4.0-canary.85" +"@next/swc-linux-x64-gnu@npm:15.4.0-canary.89": + version: 15.4.0-canary.89 + resolution: "@next/swc-linux-x64-gnu@npm:15.4.0-canary.89" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-x64-musl@npm:15.4.0-canary.85": - version: 15.4.0-canary.85 - resolution: "@next/swc-linux-x64-musl@npm:15.4.0-canary.85" +"@next/swc-linux-x64-musl@npm:15.4.0-canary.89": + version: 15.4.0-canary.89 + resolution: "@next/swc-linux-x64-musl@npm:15.4.0-canary.89" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@next/swc-win32-arm64-msvc@npm:15.4.0-canary.85": - version: 15.4.0-canary.85 - resolution: "@next/swc-win32-arm64-msvc@npm:15.4.0-canary.85" +"@next/swc-win32-arm64-msvc@npm:15.4.0-canary.89": + version: 15.4.0-canary.89 + resolution: "@next/swc-win32-arm64-msvc@npm:15.4.0-canary.89" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@next/swc-win32-x64-msvc@npm:15.4.0-canary.85": - version: 15.4.0-canary.85 - resolution: "@next/swc-win32-x64-msvc@npm:15.4.0-canary.85" +"@next/swc-win32-x64-msvc@npm:15.4.0-canary.89": + version: 15.4.0-canary.89 + resolution: "@next/swc-win32-x64-msvc@npm:15.4.0-canary.89" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -6573,7 +6573,7 @@ __metadata: eslint-config-next: "npm:15.3.4" eslint-config-prettier: "npm:10.1.5" lucide-react: "npm:^0.511.0" - next: "npm:15.4.0-canary.85" + next: "npm:15.4.0-canary.89" next-auth: "npm:^5.0.0-beta.25" next-themes: "npm:^0.4.6" orval: "npm:7.10.0" @@ -6856,19 +6856,19 @@ __metadata: languageName: node linkType: hard -"next@npm:15.4.0-canary.85": - version: 15.4.0-canary.85 - resolution: "next@npm:15.4.0-canary.85" +"next@npm:15.4.0-canary.89": + version: 15.4.0-canary.89 + resolution: "next@npm:15.4.0-canary.89" dependencies: - "@next/env": "npm:15.4.0-canary.85" - "@next/swc-darwin-arm64": "npm:15.4.0-canary.85" - "@next/swc-darwin-x64": "npm:15.4.0-canary.85" - "@next/swc-linux-arm64-gnu": "npm:15.4.0-canary.85" - "@next/swc-linux-arm64-musl": "npm:15.4.0-canary.85" - "@next/swc-linux-x64-gnu": "npm:15.4.0-canary.85" - "@next/swc-linux-x64-musl": "npm:15.4.0-canary.85" - "@next/swc-win32-arm64-msvc": "npm:15.4.0-canary.85" - "@next/swc-win32-x64-msvc": "npm:15.4.0-canary.85" + "@next/env": "npm:15.4.0-canary.89" + "@next/swc-darwin-arm64": "npm:15.4.0-canary.89" + "@next/swc-darwin-x64": "npm:15.4.0-canary.89" + "@next/swc-linux-arm64-gnu": "npm:15.4.0-canary.89" + "@next/swc-linux-arm64-musl": "npm:15.4.0-canary.89" + "@next/swc-linux-x64-gnu": "npm:15.4.0-canary.89" + "@next/swc-linux-x64-musl": "npm:15.4.0-canary.89" + "@next/swc-win32-arm64-msvc": "npm:15.4.0-canary.89" + "@next/swc-win32-x64-msvc": "npm:15.4.0-canary.89" "@swc/helpers": "npm:0.5.15" caniuse-lite: "npm:^1.0.30001579" postcss: "npm:8.4.31" @@ -6911,7 +6911,7 @@ __metadata: optional: true bin: next: dist/bin/next - checksum: 10c0/756f84e1412b690b7c4687f3da4984ed3134c571a5d1568dcf7e764e4328ed7789f1898b43490682021a3b27f38975804bc9770495ae495925aeb50cd706dfdb + checksum: 10c0/2920d0f60fe0796727c663f3b7c21bc8a644b353fcbc8d0e7955694225762877dde0f3984971dc379bc864e7ab839b186f4ea099d10c0c5ca1fc598e66c17b4c languageName: node linkType: hard From 96ff00f120670646e535c922e26770c74f16fcf4 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 21 Jun 2025 00:01:44 +0000 Subject: [PATCH 25/39] chore(deps): update dependency prisma to v6.10.1 --- package.json | 2 +- yarn.lock | 78 ++++++++++++++++++++++++++-------------------------- 2 files changed, 40 insertions(+), 40 deletions(-) diff --git a/package.json b/package.json index 5e1494a..d62313e 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "orval": "7.10.0", "postcss": "8.5.6", "prettier": "3.5.3", - "prisma": "6.9.0", + "prisma": "6.10.1", "tailwindcss": "4.1.10", "ts-node": "10.9.2", "tsconfig-paths": "4.2.0", diff --git a/yarn.lock b/yarn.lock index 2ffe07b..ebc9295 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1211,58 +1211,58 @@ __metadata: languageName: node linkType: hard -"@prisma/config@npm:6.9.0": - version: 6.9.0 - resolution: "@prisma/config@npm:6.9.0" +"@prisma/config@npm:6.10.1": + version: 6.10.1 + resolution: "@prisma/config@npm:6.10.1" dependencies: jiti: "npm:2.4.2" - checksum: 10c0/749c801e31d5284d78ce0df9a41b07a2a1d756d966b857472c2dcbfa1239da3cf8e60f3522d42d201fa08594b8ecbb88816f9381b521230ddac992a9bc566445 + checksum: 10c0/49d99474ba086d1141340b8b54f109597cc485e4a35cfab8b43cff35c19fe4f9ffa0d424ef4dbf76a8880c955ecd8a233206d4e7ee436116fc319506b46e46fb languageName: node linkType: hard -"@prisma/debug@npm:6.9.0": - version: 6.9.0 - resolution: "@prisma/debug@npm:6.9.0" - checksum: 10c0/abb6822299285d6847d7f86723ad4c222a828cb0cec0086bdf616c9d92e3c2c48b9f00d1b49655c489bbe6ad1a33cf4818c468ea8448b58a3233d67a967bb0ee +"@prisma/debug@npm:6.10.1": + version: 6.10.1 + resolution: "@prisma/debug@npm:6.10.1" + checksum: 10c0/a5f76ace213da5ab3180fc179383637df6923363a6a08c5958788ecf4dbade3761b07445bc06f7fa044880221a66b824b105bee3aa19eb155c48f6c3f730051b languageName: node linkType: hard -"@prisma/engines-version@npm:6.9.0-10.81e4af48011447c3cc503a190e86995b66d2a28e": - version: 6.9.0-10.81e4af48011447c3cc503a190e86995b66d2a28e - resolution: "@prisma/engines-version@npm:6.9.0-10.81e4af48011447c3cc503a190e86995b66d2a28e" - checksum: 10c0/a81ba1a619d3945ef7840d28f4b6eb0ed345aac86011d03ec8b9388129273e70887a6ece8052195a8d909bfce8f469cdab2a3fe079fe89d432d5510f35ebfa0b +"@prisma/engines-version@npm:6.10.1-1.9b628578b3b7cae625e8c927178f15a170e74a9c": + version: 6.10.1-1.9b628578b3b7cae625e8c927178f15a170e74a9c + resolution: "@prisma/engines-version@npm:6.10.1-1.9b628578b3b7cae625e8c927178f15a170e74a9c" + checksum: 10c0/478feafd1bebea1edc1b93c5117c0b3b85c7a4a89bf2f0e7f1b3ab425ed3f3df5a56a6bdda8debf16ba096ef1618399a4912f581e1a543bfbf6ea5e8b6a19cdf languageName: node linkType: hard -"@prisma/engines@npm:6.9.0": - version: 6.9.0 - resolution: "@prisma/engines@npm:6.9.0" +"@prisma/engines@npm:6.10.1": + version: 6.10.1 + resolution: "@prisma/engines@npm:6.10.1" dependencies: - "@prisma/debug": "npm:6.9.0" - "@prisma/engines-version": "npm:6.9.0-10.81e4af48011447c3cc503a190e86995b66d2a28e" - "@prisma/fetch-engine": "npm:6.9.0" - "@prisma/get-platform": "npm:6.9.0" - checksum: 10c0/62fb62141f277376a3194637a1e6123c4eecdd54df89138d0694813dc5d3007b6cec0bcd15dceb76d383f9379f844dffd0a62de87a0c5c761c61d46c91a7c6ba + "@prisma/debug": "npm:6.10.1" + "@prisma/engines-version": "npm:6.10.1-1.9b628578b3b7cae625e8c927178f15a170e74a9c" + "@prisma/fetch-engine": "npm:6.10.1" + "@prisma/get-platform": "npm:6.10.1" + checksum: 10c0/fa1fe15a46b8f1342919d7c84a64b8b9c2522c408ee33203c7df6c39cf87c1dffdf9b8a9af5a90214ebdfcaf5fd4f640f75f869a1e7eccadcc816065b35aa318 languageName: node linkType: hard -"@prisma/fetch-engine@npm:6.9.0": - version: 6.9.0 - resolution: "@prisma/fetch-engine@npm:6.9.0" +"@prisma/fetch-engine@npm:6.10.1": + version: 6.10.1 + resolution: "@prisma/fetch-engine@npm:6.10.1" dependencies: - "@prisma/debug": "npm:6.9.0" - "@prisma/engines-version": "npm:6.9.0-10.81e4af48011447c3cc503a190e86995b66d2a28e" - "@prisma/get-platform": "npm:6.9.0" - checksum: 10c0/cdab9a5e1e0b8f52cb32dfacb8fff4b50cccb64235a8fdc06ae1930089f6acf28cd6b4af4bb306aae25773db76db2d2d378244d23f7b491acf6f3f8d135e0ef6 + "@prisma/debug": "npm:6.10.1" + "@prisma/engines-version": "npm:6.10.1-1.9b628578b3b7cae625e8c927178f15a170e74a9c" + "@prisma/get-platform": "npm:6.10.1" + checksum: 10c0/46a47eac79f53ef7a5ff513e237a95c6b2f7509317c49f4df6b4151002a768715eccf7eb6e0bf9ca4c64d5703fc6ba3af33bfb105c9d37decd225a2bab9fc4cf languageName: node linkType: hard -"@prisma/get-platform@npm:6.9.0": - version: 6.9.0 - resolution: "@prisma/get-platform@npm:6.9.0" +"@prisma/get-platform@npm:6.10.1": + version: 6.10.1 + resolution: "@prisma/get-platform@npm:6.10.1" dependencies: - "@prisma/debug": "npm:6.9.0" - checksum: 10c0/e70bd4e9733d959b7dd5614d4f6f7af6d9f135e1719ddcf91a6c8baa4235882674b46f1c965e63ecfb7251327e7e670b0396d11c0a9c28648fc430de843da806 + "@prisma/debug": "npm:6.10.1" + checksum: 10c0/fbaaad070301a54a08022b7c23ef290007bc7eb94cda8b1ed97aedbd9eaeb20dbf26266e309a5cc155c7636a04e8736eff1554f4a3ffe07013f1f68134c6efea languageName: node linkType: hard @@ -6579,7 +6579,7 @@ __metadata: orval: "npm:7.10.0" postcss: "npm:8.5.6" prettier: "npm:3.5.3" - prisma: "npm:6.9.0" + prisma: "npm:6.10.1" react: "npm:^19.0.0" react-dom: "npm:^19.0.0" react-hook-form: "npm:^7.56.4" @@ -7485,12 +7485,12 @@ __metadata: languageName: node linkType: hard -"prisma@npm:6.9.0": - version: 6.9.0 - resolution: "prisma@npm:6.9.0" +"prisma@npm:6.10.1": + version: 6.10.1 + resolution: "prisma@npm:6.10.1" dependencies: - "@prisma/config": "npm:6.9.0" - "@prisma/engines": "npm:6.9.0" + "@prisma/config": "npm:6.10.1" + "@prisma/engines": "npm:6.10.1" peerDependencies: typescript: ">=5.1.0" peerDependenciesMeta: @@ -7498,7 +7498,7 @@ __metadata: optional: true bin: prisma: build/index.js - checksum: 10c0/58217bca255ba01ecc23722b9f25f37e3c68780d3801ddd3438fc7987cd6abad5759b87d9a851725516ef035330e58ab3d56362c426f19cd22d2dccdb5bccb41 + checksum: 10c0/7708736147fae3d0d537782f74ba18e574a72ae0e4c90c2f1ba9f5f8a994d1596ce206540241f18282407f846a6d0c904d6d67c0c959fe51bab4d7d402516185 languageName: node linkType: hard From b652499788c0cb11d499a1aa18c09971c9de1e19 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 21 Jun 2025 02:01:51 +0000 Subject: [PATCH 26/39] fix(deps): update dependency next to v15.4.0-canary.90 --- package.json | 2 +- yarn.lock | 84 ++++++++++++++++++++++++++-------------------------- 2 files changed, 43 insertions(+), 43 deletions(-) diff --git a/package.json b/package.json index d62313e..f6eea55 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "lucide-react": "^0.511.0", - "next": "15.4.0-canary.89", + "next": "15.4.0-canary.90", "next-auth": "^5.0.0-beta.25", "next-themes": "^0.4.6", "react": "^19.0.0", diff --git a/yarn.lock b/yarn.lock index ebc9295..896418d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -939,10 +939,10 @@ __metadata: languageName: node linkType: hard -"@next/env@npm:15.4.0-canary.89": - version: 15.4.0-canary.89 - resolution: "@next/env@npm:15.4.0-canary.89" - checksum: 10c0/5809605b66cc4762b3792cafca0ad36e1add73b85821b12751eddd34097c41d9d5bd29ce789eceb573020bd2ce7af65f7bc9250f6d1aa36088f29997e5278cb5 +"@next/env@npm:15.4.0-canary.90": + version: 15.4.0-canary.90 + resolution: "@next/env@npm:15.4.0-canary.90" + checksum: 10c0/35f21edabef17cbf6329e844e12d897e77091a2ce8fda2b9ab30fc1a52703ab2ed77cc5fbd3c9cefefbbc00b00108755dced544ffb91c632fca793739f5b8f28 languageName: node linkType: hard @@ -955,58 +955,58 @@ __metadata: languageName: node linkType: hard -"@next/swc-darwin-arm64@npm:15.4.0-canary.89": - version: 15.4.0-canary.89 - resolution: "@next/swc-darwin-arm64@npm:15.4.0-canary.89" +"@next/swc-darwin-arm64@npm:15.4.0-canary.90": + version: 15.4.0-canary.90 + resolution: "@next/swc-darwin-arm64@npm:15.4.0-canary.90" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@next/swc-darwin-x64@npm:15.4.0-canary.89": - version: 15.4.0-canary.89 - resolution: "@next/swc-darwin-x64@npm:15.4.0-canary.89" +"@next/swc-darwin-x64@npm:15.4.0-canary.90": + version: 15.4.0-canary.90 + resolution: "@next/swc-darwin-x64@npm:15.4.0-canary.90" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@next/swc-linux-arm64-gnu@npm:15.4.0-canary.89": - version: 15.4.0-canary.89 - resolution: "@next/swc-linux-arm64-gnu@npm:15.4.0-canary.89" +"@next/swc-linux-arm64-gnu@npm:15.4.0-canary.90": + version: 15.4.0-canary.90 + resolution: "@next/swc-linux-arm64-gnu@npm:15.4.0-canary.90" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-arm64-musl@npm:15.4.0-canary.89": - version: 15.4.0-canary.89 - resolution: "@next/swc-linux-arm64-musl@npm:15.4.0-canary.89" +"@next/swc-linux-arm64-musl@npm:15.4.0-canary.90": + version: 15.4.0-canary.90 + resolution: "@next/swc-linux-arm64-musl@npm:15.4.0-canary.90" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@next/swc-linux-x64-gnu@npm:15.4.0-canary.89": - version: 15.4.0-canary.89 - resolution: "@next/swc-linux-x64-gnu@npm:15.4.0-canary.89" +"@next/swc-linux-x64-gnu@npm:15.4.0-canary.90": + version: 15.4.0-canary.90 + resolution: "@next/swc-linux-x64-gnu@npm:15.4.0-canary.90" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-x64-musl@npm:15.4.0-canary.89": - version: 15.4.0-canary.89 - resolution: "@next/swc-linux-x64-musl@npm:15.4.0-canary.89" +"@next/swc-linux-x64-musl@npm:15.4.0-canary.90": + version: 15.4.0-canary.90 + resolution: "@next/swc-linux-x64-musl@npm:15.4.0-canary.90" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@next/swc-win32-arm64-msvc@npm:15.4.0-canary.89": - version: 15.4.0-canary.89 - resolution: "@next/swc-win32-arm64-msvc@npm:15.4.0-canary.89" +"@next/swc-win32-arm64-msvc@npm:15.4.0-canary.90": + version: 15.4.0-canary.90 + resolution: "@next/swc-win32-arm64-msvc@npm:15.4.0-canary.90" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@next/swc-win32-x64-msvc@npm:15.4.0-canary.89": - version: 15.4.0-canary.89 - resolution: "@next/swc-win32-x64-msvc@npm:15.4.0-canary.89" +"@next/swc-win32-x64-msvc@npm:15.4.0-canary.90": + version: 15.4.0-canary.90 + resolution: "@next/swc-win32-x64-msvc@npm:15.4.0-canary.90" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -6573,7 +6573,7 @@ __metadata: eslint-config-next: "npm:15.3.4" eslint-config-prettier: "npm:10.1.5" lucide-react: "npm:^0.511.0" - next: "npm:15.4.0-canary.89" + next: "npm:15.4.0-canary.90" next-auth: "npm:^5.0.0-beta.25" next-themes: "npm:^0.4.6" orval: "npm:7.10.0" @@ -6856,19 +6856,19 @@ __metadata: languageName: node linkType: hard -"next@npm:15.4.0-canary.89": - version: 15.4.0-canary.89 - resolution: "next@npm:15.4.0-canary.89" +"next@npm:15.4.0-canary.90": + version: 15.4.0-canary.90 + resolution: "next@npm:15.4.0-canary.90" dependencies: - "@next/env": "npm:15.4.0-canary.89" - "@next/swc-darwin-arm64": "npm:15.4.0-canary.89" - "@next/swc-darwin-x64": "npm:15.4.0-canary.89" - "@next/swc-linux-arm64-gnu": "npm:15.4.0-canary.89" - "@next/swc-linux-arm64-musl": "npm:15.4.0-canary.89" - "@next/swc-linux-x64-gnu": "npm:15.4.0-canary.89" - "@next/swc-linux-x64-musl": "npm:15.4.0-canary.89" - "@next/swc-win32-arm64-msvc": "npm:15.4.0-canary.89" - "@next/swc-win32-x64-msvc": "npm:15.4.0-canary.89" + "@next/env": "npm:15.4.0-canary.90" + "@next/swc-darwin-arm64": "npm:15.4.0-canary.90" + "@next/swc-darwin-x64": "npm:15.4.0-canary.90" + "@next/swc-linux-arm64-gnu": "npm:15.4.0-canary.90" + "@next/swc-linux-arm64-musl": "npm:15.4.0-canary.90" + "@next/swc-linux-x64-gnu": "npm:15.4.0-canary.90" + "@next/swc-linux-x64-musl": "npm:15.4.0-canary.90" + "@next/swc-win32-arm64-msvc": "npm:15.4.0-canary.90" + "@next/swc-win32-x64-msvc": "npm:15.4.0-canary.90" "@swc/helpers": "npm:0.5.15" caniuse-lite: "npm:^1.0.30001579" postcss: "npm:8.4.31" @@ -6911,7 +6911,7 @@ __metadata: optional: true bin: next: dist/bin/next - checksum: 10c0/2920d0f60fe0796727c663f3b7c21bc8a644b353fcbc8d0e7955694225762877dde0f3984971dc379bc864e7ab839b186f4ea099d10c0c5ca1fc598e66c17b4c + checksum: 10c0/77be3c261ae6a6ee63207ff8ee4988b38b5507652067a59606d87dd5adb647deb1bb6da7fc7f00a6ae10c48b7d2ff479b86388d4dd38e0f8ac7f02c78cc006cf languageName: node linkType: hard From 5e6feb39ebfd2acaa6a162b70aef3940821131de Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 21 Jun 2025 13:00:48 +0000 Subject: [PATCH 27/39] fix(deps): update dependency @tanstack/react-query to v5.81.0 --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index 896418d..c6c2813 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2974,21 +2974,21 @@ __metadata: languageName: node linkType: hard -"@tanstack/query-core@npm:5.80.10": - version: 5.80.10 - resolution: "@tanstack/query-core@npm:5.80.10" - checksum: 10c0/6391f4439f1f4676f5efeb07271e6b0b1418bd1192779f55cac537f0b35ec31c729eb43a30e0269534328c259c3ed6dd2f31555c42c68b6dd0c9ede410d46eb1 +"@tanstack/query-core@npm:5.81.0": + version: 5.81.0 + resolution: "@tanstack/query-core@npm:5.81.0" + checksum: 10c0/518119d4cad7f552e6a5614d0d71178f1f06508bfd6b5730dc7c9f23e07cc8408042a4d895808819872f1f5592860b3fccc2eb252e81ea9d45672c210607dbe0 languageName: node linkType: hard "@tanstack/react-query@npm:^5.80.7": - version: 5.80.10 - resolution: "@tanstack/react-query@npm:5.80.10" + version: 5.81.0 + resolution: "@tanstack/react-query@npm:5.81.0" dependencies: - "@tanstack/query-core": "npm:5.80.10" + "@tanstack/query-core": "npm:5.81.0" peerDependencies: react: ^18 || ^19 - checksum: 10c0/1a759b264cc94b389f802f1183183a3fbe1669ec1bb354951cfab6b6cf175276885c5f5c9b3fc00340a87140fdff4b9cf0c688fb7af103d34fb3b209d33a0a95 + checksum: 10c0/a9f37efd7c8fe9c35da94608b1c8f1a3d18b597d9a411669f7449ca4f32b13b211e0b4c34cc04c36fdc445bd9bf7819b1015f85e603609fe321f894fbcfc2d43 languageName: node linkType: hard From 5fbd7ac09196ecdc77c07a512e58ae34b591c1db Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 21 Jun 2025 20:01:54 +0000 Subject: [PATCH 28/39] fix(deps): update dependency @tanstack/react-query to v5.81.1 --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index c6c2813..8be8b20 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2974,21 +2974,21 @@ __metadata: languageName: node linkType: hard -"@tanstack/query-core@npm:5.81.0": - version: 5.81.0 - resolution: "@tanstack/query-core@npm:5.81.0" - checksum: 10c0/518119d4cad7f552e6a5614d0d71178f1f06508bfd6b5730dc7c9f23e07cc8408042a4d895808819872f1f5592860b3fccc2eb252e81ea9d45672c210607dbe0 +"@tanstack/query-core@npm:5.81.1": + version: 5.81.1 + resolution: "@tanstack/query-core@npm:5.81.1" + checksum: 10c0/df3ad000c4497868bfc2cab6c36604931038ad583210a04b0cbc2b70a92035aa0257795e4a7309c5a12872e8f2c44c55b95066c68338655009b6bcb57d6383db languageName: node linkType: hard "@tanstack/react-query@npm:^5.80.7": - version: 5.81.0 - resolution: "@tanstack/react-query@npm:5.81.0" + version: 5.81.1 + resolution: "@tanstack/react-query@npm:5.81.1" dependencies: - "@tanstack/query-core": "npm:5.81.0" + "@tanstack/query-core": "npm:5.81.1" peerDependencies: react: ^18 || ^19 - checksum: 10c0/a9f37efd7c8fe9c35da94608b1c8f1a3d18b597d9a411669f7449ca4f32b13b211e0b4c34cc04c36fdc445bd9bf7819b1015f85e603609fe321f894fbcfc2d43 + checksum: 10c0/8369904f9076f5f15c9af73ba93d7f0c73dc236107e7f772385031eb3fcddb921bd8b8686aaab14a3228f095fe6a8e7139384eda184152eb06a12c7d97f5009a languageName: node linkType: hard From cd1ad5dbc4778498b5236e7c57e50189547390c0 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sat, 21 Jun 2025 23:00:48 +0000 Subject: [PATCH 29/39] fix(deps): update dependency @tanstack/react-query to v5.81.2 --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index 8be8b20..eed029f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2974,21 +2974,21 @@ __metadata: languageName: node linkType: hard -"@tanstack/query-core@npm:5.81.1": - version: 5.81.1 - resolution: "@tanstack/query-core@npm:5.81.1" - checksum: 10c0/df3ad000c4497868bfc2cab6c36604931038ad583210a04b0cbc2b70a92035aa0257795e4a7309c5a12872e8f2c44c55b95066c68338655009b6bcb57d6383db +"@tanstack/query-core@npm:5.81.2": + version: 5.81.2 + resolution: "@tanstack/query-core@npm:5.81.2" + checksum: 10c0/36a6bddec2e7512015bcfbb0d7b0876fab418de9e0ef21ad403598276960e0b7d53efd62832ce462738ad22d9883e31cb5403eafc65dfd9b2f6744c22a9d8e42 languageName: node linkType: hard "@tanstack/react-query@npm:^5.80.7": - version: 5.81.1 - resolution: "@tanstack/react-query@npm:5.81.1" + version: 5.81.2 + resolution: "@tanstack/react-query@npm:5.81.2" dependencies: - "@tanstack/query-core": "npm:5.81.1" + "@tanstack/query-core": "npm:5.81.2" peerDependencies: react: ^18 || ^19 - checksum: 10c0/8369904f9076f5f15c9af73ba93d7f0c73dc236107e7f772385031eb3fcddb921bd8b8686aaab14a3228f095fe6a8e7139384eda184152eb06a12c7d97f5009a + checksum: 10c0/a80a2e7401a02bfc8d7a926c9e48b0a108cae21a2c47691632e754de44ca08838c105fb0c30804f4ccbf173bee04ad9a3e45a8bebdfc1d1a32468bbb9d960e19 languageName: node linkType: hard From 0da8e35b9b0fd4b7ea64b4cbd91868841589d57d Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 22 Jun 2025 00:03:20 +0000 Subject: [PATCH 30/39] fix(deps): update dependency next to v15.4.0-canary.91 --- package.json | 2 +- yarn.lock | 84 ++++++++++++++++++++++++++-------------------------- 2 files changed, 43 insertions(+), 43 deletions(-) diff --git a/package.json b/package.json index f6eea55..cc7da00 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "lucide-react": "^0.511.0", - "next": "15.4.0-canary.90", + "next": "15.4.0-canary.91", "next-auth": "^5.0.0-beta.25", "next-themes": "^0.4.6", "react": "^19.0.0", diff --git a/yarn.lock b/yarn.lock index eed029f..a28f3b9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -939,10 +939,10 @@ __metadata: languageName: node linkType: hard -"@next/env@npm:15.4.0-canary.90": - version: 15.4.0-canary.90 - resolution: "@next/env@npm:15.4.0-canary.90" - checksum: 10c0/35f21edabef17cbf6329e844e12d897e77091a2ce8fda2b9ab30fc1a52703ab2ed77cc5fbd3c9cefefbbc00b00108755dced544ffb91c632fca793739f5b8f28 +"@next/env@npm:15.4.0-canary.91": + version: 15.4.0-canary.91 + resolution: "@next/env@npm:15.4.0-canary.91" + checksum: 10c0/197c09cffff66a8055aaaee351a0c18743a6586b6e8a84dd6494badd0143601a4068f332ca89c0e6ffa9375671ec13803577c91690a4007e3bf2bbd5b9731bb0 languageName: node linkType: hard @@ -955,58 +955,58 @@ __metadata: languageName: node linkType: hard -"@next/swc-darwin-arm64@npm:15.4.0-canary.90": - version: 15.4.0-canary.90 - resolution: "@next/swc-darwin-arm64@npm:15.4.0-canary.90" +"@next/swc-darwin-arm64@npm:15.4.0-canary.91": + version: 15.4.0-canary.91 + resolution: "@next/swc-darwin-arm64@npm:15.4.0-canary.91" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@next/swc-darwin-x64@npm:15.4.0-canary.90": - version: 15.4.0-canary.90 - resolution: "@next/swc-darwin-x64@npm:15.4.0-canary.90" +"@next/swc-darwin-x64@npm:15.4.0-canary.91": + version: 15.4.0-canary.91 + resolution: "@next/swc-darwin-x64@npm:15.4.0-canary.91" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@next/swc-linux-arm64-gnu@npm:15.4.0-canary.90": - version: 15.4.0-canary.90 - resolution: "@next/swc-linux-arm64-gnu@npm:15.4.0-canary.90" +"@next/swc-linux-arm64-gnu@npm:15.4.0-canary.91": + version: 15.4.0-canary.91 + resolution: "@next/swc-linux-arm64-gnu@npm:15.4.0-canary.91" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-arm64-musl@npm:15.4.0-canary.90": - version: 15.4.0-canary.90 - resolution: "@next/swc-linux-arm64-musl@npm:15.4.0-canary.90" +"@next/swc-linux-arm64-musl@npm:15.4.0-canary.91": + version: 15.4.0-canary.91 + resolution: "@next/swc-linux-arm64-musl@npm:15.4.0-canary.91" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@next/swc-linux-x64-gnu@npm:15.4.0-canary.90": - version: 15.4.0-canary.90 - resolution: "@next/swc-linux-x64-gnu@npm:15.4.0-canary.90" +"@next/swc-linux-x64-gnu@npm:15.4.0-canary.91": + version: 15.4.0-canary.91 + resolution: "@next/swc-linux-x64-gnu@npm:15.4.0-canary.91" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-x64-musl@npm:15.4.0-canary.90": - version: 15.4.0-canary.90 - resolution: "@next/swc-linux-x64-musl@npm:15.4.0-canary.90" +"@next/swc-linux-x64-musl@npm:15.4.0-canary.91": + version: 15.4.0-canary.91 + resolution: "@next/swc-linux-x64-musl@npm:15.4.0-canary.91" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@next/swc-win32-arm64-msvc@npm:15.4.0-canary.90": - version: 15.4.0-canary.90 - resolution: "@next/swc-win32-arm64-msvc@npm:15.4.0-canary.90" +"@next/swc-win32-arm64-msvc@npm:15.4.0-canary.91": + version: 15.4.0-canary.91 + resolution: "@next/swc-win32-arm64-msvc@npm:15.4.0-canary.91" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@next/swc-win32-x64-msvc@npm:15.4.0-canary.90": - version: 15.4.0-canary.90 - resolution: "@next/swc-win32-x64-msvc@npm:15.4.0-canary.90" +"@next/swc-win32-x64-msvc@npm:15.4.0-canary.91": + version: 15.4.0-canary.91 + resolution: "@next/swc-win32-x64-msvc@npm:15.4.0-canary.91" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -6573,7 +6573,7 @@ __metadata: eslint-config-next: "npm:15.3.4" eslint-config-prettier: "npm:10.1.5" lucide-react: "npm:^0.511.0" - next: "npm:15.4.0-canary.90" + next: "npm:15.4.0-canary.91" next-auth: "npm:^5.0.0-beta.25" next-themes: "npm:^0.4.6" orval: "npm:7.10.0" @@ -6856,19 +6856,19 @@ __metadata: languageName: node linkType: hard -"next@npm:15.4.0-canary.90": - version: 15.4.0-canary.90 - resolution: "next@npm:15.4.0-canary.90" +"next@npm:15.4.0-canary.91": + version: 15.4.0-canary.91 + resolution: "next@npm:15.4.0-canary.91" dependencies: - "@next/env": "npm:15.4.0-canary.90" - "@next/swc-darwin-arm64": "npm:15.4.0-canary.90" - "@next/swc-darwin-x64": "npm:15.4.0-canary.90" - "@next/swc-linux-arm64-gnu": "npm:15.4.0-canary.90" - "@next/swc-linux-arm64-musl": "npm:15.4.0-canary.90" - "@next/swc-linux-x64-gnu": "npm:15.4.0-canary.90" - "@next/swc-linux-x64-musl": "npm:15.4.0-canary.90" - "@next/swc-win32-arm64-msvc": "npm:15.4.0-canary.90" - "@next/swc-win32-x64-msvc": "npm:15.4.0-canary.90" + "@next/env": "npm:15.4.0-canary.91" + "@next/swc-darwin-arm64": "npm:15.4.0-canary.91" + "@next/swc-darwin-x64": "npm:15.4.0-canary.91" + "@next/swc-linux-arm64-gnu": "npm:15.4.0-canary.91" + "@next/swc-linux-arm64-musl": "npm:15.4.0-canary.91" + "@next/swc-linux-x64-gnu": "npm:15.4.0-canary.91" + "@next/swc-linux-x64-musl": "npm:15.4.0-canary.91" + "@next/swc-win32-arm64-msvc": "npm:15.4.0-canary.91" + "@next/swc-win32-x64-msvc": "npm:15.4.0-canary.91" "@swc/helpers": "npm:0.5.15" caniuse-lite: "npm:^1.0.30001579" postcss: "npm:8.4.31" @@ -6911,7 +6911,7 @@ __metadata: optional: true bin: next: dist/bin/next - checksum: 10c0/77be3c261ae6a6ee63207ff8ee4988b38b5507652067a59606d87dd5adb647deb1bb6da7fc7f00a6ae10c48b7d2ff479b86388d4dd38e0f8ac7f02c78cc006cf + checksum: 10c0/5d08e5365d52f9f941dcbb02e7a5c56cf68f931be1a60b1386ce042a12722938e657d6c3a4bcd8c573a88b214a1bb2a0a757b1a339aa751483fecf3b987e66e5 languageName: node linkType: hard From 525b8597f211ebbb4a0107b430c1f721e8771393 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 22 Jun 2025 13:01:47 +0000 Subject: [PATCH 31/39] fix(deps): update dependency next-auth to v5.0.0-beta.29 --- yarn.lock | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/yarn.lock b/yarn.lock index a28f3b9..c09e949 100644 --- a/yarn.lock +++ b/yarn.lock @@ -108,6 +108,30 @@ __metadata: languageName: node linkType: hard +"@auth/core@npm:0.40.0": + version: 0.40.0 + resolution: "@auth/core@npm:0.40.0" + dependencies: + "@panva/hkdf": "npm:^1.2.1" + jose: "npm:^6.0.6" + oauth4webapi: "npm:^3.3.0" + preact: "npm:10.24.3" + preact-render-to-string: "npm:6.5.11" + peerDependencies: + "@simplewebauthn/browser": ^9.0.1 + "@simplewebauthn/server": ^9.0.2 + nodemailer: ^6.8.0 + peerDependenciesMeta: + "@simplewebauthn/browser": + optional: true + "@simplewebauthn/server": + optional: true + nodemailer: + optional: true + checksum: 10c0/25cd12f22611eedc21c17dc1908fa9428ae5f0e32eb32c1ab009642276c37099cce58f49ffbb7f8e8d6d6488d5101a24fb9808ec662eee5aca19d520750acaa3 + languageName: node + linkType: hard + "@auth/prisma-adapter@npm:^2.9.1": version: 2.9.1 resolution: "@auth/prisma-adapter@npm:2.9.1" @@ -6825,10 +6849,10 @@ __metadata: linkType: hard "next-auth@npm:^5.0.0-beta.25": - version: 5.0.0-beta.28 - resolution: "next-auth@npm:5.0.0-beta.28" + version: 5.0.0-beta.29 + resolution: "next-auth@npm:5.0.0-beta.29" dependencies: - "@auth/core": "npm:0.39.1" + "@auth/core": "npm:0.40.0" peerDependencies: "@simplewebauthn/browser": ^9.0.1 "@simplewebauthn/server": ^9.0.2 @@ -6842,7 +6866,7 @@ __metadata: optional: true nodemailer: optional: true - checksum: 10c0/56ab8c5e9bdbffe65191a1afa1d18b95df9f61686f9d2faca3f53098eb59491df5929540d8bdb3258a0ab8d26ff2707e6256e34212c329c624f3014652cb8701 + checksum: 10c0/2c6bada9a5f28a9a172d3ad295bfb05b648a4fced01f9988154df1ebca712cf460fb49173ada4c26de4c7ab180256f40ac19d16e2147c1c68f2a7475ab5d5ea8 languageName: node linkType: hard From f240bf525d24ed5101c74f70164960ca01fc353b Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Sun, 22 Jun 2025 14:02:45 +0000 Subject: [PATCH 32/39] fix(deps): update dependency @auth/prisma-adapter to v2.10.0 --- yarn.lock | 32 ++++---------------------------- 1 file changed, 4 insertions(+), 28 deletions(-) diff --git a/yarn.lock b/yarn.lock index c09e949..786729a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -84,30 +84,6 @@ __metadata: languageName: node linkType: hard -"@auth/core@npm:0.39.1": - version: 0.39.1 - resolution: "@auth/core@npm:0.39.1" - dependencies: - "@panva/hkdf": "npm:^1.2.1" - jose: "npm:^6.0.6" - oauth4webapi: "npm:^3.3.0" - preact: "npm:10.24.3" - preact-render-to-string: "npm:6.5.11" - peerDependencies: - "@simplewebauthn/browser": ^9.0.1 - "@simplewebauthn/server": ^9.0.2 - nodemailer: ^6.8.0 - peerDependenciesMeta: - "@simplewebauthn/browser": - optional: true - "@simplewebauthn/server": - optional: true - nodemailer: - optional: true - checksum: 10c0/ba2703656c266ce42f10a1e5ac90c2bcbc829bff651cc930ad95a4734aafaa249551d0af589a0c970fbd7f7aa6324c329439183bfb46ba1bee3f8cfa90128275 - languageName: node - linkType: hard - "@auth/core@npm:0.40.0": version: 0.40.0 resolution: "@auth/core@npm:0.40.0" @@ -133,13 +109,13 @@ __metadata: linkType: hard "@auth/prisma-adapter@npm:^2.9.1": - version: 2.9.1 - resolution: "@auth/prisma-adapter@npm:2.9.1" + version: 2.10.0 + resolution: "@auth/prisma-adapter@npm:2.10.0" dependencies: - "@auth/core": "npm:0.39.1" + "@auth/core": "npm:0.40.0" peerDependencies: "@prisma/client": ">=2.26.0 || >=3 || >=4 || >=5 || >=6" - checksum: 10c0/615ee7c02f690e35ccac8206607a4345ca6455c322a741ddd4dbd52e7a068ace9e5c46c4d8a50fe471ca2c2fb6a5b4bb9924cbd2e911613f671fe929c33278d4 + checksum: 10c0/f6c95f144958c678e8cbc691b205c937cbc456beab3da035ab3e00d55e91b8b39be6ff8529dbe3c72d0f95365988db09bc5862445f70c2438061dbe69bca34f5 languageName: node linkType: hard From a3bfeb4e8209ceb5dc445c2b9d2d75ccbe6cd410 Mon Sep 17 00:00:00 2001 From: Semir Date: Thu, 15 May 2025 08:40:12 +0200 Subject: [PATCH 33/39] feat: Basic Calendar without any functions --- package.json | 3 +- src/app/home/page.tsx | 125 ++++++++++++++++++++++++++++++++----- yarn.lock | 142 ++++++++++++++++++++++++++++++++---------- 3 files changed, 220 insertions(+), 50 deletions(-) diff --git a/package.json b/package.json index cc7da00..1214589 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,8 @@ "next": "15.4.0-canary.91", "next-auth": "^5.0.0-beta.25", "next-themes": "^0.4.6", - "react": "^19.0.0", + "react": "^19.1.0", + "react-calendar": "^5.1.0", "react-dom": "^19.0.0", "react-hook-form": "^7.56.4", "swagger-ui-react": "^5.24.1", diff --git a/src/app/home/page.tsx b/src/app/home/page.tsx index 77f3cf8..527b231 100644 --- a/src/app/home/page.tsx +++ b/src/app/home/page.tsx @@ -1,23 +1,114 @@ -'use client'; +import React from 'react'; -import { RedirectButton } from '@/components/buttons/redirect-button'; -import { ThemePicker } from '@/components/misc/theme-picker'; -import { useGetApiUserMe } from '@/generated/api/user/user'; +const Calendar: React.FC = () => { + const today = new Date(); + const currentYear = today.getFullYear(); + const currentMonth = today.getMonth(); + const currentDate = today.getDate(); -export default function Home() { - const { data, isLoading } = useGetApiUserMe(); + const firstDayMonth = new Date(currentYear, currentMonth, 1); + const lastDayMonth = new Date(currentYear, currentMonth + 1, 0); + const startDay = (firstDayMonth.getDay() + 6) % 7; + const daysMonth = lastDayMonth.getDate(); + + const weeks: (number | null)[][] = []; + let currentDay = 1; + + const firstWeek: (number | null)[] = []; + for (let i = 0; i < 7; i++) { + if (i < startDay) { + firstWeek.push(null); + } else { + firstWeek.push(currentDay); + currentDay++; + } + } + weeks.push(firstWeek); + + while (currentDay <= daysMonth) { + const week: (number | null)[] = []; + for (let i = 0; i < 7; i++) { + if (currentDay <= daysMonth) { + week.push(currentDay); + currentDay++; + } else { + week.push(null); + } + } + weeks.push(week); + } + + const weekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']; return ( -
-
{}
-
-

- Hello{' '} - {isLoading ? 'Loading...' : data?.data.user?.name || 'Unknown User'} -

- - -
+
+

+ {new Date(currentYear, currentMonth).toLocaleString('en-EN', { + month: 'long', + year: 'numeric' + })} +

+ + + + {weekdays.map((day, index) => ( + + ))} + + + + {weeks.map((week, weekIndex) => ( + + {week.map((day, dayIndex) => ( + + ))} + + ))} + +
+ {day} +
+ {day && ( +
+ {day} +
+ )} +
); -} +}; + +export default Calendar; \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 786729a..705a064 100644 --- a/yarn.lock +++ b/yarn.lock @@ -543,15 +543,15 @@ __metadata: linkType: hard "@gerrit0/mini-shiki@npm:^3.2.2": - version: 3.6.0 - resolution: "@gerrit0/mini-shiki@npm:3.6.0" + version: 3.7.0 + resolution: "@gerrit0/mini-shiki@npm:3.7.0" dependencies: - "@shikijs/engine-oniguruma": "npm:^3.6.0" - "@shikijs/langs": "npm:^3.6.0" - "@shikijs/themes": "npm:^3.6.0" - "@shikijs/types": "npm:^3.6.0" + "@shikijs/engine-oniguruma": "npm:^3.7.0" + "@shikijs/langs": "npm:^3.7.0" + "@shikijs/themes": "npm:^3.7.0" + "@shikijs/types": "npm:^3.7.0" "@shikijs/vscode-textmate": "npm:^10.0.2" - checksum: 10c0/347456c9da8a1fadd3c1f63097da459a5f930ef4bca6431cce913a379012c551e061d0a94ff7a0f307215b87f2418b7c198a55fba888fc97fb02ab36247adf6b + checksum: 10c0/eb3f4900d841338077d839ebbc7f8722b13876a586cff7abc73295e956683724dd3371a9f990900184a2d069461965951b2604d677991badf3474262e7811384 languageName: node linkType: hard @@ -1966,7 +1966,7 @@ __metadata: languageName: node linkType: hard -"@shikijs/engine-oniguruma@npm:^3.6.0": +"@shikijs/engine-oniguruma@npm:^3.7.0": version: 3.7.0 resolution: "@shikijs/engine-oniguruma@npm:3.7.0" dependencies: @@ -1976,7 +1976,7 @@ __metadata: languageName: node linkType: hard -"@shikijs/langs@npm:^3.6.0": +"@shikijs/langs@npm:^3.7.0": version: 3.7.0 resolution: "@shikijs/langs@npm:3.7.0" dependencies: @@ -1985,7 +1985,7 @@ __metadata: languageName: node linkType: hard -"@shikijs/themes@npm:^3.6.0": +"@shikijs/themes@npm:^3.7.0": version: 3.7.0 resolution: "@shikijs/themes@npm:3.7.0" dependencies: @@ -1994,7 +1994,7 @@ __metadata: languageName: node linkType: hard -"@shikijs/types@npm:3.7.0, @shikijs/types@npm:^3.6.0": +"@shikijs/types@npm:3.7.0, @shikijs/types@npm:^3.7.0": version: 3.7.0 resolution: "@shikijs/types@npm:3.7.0" dependencies: @@ -3460,6 +3460,13 @@ __metadata: languageName: node linkType: hard +"@wojtekmaj/date-utils@npm:^1.1.3": + version: 1.5.1 + resolution: "@wojtekmaj/date-utils@npm:1.5.1" + checksum: 10c0/7c213cca5ab6b84ef61b9aea2b9fb8a04bf4c9764b28a97ffc4ee46a3e81560532a74d106a6f8aeef4792e1aaa6ea3dfd3c4a639dddbea560eb3f33cd62b8d7d + languageName: node + linkType: hard + "abbrev@npm:^3.0.0": version: 3.0.1 resolution: "abbrev@npm:3.0.1" @@ -3662,7 +3669,7 @@ __metadata: languageName: node linkType: hard -"array-includes@npm:^3.1.6, array-includes@npm:^3.1.8": +"array-includes@npm:^3.1.6, array-includes@npm:^3.1.8, array-includes@npm:^3.1.9": version: 3.1.9 resolution: "array-includes@npm:3.1.9" dependencies: @@ -3699,7 +3706,7 @@ __metadata: languageName: node linkType: hard -"array.prototype.findlastindex@npm:^1.2.5": +"array.prototype.findlastindex@npm:^1.2.6": version: 1.2.6 resolution: "array.prototype.findlastindex@npm:1.2.6" dependencies: @@ -3714,7 +3721,7 @@ __metadata: languageName: node linkType: hard -"array.prototype.flat@npm:^1.3.1, array.prototype.flat@npm:^1.3.2": +"array.prototype.flat@npm:^1.3.1, array.prototype.flat@npm:^1.3.3": version: 1.3.3 resolution: "array.prototype.flat@npm:1.3.3" dependencies: @@ -4051,7 +4058,7 @@ __metadata: languageName: node linkType: hard -"clsx@npm:^2.1.1": +"clsx@npm:^2.0.0, clsx@npm:^2.1.1": version: 2.1.1 resolution: "clsx@npm:2.1.1" checksum: 10c0/c4c8eb865f8c82baab07e71bfa8897c73454881c4f99d6bc81585aecd7c441746c1399d08363dc096c550cceaf97bd4ce1e8854e1771e9998d9f94c4fe075839 @@ -4792,7 +4799,7 @@ __metadata: languageName: node linkType: hard -"eslint-module-utils@npm:^2.12.0": +"eslint-module-utils@npm:^2.12.1": version: 2.12.1 resolution: "eslint-module-utils@npm:2.12.1" dependencies: @@ -4805,31 +4812,31 @@ __metadata: linkType: hard "eslint-plugin-import@npm:^2.31.0": - version: 2.31.0 - resolution: "eslint-plugin-import@npm:2.31.0" + version: 2.32.0 + resolution: "eslint-plugin-import@npm:2.32.0" dependencies: "@rtsao/scc": "npm:^1.1.0" - array-includes: "npm:^3.1.8" - array.prototype.findlastindex: "npm:^1.2.5" - array.prototype.flat: "npm:^1.3.2" - array.prototype.flatmap: "npm:^1.3.2" + array-includes: "npm:^3.1.9" + array.prototype.findlastindex: "npm:^1.2.6" + array.prototype.flat: "npm:^1.3.3" + array.prototype.flatmap: "npm:^1.3.3" debug: "npm:^3.2.7" doctrine: "npm:^2.1.0" eslint-import-resolver-node: "npm:^0.3.9" - eslint-module-utils: "npm:^2.12.0" + eslint-module-utils: "npm:^2.12.1" hasown: "npm:^2.0.2" - is-core-module: "npm:^2.15.1" + is-core-module: "npm:^2.16.1" is-glob: "npm:^4.0.3" minimatch: "npm:^3.1.2" object.fromentries: "npm:^2.0.8" object.groupby: "npm:^1.0.3" - object.values: "npm:^1.2.0" + object.values: "npm:^1.2.1" semver: "npm:^6.3.1" - string.prototype.trimend: "npm:^1.0.8" + string.prototype.trimend: "npm:^1.0.9" tsconfig-paths: "npm:^3.15.0" peerDependencies: eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 - checksum: 10c0/e21d116ddd1900e091ad120b3eb68c5dd5437fe2c930f1211781cd38b246f090a6b74d5f3800b8255a0ed29782591521ad44eb21c5534960a8f1fb4040fd913a + checksum: 10c0/bfb1b8fc8800398e62ddfefbf3638d185286edfed26dfe00875cc2846d954491b4f5112457831588b757fa789384e1ae585f812614c4797f0499fa234fd4a48b languageName: node linkType: hard @@ -5359,6 +5366,15 @@ __metadata: languageName: node linkType: hard +"get-user-locale@npm:^2.2.1": + version: 2.3.2 + resolution: "get-user-locale@npm:2.3.2" + dependencies: + mem: "npm:^8.0.0" + checksum: 10c0/2796b3fc3782b1f4826f31e899642cf72eeb23e296e1cf55280aab5caf7a25f4b906491ee1508a001519d6a410902ccf8fa8edaa895b7aee5dfd422ffe5523b9 + languageName: node + linkType: hard + "glob-parent@npm:^5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" @@ -5758,7 +5774,7 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.13.0, is-core-module@npm:^2.15.1, is-core-module@npm:^2.16.0": +"is-core-module@npm:^2.13.0, is-core-module@npm:^2.16.0, is-core-module@npm:^2.16.1": version: 2.16.1 resolution: "is-core-module@npm:2.16.1" dependencies: @@ -6505,6 +6521,15 @@ __metadata: languageName: node linkType: hard +"map-age-cleaner@npm:^0.1.3": + version: 0.1.3 + resolution: "map-age-cleaner@npm:0.1.3" + dependencies: + p-defer: "npm:^1.0.0" + checksum: 10c0/7495236c7b0950956c144fd8b4bc6399d4e78072a8840a4232fe1c4faccbb5eb5d842e5c0a56a60afc36d723f315c1c672325ca03c1b328650f7fcc478f385fd + languageName: node + linkType: hard + "markdown-it@npm:^14.1.0": version: 14.1.0 resolution: "markdown-it@npm:14.1.0" @@ -6580,7 +6605,8 @@ __metadata: postcss: "npm:8.5.6" prettier: "npm:3.5.3" prisma: "npm:6.10.1" - react: "npm:^19.0.0" + react: "npm:^19.1.0" + react-calendar: "npm:^5.1.0" react-dom: "npm:^19.0.0" react-hook-form: "npm:^7.56.4" swagger-ui-react: "npm:^5.24.1" @@ -6594,6 +6620,16 @@ __metadata: languageName: unknown linkType: soft +"mem@npm:^8.0.0": + version: 8.1.1 + resolution: "mem@npm:8.1.1" + dependencies: + map-age-cleaner: "npm:^0.1.3" + mimic-fn: "npm:^3.1.0" + checksum: 10c0/5829c404d024c1accaf76ebacbc7eae9b59e5ce5722d184aa24e8387a8097a499f6aa7e181021003c51eb87b2dcdc9a2270050c58753cce761de206643cba91c + languageName: node + linkType: hard + "merge-stream@npm:^2.0.0": version: 2.0.0 resolution: "merge-stream@npm:2.0.0" @@ -6641,6 +6677,13 @@ __metadata: languageName: node linkType: hard +"mimic-fn@npm:^3.1.0": + version: 3.1.0 + resolution: "mimic-fn@npm:3.1.0" + checksum: 10c0/a07cdd8ed6490c2dff5b11f889b245d9556b80f5a653a552a651d17cff5a2d156e632d235106c2369f00cccef4071704589574cf3601bc1b1400a1f620dff067 + languageName: node + linkType: hard + "minim@npm:~0.23.8": version: 0.23.8 resolution: "minim@npm:0.23.8" @@ -7185,7 +7228,7 @@ __metadata: languageName: node linkType: hard -"object.values@npm:^1.1.6, object.values@npm:^1.2.0, object.values@npm:^1.2.1": +"object.values@npm:^1.1.6, object.values@npm:^1.2.1": version: 1.2.1 resolution: "object.values@npm:1.2.1" dependencies: @@ -7303,6 +7346,13 @@ __metadata: languageName: node linkType: hard +"p-defer@npm:^1.0.0": + version: 1.0.0 + resolution: "p-defer@npm:1.0.0" + checksum: 10c0/ed603c3790e74b061ac2cb07eb6e65802cf58dce0fbee646c113a7b71edb711101329ad38f99e462bd2e343a74f6e9366b496a35f1d766c187084d3109900487 + languageName: node + linkType: hard + "p-limit@npm:^3.0.2": version: 3.1.0 resolution: "p-limit@npm:3.1.0" @@ -7630,6 +7680,25 @@ __metadata: languageName: node linkType: hard +"react-calendar@npm:^5.1.0": + version: 5.1.0 + resolution: "react-calendar@npm:5.1.0" + dependencies: + "@wojtekmaj/date-utils": "npm:^1.1.3" + clsx: "npm:^2.0.0" + get-user-locale: "npm:^2.2.1" + warning: "npm:^4.0.0" + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/27673f639c5d6296342a2a888436b31a5d602faeaae01be83b2beb98ff568b0a3d1514f5cc50fcacf3ac50b9c0b9d2fb423b0c001a8f5f1a22816671409e2616 + languageName: node + linkType: hard + "react-copy-to-clipboard@npm:5.1.0": version: 5.1.0 resolution: "react-copy-to-clipboard@npm:5.1.0" @@ -7798,7 +7867,7 @@ __metadata: languageName: node linkType: hard -"react@npm:^19.0.0": +"react@npm:^19.1.0": version: 19.1.0 resolution: "react@npm:19.1.0" checksum: 10c0/530fb9a62237d54137a13d2cfb67a7db6a2156faed43eecc423f4713d9b20c6f2728b026b45e28fcd72e8eadb9e9ed4b089e99f5e295d2f0ad3134251bdd3698 @@ -8569,7 +8638,7 @@ __metadata: languageName: node linkType: hard -"string.prototype.trimend@npm:^1.0.8, string.prototype.trimend@npm:^1.0.9": +"string.prototype.trimend@npm:^1.0.9": version: 1.0.9 resolution: "string.prototype.trimend@npm:1.0.9" dependencies: @@ -9324,6 +9393,15 @@ __metadata: languageName: node linkType: hard +"warning@npm:^4.0.0": + version: 4.0.3 + resolution: "warning@npm:4.0.3" + dependencies: + loose-envify: "npm:^1.0.0" + checksum: 10c0/aebab445129f3e104c271f1637fa38e55eb25f968593e3825bd2f7a12bd58dc3738bb70dc8ec85826621d80b4acfed5a29ebc9da17397c6125864d72301b937e + languageName: node + linkType: hard + "web-streams-polyfill@npm:^3.0.3": version: 3.3.3 resolution: "web-streams-polyfill@npm:3.3.3" From 7ba51a2af0cb069c480c6ddb23df0af0963607cc Mon Sep 17 00:00:00 2001 From: Semir Date: Fri, 23 May 2025 15:23:01 +0200 Subject: [PATCH 34/39] feat: Calendar Update --- package.json | 3 +- src/app/home/page.tsx | 135 +++++---------------- yarn.lock | 266 +++++++++++++++++++++++++++++++----------- 3 files changed, 227 insertions(+), 177 deletions(-) diff --git a/package.json b/package.json index 1214589..640b8d2 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "next-auth": "^5.0.0-beta.25", "next-themes": "^0.4.6", "react": "^19.1.0", - "react-calendar": "^5.1.0", + "react-big-calendar": "^1.18.0", "react-dom": "^19.0.0", "react-hook-form": "^7.56.4", "swagger-ui-react": "^5.24.1", @@ -57,6 +57,7 @@ "@tailwindcss/postcss": "4.1.10", "@types/node": "22.15.32", "@types/react": "19.1.8", + "@types/react-big-calendar": "^1", "@types/react-dom": "19.1.6", "@types/swagger-ui-react": "5", "@types/webpack-env": "1.18.8", diff --git a/src/app/home/page.tsx b/src/app/home/page.tsx index 527b231..b20d042 100644 --- a/src/app/home/page.tsx +++ b/src/app/home/page.tsx @@ -1,114 +1,31 @@ -import React from 'react'; +"use client"; -const Calendar: React.FC = () => { - const today = new Date(); - const currentYear = today.getFullYear(); - const currentMonth = today.getMonth(); - const currentDate = today.getDate(); +import { Calendar, momentLocalizer } from 'react-big-calendar'; +import moment from 'moment'; +import 'react-big-calendar/lib/css/react-big-calendar.css'; +import 'react-big-calendar/lib/addons/dragAndDrop/styles.css'; - const firstDayMonth = new Date(currentYear, currentMonth, 1); - const lastDayMonth = new Date(currentYear, currentMonth + 1, 0); - const startDay = (firstDayMonth.getDay() + 6) % 7; - const daysMonth = lastDayMonth.getDate(); +moment.updateLocale('en', { + week: { + dow: 1, + doy: 4, + }, +}); - const weeks: (number | null)[][] = []; - let currentDay = 1; +const localizer = momentLocalizer(moment) - const firstWeek: (number | null)[] = []; - for (let i = 0; i < 7; i++) { - if (i < startDay) { - firstWeek.push(null); - } else { - firstWeek.push(currentDay); - currentDay++; - } - } - weeks.push(firstWeek); +const MyCalendar = (props) => ( +
+ +
+) - while (currentDay <= daysMonth) { - const week: (number | null)[] = []; - for (let i = 0; i < 7; i++) { - if (currentDay <= daysMonth) { - week.push(currentDay); - currentDay++; - } else { - week.push(null); - } - } - weeks.push(week); - } - - const weekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']; - - return ( -
-

- {new Date(currentYear, currentMonth).toLocaleString('en-EN', { - month: 'long', - year: 'numeric' - })} -

- - - - {weekdays.map((day, index) => ( - - ))} - - - - {weeks.map((week, weekIndex) => ( - - {week.map((day, dayIndex) => ( - - ))} - - ))} - -
- {day} -
- {day && ( -
- {day} -
- )} -
-
- ); -}; - -export default Calendar; \ No newline at end of file +export default MyCalendar; \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 705a064..f747c59 100644 --- a/yarn.lock +++ b/yarn.lock @@ -128,7 +128,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.3.1": +"@babel/runtime@npm:^7.13.8, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.6.3, @babel/runtime@npm:^7.8.7": version: 7.27.6 resolution: "@babel/runtime@npm:7.27.6" checksum: 10c0/89726be83f356f511dcdb74d3ea4d873a5f0cf0017d4530cb53aa27380c01ca102d573eff8b8b77815e624b1f8c24e7f0311834ad4fb632c90a770fda00bd4c8 @@ -1196,6 +1196,13 @@ __metadata: languageName: node linkType: hard +"@popperjs/core@npm:^2.11.6": + version: 2.11.8 + resolution: "@popperjs/core@npm:2.11.8" + checksum: 10c0/4681e682abc006d25eb380d0cf3efc7557043f53b6aea7a5057d0d1e7df849a00e281cd8ea79c902a35a414d7919621fc2ba293ecec05f413598e0b23d5a1e63 + languageName: node + linkType: hard + "@prisma/client@npm:^6.9.0": version: 6.10.1 resolution: "@prisma/client@npm:6.10.1" @@ -1945,6 +1952,17 @@ __metadata: languageName: node linkType: hard +"@restart/hooks@npm:^0.4.7": + version: 0.4.16 + resolution: "@restart/hooks@npm:0.4.16" + dependencies: + dequal: "npm:^2.0.3" + peerDependencies: + react: ">=16.8.0" + checksum: 10c0/b6a0f1db046cdec28737092ab5defdfb25fad498d37d218646f7f123aed02a5078b1c89ae631bda14d9ee35f7bb8c9e0f15379b1a45003144dc30cd15e8ba668 + languageName: node + linkType: hard + "@rtsao/scc@npm:^1.1.0": version: 1.1.0 resolution: "@rtsao/scc@npm:1.1.0" @@ -3045,6 +3063,13 @@ __metadata: languageName: node linkType: hard +"@types/date-arithmetic@npm:*": + version: 4.1.4 + resolution: "@types/date-arithmetic@npm:4.1.4" + checksum: 10c0/4ee68b5a422bd5f1cf08923d18a08db558e653bbdc597677e0465a330f1e807da0e79b06b72651b62b19b4b922a779470f84657cbd765805f84f33af518b408f + languageName: node + linkType: hard + "@types/es-aggregate-error@npm:^1.0.2": version: 1.0.6 resolution: "@types/es-aggregate-error@npm:1.0.6" @@ -3111,6 +3136,13 @@ __metadata: languageName: node linkType: hard +"@types/prop-types@npm:*": + version: 15.7.15 + resolution: "@types/prop-types@npm:15.7.15" + checksum: 10c0/b59aad1ad19bf1733cf524fd4e618196c6c7690f48ee70a327eb450a42aab8e8a063fbe59ca0a5701aebe2d92d582292c0fb845ea57474f6a15f6994b0e260b2 + languageName: node + linkType: hard + "@types/ramda@npm:~0.30.0": version: 0.30.2 resolution: "@types/ramda@npm:0.30.2" @@ -3120,6 +3152,17 @@ __metadata: languageName: node linkType: hard +"@types/react-big-calendar@npm:^1": + version: 1.16.2 + resolution: "@types/react-big-calendar@npm:1.16.2" + dependencies: + "@types/date-arithmetic": "npm:*" + "@types/prop-types": "npm:*" + "@types/react": "npm:*" + checksum: 10c0/a2ea4116b999cf8dac014fdc4a9f0c10fb2fd9d9886857e93649c0a601057e93e73e3d9096a756b76e227e08f68e4c979f91bf4cfd96692aea3ab7f3df0745d0 + languageName: node + linkType: hard + "@types/react-dom@npm:19.1.6": version: 19.1.6 resolution: "@types/react-dom@npm:19.1.6" @@ -3129,7 +3172,7 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:*, @types/react@npm:19.1.8": +"@types/react@npm:*, @types/react@npm:19.1.8, @types/react@npm:>=16.9.11": version: 19.1.8 resolution: "@types/react@npm:19.1.8" dependencies: @@ -3182,6 +3225,13 @@ __metadata: languageName: node linkType: hard +"@types/warning@npm:^3.0.0": + version: 3.0.3 + resolution: "@types/warning@npm:3.0.3" + checksum: 10c0/82c1235bd05d7f6940f80012404844e225d589ad338aa4585b231a2c8deacc695b683f4168757c82c10047b81854cbeaaeefd60536dd67bb48f8a65e20410652 + languageName: node + linkType: hard + "@types/webpack-env@npm:1.18.8": version: 1.18.8 resolution: "@types/webpack-env@npm:1.18.8" @@ -3460,13 +3510,6 @@ __metadata: languageName: node linkType: hard -"@wojtekmaj/date-utils@npm:^1.1.3": - version: 1.5.1 - resolution: "@wojtekmaj/date-utils@npm:1.5.1" - checksum: 10c0/7c213cca5ab6b84ef61b9aea2b9fb8a04bf4c9764b28a97ffc4ee46a3e81560532a74d106a6f8aeef4792e1aaa6ea3dfd3c4a639dddbea560eb3f33cd62b8d7d - languageName: node - linkType: hard - "abbrev@npm:^3.0.0": version: 3.0.1 resolution: "abbrev@npm:3.0.1" @@ -4058,7 +4101,14 @@ __metadata: languageName: node linkType: hard -"clsx@npm:^2.0.0, clsx@npm:^2.1.1": +"clsx@npm:^1.2.1": + version: 1.2.1 + resolution: "clsx@npm:1.2.1" + checksum: 10c0/34dead8bee24f5e96f6e7937d711978380647e936a22e76380290e35486afd8634966ce300fc4b74a32f3762c7d4c0303f442c3e259f4ce02374eb0c82834f27 + languageName: node + linkType: hard + +"clsx@npm:^2.1.1": version: 2.1.1 resolution: "clsx@npm:2.1.1" checksum: 10c0/c4c8eb865f8c82baab07e71bfa8897c73454881c4f99d6bc81585aecd7c441746c1399d08363dc096c550cceaf97bd4ce1e8854e1771e9998d9f94c4fe075839 @@ -4219,6 +4269,20 @@ __metadata: languageName: node linkType: hard +"date-arithmetic@npm:^4.1.0": + version: 4.1.0 + resolution: "date-arithmetic@npm:4.1.0" + checksum: 10c0/697774a1a6a1b226004b5527326599c01a095bf715a0d43089e0493a565a91e7f4342b1b73b855c0e7b0caaf4bc947a61bc35ec60d162d52ef3c3c08eab26b6e + languageName: node + linkType: hard + +"dayjs@npm:^1.11.7": + version: 1.11.13 + resolution: "dayjs@npm:1.11.13" + checksum: 10c0/a3caf6ac8363c7dade9d1ee797848ddcf25c1ace68d9fe8678ecf8ba0675825430de5d793672ec87b24a69bf04a1544b176547b2539982275d5542a7955f35b7 + languageName: node + linkType: hard + "debug@npm:4, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.4.0": version: 4.4.1 resolution: "debug@npm:4.4.1" @@ -4297,6 +4361,13 @@ __metadata: languageName: node linkType: hard +"dequal@npm:^2.0.3": + version: 2.0.3 + resolution: "dequal@npm:2.0.3" + checksum: 10c0/f98860cdf58b64991ae10205137c0e97d384c3a4edc7f807603887b7c4b850af1224a33d88012009f150861cbee4fa2d322c4cc04b9313bee312e47f6ecaa888 + languageName: node + linkType: hard + "detect-libc@npm:^2.0.3, detect-libc@npm:^2.0.4": version: 2.0.4 resolution: "detect-libc@npm:2.0.4" @@ -4336,6 +4407,16 @@ __metadata: languageName: node linkType: hard +"dom-helpers@npm:^5.2.0, dom-helpers@npm:^5.2.1": + version: 5.2.1 + resolution: "dom-helpers@npm:5.2.1" + dependencies: + "@babel/runtime": "npm:^7.8.7" + csstype: "npm:^3.0.2" + checksum: 10c0/f735074d66dd759b36b158fa26e9d00c9388ee0e8c9b16af941c38f014a37fc80782de83afefd621681b19ac0501034b4f1c4a3bff5caa1b8667f0212b5e124c + languageName: node + linkType: hard + "dompurify@npm:=3.2.4": version: 3.2.4 resolution: "dompurify@npm:3.2.4" @@ -5366,15 +5447,6 @@ __metadata: languageName: node linkType: hard -"get-user-locale@npm:^2.2.1": - version: 2.3.2 - resolution: "get-user-locale@npm:2.3.2" - dependencies: - mem: "npm:^8.0.0" - checksum: 10c0/2796b3fc3782b1f4826f31e899642cf72eeb23e296e1cf55280aab5caf7a25f4b906491ee1508a001519d6a410902ccf8fa8edaa895b7aee5dfd422ffe5523b9 - languageName: node - linkType: hard - "glob-parent@npm:^5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" @@ -5409,6 +5481,13 @@ __metadata: languageName: node linkType: hard +"globalize@npm:^0.1.1": + version: 0.1.1 + resolution: "globalize@npm:0.1.1" + checksum: 10c0/6d4687e7c52a38e7f16f77339aef9b3364c34ce8cc1c8b8495b76418013252eaf5b2453fbc2d8bb9e6e56c739262665484dc7ac51b729501ff0a3b822730116b + languageName: node + linkType: hard + "globals@npm:^14.0.0": version: 14.0.0 resolution: "globals@npm:14.0.0" @@ -5672,7 +5751,7 @@ __metadata: languageName: node linkType: hard -"invariant@npm:^2.2.2": +"invariant@npm:^2.2.2, invariant@npm:^2.2.4": version: 2.2.4 resolution: "invariant@npm:2.2.4" dependencies: @@ -6365,6 +6444,13 @@ __metadata: languageName: node linkType: hard +"lodash-es@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash-es@npm:4.17.21" + checksum: 10c0/fb407355f7e6cd523a9383e76e6b455321f0f153a6c9625e21a8827d10c54c2a2341bd2ae8d034358b60e07325e1330c14c224ff582d04612a46a4f0479ff2f2 + languageName: node + linkType: hard + "lodash.debounce@npm:^4": version: 4.0.8 resolution: "lodash.debounce@npm:4.0.8" @@ -6486,6 +6572,13 @@ __metadata: languageName: node linkType: hard +"luxon@npm:^3.2.1": + version: 3.6.1 + resolution: "luxon@npm:3.6.1" + checksum: 10c0/906d57a9dc4d1de9383f2e9223e378c298607c1b4d17b6657b836a3cd120feb1c1de3b5d06d846a3417e1ca764de8476e8c23b3cd4083b5cdb870adcb06a99d5 + languageName: node + linkType: hard + "magic-string@npm:^0.30.17": version: 0.30.17 resolution: "magic-string@npm:0.30.17" @@ -6521,15 +6614,6 @@ __metadata: languageName: node linkType: hard -"map-age-cleaner@npm:^0.1.3": - version: 0.1.3 - resolution: "map-age-cleaner@npm:0.1.3" - dependencies: - p-defer: "npm:^1.0.0" - checksum: 10c0/7495236c7b0950956c144fd8b4bc6399d4e78072a8840a4232fe1c4faccbb5eb5d842e5c0a56a60afc36d723f315c1c672325ca03c1b328650f7fcc478f385fd - languageName: node - linkType: hard - "markdown-it@npm:^14.1.0": version: 14.1.0 resolution: "markdown-it@npm:14.1.0" @@ -6587,6 +6671,7 @@ __metadata: "@tanstack/react-query": "npm:^5.80.7" "@types/node": "npm:22.15.32" "@types/react": "npm:19.1.8" + "@types/react-big-calendar": "npm:^1" "@types/react-dom": "npm:19.1.6" "@types/swagger-ui-react": "npm:5" "@types/webpack-env": "npm:1.18.8" @@ -6606,7 +6691,7 @@ __metadata: prettier: "npm:3.5.3" prisma: "npm:6.10.1" react: "npm:^19.1.0" - react-calendar: "npm:^5.1.0" + react-big-calendar: "npm:^1.18.0" react-dom: "npm:^19.0.0" react-hook-form: "npm:^7.56.4" swagger-ui-react: "npm:^5.24.1" @@ -6620,13 +6705,10 @@ __metadata: languageName: unknown linkType: soft -"mem@npm:^8.0.0": - version: 8.1.1 - resolution: "mem@npm:8.1.1" - dependencies: - map-age-cleaner: "npm:^0.1.3" - mimic-fn: "npm:^3.1.0" - checksum: 10c0/5829c404d024c1accaf76ebacbc7eae9b59e5ce5722d184aa24e8387a8097a499f6aa7e181021003c51eb87b2dcdc9a2270050c58753cce761de206643cba91c +"memoize-one@npm:^6.0.0": + version: 6.0.0 + resolution: "memoize-one@npm:6.0.0" + checksum: 10c0/45c88e064fd715166619af72e8cf8a7a17224d6edf61f7a8633d740ed8c8c0558a4373876c9b8ffc5518c2b65a960266adf403cc215cb1e90f7e262b58991f54 languageName: node linkType: hard @@ -6677,13 +6759,6 @@ __metadata: languageName: node linkType: hard -"mimic-fn@npm:^3.1.0": - version: 3.1.0 - resolution: "mimic-fn@npm:3.1.0" - checksum: 10c0/a07cdd8ed6490c2dff5b11f889b245d9556b80f5a653a552a651d17cff5a2d156e632d235106c2369f00cccef4071704589574cf3601bc1b1400a1f620dff067 - languageName: node - linkType: hard - "minim@npm:~0.23.8": version: 0.23.8 resolution: "minim@npm:0.23.8" @@ -6821,6 +6896,22 @@ __metadata: languageName: node linkType: hard +"moment-timezone@npm:^0.5.40": + version: 0.5.48 + resolution: "moment-timezone@npm:0.5.48" + dependencies: + moment: "npm:^2.29.4" + checksum: 10c0/ab14ec9d94bc33f29ac18e5417b7f8aca0b17130b952c5cc9697b8fea839e5ece9313af5fd3c9703a05db472b1560ddbfc7ad2aa24aac9afd047d6da6c3c6033 + languageName: node + linkType: hard + +"moment@npm:^2.29.4": + version: 2.30.1 + resolution: "moment@npm:2.30.1" + checksum: 10c0/865e4279418c6de666fca7786607705fd0189d8a7b7624e2e56be99290ac846f90878a6f602e34b4e0455c549b85385b1baf9966845962b313699e7cb847543a + languageName: node + linkType: hard + "ms@npm:^2.1.1, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" @@ -7346,13 +7437,6 @@ __metadata: languageName: node linkType: hard -"p-defer@npm:^1.0.0": - version: 1.0.0 - resolution: "p-defer@npm:1.0.0" - checksum: 10c0/ed603c3790e74b061ac2cb07eb6e65802cf58dce0fbee646c113a7b71edb711101329ad38f99e462bd2e343a74f6e9366b496a35f1d766c187084d3109900487 - languageName: node - linkType: hard - "p-limit@npm:^3.0.2": version: 3.1.0 resolution: "p-limit@npm:3.1.0" @@ -7590,7 +7674,7 @@ __metadata: languageName: node linkType: hard -"prop-types@npm:^15.8.1": +"prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" dependencies: @@ -7680,22 +7764,30 @@ __metadata: languageName: node linkType: hard -"react-calendar@npm:^5.1.0": - version: 5.1.0 - resolution: "react-calendar@npm:5.1.0" +"react-big-calendar@npm:^1.18.0": + version: 1.19.4 + resolution: "react-big-calendar@npm:1.19.4" dependencies: - "@wojtekmaj/date-utils": "npm:^1.1.3" - clsx: "npm:^2.0.0" - get-user-locale: "npm:^2.2.1" - warning: "npm:^4.0.0" + "@babel/runtime": "npm:^7.20.7" + clsx: "npm:^1.2.1" + date-arithmetic: "npm:^4.1.0" + dayjs: "npm:^1.11.7" + dom-helpers: "npm:^5.2.1" + globalize: "npm:^0.1.1" + invariant: "npm:^2.2.4" + lodash: "npm:^4.17.21" + lodash-es: "npm:^4.17.21" + luxon: "npm:^3.2.1" + memoize-one: "npm:^6.0.0" + moment: "npm:^2.29.4" + moment-timezone: "npm:^0.5.40" + prop-types: "npm:^15.8.1" + react-overlays: "npm:^5.2.1" + uncontrollable: "npm:^7.2.1" peerDependencies: - "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/27673f639c5d6296342a2a888436b31a5d602faeaae01be83b2beb98ff568b0a3d1514f5cc50fcacf3ac50b9c0b9d2fb423b0c001a8f5f1a22816671409e2616 + react: ^16.14.0 || ^17 || ^18 || ^19 + react-dom: ^16.14.0 || ^17 || ^18 || ^19 + checksum: 10c0/78730e6396c06a27b24af860fa64d063f6407ccd12546116eb8cb2f274d827891c68a701b9c83f9903f63e5dea03fb6a3dd46d6a0a9186b3ab2f7e1d994fe86b languageName: node linkType: hard @@ -7781,6 +7873,32 @@ __metadata: languageName: node linkType: hard +"react-lifecycles-compat@npm:^3.0.4": + version: 3.0.4 + resolution: "react-lifecycles-compat@npm:3.0.4" + checksum: 10c0/1d0df3c85af79df720524780f00c064d53a9dd1899d785eddb7264b378026979acbddb58a4b7e06e7d0d12aa1494fd5754562ee55d32907b15601068dae82c27 + languageName: node + linkType: hard + +"react-overlays@npm:^5.2.1": + version: 5.2.1 + resolution: "react-overlays@npm:5.2.1" + dependencies: + "@babel/runtime": "npm:^7.13.8" + "@popperjs/core": "npm:^2.11.6" + "@restart/hooks": "npm:^0.4.7" + "@types/warning": "npm:^3.0.0" + dom-helpers: "npm:^5.2.0" + prop-types: "npm:^15.7.2" + uncontrollable: "npm:^7.2.1" + warning: "npm:^4.0.3" + peerDependencies: + react: ">=16.3.0" + react-dom: ">=16.3.0" + checksum: 10c0/61836490040cfcdebc792b6eddcfac47b7b7e159f99304165371e9eb389a6875f20ddba3433421413ccfb918e8da6042ab2829f9b1f6f5dd9f8476aa16ddcfbe + languageName: node + linkType: hard + "react-redux@npm:^9.2.0": version: 9.2.0 resolution: "react-redux@npm:9.2.0" @@ -9193,6 +9311,20 @@ __metadata: languageName: node linkType: hard +"uncontrollable@npm:^7.2.1": + version: 7.2.1 + resolution: "uncontrollable@npm:7.2.1" + dependencies: + "@babel/runtime": "npm:^7.6.3" + "@types/react": "npm:>=16.9.11" + invariant: "npm:^2.2.4" + react-lifecycles-compat: "npm:^3.0.4" + peerDependencies: + react: ">=15.0.0" + checksum: 10c0/81473e892027a99f1ead6b9afd16db65097651cd36c4b6db710728f206f1fc4b82ba9170ecb4a1127a23857e01ba51c0194d0a7cfeecfea61ba9418e0276cb56 + languageName: node + linkType: hard + "undici-types@npm:~6.21.0": version: 6.21.0 resolution: "undici-types@npm:6.21.0" @@ -9393,7 +9525,7 @@ __metadata: languageName: node linkType: hard -"warning@npm:^4.0.0": +"warning@npm:^4.0.3": version: 4.0.3 resolution: "warning@npm:4.0.3" dependencies: From f3eadcb373287b4f69b14751e4fb57f44c9d18d8 Mon Sep 17 00:00:00 2001 From: Semir Date: Fri, 23 May 2025 15:27:16 +0200 Subject: [PATCH 35/39] feat: Calendar Update 1.1 --- src/app/home/page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/home/page.tsx b/src/app/home/page.tsx index b20d042..fcee5ad 100644 --- a/src/app/home/page.tsx +++ b/src/app/home/page.tsx @@ -28,4 +28,4 @@ const MyCalendar = (props) => (
) -export default MyCalendar; \ No newline at end of file +export default MyCalendar; From 4e65d0bfd982e4c86a839a697a8e9b1c1b481ffc Mon Sep 17 00:00:00 2001 From: Semir Date: Wed, 28 May 2025 09:51:16 +0200 Subject: [PATCH 36/39] feat: Custom Calendar Toolbar Add Custom Calendar Toolbar --- package.json | 1 + src/app/home/page.tsx | 7 + src/components/custom-toolbar.css | 139 +++++++++++++++++++ src/components/custom-toolbar.tsx | 218 ++++++++++++++++++++++++++++++ yarn.lock | 8 ++ 5 files changed, 373 insertions(+) create mode 100644 src/components/custom-toolbar.css create mode 100644 src/components/custom-toolbar.tsx diff --git a/package.json b/package.json index 640b8d2..73a8bae 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "bcryptjs": "^3.0.2", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", + "date-fns": "^4.1.0", "lucide-react": "^0.511.0", "next": "15.4.0-canary.91", "next-auth": "^5.0.0-beta.25", diff --git a/src/app/home/page.tsx b/src/app/home/page.tsx index fcee5ad..6149d47 100644 --- a/src/app/home/page.tsx +++ b/src/app/home/page.tsx @@ -4,6 +4,7 @@ import { Calendar, momentLocalizer } from 'react-big-calendar'; import moment from 'moment'; import 'react-big-calendar/lib/css/react-big-calendar.css'; import 'react-big-calendar/lib/addons/dragAndDrop/styles.css'; +import CustomToolbar from '@/components/custom-toolbar'; moment.updateLocale('en', { week: { @@ -24,6 +25,12 @@ const MyCalendar = (props) => ( style={{ height: 500 }} culture="de-DE" defaultView='week' + + /*CustomToolbar*/ + components={{ + toolbar: CustomToolbar + }} + /*CustomToolbar*/ />
) diff --git a/src/components/custom-toolbar.css b/src/components/custom-toolbar.css new file mode 100644 index 0000000..16e86ed --- /dev/null +++ b/src/components/custom-toolbar.css @@ -0,0 +1,139 @@ +/* custom-toolbar.css */ + +/* Container der Toolbar */ +.custom-toolbar { + display: flex; + flex-direction: column; + gap: 12px; + padding: 16px; + background-color: #ffffff; + border: 1px solid #e0e0e0; + /*border-radius: 8px;*/ + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; +} + +/* Style für den Bereich, in dem die Ansichten (Month, Week, etc.) gewechselt werden */ +.custom-toolbar .view-change .view-switcher { + display: flex; + gap: 8px; + justify-content: center; +} + +.custom-toolbar .view-change .view-switcher button { + padding: 8px 16px; + background-color: #c1830d; + /*border: 1px solid #ccc;*/ + border-radius: 11px; + font-size: 12px; + cursor: pointer; + transition: background-color 0.2s, border-color 0.2s; + height: 30px; + margin-top: 3.5px; + color: #ffffff; +} + +.custom-toolbar .view-change .view-switcher button:hover:not(:disabled) { + background-color: #e0e0e0; + border-color: #999; +} + +.custom-toolbar .view-change .view-switcher button:disabled { + background-color: #d0d0d0; + border-color: #aaa; + cursor: default; +} + +/* Anzeige des aktuellen Datums (Monat und Jahr) */ +.custom-toolbar .current-date { + font-weight: bold; + font-size: 12px; + text-align: center; + color: #ffffff; + margin: 4px 0; + background-color: #717171; + width: 178px; + height: 37px; + border-radius: 11px; +} + +/* Navigationsbereich (Today, Prev, Next) */ +.custom-toolbar .navigation-controls { + display: flex; + gap: 8px; + justify-content: center; +} + +.custom-toolbar .navigation-controls button { + padding: 8px 12px; + /*background-color: #2196F3;*/ + color: #ffffff; + border: none; + border-radius: 11px; + font-size: 12px; + cursor: pointer; + transition: background-color 0.2s; +} + +.custom-toolbar .navigation-controls button:hover { + background-color: #1976D2; +} + +.custom-toolbar .navigation-controls button:active { + background-color: #1565C0; +} + +/* Dropdown-Bereich für Woche und Jahr */ +.custom-toolbar .dropdowns { + display: flex; + gap: 8px; + justify-content: center; + height: 30px; + font-size: 10px; + margin-top: 3.5px; + border-radius: 11px; +} + +.custom-toolbar .dropdowns select { + padding: 8px 12px; + /*border: 1px solid #ccc;*/ + border-radius: 11px; + font-size: 10px; + background-color: #555555; + color: #ffffff; + cursor: pointer; + transition: border-color 0.2s; +} + +.custom-toolbar .dropdowns select:hover { + border-color: #999; +} + +.right-section { + background-color: #717171; + width: 393px; + height: 37px; + border-radius: 11px; +} + +.custom-toolbar .navigation-controls .handleWeek button { + background-color: #717171; + height: 30px; + width: 30px; + margin-bottom: 3.5px; +} + +.custom-toolbar .navigation-controls .today button { + background-color: #c6c6c6; + height: 30px; + width: 100px; + color: #000000; + margin-top: 3.5px; +} + +.view-change { + background-color: #717171; + height: 37px; + width: 290px; + border-radius: 11px; +} diff --git a/src/components/custom-toolbar.tsx b/src/components/custom-toolbar.tsx new file mode 100644 index 0000000..10feafa --- /dev/null +++ b/src/components/custom-toolbar.tsx @@ -0,0 +1,218 @@ +import React, { useState, useEffect } from 'react'; +import { format } from 'date-fns'; +import './custom-toolbar.css'; + +interface CustomToolbarProps { + // Das aktuell angezeigte Datum (wird z. B. von der Calendar-Komponente geliefert) + date: Date; + // Aktuelle Ansicht: "month", "week", "day" oder "agenda" + view: 'month' | 'week' | 'day' | 'agenda'; + /** + * onNavigate ermöglicht das Wechseln des angezeigten Datums. + * Action kann bspw. 'TODAY' oder 'SET_DATE' sein; newDate wird übergeben, wenn benötigt. + */ + onNavigate: (action: string, newDate?: Date) => void; + // onView wechselt die Ansicht + onView: (newView: 'month' | 'week' | 'day' | 'agenda') => void; +} + +const CustomToolbar: React.FC = ({ date, view, onNavigate, onView }) => { + + // Hilfsfunktion, um die ISO-Wochennummer eines Datums zu ermitteln + const getISOWeek = (date: Date): number => { + const tmp = new Date(date.getTime()); + // Verschiebe das Datum so, dass der nächste Donnerstag erreicht wird (ISO: Woche beginnt am Montag) + tmp.setDate(tmp.getDate() + 4 - (tmp.getDay() || 7)); + const yearStart = new Date(tmp.getFullYear(), 0, 1); + const weekNo = Math.ceil((((tmp.getTime() - yearStart.getTime()) / 86400000) + 1) / 7); + return weekNo; + }; + + // Neue Funktion: Ermittelt das ISO-Wochenjahr eines Datums. + // Das ISO-Wochenjahr entspricht dem Jahr des Donnerstags in dieser Woche. + const getISOWeekYear = (date: Date): number => { + const tmp = new Date(date.getTime()); + tmp.setDate(tmp.getDate() + 4 - (tmp.getDay() || 7)); + return tmp.getFullYear(); + }; + + // Ermittelt die Anzahl der ISO-Wochen im Jahr + const getISOWeeksInYear = (year: number): number => { + const d = new Date(year, 11, 31); + const week = getISOWeek(d); + return week === 1 ? getISOWeek(new Date(year, 11, 24)) : week; + }; + + /* + Berechnet den Montag der gewünschten ISO-Woche eines Jahres. + Wir ermitteln zunächst den ersten Montag der ersten ISO-Woche und addieren dann (week - 1) * 7 Tage. + */ + const getDateOfISOWeek = (week: number, year: number): Date => { + const jan1 = new Date(year, 0, 1); + const dayOfWeek = jan1.getDay(); + const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek; + let firstMonday: Date; + if (isoDayOfWeek <= 4) { + // Jan 1 gehört zur ersten ISO-Woche – bestimme den Montag dieser Woche + firstMonday = new Date(year, 0, 1 - isoDayOfWeek + 1); + } else { + // Andernfalls liegt der erste Montag in der darauffolgenden Woche + firstMonday = new Date(year, 0, 1 + (8 - isoDayOfWeek)); + } + firstMonday.setDate(firstMonday.getDate() + (week - 1) * 7); + return firstMonday; + }; + + // Lokaler State für Woche und ISO-Wochenjahr (statt des reinen Kalenderjahrs) + const [selectedWeek, setSelectedWeek] = useState(getISOWeek(date)); + const [selectedYear, setSelectedYear] = useState(getISOWeekYear(date)); + + // Aktualisiere die Auswahl, wenn sich die Prop "date" ändert + useEffect(() => { + setSelectedWeek(getISOWeek(date)); + setSelectedYear(getISOWeekYear(date)); + }, [date]); + + // Für die Dropdown-Liste der Wochen: Liste von 1 bis totalWeeks + const totalWeeks = getISOWeeksInYear(selectedYear); + const weekOptions = Array.from({ length: totalWeeks }, (_, i) => i + 1); + + // Beispielhafte Jahresliste: aktuelles ISO-Wochenjahr ± 10 + const yearOptions = Array.from({ length: 21 }, (_, i) => selectedYear - 10 + i); + + // Berechne den Start (Montag) und das Ende (Sonntag) der aktuell angezeigten Woche + const weekStartDate = getDateOfISOWeek(selectedWeek, selectedYear); + const weekEndDate = new Date(weekStartDate); + weekEndDate.setDate(weekStartDate.getDate() + 6); + + // Ermittele Monat und Jahr von Start- und Enddatum (normales Kalenderjahr) + const monthStart = format(weekStartDate, 'MMMM'); + const monthEnd = format(weekEndDate, 'MMMM'); + const yearAtStart = format(weekStartDate, 'yyyy'); + const yearAtEnd = format(weekEndDate, 'yyyy'); + + // Erstelle das Label: + // 1. Falls der Wochenanfang und das Wochenende in unterschiedlichen Jahren liegen, + // wird z. B. "Dezember 2025 - Januar 2026" angezeigt. + // 2. Liegen beide im gleichen Jahr, wird unterschieden zwischen gleichem Monat und unterschiedlichem Monat. + let dateLabel: string; + if (yearAtStart !== yearAtEnd) { + dateLabel = `${monthStart} ${yearAtStart} - ${monthEnd} ${yearAtEnd}`; + } else if (monthStart !== monthEnd) { + dateLabel = `${monthStart} - ${monthEnd} ${yearAtStart}`; + } else { + dateLabel = `${monthStart} ${yearAtStart}`; + } + + // Handler zum Wechseln der Ansicht + const handleViewChange = (newView: 'month' | 'week' | 'day' | 'agenda') => { + onView(newView); + }; + + // "Today"-Button: setzt das Datum auf das heutige Datum (unter Verwendung des ISO-Wochenjahrs) + const handleToday = () => { + const today = new Date(); + setSelectedWeek(getISOWeek(today)); + setSelectedYear(getISOWeekYear(today)); + onNavigate('TODAY', today); + }; + + // Wechselt zur vorherigen Woche. Bei Woche < 1, wird ins Vorjahr gewechselt. + const handlePrevWeek = () => { + let newWeek = selectedWeek - 1; + let newYear = selectedYear; + if (newWeek < 1) { + newYear = selectedYear - 1; + newWeek = getISOWeeksInYear(newYear); + } + setSelectedWeek(newWeek); + setSelectedYear(newYear); + const newDate = getDateOfISOWeek(newWeek, newYear); + onNavigate('SET_DATE', newDate); + }; + + // Wechselt zur nächsten Woche. Überschreitet die Woche die maximale Zahl, wechselt ins nächste Jahr. + const handleNextWeek = () => { + let newWeek = selectedWeek + 1; + let newYear = selectedYear; + if (newWeek > getISOWeeksInYear(selectedYear)) { + newYear = selectedYear + 1; + newWeek = 1; + } + setSelectedWeek(newWeek); + setSelectedYear(newYear); + const newDate = getDateOfISOWeek(newWeek, newYear); + onNavigate('SET_DATE', newDate); + }; + + // Handler, wenn der Nutzer über das Dropdown eine Woche auswählt + const handleWeekChange = (event: React.ChangeEvent) => { + const newWeek = parseInt(event.target.value, 10); + setSelectedWeek(newWeek); + const newDate = getDateOfISOWeek(newWeek, selectedYear); + onNavigate('SET_DATE', newDate); + }; + + // Handler, wenn der Nutzer über das Dropdown ein Jahr auswählt + const handleYearChange = (event: React.ChangeEvent) => { + const newYear = parseInt(event.target.value, 10); + setSelectedYear(newYear); + const totalWeeksInNewYear = getISOWeeksInYear(newYear); + const newWeek = Math.min(selectedWeek, totalWeeksInNewYear); + setSelectedWeek(newWeek); + const newDate = getDateOfISOWeek(newWeek, newYear); + onNavigate('SET_DATE', newDate); + }; + + return ( +
+ {/* Anzeige des Datums-Labels */} +
+ {dateLabel} +
+ + {/* Ansicht wechseln */} +
+
+ + + + +
+
+ +
+ {/* Navigationsbuttons */} +
+
+ + +
+
+ +
+
+ + {/* DropDowns für Woche und Jahr */} +
+ + +
+
+
+ ); +}; + +export default CustomToolbar; diff --git a/yarn.lock b/yarn.lock index f747c59..8096538 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4276,6 +4276,13 @@ __metadata: languageName: node linkType: hard +"date-fns@npm:^4.1.0": + version: 4.1.0 + resolution: "date-fns@npm:4.1.0" + checksum: 10c0/b79ff32830e6b7faa009590af6ae0fb8c3fd9ffad46d930548fbb5acf473773b4712ae887e156ba91a7b3dc30591ce0f517d69fd83bd9c38650fdc03b4e0bac8 + languageName: node + linkType: hard + "dayjs@npm:^1.11.7": version: 1.11.13 resolution: "dayjs@npm:1.11.13" @@ -6678,6 +6685,7 @@ __metadata: bcryptjs: "npm:^3.0.2" class-variance-authority: "npm:^0.7.1" clsx: "npm:^2.1.1" + date-fns: "npm:^4.1.0" dotenv-cli: "npm:8.0.0" eslint: "npm:9.29.0" eslint-config-next: "npm:15.3.4" From 3ca646e9ac903d7b06a220cd60b50c0662165aa2 Mon Sep 17 00:00:00 2001 From: Semir Date: Fri, 6 Jun 2025 10:43:25 +0200 Subject: [PATCH 37/39] feat: Calendar Layout and Function Update --- package.json | 1 + src/app/home/page.tsx | 39 +- src/components/calendar.tsx | 38 ++ src/components/custom-toolbar.css | 70 +- src/components/custom-toolbar.tsx | 249 ++++--- src/components/react-big-calendar.css | 904 ++++++++++++++++++++++++++ yarn.lock | 38 +- 7 files changed, 1172 insertions(+), 167 deletions(-) create mode 100644 src/components/calendar.tsx create mode 100644 src/components/react-big-calendar.css diff --git a/package.json b/package.json index 73a8bae..d02861a 100644 --- a/package.json +++ b/package.json @@ -47,6 +47,7 @@ "next-themes": "^0.4.6", "react": "^19.1.0", "react-big-calendar": "^1.18.0", + "react-datepicker": "^8.4.0", "react-dom": "^19.0.0", "react-hook-form": "^7.56.4", "swagger-ui-react": "^5.24.1", diff --git a/src/app/home/page.tsx b/src/app/home/page.tsx index 6149d47..0b7515a 100644 --- a/src/app/home/page.tsx +++ b/src/app/home/page.tsx @@ -1,38 +1,3 @@ -"use client"; +import Calendar from '@/components/calendar'; -import { Calendar, momentLocalizer } from 'react-big-calendar'; -import moment from 'moment'; -import 'react-big-calendar/lib/css/react-big-calendar.css'; -import 'react-big-calendar/lib/addons/dragAndDrop/styles.css'; -import CustomToolbar from '@/components/custom-toolbar'; - -moment.updateLocale('en', { - week: { - dow: 1, - doy: 4, - }, -}); - -const localizer = momentLocalizer(moment) - -const MyCalendar = (props) => ( -
- -
-) - -export default MyCalendar; +export default function home () {return } \ No newline at end of file diff --git a/src/components/calendar.tsx b/src/components/calendar.tsx new file mode 100644 index 0000000..defedab --- /dev/null +++ b/src/components/calendar.tsx @@ -0,0 +1,38 @@ +"use client"; + +import { Calendar, momentLocalizer } from 'react-big-calendar'; +import moment from 'moment'; +import '@/components/react-big-calendar.css'; +import 'react-big-calendar/lib/addons/dragAndDrop/styles.css'; +import CustomToolbar from '@/components/custom-toolbar'; + +moment.updateLocale('en', { + week: { + dow: 1, + doy: 4, + }, +}); + +const localizer = momentLocalizer(moment) + +const MyCalendar = (props) => ( +
+ +
+) + +export default MyCalendar; diff --git a/src/components/custom-toolbar.css b/src/components/custom-toolbar.css index 16e86ed..e16a8e4 100644 --- a/src/components/custom-toolbar.css +++ b/src/components/custom-toolbar.css @@ -13,8 +13,7 @@ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } -/* Style für den Bereich, in dem die Ansichten (Month, Week, etc.) gewechselt werden */ -.custom-toolbar .view-change .view-switcher { +/*.custom-toolbar .view-change .view-switcher { display: flex; gap: 8px; justify-content: center; @@ -24,7 +23,7 @@ padding: 8px 16px; background-color: #c1830d; /*border: 1px solid #ccc;*/ - border-radius: 11px; +/* border-radius: 11px; font-size: 12px; cursor: pointer; transition: background-color 0.2s, border-color 0.2s; @@ -42,7 +41,7 @@ background-color: #d0d0d0; border-color: #aaa; cursor: default; -} +}*/ /* Anzeige des aktuellen Datums (Monat und Jahr) */ .custom-toolbar .current-date { @@ -50,7 +49,7 @@ font-size: 12px; text-align: center; color: #ffffff; - margin: 4px 0; + /*margin: 4px 0;*/ background-color: #717171; width: 178px; height: 37px; @@ -110,30 +109,53 @@ } .right-section { - background-color: #717171; - width: 393px; - height: 37px; - border-radius: 11px; + background-color: #717171; + width: 393px; + height: 48px; + border-radius: 11px; + justify-items: center; + align-items: center; } .custom-toolbar .navigation-controls .handleWeek button { - background-color: #717171; - height: 30px; - width: 30px; - margin-bottom: 3.5px; + background-color: #717171; + height: 30px; + width: 30px; + margin-bottom: 3.5px; } -.custom-toolbar .navigation-controls .today button { - background-color: #c6c6c6; - height: 30px; - width: 100px; - color: #000000; - margin-top: 3.5px; -} +/*.custom-toolbar .navigation-controls .today button { + background-color: #c6c6c6; + height: 30px; + width: 100px; + color: #000000; + margin-top: 3.5px; +}*/ .view-change { - background-color: #717171; - height: 37px; - width: 290px; - border-radius: 11px; + background-color: #717171; + height: 48px; + width: 323px; + border-radius: 11px; + justify-items: center; +} + +.right-section .datepicker-box { + color: #000000; + background-color: #c6c6c6; + height: 36px; + width: 85px; + border-radius: 11px; + font-size: 12px; + align-self: center; +} + +.datepicker { + text-align: center; + width: 85px; + height: 30px; +} + +.datepicker-box { + z-index: 9999; } diff --git a/src/components/custom-toolbar.tsx b/src/components/custom-toolbar.tsx index 10feafa..5f9a2cf 100644 --- a/src/components/custom-toolbar.tsx +++ b/src/components/custom-toolbar.tsx @@ -1,214 +1,253 @@ import React, { useState, useEffect } from 'react'; import { format } from 'date-fns'; import './custom-toolbar.css'; +import { Button } from '@/components/custom-ui/button'; +import DatePicker from 'react-datepicker'; +import 'react-datepicker/dist/react-datepicker.css'; interface CustomToolbarProps { - // Das aktuell angezeigte Datum (wird z. B. von der Calendar-Komponente geliefert) + //Aktuell angezeigtes Datum date: Date; - // Aktuelle Ansicht: "month", "week", "day" oder "agenda" + //Aktuelle Ansicht view: 'month' | 'week' | 'day' | 'agenda'; - /** - * onNavigate ermöglicht das Wechseln des angezeigten Datums. - * Action kann bspw. 'TODAY' oder 'SET_DATE' sein; newDate wird übergeben, wenn benötigt. - */ + onNavigate: (action: string, newDate?: Date) => void; - // onView wechselt die Ansicht + //Ansichtwechsel onView: (newView: 'month' | 'week' | 'day' | 'agenda') => void; } const CustomToolbar: React.FC = ({ date, view, onNavigate, onView }) => { - // Hilfsfunktion, um die ISO-Wochennummer eines Datums zu ermitteln + //ISO-Wochennummer eines Datums ermitteln const getISOWeek = (date: Date): number => { const tmp = new Date(date.getTime()); - // Verschiebe das Datum so, dass der nächste Donnerstag erreicht wird (ISO: Woche beginnt am Montag) + //Datum so verschieben, dass der nächste Donnerstag erreicht wird (ISO: Woche beginnt am Montag) tmp.setDate(tmp.getDate() + 4 - (tmp.getDay() || 7)); const yearStart = new Date(tmp.getFullYear(), 0, 1); const weekNo = Math.ceil((((tmp.getTime() - yearStart.getTime()) / 86400000) + 1) / 7); return weekNo; }; - // Neue Funktion: Ermittelt das ISO-Wochenjahr eines Datums. - // Das ISO-Wochenjahr entspricht dem Jahr des Donnerstags in dieser Woche. + //ISO-Wochenjahr eines Datums ermitteln const getISOWeekYear = (date: Date): number => { const tmp = new Date(date.getTime()); tmp.setDate(tmp.getDate() + 4 - (tmp.getDay() || 7)); return tmp.getFullYear(); }; - // Ermittelt die Anzahl der ISO-Wochen im Jahr + //Ermittlung der Anzahl der Wochen im Jahr const getISOWeeksInYear = (year: number): number => { const d = new Date(year, 11, 31); const week = getISOWeek(d); return week === 1 ? getISOWeek(new Date(year, 11, 24)) : week; }; - /* - Berechnet den Montag der gewünschten ISO-Woche eines Jahres. - Wir ermitteln zunächst den ersten Montag der ersten ISO-Woche und addieren dann (week - 1) * 7 Tage. - */ const getDateOfISOWeek = (week: number, year: number): Date => { const jan1 = new Date(year, 0, 1); const dayOfWeek = jan1.getDay(); const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek; let firstMonday: Date; if (isoDayOfWeek <= 4) { - // Jan 1 gehört zur ersten ISO-Woche – bestimme den Montag dieser Woche + //1. Januar gehört zur ersten ISO-Woche (Montag dieser Woche bestimmen) firstMonday = new Date(year, 0, 1 - isoDayOfWeek + 1); } else { - // Andernfalls liegt der erste Montag in der darauffolgenden Woche + //Ansonsten liegt der erste Montag in der darauffolgenden Woche firstMonday = new Date(year, 0, 1 + (8 - isoDayOfWeek)); } firstMonday.setDate(firstMonday.getDate() + (week - 1) * 7); return firstMonday; }; - // Lokaler State für Woche und ISO-Wochenjahr (statt des reinen Kalenderjahrs) + //Lokaler State für Woche und ISO-Wochenjahr (statt des reinen Kalenderjahrs) const [selectedWeek, setSelectedWeek] = useState(getISOWeek(date)); const [selectedYear, setSelectedYear] = useState(getISOWeekYear(date)); - // Aktualisiere die Auswahl, wenn sich die Prop "date" ändert + //Auswahl aktualisieren, wenn sich die Prop "date" ändert useEffect(() => { setSelectedWeek(getISOWeek(date)); setSelectedYear(getISOWeekYear(date)); }, [date]); - // Für die Dropdown-Liste der Wochen: Liste von 1 bis totalWeeks + //Dropdown-Liste der Wochen const totalWeeks = getISOWeeksInYear(selectedYear); const weekOptions = Array.from({ length: totalWeeks }, (_, i) => i + 1); - // Beispielhafte Jahresliste: aktuelles ISO-Wochenjahr ± 10 + //Jahresliste const yearOptions = Array.from({ length: 21 }, (_, i) => selectedYear - 10 + i); - // Berechne den Start (Montag) und das Ende (Sonntag) der aktuell angezeigten Woche + //Start (Montag) und Ende (Sonntag) der aktuell angezeigten Woche berechnen const weekStartDate = getDateOfISOWeek(selectedWeek, selectedYear); const weekEndDate = new Date(weekStartDate); weekEndDate.setDate(weekStartDate.getDate() + 6); - // Ermittele Monat und Jahr von Start- und Enddatum (normales Kalenderjahr) + //Monat und Jahr von Start- und Enddatum ermitteln const monthStart = format(weekStartDate, 'MMMM'); const monthEnd = format(weekEndDate, 'MMMM'); const yearAtStart = format(weekStartDate, 'yyyy'); const yearAtEnd = format(weekEndDate, 'yyyy'); - // Erstelle das Label: - // 1. Falls der Wochenanfang und das Wochenende in unterschiedlichen Jahren liegen, - // wird z. B. "Dezember 2025 - Januar 2026" angezeigt. - // 2. Liegen beide im gleichen Jahr, wird unterschieden zwischen gleichem Monat und unterschiedlichem Monat. - let dateLabel: string; - if (yearAtStart !== yearAtEnd) { - dateLabel = `${monthStart} ${yearAtStart} - ${monthEnd} ${yearAtEnd}`; - } else if (monthStart !== monthEnd) { - dateLabel = `${monthStart} - ${monthEnd} ${yearAtStart}`; - } else { - dateLabel = `${monthStart} ${yearAtStart}`; - } - - // Handler zum Wechseln der Ansicht + //Ansichtwechsel const handleViewChange = (newView: 'month' | 'week' | 'day' | 'agenda') => { onView(newView); }; - // "Today"-Button: setzt das Datum auf das heutige Datum (unter Verwendung des ISO-Wochenjahrs) + //Today-Button aktualisiert das Datum im DatePicker auf das heutige const handleToday = () => { const today = new Date(); + setSelectedDate(today); setSelectedWeek(getISOWeek(today)); setSelectedYear(getISOWeekYear(today)); onNavigate('TODAY', today); }; - // Wechselt zur vorherigen Woche. Bei Woche < 1, wird ins Vorjahr gewechselt. - const handlePrevWeek = () => { - let newWeek = selectedWeek - 1; - let newYear = selectedYear; - if (newWeek < 1) { - newYear = selectedYear - 1; - newWeek = getISOWeeksInYear(newYear); + //Pfeiltaste nach Vorne + const handleNext = () => { + let newDate: Date; + if (view === 'day' || view === 'agenda') { + newDate = new Date(date); + newDate.setDate(newDate.getDate() + 1); + } else if (view === 'week') { + let newWeek = selectedWeek + 1; + let newYear = selectedYear; + if (newWeek > getISOWeeksInYear(selectedYear)) { + newYear = selectedYear + 1; + newWeek = 1; + } + setSelectedWeek(newWeek); + setSelectedYear(newYear); + newDate = getDateOfISOWeek(newWeek, newYear); + } else if (view === 'month') { + newDate = new Date(date.getFullYear(), date.getMonth() + 1, 1); + } else { + newDate = new Date(date); } - setSelectedWeek(newWeek); - setSelectedYear(newYear); - const newDate = getDateOfISOWeek(newWeek, newYear); + //Datum im DatePicker aktualisieren + setSelectedDate(newDate); onNavigate('SET_DATE', newDate); }; - // Wechselt zur nächsten Woche. Überschreitet die Woche die maximale Zahl, wechselt ins nächste Jahr. - const handleNextWeek = () => { - let newWeek = selectedWeek + 1; - let newYear = selectedYear; - if (newWeek > getISOWeeksInYear(selectedYear)) { - newYear = selectedYear + 1; - newWeek = 1; + //Pfeiltaste nach Hinten + const handlePrev = () => { + let newDate: Date; + if (view === 'day' || view === 'agenda') { + newDate = new Date(date); + newDate.setDate(newDate.getDate() - 1); + } else if (view === 'week') { + let newWeek = selectedWeek - 1; + let newYear = selectedYear; + if (newWeek < 1) { + newYear = selectedYear - 1; + newWeek = getISOWeeksInYear(newYear); + } + setSelectedWeek(newWeek); + setSelectedYear(newYear); + newDate = getDateOfISOWeek(newWeek, newYear); + } else if (view === 'month') { + newDate = new Date(date.getFullYear(), date.getMonth() - 1, 1); + } else { + newDate = new Date(date); } - setSelectedWeek(newWeek); - setSelectedYear(newYear); - const newDate = getDateOfISOWeek(newWeek, newYear); + //Datum im DatePicker aktualisieren + setSelectedDate(newDate); onNavigate('SET_DATE', newDate); }; - // Handler, wenn der Nutzer über das Dropdown eine Woche auswählt - const handleWeekChange = (event: React.ChangeEvent) => { - const newWeek = parseInt(event.target.value, 10); - setSelectedWeek(newWeek); - const newDate = getDateOfISOWeek(newWeek, selectedYear); - onNavigate('SET_DATE', newDate); + const [selectedDate, setSelectedDate] = useState(new Date()); + + const handleDateChange = (date: Date | null) => { + setSelectedDate(date); + if (date) { + if (view === 'week') { + const newWeek = getISOWeek(date); + const newYear = getISOWeekYear(date); + setSelectedWeek(newWeek); + setSelectedYear(newYear); + const newDate = getDateOfISOWeek(newWeek, newYear); + onNavigate('SET_DATE', newDate); + } else if (view === 'day') { + onNavigate('SET_DATE', date); + } else if (view === 'month') { + const newDate = new Date(date.getFullYear(), date.getMonth(), 1); + onNavigate('SET_DATE', newDate); + } else if (view === 'agenda') { + onNavigate('SET_DATE', date); + } + } }; - // Handler, wenn der Nutzer über das Dropdown ein Jahr auswählt - const handleYearChange = (event: React.ChangeEvent) => { - const newYear = parseInt(event.target.value, 10); - setSelectedYear(newYear); - const totalWeeksInNewYear = getISOWeeksInYear(newYear); - const newWeek = Math.min(selectedWeek, totalWeeksInNewYear); - setSelectedWeek(newWeek); - const newDate = getDateOfISOWeek(newWeek, newYear); - onNavigate('SET_DATE', newDate); - }; return (
- {/* Anzeige des Datums-Labels */} -
- {dateLabel} -
- - {/* Ansicht wechseln */}
- - - - + + + +
- {/* Navigationsbuttons */}
- - + +
- +
- {/* DropDowns für Woche und Jahr */} -
- - +
+
diff --git a/src/components/react-big-calendar.css b/src/components/react-big-calendar.css new file mode 100644 index 0000000..305dce0 --- /dev/null +++ b/src/components/react-big-calendar.css @@ -0,0 +1,904 @@ +@charset "UTF-8"; +.rbc-btn { + color: inherit; + font: inherit; + margin: 0; +} + +button.rbc-btn { + overflow: visible; + text-transform: none; + -webkit-appearance: button; + -moz-appearance: button; + appearance: button; + cursor: pointer; +} + +button[disabled].rbc-btn { + cursor: not-allowed; +} + +button.rbc-input::-moz-focus-inner { + border: 0; + padding: 0; +} + +.rbc-calendar { + -webkit-box-sizing: border-box; + box-sizing: border-box; + height: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: stretch; + -ms-flex-align: stretch; + align-items: stretch; +} + +.rbc-m-b-negative-3 { + margin-bottom: -3px; +} + +.rbc-h-full { + height: 100%; +} + +.rbc-calendar *, +.rbc-calendar *:before, +.rbc-calendar *:after { + -webkit-box-sizing: inherit; + box-sizing: inherit; +} + +.rbc-abs-full, .rbc-row-bg { + overflow: hidden; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; +} + +.rbc-ellipsis, .rbc-show-more, .rbc-row-segment .rbc-event-content, .rbc-event-label { + display: block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.rbc-rtl { + direction: rtl; +} + +.rbc-off-range { + color: #999999; +} + +.rbc-off-range-bg { + background: #e6e6e6; +} + +.rbc-header { + overflow: hidden; + -webkit-box-flex: 1; + -ms-flex: 1 0 0%; + flex: 1 0 0%; + text-overflow: ellipsis; + white-space: nowrap; + padding: 0 3px; + text-align: center; + vertical-align: middle; + font-weight: bold; + font-size: 90%; + min-height: 0; + border-bottom: 1px solid #ddd; +} +.rbc-header + .rbc-header { + border-left: 1px solid #c6c6c6; /*#ddd*/ +} +.rbc-rtl .rbc-header + .rbc-header { + border-left-width: 0; + border-right: 1px solid #ddd; +} +.rbc-header > a, .rbc-header > a:active, .rbc-header > a:visited { + color: inherit; + text-decoration: none; +} + +.rbc-button-link { + color: inherit; + background: none; + margin: 0; + padding: 0; + border: none; + cursor: pointer; + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + user-select: text; +} + +.rbc-row-content { + position: relative; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-user-select: none; + z-index: 4; +} + +.rbc-row-content-scrollable { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + height: 100%; +} +.rbc-row-content-scrollable .rbc-row-content-scroll-container { + height: 100%; + overflow-y: scroll; + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ + /* Hide scrollbar for Chrome, Safari and Opera */ +} +.rbc-row-content-scrollable .rbc-row-content-scroll-container::-webkit-scrollbar { + display: none; +} + +.rbc-today { + background-color: #5770ff; /*#eaf6ff*/ +} +/*Own changes 10*/ +.rbc-allday-cell .rbc-row-bg .rbc-day-bg.rbc-today { + background-color: transparent !important; + /*border: none !important;*/ +} +/*Own changes 10*/ + +/*Own changes 11*/ +.rbc-time-header-cell .rbc-header:first-child.rbc-today { + border-top-left-radius: 11px !important; +} + +.rbc-time-header-cell .rbc-header:last-child.rbc-today { + border-top-right-radius: 11px !important; +} +/*Own changes 11*/ + +.rbc-toolbar { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + margin-bottom: 10px; + font-size: 16px; +} +.rbc-toolbar .rbc-toolbar-label { + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + padding: 0 10px; + text-align: center; + + /*Own changes 01*/ + background-color: #717171; + color: #ffffff; + /*Own changes 01*/ +} +.rbc-toolbar button { + color: #373a3c; + display: inline-block; + margin: 0; + text-align: center; + vertical-align: middle; + background: none; + background-image: none; + border: 1px solid #ccc; + padding: 0.375rem 1rem; + border-radius: 4px; + line-height: normal; + white-space: nowrap; +} +.rbc-toolbar button:active, .rbc-toolbar button.rbc-active { + background-image: none; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + background-color: #e6e6e6; + border-color: #adadad; +} +.rbc-toolbar button:active:hover, .rbc-toolbar button:active:focus, .rbc-toolbar button.rbc-active:hover, .rbc-toolbar button.rbc-active:focus { + color: #373a3c; + background-color: #d4d4d4; + border-color: #8c8c8c; +} +.rbc-toolbar button:focus { + color: #373a3c; + background-color: #e6e6e6; + border-color: #adadad; +} +.rbc-toolbar button:hover { + color: #373a3c; + cursor: pointer; + background-color: #e6e6e6; + border-color: #adadad; +} + +.rbc-btn-group { + display: inline-block; + white-space: nowrap; +} +.rbc-btn-group > button:first-child:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + + /*Own changes 02*/ + background-color: #c6c6c6; + color: #000000; + /*Own changes 02*/ +} +.rbc-btn-group > button:last-child:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + + /*Own changes 03*/ + background-color: #c6c6c6; + color: #000000; + /*Own changes 03*/ +} +.rbc-rtl .rbc-btn-group > button:first-child:not(:last-child) { + border-radius: 4px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.rbc-rtl .rbc-btn-group > button:last-child:not(:first-child) { + border-radius: 4px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.rbc-btn-group > button:not(:first-child):not(:last-child) { + border-radius: 0; + + /*Own changes 04*/ + background-color: #c6c6c6; + color: #000000; + /*Own changes 04*/ +} +.rbc-btn-group button + button { + margin-left: -1px; +} +.rbc-rtl .rbc-btn-group button + button { + margin-left: 0; + margin-right: -1px; +} +.rbc-btn-group + .rbc-btn-group, .rbc-btn-group + button { + margin-left: 10px; +} + +@media (max-width: 767px) { + .rbc-toolbar { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + } +} +.rbc-event, .rbc-day-slot .rbc-background-event { + border: none; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-shadow: none; + box-shadow: none; + margin: 0; + padding: 2px 5px; + background-color: #3174ad; + border-radius: 5px; + color: #fff; + cursor: pointer; + width: 100%; + text-align: left; +} +.rbc-slot-selecting .rbc-event, .rbc-slot-selecting .rbc-day-slot .rbc-background-event, .rbc-day-slot .rbc-slot-selecting .rbc-background-event { + cursor: inherit; + pointer-events: none; +} +.rbc-event.rbc-selected, .rbc-day-slot .rbc-selected.rbc-background-event { + background-color: #265985; +} +.rbc-event:focus, .rbc-day-slot .rbc-background-event:focus { + outline: 5px auto #3b99fc; +} + +.rbc-event-label { + font-size: 80%; +} + +.rbc-event-overlaps { + -webkit-box-shadow: -1px 1px 5px 0px rgba(51, 51, 51, 0.5); + box-shadow: -1px 1px 5px 0px rgba(51, 51, 51, 0.5); +} + +.rbc-event-continues-prior { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.rbc-event-continues-after { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.rbc-event-continues-earlier { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.rbc-event-continues-later { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.rbc-row { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; +} + +.rbc-row-segment { + padding: 0 1px 1px 1px; +} +.rbc-selected-cell { + background-color: rgba(0, 0, 0, 0.1); +} + +.rbc-show-more { + background-color: rgba(255, 255, 255, 0.3); + z-index: 4; + font-weight: bold; + font-size: 85%; + height: auto; + line-height: normal; + color: #3174ad; +} +.rbc-show-more:hover, .rbc-show-more:focus { + color: #265985; +} + +.rbc-month-view { + position: relative; + border: 1px solid #ddd; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-flex: 1; + -ms-flex: 1 0 0px; + flex: 1 0 0; + width: 100%; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-user-select: none; + height: 100%; +} + +.rbc-month-header { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; +} + +.rbc-month-row { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + position: relative; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-flex: 1; + -ms-flex: 1 0 0px; + flex: 1 0 0; + -ms-flex-preferred-size: 0px; + flex-basis: 0px; + overflow: hidden; + height: 100%; +} +.rbc-month-row + .rbc-month-row { + border-top: 1px solid #ddd; +} + +.rbc-date-cell { + -webkit-box-flex: 1; + -ms-flex: 1 1 0px; + flex: 1 1 0; + min-width: 0; + padding-right: 5px; + text-align: right; +} +.rbc-date-cell.rbc-now { + font-weight: bold; +} +.rbc-date-cell > a, .rbc-date-cell > a:active, .rbc-date-cell > a:visited { + color: inherit; + text-decoration: none; +} + +.rbc-row-bg { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-flex: 1; + -ms-flex: 1 0 0px; + flex: 1 0 0; + overflow: hidden; + right: 1px; +} + +.rbc-day-bg { + -webkit-box-flex: 1; + -ms-flex: 1 0 0%; + flex: 1 0 0%; +} +.rbc-day-bg + .rbc-day-bg { + border-left: 1px solid #ddd; +} +.rbc-rtl .rbc-day-bg + .rbc-day-bg { + border-left-width: 0; + border-right: 1px solid #ddd; +} + +.rbc-overlay { + position: absolute; + z-index: 5; + border: 1px solid #e5e5e5; + background-color: #fff; + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.25); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.25); + padding: 10px; +} +.rbc-overlay > * + * { + margin-top: 1px; +} + +.rbc-overlay-header { + border-bottom: 1px solid #e5e5e5; + margin: -10px -10px 5px -10px; + padding: 2px 10px; +} + +.rbc-agenda-view { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-flex: 1; + -ms-flex: 1 0 0px; + flex: 1 0 0; + overflow: auto; +} +.rbc-agenda-view table.rbc-agenda-table { + width: 100%; + border: 1px solid #ddd; + border-spacing: 0; + border-collapse: collapse; +} +.rbc-agenda-view table.rbc-agenda-table tbody > tr > td { + padding: 5px 10px; + vertical-align: top; +} +.rbc-agenda-view table.rbc-agenda-table .rbc-agenda-time-cell { + padding-left: 15px; + padding-right: 15px; + text-transform: lowercase; +} +.rbc-agenda-view table.rbc-agenda-table tbody > tr > td + td { + border-left: 1px solid #ddd; +} +.rbc-rtl .rbc-agenda-view table.rbc-agenda-table tbody > tr > td + td { + border-left-width: 0; + border-right: 1px solid #ddd; +} +.rbc-agenda-view table.rbc-agenda-table tbody > tr + tr { + border-top: 1px solid #ddd; +} +.rbc-agenda-view table.rbc-agenda-table thead > tr > th { + padding: 3px 5px; + text-align: left; + border-bottom: 1px solid #ddd; +} +.rbc-rtl .rbc-agenda-view table.rbc-agenda-table thead > tr > th { + text-align: right; +} + +.rbc-agenda-time-cell { + text-transform: lowercase; +} +.rbc-agenda-time-cell .rbc-continues-after:after { + content: " »"; +} +.rbc-agenda-time-cell .rbc-continues-prior:before { + content: "« "; +} + +.rbc-agenda-date-cell, +.rbc-agenda-time-cell { + white-space: nowrap; +} + +.rbc-agenda-event-cell { + width: 100%; +} + +.rbc-time-column { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + min-height: 100%; + + /*Own changes 06*/ + background-color: #383838; + /*Own changes 06*/ +} +.rbc-time-column .rbc-timeslot-group { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; +} + +.rbc-timeslot-group { + border-bottom: 1px solid #8d8d8d; /*#ddd*/ + min-height: 40px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-flow: column nowrap; + flex-flow: column nowrap; +} + +.rbc-time-gutter, +.rbc-header-gutter { + -webkit-box-flex: 0; + -ms-flex: none; + flex: none; + + /*Own changes 07*/ + background-color: #8d8d8d; + /*Own changes 07*/ +} + +.rbc-label { + padding: 0 5px; +} + +.rbc-day-slot { + position: relative; +} +.rbc-day-slot .rbc-events-container { + bottom: 0; + left: 0; + position: absolute; + right: 0; + margin-right: 10px; + top: 0; +} +.rbc-day-slot .rbc-events-container.rbc-rtl { + left: 10px; + right: 0; +} +.rbc-day-slot .rbc-event, .rbc-day-slot .rbc-background-event { + border: 1px solid #265985; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + max-height: 100%; + min-height: 20px; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-flow: column wrap; + flex-flow: column wrap; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + overflow: hidden; + position: absolute; +} +.rbc-day-slot .rbc-background-event { + opacity: 0.75; +} +.rbc-day-slot .rbc-event-label { + -webkit-box-flex: 0; + -ms-flex: none; + flex: none; + padding-right: 5px; + width: auto; +} +.rbc-day-slot .rbc-event-content { + width: 100%; + -webkit-box-flex: 1; + -ms-flex: 1 1 0px; + flex: 1 1 0; + word-wrap: break-word; + line-height: 1; + height: 100%; + min-height: 1em; +} +.rbc-day-slot .rbc-time-slot { + border-top: 1px solid #383838; /*#f7f7f7*/ +} + +.rbc-time-view-resources .rbc-time-gutter, +.rbc-time-view-resources .rbc-time-header-gutter { + position: sticky; + left: 0; + background-color: white; + border-right: 1px solid #ddd; + z-index: 10; + margin-right: -1px; +} +.rbc-time-view-resources .rbc-time-header { + overflow: hidden; +} +.rbc-time-view-resources .rbc-time-header-content { + min-width: auto; + -webkit-box-flex: 1; + -ms-flex: 1 0 0px; + flex: 1 0 0; + -ms-flex-preferred-size: 0px; + flex-basis: 0px; +} +.rbc-time-view-resources .rbc-time-header-cell-single-day { + display: none; +} +.rbc-time-view-resources .rbc-day-slot { + min-width: 140px; +} +.rbc-time-view-resources .rbc-header, +.rbc-time-view-resources .rbc-day-bg { + width: 140px; + -webkit-box-flex: 1; + -ms-flex: 1 1 0px; + flex: 1 1 0; + -ms-flex-preferred-size: 0 px; + flex-basis: 0 px; +} + +.rbc-time-header-content + .rbc-time-header-content { + margin-left: -1px; +} + +.rbc-time-slot { + -webkit-box-flex: 1; + -ms-flex: 1 0 0px; + flex: 1 0 0; +} +.rbc-time-slot.rbc-now { + font-weight: bold; +} + +.rbc-day-header { + text-align: center; +} + +.rbc-slot-selection { + z-index: 10; + position: absolute; + background-color: rgba(0, 0, 0, 0.5); + color: white; + font-size: 75%; + width: 100%; + padding: 3px; +} + +.rbc-slot-selecting { + cursor: move; +} + +.rbc-time-view { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + width: 100%; + border: 1px solid #ddd; + min-height: 0; +} +.rbc-time-view .rbc-time-gutter { + white-space: nowrap; + text-align: right; +} +.rbc-time-view .rbc-allday-cell { + -webkit-box-sizing: content-box; + box-sizing: content-box; + width: 100%; + height: 100%; + position: relative; + + /*Own changes 05*/ + background-color: #555555; + /*Own changes 05*/ +} +.rbc-time-view .rbc-allday-cell + .rbc-allday-cell { + border-left: 1px solid #ddd; +} +.rbc-time-view .rbc-allday-events { + position: relative; + z-index: 4; +} +.rbc-time-view .rbc-row { + -webkit-box-sizing: border-box; + box-sizing: border-box; + min-height: 20px; +} + +.rbc-time-header { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; +} +.rbc-time-header.rbc-overflowing { + border-right: 1px solid #ddd; +} +.rbc-rtl .rbc-time-header.rbc-overflowing { + border-right-width: 0; + border-left: 1px solid #ddd; +} +.rbc-time-header > .rbc-row:first-child { + border-bottom: 1px solid #ddd; +} +.rbc-time-header > .rbc-row.rbc-row-resource { + border-bottom: 1px solid #ddd; +} + +.rbc-time-header-cell-single-day { + display: none; +} + +.rbc-time-header-content { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + min-width: 0; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + border-left: 1px solid #ddd; + + /*Own changes 08*/ + background-color: #c6c6c6; + color: #000000; + border-top-left-radius: 11px; + border-top-right-radius: 11px; + /*Own changes 08*/ +} +.rbc-rtl .rbc-time-header-content { + border-left-width: 0; + border-right: 1px solid #ddd; +} +.rbc-time-header-content > .rbc-row.rbc-row-resource { + border-bottom: 1px solid #ddd; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.rbc-time-content { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 1; + -ms-flex: 1 0 0%; + flex: 1 0 0%; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + width: 100%; + border-top: 2px solid #717171; /*#ddd*/ + overflow-y: auto; + position: relative; +} +.rbc-time-content > .rbc-time-gutter { + -webkit-box-flex: 0; + -ms-flex: none; + flex: none; + + /*Own changes 09*/ + border-top-left-radius: 11px; + border-bottom-left-radius: 11px; + /*Own changes 09*/ +} +.rbc-time-content > * + * > * { + border-left: 1px solid #c6c6c6; /*#ddd*/ +} +.rbc-rtl .rbc-time-content > * + * > * { + border-left-width: 0; + border-right: 1px solid #ddd; +} +.rbc-time-content > .rbc-day-slot { + width: 100%; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-user-select: none; +} + +.rbc-current-time-indicator { + position: absolute; + z-index: 3; + left: 0; + right: 0; + height: 1px; + background-color: #74ad31; + pointer-events: none; +} + +.rbc-resource-grouping.rbc-time-header-content { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; +} +.rbc-resource-grouping .rbc-row .rbc-header { + width: 141px; +} + +/*# sourceMappingURL=react-big-calendar.css.map */ \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 8096538..1cad40d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -468,7 +468,7 @@ __metadata: languageName: node linkType: hard -"@floating-ui/react-dom@npm:^2.0.0": +"@floating-ui/react-dom@npm:^2.0.0, @floating-ui/react-dom@npm:^2.1.3": version: 2.1.3 resolution: "@floating-ui/react-dom@npm:2.1.3" dependencies: @@ -480,6 +480,20 @@ __metadata: languageName: node linkType: hard +"@floating-ui/react@npm:^0.27.3": + version: 0.27.12 + resolution: "@floating-ui/react@npm:0.27.12" + dependencies: + "@floating-ui/react-dom": "npm:^2.1.3" + "@floating-ui/utils": "npm:^0.2.9" + tabbable: "npm:^6.0.0" + peerDependencies: + react: ">=17.0.0" + react-dom: ">=17.0.0" + checksum: 10c0/da453965074bd4ded8e3de97ceb2c0833df8df2ecd9eff5ae4d336413443ea5abde5c9e37b092956901b97e7b47f9138d51d4896fa82da68e77eb0090289bf64 + languageName: node + linkType: hard + "@floating-ui/utils@npm:^0.2.9": version: 0.2.9 resolution: "@floating-ui/utils@npm:0.2.9" @@ -6700,6 +6714,7 @@ __metadata: prisma: "npm:6.10.1" react: "npm:^19.1.0" react-big-calendar: "npm:^1.18.0" + react-datepicker: "npm:^8.4.0" react-dom: "npm:^19.0.0" react-hook-form: "npm:^7.56.4" swagger-ui-react: "npm:^5.24.1" @@ -7811,6 +7826,20 @@ __metadata: languageName: node linkType: hard +"react-datepicker@npm:^8.4.0": + version: 8.4.0 + resolution: "react-datepicker@npm:8.4.0" + dependencies: + "@floating-ui/react": "npm:^0.27.3" + clsx: "npm:^2.1.1" + date-fns: "npm:^4.1.0" + peerDependencies: + react: ^16.9.0 || ^17 || ^18 || ^19 || ^19.0.0-rc + react-dom: ^16.9.0 || ^17 || ^18 || ^19 || ^19.0.0-rc + checksum: 10c0/e96ba4f2b54476f66bfa33aa0c21729095c83d293671b07a9ddd96ab48dad85b6530acc5ca016e83ef8907feeebfefb7133bf7a02dc550175c48c5d9f66d70ac + languageName: node + linkType: hard + "react-debounce-input@npm:=3.3.0": version: 3.3.0 resolution: "react-debounce-input@npm:3.3.0" @@ -8951,6 +8980,13 @@ __metadata: languageName: node linkType: hard +"tabbable@npm:^6.0.0": + version: 6.2.0 + resolution: "tabbable@npm:6.2.0" + checksum: 10c0/ced8b38f05f2de62cd46836d77c2646c42b8c9713f5bd265daf0e78ff5ac73d3ba48a7ca45f348bafeef29b23da7187c72250742d37627883ef89cbd7fa76898 + languageName: node + linkType: hard + "tailwind-merge@npm:^3.2.0": version: 3.3.1 resolution: "tailwind-merge@npm:3.3.1" From d6c50c2c58fcf072eaf2fb970e5bcfe9635db138 Mon Sep 17 00:00:00 2001 From: Dominik Stahl Date: Mon, 16 Jun 2025 19:44:09 +0200 Subject: [PATCH 38/39] style: format code --- src/app/home/page.tsx | 4 +- src/components/calendar.tsx | 15 +- src/components/custom-toolbar.css | 4 +- src/components/custom-toolbar.tsx | 43 ++-- src/components/react-big-calendar.css | 273 ++++++++++++++------------ 5 files changed, 190 insertions(+), 149 deletions(-) diff --git a/src/app/home/page.tsx b/src/app/home/page.tsx index 0b7515a..68e51bf 100644 --- a/src/app/home/page.tsx +++ b/src/app/home/page.tsx @@ -1,3 +1,5 @@ import Calendar from '@/components/calendar'; -export default function home () {return } \ No newline at end of file +export default function home() { + return ; +} diff --git a/src/components/calendar.tsx b/src/components/calendar.tsx index defedab..6e10dab 100644 --- a/src/components/calendar.tsx +++ b/src/components/calendar.tsx @@ -1,4 +1,4 @@ -"use client"; +'use client'; import { Calendar, momentLocalizer } from 'react-big-calendar'; import moment from 'moment'; @@ -13,26 +13,25 @@ moment.updateLocale('en', { }, }); -const localizer = momentLocalizer(moment) +const localizer = momentLocalizer(moment); const MyCalendar = (props) => (
-) +); export default MyCalendar; diff --git a/src/components/custom-toolbar.css b/src/components/custom-toolbar.css index e16a8e4..55e9b77 100644 --- a/src/components/custom-toolbar.css +++ b/src/components/custom-toolbar.css @@ -75,11 +75,11 @@ } .custom-toolbar .navigation-controls button:hover { - background-color: #1976D2; + background-color: #1976d2; } .custom-toolbar .navigation-controls button:active { - background-color: #1565C0; + background-color: #1565c0; } /* Dropdown-Bereich für Woche und Jahr */ diff --git a/src/components/custom-toolbar.tsx b/src/components/custom-toolbar.tsx index 5f9a2cf..bcbb9f9 100644 --- a/src/components/custom-toolbar.tsx +++ b/src/components/custom-toolbar.tsx @@ -16,15 +16,21 @@ interface CustomToolbarProps { onView: (newView: 'month' | 'week' | 'day' | 'agenda') => void; } -const CustomToolbar: React.FC = ({ date, view, onNavigate, onView }) => { - +const CustomToolbar: React.FC = ({ + date, + view, + onNavigate, + onView, +}) => { //ISO-Wochennummer eines Datums ermitteln const getISOWeek = (date: Date): number => { const tmp = new Date(date.getTime()); //Datum so verschieben, dass der nächste Donnerstag erreicht wird (ISO: Woche beginnt am Montag) tmp.setDate(tmp.getDate() + 4 - (tmp.getDay() || 7)); const yearStart = new Date(tmp.getFullYear(), 0, 1); - const weekNo = Math.ceil((((tmp.getTime() - yearStart.getTime()) / 86400000) + 1) / 7); + const weekNo = Math.ceil( + ((tmp.getTime() - yearStart.getTime()) / 86400000 + 1) / 7, + ); return weekNo; }; @@ -60,7 +66,9 @@ const CustomToolbar: React.FC = ({ date, view, onNavigate, o //Lokaler State für Woche und ISO-Wochenjahr (statt des reinen Kalenderjahrs) const [selectedWeek, setSelectedWeek] = useState(getISOWeek(date)); - const [selectedYear, setSelectedYear] = useState(getISOWeekYear(date)); + const [selectedYear, setSelectedYear] = useState( + getISOWeekYear(date), + ); //Auswahl aktualisieren, wenn sich die Prop "date" ändert useEffect(() => { @@ -73,7 +81,10 @@ const CustomToolbar: React.FC = ({ date, view, onNavigate, o const weekOptions = Array.from({ length: totalWeeks }, (_, i) => i + 1); //Jahresliste - const yearOptions = Array.from({ length: 21 }, (_, i) => selectedYear - 10 + i); + const yearOptions = Array.from( + { length: 21 }, + (_, i) => selectedYear - 10 + i, + ); //Start (Montag) und Ende (Sonntag) der aktuell angezeigten Woche berechnen const weekStartDate = getDateOfISOWeek(selectedWeek, selectedYear); @@ -175,11 +186,13 @@ const CustomToolbar: React.FC = ({ date, view, onNavigate, o } }; - return ( -
+
-
+
-
-
-
+
+
+
-
+