diff --git a/.env.test b/.env.test new file mode 100644 index 0000000..266baa3 --- /dev/null +++ b/.env.test @@ -0,0 +1,6 @@ +AUTH_SECRET="auth_secret" +AUTH_URL="http://127.0.0.1:3000" +HOSTNAME="127.0.0.1" +DATABASE_URL="file:/tmp/dev.db" +AUTH_AUTHENTIK_ID="id" +AUTH_AUTHENTIK_ISSUER="issuer" \ No newline at end of file diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..3220256 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,34 @@ +name: tests +on: + push: + branches: + - main + - renovate/* + pull_request: +jobs: + tests: + name: Tests + runs-on: docker + container: + image: cypress/browsers:latest + options: --user 1001 + steps: + - name: Checkout + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + + - name: Enable corepack + run: corepack enable + + - name: Cypress run (e2e) + uses: https://github.com/cypress-io/github-action@v6 + with: + build: yarn cypress:build + start: yarn cypress:start_server + e2e: true + wait-on: 'http://127.0.0.1:3000' + + - name: Cypress run (component) + uses: https://github.com/cypress-io/github-action@v6 + with: + component: true + install: false diff --git a/.gitignore b/.gitignore index cda64ee..03ddb54 100644 --- a/.gitignore +++ b/.gitignore @@ -33,6 +33,7 @@ yarn-error.log* # env files (can opt-in for committing if needed) .env* !.env.example +!.env.test # vercel .vercel @@ -45,3 +46,8 @@ next-env.d.ts /prisma/*.db* src/generated/* data + +# cypress +cypress/videos +cypress/screenshots +cypress/coverage diff --git a/Dockerfile b/Dockerfile index b60e118..29e8dfa 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:22-alpine@sha256:41e4389f3d988d2ed55392df4db1420ad048ae53324a8e2b7c6d19508288107e AS base +FROM node:22-alpine@sha256:5340cbfc2df14331ab021555fdd9f83f072ce811488e705b0e736b11adeec4bb AS base # ----- Dependencies ----- FROM base AS deps diff --git a/Dockerfile.dev b/Dockerfile.dev index 4467c5f..a77f9a8 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -1,4 +1,4 @@ -FROM node:22-alpine@sha256:41e4389f3d988d2ed55392df4db1420ad048ae53324a8e2b7c6d19508288107e +FROM node:22-alpine@sha256:5340cbfc2df14331ab021555fdd9f83f072ce811488e705b0e736b11adeec4bb WORKDIR /app diff --git a/cypress.config.ts b/cypress.config.ts new file mode 100644 index 0000000..bebdaa5 --- /dev/null +++ b/cypress.config.ts @@ -0,0 +1,16 @@ +import { defineConfig } from 'cypress'; + +export default defineConfig({ + component: { + devServer: { + framework: 'next', + bundler: 'webpack', + }, + }, + + e2e: { + setupNodeEvents(on, config) { + // implement node event listeners here + }, + }, +}); diff --git a/cypress/e2e/auth-user.ts b/cypress/e2e/auth-user.ts new file mode 100644 index 0000000..5b02ab9 --- /dev/null +++ b/cypress/e2e/auth-user.ts @@ -0,0 +1,12 @@ +export default function authUser() { + cy.visit('http://127.0.0.1:3000/login'); + cy.getBySel('login-header').should('exist'); + cy.getBySel('login-form').should('exist'); + cy.getBySel('email-input').should('exist'); + cy.getBySel('password-input').should('exist'); + cy.getBySel('login-button').should('exist'); + cy.getBySel('email-input').type('cypress@example.com'); + cy.getBySel('password-input').type('Password123!'); + cy.getBySel('login-button').click(); + cy.url().should('include', '/home'); +} diff --git a/cypress/e2e/event-create.cy.ts b/cypress/e2e/event-create.cy.ts new file mode 100644 index 0000000..a74f770 --- /dev/null +++ b/cypress/e2e/event-create.cy.ts @@ -0,0 +1,9 @@ +import authUser from './auth-user'; + +describe('event creation', () => { + it('loads', () => { + authUser(); + + // cy.visit('http://127.0.0.1:3000/events/new'); // TODO: Add event creation tests + }); +}); diff --git a/cypress/e2e/login.cy.ts b/cypress/e2e/login.cy.ts new file mode 100644 index 0000000..d9461d1 --- /dev/null +++ b/cypress/e2e/login.cy.ts @@ -0,0 +1,45 @@ +describe('login and register', () => { + it('loads', () => { + cy.visit('http://127.0.0.1:3000/'); + + cy.getBySel('login-header').should('exist'); + }); + + it('shows register form', () => { + cy.visit('http://127.0.0.1:3000/'); + + cy.getBySel('register-switch').click(); + + cy.getBySel('register-form').should('exist'); + cy.getBySel('first-name-input').should('exist'); + cy.getBySel('last-name-input').should('exist'); + cy.getBySel('email-input').should('exist'); + cy.getBySel('username-input').should('exist'); + cy.getBySel('password-input').should('exist'); + cy.getBySel('confirm-password-input').should('exist'); + cy.getBySel('register-button').should('exist'); + }); + + it('allows to register', async () => { + cy.visit('http://127.0.0.1:3000/'); + + cy.getBySel('register-switch').click(); + + cy.getBySel('first-name-input').type('Test'); + cy.getBySel('last-name-input').type('User'); + cy.getBySel('email-input').type('test@example.com'); + cy.getBySel('username-input').type('testuser'); + cy.getBySel('password-input').type('Password123!'); + cy.getBySel('confirm-password-input').type('Password123!'); + cy.getBySel('register-button').click(); + cy.getBySel('login-header').should('exist'); + cy.getBySel('login-form').should('exist'); + cy.getBySel('email-input').should('exist'); + cy.getBySel('password-input').should('exist'); + cy.getBySel('login-button').should('exist'); + cy.getBySel('email-input').type('test@example.com'); + cy.getBySel('password-input').type('Password123!'); + cy.getBySel('login-button').click(); + cy.url().should('include', '/home'); + }); +}); diff --git a/cypress/e2e/seed.ts b/cypress/e2e/seed.ts new file mode 100644 index 0000000..c3cd389 --- /dev/null +++ b/cypress/e2e/seed.ts @@ -0,0 +1,29 @@ +import { PrismaClient } from '../../src/generated/prisma'; + +const prisma = new PrismaClient(); + +export default async function requireUser() { + await prisma.$transaction(async (tx) => { + const { id } = await tx.user.create({ + data: { + email: 'cypress@example.com', + name: 'cypress', + password_hash: + '$2a$10$FmkVRHXzMb63dLHHwG1mDOepZJirL.U964wU/3Xr7cFis8XdRh8sO', + first_name: 'Cypress', + last_name: 'Tester', + emailVerified: new Date(), + }, + }); + + await tx.account.create({ + data: { + userId: id, + type: 'credentials', + provider: 'credentials', + providerAccountId: id, + }, + }); + }); +} +requireUser(); diff --git a/cypress/support/commands.ts b/cypress/support/commands.ts new file mode 100644 index 0000000..59717f5 --- /dev/null +++ b/cypress/support/commands.ts @@ -0,0 +1,62 @@ +/// +// *********************************************** +// This example commands.ts shows you how to +// create various custom commands and overwrite +// existing commands. +// +// For more comprehensive examples of custom +// commands please read more here: +// https://on.cypress.io/custom-commands +// *********************************************** +// +// +// -- This is a parent command -- +// Cypress.Commands.add('login', (email, password) => { ... }) +// +// +// -- This is a child command -- +// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... }) +// +// +// -- This is a dual command -- +// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... }) +// +// +// -- This will overwrite an existing command -- +// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) +// +// declare global { +// namespace Cypress { +// interface Chainable { +// login(email: string, password: string): Chainable +// drag(subject: string, options?: Partial): Chainable +// dismiss(subject: string, options?: Partial): Chainable +// visit(originalFn: CommandOriginalFn, url: string, options: Partial): Chainable +// } +// } +// } + +Cypress.Commands.add('getBySel', (selector, ...args) => { + return cy.get(`[data-cy=${selector}]`, ...args); +}); + +Cypress.Commands.add('getBySelLike', (selector, ...args) => { + return cy.get(`[data-cy*=${selector}]`, ...args); +}); + +declare global { + namespace Cypress { + interface Chainable { + getBySel( + selector: string, + ...args: any[] + ): Chainable>; + getBySelLike( + selector: string, + ...args: any[] + ): Chainable>; + } + } +} + +export {}; diff --git a/cypress/support/component-index.html b/cypress/support/component-index.html new file mode 100644 index 0000000..2cbfac6 --- /dev/null +++ b/cypress/support/component-index.html @@ -0,0 +1,14 @@ + + + + + + + Components App + +
+ + +
+ + diff --git a/cypress/support/component.ts b/cypress/support/component.ts new file mode 100644 index 0000000..b1f1c92 --- /dev/null +++ b/cypress/support/component.ts @@ -0,0 +1,38 @@ +// *********************************************************** +// This example support/component.ts is processed and +// loaded automatically before your test files. +// +// This is a great place to put global configuration and +// behavior that modifies Cypress. +// +// You can change the location of this file or turn off +// automatically serving support files with the +// 'supportFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/configuration +// *********************************************************** + +import '@/app/globals.css'; + +// Import commands.js using ES2015 syntax: +import './commands'; + +import { mount } from 'cypress/react'; + +// Augment the Cypress namespace to include type definitions for +// your custom command. +// Alternatively, can be defined in cypress/support/component.d.ts +// with a at the top of your spec. +declare global { + namespace Cypress { + interface Chainable { + mount: typeof mount; + } + } +} + +Cypress.Commands.add('mount', mount); + +// Example use: +// cy.mount() diff --git a/cypress/support/e2e.ts b/cypress/support/e2e.ts new file mode 100644 index 0000000..e66558e --- /dev/null +++ b/cypress/support/e2e.ts @@ -0,0 +1,17 @@ +// *********************************************************** +// This example support/e2e.ts is processed and +// loaded automatically before your test files. +// +// This is a great place to put global configuration and +// behavior that modifies Cypress. +// +// You can change the location of this file or turn off +// automatically serving support files with the +// 'supportFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/configuration +// *********************************************************** + +// Import commands.js using ES2015 syntax: +import './commands'; diff --git a/exportSwagger.ts b/exportSwagger.ts index 1eb2837..6b6df1e 100644 --- a/exportSwagger.ts +++ b/exportSwagger.ts @@ -22,16 +22,15 @@ async function exportSwagger() { ); 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); - }); + filesToImport.map(async (file) => { + try { + const moduleImp = await import(file); + if (moduleImp.default) { + moduleImp.default(registry); + } + } catch (error) { + console.error(`Error importing ${file}:`, error); + } }), ); diff --git a/package.json b/package.json index cc7da00..a28e32f 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "scripts": { "dev": "next dev --turbopack", "build": "prettier --check . && next build", - "start": "next start", + "start": "node .next/standalone/server.js", "lint": "next lint", "format": "prettier --write .", "prisma:migrate": "dotenv -e .env.local -- prisma migrate dev", @@ -15,7 +15,11 @@ "prisma:migrate:reset": "dotenv -e .env.local -- prisma migrate reset", "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" + "orval:generate": "orval", + "cypress:build": "rm -rf /tmp/dev.db && DATABASE_URL=\"file:/tmp/dev.db\" yarn prisma:generate && yarn swagger:generate && yarn orval:generate && DATABASE_URL=\"file:/tmp/dev.db\" yarn prisma:db:push && prettier --check . && NODE_ENV=test next build", + "cypress:start_server": "DATABASE_URL=\"file:/tmp/dev.db\" ts-node cypress/e2e/seed.ts && cp .env.test .next/standalone && cp public .next/standalone/ -r && cp .next/static/ .next/standalone/.next/ -r && NODE_ENV=test HOSTNAME=\"0.0.0.0\" dotenv -e .env.test -- node .next/standalone/server.js", + "cypress:open": "cypress open", + "cypress:run": "cypress run" }, "dependencies": { "@asteasolutions/zod-to-openapi": "^8.0.0-beta.4", @@ -27,38 +31,49 @@ "@fortawesome/react-fontawesome": "^0.2.2", "@hookform/resolvers": "^5.0.1", "@prisma/client": "^6.9.0", - "@radix-ui/react-dropdown-menu": "^2.1.14", + "@radix-ui/react-avatar": "^1.1.10", + "@radix-ui/react-collapsible": "^1.1.11", + "@radix-ui/react-dialog": "^1.1.14", + "@radix-ui/react-dropdown-menu": "^2.1.15", "@radix-ui/react-hover-card": "^1.1.13", "@radix-ui/react-label": "^2.1.6", "@radix-ui/react-scroll-area": "^1.2.8", "@radix-ui/react-select": "^2.2.4", - "@radix-ui/react-separator": "^1.1.6", - "@radix-ui/react-slot": "^1.2.2", + "@radix-ui/react-separator": "^1.1.7", + "@radix-ui/react-slot": "^1.2.3", "@radix-ui/react-switch": "^1.2.4", "@radix-ui/react-tabs": "^1.1.11", + "@radix-ui/react-tooltip": "^1.2.7", "@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.4.0-canary.91", + "date-fns": "^4.1.0", + "lucide-react": "^0.515.0", + "next": "15.3.4", "next-auth": "^5.0.0-beta.25", "next-themes": "^0.4.6", - "react": "^19.0.0", + "react": "^19.1.0", + "react-big-calendar": "^1.18.0", + "react-datepicker": "^8.4.0", "react-dom": "^19.0.0", + "react-error-boundary": "^6.0.0", "react-hook-form": "^7.56.4", "swagger-ui-react": "^5.24.1", "tailwind-merge": "^3.2.0", - "zod": "^3.25.60" + "zod": "^3.25.60", + "zod-validation-error": "^3.5.2" }, "devDependencies": { "@eslint/eslintrc": "3.3.1", "@tailwindcss/postcss": "4.1.10", - "@types/node": "22.15.32", + "@types/node": "22.15.33", "@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", + "cypress": "14.5.0", "dotenv-cli": "8.0.0", "eslint": "9.29.0", "eslint-config-next": "15.3.4", diff --git a/src/app/(main)/home/page.tsx b/src/app/(main)/home/page.tsx new file mode 100644 index 0000000..70e7561 --- /dev/null +++ b/src/app/(main)/home/page.tsx @@ -0,0 +1,14 @@ +'use client'; + +import Calendar from '@/components/calendar'; +import { useGetApiUserMe } from '@/generated/api/user/user'; + +export default function Home() { + const { data } = useGetApiUserMe(); + + return ( +
+ +
+ ); +} diff --git a/src/app/(main)/layout.tsx b/src/app/(main)/layout.tsx new file mode 100644 index 0000000..7106e70 --- /dev/null +++ b/src/app/(main)/layout.tsx @@ -0,0 +1,23 @@ +import React from 'react'; +import { cookies } from 'next/headers'; + +import { AppSidebar } from '@/components/custom-ui/app-sidebar'; +import SidebarProviderWrapper from '@/components/wrappers/sidebar-provider'; +import Header from '@/components/misc/header'; + +export default async function Layout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + const cookieStore = await cookies(); + const defaultOpen = cookieStore.get('sidebar_state')?.value === 'true'; + return ( + <> + + +
{children}
+
+ + ); +} diff --git a/src/app/api/user/[user]/calendar/route.ts b/src/app/api/user/[user]/calendar/route.ts index f6b6098..bf01738 100644 --- a/src/app/api/user/[user]/calendar/route.ts +++ b/src/app/api/user/[user]/calendar/route.ts @@ -136,15 +136,15 @@ export const GET = auth(async function GET(req, { params }) { start_time: 'asc', }, select: { - id: requestUserId === requestedUserId ? true : false, - reason: requestUserId === requestedUserId ? true : false, + id: true, + reason: true, 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, + is_recurring: true, + recurrence_end_date: true, + rrule: true, + created_at: true, + updated_at: true, }, }, }, @@ -167,6 +167,7 @@ export const GET = auth(async function GET(req, { params }) { calendar.push({ ...event.meeting, type: 'event' }); } else { calendar.push({ + id: event.meeting.id, start_time: event.meeting.start_time, end_time: event.meeting.end_time, type: 'blocked_private', @@ -182,6 +183,7 @@ export const GET = auth(async function GET(req, { params }) { calendar.push({ ...event, type: 'event' }); } else { calendar.push({ + id: event.id, start_time: event.start_time, end_time: event.end_time, type: 'blocked_private', @@ -190,19 +192,27 @@ export const GET = auth(async function GET(req, { params }) { } 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', - }); + if (requestUserId === requestedUserId) { + 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: 'blocked_owned', + }); + } else { + calendar.push({ + start_time: slot.start_time, + end_time: slot.end_time, + id: slot.id, + type: 'blocked_private', + }); + } } return returnZodTypeCheckedResponse(UserCalendarResponseSchema, { diff --git a/src/app/api/user/[user]/calendar/validation.ts b/src/app/api/user/[user]/calendar/validation.ts index a0d179f..1572793 100644 --- a/src/app/api/user/[user]/calendar/validation.ts +++ b/src/app/api/user/[user]/calendar/validation.ts @@ -13,23 +13,28 @@ export const BlockedSlotSchema = zod start_time: eventStartTimeSchema, end_time: eventEndTimeSchema, type: zod.literal('blocked_private'), + id: zod.string(), }) .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 OwnedBlockedSlotSchema = zod + .object({ + start_time: eventStartTimeSchema, + end_time: eventEndTimeSchema, + 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, diff --git a/src/app/api/user/me/password/route.ts b/src/app/api/user/me/password/route.ts new file mode 100644 index 0000000..0b92559 --- /dev/null +++ b/src/app/api/user/me/password/route.ts @@ -0,0 +1,122 @@ +import { auth } from '@/auth'; +import { prisma } from '@/prisma'; +import { updateUserPasswordServerSchema } from '../validation'; +import { + returnZodTypeCheckedResponse, + userAuthenticated, +} from '@/lib/apiHelpers'; +import { FullUserResponseSchema } from '../../validation'; +import { + ErrorResponseSchema, + ZodErrorResponseSchema, +} from '@/app/api/validation'; +import bcrypt from 'bcryptjs'; + +export const PATCH = auth(async function PATCH(req) { + const authCheck = userAuthenticated(req); + if (!authCheck.continue) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + authCheck.response, + authCheck.metadata, + ); + + const body = await req.json(); + const parsedBody = updateUserPasswordServerSchema.safeParse(body); + if (!parsedBody.success) + return returnZodTypeCheckedResponse( + ZodErrorResponseSchema, + { + success: false, + message: 'Invalid request data', + errors: parsedBody.error.issues, + }, + { status: 400 }, + ); + + const { current_password, new_password } = parsedBody.data; + + const dbUser = await prisma.user.findUnique({ + where: { + id: authCheck.user.id, + }, + include: { + accounts: true, + }, + }); + + if (!dbUser) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { + success: false, + message: 'User not found', + }, + { status: 404 }, + ); + + if (!dbUser.password_hash) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { + success: false, + message: 'User does not have a password set', + }, + { status: 400 }, + ); + + if ( + dbUser.accounts.length === 0 || + dbUser.accounts[0].provider !== 'credentials' + ) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { + success: false, + message: 'Credentials login is not enabled for this user', + }, + { status: 400 }, + ); + + const isCurrentPasswordValid = await bcrypt.compare( + current_password, + dbUser.password_hash || '', + ); + + if (!isCurrentPasswordValid) + return returnZodTypeCheckedResponse( + ErrorResponseSchema, + { + success: false, + message: 'Current password is incorrect', + }, + { status: 401 }, + ); + + const hashedNewPassword = await bcrypt.hash(new_password, 10); + + const updatedUser = await prisma.user.update({ + where: { + id: dbUser.id, + }, + data: { + password_hash: hashedNewPassword, + }, + select: { + id: true, + name: true, + first_name: true, + last_name: true, + email: true, + image: true, + timezone: true, + created_at: true, + updated_at: true, + }, + }); + + return returnZodTypeCheckedResponse(FullUserResponseSchema, { + success: true, + user: updatedUser, + }); +}); diff --git a/src/app/api/user/me/password/swagger.ts b/src/app/api/user/me/password/swagger.ts new file mode 100644 index 0000000..0bc62f0 --- /dev/null +++ b/src/app/api/user/me/password/swagger.ts @@ -0,0 +1,43 @@ +import { OpenAPIRegistry } from '@asteasolutions/zod-to-openapi'; +import { FullUserResponseSchema } from '../../validation'; +import { updateUserPasswordServerSchema } from '../validation'; +import { + invalidRequestDataResponse, + notAuthenticatedResponse, + serverReturnedDataValidationErrorResponse, + userNotFoundResponse, +} from '@/lib/defaultApiResponses'; + +export default function registerSwaggerPaths(registry: OpenAPIRegistry) { + registry.registerPath({ + method: 'patch', + path: '/api/user/me/password', + description: 'Update the password of the currently authenticated user', + request: { + body: { + description: 'User password update request body', + required: true, + content: { + 'application/json': { + schema: updateUserPasswordServerSchema, + }, + }, + }, + }, + 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/route.ts b/src/app/api/user/me/route.ts index 5ba9792..5571a6b 100644 --- a/src/app/api/user/me/route.ts +++ b/src/app/api/user/me/route.ts @@ -8,6 +8,7 @@ import { import { FullUserResponseSchema } from '../validation'; import { ErrorResponseSchema, + SuccessResponseSchema, ZodErrorResponseSchema, } from '@/app/api/validation'; @@ -117,3 +118,43 @@ export const PATCH = auth(async function PATCH(req) { { status: 200 }, ); }); + +export const DELETE = auth(async function DELETE(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 }, + ); + + await prisma.user.delete({ + where: { + id: authCheck.user.id, + }, + }); + + return returnZodTypeCheckedResponse( + SuccessResponseSchema, + { + success: true, + message: 'User deleted successfully', + }, + { status: 200 }, + ); +}); diff --git a/src/app/api/user/me/swagger.ts b/src/app/api/user/me/swagger.ts index e0a36a1..6a9e375 100644 --- a/src/app/api/user/me/swagger.ts +++ b/src/app/api/user/me/swagger.ts @@ -7,6 +7,7 @@ import { serverReturnedDataValidationErrorResponse, userNotFoundResponse, } from '@/lib/defaultApiResponses'; +import { SuccessResponseSchema } from '../../validation'; export default function registerSwaggerPaths(registry: OpenAPIRegistry) { registry.registerPath({ @@ -60,4 +61,24 @@ export default function registerSwaggerPaths(registry: OpenAPIRegistry) { }, tags: ['User'], }); + + registry.registerPath({ + method: 'delete', + path: '/api/user/me', + description: 'Delete the currently authenticated user', + responses: { + 200: { + description: 'User deleted successfully', + content: { + 'application/json': { + schema: SuccessResponseSchema, + }, + }, + }, + ...notAuthenticatedResponse, + ...userNotFoundResponse, + ...serverReturnedDataValidationErrorResponse, + }, + tags: ['User'], + }); } diff --git a/src/app/api/user/me/validation.ts b/src/app/api/user/me/validation.ts index 49c6219..66f07cc 100644 --- a/src/app/api/user/me/validation.ts +++ b/src/app/api/user/me/validation.ts @@ -4,6 +4,8 @@ import { lastNameSchema, newUserEmailServerSchema, newUserNameServerSchema, + passwordSchema, + timezoneSchema, } from '@/app/api/user/validation'; // ---------------------------------------- @@ -16,6 +18,16 @@ export const updateUserServerSchema = zod.object({ first_name: firstNameSchema.optional(), last_name: lastNameSchema.optional(), email: newUserEmailServerSchema.optional(), - image: zod.string().optional(), - timezone: zod.string().optional(), + image: zod.url().optional(), + timezone: timezoneSchema.optional(), }); + +export const updateUserPasswordServerSchema = zod + .object({ + current_password: zod.string().min(1, 'Current password is required'), + new_password: passwordSchema, + confirm_new_password: passwordSchema, + }) + .refine((data) => data.new_password === data.confirm_new_password, { + message: 'New password and confirm new password must match', + }); diff --git a/src/app/api/user/validation.ts b/src/app/api/user/validation.ts index 79b1e7e..89b8ba4 100644 --- a/src/app/api/user/validation.ts +++ b/src/app/api/user/validation.ts @@ -1,6 +1,7 @@ import { extendZodWithOpenApi } from '@asteasolutions/zod-to-openapi'; import { prisma } from '@/prisma'; import zod from 'zod/v4'; +import { allTimeZones } from '@/lib/timezones'; extendZodWithOpenApi(zod); @@ -107,6 +108,15 @@ export const passwordSchema = zod 'Password must contain at least one uppercase letter, one lowercase letter, one number, and one special character', ); +// ---------------------------------------- +// +// Timezone Validation +// +// ---------------------------------------- +export const timezoneSchema = zod.enum(allTimeZones).openapi('Timezone', { + description: 'Valid timezone from the list of supported timezones', +}); + // ---------------------------------------- // // User Schema Validation (for API responses) @@ -119,8 +129,11 @@ export const FullUserSchema = zod first_name: zod.string().nullish(), last_name: zod.string().nullish(), email: zod.email(), - image: zod.string().nullish(), - timezone: zod.string(), + image: zod.url().nullish(), + timezone: zod + .string() + .refine((i) => (allTimeZones as string[]).includes(i)) + .nullish(), created_at: zod.date(), updated_at: zod.date(), }) diff --git a/src/app/globals.css b/src/app/globals.css index f85cb2f..93a24ce 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -33,6 +33,7 @@ --text-alt: var(--neutral-900); --text-input: var(--text); --text-muted-input: var(--neutral-450); + --text-muted: var(--neutral-300); --muted-input: var(--neutral-600); --background-disabled: var(--neutral-500); --text-disabled: var(--neutral-700); @@ -55,6 +56,8 @@ --card: var(--neutral-800); + --sidebar-width-icon: 32px; + /* ------------------- */ --foreground: oklch(0.13 0.028 261.692); @@ -95,17 +98,17 @@ --chart-5: oklch(0.769 0.188 70.08); - --sidebar: oklch(0.985 0.002 247.839); + --sidebar: var(--background); - --sidebar-foreground: oklch(0.13 0.028 261.692); + --sidebar-foreground: var(--text); --sidebar-primary: oklch(0.21 0.034 264.665); - --sidebar-primary-foreground: oklch(0.985 0.002 247.839); + --sidebar-primary-foreground: var(--text); --sidebar-accent: oklch(0.967 0.003 264.542); - --sidebar-accent-foreground: oklch(0.21 0.034 264.665); + --sidebar-accent-foreground: var(--text); --sidebar-border: oklch(0.928 0.006 264.531); @@ -155,6 +158,7 @@ --color-text-alt: var(--text-alt); --color-text-input: var(--text-input); --color-text-muted-input: var(--text-muted-input); + --color-text-muted: var(--text-muted); --color-muted-input: var(--muted-input); --color-background-disabled: var(--neutral-500); @@ -278,6 +282,7 @@ --text-alt: var(--neutral-900); --text-input: var(--text); --text-muted-input: var(--neutral-450); + --text-muted: var(--neutral-300); --muted-input: var(--neutral-500); --background-disabled: var(--neutral-500); --text-disabled: var(--neutral-700); @@ -339,17 +344,17 @@ --chart-5: oklch(0.645 0.246 16.439); - --sidebar: oklch(0.21 0.034 264.665); + --sidebar: var(--background); - --sidebar-foreground: oklch(0.985 0.002 247.839); + --sidebar-foreground: var(--text); --sidebar-primary: oklch(0.488 0.243 264.376); - --sidebar-primary-foreground: oklch(0.985 0.002 247.839); + --sidebar-primary-foreground: var(--text); --sidebar-accent: oklch(0.278 0.033 256.848); - --sidebar-accent-foreground: oklch(0.985 0.002 247.839); + --sidebar-accent-foreground: var(--text); --sidebar-border: oklch(1 0 0 / 10%); diff --git a/src/app/home/page.tsx b/src/app/home/page.tsx deleted file mode 100644 index 77f3cf8..0000000 --- a/src/app/home/page.tsx +++ /dev/null @@ -1,23 +0,0 @@ -'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 ( -
-
{}
-
-

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

- - -
-
- ); -} diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 201a730..0ab657d 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -2,7 +2,8 @@ import { ThemeProvider } from '@/components/wrappers/theme-provider'; import type { Metadata } from 'next'; import './globals.css'; -import { QueryProvider } from '@/components/query-provider'; +import { QueryProvider } from '@/components/wrappers/query-provider'; +import { SessionProvider } from 'next-auth/react'; export const metadata: Metadata = { title: 'MeetUp', @@ -56,7 +57,9 @@ export default function RootLayout({ enableSystem disableTransitionOnChange > - {children} + + {children} + diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx index 76778ae..dcd207d 100644 --- a/src/app/login/page.tsx +++ b/src/app/login/page.tsx @@ -33,7 +33,10 @@ export default async function LoginPage() {
- + @@ -46,6 +49,7 @@ export default async function LoginPage() { key={provider.id} provider={provider.id} providerDisplayName={provider.name} + data-cy={'sso-login-button_' + provider.name.toLowerCase()} /> ))} diff --git a/src/assets/logo/logo-export.ts b/src/assets/logo/logo-export.ts index 44681d3..17a0708 100644 --- a/src/assets/logo/logo-export.ts +++ b/src/assets/logo/logo-export.ts @@ -1,5 +1,5 @@ -export { default as logo_colored_combo_light } from '@/assets/logo/logo_colored_combo_light.svg'; -export { default as logo_colored_combo_dark } from '@/assets/logo/logo_colored_combo_dark.svg'; +export { default as logo_colored_combo_light } from '@/assets/logo/new/logo_colored_combo_light.svg'; +export { default as logo_colored_combo_dark } from '@/assets/logo/new/logo_colored_combo_dark.svg'; export { default as logo_colored_primary_light } from '@/assets/logo/logo_colored_primary_light.svg'; export { default as logo_colored_primary_dark } from '@/assets/logo/logo_colored_primary_dark.svg'; export { default as logo_colored_secondary_light } from '@/assets/logo/logo_colored_secondary_light.svg'; @@ -12,5 +12,5 @@ export { default as logo_mono_secondary_light } from '@/assets/logo/logo_mono_se export { default as logo_mono_secondary_dark } from '@/assets/logo/logo_mono_secondary_dark.svg'; export { default as logo_mono_submark_light } from '@/assets/logo/logo_mono_submark_light.svg'; export { default as logo_mono_submark_dark } from '@/assets/logo/logo_mono_submark_dark.svg'; -export { default as logo_colored_submark_light } from '@/assets/logo/logo_colored_submark_light.svg'; -export { default as logo_colored_submark_dark } from '@/assets/logo/logo_colored_submark_dark.svg'; +export { default as logo_colored_submark_light } from '@/assets/logo/new/logo_colored_submark_light.svg'; +export { default as logo_colored_submark_dark } from '@/assets/logo/new/logo_colored_submark_dark.svg'; diff --git a/src/assets/logo/new/logo_colored_combo_dark.svg b/src/assets/logo/new/logo_colored_combo_dark.svg new file mode 100644 index 0000000..ec4acae --- /dev/null +++ b/src/assets/logo/new/logo_colored_combo_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/assets/logo/new/logo_colored_combo_light.svg b/src/assets/logo/new/logo_colored_combo_light.svg new file mode 100644 index 0000000..33e6c6d --- /dev/null +++ b/src/assets/logo/new/logo_colored_combo_light.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/assets/logo/new/logo_colored_submark_dark.svg b/src/assets/logo/new/logo_colored_submark_dark.svg new file mode 100644 index 0000000..efadbf0 --- /dev/null +++ b/src/assets/logo/new/logo_colored_submark_dark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/logo/new/logo_colored_submark_light.svg b/src/assets/logo/new/logo_colored_submark_light.svg new file mode 100644 index 0000000..cc7b3e1 --- /dev/null +++ b/src/assets/logo/new/logo_colored_submark_light.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/components/buttons/notification-button.tsx b/src/components/buttons/notification-button.tsx new file mode 100644 index 0000000..f41f325 --- /dev/null +++ b/src/components/buttons/notification-button.tsx @@ -0,0 +1,31 @@ +import { Button } from '@/components/ui/button'; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuTrigger, +} from '@/components/ui/dropdown-menu'; +import { NDot, NotificationDot } from '@/components/misc/notification-dot'; + +export function NotificationButton({ + dotVariant, + children, + ...props +}: { + dotVariant?: NDot; + children: React.ReactNode; +} & React.ComponentProps) { + return ( + + + + + + + ); +} diff --git a/src/components/buttons/sso-login-button.tsx b/src/components/buttons/sso-login-button.tsx index 644efce..013ef73 100644 --- a/src/components/buttons/sso-login-button.tsx +++ b/src/components/buttons/sso-login-button.tsx @@ -5,10 +5,11 @@ import { faOpenid } from '@fortawesome/free-brands-svg-icons'; export default function SSOLogin({ provider, providerDisplayName, + ...props }: { provider: string; providerDisplayName: string; -}) { +} & React.HTMLAttributes) { return (
Login with {providerDisplayName} diff --git a/src/components/calendar.tsx b/src/components/calendar.tsx new file mode 100644 index 0000000..0f4a098 --- /dev/null +++ b/src/components/calendar.tsx @@ -0,0 +1,244 @@ +'use client'; + +import { Calendar as RBCalendar, momentLocalizer } from 'react-big-calendar'; +import withDragAndDrop from 'react-big-calendar/lib/addons/dragAndDrop'; +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'; +import React from 'react'; +import { useGetApiUserUserCalendar } from '@/generated/api/user/user'; +import { useRouter } from 'next/navigation'; +import { usePatchApiEventEventID } from '@/generated/api/event/event'; +import { useSession } from 'next-auth/react'; +import { UserCalendarSchemaItem } from '@/generated/api/meetup.schemas'; +import { QueryErrorResetBoundary } from '@tanstack/react-query'; +import { ErrorBoundary } from 'react-error-boundary'; +import { Button } from '@/components/ui/button'; +import { fromZodIssue } from 'zod-validation-error/v4'; +import type { $ZodIssue } from 'zod/v4/core'; + +moment.updateLocale('en', { + week: { + dow: 1, + doy: 4, + }, +}); + +const DaDRBCalendar = withDragAndDrop< + { + id: string; + start: Date; + end: Date; + type: UserCalendarSchemaItem['type']; + }, + { + id: string; + title: string; + type: UserCalendarSchemaItem['type']; + } +>(RBCalendar); + +const localizer = momentLocalizer(moment); + +export default function Calendar({ userId, height }: { userId?: string; height: string }) { + return ( + + {({ reset }) => ( + ( +
+ There was an error! +

+ {typeof error === 'string' + ? error + : error.errors + .map((e: $ZodIssue) => fromZodIssue(e).toString()) + .join(', ')} +

+ +
+ )} + > + {userId ? ( + + ) : ( + + )} +
+ )} +
+ ); +} + +function CalendarWithUserEvents({ userId, height }: { userId: string; height: string }) { + const sesstion = useSession(); + const [currentView, setCurrentView] = React.useState< + 'month' | 'week' | 'day' | 'agenda' | 'work_week' + >('week'); + const [currentDate, setCurrentDate] = React.useState(new Date()); + const router = useRouter(); + + const { data, refetch, error, isError } = useGetApiUserUserCalendar( + userId, + { + start: moment(currentDate) + .startOf( + currentView === 'agenda' + ? 'month' + : currentView === 'work_week' + ? 'week' + : currentView, + ) + .toISOString(), + end: moment(currentDate) + .endOf( + currentView === 'agenda' + ? 'month' + : currentView === 'work_week' + ? 'week' + : currentView, + ) + .toISOString(), + }, + { + query: { + refetchOnWindowFocus: true, + refetchOnReconnect: true, + refetchOnMount: true, + }, + }, + ); + + if (isError) { + throw error.response?.data || 'Failed to fetch calendar data'; + } + + const { mutate: patchEvent } = usePatchApiEventEventID({ + mutation: { + throwOnError(error) { + throw error.response?.data || 'Failed to update event'; + }, + }, + }); + + return ( + { + setCurrentDate(date); + }} + events={ + data?.data.calendar.map((event) => ({ + id: event.id, + title: event.type === 'event' ? event.title : 'Blocker', + start: new Date(event.start_time), + end: new Date(event.end_time), + type: event.type, + })) ?? [] + } + onSelectEvent={(event) => { + router.push(`/events/${event.id}`); + }} + onSelectSlot={(slotInfo) => { + router.push( + `/events/new?start=${slotInfo.start.toISOString()}&end=${slotInfo.end.toISOString()}`, + ); + }} + resourceIdAccessor={(event) => event.id} + resourceTitleAccessor={(event) => event.title} + startAccessor={(event) => event.start} + endAccessor={(event) => event.end} + selectable={sesstion.data?.user?.id === userId} + onEventDrop={(event) => { + const { start, end, event: droppedEvent } = event; + if (droppedEvent.type === 'blocked_private') return; + const startISO = new Date(start).toISOString(); + const endISO = new Date(end).toISOString(); + patchEvent( + { + eventID: droppedEvent.id, + data: { + start_time: startISO, + end_time: endISO, + }, + }, + { + onSuccess: () => { + refetch(); + }, + onError: (error) => { + console.error('Error updating event:', error); + }, + }, + ); + }} + onEventResize={(event) => { + const { start, end, event: resizedEvent } = event; + if (resizedEvent.type === 'blocked_private') return; + const startISO = new Date(start).toISOString(); + const endISO = new Date(end).toISOString(); + if (startISO === endISO) { + console.warn('Start and end times are the same, skipping resize.'); + return; + } + patchEvent( + { + eventID: resizedEvent.id, + data: { + start_time: startISO, + end_time: endISO, + }, + }, + { + onSuccess: () => { + refetch(); + }, + onError: (error) => { + console.error('Error resizing event:', error); + }, + }, + ); + }} + /> + ); +} + +function CalendarWithoutUserEvents({ height }: { height: string }) { + const [currentView, setCurrentView] = React.useState< + 'month' | 'week' | 'day' | 'agenda' | 'work_week' + >('week'); + const [currentDate, setCurrentDate] = React.useState(new Date()); + + return ( + { + setCurrentDate(date); + }} + /> + ); +} diff --git a/src/components/custom-toolbar.css b/src/components/custom-toolbar.css new file mode 100644 index 0000000..3fba69f --- /dev/null +++ b/src/components/custom-toolbar.css @@ -0,0 +1,114 @@ +/* Container der Toolbar */ +.custom-toolbar { + display: flex; + flex-direction: column; + gap: 12px; + padding: calc(var(--spacing) * 2); + padding-left: calc(50px + var(--spacing)); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; +} + +/* Anzeige des aktuellen Datums (Monat und Jahr) */ +.custom-toolbar .current-date { + font-weight: bold; + font-size: 12px; + text-align: center; + color: #ffffff; + background-color: #717171; + 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; + 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-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, +.view-switcher { + background-color: #717171; + 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; +} + +.view-change, +.right-section { + background-color: #717171; + height: 48px; + padding: 0 8px; + border-radius: 11px; + justify-items: center; +} + +.right-section .datepicker-box { + color: #000000; + background-color: #c6c6c6; + height: 36px; + border-radius: 11px; + font-size: 12px; + align-self: center; +} + +.datepicker { + text-align: center; + height: 30px; +} + +.datepicker-box { + z-index: 5; +} diff --git a/src/components/custom-toolbar.tsx b/src/components/custom-toolbar.tsx new file mode 100644 index 0000000..36c8fff --- /dev/null +++ b/src/components/custom-toolbar.tsx @@ -0,0 +1,260 @@ +import React, { useState, useEffect } from 'react'; +import './custom-toolbar.css'; +import { Button } from '@/components/ui/button'; +import DatePicker from 'react-datepicker'; +import 'react-datepicker/dist/react-datepicker.css'; +import { NavigateAction } from 'react-big-calendar'; + +interface CustomToolbarProps { + //Aktuell angezeigtes Datum + date: Date; + //Aktuelle Ansicht + view: 'month' | 'week' | 'day' | 'agenda' | 'work_week'; + + onNavigate: (action: NavigateAction, newDate?: Date) => void; + //Ansichtwechsel + onView: (newView: 'month' | 'week' | 'day' | 'agenda' | 'work_week') => void; +} + +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, + ); + return weekNo; + }; + + //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(); + }; + + //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; + }; + + 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) { + //1. Januar gehört zur ersten ISO-Woche (Montag dieser Woche bestimmen) + firstMonday = new Date(year, 0, 1 - isoDayOfWeek + 1); + } else { + //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) + const [selectedWeek, setSelectedWeek] = useState(getISOWeek(date)); + const [selectedYear, setSelectedYear] = useState( + getISOWeekYear(date), + ); + + //Auswahl aktualisieren, wenn sich die Prop "date" ändert + useEffect(() => { + setSelectedWeek(getISOWeek(date)); + setSelectedYear(getISOWeekYear(date)); + }, [date]); + + //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); + + //Ansichtwechsel + const handleViewChange = (newView: 'month' | 'week' | 'day' | 'agenda') => { + onView(newView); + }; + + //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); + }; + + //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); + } + //Datum im DatePicker aktualisieren + setSelectedDate(newDate); + onNavigate('DATE', newDate); + }; + + //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); + } + //Datum im DatePicker aktualisieren + setSelectedDate(newDate); + onNavigate('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('DATE', newDate); + } else if (view === 'day') { + onNavigate('DATE', date); + } else if (view === 'month') { + const newDate = new Date(date.getFullYear(), date.getMonth(), 1); + onNavigate('DATE', newDate); + } else if (view === 'agenda') { + onNavigate('DATE', date); + } + } + }; + + return ( +
+
+
+ + + + +
+
+ +
+
+
+ + +
+
+ +
+
+ +
+ +
+
+
+ ); +}; + +export default CustomToolbar; diff --git a/src/components/custom-ui/app-sidebar.tsx b/src/components/custom-ui/app-sidebar.tsx new file mode 100644 index 0000000..f823970 --- /dev/null +++ b/src/components/custom-ui/app-sidebar.tsx @@ -0,0 +1,131 @@ +'use client'; + +import React from 'react'; +import { + Sidebar, + SidebarContent, + SidebarFooter, + SidebarGroup, + SidebarGroupContent, + SidebarGroupLabel, + SidebarHeader, + SidebarMenu, + SidebarMenuButton, + SidebarMenuItem, +} from '@/components/custom-ui/sidebar'; + +import { ChevronDown } from 'lucide-react'; +import { + Collapsible, + CollapsibleContent, + CollapsibleTrigger, +} from '@/components/ui/collapsible'; + +import Logo from '@/components/misc/logo'; + +import Link from 'next/link'; + +import { + Star, + CalendarDays, + User, + Users, + CalendarClock, + CalendarPlus, +} from 'lucide-react'; + +const items = [ + { + title: 'Calendar', + url: '#', + icon: CalendarDays, + }, + { + title: 'Friends', + url: '#', + icon: User, + }, + { + title: 'Groups', + url: '#', + icon: Users, + }, + { + title: 'Events', + url: '#', + icon: CalendarClock, + }, +]; + +export function AppSidebar() { + return ( + <> + + + + + + + + + + + + {' '} + + Favorites + + + + + + + + + + + + + {items.map((item) => ( + + + + + + {item.title} + + + + + ))} + + + + + + + + + New Event + + + + + + + + ); +} diff --git a/src/components/custom-ui/sidebar.tsx b/src/components/custom-ui/sidebar.tsx new file mode 100644 index 0000000..11228cb --- /dev/null +++ b/src/components/custom-ui/sidebar.tsx @@ -0,0 +1,725 @@ +'use client'; + +import * as React from 'react'; +import { Slot } from '@radix-ui/react-slot'; +import { cva, VariantProps } from 'class-variance-authority'; +import { PanelLeftIcon } from 'lucide-react'; + +import { useIsMobile } from '@/hooks/use-mobile'; +import { cn } from '@/lib/utils'; +import { Button } from '@/components/ui/button'; +import { Input } from '@/components/ui/input'; +import { Separator } from '@/components/ui/separator'; +import { + Sheet, + SheetContent, + SheetDescription, + SheetHeader, + SheetTitle, +} from '@/components/ui/sheet'; +import { Skeleton } from '@/components/ui/skeleton'; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from '@/components/ui/tooltip'; + +const SIDEBAR_COOKIE_NAME = 'sidebar_state'; +const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7; +const SIDEBAR_WIDTH = '16rem'; +const SIDEBAR_WIDTH_MOBILE = '18rem'; +const SIDEBAR_WIDTH_ICON = '4rem'; +const SIDEBAR_KEYBOARD_SHORTCUT = 'b'; + +type SidebarContextProps = { + state: 'expanded' | 'collapsed'; + open: boolean; + setOpen: (open: boolean) => void; + openMobile: boolean; + setOpenMobile: (open: boolean) => void; + isMobile: boolean; + toggleSidebar: () => void; +}; + +const SidebarContext = React.createContext(null); + +function useSidebar() { + const context = React.useContext(SidebarContext); + if (!context) { + throw new Error('useSidebar must be used within a SidebarProvider.'); + } + + return context; +} + +function SidebarProvider({ + defaultOpen = true, + open: openProp, + onOpenChange: setOpenProp, + className, + style, + children, + ...props +}: React.ComponentProps<'div'> & { + defaultOpen?: boolean; + open?: boolean; + onOpenChange?: (open: boolean) => void; +}) { + const isMobile = useIsMobile(); + const [openMobile, setOpenMobile] = React.useState(false); + + // This is the internal state of the sidebar. + // We use openProp and setOpenProp for control from outside the component. + const [_open, _setOpen] = React.useState(defaultOpen); + const open = openProp ?? _open; + const setOpen = React.useCallback( + (value: boolean | ((value: boolean) => boolean)) => { + const openState = typeof value === 'function' ? value(open) : value; + if (setOpenProp) { + setOpenProp(openState); + } else { + _setOpen(openState); + } + + // This sets the cookie to keep the sidebar state. + document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`; + }, + [setOpenProp, open], + ); + + // Helper to toggle the sidebar. + const toggleSidebar = React.useCallback(() => { + return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open); + }, [isMobile, setOpen, setOpenMobile]); + + // Adds a keyboard shortcut to toggle the sidebar. + React.useEffect(() => { + const handleKeyDown = (event: KeyboardEvent) => { + if ( + event.key === SIDEBAR_KEYBOARD_SHORTCUT && + (event.metaKey || event.ctrlKey) + ) { + event.preventDefault(); + toggleSidebar(); + } + }; + + window.addEventListener('keydown', handleKeyDown); + return () => window.removeEventListener('keydown', handleKeyDown); + }, [toggleSidebar]); + + // We add a state so that we can do data-state="expanded" or "collapsed". + // This makes it easier to style the sidebar with Tailwind classes. + const state = open ? 'expanded' : 'collapsed'; + + const contextValue = React.useMemo( + () => ({ + state, + open, + setOpen, + isMobile, + openMobile, + setOpenMobile, + toggleSidebar, + }), + [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar], + ); + + return ( + + +
+ {children} +
+
+
+ ); +} + +function Sidebar({ + side = 'left', + variant = 'sidebar', + collapsible = 'offcanvas', + className, + children, + ...props +}: React.ComponentProps<'div'> & { + side?: 'left' | 'right'; + variant?: 'sidebar' | 'floating' | 'inset'; + collapsible?: 'offcanvas' | 'icon' | 'none'; +}) { + const { isMobile, state, openMobile, setOpenMobile } = useSidebar(); + + if (collapsible === 'none') { + return ( +
+ {children} +
+ ); + } + + if (isMobile) { + return ( + + + + Sidebar + Displays the mobile sidebar. + +
{children}
+
+
+ ); + } + + return ( +
+ {/* This is what handles the sidebar gap on desktop */} +
+ +
+ ); +} + +function SidebarTrigger({ + className, + onClick, + ...props +}: React.ComponentProps) { + const { toggleSidebar } = useSidebar(); + + return ( + + ); +} + +function SidebarRail({ className, ...props }: React.ComponentProps<'button'>) { + const { toggleSidebar } = useSidebar(); + + return ( + @@ -129,6 +136,7 @@ function RegisterFormElement({ ref={formRef} className='flex flex-col gap-5 w-full' onSubmit={onSubmit} + data-cy='register-form' >
- - - setTheme('light')}> + + setTheme('light')} + data-cy='light-theme' + > Light - setTheme('dark')}> + setTheme('dark')} data-cy='dark-theme'> Dark - setTheme('system')}> + setTheme('system')} + data-cy='system-theme' + > System diff --git a/src/components/misc/user-card.tsx b/src/components/misc/user-card.tsx new file mode 100644 index 0000000..faefc35 --- /dev/null +++ b/src/components/misc/user-card.tsx @@ -0,0 +1,29 @@ +import { useGetApiUserMe } from '@/generated/api/user/user'; +import { Avatar } from '@/components/ui/avatar'; +import Image from 'next/image'; +import { User } from 'lucide-react'; + +export default function UserCard() { + const { data } = useGetApiUserMe(); + return ( +
+ + {data?.data.user.image ? ( + Avatar + ) : ( + + )} + +
{data?.data.user.name}
+
+ {data?.data.user.email} +
+
+ ); +} diff --git a/src/components/misc/user-dropdown.tsx b/src/components/misc/user-dropdown.tsx new file mode 100644 index 0000000..e55f4bb --- /dev/null +++ b/src/components/misc/user-dropdown.tsx @@ -0,0 +1,52 @@ +'use client'; + +import { Avatar } from '@/components/ui/avatar'; +import { Button } from '@/components/ui/button'; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from '@/components/ui/dropdown-menu'; +import { useGetApiUserMe } from '@/generated/api/user/user'; +import { ChevronDown, User } from 'lucide-react'; +import Image from 'next/image'; +import Link from 'next/link'; +import UserCard from '@/components/misc/user-card'; + +export default function UserDropdown() { + const { data } = useGetApiUserMe(); + return ( + + + + + + + + + + Settings + + + Logout + + + + ); +} diff --git a/src/components/react-big-calendar.css b/src/components/react-big-calendar.css new file mode 100644 index 0000000..675898c --- /dev/null +++ b/src/components/react-big-calendar.css @@ -0,0 +1,930 @@ +@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, +.rbc-agenda-view table.rbc-agenda-table tbody > tr > td.rbc-agenda-time-cell { + 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%; + 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-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%; + overflow-y: auto; + position: relative; +} + +.rbc-time-header-content { + border-bottom: 2px solid #717171; /*#ddd*/ +} + +.rbc-time-column :last-child { + border-bottom: 0; +} + +.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 */ diff --git a/src/components/ui/avatar.tsx b/src/components/ui/avatar.tsx new file mode 100644 index 0000000..6a21b65 --- /dev/null +++ b/src/components/ui/avatar.tsx @@ -0,0 +1,53 @@ +'use client'; + +import * as React from 'react'; +import * as AvatarPrimitive from '@radix-ui/react-avatar'; + +import { cn } from '@/lib/utils'; + +function Avatar({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function AvatarImage({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function AvatarFallback({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +export { Avatar, AvatarImage, AvatarFallback }; diff --git a/src/components/ui/collapsible.tsx b/src/components/ui/collapsible.tsx new file mode 100644 index 0000000..3ed0ecd --- /dev/null +++ b/src/components/ui/collapsible.tsx @@ -0,0 +1,33 @@ +'use client'; + +import * as CollapsiblePrimitive from '@radix-ui/react-collapsible'; + +function Collapsible({ + ...props +}: React.ComponentProps) { + return ; +} + +function CollapsibleTrigger({ + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function CollapsibleContent({ + ...props +}: React.ComponentProps) { + return ( + + ); +} + +export { Collapsible, CollapsibleTrigger, CollapsibleContent }; diff --git a/src/components/ui/separator.tsx b/src/components/ui/separator.tsx index 3b4f1ef..3234cdc 100644 --- a/src/components/ui/separator.tsx +++ b/src/components/ui/separator.tsx @@ -13,10 +13,13 @@ function Separator({ }: React.ComponentProps) { return ( ); diff --git a/src/components/ui/sheet.tsx b/src/components/ui/sheet.tsx new file mode 100644 index 0000000..e8d5ec1 --- /dev/null +++ b/src/components/ui/sheet.tsx @@ -0,0 +1,139 @@ +'use client'; + +import * as React from 'react'; +import * as SheetPrimitive from '@radix-ui/react-dialog'; +import { XIcon } from 'lucide-react'; + +import { cn } from '@/lib/utils'; + +function Sheet({ ...props }: React.ComponentProps) { + return ; +} + +function SheetTrigger({ + ...props +}: React.ComponentProps) { + return ; +} + +function SheetClose({ + ...props +}: React.ComponentProps) { + return ; +} + +function SheetPortal({ + ...props +}: React.ComponentProps) { + return ; +} + +function SheetOverlay({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function SheetContent({ + className, + children, + side = 'right', + ...props +}: React.ComponentProps & { + side?: 'top' | 'right' | 'bottom' | 'left'; +}) { + return ( + + + + {children} + + + Close + + + + ); +} + +function SheetHeader({ className, ...props }: React.ComponentProps<'div'>) { + return ( +
+ ); +} + +function SheetFooter({ className, ...props }: React.ComponentProps<'div'>) { + return ( +
+ ); +} + +function SheetTitle({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function SheetDescription({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +export { + Sheet, + SheetTrigger, + SheetClose, + SheetContent, + SheetHeader, + SheetFooter, + SheetTitle, + SheetDescription, +}; diff --git a/src/components/ui/skeleton.tsx b/src/components/ui/skeleton.tsx new file mode 100644 index 0000000..a9344b2 --- /dev/null +++ b/src/components/ui/skeleton.tsx @@ -0,0 +1,13 @@ +import { cn } from '@/lib/utils'; + +function Skeleton({ className, ...props }: React.ComponentProps<'div'>) { + return ( +
+ ); +} + +export { Skeleton }; diff --git a/src/components/ui/tooltip.tsx b/src/components/ui/tooltip.tsx new file mode 100644 index 0000000..2b8b1d7 --- /dev/null +++ b/src/components/ui/tooltip.tsx @@ -0,0 +1,61 @@ +'use client'; + +import * as React from 'react'; +import * as TooltipPrimitive from '@radix-ui/react-tooltip'; + +import { cn } from '@/lib/utils'; + +function TooltipProvider({ + delayDuration = 0, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function Tooltip({ + ...props +}: React.ComponentProps) { + return ( + + + + ); +} + +function TooltipTrigger({ + ...props +}: React.ComponentProps) { + return ; +} + +function TooltipContent({ + className, + sideOffset = 0, + children, + ...props +}: React.ComponentProps) { + return ( + + + {children} + + + + ); +} + +export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }; diff --git a/src/components/query-provider.tsx b/src/components/wrappers/query-provider.tsx similarity index 100% rename from src/components/query-provider.tsx rename to src/components/wrappers/query-provider.tsx diff --git a/src/components/wrappers/sidebar-provider.tsx b/src/components/wrappers/sidebar-provider.tsx new file mode 100644 index 0000000..3c9ff95 --- /dev/null +++ b/src/components/wrappers/sidebar-provider.tsx @@ -0,0 +1,23 @@ +'use client'; + +import React from 'react'; +import { SidebarProvider } from '../custom-ui/sidebar'; + +export default function SidebarProviderWrapper({ + defaultOpen, + children, +}: { + defaultOpen: boolean; + children: React.ReactNode; +}) { + const [open, setOpen] = React.useState(defaultOpen); + return ( + + {children} + + ); +} diff --git a/src/hooks/use-mobile.ts b/src/hooks/use-mobile.ts new file mode 100644 index 0000000..821f8ff --- /dev/null +++ b/src/hooks/use-mobile.ts @@ -0,0 +1,21 @@ +import * as React from 'react'; + +const MOBILE_BREAKPOINT = 768; + +export function useIsMobile() { + const [isMobile, setIsMobile] = React.useState( + undefined, + ); + + React.useEffect(() => { + const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`); + const onChange = () => { + setIsMobile(window.innerWidth < MOBILE_BREAKPOINT); + }; + mql.addEventListener('change', onChange); + setIsMobile(window.innerWidth < MOBILE_BREAKPOINT); + return () => mql.removeEventListener('change', onChange); + }, []); + + return !!isMobile; +} diff --git a/src/lib/timezones.ts b/src/lib/timezones.ts new file mode 100644 index 0000000..9382aab --- /dev/null +++ b/src/lib/timezones.ts @@ -0,0 +1,3717 @@ +export const timezoneData = { + ianaVersion: '2025b', + fullVersionId: 'TZDB: 2025b (mapping: $Revision$)', + zones: [ + { + id: 'Africa/Abidjan', + aliases: [ + 'Africa/Accra', + 'Africa/Bamako', + 'Africa/Banjul', + 'Africa/Conakry', + 'Africa/Dakar', + 'Africa/Freetown', + 'Africa/Lome', + 'Africa/Nouakchott', + 'Africa/Ouagadougou', + 'Africa/Timbuktu', + 'Atlantic/Reykjavik', + 'Atlantic/St_Helena', + 'Iceland', + ], + location: { + countryCode: 'CI', + countryName: 'C\u00F4te d\u0027Ivoire', + comment: '', + latitude: 5.316666666666666, + longitude: -4.033333333333333, + }, + }, + { + id: 'Africa/Algiers', + aliases: [], + location: { + countryCode: 'DZ', + countryName: 'Algeria', + comment: '', + latitude: 36.78333333333333, + longitude: 3.05, + }, + }, + { + id: 'Africa/Bissau', + aliases: [], + location: { + countryCode: 'GW', + countryName: 'Guinea-Bissau', + comment: '', + latitude: 11.85, + longitude: -15.583333333333334, + }, + }, + { + id: 'Africa/Cairo', + aliases: ['Egypt'], + location: { + countryCode: 'EG', + countryName: 'Egypt', + comment: '', + latitude: 30.05, + longitude: 31.25, + }, + }, + { + id: 'Africa/Casablanca', + aliases: [], + location: { + countryCode: 'MA', + countryName: 'Morocco', + comment: '', + latitude: 33.65, + longitude: -7.583333333333333, + }, + }, + { + id: 'Africa/Ceuta', + aliases: [], + location: { + countryCode: 'ES', + countryName: 'Spain', + comment: 'Ceuta, Melilla', + latitude: 35.88333333333333, + longitude: -5.316666666666666, + }, + }, + { + id: 'Africa/El_Aaiun', + aliases: [], + location: { + countryCode: 'EH', + countryName: 'Western Sahara', + comment: '', + latitude: 27.15, + longitude: -13.2, + }, + }, + { + id: 'Africa/Johannesburg', + aliases: ['Africa/Maseru', 'Africa/Mbabane'], + location: { + countryCode: 'ZA', + countryName: 'South Africa', + comment: '', + latitude: -26.25, + longitude: 28, + }, + }, + { + id: 'Africa/Juba', + aliases: [], + location: { + countryCode: 'SS', + countryName: 'South Sudan', + comment: '', + latitude: 4.85, + longitude: 31.616666666666667, + }, + }, + { + id: 'Africa/Khartoum', + aliases: [], + location: { + countryCode: 'SD', + countryName: 'Sudan', + comment: '', + latitude: 15.6, + longitude: 32.53333333333333, + }, + }, + { + id: 'Africa/Lagos', + aliases: [ + 'Africa/Bangui', + 'Africa/Brazzaville', + 'Africa/Douala', + 'Africa/Kinshasa', + 'Africa/Libreville', + 'Africa/Luanda', + 'Africa/Malabo', + 'Africa/Niamey', + 'Africa/Porto-Novo', + ], + location: { + countryCode: 'NG', + countryName: 'Nigeria', + comment: '', + latitude: 6.45, + longitude: 3.4, + }, + }, + { + id: 'Africa/Maputo', + aliases: [ + 'Africa/Blantyre', + 'Africa/Bujumbura', + 'Africa/Gaborone', + 'Africa/Harare', + 'Africa/Kigali', + 'Africa/Lubumbashi', + 'Africa/Lusaka', + ], + location: { + countryCode: 'MZ', + countryName: 'Mozambique', + comment: '', + latitude: -25.966666666666665, + longitude: 32.583333333333336, + }, + }, + { + id: 'Africa/Monrovia', + aliases: [], + location: { + countryCode: 'LR', + countryName: 'Liberia', + comment: '', + latitude: 6.3, + longitude: -10.783333333333333, + }, + }, + { + id: 'Africa/Nairobi', + aliases: [ + 'Africa/Addis_Ababa', + 'Africa/Asmara', + 'Africa/Asmera', + 'Africa/Dar_es_Salaam', + 'Africa/Djibouti', + 'Africa/Kampala', + 'Africa/Mogadishu', + 'Indian/Antananarivo', + 'Indian/Comoro', + 'Indian/Mayotte', + ], + location: { + countryCode: 'KE', + countryName: 'Kenya', + comment: '', + latitude: -1.2833333333333334, + longitude: 36.81666666666667, + }, + }, + { + id: 'Africa/Ndjamena', + aliases: [], + location: { + countryCode: 'TD', + countryName: 'Chad', + comment: '', + latitude: 12.116666666666667, + longitude: 15.05, + }, + }, + { + id: 'Africa/Sao_Tome', + aliases: [], + location: { + countryCode: 'ST', + countryName: 'Sao Tome \u0026 Principe', + comment: '', + latitude: 0.3333333333333333, + longitude: 6.733333333333333, + }, + }, + { + id: 'Africa/Tripoli', + aliases: ['Libya'], + location: { + countryCode: 'LY', + countryName: 'Libya', + comment: '', + latitude: 32.9, + longitude: 13.183333333333334, + }, + }, + { + id: 'Africa/Tunis', + aliases: [], + location: { + countryCode: 'TN', + countryName: 'Tunisia', + comment: '', + latitude: 36.8, + longitude: 10.183333333333334, + }, + }, + { + id: 'Africa/Windhoek', + aliases: [], + location: { + countryCode: 'NA', + countryName: 'Namibia', + comment: '', + latitude: -22.566666666666666, + longitude: 17.1, + }, + }, + { + id: 'America/Adak', + aliases: ['America/Atka', 'US/Aleutian'], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Alaska - western Aleutians', + latitude: 51.88, + longitude: -176.65805555555556, + }, + }, + { + id: 'America/Anchorage', + aliases: ['US/Alaska'], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Alaska (most areas)', + latitude: 61.21805555555556, + longitude: -149.90027777777777, + }, + }, + { + id: 'America/Araguaina', + aliases: [], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Tocantins', + latitude: -7.2, + longitude: -48.2, + }, + }, + { + id: 'America/Argentina/Buenos_Aires', + aliases: ['America/Buenos_Aires'], + location: { + countryCode: 'AR', + countryName: 'Argentina', + comment: 'Buenos Aires (BA, CF)', + latitude: -34.6, + longitude: -58.45, + }, + }, + { + id: 'America/Argentina/Catamarca', + aliases: ['America/Argentina/ComodRivadavia', 'America/Catamarca'], + location: { + countryCode: 'AR', + countryName: 'Argentina', + comment: 'Catamarca (CT), Chubut (CH)', + latitude: -28.466666666666665, + longitude: -65.78333333333333, + }, + }, + { + id: 'America/Argentina/Cordoba', + aliases: ['America/Cordoba', 'America/Rosario'], + location: { + countryCode: 'AR', + countryName: 'Argentina', + comment: 'Argentina (most areas: CB, CC, CN, ER, FM, MN, SE, SF)', + latitude: -31.4, + longitude: -64.18333333333334, + }, + }, + { + id: 'America/Argentina/Jujuy', + aliases: ['America/Jujuy'], + location: { + countryCode: 'AR', + countryName: 'Argentina', + comment: 'Jujuy (JY)', + latitude: -24.183333333333334, + longitude: -65.3, + }, + }, + { + id: 'America/Argentina/La_Rioja', + aliases: [], + location: { + countryCode: 'AR', + countryName: 'Argentina', + comment: 'La Rioja (LR)', + latitude: -29.433333333333334, + longitude: -66.85, + }, + }, + { + id: 'America/Argentina/Mendoza', + aliases: ['America/Mendoza'], + location: { + countryCode: 'AR', + countryName: 'Argentina', + comment: 'Mendoza (MZ)', + latitude: -32.88333333333333, + longitude: -68.81666666666666, + }, + }, + { + id: 'America/Argentina/Rio_Gallegos', + aliases: [], + location: { + countryCode: 'AR', + countryName: 'Argentina', + comment: 'Santa Cruz (SC)', + latitude: -51.63333333333333, + longitude: -69.21666666666667, + }, + }, + { + id: 'America/Argentina/Salta', + aliases: [], + location: { + countryCode: 'AR', + countryName: 'Argentina', + comment: 'Salta (SA, LP, NQ, RN)', + latitude: -24.783333333333335, + longitude: -65.41666666666667, + }, + }, + { + id: 'America/Argentina/San_Juan', + aliases: [], + location: { + countryCode: 'AR', + countryName: 'Argentina', + comment: 'San Juan (SJ)', + latitude: -31.533333333333335, + longitude: -68.51666666666667, + }, + }, + { + id: 'America/Argentina/San_Luis', + aliases: [], + location: { + countryCode: 'AR', + countryName: 'Argentina', + comment: 'San Luis (SL)', + latitude: -33.31666666666667, + longitude: -66.35, + }, + }, + { + id: 'America/Argentina/Tucuman', + aliases: [], + location: { + countryCode: 'AR', + countryName: 'Argentina', + comment: 'Tucuman (TM)', + latitude: -26.816666666666666, + longitude: -65.21666666666667, + }, + }, + { + id: 'America/Argentina/Ushuaia', + aliases: [], + location: { + countryCode: 'AR', + countryName: 'Argentina', + comment: 'Tierra del Fuego (TF)', + latitude: -54.8, + longitude: -68.3, + }, + }, + { + id: 'America/Asuncion', + aliases: [], + location: { + countryCode: 'PY', + countryName: 'Paraguay', + comment: '', + latitude: -25.266666666666666, + longitude: -57.666666666666664, + }, + }, + { + id: 'America/Bahia', + aliases: [], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Bahia', + latitude: -12.983333333333333, + longitude: -38.516666666666666, + }, + }, + { + id: 'America/Bahia_Banderas', + aliases: [], + location: { + countryCode: 'MX', + countryName: 'Mexico', + comment: 'Bahia de Banderas', + latitude: 20.8, + longitude: -105.25, + }, + }, + { + id: 'America/Barbados', + aliases: [], + location: { + countryCode: 'BB', + countryName: 'Barbados', + comment: '', + latitude: 13.1, + longitude: -59.61666666666667, + }, + }, + { + id: 'America/Belem', + aliases: [], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Para (east), Amapa', + latitude: -1.45, + longitude: -48.483333333333334, + }, + }, + { + id: 'America/Belize', + aliases: [], + location: { + countryCode: 'BZ', + countryName: 'Belize', + comment: '', + latitude: 17.5, + longitude: -88.2, + }, + }, + { + id: 'America/Boa_Vista', + aliases: [], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Roraima', + latitude: 2.816666666666667, + longitude: -60.666666666666664, + }, + }, + { + id: 'America/Bogota', + aliases: [], + location: { + countryCode: 'CO', + countryName: 'Colombia', + comment: '', + latitude: 4.6, + longitude: -74.08333333333333, + }, + }, + { + id: 'America/Boise', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Mountain - ID (south), OR (east)', + latitude: 43.61361111111111, + longitude: -116.2025, + }, + }, + { + id: 'America/Cambridge_Bay', + aliases: [], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'Mountain - NU (west)', + latitude: 69.1138888888889, + longitude: -105.05277777777778, + }, + }, + { + id: 'America/Campo_Grande', + aliases: [], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Mato Grosso do Sul', + latitude: -20.45, + longitude: -54.61666666666667, + }, + }, + { + id: 'America/Cancun', + aliases: [], + location: { + countryCode: 'MX', + countryName: 'Mexico', + comment: 'Quintana Roo', + latitude: 21.083333333333332, + longitude: -86.76666666666667, + }, + }, + { + id: 'America/Caracas', + aliases: [], + location: { + countryCode: 'VE', + countryName: 'Venezuela', + comment: '', + latitude: 10.5, + longitude: -66.93333333333334, + }, + }, + { + id: 'America/Cayenne', + aliases: [], + location: { + countryCode: 'GF', + countryName: 'French Guiana', + comment: '', + latitude: 4.933333333333334, + longitude: -52.333333333333336, + }, + }, + { + id: 'America/Chicago', + aliases: ['CST6CDT', 'US/Central'], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Central (most areas)', + latitude: 41.85, + longitude: -87.65, + }, + }, + { + id: 'America/Chihuahua', + aliases: [], + location: { + countryCode: 'MX', + countryName: 'Mexico', + comment: 'Chihuahua (most areas)', + latitude: 28.633333333333333, + longitude: -106.08333333333333, + }, + }, + { + id: 'America/Ciudad_Juarez', + aliases: [], + location: { + countryCode: 'MX', + countryName: 'Mexico', + comment: 'Chihuahua (US border - west)', + latitude: 31.733333333333334, + longitude: -106.48333333333333, + }, + }, + { + id: 'America/Costa_Rica', + aliases: [], + location: { + countryCode: 'CR', + countryName: 'Costa Rica', + comment: '', + latitude: 9.933333333333334, + longitude: -84.08333333333333, + }, + }, + { + id: 'America/Coyhaique', + aliases: [], + location: { + countryCode: 'CL', + countryName: 'Chile', + comment: 'Aysen Region', + latitude: -45.56666666666667, + longitude: -72.06666666666666, + }, + }, + { + id: 'America/Cuiaba', + aliases: [], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Mato Grosso', + latitude: -15.583333333333334, + longitude: -56.083333333333336, + }, + }, + { + id: 'America/Danmarkshavn', + aliases: [], + location: { + countryCode: 'GL', + countryName: 'Greenland', + comment: 'National Park (east coast)', + latitude: 76.76666666666667, + longitude: -18.666666666666668, + }, + }, + { + id: 'America/Dawson', + aliases: [], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'MST - Yukon (west)', + latitude: 64.06666666666666, + longitude: -139.41666666666666, + }, + }, + { + id: 'America/Dawson_Creek', + aliases: [], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'MST - BC (Dawson Cr, Ft St John)', + latitude: 55.766666666666666, + longitude: -120.23333333333333, + }, + }, + { + id: 'America/Denver', + aliases: ['America/Shiprock', 'MST7MDT', 'Navajo', 'US/Mountain'], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Mountain (most areas)', + latitude: 39.73916666666667, + longitude: -104.98416666666667, + }, + }, + { + id: 'America/Detroit', + aliases: ['US/Michigan'], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Eastern - MI (most areas)', + latitude: 42.33138888888889, + longitude: -83.04583333333333, + }, + }, + { + id: 'America/Edmonton', + aliases: ['America/Yellowknife', 'Canada/Mountain'], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'Mountain - AB, BC(E), NT(E), SK(W)', + latitude: 53.55, + longitude: -113.46666666666667, + }, + }, + { + id: 'America/Eirunepe', + aliases: [], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Amazonas (west)', + latitude: -6.666666666666667, + longitude: -69.86666666666666, + }, + }, + { + id: 'America/El_Salvador', + aliases: [], + location: { + countryCode: 'SV', + countryName: 'El Salvador', + comment: '', + latitude: 13.7, + longitude: -89.2, + }, + }, + { + id: 'America/Fort_Nelson', + aliases: [], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'MST - BC (Ft Nelson)', + latitude: 58.8, + longitude: -122.7, + }, + }, + { + id: 'America/Fortaleza', + aliases: [], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Brazil (northeast: MA, PI, CE, RN, PB)', + latitude: -3.716666666666667, + longitude: -38.5, + }, + }, + { + id: 'America/Glace_Bay', + aliases: [], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'Atlantic - NS (Cape Breton)', + latitude: 46.2, + longitude: -59.95, + }, + }, + { + id: 'America/Goose_Bay', + aliases: [], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'Atlantic - Labrador (most areas)', + latitude: 53.333333333333336, + longitude: -60.416666666666664, + }, + }, + { + id: 'America/Grand_Turk', + aliases: [], + location: { + countryCode: 'TC', + countryName: 'Turks \u0026 Caicos Is', + comment: '', + latitude: 21.466666666666665, + longitude: -71.13333333333334, + }, + }, + { + id: 'America/Guatemala', + aliases: [], + location: { + countryCode: 'GT', + countryName: 'Guatemala', + comment: '', + latitude: 14.633333333333333, + longitude: -90.51666666666667, + }, + }, + { + id: 'America/Guayaquil', + aliases: [], + location: { + countryCode: 'EC', + countryName: 'Ecuador', + comment: 'Ecuador (mainland)', + latitude: -2.1666666666666665, + longitude: -79.83333333333333, + }, + }, + { + id: 'America/Guyana', + aliases: [], + location: { + countryCode: 'GY', + countryName: 'Guyana', + comment: '', + latitude: 6.8, + longitude: -58.166666666666664, + }, + }, + { + id: 'America/Halifax', + aliases: ['Canada/Atlantic'], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'Atlantic - NS (most areas), PE', + latitude: 44.65, + longitude: -63.6, + }, + }, + { + id: 'America/Havana', + aliases: ['Cuba'], + location: { + countryCode: 'CU', + countryName: 'Cuba', + comment: '', + latitude: 23.133333333333333, + longitude: -82.36666666666666, + }, + }, + { + id: 'America/Hermosillo', + aliases: [], + location: { + countryCode: 'MX', + countryName: 'Mexico', + comment: 'Sonora', + latitude: 29.066666666666666, + longitude: -110.96666666666667, + }, + }, + { + id: 'America/Indiana/Indianapolis', + aliases: [ + 'America/Fort_Wayne', + 'America/Indianapolis', + 'US/East-Indiana', + ], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Eastern - IN (most areas)', + latitude: 39.76833333333333, + longitude: -86.15805555555555, + }, + }, + { + id: 'America/Indiana/Knox', + aliases: ['America/Knox_IN', 'US/Indiana-Starke'], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Central - IN (Starke)', + latitude: 41.295833333333334, + longitude: -86.625, + }, + }, + { + id: 'America/Indiana/Marengo', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Eastern - IN (Crawford)', + latitude: 38.37555555555556, + longitude: -86.34472222222222, + }, + }, + { + id: 'America/Indiana/Petersburg', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Eastern - IN (Pike)', + latitude: 38.49194444444444, + longitude: -87.2786111111111, + }, + }, + { + id: 'America/Indiana/Tell_City', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Central - IN (Perry)', + latitude: 37.95305555555556, + longitude: -86.76138888888889, + }, + }, + { + id: 'America/Indiana/Vevay', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Eastern - IN (Switzerland)', + latitude: 38.74777777777778, + longitude: -85.06722222222223, + }, + }, + { + id: 'America/Indiana/Vincennes', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Eastern - IN (Da, Du, K, Mn)', + latitude: 38.67722222222222, + longitude: -87.5286111111111, + }, + }, + { + id: 'America/Indiana/Winamac', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Eastern - IN (Pulaski)', + latitude: 41.05138888888889, + longitude: -86.60305555555556, + }, + }, + { + id: 'America/Inuvik', + aliases: [], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'Mountain - NT (west)', + latitude: 68.34972222222223, + longitude: -133.71666666666667, + }, + }, + { + id: 'America/Iqaluit', + aliases: ['America/Pangnirtung'], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'Eastern - NU (most areas)', + latitude: 63.733333333333334, + longitude: -68.46666666666667, + }, + }, + { + id: 'America/Jamaica', + aliases: ['Jamaica'], + location: { + countryCode: 'JM', + countryName: 'Jamaica', + comment: '', + latitude: 17.968055555555555, + longitude: -76.79333333333334, + }, + }, + { + id: 'America/Juneau', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Alaska - Juneau area', + latitude: 58.301944444444445, + longitude: -134.41972222222222, + }, + }, + { + id: 'America/Kentucky/Louisville', + aliases: ['America/Louisville'], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Eastern - KY (Louisville area)', + latitude: 38.25416666666667, + longitude: -85.75944444444444, + }, + }, + { + id: 'America/Kentucky/Monticello', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Eastern - KY (Wayne)', + latitude: 36.82972222222222, + longitude: -84.84916666666666, + }, + }, + { + id: 'America/La_Paz', + aliases: [], + location: { + countryCode: 'BO', + countryName: 'Bolivia', + comment: '', + latitude: -16.5, + longitude: -68.15, + }, + }, + { + id: 'America/Lima', + aliases: [], + location: { + countryCode: 'PE', + countryName: 'Peru', + comment: '', + latitude: -12.05, + longitude: -77.05, + }, + }, + { + id: 'America/Los_Angeles', + aliases: ['PST8PDT', 'US/Pacific'], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Pacific', + latitude: 34.05222222222222, + longitude: -118.24277777777777, + }, + }, + { + id: 'America/Maceio', + aliases: [], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Alagoas, Sergipe', + latitude: -9.666666666666666, + longitude: -35.71666666666667, + }, + }, + { + id: 'America/Managua', + aliases: [], + location: { + countryCode: 'NI', + countryName: 'Nicaragua', + comment: '', + latitude: 12.15, + longitude: -86.28333333333333, + }, + }, + { + id: 'America/Manaus', + aliases: ['Brazil/West'], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Amazonas (east)', + latitude: -3.1333333333333333, + longitude: -60.016666666666666, + }, + }, + { + id: 'America/Martinique', + aliases: [], + location: { + countryCode: 'MQ', + countryName: 'Martinique', + comment: '', + latitude: 14.6, + longitude: -61.083333333333336, + }, + }, + { + id: 'America/Matamoros', + aliases: [], + location: { + countryCode: 'MX', + countryName: 'Mexico', + comment: 'Coahuila, Nuevo Leon, Tamaulipas (US border)', + latitude: 25.833333333333332, + longitude: -97.5, + }, + }, + { + id: 'America/Mazatlan', + aliases: ['Mexico/BajaSur'], + location: { + countryCode: 'MX', + countryName: 'Mexico', + comment: 'Baja California Sur, Nayarit (most areas), Sinaloa', + latitude: 23.216666666666665, + longitude: -106.41666666666667, + }, + }, + { + id: 'America/Menominee', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Central - MI (Wisconsin border)', + latitude: 45.10777777777778, + longitude: -87.61416666666666, + }, + }, + { + id: 'America/Merida', + aliases: [], + location: { + countryCode: 'MX', + countryName: 'Mexico', + comment: 'Campeche, Yucatan', + latitude: 20.966666666666665, + longitude: -89.61666666666666, + }, + }, + { + id: 'America/Metlakatla', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Alaska - Annette Island', + latitude: 55.12694444444445, + longitude: -131.57638888888889, + }, + }, + { + id: 'America/Mexico_City', + aliases: ['Mexico/General'], + location: { + countryCode: 'MX', + countryName: 'Mexico', + comment: 'Central Mexico', + latitude: 19.4, + longitude: -99.15, + }, + }, + { + id: 'America/Miquelon', + aliases: [], + location: { + countryCode: 'PM', + countryName: 'St Pierre \u0026 Miquelon', + comment: '', + latitude: 47.05, + longitude: -56.333333333333336, + }, + }, + { + id: 'America/Moncton', + aliases: [], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'Atlantic - New Brunswick', + latitude: 46.1, + longitude: -64.78333333333333, + }, + }, + { + id: 'America/Monterrey', + aliases: [], + location: { + countryCode: 'MX', + countryName: 'Mexico', + comment: 'Durango; Coahuila, Nuevo Leon, Tamaulipas (most areas)', + latitude: 25.666666666666668, + longitude: -100.31666666666666, + }, + }, + { + id: 'America/Montevideo', + aliases: [], + location: { + countryCode: 'UY', + countryName: 'Uruguay', + comment: '', + latitude: -34.909166666666664, + longitude: -56.2125, + }, + }, + { + id: 'America/New_York', + aliases: ['EST5EDT', 'US/Eastern'], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Eastern (most areas)', + latitude: 40.714166666666664, + longitude: -74.00638888888889, + }, + }, + { + id: 'America/Nome', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Alaska (west)', + latitude: 64.50111111111111, + longitude: -165.4063888888889, + }, + }, + { + id: 'America/Noronha', + aliases: ['Brazil/DeNoronha'], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Atlantic islands', + latitude: -3.85, + longitude: -32.416666666666664, + }, + }, + { + id: 'America/North_Dakota/Beulah', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Central - ND (Mercer)', + latitude: 47.26416666666667, + longitude: -101.77777777777777, + }, + }, + { + id: 'America/North_Dakota/Center', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Central - ND (Oliver)', + latitude: 47.11638888888889, + longitude: -101.29916666666666, + }, + }, + { + id: 'America/North_Dakota/New_Salem', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Central - ND (Morton rural)', + latitude: 46.845, + longitude: -101.41083333333333, + }, + }, + { + id: 'America/Nuuk', + aliases: ['America/Godthab'], + location: { + countryCode: 'GL', + countryName: 'Greenland', + comment: 'most of Greenland', + latitude: 64.18333333333334, + longitude: -51.733333333333334, + }, + }, + { + id: 'America/Ojinaga', + aliases: [], + location: { + countryCode: 'MX', + countryName: 'Mexico', + comment: 'Chihuahua (US border - east)', + latitude: 29.566666666666666, + longitude: -104.41666666666667, + }, + }, + { + id: 'America/Panama', + aliases: [ + 'America/Atikokan', + 'America/Cayman', + 'America/Coral_Harbour', + 'EST', + ], + location: { + countryCode: 'PA', + countryName: 'Panama', + comment: '', + latitude: 8.966666666666667, + longitude: -79.53333333333333, + }, + }, + { + id: 'America/Paramaribo', + aliases: [], + location: { + countryCode: 'SR', + countryName: 'Suriname', + comment: '', + latitude: 5.833333333333333, + longitude: -55.166666666666664, + }, + }, + { + id: 'America/Phoenix', + aliases: ['America/Creston', 'MST', 'US/Arizona'], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'MST - AZ (except Navajo)', + latitude: 33.44833333333333, + longitude: -112.07333333333334, + }, + }, + { + id: 'America/Port-au-Prince', + aliases: [], + location: { + countryCode: 'HT', + countryName: 'Haiti', + comment: '', + latitude: 18.533333333333335, + longitude: -72.33333333333333, + }, + }, + { + id: 'America/Porto_Velho', + aliases: [], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Rondonia', + latitude: -8.766666666666667, + longitude: -63.9, + }, + }, + { + id: 'America/Puerto_Rico', + aliases: [ + 'America/Anguilla', + 'America/Antigua', + 'America/Aruba', + 'America/Blanc-Sablon', + 'America/Curacao', + 'America/Dominica', + 'America/Grenada', + 'America/Guadeloupe', + 'America/Kralendijk', + 'America/Lower_Princes', + 'America/Marigot', + 'America/Montserrat', + 'America/Port_of_Spain', + 'America/St_Barthelemy', + 'America/St_Kitts', + 'America/St_Lucia', + 'America/St_Thomas', + 'America/St_Vincent', + 'America/Tortola', + 'America/Virgin', + ], + location: { + countryCode: 'PR', + countryName: 'Puerto Rico', + comment: '', + latitude: 18.468333333333334, + longitude: -66.1061111111111, + }, + }, + { + id: 'America/Punta_Arenas', + aliases: [], + location: { + countryCode: 'CL', + countryName: 'Chile', + comment: 'Magallanes Region', + latitude: -53.15, + longitude: -70.91666666666667, + }, + }, + { + id: 'America/Rankin_Inlet', + aliases: [], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'Central - NU (central)', + latitude: 62.81666666666667, + longitude: -92.08305555555556, + }, + }, + { + id: 'America/Recife', + aliases: [], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Pernambuco', + latitude: -8.05, + longitude: -34.9, + }, + }, + { + id: 'America/Regina', + aliases: ['Canada/Saskatchewan'], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'CST - SK (most areas)', + latitude: 50.4, + longitude: -104.65, + }, + }, + { + id: 'America/Resolute', + aliases: [], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'Central - NU (Resolute)', + latitude: 74.69555555555556, + longitude: -94.82916666666667, + }, + }, + { + id: 'America/Rio_Branco', + aliases: ['America/Porto_Acre', 'Brazil/Acre'], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Acre', + latitude: -9.966666666666667, + longitude: -67.8, + }, + }, + { + id: 'America/Santarem', + aliases: [], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Para (west)', + latitude: -2.433333333333333, + longitude: -54.86666666666667, + }, + }, + { + id: 'America/Santiago', + aliases: ['Chile/Continental'], + location: { + countryCode: 'CL', + countryName: 'Chile', + comment: 'most of Chile', + latitude: -33.45, + longitude: -70.66666666666667, + }, + }, + { + id: 'America/Santo_Domingo', + aliases: [], + location: { + countryCode: 'DO', + countryName: 'Dominican Republic', + comment: '', + latitude: 18.466666666666665, + longitude: -69.9, + }, + }, + { + id: 'America/Sao_Paulo', + aliases: ['Brazil/East'], + location: { + countryCode: 'BR', + countryName: 'Brazil', + comment: 'Brazil (southeast: GO, DF, MG, ES, RJ, SP, PR, SC, RS)', + latitude: -23.533333333333335, + longitude: -46.61666666666667, + }, + }, + { + id: 'America/Scoresbysund', + aliases: [], + location: { + countryCode: 'GL', + countryName: 'Greenland', + comment: 'Scoresbysund/Ittoqqortoormiit', + latitude: 70.48333333333333, + longitude: -21.966666666666665, + }, + }, + { + id: 'America/Sitka', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Alaska - Sitka area', + latitude: 57.17638888888889, + longitude: -135.30194444444444, + }, + }, + { + id: 'America/St_Johns', + aliases: ['Canada/Newfoundland'], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'Newfoundland, Labrador (SE)', + latitude: 47.56666666666667, + longitude: -52.71666666666667, + }, + }, + { + id: 'America/Swift_Current', + aliases: [], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'CST - SK (midwest)', + latitude: 50.28333333333333, + longitude: -107.83333333333333, + }, + }, + { + id: 'America/Tegucigalpa', + aliases: [], + location: { + countryCode: 'HN', + countryName: 'Honduras', + comment: '', + latitude: 14.1, + longitude: -87.21666666666667, + }, + }, + { + id: 'America/Thule', + aliases: [], + location: { + countryCode: 'GL', + countryName: 'Greenland', + comment: 'Thule/Pituffik', + latitude: 76.56666666666666, + longitude: -68.78333333333333, + }, + }, + { + id: 'America/Tijuana', + aliases: ['America/Ensenada', 'America/Santa_Isabel', 'Mexico/BajaNorte'], + location: { + countryCode: 'MX', + countryName: 'Mexico', + comment: 'Baja California', + latitude: 32.53333333333333, + longitude: -117.01666666666667, + }, + }, + { + id: 'America/Toronto', + aliases: [ + 'America/Montreal', + 'America/Nassau', + 'America/Nipigon', + 'America/Thunder_Bay', + 'Canada/Eastern', + ], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'Eastern - ON \u0026 QC (most areas)', + latitude: 43.65, + longitude: -79.38333333333334, + }, + }, + { + id: 'America/Vancouver', + aliases: ['Canada/Pacific'], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'Pacific - BC (most areas)', + latitude: 49.266666666666666, + longitude: -123.11666666666666, + }, + }, + { + id: 'America/Whitehorse', + aliases: ['Canada/Yukon'], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'MST - Yukon (east)', + latitude: 60.71666666666667, + longitude: -135.05, + }, + }, + { + id: 'America/Winnipeg', + aliases: ['America/Rainy_River', 'Canada/Central'], + location: { + countryCode: 'CA', + countryName: 'Canada', + comment: 'Central - ON (west), Manitoba', + latitude: 49.88333333333333, + longitude: -97.15, + }, + }, + { + id: 'America/Yakutat', + aliases: [], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Alaska - Yakutat', + latitude: 59.54694444444444, + longitude: -139.72722222222222, + }, + }, + { + id: 'Antarctica/Casey', + aliases: [], + location: { + countryCode: 'AQ', + countryName: 'Antarctica', + comment: 'Casey', + latitude: -66.28333333333333, + longitude: 110.51666666666667, + }, + }, + { + id: 'Antarctica/Davis', + aliases: [], + location: { + countryCode: 'AQ', + countryName: 'Antarctica', + comment: 'Davis', + latitude: -68.58333333333333, + longitude: 77.96666666666667, + }, + }, + { + id: 'Antarctica/Macquarie', + aliases: [], + location: { + countryCode: 'AU', + countryName: 'Australia', + comment: 'Macquarie Island', + latitude: -54.5, + longitude: 158.95, + }, + }, + { + id: 'Antarctica/Mawson', + aliases: [], + location: { + countryCode: 'AQ', + countryName: 'Antarctica', + comment: 'Mawson', + latitude: -67.6, + longitude: 62.88333333333333, + }, + }, + { + id: 'Antarctica/Palmer', + aliases: [], + location: { + countryCode: 'AQ', + countryName: 'Antarctica', + comment: 'Palmer', + latitude: -64.8, + longitude: -64.1, + }, + }, + { + id: 'Antarctica/Rothera', + aliases: [], + location: { + countryCode: 'AQ', + countryName: 'Antarctica', + comment: 'Rothera', + latitude: -67.56666666666666, + longitude: -68.13333333333334, + }, + }, + { + id: 'Antarctica/Troll', + aliases: [], + location: { + countryCode: 'AQ', + countryName: 'Antarctica', + comment: 'Troll', + latitude: -72.01138888888889, + longitude: 2.535, + }, + }, + { + id: 'Antarctica/Vostok', + aliases: [], + location: { + countryCode: 'AQ', + countryName: 'Antarctica', + comment: 'Vostok', + latitude: -78.4, + longitude: 106.9, + }, + }, + { + id: 'Asia/Almaty', + aliases: [], + location: { + countryCode: 'KZ', + countryName: 'Kazakhstan', + comment: 'most of Kazakhstan', + latitude: 43.25, + longitude: 76.95, + }, + }, + { + id: 'Asia/Amman', + aliases: [], + location: { + countryCode: 'JO', + countryName: 'Jordan', + comment: '', + latitude: 31.95, + longitude: 35.93333333333333, + }, + }, + { + id: 'Asia/Anadyr', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B09 - Bering Sea', + latitude: 64.75, + longitude: 177.48333333333332, + }, + }, + { + id: 'Asia/Aqtau', + aliases: [], + location: { + countryCode: 'KZ', + countryName: 'Kazakhstan', + comment: 'Mangghystau/Mankistau', + latitude: 44.516666666666666, + longitude: 50.266666666666666, + }, + }, + { + id: 'Asia/Aqtobe', + aliases: [], + location: { + countryCode: 'KZ', + countryName: 'Kazakhstan', + comment: 'Aqtobe/Aktobe', + latitude: 50.28333333333333, + longitude: 57.166666666666664, + }, + }, + { + id: 'Asia/Ashgabat', + aliases: ['Asia/Ashkhabad'], + location: { + countryCode: 'TM', + countryName: 'Turkmenistan', + comment: '', + latitude: 37.95, + longitude: 58.38333333333333, + }, + }, + { + id: 'Asia/Atyrau', + aliases: [], + location: { + countryCode: 'KZ', + countryName: 'Kazakhstan', + comment: 'Atyrau/Atirau/Gur\u0027yev', + latitude: 47.11666666666667, + longitude: 51.93333333333333, + }, + }, + { + id: 'Asia/Baghdad', + aliases: [], + location: { + countryCode: 'IQ', + countryName: 'Iraq', + comment: '', + latitude: 33.35, + longitude: 44.416666666666664, + }, + }, + { + id: 'Asia/Baku', + aliases: [], + location: { + countryCode: 'AZ', + countryName: 'Azerbaijan', + comment: '', + latitude: 40.38333333333333, + longitude: 49.85, + }, + }, + { + id: 'Asia/Bangkok', + aliases: ['Asia/Phnom_Penh', 'Asia/Vientiane', 'Indian/Christmas'], + location: { + countryCode: 'TH', + countryName: 'Thailand', + comment: '', + latitude: 13.75, + longitude: 100.51666666666667, + }, + }, + { + id: 'Asia/Barnaul', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B04 - Altai', + latitude: 53.36666666666667, + longitude: 83.75, + }, + }, + { + id: 'Asia/Beirut', + aliases: [], + location: { + countryCode: 'LB', + countryName: 'Lebanon', + comment: '', + latitude: 33.88333333333333, + longitude: 35.5, + }, + }, + { + id: 'Asia/Bishkek', + aliases: [], + location: { + countryCode: 'KG', + countryName: 'Kyrgyzstan', + comment: '', + latitude: 42.9, + longitude: 74.6, + }, + }, + { + id: 'Asia/Chita', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B06 - Zabaykalsky', + latitude: 52.05, + longitude: 113.46666666666667, + }, + }, + { + id: 'Asia/Colombo', + aliases: [], + location: { + countryCode: 'LK', + countryName: 'Sri Lanka', + comment: '', + latitude: 6.933333333333334, + longitude: 79.85, + }, + }, + { + id: 'Asia/Damascus', + aliases: [], + location: { + countryCode: 'SY', + countryName: 'Syria', + comment: '', + latitude: 33.5, + longitude: 36.3, + }, + }, + { + id: 'Asia/Dhaka', + aliases: ['Asia/Dacca'], + location: { + countryCode: 'BD', + countryName: 'Bangladesh', + comment: '', + latitude: 23.716666666666665, + longitude: 90.41666666666667, + }, + }, + { + id: 'Asia/Dili', + aliases: [], + location: { + countryCode: 'TL', + countryName: 'East Timor', + comment: '', + latitude: -8.55, + longitude: 125.58333333333333, + }, + }, + { + id: 'Asia/Dubai', + aliases: ['Asia/Muscat', 'Indian/Mahe', 'Indian/Reunion'], + location: { + countryCode: 'AE', + countryName: 'United Arab Emirates', + comment: '', + latitude: 25.3, + longitude: 55.3, + }, + }, + { + id: 'Asia/Dushanbe', + aliases: [], + location: { + countryCode: 'TJ', + countryName: 'Tajikistan', + comment: '', + latitude: 38.583333333333336, + longitude: 68.8, + }, + }, + { + id: 'Asia/Famagusta', + aliases: [], + location: { + countryCode: 'CY', + countryName: 'Cyprus', + comment: 'Northern Cyprus', + latitude: 35.11666666666667, + longitude: 33.95, + }, + }, + { + id: 'Asia/Gaza', + aliases: [], + location: { + countryCode: 'PS', + countryName: 'Palestine', + comment: 'Gaza Strip', + latitude: 31.5, + longitude: 34.46666666666667, + }, + }, + { + id: 'Asia/Hebron', + aliases: [], + location: { + countryCode: 'PS', + countryName: 'Palestine', + comment: 'West Bank', + latitude: 31.533333333333335, + longitude: 35.095, + }, + }, + { + id: 'Asia/Ho_Chi_Minh', + aliases: ['Asia/Saigon'], + location: { + countryCode: 'VN', + countryName: 'Vietnam', + comment: '', + latitude: 10.75, + longitude: 106.66666666666667, + }, + }, + { + id: 'Asia/Hong_Kong', + aliases: ['Hongkong'], + location: { + countryCode: 'HK', + countryName: 'Hong Kong', + comment: '', + latitude: 22.283333333333335, + longitude: 114.15, + }, + }, + { + id: 'Asia/Hovd', + aliases: [], + location: { + countryCode: 'MN', + countryName: 'Mongolia', + comment: 'Bayan-Olgii, Hovd, Uvs', + latitude: 48.016666666666666, + longitude: 91.65, + }, + }, + { + id: 'Asia/Irkutsk', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B05 - Irkutsk, Buryatia', + latitude: 52.266666666666666, + longitude: 104.33333333333333, + }, + }, + { + id: 'Asia/Jakarta', + aliases: [], + location: { + countryCode: 'ID', + countryName: 'Indonesia', + comment: 'Java, Sumatra', + latitude: -6.166666666666667, + longitude: 106.8, + }, + }, + { + id: 'Asia/Jayapura', + aliases: [], + location: { + countryCode: 'ID', + countryName: 'Indonesia', + comment: 'New Guinea (West Papua / Irian Jaya), Malukus/Moluccas', + latitude: -2.533333333333333, + longitude: 140.7, + }, + }, + { + id: 'Asia/Jerusalem', + aliases: ['Asia/Tel_Aviv', 'Israel'], + location: { + countryCode: 'IL', + countryName: 'Israel', + comment: '', + latitude: 31.780555555555555, + longitude: 35.22388888888889, + }, + }, + { + id: 'Asia/Kabul', + aliases: [], + location: { + countryCode: 'AF', + countryName: 'Afghanistan', + comment: '', + latitude: 34.516666666666666, + longitude: 69.2, + }, + }, + { + id: 'Asia/Kamchatka', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B09 - Kamchatka', + latitude: 53.016666666666666, + longitude: 158.65, + }, + }, + { + id: 'Asia/Karachi', + aliases: [], + location: { + countryCode: 'PK', + countryName: 'Pakistan', + comment: '', + latitude: 24.866666666666667, + longitude: 67.05, + }, + }, + { + id: 'Asia/Kathmandu', + aliases: ['Asia/Katmandu'], + location: { + countryCode: 'NP', + countryName: 'Nepal', + comment: '', + latitude: 27.716666666666665, + longitude: 85.31666666666666, + }, + }, + { + id: 'Asia/Khandyga', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B06 - Tomponsky, Ust-Maysky', + latitude: 62.65638888888889, + longitude: 135.55388888888888, + }, + }, + { + id: 'Asia/Kolkata', + aliases: ['Asia/Calcutta'], + location: { + countryCode: 'IN', + countryName: 'India', + comment: '', + latitude: 22.533333333333335, + longitude: 88.36666666666666, + }, + }, + { + id: 'Asia/Krasnoyarsk', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B04 - Krasnoyarsk area', + latitude: 56.016666666666666, + longitude: 92.83333333333333, + }, + }, + { + id: 'Asia/Kuching', + aliases: ['Asia/Brunei'], + location: { + countryCode: 'MY', + countryName: 'Malaysia', + comment: 'Sabah, Sarawak', + latitude: 1.55, + longitude: 110.33333333333333, + }, + }, + { + id: 'Asia/Macau', + aliases: ['Asia/Macao'], + location: { + countryCode: 'MO', + countryName: 'Macau', + comment: '', + latitude: 22.197222222222223, + longitude: 113.54166666666667, + }, + }, + { + id: 'Asia/Magadan', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B08 - Magadan', + latitude: 59.56666666666667, + longitude: 150.8, + }, + }, + { + id: 'Asia/Makassar', + aliases: ['Asia/Ujung_Pandang'], + location: { + countryCode: 'ID', + countryName: 'Indonesia', + comment: + 'Borneo (east, south), Sulawesi/Celebes, Bali, Nusa Tengarra, Timor (west)', + latitude: -5.116666666666666, + longitude: 119.4, + }, + }, + { + id: 'Asia/Manila', + aliases: [], + location: { + countryCode: 'PH', + countryName: 'Philippines', + comment: '', + latitude: 14.586666666666666, + longitude: 120.96777777777778, + }, + }, + { + id: 'Asia/Nicosia', + aliases: ['Europe/Nicosia'], + location: { + countryCode: 'CY', + countryName: 'Cyprus', + comment: 'most of Cyprus', + latitude: 35.166666666666664, + longitude: 33.36666666666667, + }, + }, + { + id: 'Asia/Novokuznetsk', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B04 - Kemerovo', + latitude: 53.75, + longitude: 87.11666666666666, + }, + }, + { + id: 'Asia/Novosibirsk', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B04 - Novosibirsk', + latitude: 55.03333333333333, + longitude: 82.91666666666667, + }, + }, + { + id: 'Asia/Omsk', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B03 - Omsk', + latitude: 55, + longitude: 73.4, + }, + }, + { + id: 'Asia/Oral', + aliases: [], + location: { + countryCode: 'KZ', + countryName: 'Kazakhstan', + comment: 'West Kazakhstan', + latitude: 51.21666666666667, + longitude: 51.35, + }, + }, + { + id: 'Asia/Pontianak', + aliases: [], + location: { + countryCode: 'ID', + countryName: 'Indonesia', + comment: 'Borneo (west, central)', + latitude: -0.03333333333333333, + longitude: 109.33333333333333, + }, + }, + { + id: 'Asia/Pyongyang', + aliases: [], + location: { + countryCode: 'KP', + countryName: 'Korea (North)', + comment: '', + latitude: 39.016666666666666, + longitude: 125.75, + }, + }, + { + id: 'Asia/Qatar', + aliases: ['Asia/Bahrain'], + location: { + countryCode: 'QA', + countryName: 'Qatar', + comment: '', + latitude: 25.283333333333335, + longitude: 51.53333333333333, + }, + }, + { + id: 'Asia/Qostanay', + aliases: [], + location: { + countryCode: 'KZ', + countryName: 'Kazakhstan', + comment: 'Qostanay/Kostanay/Kustanay', + latitude: 53.2, + longitude: 63.61666666666667, + }, + }, + { + id: 'Asia/Qyzylorda', + aliases: [], + location: { + countryCode: 'KZ', + countryName: 'Kazakhstan', + comment: 'Qyzylorda/Kyzylorda/Kzyl-Orda', + latitude: 44.8, + longitude: 65.46666666666667, + }, + }, + { + id: 'Asia/Riyadh', + aliases: ['Antarctica/Syowa', 'Asia/Aden', 'Asia/Kuwait'], + location: { + countryCode: 'SA', + countryName: 'Saudi Arabia', + comment: '', + latitude: 24.633333333333333, + longitude: 46.71666666666667, + }, + }, + { + id: 'Asia/Sakhalin', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B08 - Sakhalin Island', + latitude: 46.96666666666667, + longitude: 142.7, + }, + }, + { + id: 'Asia/Samarkand', + aliases: [], + location: { + countryCode: 'UZ', + countryName: 'Uzbekistan', + comment: 'Uzbekistan (west)', + latitude: 39.666666666666664, + longitude: 66.8, + }, + }, + { + id: 'Asia/Seoul', + aliases: ['ROK'], + location: { + countryCode: 'KR', + countryName: 'Korea (South)', + comment: '', + latitude: 37.55, + longitude: 126.96666666666667, + }, + }, + { + id: 'Asia/Shanghai', + aliases: ['Asia/Chongqing', 'Asia/Chungking', 'Asia/Harbin', 'PRC'], + location: { + countryCode: 'CN', + countryName: 'China', + comment: 'Beijing Time', + latitude: 31.233333333333334, + longitude: 121.46666666666667, + }, + }, + { + id: 'Asia/Singapore', + aliases: ['Asia/Kuala_Lumpur', 'Singapore'], + location: { + countryCode: 'SG', + countryName: 'Singapore', + comment: '', + latitude: 1.2833333333333334, + longitude: 103.85, + }, + }, + { + id: 'Asia/Srednekolymsk', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B08 - Sakha (E), N Kuril Is', + latitude: 67.46666666666667, + longitude: 153.71666666666667, + }, + }, + { + id: 'Asia/Taipei', + aliases: ['ROC'], + location: { + countryCode: 'TW', + countryName: 'Taiwan', + comment: '', + latitude: 25.05, + longitude: 121.5, + }, + }, + { + id: 'Asia/Tashkent', + aliases: [], + location: { + countryCode: 'UZ', + countryName: 'Uzbekistan', + comment: 'Uzbekistan (east)', + latitude: 41.333333333333336, + longitude: 69.3, + }, + }, + { + id: 'Asia/Tbilisi', + aliases: [], + location: { + countryCode: 'GE', + countryName: 'Georgia', + comment: '', + latitude: 41.71666666666667, + longitude: 44.81666666666667, + }, + }, + { + id: 'Asia/Tehran', + aliases: ['Iran'], + location: { + countryCode: 'IR', + countryName: 'Iran', + comment: '', + latitude: 35.666666666666664, + longitude: 51.43333333333333, + }, + }, + { + id: 'Asia/Thimphu', + aliases: ['Asia/Thimbu'], + location: { + countryCode: 'BT', + countryName: 'Bhutan', + comment: '', + latitude: 27.466666666666665, + longitude: 89.65, + }, + }, + { + id: 'Asia/Tokyo', + aliases: ['Japan'], + location: { + countryCode: 'JP', + countryName: 'Japan', + comment: '', + latitude: 35.654444444444444, + longitude: 139.7447222222222, + }, + }, + { + id: 'Asia/Tomsk', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B04 - Tomsk', + latitude: 56.5, + longitude: 84.96666666666667, + }, + }, + { + id: 'Asia/Ulaanbaatar', + aliases: ['Asia/Choibalsan', 'Asia/Ulan_Bator'], + location: { + countryCode: 'MN', + countryName: 'Mongolia', + comment: 'most of Mongolia', + latitude: 47.916666666666664, + longitude: 106.88333333333334, + }, + }, + { + id: 'Asia/Urumqi', + aliases: ['Asia/Kashgar'], + location: { + countryCode: 'CN', + countryName: 'China', + comment: 'Xinjiang Time', + latitude: 43.8, + longitude: 87.58333333333333, + }, + }, + { + id: 'Asia/Ust-Nera', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B07 - Oymyakonsky', + latitude: 64.56027777777778, + longitude: 143.22666666666666, + }, + }, + { + id: 'Asia/Vladivostok', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B07 - Amur River', + latitude: 43.166666666666664, + longitude: 131.93333333333334, + }, + }, + { + id: 'Asia/Yakutsk', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B06 - Lena River', + latitude: 62, + longitude: 129.66666666666666, + }, + }, + { + id: 'Asia/Yangon', + aliases: ['Asia/Rangoon', 'Indian/Cocos'], + location: { + countryCode: 'MM', + countryName: 'Myanmar (Burma)', + comment: '', + latitude: 16.783333333333335, + longitude: 96.16666666666667, + }, + }, + { + id: 'Asia/Yekaterinburg', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B02 - Urals', + latitude: 56.85, + longitude: 60.6, + }, + }, + { + id: 'Asia/Yerevan', + aliases: [], + location: { + countryCode: 'AM', + countryName: 'Armenia', + comment: '', + latitude: 40.18333333333333, + longitude: 44.5, + }, + }, + { + id: 'Atlantic/Azores', + aliases: [], + location: { + countryCode: 'PT', + countryName: 'Portugal', + comment: 'Azores', + latitude: 37.733333333333334, + longitude: -25.666666666666668, + }, + }, + { + id: 'Atlantic/Bermuda', + aliases: [], + location: { + countryCode: 'BM', + countryName: 'Bermuda', + comment: '', + latitude: 32.28333333333333, + longitude: -64.76666666666667, + }, + }, + { + id: 'Atlantic/Canary', + aliases: [], + location: { + countryCode: 'ES', + countryName: 'Spain', + comment: 'Canary Islands', + latitude: 28.1, + longitude: -15.4, + }, + }, + { + id: 'Atlantic/Cape_Verde', + aliases: [], + location: { + countryCode: 'CV', + countryName: 'Cape Verde', + comment: '', + latitude: 14.916666666666666, + longitude: -23.516666666666666, + }, + }, + { + id: 'Atlantic/Faroe', + aliases: ['Atlantic/Faeroe'], + location: { + countryCode: 'FO', + countryName: 'Faroe Islands', + comment: '', + latitude: 62.016666666666666, + longitude: -6.766666666666667, + }, + }, + { + id: 'Atlantic/Madeira', + aliases: [], + location: { + countryCode: 'PT', + countryName: 'Portugal', + comment: 'Madeira Islands', + latitude: 32.63333333333333, + longitude: -16.9, + }, + }, + { + id: 'Atlantic/South_Georgia', + aliases: [], + location: { + countryCode: 'GS', + countryName: 'South Georgia \u0026 the South Sandwich Islands', + comment: '', + latitude: -54.266666666666666, + longitude: -36.53333333333333, + }, + }, + { + id: 'Atlantic/Stanley', + aliases: [], + location: { + countryCode: 'FK', + countryName: 'Falkland Islands', + comment: '', + latitude: -51.7, + longitude: -57.85, + }, + }, + { + id: 'Australia/Adelaide', + aliases: ['Australia/South'], + location: { + countryCode: 'AU', + countryName: 'Australia', + comment: 'South Australia', + latitude: -34.916666666666664, + longitude: 138.58333333333334, + }, + }, + { + id: 'Australia/Brisbane', + aliases: ['Australia/Queensland'], + location: { + countryCode: 'AU', + countryName: 'Australia', + comment: 'Queensland (most areas)', + latitude: -27.466666666666665, + longitude: 153.03333333333333, + }, + }, + { + id: 'Australia/Broken_Hill', + aliases: ['Australia/Yancowinna'], + location: { + countryCode: 'AU', + countryName: 'Australia', + comment: 'New South Wales (Yancowinna)', + latitude: -31.95, + longitude: 141.45, + }, + }, + { + id: 'Australia/Darwin', + aliases: ['Australia/North'], + location: { + countryCode: 'AU', + countryName: 'Australia', + comment: 'Northern Territory', + latitude: -12.466666666666667, + longitude: 130.83333333333334, + }, + }, + { + id: 'Australia/Eucla', + aliases: [], + location: { + countryCode: 'AU', + countryName: 'Australia', + comment: 'Western Australia (Eucla)', + latitude: -31.716666666666665, + longitude: 128.86666666666667, + }, + }, + { + id: 'Australia/Hobart', + aliases: ['Australia/Currie', 'Australia/Tasmania'], + location: { + countryCode: 'AU', + countryName: 'Australia', + comment: 'Tasmania', + latitude: -42.88333333333333, + longitude: 147.31666666666666, + }, + }, + { + id: 'Australia/Lindeman', + aliases: [], + location: { + countryCode: 'AU', + countryName: 'Australia', + comment: 'Queensland (Whitsunday Islands)', + latitude: -20.266666666666666, + longitude: 149, + }, + }, + { + id: 'Australia/Lord_Howe', + aliases: ['Australia/LHI'], + location: { + countryCode: 'AU', + countryName: 'Australia', + comment: 'Lord Howe Island', + latitude: -31.55, + longitude: 159.08333333333334, + }, + }, + { + id: 'Australia/Melbourne', + aliases: ['Australia/Victoria'], + location: { + countryCode: 'AU', + countryName: 'Australia', + comment: 'Victoria', + latitude: -37.81666666666667, + longitude: 144.96666666666667, + }, + }, + { + id: 'Australia/Perth', + aliases: ['Australia/West'], + location: { + countryCode: 'AU', + countryName: 'Australia', + comment: 'Western Australia (most areas)', + latitude: -31.95, + longitude: 115.85, + }, + }, + { + id: 'Australia/Sydney', + aliases: ['Australia/ACT', 'Australia/Canberra', 'Australia/NSW'], + location: { + countryCode: 'AU', + countryName: 'Australia', + comment: 'New South Wales (most areas)', + latitude: -33.86666666666667, + longitude: 151.21666666666667, + }, + }, + { + id: 'Etc/GMT', + aliases: [ + 'Etc/GMT\u002B0', + 'Etc/GMT-0', + 'Etc/GMT0', + 'Etc/Greenwich', + 'GMT', + 'GMT\u002B0', + 'GMT-0', + 'GMT0', + 'Greenwich', + ], + location: null, + }, + { + id: 'Etc/GMT-1', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT-10', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT-11', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT-12', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT-13', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT-14', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT-2', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT-3', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT-4', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT-5', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT-6', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT-7', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT-8', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT-9', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT\u002B1', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT\u002B10', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT\u002B11', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT\u002B12', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT\u002B2', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT\u002B3', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT\u002B4', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT\u002B5', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT\u002B6', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT\u002B7', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT\u002B8', + aliases: [], + location: null, + }, + { + id: 'Etc/GMT\u002B9', + aliases: [], + location: null, + }, + { + id: 'Etc/UTC', + aliases: [ + 'Etc/UCT', + 'Etc/Universal', + 'Etc/Zulu', + 'UCT', + 'UTC', + 'Universal', + 'Zulu', + ], + location: null, + }, + { + id: 'Europe/Andorra', + aliases: [], + location: { + countryCode: 'AD', + countryName: 'Andorra', + comment: '', + latitude: 42.5, + longitude: 1.5166666666666666, + }, + }, + { + id: 'Europe/Astrakhan', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B01 - Astrakhan', + latitude: 46.35, + longitude: 48.05, + }, + }, + { + id: 'Europe/Athens', + aliases: ['EET'], + location: { + countryCode: 'GR', + countryName: 'Greece', + comment: '', + latitude: 37.96666666666667, + longitude: 23.716666666666665, + }, + }, + { + id: 'Europe/Belgrade', + aliases: [ + 'Europe/Ljubljana', + 'Europe/Podgorica', + 'Europe/Sarajevo', + 'Europe/Skopje', + 'Europe/Zagreb', + ], + location: { + countryCode: 'RS', + countryName: 'Serbia', + comment: '', + latitude: 44.833333333333336, + longitude: 20.5, + }, + }, + { + id: 'Europe/Berlin', + aliases: [ + 'Arctic/Longyearbyen', + 'Atlantic/Jan_Mayen', + 'Europe/Copenhagen', + 'Europe/Oslo', + 'Europe/Stockholm', + ], + location: { + countryCode: 'DE', + countryName: 'Germany', + comment: 'most of Germany', + latitude: 52.5, + longitude: 13.366666666666667, + }, + }, + { + id: 'Europe/Brussels', + aliases: ['CET', 'Europe/Amsterdam', 'Europe/Luxembourg', 'MET'], + location: { + countryCode: 'BE', + countryName: 'Belgium', + comment: '', + latitude: 50.833333333333336, + longitude: 4.333333333333333, + }, + }, + { + id: 'Europe/Bucharest', + aliases: [], + location: { + countryCode: 'RO', + countryName: 'Romania', + comment: '', + latitude: 44.43333333333333, + longitude: 26.1, + }, + }, + { + id: 'Europe/Budapest', + aliases: [], + location: { + countryCode: 'HU', + countryName: 'Hungary', + comment: '', + latitude: 47.5, + longitude: 19.083333333333332, + }, + }, + { + id: 'Europe/Chisinau', + aliases: ['Europe/Tiraspol'], + location: { + countryCode: 'MD', + countryName: 'Moldova', + comment: '', + latitude: 47, + longitude: 28.833333333333332, + }, + }, + { + id: 'Europe/Dublin', + aliases: ['Eire'], + location: { + countryCode: 'IE', + countryName: 'Ireland', + comment: '', + latitude: 53.333333333333336, + longitude: -6.25, + }, + }, + { + id: 'Europe/Gibraltar', + aliases: [], + location: { + countryCode: 'GI', + countryName: 'Gibraltar', + comment: '', + latitude: 36.13333333333333, + longitude: -5.35, + }, + }, + { + id: 'Europe/Helsinki', + aliases: ['Europe/Mariehamn'], + location: { + countryCode: 'FI', + countryName: 'Finland', + comment: '', + latitude: 60.166666666666664, + longitude: 24.966666666666665, + }, + }, + { + id: 'Europe/Istanbul', + aliases: ['Asia/Istanbul', 'Turkey'], + location: { + countryCode: 'TR', + countryName: 'Turkey', + comment: '', + latitude: 41.016666666666666, + longitude: 28.966666666666665, + }, + }, + { + id: 'Europe/Kaliningrad', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK-01 - Kaliningrad', + latitude: 54.71666666666667, + longitude: 20.5, + }, + }, + { + id: 'Europe/Kirov', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B00 - Kirov', + latitude: 58.6, + longitude: 49.65, + }, + }, + { + id: 'Europe/Kyiv', + aliases: ['Europe/Kiev', 'Europe/Uzhgorod', 'Europe/Zaporozhye'], + location: { + countryCode: 'UA', + countryName: 'Ukraine', + comment: 'most of Ukraine', + latitude: 50.43333333333333, + longitude: 30.516666666666666, + }, + }, + { + id: 'Europe/Lisbon', + aliases: ['Portugal', 'WET'], + location: { + countryCode: 'PT', + countryName: 'Portugal', + comment: 'Portugal (mainland)', + latitude: 38.71666666666667, + longitude: -9.133333333333333, + }, + }, + { + id: 'Europe/London', + aliases: [ + 'Europe/Belfast', + 'Europe/Guernsey', + 'Europe/Isle_of_Man', + 'Europe/Jersey', + 'GB', + 'GB-Eire', + ], + location: { + countryCode: 'GB', + countryName: 'Britain (UK)', + comment: '', + latitude: 51.50833333333333, + longitude: -0.12527777777777777, + }, + }, + { + id: 'Europe/Madrid', + aliases: [], + location: { + countryCode: 'ES', + countryName: 'Spain', + comment: 'Spain (mainland)', + latitude: 40.4, + longitude: -3.683333333333333, + }, + }, + { + id: 'Europe/Malta', + aliases: [], + location: { + countryCode: 'MT', + countryName: 'Malta', + comment: '', + latitude: 35.9, + longitude: 14.516666666666667, + }, + }, + { + id: 'Europe/Minsk', + aliases: [], + location: { + countryCode: 'BY', + countryName: 'Belarus', + comment: '', + latitude: 53.9, + longitude: 27.566666666666666, + }, + }, + { + id: 'Europe/Moscow', + aliases: ['W-SU'], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B00 - Moscow area', + latitude: 55.755833333333335, + longitude: 37.617777777777775, + }, + }, + { + id: 'Europe/Paris', + aliases: ['Europe/Monaco'], + location: { + countryCode: 'FR', + countryName: 'France', + comment: '', + latitude: 48.86666666666667, + longitude: 2.3333333333333335, + }, + }, + { + id: 'Europe/Prague', + aliases: ['Europe/Bratislava'], + location: { + countryCode: 'CZ', + countryName: 'Czech Republic', + comment: '', + latitude: 50.083333333333336, + longitude: 14.433333333333334, + }, + }, + { + id: 'Europe/Riga', + aliases: [], + location: { + countryCode: 'LV', + countryName: 'Latvia', + comment: '', + latitude: 56.95, + longitude: 24.1, + }, + }, + { + id: 'Europe/Rome', + aliases: ['Europe/San_Marino', 'Europe/Vatican'], + location: { + countryCode: 'IT', + countryName: 'Italy', + comment: '', + latitude: 41.9, + longitude: 12.483333333333333, + }, + }, + { + id: 'Europe/Samara', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B01 - Samara, Udmurtia', + latitude: 53.2, + longitude: 50.15, + }, + }, + { + id: 'Europe/Saratov', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B01 - Saratov', + latitude: 51.56666666666667, + longitude: 46.03333333333333, + }, + }, + { + id: 'Europe/Simferopol', + aliases: [], + location: { + countryCode: 'UA', + countryName: 'Ukraine', + comment: 'Crimea', + latitude: 44.95, + longitude: 34.1, + }, + }, + { + id: 'Europe/Sofia', + aliases: [], + location: { + countryCode: 'BG', + countryName: 'Bulgaria', + comment: '', + latitude: 42.68333333333333, + longitude: 23.316666666666666, + }, + }, + { + id: 'Europe/Tallinn', + aliases: [], + location: { + countryCode: 'EE', + countryName: 'Estonia', + comment: '', + latitude: 59.416666666666664, + longitude: 24.75, + }, + }, + { + id: 'Europe/Tirane', + aliases: [], + location: { + countryCode: 'AL', + countryName: 'Albania', + comment: '', + latitude: 41.333333333333336, + longitude: 19.833333333333332, + }, + }, + { + id: 'Europe/Ulyanovsk', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B01 - Ulyanovsk', + latitude: 54.333333333333336, + longitude: 48.4, + }, + }, + { + id: 'Europe/Vienna', + aliases: [], + location: { + countryCode: 'AT', + countryName: 'Austria', + comment: '', + latitude: 48.21666666666667, + longitude: 16.333333333333332, + }, + }, + { + id: 'Europe/Vilnius', + aliases: [], + location: { + countryCode: 'LT', + countryName: 'Lithuania', + comment: '', + latitude: 54.68333333333333, + longitude: 25.316666666666666, + }, + }, + { + id: 'Europe/Volgograd', + aliases: [], + location: { + countryCode: 'RU', + countryName: 'Russia', + comment: 'MSK\u002B00 - Volgograd', + latitude: 48.733333333333334, + longitude: 44.416666666666664, + }, + }, + { + id: 'Europe/Warsaw', + aliases: ['Poland'], + location: { + countryCode: 'PL', + countryName: 'Poland', + comment: '', + latitude: 52.25, + longitude: 21, + }, + }, + { + id: 'Europe/Zurich', + aliases: ['Europe/Busingen', 'Europe/Vaduz'], + location: { + countryCode: 'CH', + countryName: 'Switzerland', + comment: '', + latitude: 47.38333333333333, + longitude: 8.533333333333333, + }, + }, + { + id: 'Indian/Chagos', + aliases: [], + location: { + countryCode: 'IO', + countryName: 'British Indian Ocean Territory', + comment: '', + latitude: -7.333333333333333, + longitude: 72.41666666666667, + }, + }, + { + id: 'Indian/Maldives', + aliases: ['Indian/Kerguelen'], + location: { + countryCode: 'MV', + countryName: 'Maldives', + comment: '', + latitude: 4.166666666666667, + longitude: 73.5, + }, + }, + { + id: 'Indian/Mauritius', + aliases: [], + location: { + countryCode: 'MU', + countryName: 'Mauritius', + comment: '', + latitude: -20.166666666666668, + longitude: 57.5, + }, + }, + { + id: 'Pacific/Apia', + aliases: [], + location: { + countryCode: 'WS', + countryName: 'Samoa (western)', + comment: '', + latitude: -13.833333333333334, + longitude: -171.73333333333332, + }, + }, + { + id: 'Pacific/Auckland', + aliases: ['Antarctica/McMurdo', 'Antarctica/South_Pole', 'NZ'], + location: { + countryCode: 'NZ', + countryName: 'New Zealand', + comment: 'most of New Zealand', + latitude: -36.86666666666667, + longitude: 174.76666666666668, + }, + }, + { + id: 'Pacific/Bougainville', + aliases: [], + location: { + countryCode: 'PG', + countryName: 'Papua New Guinea', + comment: 'Bougainville', + latitude: -6.216666666666667, + longitude: 155.56666666666666, + }, + }, + { + id: 'Pacific/Chatham', + aliases: ['NZ-CHAT'], + location: { + countryCode: 'NZ', + countryName: 'New Zealand', + comment: 'Chatham Islands', + latitude: -43.95, + longitude: -176.55, + }, + }, + { + id: 'Pacific/Easter', + aliases: ['Chile/EasterIsland'], + location: { + countryCode: 'CL', + countryName: 'Chile', + comment: 'Easter Island', + latitude: -27.15, + longitude: -109.43333333333334, + }, + }, + { + id: 'Pacific/Efate', + aliases: [], + location: { + countryCode: 'VU', + countryName: 'Vanuatu', + comment: '', + latitude: -17.666666666666668, + longitude: 168.41666666666666, + }, + }, + { + id: 'Pacific/Fakaofo', + aliases: [], + location: { + countryCode: 'TK', + countryName: 'Tokelau', + comment: '', + latitude: -9.366666666666667, + longitude: -171.23333333333332, + }, + }, + { + id: 'Pacific/Fiji', + aliases: [], + location: { + countryCode: 'FJ', + countryName: 'Fiji', + comment: '', + latitude: -18.133333333333333, + longitude: 178.41666666666666, + }, + }, + { + id: 'Pacific/Galapagos', + aliases: [], + location: { + countryCode: 'EC', + countryName: 'Ecuador', + comment: 'Galapagos Islands', + latitude: -0.9, + longitude: -89.6, + }, + }, + { + id: 'Pacific/Gambier', + aliases: [], + location: { + countryCode: 'PF', + countryName: 'French Polynesia', + comment: 'Gambier Islands', + latitude: -23.133333333333333, + longitude: -134.95, + }, + }, + { + id: 'Pacific/Guadalcanal', + aliases: ['Pacific/Pohnpei', 'Pacific/Ponape'], + location: { + countryCode: 'SB', + countryName: 'Solomon Islands', + comment: '', + latitude: -9.533333333333333, + longitude: 160.2, + }, + }, + { + id: 'Pacific/Guam', + aliases: ['Pacific/Saipan'], + location: { + countryCode: 'GU', + countryName: 'Guam', + comment: '', + latitude: 13.466666666666667, + longitude: 144.75, + }, + }, + { + id: 'Pacific/Honolulu', + aliases: ['HST', 'Pacific/Johnston', 'US/Hawaii'], + location: { + countryCode: 'US', + countryName: 'United States', + comment: 'Hawaii', + latitude: 21.306944444444444, + longitude: -157.85833333333332, + }, + }, + { + id: 'Pacific/Kanton', + aliases: ['Pacific/Enderbury'], + location: { + countryCode: 'KI', + countryName: 'Kiribati', + comment: 'Phoenix Islands', + latitude: -2.783333333333333, + longitude: -171.71666666666667, + }, + }, + { + id: 'Pacific/Kiritimati', + aliases: [], + location: { + countryCode: 'KI', + countryName: 'Kiribati', + comment: 'Line Islands', + latitude: 1.8666666666666667, + longitude: -157.33333333333334, + }, + }, + { + id: 'Pacific/Kosrae', + aliases: [], + location: { + countryCode: 'FM', + countryName: 'Micronesia', + comment: 'Kosrae', + latitude: 5.316666666666666, + longitude: 162.98333333333332, + }, + }, + { + id: 'Pacific/Kwajalein', + aliases: ['Kwajalein'], + location: { + countryCode: 'MH', + countryName: 'Marshall Islands', + comment: 'Kwajalein', + latitude: 9.083333333333334, + longitude: 167.33333333333334, + }, + }, + { + id: 'Pacific/Marquesas', + aliases: [], + location: { + countryCode: 'PF', + countryName: 'French Polynesia', + comment: 'Marquesas Islands', + latitude: -9, + longitude: -139.5, + }, + }, + { + id: 'Pacific/Nauru', + aliases: [], + location: { + countryCode: 'NR', + countryName: 'Nauru', + comment: '', + latitude: -0.5166666666666667, + longitude: 166.91666666666666, + }, + }, + { + id: 'Pacific/Niue', + aliases: [], + location: { + countryCode: 'NU', + countryName: 'Niue', + comment: '', + latitude: -19.016666666666666, + longitude: -169.91666666666666, + }, + }, + { + id: 'Pacific/Norfolk', + aliases: [], + location: { + countryCode: 'NF', + countryName: 'Norfolk Island', + comment: '', + latitude: -29.05, + longitude: 167.96666666666667, + }, + }, + { + id: 'Pacific/Noumea', + aliases: [], + location: { + countryCode: 'NC', + countryName: 'New Caledonia', + comment: '', + latitude: -22.266666666666666, + longitude: 166.45, + }, + }, + { + id: 'Pacific/Pago_Pago', + aliases: ['Pacific/Midway', 'Pacific/Samoa', 'US/Samoa'], + location: { + countryCode: 'AS', + countryName: 'Samoa (American)', + comment: '', + latitude: -14.266666666666667, + longitude: -170.7, + }, + }, + { + id: 'Pacific/Palau', + aliases: [], + location: { + countryCode: 'PW', + countryName: 'Palau', + comment: '', + latitude: 7.333333333333333, + longitude: 134.48333333333332, + }, + }, + { + id: 'Pacific/Pitcairn', + aliases: [], + location: { + countryCode: 'PN', + countryName: 'Pitcairn', + comment: '', + latitude: -25.066666666666666, + longitude: -130.08333333333334, + }, + }, + { + id: 'Pacific/Port_Moresby', + aliases: [ + 'Antarctica/DumontDUrville', + 'Pacific/Chuuk', + 'Pacific/Truk', + 'Pacific/Yap', + ], + location: { + countryCode: 'PG', + countryName: 'Papua New Guinea', + comment: 'most of Papua New Guinea', + latitude: -9.5, + longitude: 147.16666666666666, + }, + }, + { + id: 'Pacific/Rarotonga', + aliases: [], + location: { + countryCode: 'CK', + countryName: 'Cook Islands', + comment: '', + latitude: -21.233333333333334, + longitude: -159.76666666666668, + }, + }, + { + id: 'Pacific/Tahiti', + aliases: [], + location: { + countryCode: 'PF', + countryName: 'French Polynesia', + comment: 'Society Islands', + latitude: -17.533333333333335, + longitude: -149.56666666666666, + }, + }, + { + id: 'Pacific/Tarawa', + aliases: [ + 'Pacific/Funafuti', + 'Pacific/Majuro', + 'Pacific/Wake', + 'Pacific/Wallis', + ], + location: { + countryCode: 'KI', + countryName: 'Kiribati', + comment: 'Gilbert Islands', + latitude: 1.4166666666666667, + longitude: 173, + }, + }, + { + id: 'Pacific/Tongatapu', + aliases: [], + location: { + countryCode: 'TO', + countryName: 'Tonga', + comment: '', + latitude: -21.133333333333333, + longitude: -175.2, + }, + }, + ], +} as const; + +type TimeZoneIds = (typeof timezoneData)['zones'][number]['id']; +type TimeZoneAlias = (typeof timezoneData)['zones'][number]['aliases'][number]; +export type TimeZones = TimeZoneIds | TimeZoneAlias; + +export const timeZoneIds = timezoneData.zones.map( + (zone) => zone.id, +) as TimeZoneIds[]; +export const timeZoneAliases = timezoneData.zones.flatMap( + (zone) => zone.aliases, +) as TimeZoneAlias[]; +export const allTimeZones = [...timeZoneIds, ...timeZoneAliases] as const; diff --git a/tsconfig.json b/tsconfig.json index 251099e..f74ced0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -20,7 +20,8 @@ ], "paths": { "@/*": ["./src/*"] - } + }, + "types": ["node", "cypress", "@types/webpack-env"] }, "ts-node": { "compilerOptions": { diff --git a/yarn.lock b/yarn.lock index 786729a..ae0c770 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.12.5, @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 @@ -144,6 +144,42 @@ __metadata: languageName: node linkType: hard +"@cypress/request@npm:^3.0.8": + version: 3.0.8 + resolution: "@cypress/request@npm:3.0.8" + dependencies: + aws-sign2: "npm:~0.7.0" + aws4: "npm:^1.8.0" + caseless: "npm:~0.12.0" + combined-stream: "npm:~1.0.6" + extend: "npm:~3.0.2" + forever-agent: "npm:~0.6.1" + form-data: "npm:~4.0.0" + http-signature: "npm:~1.4.0" + is-typedarray: "npm:~1.0.0" + isstream: "npm:~0.1.2" + json-stringify-safe: "npm:~5.0.1" + mime-types: "npm:~2.1.19" + performance-now: "npm:^2.1.0" + qs: "npm:6.14.0" + safe-buffer: "npm:^5.1.2" + tough-cookie: "npm:^5.0.0" + tunnel-agent: "npm:^0.6.0" + uuid: "npm:^8.3.2" + checksum: 10c0/76cabf6ad64df224bab9b66869f71c4fb63315f9775ef1769da9da6c8d6d470899bee7f5b800379020efb6c7f37fd16a4a8e25c61319e14cd720bd3f606a38fd + languageName: node + linkType: hard + +"@cypress/xvfb@npm:^1.2.4": + version: 1.2.4 + resolution: "@cypress/xvfb@npm:1.2.4" + dependencies: + debug: "npm:^3.1.0" + lodash.once: "npm:^4.1.1" + checksum: 10c0/1bf6224b244f6093033d77f04f6bef719280542656de063cf8ac3f38957b62aa633e6918af0b9673a8bf0123b42a850db51d9729a3ae3da885ac179bc7fc1d26 + languageName: node + linkType: hard + "@emnapi/core@npm:^1.4.3": version: 1.4.3 resolution: "@emnapi/core@npm:1.4.3" @@ -392,12 +428,12 @@ __metadata: languageName: node linkType: hard -"@eslint/core@npm:^0.15.0": - version: 0.15.0 - resolution: "@eslint/core@npm:0.15.0" +"@eslint/core@npm:^0.15.1": + version: 0.15.1 + resolution: "@eslint/core@npm:0.15.1" dependencies: "@types/json-schema": "npm:^7.0.15" - checksum: 10c0/9882c69acfe29743ce473a619d5248589c6687561afaabe8ec8d7ffed07592db16edcca3af022f33ea92fe5f6cfbe3545ee53e89292579d22a944ebaeddcf72d + checksum: 10c0/abaf641940776638b8c15a38d99ce0dac551a8939310ec81b9acd15836a574cf362588eaab03ab11919bc2a0f9648b19ea8dee33bf12675eb5b6fd38bda6f25e languageName: node linkType: hard @@ -433,12 +469,12 @@ __metadata: linkType: hard "@eslint/plugin-kit@npm:^0.3.1": - version: 0.3.2 - resolution: "@eslint/plugin-kit@npm:0.3.2" + version: 0.3.3 + resolution: "@eslint/plugin-kit@npm:0.3.3" dependencies: - "@eslint/core": "npm:^0.15.0" + "@eslint/core": "npm:^0.15.1" levn: "npm:^0.4.1" - checksum: 10c0/e069b0a46eb9fa595a1ac7dea4540a9daa493afba88875ee054e9117609c1c41555e779303cb4cff36cf88f603ba6eba2556a927e8ced77002828206ee17fc7e + checksum: 10c0/c61888eb8757abc0d25a53c1832f85521c2f347126c475eb32d3596be3505e8619e0ceddee7346d195089a2eb1633b61e6127a5772b8965a85eb9f55b8b1cebe languageName: node linkType: hard @@ -468,7 +504,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 +516,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" @@ -543,15 +593,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 @@ -939,10 +989,10 @@ __metadata: languageName: node linkType: hard -"@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 +"@next/env@npm:15.3.4": + version: 15.3.4 + resolution: "@next/env@npm:15.3.4" + checksum: 10c0/43d37896e1422c9c353d9ded1d1b01545aa30b2bb125bcc40ffd4474dbc6e0ba603a77fc2a598616964a925379bb5a39eb1a242f0c49fc933e39e099fb2f7d75 languageName: node linkType: hard @@ -955,58 +1005,58 @@ __metadata: languageName: node linkType: hard -"@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" +"@next/swc-darwin-arm64@npm:15.3.4": + version: 15.3.4 + resolution: "@next/swc-darwin-arm64@npm:15.3.4" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@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" +"@next/swc-darwin-x64@npm:15.3.4": + version: 15.3.4 + resolution: "@next/swc-darwin-x64@npm:15.3.4" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@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" +"@next/swc-linux-arm64-gnu@npm:15.3.4": + version: 15.3.4 + resolution: "@next/swc-linux-arm64-gnu@npm:15.3.4" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@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" +"@next/swc-linux-arm64-musl@npm:15.3.4": + version: 15.3.4 + resolution: "@next/swc-linux-arm64-musl@npm:15.3.4" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@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" +"@next/swc-linux-x64-gnu@npm:15.3.4": + version: 15.3.4 + resolution: "@next/swc-linux-x64-gnu@npm:15.3.4" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@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" +"@next/swc-linux-x64-musl@npm:15.3.4": + version: 15.3.4 + resolution: "@next/swc-linux-x64-musl@npm:15.3.4" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@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" +"@next/swc-win32-arm64-msvc@npm:15.3.4": + version: 15.3.4 + resolution: "@next/swc-win32-arm64-msvc@npm:15.3.4" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@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" +"@next/swc-win32-x64-msvc@npm:15.3.4": + version: 15.3.4 + resolution: "@next/swc-win32-x64-msvc@npm:15.3.4" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -1196,6 +1246,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" @@ -1299,6 +1356,55 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-avatar@npm:^1.1.10": + version: 1.1.10 + resolution: "@radix-ui/react-avatar@npm:1.1.10" + dependencies: + "@radix-ui/react-context": "npm:1.1.2" + "@radix-ui/react-primitive": "npm:2.1.3" + "@radix-ui/react-use-callback-ref": "npm:1.1.1" + "@radix-ui/react-use-is-hydrated": "npm:0.1.0" + "@radix-ui/react-use-layout-effect": "npm:1.1.1" + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 10c0/9fb0cf9a9d0fdbeaa2efda476402fc09db2e6ff9cd9aa3ea1d315d9c9579840722a4833725cb196c455e0bd775dfe04221a4f6855685ce89d2133c42e2b07e5f + languageName: node + linkType: hard + +"@radix-ui/react-collapsible@npm:^1.1.11": + version: 1.1.11 + resolution: "@radix-ui/react-collapsible@npm:1.1.11" + dependencies: + "@radix-ui/primitive": "npm:1.1.2" + "@radix-ui/react-compose-refs": "npm:1.1.2" + "@radix-ui/react-context": "npm:1.1.2" + "@radix-ui/react-id": "npm:1.1.1" + "@radix-ui/react-presence": "npm:1.1.4" + "@radix-ui/react-primitive": "npm:2.1.3" + "@radix-ui/react-use-controllable-state": "npm:1.2.2" + "@radix-ui/react-use-layout-effect": "npm:1.1.1" + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 10c0/fa2de539ef06e2b2d18acebb12a34ce1534ca88bd484b7359aac05534d1e551fe83eaafbf60915c00161bb370f0dc9fc303903133510dea0a59fd018155b7db5 + languageName: node + linkType: hard + "@radix-ui/react-collection@npm:1.1.7": version: 1.1.7 resolution: "@radix-ui/react-collection@npm:1.1.7" @@ -1347,6 +1453,38 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-dialog@npm:^1.1.14": + version: 1.1.14 + resolution: "@radix-ui/react-dialog@npm:1.1.14" + dependencies: + "@radix-ui/primitive": "npm:1.1.2" + "@radix-ui/react-compose-refs": "npm:1.1.2" + "@radix-ui/react-context": "npm:1.1.2" + "@radix-ui/react-dismissable-layer": "npm:1.1.10" + "@radix-ui/react-focus-guards": "npm:1.1.2" + "@radix-ui/react-focus-scope": "npm:1.1.7" + "@radix-ui/react-id": "npm:1.1.1" + "@radix-ui/react-portal": "npm:1.1.9" + "@radix-ui/react-presence": "npm:1.1.4" + "@radix-ui/react-primitive": "npm:2.1.3" + "@radix-ui/react-slot": "npm:1.2.3" + "@radix-ui/react-use-controllable-state": "npm:1.2.2" + aria-hidden: "npm:^1.2.4" + react-remove-scroll: "npm:^2.6.3" + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 10c0/ab7bc783510ed8fccfe91020b214f4a571d5a1d46d398faa33f4c151bc9f586c47483b307e72b67687b06694c194b3aa80dd1de728460fa765db9f3057690ba3 + languageName: node + linkType: hard + "@radix-ui/react-direction@npm:1.1.1": version: 1.1.1 resolution: "@radix-ui/react-direction@npm:1.1.1" @@ -1383,7 +1521,7 @@ __metadata: languageName: node linkType: hard -"@radix-ui/react-dropdown-menu@npm:^2.1.14": +"@radix-ui/react-dropdown-menu@npm:^2.1.15": version: 2.1.15 resolution: "@radix-ui/react-dropdown-menu@npm:2.1.15" dependencies: @@ -1719,7 +1857,7 @@ __metadata: languageName: node linkType: hard -"@radix-ui/react-separator@npm:^1.1.6": +"@radix-ui/react-separator@npm:^1.1.7": version: 1.1.7 resolution: "@radix-ui/react-separator@npm:1.1.7" dependencies: @@ -1738,7 +1876,7 @@ __metadata: languageName: node linkType: hard -"@radix-ui/react-slot@npm:1.2.3, @radix-ui/react-slot@npm:^1.2.2": +"@radix-ui/react-slot@npm:1.2.3, @radix-ui/react-slot@npm:^1.2.3": version: 1.2.3 resolution: "@radix-ui/react-slot@npm:1.2.3" dependencies: @@ -1804,6 +1942,36 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-tooltip@npm:^1.2.7": + version: 1.2.7 + resolution: "@radix-ui/react-tooltip@npm:1.2.7" + dependencies: + "@radix-ui/primitive": "npm:1.1.2" + "@radix-ui/react-compose-refs": "npm:1.1.2" + "@radix-ui/react-context": "npm:1.1.2" + "@radix-ui/react-dismissable-layer": "npm:1.1.10" + "@radix-ui/react-id": "npm:1.1.1" + "@radix-ui/react-popper": "npm:1.2.7" + "@radix-ui/react-portal": "npm:1.1.9" + "@radix-ui/react-presence": "npm:1.1.4" + "@radix-ui/react-primitive": "npm:2.1.3" + "@radix-ui/react-slot": "npm:1.2.3" + "@radix-ui/react-use-controllable-state": "npm:1.2.2" + "@radix-ui/react-visually-hidden": "npm:1.2.3" + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 10c0/28798d576c6ffec4f11120cd563aa9d5ab9afb9a37dc18778176442756d026c8c46eec1ddc647b2b5914045495fcb89f82530106e91acb55776b7d6b1a10fb57 + languageName: node + linkType: hard + "@radix-ui/react-use-callback-ref@npm:1.1.1": version: 1.1.1 resolution: "@radix-ui/react-use-callback-ref@npm:1.1.1" @@ -1863,6 +2031,21 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-use-is-hydrated@npm:0.1.0": + version: 0.1.0 + resolution: "@radix-ui/react-use-is-hydrated@npm:0.1.0" + dependencies: + use-sync-external-store: "npm:^1.5.0" + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/635079bafe32829fc7405895154568ea94a22689b170489fd6d77668e4885e72ff71ed6d0ea3d602852841ef0f1927aa400fee2178d5dfbeb8bc9297da7d6498 + languageName: node + linkType: hard + "@radix-ui/react-use-layout-effect@npm:1.1.1": version: 1.1.1 resolution: "@radix-ui/react-use-layout-effect@npm:1.1.1" @@ -1945,6 +2128,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" @@ -1966,7 +2160,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 +2170,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 +2179,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 +2188,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: @@ -2799,6 +2993,13 @@ __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 + languageName: node + linkType: hard + "@swc/helpers@npm:0.5.15": version: 0.5.15 resolution: "@swc/helpers@npm:0.5.15" @@ -3045,6 +3246,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" @@ -3094,20 +3302,27 @@ __metadata: linkType: hard "@types/node@npm:*": - version: 24.0.3 - resolution: "@types/node@npm:24.0.3" + version: 24.0.4 + resolution: "@types/node@npm:24.0.4" dependencies: undici-types: "npm:~7.8.0" - checksum: 10c0/9c3c4e87600d1cf11e291c2fd4bfd806a615455463c30a0ef6dc9c801b3423344d9b82b8084e3ccabce485a7421ebb61a66e9676181bd7d9aea4759998a120d5 + checksum: 10c0/590e8cb0ec59fb9cd566402120e690d87ecbdf57f1ee2b8493266121ed33aa4b25949a0c6156b84a6ffb9250baaf1f80e9af142da542ed603e6ee73fc4d1115f languageName: node linkType: hard -"@types/node@npm:22.15.32": - version: 22.15.32 - resolution: "@types/node@npm:22.15.32" +"@types/node@npm:22.15.33": + version: 22.15.33 + resolution: "@types/node@npm:22.15.33" dependencies: undici-types: "npm:~6.21.0" - checksum: 10c0/63a2fa52adf1134d1b3bee8b1862d4b8e4550fffc190551068d3d41a41d9e5c0c8f1cb81faa18767b260637360f662115c26c5e4e7718868ead40c4a57cbc0e3 + checksum: 10c0/ee040c29c891aa37fffc27d04a8529318c391356346933646b7692eaf62236831ad532f6ebaf43ebd6a2ef1f0f091860d8a0a83a4e3c5a4f66d37aa1b2c99f31 + 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 @@ -3120,6 +3335,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 +3355,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: @@ -3138,6 +3364,20 @@ __metadata: languageName: node linkType: hard +"@types/sinonjs__fake-timers@npm:8.1.1": + version: 8.1.1 + resolution: "@types/sinonjs__fake-timers@npm:8.1.1" + checksum: 10c0/e2e6c425a548177c0930c2f9b82d3951956c9701b9ebf59623d5ad2c3229c523d3c0d598e79fe7392a239657abd3dbe3676be0650ce438bcd1199ee3b617a4d7 + languageName: node + linkType: hard + +"@types/sizzle@npm:^2.3.2": + version: 2.3.9 + resolution: "@types/sizzle@npm:2.3.9" + checksum: 10c0/db0277ff62e8ebe6cdae2020fd045fd7fd19f29a3a2ce13c555b14fb00e105e79004883732118b9f2e8b943cb302645e9eddb4e7bdeef1a171da679cd4c32b72 + languageName: node + linkType: hard + "@types/swagger-ui-react@npm:5": version: 5.18.0 resolution: "@types/swagger-ui-react@npm:5.18.0" @@ -3182,6 +3422,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" @@ -3189,105 +3436,114 @@ __metadata: languageName: node linkType: hard +"@types/yauzl@npm:^2.9.1": + version: 2.10.3 + resolution: "@types/yauzl@npm:2.10.3" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/f1b7c1b99fef9f2fe7f1985ef7426d0cebe48cd031f1780fcdc7451eec7e31ac97028f16f50121a59bcf53086a1fc8c856fd5b7d3e00970e43d92ae27d6b43dc + 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" + version: 8.35.0 + resolution: "@typescript-eslint/eslint-plugin@npm:8.35.0" dependencies: "@eslint-community/regexpp": "npm:^4.10.0" - "@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" + "@typescript-eslint/scope-manager": "npm:8.35.0" + "@typescript-eslint/type-utils": "npm:8.35.0" + "@typescript-eslint/utils": "npm:8.35.0" + "@typescript-eslint/visitor-keys": "npm:8.35.0" 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.34.1 + "@typescript-eslint/parser": ^8.35.0 eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/f1c9f25e4fe4b59622312dfa0ca1e80fa7945296ba5c04362a5fda084a17e23a6b98dac331f5a13bcb1ba34a2b598a3f5c41aa288f0c51fe60196e912954e56a + checksum: 10c0/27391f1b168a175fdc62370e5afe51317d4433115abbbff8ee0aea8ecd7bf6dd541a76f8e0cc94119750ae3146863204862640acb45394f0b92809e88d39f881 languageName: node linkType: hard "@typescript-eslint/parser@npm:^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": - version: 8.34.1 - resolution: "@typescript-eslint/parser@npm:8.34.1" + version: 8.35.0 + resolution: "@typescript-eslint/parser@npm:8.35.0" dependencies: - "@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" + "@typescript-eslint/scope-manager": "npm:8.35.0" + "@typescript-eslint/types": "npm:8.35.0" + "@typescript-eslint/typescript-estree": "npm:8.35.0" + "@typescript-eslint/visitor-keys": "npm:8.35.0" debug: "npm:^4.3.4" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/bf8070245d53ef6926ff6630bb72f245923f545304e2a61508fb944802a83fed8eab961d9010956d07999d51afdfbbec82aea9d6185295551a7c17c00d759183 + checksum: 10c0/8f1cda98f8bee3d79266974e5e5c831a0ca473e928fb16f1dc1c85ee24f2cb9c0fcf3c1bcbbef9d6044cf063f6e59d3198b766a27000776830fe591043e11625 languageName: node linkType: hard -"@typescript-eslint/project-service@npm:8.34.1": - version: 8.34.1 - resolution: "@typescript-eslint/project-service@npm:8.34.1" +"@typescript-eslint/project-service@npm:8.35.0": + version: 8.35.0 + resolution: "@typescript-eslint/project-service@npm:8.35.0" dependencies: - "@typescript-eslint/tsconfig-utils": "npm:^8.34.1" - "@typescript-eslint/types": "npm:^8.34.1" + "@typescript-eslint/tsconfig-utils": "npm:^8.35.0" + "@typescript-eslint/types": "npm:^8.35.0" debug: "npm:^4.3.4" peerDependencies: typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/9333a890625f6777054db17a6b299281ae7502bb7615261d15b885a75b8cf65fc91591389c93b37ecd14b651d8e94851dac8718e5dcc8ed0600533535dae855c + checksum: 10c0/c2d6d44b6b2ff3ecabec8ade824163196799060ac457661eb94049487d770ce68d128b33a2f24090adf1ebcb66ff6c9a05fc6659349b9a0784a5a080ecf8ff81 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:8.34.1": - version: 8.34.1 - resolution: "@typescript-eslint/scope-manager@npm:8.34.1" +"@typescript-eslint/scope-manager@npm:8.35.0": + version: 8.35.0 + resolution: "@typescript-eslint/scope-manager@npm:8.35.0" dependencies: - "@typescript-eslint/types": "npm:8.34.1" - "@typescript-eslint/visitor-keys": "npm:8.34.1" - checksum: 10c0/2af608fa3900f4726322e33bf4f3a376fdace3ac0f310cf7d9256bbc2905c3896138176a47dd195d2c2229f27fe43f5deb4bc7729db2eb18389926dedea78077 + "@typescript-eslint/types": "npm:8.35.0" + "@typescript-eslint/visitor-keys": "npm:8.35.0" + checksum: 10c0/a27cf27a1852bb0d6ea08f475fcc79557f1977be96ef563d92127e8011e4065566441c32c40eb7a530111ffd3a8489919da7f8a2b7466a610cfc9c07670a9601 languageName: node linkType: hard -"@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" +"@typescript-eslint/tsconfig-utils@npm:8.35.0, @typescript-eslint/tsconfig-utils@npm:^8.35.0": + version: 8.35.0 + resolution: "@typescript-eslint/tsconfig-utils@npm:8.35.0" peerDependencies: typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/8d1ead8b7c279b48e2ed96f083ec119a9aeea1ca9cdd40576ec271b996b9fd8cfa0ddb0aafbb4e14bc27fc62c69c5be66d39b1de68eab9ddd7f1861da267423d + checksum: 10c0/baa18e7137ba72f7d138f50d1168e8f334198a36499f954821e2369027e5b3d53ca93c354943e7782ba5caab604b050af10f353ccca34fbc0b23c48d6174832f languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:8.34.1": - version: 8.34.1 - resolution: "@typescript-eslint/type-utils@npm:8.34.1" +"@typescript-eslint/type-utils@npm:8.35.0": + version: 8.35.0 + resolution: "@typescript-eslint/type-utils@npm:8.35.0" dependencies: - "@typescript-eslint/typescript-estree": "npm:8.34.1" - "@typescript-eslint/utils": "npm:8.34.1" + "@typescript-eslint/typescript-estree": "npm:8.35.0" + "@typescript-eslint/utils": "npm:8.35.0" 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/502a2cdfe47f1f34206c747b5a70e0242dd99f570511db3dda9c5f999d9abadfbbb1dfa82a1fa437a1689d232715412e61c97d95f19c9314ba5ad23196b4096d + checksum: 10c0/9e23a332484a055eb73ba8918f95a981e0cec8fa623ba9ee0b57328af052628d630a415e32e0dbe95318574e62d4066f8aecc994728b3cedd906f36c616ec362 languageName: node linkType: hard -"@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 +"@typescript-eslint/types@npm:8.35.0, @typescript-eslint/types@npm:^8.35.0": + version: 8.35.0 + resolution: "@typescript-eslint/types@npm:8.35.0" + checksum: 10c0/a2711a932680805e83252b5d7c55ac30437bdc4d40c444606cf6ccb6ba23a682da015ec03c64635e77bf733f84d9bb76810bf4f7177fd3a660db8a2c8a05e845 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:8.34.1": - version: 8.34.1 - resolution: "@typescript-eslint/typescript-estree@npm:8.34.1" +"@typescript-eslint/typescript-estree@npm:8.35.0": + version: 8.35.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.35.0" dependencies: - "@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" + "@typescript-eslint/project-service": "npm:8.35.0" + "@typescript-eslint/tsconfig-utils": "npm:8.35.0" + "@typescript-eslint/types": "npm:8.35.0" + "@typescript-eslint/visitor-keys": "npm:8.35.0" debug: "npm:^4.3.4" fast-glob: "npm:^3.3.2" is-glob: "npm:^4.0.3" @@ -3296,166 +3552,166 @@ __metadata: ts-api-utils: "npm:^2.1.0" peerDependencies: typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/4ee7249db91b9840361f34f80b7b6d646a3af159c7298d79a33d8a11c98792fd3a395343e5e17e0fa29529e8f0113bac8baadcef90d1e140bd736a48f0485042 + checksum: 10c0/7e94f6a92efc5832289e8bfd0b61209aa501224c935359253c29aeef8e0b981b370ee2a43e2909991c3c3cf709fcccb6380474e0e9a863e8f89e2fbd213aed59 languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.34.1": - version: 8.34.1 - resolution: "@typescript-eslint/utils@npm:8.34.1" +"@typescript-eslint/utils@npm:8.35.0": + version: 8.35.0 + resolution: "@typescript-eslint/utils@npm:8.35.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.7.0" - "@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/scope-manager": "npm:8.35.0" + "@typescript-eslint/types": "npm:8.35.0" + "@typescript-eslint/typescript-estree": "npm:8.35.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: ">=4.8.4 <5.9.0" - checksum: 10c0/e3085877f7940c02a37653e6bc52ac6cde115e755b1f788fe4331202f371b3421cc4d0878c7d3eb054e14e9b3a064496a707a73eac471cb2b73593b9e9d4b998 + checksum: 10c0/e3317df7875305bee16edd573e4bfdafc099f26f9c284d8adb351333683aacd5b668320870653dff7ec7e0da1982bbf89dc06197bc193a3be65362f21452dbea languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:8.34.1": - version: 8.34.1 - resolution: "@typescript-eslint/visitor-keys@npm:8.34.1" +"@typescript-eslint/visitor-keys@npm:8.35.0": + version: 8.35.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.35.0" dependencies: - "@typescript-eslint/types": "npm:8.34.1" + "@typescript-eslint/types": "npm:8.35.0" eslint-visitor-keys: "npm:^4.2.1" - checksum: 10c0/0e5a9b3d93905d16d3cf8cb5fb346dcc6f760482eb7d0ac209aefc09a32f78ef28a687634df6ad08e81fb3e1083e8805f34472de6bbc501c0105ad654d518f40 + checksum: 10c0/df18ca9b6931cb58f5dc404fcc94f9e0cc1c22f3053c7013ab588bb8ccccd3d58a70c577c01267845d57fa124a8cf8371260d284dad97505c56b2abcf70a3dce languageName: node linkType: hard -"@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" +"@unrs/resolver-binding-android-arm-eabi@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-android-arm-eabi@npm:1.9.2" 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" +"@unrs/resolver-binding-android-arm64@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-android-arm64@npm:1.9.2" 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" +"@unrs/resolver-binding-darwin-arm64@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-darwin-arm64@npm:1.9.2" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@unrs/resolver-binding-darwin-x64@npm:1.9.1": - version: 1.9.1 - resolution: "@unrs/resolver-binding-darwin-x64@npm:1.9.1" +"@unrs/resolver-binding-darwin-x64@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-darwin-x64@npm:1.9.2" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@unrs/resolver-binding-freebsd-x64@npm:1.9.1": - version: 1.9.1 - resolution: "@unrs/resolver-binding-freebsd-x64@npm:1.9.1" +"@unrs/resolver-binding-freebsd-x64@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-freebsd-x64@npm:1.9.2" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@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" +"@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.9.2" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@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" +"@unrs/resolver-binding-linux-arm-musleabihf@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-linux-arm-musleabihf@npm:1.9.2" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@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" +"@unrs/resolver-binding-linux-arm64-gnu@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-linux-arm64-gnu@npm:1.9.2" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@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" +"@unrs/resolver-binding-linux-arm64-musl@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-linux-arm64-musl@npm:1.9.2" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@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" +"@unrs/resolver-binding-linux-ppc64-gnu@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-linux-ppc64-gnu@npm:1.9.2" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@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" +"@unrs/resolver-binding-linux-riscv64-gnu@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-linux-riscv64-gnu@npm:1.9.2" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@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" +"@unrs/resolver-binding-linux-riscv64-musl@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-linux-riscv64-musl@npm:1.9.2" conditions: os=linux & cpu=riscv64 & libc=musl languageName: node linkType: hard -"@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" +"@unrs/resolver-binding-linux-s390x-gnu@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-linux-s390x-gnu@npm:1.9.2" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@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" +"@unrs/resolver-binding-linux-x64-gnu@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-linux-x64-gnu@npm:1.9.2" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@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" +"@unrs/resolver-binding-linux-x64-musl@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-linux-x64-musl@npm:1.9.2" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@unrs/resolver-binding-wasm32-wasi@npm:1.9.1": - version: 1.9.1 - resolution: "@unrs/resolver-binding-wasm32-wasi@npm:1.9.1" +"@unrs/resolver-binding-wasm32-wasi@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-wasm32-wasi@npm:1.9.2" dependencies: "@napi-rs/wasm-runtime": "npm:^0.2.11" conditions: cpu=wasm32 languageName: node linkType: hard -"@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" +"@unrs/resolver-binding-win32-arm64-msvc@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-win32-arm64-msvc@npm:1.9.2" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@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" +"@unrs/resolver-binding-win32-ia32-msvc@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-win32-ia32-msvc@npm:1.9.2" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@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" +"@unrs/resolver-binding-win32-x64-msvc@npm:1.9.2": + version: 1.9.2 + resolution: "@unrs/resolver-binding-win32-x64-msvc@npm:1.9.2" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -3510,6 +3766,16 @@ __metadata: languageName: node linkType: hard +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: "npm:^2.0.0" + indent-string: "npm:^4.0.0" + checksum: 10c0/a42f67faa79e3e6687a4923050e7c9807db3848a037076f791d10e092677d65c1d2d863b7848560699f40fc0502c19f40963fb1cd1fb3d338a7423df8e45e039 + 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" @@ -3576,6 +3842,15 @@ __metadata: languageName: node linkType: hard +"ansi-escapes@npm:^4.3.0": + version: 4.3.2 + resolution: "ansi-escapes@npm:4.3.2" + dependencies: + type-fest: "npm:^0.21.3" + checksum: 10c0/da917be01871525a3dfcf925ae2977bc59e8c513d4423368645634bf5d4ceba5401574eb705c1e92b79f7292af5a656f78c5725a4b0e1cec97c4b413705c1d50 + languageName: node + linkType: hard + "ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" @@ -3613,6 +3888,13 @@ __metadata: languageName: node linkType: hard +"arch@npm:^2.2.0": + version: 2.2.0 + resolution: "arch@npm:2.2.0" + checksum: 10c0/4ceaf8d8207817c216ebc4469742052cb0a097bc45d9b7fcd60b7507220da545a28562ab5bdd4dfe87921bb56371a0805da4e10d704e01f93a15f83240f1284c + languageName: node + linkType: hard + "arg@npm:^4.1.0": version: 4.1.3 resolution: "arg@npm:4.1.3" @@ -3662,7 +3944,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 +3981,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 +3996,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: @@ -3766,6 +4048,22 @@ __metadata: languageName: node linkType: hard +"asn1@npm:~0.2.3": + version: 0.2.6 + resolution: "asn1@npm:0.2.6" + dependencies: + safer-buffer: "npm:~2.1.0" + checksum: 10c0/00c8a06c37e548762306bcb1488388d2f76c74c36f70c803f0c081a01d3bdf26090fc088cd812afc5e56a6d49e33765d451a5f8a68ab9c2b087eba65d2e980e0 + languageName: node + linkType: hard + +"assert-plus@npm:1.0.0, assert-plus@npm:^1.0.0": + version: 1.0.0 + resolution: "assert-plus@npm:1.0.0" + checksum: 10c0/b194b9d50c3a8f872ee85ab110784911e696a4d49f7ee6fc5fb63216dedbefd2c55999c70cb2eaeb4cf4a0e0338b44e9ace3627117b5bf0d42460e9132f21b91 + languageName: node + linkType: hard + "ast-types-flow@npm:^0.0.8": version: 0.0.8 resolution: "ast-types-flow@npm:0.0.8" @@ -3773,6 +4071,13 @@ __metadata: languageName: node linkType: hard +"astral-regex@npm:^2.0.0": + version: 2.0.0 + resolution: "astral-regex@npm:2.0.0" + checksum: 10c0/f63d439cc383db1b9c5c6080d1e240bd14dae745f15d11ec5da863e182bbeca70df6c8191cffef5deba0b566ef98834610a68be79ac6379c95eeb26e1b310e25 + languageName: node + linkType: hard + "astring@npm:^1.8.1": version: 1.9.0 resolution: "astring@npm:1.9.0" @@ -3789,6 +4094,13 @@ __metadata: languageName: node linkType: hard +"async@npm:^3.2.0": + version: 3.2.6 + resolution: "async@npm:3.2.6" + checksum: 10c0/36484bb15ceddf07078688d95e27076379cc2f87b10c03b6dd8a83e89475a3c8df5848859dd06a4c95af1e4c16fc973de0171a77f18ea00be899aca2a4f85e70 + languageName: node + linkType: hard + "asynckit@npm:^0.4.0": version: 0.4.0 resolution: "asynckit@npm:0.4.0" @@ -3796,6 +4108,13 @@ __metadata: languageName: node linkType: hard +"at-least-node@npm:^1.0.0": + version: 1.0.0 + resolution: "at-least-node@npm:1.0.0" + checksum: 10c0/4c058baf6df1bc5a1697cf182e2029c58cd99975288a13f9e70068ef5d6f4e1f1fd7c4d2c3c4912eae44797d1725be9700995736deca441b39f3e66d8dee97ef + languageName: node + linkType: hard + "autolinker@npm:^3.11.0": version: 3.16.2 resolution: "autolinker@npm:3.16.2" @@ -3814,6 +4133,20 @@ __metadata: languageName: node linkType: hard +"aws-sign2@npm:~0.7.0": + version: 0.7.0 + resolution: "aws-sign2@npm:0.7.0" + checksum: 10c0/021d2cc5547d4d9ef1633e0332e746a6f447997758b8b68d6fb33f290986872d2bff5f0c37d5832f41a7229361f093cd81c40898d96ed153493c0fb5cd8575d2 + languageName: node + linkType: hard + +"aws4@npm:^1.8.0": + version: 1.13.2 + resolution: "aws4@npm:1.13.2" + checksum: 10c0/c993d0d186d699f685d73113733695d648ec7d4b301aba2e2a559d0cd9c1c902308cc52f4095e1396b23fddbc35113644e7f0a6a32753636306e41e3ed6f1e79 + languageName: node + linkType: hard + "axe-core@npm:^4.10.0": version: 4.10.3 resolution: "axe-core@npm:4.10.3" @@ -3846,13 +4179,22 @@ __metadata: languageName: node linkType: hard -"base64-js@npm:^1.5.1": +"base64-js@npm:^1.3.1, base64-js@npm:^1.5.1": version: 1.5.1 resolution: "base64-js@npm:1.5.1" checksum: 10c0/f23823513b63173a001030fae4f2dabe283b99a9d324ade3ad3d148e218134676f1ee8568c877cd79ec1c53158dcf2d2ba527a97c606618928ba99dd930102bf languageName: node linkType: hard +"bcrypt-pbkdf@npm:^1.0.0": + version: 1.0.2 + resolution: "bcrypt-pbkdf@npm:1.0.2" + dependencies: + tweetnacl: "npm:^0.14.3" + checksum: 10c0/ddfe85230b32df25aeebfdccfbc61d3bc493ace49c884c9c68575de1f5dcf733a5d7de9def3b0f318b786616b8d85bad50a28b1da1750c43e0012c93badcc148 + languageName: node + linkType: hard + "bcryptjs@npm:^3.0.2": version: 3.0.2 resolution: "bcryptjs@npm:3.0.2" @@ -3862,6 +4204,20 @@ __metadata: languageName: node linkType: hard +"blob-util@npm:^2.0.2": + version: 2.0.2 + resolution: "blob-util@npm:2.0.2" + checksum: 10c0/ed82d587827e5c86be122301a7c250f8364963e9582f72a826255bfbd32f8d69cc10169413d666667bb1c4fc8061329ae89d176ffe46fee8f32080af944ccddc + languageName: node + linkType: hard + +"bluebird@npm:^3.7.2": + version: 3.7.2 + resolution: "bluebird@npm:3.7.2" + checksum: 10c0/680de03adc54ff925eaa6c7bb9a47a0690e8b5de60f4792604aae8ed618c65e6b63a7893b57ca924beaf53eee69c5af4f8314148c08124c550fe1df1add897d2 + languageName: node + linkType: hard + "brace-expansion@npm:^1.1.7": version: 1.1.12 resolution: "brace-expansion@npm:1.1.12" @@ -3890,6 +4246,32 @@ __metadata: languageName: node linkType: hard +"buffer-crc32@npm:~0.2.3": + version: 0.2.13 + resolution: "buffer-crc32@npm:0.2.13" + checksum: 10c0/cb0a8ddf5cf4f766466db63279e47761eb825693eeba6a5a95ee4ec8cb8f81ede70aa7f9d8aeec083e781d47154290eb5d4d26b3f7a465ec57fb9e7d59c47150 + languageName: node + linkType: hard + +"buffer@npm:^5.7.1": + version: 5.7.1 + resolution: "buffer@npm:5.7.1" + dependencies: + base64-js: "npm:^1.3.1" + ieee754: "npm:^1.1.13" + checksum: 10c0/27cac81cff434ed2876058d72e7c4789d11ff1120ef32c9de48f59eab58179b66710c488987d295ae89a228f835fc66d088652dffeb8e3ba8659f80eb091d55e + languageName: node + linkType: hard + +"busboy@npm:1.6.0": + version: 1.6.0 + resolution: "busboy@npm:1.6.0" + dependencies: + streamsearch: "npm:^1.1.0" + checksum: 10c0/fa7e836a2b82699b6e074393428b91ae579d4f9e21f5ac468e1b459a244341d722d2d22d10920cdd849743dbece6dca11d72de939fb75a7448825cf2babfba1f + languageName: node + linkType: hard + "cac@npm:^6.7.14": version: 6.7.14 resolution: "cac@npm:6.7.14" @@ -3917,6 +4299,13 @@ __metadata: languageName: node linkType: hard +"cachedir@npm:^2.3.0": + version: 2.4.0 + resolution: "cachedir@npm:2.4.0" + checksum: 10c0/76bff9009f2c446cd3777a4aede99af634a89670a67012b8041f65e951d3d36cefe8940341ea80c72219ee9913fa1f6146824cd9dfe9874a4bded728af7e6d76 + languageName: node + linkType: hard + "call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": version: 1.0.2 resolution: "call-bind-apply-helpers@npm:1.0.2" @@ -3964,13 +4353,20 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.30001579": - version: 1.0.30001724 - resolution: "caniuse-lite@npm:1.0.30001724" - checksum: 10c0/ed9ec0bcf619f0e7ef2d33aac74d2346d1faf52060dfded1fb9c32d87854de5c2988b3ba338c281034c88bf797d6b55468a804ce8396a7e16a48cb0d481d4bfe + version: 1.0.30001726 + resolution: "caniuse-lite@npm:1.0.30001726" + checksum: 10c0/2c5f91da7fd9ebf8c6b432818b1498ea28aca8de22b30dafabe2a2a6da1e014f10e67e14f8e68e872a0867b6b4cd6001558dde04e3ab9770c9252ca5c8849d0e languageName: node linkType: hard -"chalk@npm:^4.0.0, chalk@npm:^4.1.2": +"caseless@npm:~0.12.0": + version: 0.12.0 + resolution: "caseless@npm:0.12.0" + checksum: 10c0/ccf64bcb6c0232cdc5b7bd91ddd06e23a4b541f138336d4725233ac538041fb2f29c2e86c3c4a7a61ef990b665348db23a047060b9414c3a6603e9fa61ad4626 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.2": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: @@ -4001,6 +4397,13 @@ __metadata: languageName: node linkType: hard +"check-more-types@npm:^2.24.0": + version: 2.24.0 + resolution: "check-more-types@npm:2.24.0" + checksum: 10c0/93fda2c32eb5f6cd1161a84a2f4107c0e00b40a851748516791dd9a0992b91bdf504e3bf6bf7673ce603ae620042e11ed4084d16d6d92b36818abc9c2e725520 + languageName: node + linkType: hard + "chokidar@npm:^4.0.3": version: 4.0.3 resolution: "chokidar@npm:4.0.3" @@ -4017,6 +4420,13 @@ __metadata: languageName: node linkType: hard +"ci-info@npm:^4.1.0": + version: 4.2.0 + resolution: "ci-info@npm:4.2.0" + checksum: 10c0/37a2f4b6a213a5cf835890eb0241f0d5b022f6cfefde58a69e9af8e3a0e71e06d6ad7754b0d4efb9cd2613e58a7a33996d71b56b0d04242722e86666f3f3d058 + languageName: node + linkType: hard + "class-variance-authority@npm:^0.7.1": version: 0.7.1 resolution: "class-variance-authority@npm:0.7.1" @@ -4033,6 +4443,45 @@ __metadata: languageName: node linkType: hard +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 10c0/1f90262d5f6230a17e27d0c190b09d47ebe7efdd76a03b5a1127863f7b3c9aec4c3e6c8bb3a7bbf81d553d56a1fd35728f5a8ef4c63f867ac8d690109742a8c1 + languageName: node + linkType: hard + +"cli-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "cli-cursor@npm:3.1.0" + dependencies: + restore-cursor: "npm:^3.1.0" + checksum: 10c0/92a2f98ff9037d09be3dfe1f0d749664797fb674bf388375a2207a1203b69d41847abf16434203e0089212479e47a358b13a0222ab9fccfe8e2644a7ccebd111 + languageName: node + linkType: hard + +"cli-table3@npm:0.6.1": + version: 0.6.1 + resolution: "cli-table3@npm:0.6.1" + dependencies: + colors: "npm:1.4.0" + string-width: "npm:^4.2.0" + dependenciesMeta: + colors: + optional: true + checksum: 10c0/19ab1bb14bd11b3ca3557ce5ad37ef73e489ea814b99f803171e6ac0a3f2ae5fffb6dbc8864e33cdcf2a3644ebc31b488b8e624fd74af44a1c77cc365c143db4 + languageName: node + linkType: hard + +"cli-truncate@npm:^2.1.0": + version: 2.1.0 + resolution: "cli-truncate@npm:2.1.0" + dependencies: + slice-ansi: "npm:^3.0.0" + string-width: "npm:^4.2.0" + checksum: 10c0/dfaa3df675bcef7a3254773de768712b590250420345a4c7ac151f041a4bacb4c25864b1377bee54a39b5925a030c00eabf014e312e3a4ac130952ed3b3879e9 + languageName: node + linkType: hard + "client-only@npm:0.0.1": version: 0.0.1 resolution: "client-only@npm:0.0.1" @@ -4051,6 +4500,13 @@ __metadata: languageName: node linkType: hard +"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" @@ -4094,7 +4550,21 @@ __metadata: languageName: node linkType: hard -"combined-stream@npm:^1.0.8": +"colorette@npm:^2.0.16": + version: 2.0.20 + resolution: "colorette@npm:2.0.20" + checksum: 10c0/e94116ff33b0ff56f3b83b9ace895e5bf87c2a7a47b3401b8c3f3226e050d5ef76cf4072fb3325f9dc24d1698f9b730baf4e05eeaf861d74a1883073f4c98a40 + languageName: node + linkType: hard + +"colors@npm:1.4.0": + version: 1.4.0 + resolution: "colors@npm:1.4.0" + checksum: 10c0/9af357c019da3c5a098a301cf64e3799d27549d8f185d86f79af23069e4f4303110d115da98483519331f6fb71c8568d5688fa1c6523600044fd4a54e97c4efb + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.8, combined-stream@npm:~1.0.6": version: 1.0.8 resolution: "combined-stream@npm:1.0.8" dependencies: @@ -4110,6 +4580,20 @@ __metadata: languageName: node linkType: hard +"commander@npm:^6.2.1": + version: 6.2.1 + resolution: "commander@npm:6.2.1" + checksum: 10c0/85748abd9d18c8bc88febed58b98f66b7c591d9b5017cad459565761d7b29ca13b7783ea2ee5ce84bf235897333706c4ce29adf1ce15c8252780e7000e2ce9ea + languageName: node + linkType: hard + +"common-tags@npm:^1.8.0": + version: 1.8.2 + resolution: "common-tags@npm:1.8.2" + checksum: 10c0/23efe47ff0a1a7c91489271b3a1e1d2a171c12ec7f9b35b29b2fce51270124aff0ec890087e2bc2182c1cb746e232ab7561aaafe05f1e7452aea733d2bfe3f63 + languageName: node + linkType: hard + "compare-versions@npm:^6.1.1": version: 6.1.1 resolution: "compare-versions@npm:6.1.1" @@ -4140,6 +4624,13 @@ __metadata: languageName: node linkType: hard +"core-util-is@npm:1.0.2": + version: 1.0.2 + resolution: "core-util-is@npm:1.0.2" + checksum: 10c0/980a37a93956d0de8a828ce508f9b9e3317039d68922ca79995421944146700e4aaf490a6dbfebcb1c5292a7184600c7710b957d724be1e37b8254c6bc0fe246 + languageName: node + linkType: hard + "create-require@npm:^1.1.0": version: 1.1.1 resolution: "create-require@npm:1.1.1" @@ -4147,7 +4638,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.3, cross-spawn@npm:^7.0.6": +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.3, cross-spawn@npm:^7.0.6": version: 7.0.6 resolution: "cross-spawn@npm:7.0.6" dependencies: @@ -4172,6 +4663,60 @@ __metadata: languageName: node linkType: hard +"cypress@npm:14.5.0": + version: 14.5.0 + resolution: "cypress@npm:14.5.0" + dependencies: + "@cypress/request": "npm:^3.0.8" + "@cypress/xvfb": "npm:^1.2.4" + "@types/sinonjs__fake-timers": "npm:8.1.1" + "@types/sizzle": "npm:^2.3.2" + arch: "npm:^2.2.0" + blob-util: "npm:^2.0.2" + bluebird: "npm:^3.7.2" + buffer: "npm:^5.7.1" + cachedir: "npm:^2.3.0" + chalk: "npm:^4.1.0" + check-more-types: "npm:^2.24.0" + ci-info: "npm:^4.1.0" + cli-cursor: "npm:^3.1.0" + cli-table3: "npm:0.6.1" + commander: "npm:^6.2.1" + common-tags: "npm:^1.8.0" + dayjs: "npm:^1.10.4" + debug: "npm:^4.3.4" + enquirer: "npm:^2.3.6" + eventemitter2: "npm:6.4.7" + execa: "npm:4.1.0" + executable: "npm:^4.1.1" + extract-zip: "npm:2.0.1" + figures: "npm:^3.2.0" + fs-extra: "npm:^9.1.0" + getos: "npm:^3.2.1" + hasha: "npm:5.2.2" + is-installed-globally: "npm:~0.4.0" + lazy-ass: "npm:^1.6.0" + listr2: "npm:^3.8.3" + lodash: "npm:^4.17.21" + log-symbols: "npm:^4.0.0" + minimist: "npm:^1.2.8" + ospath: "npm:^1.2.2" + pretty-bytes: "npm:^5.6.0" + process: "npm:^0.11.10" + proxy-from-env: "npm:1.0.0" + request-progress: "npm:^3.0.0" + semver: "npm:^7.7.1" + supports-color: "npm:^8.1.1" + tmp: "npm:~0.2.3" + tree-kill: "npm:1.2.2" + untildify: "npm:^4.0.0" + yauzl: "npm:^2.10.0" + bin: + cypress: bin/cypress + checksum: 10c0/b76b05c029625357fbc34f22b632c55f9f981f86c3a568a88ea3d8982b8299e4bd4275e966b2ec767f9a989c6e9059fb03a4a8086048b4e990079b1cab19ba11 + languageName: node + linkType: hard + "damerau-levenshtein@npm:^1.0.8": version: 1.0.8 resolution: "damerau-levenshtein@npm:1.0.8" @@ -4179,6 +4724,15 @@ __metadata: languageName: node linkType: hard +"dashdash@npm:^1.12.0": + version: 1.14.1 + resolution: "dashdash@npm:1.14.1" + dependencies: + assert-plus: "npm:^1.0.0" + checksum: 10c0/64589a15c5bd01fa41ff7007e0f2c6552c5ef2028075daa16b188a3721f4ba001841bf306dfc2eee6e2e6e7f76b38f5f17fb21fa847504192290ffa9e150118a + languageName: node + linkType: hard + "data-view-buffer@npm:^1.0.2": version: 1.0.2 resolution: "data-view-buffer@npm:1.0.2" @@ -4212,7 +4766,28 @@ __metadata: 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": +"date-arithmetic@npm:^4.1.0": + version: 4.1.0 + resolution: "date-arithmetic@npm:4.1.0" + checksum: 10c0/697774a1a6a1b226004b5527326599c01a095bf715a0d43089e0493a565a91e7f4342b1b73b855c0e7b0caaf4bc947a61bc35ec60d162d52ef3c3c08eab26b6e + 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.10.4, 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.1.1, 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: @@ -4224,7 +4799,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:^3.2.7": +"debug@npm:^3.1.0, debug@npm:^3.2.7": version: 3.2.7 resolution: "debug@npm:3.2.7" dependencies: @@ -4290,6 +4865,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" @@ -4329,6 +4911,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" @@ -4394,6 +4986,16 @@ __metadata: languageName: node linkType: hard +"ecc-jsbn@npm:~0.1.1": + version: 0.1.2 + resolution: "ecc-jsbn@npm:0.1.2" + dependencies: + jsbn: "npm:~0.1.0" + safer-buffer: "npm:^2.1.0" + checksum: 10c0/6cf168bae1e2dad2e46561d9af9cbabfbf5ff592176ad4e9f0f41eaaf5fe5e10bb58147fe0a804de62b1ee9dad42c28810c88d652b21b6013c47ba8efa274ca1 + languageName: node + linkType: hard + "emoji-regex@npm:^8.0.0": version: 8.0.0 resolution: "emoji-regex@npm:8.0.0" @@ -4417,17 +5019,26 @@ __metadata: languageName: node linkType: hard -"enhanced-resolve@npm:^5.18.1": - version: 5.18.1 - resolution: "enhanced-resolve@npm:5.18.1" +"end-of-stream@npm:^1.1.0": + version: 1.4.5 + resolution: "end-of-stream@npm:1.4.5" dependencies: - graceful-fs: "npm:^4.2.4" - tapable: "npm:^2.2.0" - checksum: 10c0/4cffd9b125225184e2abed9fdf0ed3dbd2224c873b165d0838fd066cde32e0918626cba2f1f4bf6860762f13a7e2364fd89a82b99566be2873d813573ac71846 + once: "npm:^1.4.0" + checksum: 10c0/b0701c92a10b89afb1cb45bf54a5292c6f008d744eb4382fa559d54775ff31617d1d7bc3ef617575f552e24fad2c7c1a1835948c66b3f3a4be0a6c1f35c883d8 languageName: node linkType: hard -"enquirer@npm:^2.4.1": +"enhanced-resolve@npm:^5.18.1": + version: 5.18.2 + resolution: "enhanced-resolve@npm:5.18.2" + dependencies: + graceful-fs: "npm:^4.2.4" + tapable: "npm:^2.2.0" + checksum: 10c0/2a45105daded694304b0298d1c0351a981842249a9867513d55e41321a4ccf37dfd35b0c1e9ceae290eab73654b09aa7a910d618ea6f9441e97c52bc424a2372 + languageName: node + linkType: hard + +"enquirer@npm:^2.3.6, enquirer@npm:^2.4.1": version: 2.4.1 resolution: "enquirer@npm:2.4.1" dependencies: @@ -4715,6 +5326,13 @@ __metadata: languageName: node linkType: hard +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 + languageName: node + linkType: hard + "escape-string-regexp@npm:^4.0.0": version: 4.0.0 resolution: "escape-string-regexp@npm:4.0.0" @@ -4792,7 +5410,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 +5423,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 @@ -5019,6 +5637,30 @@ __metadata: languageName: node linkType: hard +"eventemitter2@npm:6.4.7": + version: 6.4.7 + resolution: "eventemitter2@npm:6.4.7" + checksum: 10c0/35d8e9d51b919114eb072d33786274e1475db50efe00960c24c088ce4f76c07a826ccc927602724928efb3d8f09a7d8dd1fa79e410875118c0e9846959287f34 + languageName: node + linkType: hard + +"execa@npm:4.1.0": + version: 4.1.0 + resolution: "execa@npm:4.1.0" + dependencies: + cross-spawn: "npm:^7.0.0" + get-stream: "npm:^5.0.0" + human-signals: "npm:^1.1.1" + is-stream: "npm:^2.0.0" + merge-stream: "npm:^2.0.0" + npm-run-path: "npm:^4.0.0" + onetime: "npm:^5.1.0" + signal-exit: "npm:^3.0.2" + strip-final-newline: "npm:^2.0.0" + checksum: 10c0/02211601bb1c52710260edcc68fb84c3c030dc68bafc697c90ada3c52cc31375337de8c24826015b8382a58d63569ffd203b79c94fef217d65503e3e8d2c52ba + languageName: node + linkType: hard + "execa@npm:^5.1.1": version: 5.1.1 resolution: "execa@npm:5.1.1" @@ -5036,6 +5678,15 @@ __metadata: languageName: node linkType: hard +"executable@npm:^4.1.1": + version: 4.1.1 + resolution: "executable@npm:4.1.1" + dependencies: + pify: "npm:^2.2.0" + checksum: 10c0/c3cc5d2d2e3cdb1b7d7b0639ebd5566d113d7ada21cfa07f5226d55ba2a210320116720e07570ed5659ef2ec516bc00c8f0488dac75d112fd324ef25c2100173 + languageName: node + linkType: hard + "exponential-backoff@npm:^3.1.1": version: 3.1.2 resolution: "exponential-backoff@npm:3.1.2" @@ -5043,6 +5694,44 @@ __metadata: languageName: node linkType: hard +"extend@npm:~3.0.2": + version: 3.0.2 + resolution: "extend@npm:3.0.2" + checksum: 10c0/73bf6e27406e80aa3e85b0d1c4fd987261e628064e170ca781125c0b635a3dabad5e05adbf07595ea0cf1e6c5396cacb214af933da7cbaf24fe75ff14818e8f9 + languageName: node + linkType: hard + +"extract-zip@npm:2.0.1": + version: 2.0.1 + resolution: "extract-zip@npm:2.0.1" + dependencies: + "@types/yauzl": "npm:^2.9.1" + debug: "npm:^4.1.1" + get-stream: "npm:^5.1.0" + yauzl: "npm:^2.10.0" + dependenciesMeta: + "@types/yauzl": + optional: true + bin: + extract-zip: cli.js + checksum: 10c0/9afbd46854aa15a857ae0341a63a92743a7b89c8779102c3b4ffc207516b2019337353962309f85c66ee3d9092202a83cdc26dbf449a11981272038443974aee + languageName: node + linkType: hard + +"extsprintf@npm:1.3.0": + version: 1.3.0 + resolution: "extsprintf@npm:1.3.0" + checksum: 10c0/f75114a8388f0cbce68e277b6495dc3930db4dde1611072e4a140c24e204affd77320d004b947a132e9a3b97b8253017b2b62dce661975fb0adced707abf1ab5 + languageName: node + linkType: hard + +"extsprintf@npm:^1.2.0": + version: 1.4.1 + resolution: "extsprintf@npm:1.4.1" + checksum: 10c0/e10e2769985d0e9b6c7199b053a9957589d02e84de42832c295798cb422a025e6d4a92e0259c1fb4d07090f5bfde6b55fd9f880ac5855bd61d775f8ab75a7ab0 + 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" @@ -5136,6 +5825,15 @@ __metadata: languageName: node linkType: hard +"fd-slicer@npm:~1.1.0": + version: 1.1.0 + resolution: "fd-slicer@npm:1.1.0" + dependencies: + pend: "npm:~1.2.0" + checksum: 10c0/304dd70270298e3ffe3bcc05e6f7ade2511acc278bc52d025f8918b48b6aa3b77f10361bddfadfe2a28163f7af7adbdce96f4d22c31b2f648ba2901f0c5fc20e + languageName: node + linkType: hard + "fdir@npm:^6.4.4": version: 6.4.6 resolution: "fdir@npm:6.4.6" @@ -5148,6 +5846,15 @@ __metadata: languageName: node linkType: hard +"figures@npm:^3.2.0": + version: 3.2.0 + resolution: "figures@npm:3.2.0" + dependencies: + escape-string-regexp: "npm:^1.0.5" + checksum: 10c0/9c421646ede432829a50bc4e55c7a4eb4bcb7cc07b5bab2f471ef1ab9a344595bbebb6c5c21470093fbb730cd81bbca119624c40473a125293f656f49cb47629 + languageName: node + linkType: hard + "file-entry-cache@npm:^8.0.0": version: 8.0.0 resolution: "file-entry-cache@npm:8.0.0" @@ -5222,7 +5929,14 @@ __metadata: languageName: node linkType: hard -"form-data@npm:^4.0.0": +"forever-agent@npm:~0.6.1": + version: 0.6.1 + resolution: "forever-agent@npm:0.6.1" + checksum: 10c0/364f7f5f7d93ab661455351ce116a67877b66f59aca199559a999bd39e3cfadbfbfacc10415a915255e2210b30c23febe9aec3ca16bf2d1ff11c935a1000e24c + languageName: node + linkType: hard + +"form-data@npm:^4.0.0, form-data@npm:~4.0.0": version: 4.0.3 resolution: "form-data@npm:4.0.3" dependencies: @@ -5253,6 +5967,18 @@ __metadata: languageName: node linkType: hard +"fs-extra@npm:^9.1.0": + version: 9.1.0 + resolution: "fs-extra@npm:9.1.0" + dependencies: + at-least-node: "npm:^1.0.0" + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: 10c0/9b808bd884beff5cb940773018179a6b94a966381d005479f00adda6b44e5e3d4abf765135773d849cc27efe68c349e4a7b86acd7d3306d5932c14f3a4b17a92 + languageName: node + linkType: hard + "fs-minipass@npm:^3.0.0": version: 3.0.3 resolution: "fs-minipass@npm:3.0.3" @@ -5332,6 +6058,15 @@ __metadata: languageName: node linkType: hard +"get-stream@npm:^5.0.0, get-stream@npm:^5.1.0": + version: 5.2.0 + resolution: "get-stream@npm:5.2.0" + dependencies: + pump: "npm:^3.0.0" + checksum: 10c0/43797ffd815fbb26685bf188c8cfebecb8af87b3925091dd7b9a9c915993293d78e3c9e1bce125928ff92f2d0796f3889b92b5ec6d58d1041b574682132e0a80 + languageName: node + linkType: hard + "get-stream@npm:^6.0.0": version: 6.0.1 resolution: "get-stream@npm:6.0.1" @@ -5359,6 +6094,24 @@ __metadata: languageName: node linkType: hard +"getos@npm:^3.2.1": + version: 3.2.1 + resolution: "getos@npm:3.2.1" + dependencies: + async: "npm:^3.2.0" + checksum: 10c0/21556fca1da4dfc8f1707261b4f9ff19b9e9bfefa76478249d2abddba3cd014bd6c5360634add1590b27e0b27d422e8f997dddaa0234aae1fa4c54f33f82e841 + languageName: node + linkType: hard + +"getpass@npm:^0.1.1": + version: 0.1.7 + resolution: "getpass@npm:0.1.7" + dependencies: + assert-plus: "npm:^1.0.0" + checksum: 10c0/c13f8530ecf16fc509f3fa5cd8dd2129ffa5d0c7ccdf5728b6022d52954c2d24be3706b4cdf15333eec52f1fbb43feb70a01dabc639d1d10071e371da8aaa52f + languageName: node + linkType: hard + "glob-parent@npm:^5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" @@ -5393,6 +6146,22 @@ __metadata: languageName: node linkType: hard +"global-dirs@npm:^3.0.0": + version: 3.0.1 + resolution: "global-dirs@npm:3.0.1" + dependencies: + ini: "npm:2.0.0" + checksum: 10c0/ef65e2241a47ff978f7006a641302bc7f4c03dfb98783d42bf7224c136e3a06df046e70ee3a010cf30214114755e46c9eb5eb1513838812fbbe0d92b14c25080 + 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" @@ -5493,6 +6262,16 @@ __metadata: languageName: node linkType: hard +"hasha@npm:5.2.2": + version: 5.2.2 + resolution: "hasha@npm:5.2.2" + dependencies: + is-stream: "npm:^2.0.0" + type-fest: "npm:^0.8.0" + checksum: 10c0/9d10d4e665a37beea6e18ba3a0c0399a05b26e505c5ff2fe9115b64fedb3ca95f68c89cf15b08ee4d09fd3064b5e1bfc8e8247353c7aa6b7388471d0f86dca74 + languageName: node + linkType: hard + "hasown@npm:^2.0.2": version: 2.0.2 resolution: "hasown@npm:2.0.2" @@ -5553,6 +6332,17 @@ __metadata: languageName: node linkType: hard +"http-signature@npm:~1.4.0": + version: 1.4.0 + resolution: "http-signature@npm:1.4.0" + dependencies: + assert-plus: "npm:^1.0.0" + jsprim: "npm:^2.0.2" + sshpk: "npm:^1.18.0" + checksum: 10c0/b9806f5a9ed82a146589837d175c43b596b1cc8c9431665e83d47c152aa8a4629dd1b1e050f8f56e7f17f62cf97b58e888775093310441ddee5f105f28646b2b + languageName: node + linkType: hard + "http2-client@npm:^1.2.5": version: 1.3.5 resolution: "http2-client@npm:1.3.5" @@ -5570,6 +6360,13 @@ __metadata: languageName: node linkType: hard +"human-signals@npm:^1.1.1": + version: 1.1.1 + resolution: "human-signals@npm:1.1.1" + checksum: 10c0/18810ed239a7a5e23fb6c32d0fd4be75d7cd337a07ad59b8dbf0794cb0761e6e628349ee04c409e605fe55344716eab5d0a47a62ba2a2d0d367c89a2b4247b1e + languageName: node + linkType: hard + "human-signals@npm:^2.1.0": version: 2.1.0 resolution: "human-signals@npm:2.1.0" @@ -5586,7 +6383,7 @@ __metadata: languageName: node linkType: hard -"ieee754@npm:^1.2.1": +"ieee754@npm:^1.1.13, ieee754@npm:^1.2.1": version: 1.2.1 resolution: "ieee754@npm:1.2.1" checksum: 10c0/b0782ef5e0935b9f12883a2e2aa37baa75da6e66ce6515c168697b42160807d9330de9a32ec1ed73149aea02e0d822e572bca6f1e22bdcbd2149e13b050b17bb @@ -5638,6 +6435,13 @@ __metadata: languageName: node linkType: hard +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 10c0/1e1904ddb0cb3d6cce7cd09e27a90184908b7a5d5c21b92e232c93579d314f0b83c246ffb035493d0504b1e9147ba2c9b21df0030f48673fba0496ecd698161f + languageName: node + linkType: hard + "inherits@npm:^2.0.1": version: 2.0.4 resolution: "inherits@npm:2.0.4" @@ -5645,6 +6449,13 @@ __metadata: languageName: node linkType: hard +"ini@npm:2.0.0": + version: 2.0.0 + resolution: "ini@npm:2.0.0" + checksum: 10c0/2e0c8f386369139029da87819438b20a1ff3fe58372d93fb1a86e9d9344125ace3a806b8ec4eb160a46e64cbc422fe68251869441676af49b7fc441af2389c25 + languageName: node + linkType: hard + "internal-slot@npm:^1.1.0": version: 1.1.0 resolution: "internal-slot@npm:1.1.0" @@ -5656,7 +6467,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: @@ -5758,7 +6569,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: @@ -5846,6 +6657,16 @@ __metadata: languageName: node linkType: hard +"is-installed-globally@npm:~0.4.0": + version: 0.4.0 + resolution: "is-installed-globally@npm:0.4.0" + dependencies: + global-dirs: "npm:^3.0.0" + is-path-inside: "npm:^3.0.2" + checksum: 10c0/f3e6220ee5824b845c9ed0d4b42c24272701f1f9926936e30c0e676254ca5b34d1b92c6205cae11b283776f9529212c0cdabb20ec280a6451677d6493ca9c22d + languageName: node + linkType: hard + "is-map@npm:^2.0.3": version: 2.0.3 resolution: "is-map@npm:2.0.3" @@ -5877,6 +6698,13 @@ __metadata: languageName: node linkType: hard +"is-path-inside@npm:^3.0.2": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: 10c0/cf7d4ac35fb96bab6a1d2c3598fe5ebb29aafb52c0aaa482b5a3ed9d8ba3edc11631e3ec2637660c44b3ce0e61a08d54946e8af30dec0b60a7c27296c68ffd05 + languageName: node + linkType: hard + "is-regex@npm:^1.2.1": version: 1.2.1 resolution: "is-regex@npm:1.2.1" @@ -5942,6 +6770,20 @@ __metadata: languageName: node linkType: hard +"is-typedarray@npm:~1.0.0": + version: 1.0.0 + resolution: "is-typedarray@npm:1.0.0" + checksum: 10c0/4c096275ba041a17a13cca33ac21c16bc4fd2d7d7eb94525e7cd2c2f2c1a3ab956e37622290642501ff4310601e413b675cf399ad6db49855527d2163b3eeeec + languageName: node + linkType: hard + +"is-unicode-supported@npm:^0.1.0": + version: 0.1.0 + resolution: "is-unicode-supported@npm:0.1.0" + checksum: 10c0/00cbe3455c3756be68d2542c416cab888aebd5012781d6819749fefb15162ff23e38501fe681b3d751c73e8ff561ac09a5293eba6f58fdf0178462ce6dcb3453 + languageName: node + linkType: hard + "is-weakmap@npm:^2.0.2": version: 2.0.2 resolution: "is-weakmap@npm:2.0.2" @@ -5989,6 +6831,13 @@ __metadata: languageName: node linkType: hard +"isstream@npm:~0.1.2": + version: 0.1.2 + resolution: "isstream@npm:0.1.2" + checksum: 10c0/a6686a878735ca0a48e0d674dd6d8ad31aedfaf70f07920da16ceadc7577b46d67179a60b313f2e6860cb097a2c2eb3cbd0b89e921ae89199a59a17c3273d66f + languageName: node + linkType: hard + "iterator.prototype@npm:^1.1.4": version: 1.1.5 resolution: "iterator.prototype@npm:1.1.5" @@ -6064,6 +6913,13 @@ __metadata: languageName: node linkType: hard +"jsbn@npm:~0.1.0": + version: 0.1.1 + resolution: "jsbn@npm:0.1.1" + checksum: 10c0/e046e05c59ff880ee4ef68902dbdcb6d2f3c5d60c357d4d68647dc23add556c31c0e5f41bdb7e69e793dd63468bd9e085da3636341048ef577b18f5b713877c0 + 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" @@ -6092,6 +6948,13 @@ __metadata: languageName: node linkType: hard +"json-schema@npm:0.4.0": + version: 0.4.0 + resolution: "json-schema@npm:0.4.0" + checksum: 10c0/d4a637ec1d83544857c1c163232f3da46912e971d5bf054ba44fdb88f07d8d359a462b4aec46f2745efbc57053365608d88bc1d7b1729f7b4fc3369765639ed3 + 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" @@ -6099,6 +6962,13 @@ __metadata: languageName: node linkType: hard +"json-stringify-safe@npm:~5.0.1": + version: 5.0.1 + resolution: "json-stringify-safe@npm:5.0.1" + checksum: 10c0/7dbf35cd0411d1d648dceb6d59ce5857ec939e52e4afc37601aa3da611f0987d5cee5b38d58329ceddf3ed48bd7215229c8d52059ab01f2444a338bf24ed0f37 + languageName: node + linkType: hard + "json5@npm:^1.0.2": version: 1.0.2 resolution: "json5@npm:1.0.2" @@ -6167,6 +7037,18 @@ __metadata: languageName: node linkType: hard +"jsprim@npm:^2.0.2": + version: 2.0.2 + resolution: "jsprim@npm:2.0.2" + dependencies: + assert-plus: "npm:1.0.0" + extsprintf: "npm:1.3.0" + json-schema: "npm:0.4.0" + verror: "npm:1.10.0" + checksum: 10c0/677be2d41df536c92c6d0114a492ef197084018cfbb1a3e10b1fa1aad889564b2e3a7baa6af7949cc2d73678f42368b0be165a26bd4e4de6883a30dd6a24e98d + 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" @@ -6204,6 +7086,13 @@ __metadata: languageName: node linkType: hard +"lazy-ass@npm:^1.6.0": + version: 1.6.0 + resolution: "lazy-ass@npm:1.6.0" + checksum: 10c0/4af6cb9a333fbc811268c745f9173fba0f99ecb817cc9c0fae5dbf986b797b730ff525504128f6623b91aba32b02124553a34b0d14de3762b637b74d7233f3bd + languageName: node + linkType: hard + "leven@npm:3.1.0, leven@npm:^3.1.0": version: 3.1.0 resolution: "leven@npm:3.1.0" @@ -6340,6 +7229,27 @@ __metadata: languageName: node linkType: hard +"listr2@npm:^3.8.3": + version: 3.14.0 + resolution: "listr2@npm:3.14.0" + dependencies: + cli-truncate: "npm:^2.1.0" + colorette: "npm:^2.0.16" + log-update: "npm:^4.0.0" + p-map: "npm:^4.0.0" + rfdc: "npm:^1.3.0" + rxjs: "npm:^7.5.1" + through: "npm:^2.3.8" + wrap-ansi: "npm:^7.0.0" + peerDependencies: + enquirer: ">= 2.3.0 < 3" + peerDependenciesMeta: + enquirer: + optional: true + checksum: 10c0/8301703876ad6bf50cd769e9c1169c2aa435951d69d4f54fc202a13c1b6006a9b3afbcf9842440eb22f08beec4d311d365e31d4ed2e0fcabf198d8085b06a421 + languageName: node + linkType: hard + "locate-path@npm:^6.0.0": version: 6.0.0 resolution: "locate-path@npm:6.0.0" @@ -6349,6 +7259,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" @@ -6377,6 +7294,13 @@ __metadata: languageName: node linkType: hard +"lodash.once@npm:^4.1.1": + version: 4.1.1 + resolution: "lodash.once@npm:4.1.1" + checksum: 10c0/46a9a0a66c45dd812fcc016e46605d85ad599fe87d71a02f6736220554b52ffbe82e79a483ad40f52a8a95755b0d1077fba259da8bfb6694a7abbf4a48f1fc04 + languageName: node + linkType: hard + "lodash.topath@npm:^4.5.2": version: 4.5.2 resolution: "lodash.topath@npm:4.5.2" @@ -6412,6 +7336,28 @@ __metadata: languageName: node linkType: hard +"log-symbols@npm:^4.0.0": + version: 4.1.0 + resolution: "log-symbols@npm:4.1.0" + dependencies: + chalk: "npm:^4.1.0" + is-unicode-supported: "npm:^0.1.0" + checksum: 10c0/67f445a9ffa76db1989d0fa98586e5bc2fd5247260dafb8ad93d9f0ccd5896d53fb830b0e54dade5ad838b9de2006c826831a3c528913093af20dff8bd24aca6 + languageName: node + linkType: hard + +"log-update@npm:^4.0.0": + version: 4.0.0 + resolution: "log-update@npm:4.0.0" + dependencies: + ansi-escapes: "npm:^4.3.0" + cli-cursor: "npm:^3.1.0" + slice-ansi: "npm:^4.0.0" + wrap-ansi: "npm:^6.2.0" + checksum: 10c0/18b299e230432a156f2535660776406d15ba8bb7817dd3eaadd58004b363756d4ecaabcd658f9949f90b62ea7d3354423be3fdeb7a201ab951ec0e8d6139af86 + languageName: node + linkType: hard + "loglevel-plugin-prefix@npm:0.8.4": version: 0.8.4 resolution: "loglevel-plugin-prefix@npm:0.8.4" @@ -6454,12 +7400,12 @@ __metadata: languageName: node linkType: hard -"lucide-react@npm:^0.511.0": - version: 0.511.0 - resolution: "lucide-react@npm:0.511.0" +"lucide-react@npm:^0.515.0": + version: 0.515.0 + resolution: "lucide-react@npm:0.515.0" peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 - checksum: 10c0/bf09dd73cf2233abea90506ad31a91739555d761062722acbe045cb73e274f035b196472de0971a8a8f0645b2b54e3f21b8c1980fe87c909ca93171a9c28428a + checksum: 10c0/00485e09ab3d0bbb34797b1f368c269e8708522b6e2f46fd84dd5bd99741546487be9a65a260f274e8049b81cc37687566e26132f5752352c8d9bc8e5d0b3dea languageName: node linkType: hard @@ -6470,6 +7416,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" @@ -6549,39 +7502,49 @@ __metadata: "@fortawesome/react-fontawesome": "npm:^0.2.2" "@hookform/resolvers": "npm:^5.0.1" "@prisma/client": "npm:^6.9.0" - "@radix-ui/react-dropdown-menu": "npm:^2.1.14" + "@radix-ui/react-avatar": "npm:^1.1.10" + "@radix-ui/react-collapsible": "npm:^1.1.11" + "@radix-ui/react-dialog": "npm:^1.1.14" + "@radix-ui/react-dropdown-menu": "npm:^2.1.15" "@radix-ui/react-hover-card": "npm:^1.1.13" "@radix-ui/react-label": "npm:^2.1.6" "@radix-ui/react-scroll-area": "npm:^1.2.8" "@radix-ui/react-select": "npm:^2.2.4" - "@radix-ui/react-separator": "npm:^1.1.6" - "@radix-ui/react-slot": "npm:^1.2.2" + "@radix-ui/react-separator": "npm:^1.1.7" + "@radix-ui/react-slot": "npm:^1.2.3" "@radix-ui/react-switch": "npm:^1.2.4" "@radix-ui/react-tabs": "npm:^1.1.11" + "@radix-ui/react-tooltip": "npm:^1.2.7" "@tailwindcss/postcss": "npm:4.1.10" "@tanstack/react-query": "npm:^5.80.7" - "@types/node": "npm:22.15.32" + "@types/node": "npm:22.15.33" "@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" bcryptjs: "npm:^3.0.2" class-variance-authority: "npm:^0.7.1" clsx: "npm:^2.1.1" + cypress: "npm:14.5.0" + date-fns: "npm:^4.1.0" dotenv-cli: "npm:8.0.0" eslint: "npm:9.29.0" 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.91" + lucide-react: "npm:^0.515.0" + next: "npm:15.3.4" 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.10.1" - react: "npm:^19.0.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-error-boundary: "npm:^6.0.0" react-hook-form: "npm:^7.56.4" swagger-ui-react: "npm:^5.24.1" tailwind-merge: "npm:^3.2.0" @@ -6591,9 +7554,17 @@ __metadata: tw-animate-css: "npm:1.3.4" typescript: "npm:5.8.3" zod: "npm:^3.25.60" + zod-validation-error: "npm:^3.5.2" languageName: unknown linkType: soft +"memoize-one@npm:^6.0.0": + version: 6.0.0 + resolution: "memoize-one@npm:6.0.0" + checksum: 10c0/45c88e064fd715166619af72e8cf8a7a17224d6edf61f7a8633d740ed8c8c0558a4373876c9b8ffc5518c2b65a960266adf403cc215cb1e90f7e262b58991f54 + languageName: node + linkType: hard + "merge-stream@npm:^2.0.0": version: 2.0.0 resolution: "merge-stream@npm:2.0.0" @@ -6625,7 +7596,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.12": +"mime-types@npm:^2.1.12, mime-types@npm:~2.1.19": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -6686,7 +7657,7 @@ __metadata: languageName: node linkType: hard -"minimist@npm:^1.2.0, minimist@npm:^1.2.6": +"minimist@npm:^1.2.0, minimist@npm:^1.2.6, minimist@npm:^1.2.8": version: 1.2.8 resolution: "minimist@npm:1.2.8" checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 @@ -6778,6 +7749,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" @@ -6794,7 +7781,7 @@ __metadata: languageName: node linkType: hard -"napi-postinstall@npm:^0.2.2": +"napi-postinstall@npm:^0.2.4": version: 0.2.4 resolution: "napi-postinstall@npm:0.2.4" bin: @@ -6856,27 +7843,29 @@ __metadata: languageName: node linkType: hard -"next@npm:15.4.0-canary.91": - version: 15.4.0-canary.91 - resolution: "next@npm:15.4.0-canary.91" +"next@npm:15.3.4": + version: 15.3.4 + resolution: "next@npm:15.3.4" dependencies: - "@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" + "@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" "@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.51.1 + "@playwright/test": ^1.41.2 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 @@ -6911,7 +7900,7 @@ __metadata: optional: true bin: next: dist/bin/next - checksum: 10c0/5d08e5365d52f9f941dcbb02e7a5c56cf68f931be1a60b1386ce042a12722938e657d6c3a4bcd8c573a88b214a1bb2a0a757b1a339aa751483fecf3b987e66e5 + checksum: 10c0/52d3fba6f53d5d2a339cbde433ab360301e9a0a0d9b95a656bf29ce1af43f02e9cc32571d5d4095bcb8ab7a795207d6e75c64b33fc1f90d21f2f9b157cc9a503 languageName: node linkType: hard @@ -7041,7 +8030,7 @@ __metadata: languageName: node linkType: hard -"npm-run-path@npm:^4.0.1": +"npm-run-path@npm:^4.0.0, npm-run-path@npm:^4.0.1": version: 4.0.1 resolution: "npm-run-path@npm:4.0.1" dependencies: @@ -7185,7 +8174,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: @@ -7197,7 +8186,16 @@ __metadata: languageName: node linkType: hard -"onetime@npm:^5.1.2": +"once@npm:^1.3.1, once@npm:^1.4.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: "npm:1" + checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 + languageName: node + linkType: hard + +"onetime@npm:^5.1.0, onetime@npm:^5.1.2": version: 5.1.2 resolution: "onetime@npm:5.1.2" dependencies: @@ -7233,7 +8231,7 @@ __metadata: languageName: node linkType: hard -"openapi3-ts@npm:4.4.0, openapi3-ts@npm:^4.1.2, openapi3-ts@npm:^4.2.2": +"openapi3-ts@npm:4.4.0": version: 4.4.0 resolution: "openapi3-ts@npm:4.4.0" dependencies: @@ -7242,6 +8240,15 @@ __metadata: languageName: node linkType: hard +"openapi3-ts@npm:^4.1.2, openapi3-ts@npm:^4.2.2": + version: 4.5.0 + resolution: "openapi3-ts@npm:4.5.0" + dependencies: + yaml: "npm:^2.8.0" + checksum: 10c0/97de2d24e9ceffb89e1388e137e4a6e17ee57a02dce0c938a5e98b1338ac72b31e8b2ce8dd28945ad43fae8bee2a145892cb548ba5ae60b0930f1b6b79b0747d + languageName: node + linkType: hard + "optionator@npm:^0.9.3": version: 0.9.4 resolution: "optionator@npm:0.9.4" @@ -7292,6 +8299,13 @@ __metadata: languageName: node linkType: hard +"ospath@npm:^1.2.2": + version: 1.2.2 + resolution: "ospath@npm:1.2.2" + checksum: 10c0/e485a6ca91964f786163408b093860bf26a9d9704d83ec39ccf463b9f11ea712b780b23b73d1f64536de62c5f66244dd94ed83fc9ffe3c1564dd1eed5cdae923 + languageName: node + linkType: hard + "own-keys@npm:^1.0.1": version: 1.0.1 resolution: "own-keys@npm:1.0.1" @@ -7321,6 +8335,15 @@ __metadata: languageName: node linkType: hard +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: "npm:^3.0.0" + checksum: 10c0/592c05bd6262c466ce269ff172bb8de7c6975afca9b50c975135b974e9bdaafbfe80e61aaaf5be6d1200ba08b30ead04b88cfa7e25ff1e3b93ab28c9f62a2c75 + languageName: node + linkType: hard + "p-map@npm:^7.0.2": version: 7.0.3 resolution: "p-map@npm:7.0.3" @@ -7396,6 +8419,20 @@ __metadata: languageName: node linkType: hard +"pend@npm:~1.2.0": + version: 1.2.0 + resolution: "pend@npm:1.2.0" + checksum: 10c0/8a87e63f7a4afcfb0f9f77b39bb92374afc723418b9cb716ee4257689224171002e07768eeade4ecd0e86f1fa3d8f022994219fb45634f2dbd78c6803e452458 + languageName: node + linkType: hard + +"performance-now@npm:^2.1.0": + version: 2.1.0 + resolution: "performance-now@npm:2.1.0" + checksum: 10c0/22c54de06f269e29f640e0e075207af57de5052a3d15e360c09b9a8663f393f6f45902006c1e71aa8a5a1cdfb1a47fe268826f8496d6425c362f00f5bc3e85d9 + languageName: node + linkType: hard + "picocolors@npm:^1.0.0, picocolors@npm:^1.1.1": version: 1.1.1 resolution: "picocolors@npm:1.1.1" @@ -7417,6 +8454,13 @@ __metadata: languageName: node linkType: hard +"pify@npm:^2.2.0": + version: 2.3.0 + resolution: "pify@npm:2.3.0" + checksum: 10c0/551ff8ab830b1052633f59cb8adc9ae8407a436e06b4a9718bcb27dc5844b83d535c3a8512b388b6062af65a98c49bdc0dd523d8b2617b188f7c8fee457158dc + languageName: node + linkType: hard + "pony-cause@npm:^1.1.1": version: 1.1.1 resolution: "pony-cause@npm:1.1.1" @@ -7485,6 +8529,13 @@ __metadata: languageName: node linkType: hard +"pretty-bytes@npm:^5.6.0": + version: 5.6.0 + resolution: "pretty-bytes@npm:5.6.0" + checksum: 10c0/f69f494dcc1adda98dbe0e4a36d301e8be8ff99bfde7a637b2ee2820e7cb583b0fc0f3a63b0e3752c01501185a5cf38602c7be60da41bdf84ef5b70e89c370f3 + languageName: node + linkType: hard + "prisma@npm:6.10.1": version: 6.10.1 resolution: "prisma@npm:6.10.1" @@ -7540,7 +8591,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: @@ -7560,6 +8611,13 @@ __metadata: languageName: node linkType: hard +"proxy-from-env@npm:1.0.0": + version: 1.0.0 + resolution: "proxy-from-env@npm:1.0.0" + checksum: 10c0/c64df9b21f7f820dc882cd6f7f81671840acd28b9688ee3e3e6af47a56ec7f0edcabe5bc96b32b26218b35eeff377bcc27ac27f89b6b21401003e187ff13256f + languageName: node + linkType: hard + "proxy-from-env@npm:^1.1.0": version: 1.1.0 resolution: "proxy-from-env@npm:1.1.0" @@ -7567,6 +8625,16 @@ __metadata: languageName: node linkType: hard +"pump@npm:^3.0.0": + version: 3.0.3 + resolution: "pump@npm:3.0.3" + dependencies: + end-of-stream: "npm:^1.1.0" + once: "npm:^1.3.1" + checksum: 10c0/ada5cdf1d813065bbc99aa2c393b8f6beee73b5de2890a8754c9f488d7323ffd2ca5f5a0943b48934e3fcbd97637d0337369c3c631aeb9614915db629f1c75c9 + languageName: node + linkType: hard + "punycode.js@npm:^2.3.1": version: 2.3.1 resolution: "punycode.js@npm:2.3.1" @@ -7581,6 +8649,15 @@ __metadata: languageName: node linkType: hard +"qs@npm:6.14.0": + version: 6.14.0 + resolution: "qs@npm:6.14.0" + dependencies: + side-channel: "npm:^1.1.0" + checksum: 10c0/8ea5d91bf34f440598ee389d4a7d95820e3b837d3fd9f433871f7924801becaa0cd3b3b4628d49a7784d06a8aea9bc4554d2b6d8d584e2d221dc06238a42909c + languageName: node + linkType: hard + "querystringify@npm:^2.1.1": version: 2.2.0 resolution: "querystringify@npm:2.2.0" @@ -7630,6 +8707,33 @@ __metadata: languageName: node linkType: hard +"react-big-calendar@npm:^1.18.0": + version: 1.19.4 + resolution: "react-big-calendar@npm:1.19.4" + dependencies: + "@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: + react: ^16.14.0 || ^17 || ^18 || ^19 + react-dom: ^16.14.0 || ^17 || ^18 || ^19 + checksum: 10c0/78730e6396c06a27b24af860fa64d063f6407ccd12546116eb8cb2f274d827891c68a701b9c83f9903f63e5dea03fb6a3dd46d6a0a9186b3ab2f7e1d994fe86b + 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" @@ -7642,6 +8746,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" @@ -7665,6 +8783,17 @@ __metadata: languageName: node linkType: hard +"react-error-boundary@npm:^6.0.0": + version: 6.0.0 + resolution: "react-error-boundary@npm:6.0.0" + dependencies: + "@babel/runtime": "npm:^7.12.5" + peerDependencies: + react: ">=16.13.1" + checksum: 10c0/1914d600dee95a14f14af4afe9867b0d35c26c4f7826d23208800ba2a99728659029aad60a6ef95e13430b4d79c2c4c9b3585f50bf508450478760d2e4e732d8 + languageName: node + linkType: hard + "react-hook-form@npm:^7.56.4": version: 7.58.1 resolution: "react-hook-form@npm:7.58.1" @@ -7712,6 +8841,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" @@ -7798,7 +8953,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 @@ -7895,6 +9050,15 @@ __metadata: languageName: node linkType: hard +"request-progress@npm:^3.0.0": + version: 3.0.0 + resolution: "request-progress@npm:3.0.0" + dependencies: + throttleit: "npm:^1.0.0" + checksum: 10c0/d5dcb7155a738572c8781436f6b418e866066a30eea0f99a9ab26b6f0ed6c13637462bba736357de3899b8d30431ee9202ac956a5f8ccdd0d9d1ed0962000d14 + languageName: node + linkType: hard + "require-directory@npm:^2.1.1": version: 2.1.1 resolution: "require-directory@npm:2.1.1" @@ -7989,6 +9153,16 @@ __metadata: languageName: node linkType: hard +"restore-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "restore-cursor@npm:3.1.0" + dependencies: + onetime: "npm:^5.1.0" + signal-exit: "npm:^3.0.2" + checksum: 10c0/8051a371d6aa67ff21625fa94e2357bd81ffdc96267f3fb0fc4aaf4534028343836548ef34c240ffa8c25b280ca35eb36be00b3cb2133fa4f51896d7e73c6b4f + languageName: node + linkType: hard + "ret@npm:^0.2.0": version: 0.2.2 resolution: "ret@npm:0.2.2" @@ -8010,6 +9184,13 @@ __metadata: languageName: node linkType: hard +"rfdc@npm:^1.3.0": + version: 1.4.1 + resolution: "rfdc@npm:1.4.1" + checksum: 10c0/4614e4292356cafade0b6031527eea9bc90f2372a22c012313be1dcc69a3b90c7338158b414539be863fa95bfcb2ddcd0587be696841af4e6679d85e62c060c7 + languageName: node + linkType: hard + "run-parallel@npm:^1.1.9": version: 1.2.0 resolution: "run-parallel@npm:1.2.0" @@ -8019,6 +9200,15 @@ __metadata: languageName: node linkType: hard +"rxjs@npm:^7.5.1": + version: 7.8.2 + resolution: "rxjs@npm:7.8.2" + dependencies: + tslib: "npm:^2.1.0" + checksum: 10c0/1fcd33d2066ada98ba8f21fcbbcaee9f0b271de1d38dc7f4e256bfbc6ffcdde68c8bfb69093de7eeb46f24b1fb820620bf0223706cff26b4ab99a7ff7b2e2c45 + languageName: node + linkType: hard + "safe-array-concat@npm:^1.1.3": version: 1.1.3 resolution: "safe-array-concat@npm:1.1.3" @@ -8032,7 +9222,7 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0": +"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.2": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 @@ -8067,7 +9257,7 @@ __metadata: languageName: node linkType: hard -"safer-buffer@npm:>= 2.1.2 < 3.0.0": +"safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 @@ -8362,7 +9552,7 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^3.0.3": +"signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 @@ -8401,6 +9591,28 @@ __metadata: languageName: node linkType: hard +"slice-ansi@npm:^3.0.0": + version: 3.0.0 + resolution: "slice-ansi@npm:3.0.0" + dependencies: + ansi-styles: "npm:^4.0.0" + astral-regex: "npm:^2.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + checksum: 10c0/88083c9d0ca67d09f8b4c78f68833d69cabbb7236b74df5d741ad572bbf022deaf243fa54009cd434350622a1174ab267710fcc80a214ecc7689797fe00cb27c + languageName: node + linkType: hard + +"slice-ansi@npm:^4.0.0": + version: 4.0.0 + resolution: "slice-ansi@npm:4.0.0" + dependencies: + ansi-styles: "npm:^4.0.0" + astral-regex: "npm:^2.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + checksum: 10c0/6c25678db1270d4793e0327620f1e0f9f5bea4630123f51e9e399191bc52c87d6e6de53ed33538609e5eacbd1fab769fae00f3705d08d029f02102a540648918 + languageName: node + linkType: hard + "smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" @@ -8457,6 +9669,27 @@ __metadata: languageName: node linkType: hard +"sshpk@npm:^1.18.0": + version: 1.18.0 + resolution: "sshpk@npm:1.18.0" + dependencies: + asn1: "npm:~0.2.3" + assert-plus: "npm:^1.0.0" + bcrypt-pbkdf: "npm:^1.0.0" + dashdash: "npm:^1.12.0" + ecc-jsbn: "npm:~0.1.1" + getpass: "npm:^0.1.1" + jsbn: "npm:~0.1.0" + safer-buffer: "npm:^2.0.2" + tweetnacl: "npm:~0.14.0" + bin: + sshpk-conv: bin/sshpk-conv + sshpk-sign: bin/sshpk-sign + sshpk-verify: bin/sshpk-verify + checksum: 10c0/e516e34fa981cfceef45fd2e947772cc70dbd57523e5c608e2cd73752ba7f8a99a04df7c3ed751588e8d91956b6f16531590b35d3489980d1c54c38bebcd41b1 + languageName: node + linkType: hard + "ssri@npm:^12.0.0": version: 12.0.0 resolution: "ssri@npm:12.0.0" @@ -8483,6 +9716,13 @@ __metadata: languageName: node linkType: hard +"streamsearch@npm:^1.1.0": + version: 1.1.0 + resolution: "streamsearch@npm:1.1.0" + checksum: 10c0/fbd9aecc2621364384d157f7e59426f4bfd385e8b424b5aaa79c83a6f5a1c8fd2e4e3289e95de1eb3511cb96bb333d6281a9919fafce760e4edb35b2cd2facab + languageName: node + linkType: hard + "string-argv@npm:^0.3.2": version: 0.3.2 resolution: "string-argv@npm:0.3.2" @@ -8569,7 +9809,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: @@ -8656,6 +9896,15 @@ __metadata: languageName: node linkType: hard +"supports-color@npm:^8.1.1": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/ea1d3c275dd604c974670f63943ed9bd83623edc102430c05adb8efc56ba492746b6e95386e7831b872ec3807fd89dd8eb43f735195f37b5ec343e4234cc7e89 + languageName: node + linkType: hard + "supports-preserve-symlinks-flag@npm:^1.0.0": version: 1.0.0 resolution: "supports-preserve-symlinks-flag@npm:1.0.0" @@ -8756,6 +10005,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" @@ -8791,6 +10047,20 @@ __metadata: languageName: node linkType: hard +"throttleit@npm:^1.0.0": + version: 1.0.1 + resolution: "throttleit@npm:1.0.1" + checksum: 10c0/4d41a1bf467646b1aa7bec0123b78452a0e302d7344f6a67e43e68434f0a02ea3ba44df050a40c69adeb9cae3cbf6b36b38cfe94bcc3c4a8243c9b63e38e059b + languageName: node + linkType: hard + +"through@npm:^2.3.8": + version: 2.3.8 + resolution: "through@npm:2.3.8" + checksum: 10c0/4b09f3774099de0d4df26d95c5821a62faee32c7e96fb1f4ebd54a2d7c11c57fe88b0a0d49cf375de5fee5ae6bf4eb56dbbf29d07366864e2ee805349970d3cc + languageName: node + linkType: hard + "tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.13": version: 0.2.14 resolution: "tinyglobby@npm:0.2.14" @@ -8801,6 +10071,31 @@ __metadata: languageName: node linkType: hard +"tldts-core@npm:^6.1.86": + version: 6.1.86 + resolution: "tldts-core@npm:6.1.86" + checksum: 10c0/8133c29375f3f99f88fce5f4d62f6ecb9532b106f31e5423b27c1eb1b6e711bd41875184a456819ceaed5c8b94f43911b1ad57e25c6eb86e1fc201228ff7e2af + languageName: node + linkType: hard + +"tldts@npm:^6.1.32": + version: 6.1.86 + resolution: "tldts@npm:6.1.86" + dependencies: + tldts-core: "npm:^6.1.86" + bin: + tldts: bin/cli.js + checksum: 10c0/27ae7526d9d78cb97b2de3f4d102e0b4321d1ccff0648a7bb0e039ed54acbce86bacdcd9cd3c14310e519b457854e7bafbef1f529f58a1e217a737ced63f0940 + languageName: node + linkType: hard + +"tmp@npm:~0.2.3": + version: 0.2.3 + resolution: "tmp@npm:0.2.3" + checksum: 10c0/3e809d9c2f46817475b452725c2aaa5d11985cf18d32a7a970ff25b568438e2c076c2e8609224feef3b7923fa9749b74428e3e634f6b8e520c534eef2fd24125 + languageName: node + linkType: hard + "to-regex-range@npm:^5.0.1": version: 5.0.1 resolution: "to-regex-range@npm:5.0.1" @@ -8817,6 +10112,15 @@ __metadata: languageName: node linkType: hard +"tough-cookie@npm:^5.0.0": + version: 5.1.2 + resolution: "tough-cookie@npm:5.1.2" + dependencies: + tldts: "npm:^6.1.32" + checksum: 10c0/5f95023a47de0f30a902bba951664b359725597d8adeabc66a0b93a931c3af801e1e697dae4b8c21a012056c0ea88bd2bf4dfe66b2adcf8e2f42cd9796fe0626 + languageName: node + linkType: hard + "tr46@npm:~0.0.3": version: 0.0.3 resolution: "tr46@npm:0.0.3" @@ -8824,6 +10128,15 @@ __metadata: languageName: node linkType: hard +"tree-kill@npm:1.2.2": + version: 1.2.2 + resolution: "tree-kill@npm:1.2.2" + bin: + tree-kill: cli.js + checksum: 10c0/7b1b7c7f17608a8f8d20a162e7957ac1ef6cd1636db1aba92f4e072dc31818c2ff0efac1e3d91064ede67ed5dc57c565420531a8134090a12ac10cf792ab14d2 + languageName: node + linkType: hard + "tree-sitter-json@npm:=0.24.8": version: 0.24.8 resolution: "tree-sitter-json@npm:0.24.8" @@ -8974,6 +10287,15 @@ __metadata: languageName: node linkType: hard +"tunnel-agent@npm:^0.6.0": + version: 0.6.0 + resolution: "tunnel-agent@npm:0.6.0" + dependencies: + safe-buffer: "npm:^5.0.1" + checksum: 10c0/4c7a1b813e7beae66fdbf567a65ec6d46313643753d0beefb3c7973d66fcec3a1e7f39759f0a0b4465883499c6dc8b0750ab8b287399af2e583823e40410a17a + languageName: node + linkType: hard + "tw-animate-css@npm:1.3.4": version: 1.3.4 resolution: "tw-animate-css@npm:1.3.4" @@ -8981,6 +10303,13 @@ __metadata: languageName: node linkType: hard +"tweetnacl@npm:^0.14.3, tweetnacl@npm:~0.14.0": + version: 0.14.5 + resolution: "tweetnacl@npm:0.14.5" + checksum: 10c0/4612772653512c7bc19e61923fbf42903f5e0389ec76a4a1f17195859d114671ea4aa3b734c2029ce7e1fa7e5cc8b80580f67b071ecf0b46b5636d030a0102a2 + languageName: node + linkType: hard + "type-check@npm:^0.4.0, type-check@npm:~0.4.0": version: 0.4.0 resolution: "type-check@npm:0.4.0" @@ -8997,6 +10326,20 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^0.21.3": + version: 0.21.3 + resolution: "type-fest@npm:0.21.3" + checksum: 10c0/902bd57bfa30d51d4779b641c2bc403cdf1371fb9c91d3c058b0133694fcfdb817aef07a47f40faf79039eecbaa39ee9d3c532deff244f3a19ce68cea71a61e8 + languageName: node + linkType: hard + +"type-fest@npm:^0.8.0": + version: 0.8.1 + resolution: "type-fest@npm:0.8.1" + checksum: 10c0/dffbb99329da2aa840f506d376c863bd55f5636f4741ad6e65e82f5ce47e6914108f44f340a0b74009b0cb5d09d6752ae83203e53e98b1192cf80ecee5651636 + languageName: node + linkType: hard + "typed-array-buffer@npm:^1.0.3": version: 1.0.3 resolution: "typed-array-buffer@npm:1.0.3" @@ -9124,6 +10467,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" @@ -9171,29 +10528,29 @@ __metadata: linkType: hard "unrs-resolver@npm:^1.6.2": - version: 1.9.1 - resolution: "unrs-resolver@npm:1.9.1" + version: 1.9.2 + resolution: "unrs-resolver@npm:1.9.2" 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" + "@unrs/resolver-binding-android-arm-eabi": "npm:1.9.2" + "@unrs/resolver-binding-android-arm64": "npm:1.9.2" + "@unrs/resolver-binding-darwin-arm64": "npm:1.9.2" + "@unrs/resolver-binding-darwin-x64": "npm:1.9.2" + "@unrs/resolver-binding-freebsd-x64": "npm:1.9.2" + "@unrs/resolver-binding-linux-arm-gnueabihf": "npm:1.9.2" + "@unrs/resolver-binding-linux-arm-musleabihf": "npm:1.9.2" + "@unrs/resolver-binding-linux-arm64-gnu": "npm:1.9.2" + "@unrs/resolver-binding-linux-arm64-musl": "npm:1.9.2" + "@unrs/resolver-binding-linux-ppc64-gnu": "npm:1.9.2" + "@unrs/resolver-binding-linux-riscv64-gnu": "npm:1.9.2" + "@unrs/resolver-binding-linux-riscv64-musl": "npm:1.9.2" + "@unrs/resolver-binding-linux-s390x-gnu": "npm:1.9.2" + "@unrs/resolver-binding-linux-x64-gnu": "npm:1.9.2" + "@unrs/resolver-binding-linux-x64-musl": "npm:1.9.2" + "@unrs/resolver-binding-wasm32-wasi": "npm:1.9.2" + "@unrs/resolver-binding-win32-arm64-msvc": "npm:1.9.2" + "@unrs/resolver-binding-win32-ia32-msvc": "npm:1.9.2" + "@unrs/resolver-binding-win32-x64-msvc": "npm:1.9.2" + napi-postinstall: "npm:^0.2.4" dependenciesMeta: "@unrs/resolver-binding-android-arm-eabi": optional: true @@ -9233,7 +10590,14 @@ __metadata: optional: true "@unrs/resolver-binding-win32-x64-msvc": optional: true - checksum: 10c0/fded9251b6c180c92c0510abe63e4fa9a5a4adcdcf3c9f7920507dc9f1ec756de5e71d1258f12bf4a32f7042e1fe142b6dc1003d8a6fb4d0bf1234226c879b01 + checksum: 10c0/e3481cc19ea4b25f888e2412bbd80a729b13527a41b035e784b71d1a7d4e2109b58b174adce989085eb75c787435e80ffb385db2b1598288474f53beb01438c0 + languageName: node + linkType: hard + +"untildify@npm:^4.0.0": + version: 4.0.0 + resolution: "untildify@npm:4.0.0" + checksum: 10c0/d758e624c707d49f76f7511d75d09a8eda7f2020d231ec52b67ff4896bcf7013be3f9522d8375f57e586e9a2e827f5641c7e06ee46ab9c435fc2b2b2e9de517a languageName: node linkType: hard @@ -9294,7 +10658,7 @@ __metadata: languageName: node linkType: hard -"use-sync-external-store@npm:^1.4.0": +"use-sync-external-store@npm:^1.4.0, use-sync-external-store@npm:^1.5.0": version: 1.5.0 resolution: "use-sync-external-store@npm:1.5.0" peerDependencies: @@ -9310,6 +10674,15 @@ __metadata: languageName: node linkType: hard +"uuid@npm:^8.3.2": + version: 8.3.2 + resolution: "uuid@npm:8.3.2" + bin: + uuid: dist/bin/uuid + checksum: 10c0/bcbb807a917d374a49f475fae2e87fdca7da5e5530820ef53f65ba1d12131bd81a92ecf259cc7ce317cbe0f289e7d79fdfebcef9bfa3087c8c8a2fa304c9be54 + 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" @@ -9324,6 +10697,26 @@ __metadata: languageName: node linkType: hard +"verror@npm:1.10.0": + version: 1.10.0 + resolution: "verror@npm:1.10.0" + dependencies: + assert-plus: "npm:^1.0.0" + core-util-is: "npm:1.0.2" + extsprintf: "npm:^1.2.0" + checksum: 10c0/37ccdf8542b5863c525128908ac80f2b476eed36a32cb944de930ca1e2e78584cc435c4b9b4c68d0fc13a47b45ff364b4be43aa74f8804f9050140f660fb660d + languageName: node + linkType: hard + +"warning@npm:^4.0.3": + 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" @@ -9456,6 +10849,17 @@ __metadata: languageName: node linkType: hard +"wrap-ansi@npm:^6.2.0": + version: 6.2.0 + resolution: "wrap-ansi@npm:6.2.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/baad244e6e33335ea24e86e51868fe6823626e3a3c88d9a6674642afff1d34d9a154c917e74af8d845fd25d170c4ea9cf69a47133c3f3656e1252b3d462d9f6c + languageName: node + linkType: hard + "wrap-ansi@npm:^8.1.0": version: 8.1.0 resolution: "wrap-ansi@npm:8.1.0" @@ -9467,6 +10871,13 @@ __metadata: languageName: node linkType: hard +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 + languageName: node + linkType: hard + "xml-but-prettier@npm:^1.0.1": version: 1.0.1 resolution: "xml-but-prettier@npm:1.0.1" @@ -9518,7 +10929,7 @@ __metadata: languageName: node linkType: hard -"yaml@npm:^2.3.4, yaml@npm:^2.5.0, yaml@npm:^2.7.1": +"yaml@npm:^2.3.4, yaml@npm:^2.5.0, yaml@npm:^2.7.1, yaml@npm:^2.8.0": version: 2.8.0 resolution: "yaml@npm:2.8.0" bin: @@ -9549,6 +10960,16 @@ __metadata: languageName: node linkType: hard +"yauzl@npm:^2.10.0": + version: 2.10.0 + resolution: "yauzl@npm:2.10.0" + dependencies: + buffer-crc32: "npm:~0.2.3" + fd-slicer: "npm:~1.1.0" + checksum: 10c0/f265002af7541b9ec3589a27f5fb8f11cf348b53cc15e2751272e3c062cd73f3e715bc72d43257de71bbaecae446c3f1b14af7559e8ab0261625375541816422 + languageName: node + linkType: hard + "yn@npm:3.1.1": version: 3.1.1 resolution: "yn@npm:3.1.1" @@ -9570,6 +10991,15 @@ __metadata: languageName: node linkType: hard +"zod-validation-error@npm:^3.5.2": + version: 3.5.2 + resolution: "zod-validation-error@npm:3.5.2" + peerDependencies: + zod: ^3.25.0 + checksum: 10c0/da50926ec91c7ad2880bacc5010a53c42de58f73f7c4629baad8132695c4daf74dd68620787198da81aca85134471182ed4c566b5fc9bc5349aefd8540946d57 + languageName: node + linkType: hard + "zod@npm:^3.25.60": version: 3.25.67 resolution: "zod@npm:3.25.67"