From 53243bd4359e65a13233eb3baae3e9d0d6a82e43 Mon Sep 17 00:00:00 2001 From: aXenDeveloper Date: Fri, 1 Mar 2024 11:20:12 +0100 Subject: [PATCH 1/6] feat(forum): Add stats service with reclusive function --- .../src/apps/forum/forums/forums.module.ts | 7 +- .../apps/forum/forums/show/show.service.ts | 8 +- .../apps/forum/forums/show/stats.service.ts | 108 ++++++++++++++++++ 3 files changed, 121 insertions(+), 2 deletions(-) create mode 100644 backend/src/apps/forum/forums/show/stats.service.ts diff --git a/backend/src/apps/forum/forums/forums.module.ts b/backend/src/apps/forum/forums/forums.module.ts index 6acb55eaf..2fd21eaa4 100644 --- a/backend/src/apps/forum/forums/forums.module.ts +++ b/backend/src/apps/forum/forums/forums.module.ts @@ -2,8 +2,13 @@ import { Module } from "@nestjs/common"; import { ShowForumForumsResolver } from "./show/show.resolver"; import { ShowForumForumsService } from "./show/show.service"; +import { StatsShowForumForumsService } from "./show/stats.service"; @Module({ - providers: [ShowForumForumsResolver, ShowForumForumsService] + providers: [ + ShowForumForumsResolver, + ShowForumForumsService, + StatsShowForumForumsService + ] }) export class ForumsForumModule {} diff --git a/backend/src/apps/forum/forums/show/show.service.ts b/backend/src/apps/forum/forums/show/show.service.ts index 1543d619e..4748ba209 100644 --- a/backend/src/apps/forum/forums/show/show.service.ts +++ b/backend/src/apps/forum/forums/show/show.service.ts @@ -3,6 +3,7 @@ import { and, count, eq, ilike, inArray, isNull, or } from "drizzle-orm"; import { ShowForumForumsArgs } from "./dto/show.args"; import { ShowForumForumsObj } from "./dto/show.obj"; +import { StatsShowForumForumsService } from "./stats.service"; import { User } from "@/utils/decorators/user.decorator"; import { AccessDeniedError } from "@/utils/errors/AccessDeniedError"; @@ -19,7 +20,10 @@ import { SortDirectionEnum } from "@/types/database/sortDirection.type"; @Injectable() export class ShowForumForumsService { - constructor(private databaseService: DatabaseService) {} + constructor( + private databaseService: DatabaseService, + private statsService: StatsShowForumForumsService + ) {} async show( { @@ -134,6 +138,8 @@ export class ShowForumForumsService { } }); + // console.log(await this.statsService.stats({ id: forum.id })); + return { ...forum, parent: forum.parent_id diff --git a/backend/src/apps/forum/forums/show/stats.service.ts b/backend/src/apps/forum/forums/show/stats.service.ts new file mode 100644 index 000000000..f0c01b369 --- /dev/null +++ b/backend/src/apps/forum/forums/show/stats.service.ts @@ -0,0 +1,108 @@ +import { Injectable } from "@nestjs/common"; +import { count, inArray } from "drizzle-orm"; + +import { forum_posts } from "@/apps/admin/forum/database/schema/posts"; +import { DatabaseService } from "@/database/database.service"; +import { TextLanguage } from "@/types/database/text-language.type"; + +@Injectable() +export class StatsShowForumForumsService { + constructor(private databaseService: DatabaseService) {} + + protected async getAllChildren({ id }: { id: number }): Promise< + { + id: number; + name: TextLanguage[]; + }[] + > { + let children: { id: number; name: TextLanguage[] }[] = []; + + const directChildren = + await this.databaseService.db.query.forum_forums.findMany({ + where: (table, { eq }) => eq(table.parent_id, id), + columns: { + id: true + }, + with: { + name: true + } + }); + + for (const child of directChildren) { + children.push({ + id: child.id, + name: child.name + }); + + const grandChildren = await this.getAllChildren({ id: child.id }); + children = children.concat(grandChildren); + } + + return children; + } + + protected async getTotalTopics({ + forumIds + }: { + forumIds: number[]; + }): Promise<{ + ids: number[]; + totalCount: number; + }> { + const topics = + forumIds.length > 0 + ? await this.databaseService.db.query.forum_topics.findMany({ + where: (table, { inArray }) => inArray(table.forum_id, forumIds), + columns: { + id: true + } + }) + : []; + + return { + totalCount: topics.length, + ids: topics.map(topic => topic.id) + }; + } + + protected async getTotalCountPosts({ + topicIds + }: { + topicIds: number[]; + }): Promise { + const posts = + topicIds.length > 0 + ? await this.databaseService.db + .select({ count: count() }) + .from(forum_posts) + .where(inArray(forum_posts.topic_id, topicIds)) + : []; + + return posts[0].count; + } + + async stats({ id }: { id: number }): Promise<{ + children: { + id: number; + name: TextLanguage[]; + }[]; + topicsIds: number[]; + totalPosts: number; + totalTopics: number; + }> { + const children = await this.getAllChildren({ id }); + const topics = await this.getTotalTopics({ + forumIds: [id, ...children.map(child => child.id)] + }); + const totalPosts = await this.getTotalCountPosts({ + topicIds: topics.ids + }); + + return { + totalPosts: totalPosts - topics.totalCount, + totalTopics: topics.totalCount, + topicsIds: topics.ids, + children + }; + } +} From 37b1da0063dc7ec5c8e4e6150add7fb9cc1ca6d6 Mon Sep 17 00:00:00 2001 From: aXenDeveloper Date: Fri, 1 Mar 2024 11:52:25 +0100 Subject: [PATCH 2/6] refactor(forum): Delete children from count show query and parent object --- backend/schema.gql | 13 ---- .../apps/forum/forums/show/dto/show.obj.ts | 7 +- .../apps/forum/forums/show/show.service.ts | 73 ++++++++----------- frontend/graphql/hooks.ts | 27 +------ .../admin__forum_forums__show_short.gql | 7 -- .../forums/admin__forum_forums__show.gql | 2 - 6 files changed, 35 insertions(+), 94 deletions(-) diff --git a/backend/schema.gql b/backend/schema.gql index 19d5a9985..35ff874b3 100644 --- a/backend/schema.gql +++ b/backend/schema.gql @@ -49,7 +49,6 @@ type CreateForumForumsObj { description: [TextLanguage!]! id: Int! name: [TextLanguage!]! - parent: ShowForumForums position: Int! } @@ -464,15 +463,6 @@ type ShowCoreThemesObj { pageInfo: PageInfo! } -type ShowForumForums { - _count: ShowForumForumsCounts! - created: Int! - description: [TextLanguage!]! - id: Int! - name: [TextLanguage!]! - position: Int! -} - type ShowForumForumsAdmin { _count: ShowForumForumsCounts! children: [ChildrenShowForumForums!]! @@ -480,7 +470,6 @@ type ShowForumForumsAdmin { description: [TextLanguage!]! id: Int! name: [TextLanguage!]! - parent: ShowForumForums permissions: PermissionsForumForumsAdmin! position: Int! } @@ -491,7 +480,6 @@ type ShowForumForumsAdminObj { } type ShowForumForumsCounts { - children: Int! posts: Int! topics: Int! } @@ -508,7 +496,6 @@ type ShowForumForumsWithParent { description: [TextLanguage!]! id: Int! name: [TextLanguage!]! - parent: ShowForumForums permissions: PermissionsForumForums! position: Int! } diff --git a/backend/src/apps/forum/forums/show/dto/show.obj.ts b/backend/src/apps/forum/forums/show/dto/show.obj.ts index 7cd575f41..c936d39ee 100644 --- a/backend/src/apps/forum/forums/show/dto/show.obj.ts +++ b/backend/src/apps/forum/forums/show/dto/show.obj.ts @@ -5,9 +5,6 @@ import { TextLanguage } from "@/types/database/text-language.type"; @ObjectType() class ShowForumForumsCounts { - @Field(() => Int) - children: number; - @Field(() => Int) topics: number; @@ -67,8 +64,8 @@ export class ChildrenShowForumForums extends ShowForumForums { @ObjectType() export class ShowForumForumsWithParent extends FirstShowForumForums { - @Field(() => ShowForumForums, { nullable: true }) - parent: ShowForumForums | null; + // @Field(() => ShowForumForums, { nullable: true }) + // parent: ShowForumForums | null; @Field(() => [ChildrenShowForumForums]) children: ChildrenShowForumForums[]; diff --git a/backend/src/apps/forum/forums/show/show.service.ts b/backend/src/apps/forum/forums/show/show.service.ts index 4748ba209..84399da88 100644 --- a/backend/src/apps/forum/forums/show/show.service.ts +++ b/backend/src/apps/forum/forums/show/show.service.ts @@ -1,5 +1,5 @@ import { Injectable } from "@nestjs/common"; -import { and, count, eq, ilike, inArray, isNull, or } from "drizzle-orm"; +import { SQL, and, count, eq, ilike, inArray, isNull, or } from "drizzle-orm"; import { ShowForumForumsArgs } from "./dto/show.args"; import { ShowForumForumsObj } from "./dto/show.obj"; @@ -25,6 +25,30 @@ export class ShowForumForumsService { private statsService: StatsShowForumForumsService ) {} + protected async whereAccessToView({ + user + }: { + user: User | null; + }): Promise> { + const forumIds = + await this.databaseService.db.query.forum_forums_permissions.findMany({ + columns: { + forum_id: true + }, + where: (table, { eq }) => eq(table.group_id, user?.group.id ?? 1) // 1 - guest group id + }); + + const forumIdsSQL = + forumIds.length > 0 + ? inArray( + forum_forums.id, + forumIds.map(({ forum_id }) => forum_id) + ) + : undefined; + + return or(eq(forum_forums.can_all_view, true), forumIdsSQL); + } + async show( { cursor, @@ -39,6 +63,7 @@ export class ShowForumForumsService { ): Promise { let searchIds: number[] = []; + // Get forum ids by search if (search) { searchIds = await this.databaseService.db .select({ forum_id: forum_forums_name.id }) @@ -60,26 +85,6 @@ export class ShowForumForumsService { } }); - const forumIdsWithAccess = - await this.databaseService.db.query.forum_forums_permissions.findMany({ - columns: { - forum_id: true - }, - where: (table, { eq }) => eq(table.group_id, user?.group.id ?? 1) // 1 - guest group id - }); - - const wherePermissions = and( - or( - eq(forum_forums.can_all_view, true), - forumIdsWithAccess.length > 0 - ? inArray( - forum_forums.id, - forumIdsWithAccess.map(({ forum_id }) => forum_id) - ) - : undefined - ) - ); - const whereParent = parent_id ? eq(forum_forums.parent_id, parent_id) : isNull(forum_forums.parent_id); @@ -87,9 +92,10 @@ export class ShowForumForumsService { const idsCondition = ids?.length > 0 ? inArray(forum_forums.id, ids) : undefined; + const whereAccess = await this.whereAccessToView({ user }); const where = and( pagination.where, - wherePermissions, + whereAccess, show_all_forums ? idsCondition : idsCondition || whereParent, searchIds.length > 0 ? inArray(forum_forums.id, searchIds) : undefined ); @@ -101,13 +107,6 @@ export class ShowForumForumsService { name: true, description: true, permissions: true, - parent: { - with: { - name: true, - description: true, - permissions: true - } - }, topics: { with: { posts: true @@ -118,13 +117,11 @@ export class ShowForumForumsService { const edges = await Promise.all( forums.map(async forum => { + // If show_all_forums is true, we don't need to fetch children const children = show_all_forums ? [] : await this.databaseService.db.query.forum_forums.findMany({ - where: and( - eq(forum_forums.parent_id, forum.id), - wherePermissions - ), + where: and(eq(forum_forums.parent_id, forum.id), whereAccess), orderBy: (table, { asc }) => [asc(table.position)], with: { name: true, @@ -142,11 +139,7 @@ export class ShowForumForumsService { return { ...forum, - parent: forum.parent_id - ? { ...forum.parent, _count: { children: 0, topics: 0, posts: 0 } } - : null, _count: { - children: children.length, topics: forum.topics.length, posts: forum.topics.reduce( (acc, item) => acc + item.posts.length, @@ -157,10 +150,7 @@ export class ShowForumForumsService { children.map(async child => { const children = await this.databaseService.db.query.forum_forums.findMany({ - where: and( - eq(forum_forums.parent_id, child.id), - wherePermissions - ), + where: and(eq(forum_forums.parent_id, child.id), whereAccess), orderBy: (table, { asc }) => [asc(table.position)], with: { name: true, @@ -178,7 +168,6 @@ export class ShowForumForumsService { ...child, children, _count: { - children: children.length, topics: child.topics.length, posts: child.topics.reduce( (acc, item) => acc + item.posts.length, diff --git a/frontend/graphql/hooks.ts b/frontend/graphql/hooks.ts index 3c48a0fa0..55ed3c9ab 100644 --- a/frontend/graphql/hooks.ts +++ b/frontend/graphql/hooks.ts @@ -69,7 +69,6 @@ export type CreateForumForumsObj = { description: Array; id: Scalars['Int']['output']; name: Array; - parent?: Maybe; position: Scalars['Int']['output']; }; @@ -859,16 +858,6 @@ export type ShowCoreThemesObj = { pageInfo: PageInfo; }; -export type ShowForumForums = { - __typename?: 'ShowForumForums'; - _count: ShowForumForumsCounts; - created: Scalars['Int']['output']; - description: Array; - id: Scalars['Int']['output']; - name: Array; - position: Scalars['Int']['output']; -}; - export type ShowForumForumsAdmin = { __typename?: 'ShowForumForumsAdmin'; _count: ShowForumForumsCounts; @@ -877,7 +866,6 @@ export type ShowForumForumsAdmin = { description: Array; id: Scalars['Int']['output']; name: Array; - parent?: Maybe; permissions: PermissionsForumForumsAdmin; position: Scalars['Int']['output']; }; @@ -890,7 +878,6 @@ export type ShowForumForumsAdminObj = { export type ShowForumForumsCounts = { __typename?: 'ShowForumForumsCounts'; - children: Scalars['Int']['output']; posts: Scalars['Int']['output']; topics: Scalars['Int']['output']; }; @@ -909,7 +896,6 @@ export type ShowForumForumsWithParent = { description: Array; id: Scalars['Int']['output']; name: Array; - parent?: Maybe; permissions: PermissionsForumForums; position: Scalars['Int']['output']; }; @@ -1333,7 +1319,7 @@ export type Admin__Forum_Forums__Show_ShortQueryVariables = Exact<{ }>; -export type Admin__Forum_Forums__Show_ShortQuery = { __typename?: 'Query', admin__forum_forums__show: { __typename?: 'ShowForumForumsAdminObj', edges: Array<{ __typename?: 'ShowForumForumsAdmin', id: number, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, parent?: { __typename?: 'ShowForumForums', id: number, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }> } | null }> } }; +export type Admin__Forum_Forums__Show_ShortQuery = { __typename?: 'Query', admin__forum_forums__show: { __typename?: 'ShowForumForumsAdminObj', edges: Array<{ __typename?: 'ShowForumForumsAdmin', id: number, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }> }> } }; export type Forum_Posts__CreateMutationVariables = Exact<{ content: Array | TextLanguageInput; @@ -1492,7 +1478,7 @@ export type Admin__Forum_Forums__ShowQueryVariables = Exact<{ }>; -export type Admin__Forum_Forums__ShowQuery = { __typename?: 'Query', admin__forum_forums__show: { __typename?: 'ShowForumForumsAdminObj', edges: Array<{ __typename?: 'ShowForumForumsAdmin', id: number, position: number, created: number, description: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, children: Array<{ __typename?: 'ChildrenShowForumForums', created: number, id: number, position: number, description: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, _count: { __typename?: 'ShowForumForumsCounts', children: number, posts: number, topics: number } }>, permissions: { __typename?: 'PermissionsForumForumsAdmin', can_all_create: boolean, can_all_read: boolean, can_all_reply: boolean, can_all_view: boolean, groups: Array<{ __typename?: 'GroupsPermissionsForumForums', can_create: boolean, can_read: boolean, can_reply: boolean, can_view: boolean, id: number }> }, _count: { __typename?: 'ShowForumForumsCounts', children: number, posts: number, topics: number } }>, pageInfo: { __typename?: 'PageInfo', count: number, endCursor?: number | null, hasNextPage: boolean, hasPreviousPage: boolean, startCursor?: number | null, totalCount: number } } }; +export type Admin__Forum_Forums__ShowQuery = { __typename?: 'Query', admin__forum_forums__show: { __typename?: 'ShowForumForumsAdminObj', edges: Array<{ __typename?: 'ShowForumForumsAdmin', id: number, position: number, created: number, description: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, children: Array<{ __typename?: 'ChildrenShowForumForums', created: number, id: number, position: number, description: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, _count: { __typename?: 'ShowForumForumsCounts', posts: number, topics: number } }>, permissions: { __typename?: 'PermissionsForumForumsAdmin', can_all_create: boolean, can_all_read: boolean, can_all_reply: boolean, can_all_view: boolean, groups: Array<{ __typename?: 'GroupsPermissionsForumForums', can_create: boolean, can_read: boolean, can_reply: boolean, can_view: boolean, id: number }> }, _count: { __typename?: 'ShowForumForumsCounts', posts: number, topics: number } }>, pageInfo: { __typename?: 'PageInfo', count: number, endCursor?: number | null, hasNextPage: boolean, hasPreviousPage: boolean, startCursor?: number | null, totalCount: number } } }; export type Forum_Forums__ShowQueryVariables = Exact<{ [key: string]: never; }>; @@ -1905,13 +1891,6 @@ export const Admin__Forum_Forums__Show_Short = gql` language_code value } - parent { - id - name { - language_code - value - } - } id } } @@ -2496,7 +2475,6 @@ export const Admin__Forum_Forums__Show = gql` } position _count { - children posts topics } @@ -2515,7 +2493,6 @@ export const Admin__Forum_Forums__Show = gql` } } _count { - children posts topics } diff --git a/frontend/graphql/mutations/forum/admin/forums/admin__forum_forums__show_short.gql b/frontend/graphql/mutations/forum/admin/forums/admin__forum_forums__show_short.gql index 150cdc057..37aa3354d 100644 --- a/frontend/graphql/mutations/forum/admin/forums/admin__forum_forums__show_short.gql +++ b/frontend/graphql/mutations/forum/admin/forums/admin__forum_forums__show_short.gql @@ -13,13 +13,6 @@ query Admin__forum_forums__show_short( language_code value } - parent { - id - name { - language_code - value - } - } id } } diff --git a/frontend/graphql/queries/forum/admin/forums/admin__forum_forums__show.gql b/frontend/graphql/queries/forum/admin/forums/admin__forum_forums__show.gql index c375abfe9..78453f4fe 100644 --- a/frontend/graphql/queries/forum/admin/forums/admin__forum_forums__show.gql +++ b/frontend/graphql/queries/forum/admin/forums/admin__forum_forums__show.gql @@ -29,7 +29,6 @@ query Admin__forum_forums__show($first: Int, $cursor: Int, $parentId: Int) { } position _count { - children posts topics } @@ -48,7 +47,6 @@ query Admin__forum_forums__show($first: Int, $cursor: Int, $parentId: Int) { } } _count { - children posts topics } From 702b0de99bc99047f81a9aa6659de6290f5a3092 Mon Sep 17 00:00:00 2001 From: aXenDeveloper Date: Fri, 1 Mar 2024 12:18:04 +0100 Subject: [PATCH 3/6] feat(forum): Add total topics and posts for show query --- backend/schema.gql | 6 +- .../forum/forums/create/dto/create.obj.ts | 9 +-- .../admin/forum/forums/show/dto/show.obj.ts | 9 +-- .../apps/forum/forums/show/dto/show.obj.ts | 15 +++-- .../apps/forum/forums/show/show.service.ts | 53 +++++---------- .../apps/forum/forums/show/stats.service.ts | 67 ++++++++++++++----- frontend/graphql/hooks.ts | 10 +-- 7 files changed, 96 insertions(+), 73 deletions(-) diff --git a/backend/schema.gql b/backend/schema.gql index 35ff874b3..d0c813657 100644 --- a/backend/schema.gql +++ b/backend/schema.gql @@ -482,14 +482,16 @@ type ShowForumForumsAdminObj { type ShowForumForumsCounts { posts: Int! topics: Int! + total_posts: Int! + total_topics: Int! } type ShowForumForumsObj { - edges: [ShowForumForumsWithParent!]! + edges: [ShowForumForumsWithChildren!]! pageInfo: PageInfo! } -type ShowForumForumsWithParent { +type ShowForumForumsWithChildren { _count: ShowForumForumsCounts! children: [ChildrenShowForumForums!]! created: Int! diff --git a/backend/src/apps/admin/forum/forums/create/dto/create.obj.ts b/backend/src/apps/admin/forum/forums/create/dto/create.obj.ts index 7dcc969e1..9561be5cc 100644 --- a/backend/src/apps/admin/forum/forums/create/dto/create.obj.ts +++ b/backend/src/apps/admin/forum/forums/create/dto/create.obj.ts @@ -1,8 +1,9 @@ import { ObjectType, OmitType } from "@nestjs/graphql"; -import { ShowForumForumsWithParent } from "../../../../../forum/forums/show/dto/show.obj"; +import { ShowForumForumsWithChildren } from "../../../../../forum/forums/show/dto/show.obj"; @ObjectType() -export class CreateForumForumsObj extends OmitType(ShowForumForumsWithParent, [ - "permissions" -] as const) {} +export class CreateForumForumsObj extends OmitType( + ShowForumForumsWithChildren, + ["permissions"] as const +) {} diff --git a/backend/src/apps/admin/forum/forums/show/dto/show.obj.ts b/backend/src/apps/admin/forum/forums/show/dto/show.obj.ts index 401a89334..47d5673e7 100644 --- a/backend/src/apps/admin/forum/forums/show/dto/show.obj.ts +++ b/backend/src/apps/admin/forum/forums/show/dto/show.obj.ts @@ -1,6 +1,6 @@ import { Field, Int, ObjectType, OmitType } from "@nestjs/graphql"; -import { ShowForumForumsWithParent } from "../../../../../forum/forums/show/dto/show.obj"; +import { ShowForumForumsWithChildren } from "../../../../../forum/forums/show/dto/show.obj"; import { PageInfo } from "@/types/database/pagination.type"; @ObjectType() @@ -40,9 +40,10 @@ export class PermissionsForumForumsAdmin { } @ObjectType() -export class ShowForumForumsAdmin extends OmitType(ShowForumForumsWithParent, [ - "permissions" -] as const) { +export class ShowForumForumsAdmin extends OmitType( + ShowForumForumsWithChildren, + ["permissions"] as const +) { @Field(() => PermissionsForumForumsAdmin) permissions: PermissionsForumForumsAdmin; } diff --git a/backend/src/apps/forum/forums/show/dto/show.obj.ts b/backend/src/apps/forum/forums/show/dto/show.obj.ts index c936d39ee..973255318 100644 --- a/backend/src/apps/forum/forums/show/dto/show.obj.ts +++ b/backend/src/apps/forum/forums/show/dto/show.obj.ts @@ -10,6 +10,12 @@ class ShowForumForumsCounts { @Field(() => Int) posts: number; + + @Field(() => Int) + total_topics: number; + + @Field(() => Int) + total_posts: number; } @ObjectType() @@ -63,18 +69,15 @@ export class ChildrenShowForumForums extends ShowForumForums { } @ObjectType() -export class ShowForumForumsWithParent extends FirstShowForumForums { - // @Field(() => ShowForumForums, { nullable: true }) - // parent: ShowForumForums | null; - +export class ShowForumForumsWithChildren extends FirstShowForumForums { @Field(() => [ChildrenShowForumForums]) children: ChildrenShowForumForums[]; } @ObjectType() export class ShowForumForumsObj { - @Field(() => [ShowForumForumsWithParent]) - edges: ShowForumForumsWithParent[]; + @Field(() => [ShowForumForumsWithChildren]) + edges: ShowForumForumsWithChildren[]; @Field(() => PageInfo) pageInfo: PageInfo; diff --git a/backend/src/apps/forum/forums/show/show.service.ts b/backend/src/apps/forum/forums/show/show.service.ts index 84399da88..b7675b1cb 100644 --- a/backend/src/apps/forum/forums/show/show.service.ts +++ b/backend/src/apps/forum/forums/show/show.service.ts @@ -106,12 +106,7 @@ export class ShowForumForumsService { with: { name: true, description: true, - permissions: true, - topics: { - with: { - posts: true - } - } + permissions: true } }); @@ -126,25 +121,16 @@ export class ShowForumForumsService { with: { name: true, description: true, - permissions: true, - topics: { - with: { - posts: true - } - } + permissions: true } }); - // console.log(await this.statsService.stats({ id: forum.id })); + const stats = await this.statsService.stats({ forumId: forum.id }); return { ...forum, _count: { - topics: forum.topics.length, - posts: forum.topics.reduce( - (acc, item) => acc + item.posts.length, - 0 - ) + ...stats }, children: await Promise.all( children.map(async child => { @@ -155,24 +141,19 @@ export class ShowForumForumsService { with: { name: true, description: true, - permissions: true, - topics: { - with: { - posts: true - } - } + permissions: true } }); + const stats = await this.statsService.stats({ + forumId: child.id + }); + return { ...child, children, _count: { - topics: child.topics.length, - posts: child.topics.reduce( - (acc, item) => acc + item.posts.length, - 0 - ) + ...stats } }; }) @@ -199,13 +180,14 @@ export class ShowForumForumsService { search && searchIds.length === 0 ? [] : edges.map(edge => { + const permissions = edge.permissions.at(0); + if (!user) { return { ...edge, permissions: { can_create: false, - can_read: - edge.permissions.at(0)?.can_read || edge.can_all_read, + can_read: permissions?.can_read || edge.can_all_read, can_reply: false } }; @@ -214,12 +196,9 @@ export class ShowForumForumsService { return { ...edge, permissions: { - can_create: - edge.permissions.at(0)?.can_create || edge.can_all_create, - can_read: - edge.permissions.at(0)?.can_read || edge.can_all_read, - can_reply: - edge.permissions.at(0)?.can_reply || edge.can_all_reply + can_create: permissions?.can_create || edge.can_all_create, + can_read: permissions?.can_read || edge.can_all_read, + can_reply: permissions?.can_reply || edge.can_all_reply } }; }), diff --git a/backend/src/apps/forum/forums/show/stats.service.ts b/backend/src/apps/forum/forums/show/stats.service.ts index f0c01b369..0231e9393 100644 --- a/backend/src/apps/forum/forums/show/stats.service.ts +++ b/backend/src/apps/forum/forums/show/stats.service.ts @@ -9,7 +9,7 @@ import { TextLanguage } from "@/types/database/text-language.type"; export class StatsShowForumForumsService { constructor(private databaseService: DatabaseService) {} - protected async getAllChildren({ id }: { id: number }): Promise< + protected async getAllChildren({ forumId }: { forumId: number }): Promise< { id: number; name: TextLanguage[]; @@ -19,7 +19,7 @@ export class StatsShowForumForumsService { const directChildren = await this.databaseService.db.query.forum_forums.findMany({ - where: (table, { eq }) => eq(table.parent_id, id), + where: (table, { eq }) => eq(table.parent_id, forumId), columns: { id: true }, @@ -34,7 +34,7 @@ export class StatsShowForumForumsService { name: child.name }); - const grandChildren = await this.getAllChildren({ id: child.id }); + const grandChildren = await this.getAllChildren({ forumId: child.id }); children = children.concat(grandChildren); } @@ -81,28 +81,65 @@ export class StatsShowForumForumsService { return posts[0].count; } - async stats({ id }: { id: number }): Promise<{ + protected async getCountTopics({ forumId }: { forumId: number }): Promise<{ + count: number; + ids: number[]; + }> { + const topics = await this.databaseService.db.query.forum_topics.findMany({ + where: (table, { eq }) => eq(table.forum_id, forumId), + columns: { + id: true + } + }); + + return { + count: topics.length, + ids: topics.map(topic => topic.id) + }; + } + + protected async getCountPosts({ + topicIds + }: { + topicIds: number[]; + }): Promise { + const posts = await this.databaseService.db + .select({ + count: count() + }) + .from(forum_posts) + .where(inArray(forum_posts.topic_id, topicIds)); + + return posts[0].count; + } + + async stats({ forumId }: { forumId: number }): Promise<{ children: { id: number; name: TextLanguage[]; }[]; - topicsIds: number[]; - totalPosts: number; - totalTopics: number; + posts: number; + topics: number; + total_posts: number; + total_topics: number; }> { - const children = await this.getAllChildren({ id }); - const topics = await this.getTotalTopics({ - forumIds: [id, ...children.map(child => child.id)] + const children = await this.getAllChildren({ forumId }); + const totalTopics = await this.getTotalTopics({ + forumIds: [forumId, ...children.map(child => child.id)] }); const totalPosts = await this.getTotalCountPosts({ - topicIds: topics.ids + topicIds: totalTopics.ids }); + const topics = await this.getCountTopics({ forumId }); + const posts = await this.getCountPosts({ topicIds: topics.ids }); + return { - totalPosts: totalPosts - topics.totalCount, - totalTopics: topics.totalCount, - topicsIds: topics.ids, - children + total_posts: totalPosts - totalTopics.totalCount, + total_topics: totalTopics.totalCount, + children, + topics: topics.count, + posts: posts - topics.count }; } } diff --git a/frontend/graphql/hooks.ts b/frontend/graphql/hooks.ts index 55ed3c9ab..94ccc51a2 100644 --- a/frontend/graphql/hooks.ts +++ b/frontend/graphql/hooks.ts @@ -884,12 +884,12 @@ export type ShowForumForumsCounts = { export type ShowForumForumsObj = { __typename?: 'ShowForumForumsObj'; - edges: Array; + edges: Array; pageInfo: PageInfo; }; -export type ShowForumForumsWithParent = { - __typename?: 'ShowForumForumsWithParent'; +export type ShowForumForumsWithChildren = { + __typename?: 'ShowForumForumsWithChildren'; _count: ShowForumForumsCounts; children: Array; created: Scalars['Int']['output']; @@ -1483,7 +1483,7 @@ export type Admin__Forum_Forums__ShowQuery = { __typename?: 'Query', admin__foru export type Forum_Forums__ShowQueryVariables = Exact<{ [key: string]: never; }>; -export type Forum_Forums__ShowQuery = { __typename?: 'Query', forum_forums__show: { __typename?: 'ShowForumForumsObj', edges: Array<{ __typename?: 'ShowForumForumsWithParent', id: number, description: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, children: Array<{ __typename?: 'ChildrenShowForumForums', id: number, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, children: Array<{ __typename?: 'LastChildShowForumForums', id: number, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }> }>, description: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }> }> }> } }; +export type Forum_Forums__ShowQuery = { __typename?: 'Query', forum_forums__show: { __typename?: 'ShowForumForumsObj', edges: Array<{ __typename?: 'ShowForumForumsWithChildren', id: number, description: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, children: Array<{ __typename?: 'ChildrenShowForumForums', id: number, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, children: Array<{ __typename?: 'LastChildShowForumForums', id: number, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }> }>, description: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }> }> }> } }; export type Forum_Forums__Show_ItemQueryVariables = Exact<{ cursor?: InputMaybe; @@ -1493,7 +1493,7 @@ export type Forum_Forums__Show_ItemQueryVariables = Exact<{ }>; -export type Forum_Forums__Show_ItemQuery = { __typename?: 'Query', forum_forums__show: { __typename?: 'ShowForumForumsObj', edges: Array<{ __typename?: 'ShowForumForumsWithParent', id: number, description: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, children: Array<{ __typename?: 'ChildrenShowForumForums', id: number, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, children: Array<{ __typename?: 'LastChildShowForumForums', id: number, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }> }>, description: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }> }>, permissions: { __typename?: 'PermissionsForumForums', can_create: boolean } }> }, forum_topics__show: { __typename?: 'ShowTopicsForumsObj', edges: Array<{ __typename?: 'ShowTopicsForums', created: number, id: number, locked: boolean, title: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, user: { __typename?: 'User', id: number, name_seo: string, name: string, avatar_color: string, avatar?: { __typename?: 'AvatarUser', id: number, dir_folder: string, name: string } | null, group: { __typename?: 'GroupUser', id: number, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }> } }, content: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, forum: { __typename?: 'ForumTopicsForums', id: number, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }> } }>, pageInfo: { __typename?: 'PageInfo', count: number, endCursor?: number | null, hasNextPage: boolean, hasPreviousPage: boolean, startCursor?: number | null, totalCount: number } } }; +export type Forum_Forums__Show_ItemQuery = { __typename?: 'Query', forum_forums__show: { __typename?: 'ShowForumForumsObj', edges: Array<{ __typename?: 'ShowForumForumsWithChildren', id: number, description: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, children: Array<{ __typename?: 'ChildrenShowForumForums', id: number, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, children: Array<{ __typename?: 'LastChildShowForumForums', id: number, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }> }>, description: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }> }>, permissions: { __typename?: 'PermissionsForumForums', can_create: boolean } }> }, forum_topics__show: { __typename?: 'ShowTopicsForumsObj', edges: Array<{ __typename?: 'ShowTopicsForums', created: number, id: number, locked: boolean, title: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, user: { __typename?: 'User', id: number, name_seo: string, name: string, avatar_color: string, avatar?: { __typename?: 'AvatarUser', id: number, dir_folder: string, name: string } | null, group: { __typename?: 'GroupUser', id: number, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }> } }, content: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, forum: { __typename?: 'ForumTopicsForums', id: number, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }> } }>, pageInfo: { __typename?: 'PageInfo', count: number, endCursor?: number | null, hasNextPage: boolean, hasPreviousPage: boolean, startCursor?: number | null, totalCount: number } } }; export type Forum_Forums__Show_Item_MoreQueryVariables = Exact<{ cursor?: InputMaybe; From 437190dc6b0f063d35a2e9ade91115170ab1e065 Mon Sep 17 00:00:00 2001 From: aXenDeveloper Date: Fri, 1 Mar 2024 16:06:29 +0100 Subject: [PATCH 4/6] refactor(forum): Logic show forum for AdminCP --- backend/schema.gql | 1 + backend/src/apps/admin/forum/forum.module.ts | 5 +- .../forum/forums/create/create.service.ts | 33 +-- .../admin/forum/forums/edit/edit.service.ts | 71 ++----- .../admin/forum/forums/show/dto/show.args.ts | 8 - .../admin/forum/forums/show/show.resolver.ts | 4 +- .../admin/forum/forums/show/show.service.ts | 196 +++--------------- .../src/apps/forum/forums/forums.module.ts | 3 +- .../apps/forum/forums/show/show.service.ts | 64 +++++- .../apps/forum/forums/show/stats.service.ts | 25 ++- 10 files changed, 145 insertions(+), 265 deletions(-) delete mode 100644 backend/src/apps/admin/forum/forums/show/dto/show.args.ts diff --git a/backend/schema.gql b/backend/schema.gql index d0c813657..cb445ebd0 100644 --- a/backend/schema.gql +++ b/backend/schema.gql @@ -183,6 +183,7 @@ type Query { admin__forum_forums__show( cursor: Int first: Int + ids: [Int!] last: Int parent_id: Int search: String diff --git a/backend/src/apps/admin/forum/forum.module.ts b/backend/src/apps/admin/forum/forum.module.ts index 71ed0c8d4..c0619ac53 100644 --- a/backend/src/apps/admin/forum/forum.module.ts +++ b/backend/src/apps/admin/forum/forum.module.ts @@ -11,6 +11,8 @@ import { EditForumForumsService } from "./forums/edit/edit.service"; import { DeleteForumForumsResolver } from "./forums/delete/delete.resolver"; import { DeleteForumForumsService } from "./forums/delete/delete.service"; +import { ForumsForumModule } from "@/apps/forum/forums/forums.module"; + @Module({ providers: [ CreateForumForumsService, @@ -23,6 +25,7 @@ import { DeleteForumForumsService } from "./forums/delete/delete.service"; EditForumForumsService, DeleteForumForumsResolver, DeleteForumForumsService - ] + ], + imports: [ForumsForumModule] }) export class AdminForumModule {} diff --git a/backend/src/apps/admin/forum/forums/create/create.service.ts b/backend/src/apps/admin/forum/forums/create/create.service.ts index bbdee69ad..fb9a9b53b 100644 --- a/backend/src/apps/admin/forum/forums/create/create.service.ts +++ b/backend/src/apps/admin/forum/forums/create/create.service.ts @@ -94,18 +94,7 @@ export class CreateForumForumsService { with: { name: true, description: true, - permissions: true, - parent: { - with: { - name: true, - description: true, - topics: { - with: { - posts: true - } - } - } - } + permissions: true } }); @@ -116,24 +105,12 @@ export class CreateForumForumsService { return { ...forum, _count: { - children: 0, topics: 0, - posts: 0 + posts: 0, + total_posts: 0, + total_topics: 0 }, - children: [], - parent: forum.parent - ? { - ...forum.parent, - _count: { - children: 0, - topics: forum.parent.topics.length, - posts: forum.parent.topics.reduce( - (acc, item) => acc + item.posts.length, - 0 - ) - } - } - : null + children: [] }; } } diff --git a/backend/src/apps/admin/forum/forums/edit/edit.service.ts b/backend/src/apps/admin/forum/forums/edit/edit.service.ts index a2a5946ba..cd7932575 100644 --- a/backend/src/apps/admin/forum/forums/edit/edit.service.ts +++ b/backend/src/apps/admin/forum/forums/edit/edit.service.ts @@ -14,10 +14,14 @@ import { forum_forums_permissions } from "../../database/schema/forums"; import { TextLanguageInput } from "@/types/database/text-language.type"; +import { StatsShowForumForumsService } from "@/apps/forum/forums/show/stats.service"; @Injectable() export class EditForumForumsService { - constructor(private databaseService: DatabaseService) {} + constructor( + private databaseService: DatabaseService, + private statsService: StatsShowForumForumsService + ) {} protected updateName = async ({ id, @@ -227,23 +231,7 @@ export class EditForumForumsService { with: { name: true, description: true, - permissions: true, - parent: { - with: { - name: true, - description: true, - topics: { - with: { - posts: true - } - } - } - }, - topics: { - with: { - posts: true - } - } + permissions: true } }); @@ -252,47 +240,30 @@ export class EditForumForumsService { with: { name: true, description: true, - permissions: true, - topics: { - with: { - posts: true - } - } + permissions: true } }); + const stats = await this.statsService.stats({ forumId: id }); + return { ...dataUpdate, _count: { - children: children.length, - topics: dataUpdate.topics.length, - posts: dataUpdate.topics.reduce( - (acc, item) => acc + item.posts.length, - 0 - ) + ...stats }, - children: children.map(item => ({ - ...item, - children: [], - _count: { - children: 0, - posts: item.topics.reduce((acc, item) => acc + item.posts.length, 0), - topics: item.topics.length - } - })), - parent: dataUpdate.parent - ? { - ...dataUpdate.parent, + children: await Promise.all( + children.map(async item => { + const stats = await this.statsService.stats({ forumId: item.id }); + + return { + ...item, + children: [], _count: { - children: 0, - posts: dataUpdate.parent.topics.reduce( - (acc, item) => acc + item.posts.length, - 0 - ), - topics: dataUpdate.parent.topics.length + ...stats } - } - : null + }; + }) + ) }; } } diff --git a/backend/src/apps/admin/forum/forums/show/dto/show.args.ts b/backend/src/apps/admin/forum/forums/show/dto/show.args.ts deleted file mode 100644 index cd45918b7..000000000 --- a/backend/src/apps/admin/forum/forums/show/dto/show.args.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { ArgsType, OmitType } from "@nestjs/graphql"; - -import { ShowForumForumsArgs } from "@/apps/forum/forums/show/dto/show.args"; - -@ArgsType() -export class ShowForumForumsAdminArgs extends OmitType(ShowForumForumsArgs, [ - "ids" -] as const) {} diff --git a/backend/src/apps/admin/forum/forums/show/show.resolver.ts b/backend/src/apps/admin/forum/forums/show/show.resolver.ts index 8aa77b967..0c2976981 100644 --- a/backend/src/apps/admin/forum/forums/show/show.resolver.ts +++ b/backend/src/apps/admin/forum/forums/show/show.resolver.ts @@ -3,9 +3,9 @@ import { UseGuards } from "@nestjs/common"; import { ShowForumForumsAdminService } from "./show.service"; import { ShowForumForumsAdminObj } from "./dto/show.obj"; -import { ShowForumForumsAdminArgs } from "./dto/show.args"; import { AdminAuthGuards } from "@/utils/guards/admin-auth.guards"; +import { ShowForumForumsArgs } from "@/apps/forum/forums/show/dto/show.args"; @Resolver() export class ShowForumForumsAdminResolver { @@ -14,7 +14,7 @@ export class ShowForumForumsAdminResolver { @Query(() => ShowForumForumsAdminObj) @UseGuards(AdminAuthGuards) async admin__forum_forums__show( - @Args() args: ShowForumForumsAdminArgs + @Args() args: ShowForumForumsArgs ): Promise { return await this.service.show(args); } diff --git a/backend/src/apps/admin/forum/forums/show/show.service.ts b/backend/src/apps/admin/forum/forums/show/show.service.ts index 23f1ddfd7..b29c64b0b 100644 --- a/backend/src/apps/admin/forum/forums/show/show.service.ts +++ b/backend/src/apps/admin/forum/forums/show/show.service.ts @@ -1,187 +1,59 @@ import { Injectable } from "@nestjs/common"; -import { and, count, eq, ilike, inArray, isNull } from "drizzle-orm"; +import { count } from "drizzle-orm"; import { ShowForumForumsAdminObj } from "./dto/show.obj"; -import { ShowForumForumsAdminArgs } from "./dto/show.args"; import { DatabaseService } from "@/database/database.service"; -import { - inputPaginationCursor, - outputPagination -} from "@/functions/database/pagination"; -import { - forum_forums, - forum_forums_name -} from "@/apps/admin/forum/database/schema/forums"; -import { SortDirectionEnum } from "@/types/database/sortDirection.type"; +import { outputPagination } from "@/functions/database/pagination"; +import { forum_forums } from "@/apps/admin/forum/database/schema/forums"; +import { ShowForumForumsService } from "@/apps/forum/forums/show/show.service"; +import { ShowForumForumsArgs } from "@/apps/forum/forums/show/dto/show.args"; @Injectable() export class ShowForumForumsAdminService { - constructor(private databaseService: DatabaseService) {} + constructor( + private databaseService: DatabaseService, + private forumService: ShowForumForumsService + ) {} async show({ cursor, first, last, - parent_id, search, - show_all_forums - }: ShowForumForumsAdminArgs): Promise { - let searchIds: number[] = []; - - if (search) { - searchIds = await this.databaseService.db - .select({ forum_id: forum_forums_name.id }) - .from(forum_forums_name) - .where(ilike(forum_forums_name.value, `%${search}%`)) - .then(res => res.map(({ forum_id }) => forum_id)); - } - - const pagination = await inputPaginationCursor({ - cursor, - database: forum_forums, - databaseService: this.databaseService, - first, - last, - primaryCursor: { order: "ASC", key: "id", schema: forum_forums.id }, - defaultSortBy: { - direction: SortDirectionEnum.asc, - column: "position" - } - }); - - const whereParent = !parent_id - ? isNull(forum_forums.parent_id) - : eq(forum_forums.parent_id, parent_id); - - const where = and( - !show_all_forums ? whereParent : undefined, - searchIds.length > 0 ? inArray(forum_forums.id, searchIds) : undefined + ...rest + }: ShowForumForumsArgs): Promise { + const { edges, searchIds, where } = await this.forumService.getData( + { + cursor, + first, + last, + search, + isAdmin: true, + ...rest + }, + null ); - const forums = await this.databaseService.db.query.forum_forums.findMany({ - ...pagination, - where: and(pagination.where, where), - with: { - name: true, - description: true, - permissions: true, - parent: { - with: { - name: true, - description: true, - topics: { - with: { - posts: true - } - } - } - }, - topics: { - with: { - posts: true - } - } - } - }); - const totalCount = await this.databaseService.db .select({ count: count() }) .from(forum_forums) .where(where); - const edges = await Promise.all( - forums.map(async forum => { - const children = - show_all_forums || search - ? [] - : await this.databaseService.db.query.forum_forums.findMany({ - where: eq(forum_forums.parent_id, forum.id), - orderBy: (table, { asc }) => [asc(table.position)], - with: { - name: true, - description: true, - permissions: true, - topics: { - with: { - posts: true - } - } - } - }); - - return { - ...forum, - parent: forum.parent_id - ? { - ...forum.parent, - _count: { - children: 0, - topics: forum.parent.topics.length, - posts: forum.parent.topics.reduce( - (acc, item) => acc + item.posts.length, - 0 - ) - } - } - : null, - permissions: { - can_all_view: forum.can_all_view, - can_all_read: forum.can_all_read, - can_all_create: forum.can_all_create, - can_all_reply: forum.can_all_reply, - groups: forum.permissions - }, - _count: { - children: children.length, - topics: forum.topics.length, - posts: forum.topics.reduce( - (acc, item) => acc + item.posts.length, - 0 - ) - }, - children: await Promise.all( - children.map(async child => { - const children = - await this.databaseService.db.query.forum_forums.findMany({ - where: eq(forum_forums.parent_id, child.id), - orderBy: (table, { asc }) => [asc(table.position)], - with: { - name: true, - description: true, - permissions: true - } - }); - - return { - ...child, - children: children.map(child => ({ - ...child, - permissions: { - can_all_view: child.can_all_view, - can_all_read: child.can_all_read, - can_all_create: child.can_all_create, - can_all_reply: child.can_all_reply, - groups: child.permissions - } - })), - _count: { - children: children.length, - topics: child.topics.length, - posts: child.topics.reduce( - (acc, item) => acc + item.posts.length, - 0 - ) - } - }; - }) - ) - }; - }) - ); - return outputPagination({ - edges: search && searchIds.length === 0 ? [] : edges, + edges: + search && searchIds.length === 0 + ? [] + : edges.map(edge => ({ + ...edge, + permissions: { + can_all_create: edge.can_all_create, + can_all_read: edge.can_all_read, + can_all_reply: edge.can_all_reply, + can_all_view: edge.can_all_view, + groups: edge.permissions + } + })), totalCount, first, cursor, diff --git a/backend/src/apps/forum/forums/forums.module.ts b/backend/src/apps/forum/forums/forums.module.ts index 2fd21eaa4..2dad1e27b 100644 --- a/backend/src/apps/forum/forums/forums.module.ts +++ b/backend/src/apps/forum/forums/forums.module.ts @@ -9,6 +9,7 @@ import { StatsShowForumForumsService } from "./show/stats.service"; ShowForumForumsResolver, ShowForumForumsService, StatsShowForumForumsService - ] + ], + exports: [ShowForumForumsService, StatsShowForumForumsService] }) export class ForumsForumModule {} diff --git a/backend/src/apps/forum/forums/show/show.service.ts b/backend/src/apps/forum/forums/show/show.service.ts index b7675b1cb..0ec20a07e 100644 --- a/backend/src/apps/forum/forums/show/show.service.ts +++ b/backend/src/apps/forum/forums/show/show.service.ts @@ -2,7 +2,10 @@ import { Injectable } from "@nestjs/common"; import { SQL, and, count, eq, ilike, inArray, isNull, or } from "drizzle-orm"; import { ShowForumForumsArgs } from "./dto/show.args"; -import { ShowForumForumsObj } from "./dto/show.obj"; +import { + ShowForumForumsObj, + ShowForumForumsWithChildren +} from "./dto/show.obj"; import { StatsShowForumForumsService } from "./stats.service"; import { User } from "@/utils/decorators/user.decorator"; @@ -18,6 +21,27 @@ import { } from "@/apps/admin/forum/database/schema/forums"; import { SortDirectionEnum } from "@/types/database/sortDirection.type"; +interface ShowArgs extends ShowForumForumsArgs { + isAdmin?: boolean; +} + +interface ShowForumForumsWithPermissions + extends Omit { + can_all_create: boolean; + can_all_read: boolean; + can_all_reply: boolean; + can_all_view: boolean; + permissions: { + can_create: boolean; + can_read: boolean; + can_reply: boolean; + can_view: boolean; + forum_id: number; + group_id: number; + id: number; + }[]; +} + @Injectable() export class ShowForumForumsService { constructor( @@ -26,10 +50,14 @@ export class ShowForumForumsService { ) {} protected async whereAccessToView({ + isAdmin, user }: { user: User | null; + isAdmin?: boolean; }): Promise> { + if (isAdmin) return undefined; + const forumIds = await this.databaseService.db.query.forum_forums_permissions.findMany({ columns: { @@ -49,18 +77,23 @@ export class ShowForumForumsService { return or(eq(forum_forums.can_all_view, true), forumIdsSQL); } - async show( + async getData( { cursor, first, ids, + isAdmin, last, parent_id, search, show_all_forums - }: ShowForumForumsArgs, + }: ShowArgs, user: User | null - ): Promise { + ): Promise<{ + edges: ShowForumForumsWithPermissions[]; + searchIds: number[]; + where: SQL; + }> { let searchIds: number[] = []; // Get forum ids by search @@ -92,7 +125,7 @@ export class ShowForumForumsService { const idsCondition = ids?.length > 0 ? inArray(forum_forums.id, ids) : undefined; - const whereAccess = await this.whereAccessToView({ user }); + const whereAccess = await this.whereAccessToView({ user, isAdmin }); const where = and( pagination.where, whereAccess, @@ -110,7 +143,7 @@ export class ShowForumForumsService { } }); - const edges = await Promise.all( + const edges: ShowForumForumsWithPermissions[] = await Promise.all( forums.map(async forum => { // If show_all_forums is true, we don't need to fetch children const children = show_all_forums @@ -162,6 +195,25 @@ export class ShowForumForumsService { }) ); + return { edges, where, searchIds }; + } + + async show( + { cursor, first, ids, last, search, ...rest }: ShowArgs, + user: User | null + ): Promise { + const { edges, searchIds, where } = await this.getData( + { + cursor, + first, + ids, + last, + search, + ...rest + }, + user + ); + const totalCount = await this.databaseService.db .select({ count: count() }) .from(forum_forums) diff --git a/backend/src/apps/forum/forums/show/stats.service.ts b/backend/src/apps/forum/forums/show/stats.service.ts index 0231e9393..28a37f51d 100644 --- a/backend/src/apps/forum/forums/show/stats.service.ts +++ b/backend/src/apps/forum/forums/show/stats.service.ts @@ -76,7 +76,11 @@ export class StatsShowForumForumsService { .select({ count: count() }) .from(forum_posts) .where(inArray(forum_posts.topic_id, topicIds)) - : []; + : [ + { + count: 0 + } + ]; return posts[0].count; } @@ -103,12 +107,19 @@ export class StatsShowForumForumsService { }: { topicIds: number[]; }): Promise { - const posts = await this.databaseService.db - .select({ - count: count() - }) - .from(forum_posts) - .where(inArray(forum_posts.topic_id, topicIds)); + const posts = + topicIds.length > 0 + ? await this.databaseService.db + .select({ + count: count() + }) + .from(forum_posts) + .where(inArray(forum_posts.topic_id, topicIds)) + : [ + { + count: 0 + } + ]; return posts[0].count; } From b72cb42716a3ccb16dafafe372d586648cfc12fc Mon Sep 17 00:00:00 2001 From: aXenDeveloper Date: Fri, 1 Mar 2024 16:24:01 +0100 Subject: [PATCH 5/6] perf: Update packages --- backend/package.json | 4 +- docs/package.json | 4 +- docs/pnpm-lock.yaml | 237 ++-- .../forum/components/forums-select/list.tsx | 8 +- .../forums/table/item/actions/actions.tsx | 11 +- .../table/item/actions/delete/delete.tsx | 7 +- .../forum/views/forums/table/item/item.tsx | 7 +- frontend/next.config.js | 4 +- frontend/package.json | 12 +- pnpm-lock.yaml | 1194 +++++++++-------- 10 files changed, 801 insertions(+), 687 deletions(-) diff --git a/backend/package.json b/backend/package.json index 1754cc8f9..434736bf3 100644 --- a/backend/package.json +++ b/backend/package.json @@ -64,10 +64,10 @@ "@types/archiver": "^6.0.2", "@types/bcrypt": "^5.0.2", "@types/busboy": "^1.5.3", - "@types/cookie-parser": "^1.4.6", + "@types/cookie-parser": "^1.4.7", "@types/express": "^4.17.21", "@types/jest": "^29.5.12", - "@types/node": "^20.11.22", + "@types/node": "^20.11.24", "@types/object-path": "^0.11.4", "@types/pg": "^8.11.2", "@types/supertest": "^6.0.2", diff --git a/docs/package.json b/docs/package.json index ca411851a..903ffd6d7 100644 --- a/docs/package.json +++ b/docs/package.json @@ -11,14 +11,14 @@ }, "dependencies": { "clsx": "^2.1.0", - "next": "^14.1.0", + "next": "^14.1.1", "nextra": "^2.13.3", "nextra-theme-docs": "^2.13.3", "react": "^18.2.0", "react-dom": "^18.2.0" }, "devDependencies": { - "@types/node": "^20.11.17", + "@types/node": "^20.11.24", "autoprefixer": "^10.4.17", "postcss": "^8.4.35", "tailwindcss": "^3.4.1", diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml index 3cb73a02c..a7ced3877 100644 --- a/docs/pnpm-lock.yaml +++ b/docs/pnpm-lock.yaml @@ -12,14 +12,14 @@ importers: specifier: ^2.1.0 version: 2.1.0 next: - specifier: ^14.1.0 - version: 14.1.0(react-dom@18.2.0)(react@18.2.0) + specifier: ^14.1.1 + version: 14.1.1(react-dom@18.2.0)(react@18.2.0) nextra: specifier: ^2.13.3 - version: 2.13.3(next@14.1.0)(react-dom@18.2.0)(react@18.2.0) + version: 2.13.3(next@14.1.1)(react-dom@18.2.0)(react@18.2.0) nextra-theme-docs: specifier: ^2.13.3 - version: 2.13.3(next@14.1.0)(nextra@2.13.3)(react-dom@18.2.0)(react@18.2.0) + version: 2.13.3(next@14.1.1)(nextra@2.13.3)(react-dom@18.2.0)(react@18.2.0) react: specifier: ^18.2.0 version: 18.2.0 @@ -28,8 +28,8 @@ importers: version: 18.2.0(react@18.2.0) devDependencies: '@types/node': - specifier: ^20.11.17 - version: 20.11.17 + specifier: ^20.11.24 + version: 20.11.24 autoprefixer: specifier: ^10.4.17 version: 10.4.17(postcss@8.4.35) @@ -50,8 +50,8 @@ packages: engines: {node: '>=10'} dev: true - /@babel/runtime@7.23.9: - resolution: {integrity: sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==} + /@babel/runtime@7.24.0: + resolution: {integrity: sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 @@ -68,7 +68,7 @@ packages: react: ^16 || ^17 || ^18 react-dom: ^16 || ^17 || ^18 dependencies: - '@tanstack/react-virtual': 3.0.4(react-dom@18.2.0)(react@18.2.0) + '@tanstack/react-virtual': 3.1.3(react-dom@18.2.0)(react@18.2.0) client-only: 0.0.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -86,22 +86,22 @@ packages: wrap-ansi-cjs: /wrap-ansi@7.0.0 dev: true - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/set-array': 1.1.2 + '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/trace-mapping': 0.3.24 dev: true - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} dev: true @@ -109,17 +109,17 @@ packages: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} dev: true - /@jridgewell/trace-mapping@0.3.22: - resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==} + /@jridgewell/trace-mapping@0.3.24: + resolution: {integrity: sha512-+VaWXDa6+l6MhflBvVXjIEAzb59nQ2JUK3bwRp2zRpPtU+8TFRy9Gg/5oIcNlkEL5PGlBFGfemUVvIgLnTzq7Q==} dependencies: - '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 dev: true /@mdx-js/mdx@2.3.0: resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==} dependencies: - '@types/estree-jsx': 1.0.4 + '@types/estree-jsx': 1.0.5 '@types/mdx': 2.0.11 estree-util-build-jsx: 2.2.2 estree-util-is-identifier-name: 2.1.0 @@ -146,7 +146,7 @@ packages: react: '>=16' dependencies: '@types/mdx': 2.0.11 - '@types/react': 18.2.55 + '@types/react': 18.2.61 react: 18.2.0 dev: false @@ -266,12 +266,12 @@ packages: '@napi-rs/simple-git-win32-x64-msvc': 0.1.16 dev: false - /@next/env@14.1.0: - resolution: {integrity: sha512-Py8zIo+02ht82brwwhTg36iogzFqGLPXlRGKQw5s+qP/kMNc4MAyDeEwBKDijk6zTIbegEgu8Qy7C1LboslQAw==} + /@next/env@14.1.1: + resolution: {integrity: sha512-7CnQyD5G8shHxQIIg3c7/pSeYFeMhsNbpU/bmvH7ZnDql7mNRgg8O2JZrhrc/soFnfBnKP4/xXNiiSIPn2w8gA==} dev: false - /@next/swc-darwin-arm64@14.1.0: - resolution: {integrity: sha512-nUDn7TOGcIeyQni6lZHfzNoo9S0euXnu0jhsbMOmMJUBfgsnESdjN97kM7cBqQxZa8L/bM9om/S5/1dzCrW6wQ==} + /@next/swc-darwin-arm64@14.1.1: + resolution: {integrity: sha512-yDjSFKQKTIjyT7cFv+DqQfW5jsD+tVxXTckSe1KIouKk75t1qZmj/mV3wzdmFb0XHVGtyRjDMulfVG8uCKemOQ==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] @@ -279,8 +279,8 @@ packages: dev: false optional: true - /@next/swc-darwin-x64@14.1.0: - resolution: {integrity: sha512-1jgudN5haWxiAl3O1ljUS2GfupPmcftu2RYJqZiMJmmbBT5M1XDffjUtRUzP4W3cBHsrvkfOFdQ71hAreNQP6g==} + /@next/swc-darwin-x64@14.1.1: + resolution: {integrity: sha512-KCQmBL0CmFmN8D64FHIZVD9I4ugQsDBBEJKiblXGgwn7wBCSe8N4Dx47sdzl4JAg39IkSN5NNrr8AniXLMb3aw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] @@ -288,8 +288,8 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-gnu@14.1.0: - resolution: {integrity: sha512-RHo7Tcj+jllXUbK7xk2NyIDod3YcCPDZxj1WLIYxd709BQ7WuRYl3OWUNG+WUfqeQBds6kvZYlc42NJJTNi4tQ==} + /@next/swc-linux-arm64-gnu@14.1.1: + resolution: {integrity: sha512-YDQfbWyW0JMKhJf/T4eyFr4b3tceTorQ5w2n7I0mNVTFOvu6CGEzfwT3RSAQGTi/FFMTFcuspPec/7dFHuP7Eg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -297,8 +297,8 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-musl@14.1.0: - resolution: {integrity: sha512-v6kP8sHYxjO8RwHmWMJSq7VZP2nYCkRVQ0qolh2l6xroe9QjbgV8siTbduED4u0hlk0+tjS6/Tuy4n5XCp+l6g==} + /@next/swc-linux-arm64-musl@14.1.1: + resolution: {integrity: sha512-fiuN/OG6sNGRN/bRFxRvV5LyzLB8gaL8cbDH5o3mEiVwfcMzyE5T//ilMmaTrnA8HLMS6hoz4cHOu6Qcp9vxgQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -306,8 +306,8 @@ packages: dev: false optional: true - /@next/swc-linux-x64-gnu@14.1.0: - resolution: {integrity: sha512-zJ2pnoFYB1F4vmEVlb/eSe+VH679zT1VdXlZKX+pE66grOgjmKJHKacf82g/sWE4MQ4Rk2FMBCRnX+l6/TVYzQ==} + /@next/swc-linux-x64-gnu@14.1.1: + resolution: {integrity: sha512-rv6AAdEXoezjbdfp3ouMuVqeLjE1Bin0AuE6qxE6V9g3Giz5/R3xpocHoAi7CufRR+lnkuUjRBn05SYJ83oKNQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -315,8 +315,8 @@ packages: dev: false optional: true - /@next/swc-linux-x64-musl@14.1.0: - resolution: {integrity: sha512-rbaIYFt2X9YZBSbH/CwGAjbBG2/MrACCVu2X0+kSykHzHnYH5FjHxwXLkcoJ10cX0aWCEynpu+rP76x0914atg==} + /@next/swc-linux-x64-musl@14.1.1: + resolution: {integrity: sha512-YAZLGsaNeChSrpz/G7MxO3TIBLaMN8QWMr3X8bt6rCvKovwU7GqQlDu99WdvF33kI8ZahvcdbFsy4jAFzFX7og==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -324,8 +324,8 @@ packages: dev: false optional: true - /@next/swc-win32-arm64-msvc@14.1.0: - resolution: {integrity: sha512-o1N5TsYc8f/HpGt39OUQpQ9AKIGApd3QLueu7hXk//2xq5Z9OxmV6sQfNp8C7qYmiOlHYODOGqNNa0e9jvchGQ==} + /@next/swc-win32-arm64-msvc@14.1.1: + resolution: {integrity: sha512-1L4mUYPBMvVDMZg1inUYyPvFSduot0g73hgfD9CODgbr4xiTYe0VOMTZzaRqYJYBA9mana0x4eaAaypmWo1r5A==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] @@ -333,8 +333,8 @@ packages: dev: false optional: true - /@next/swc-win32-ia32-msvc@14.1.0: - resolution: {integrity: sha512-XXIuB1DBRCFwNO6EEzCTMHT5pauwaSj4SWs7CYnME57eaReAKBXCnkUE80p/pAZcewm7hs+vGvNqDPacEXHVkw==} + /@next/swc-win32-ia32-msvc@14.1.1: + resolution: {integrity: sha512-jvIE9tsuj9vpbbXlR5YxrghRfMuG0Qm/nZ/1KDHc+y6FpnZ/apsgh+G6t15vefU0zp3WSpTMIdXRUsNl/7RSuw==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] @@ -342,8 +342,8 @@ packages: dev: false optional: true - /@next/swc-win32-x64-msvc@14.1.0: - resolution: {integrity: sha512-9WEbVRRAqJ3YFVqEZIxUqkiO8l1nool1LmNxygr5HWF8AcSYsEpneUDhmjUVJEzO2A04+oPtZdombzzPPkTtgg==} + /@next/swc-win32-x64-msvc@14.1.1: + resolution: {integrity: sha512-S6K6EHDU5+1KrBDLko7/c1MNy/Ya73pIAmvKeFwsF4RmBFJSO7/7YeD4FnZ4iBdzE69PpQ4sOMU9ORKeNuxe8A==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -389,19 +389,19 @@ packages: tslib: 2.6.2 dev: false - /@tanstack/react-virtual@3.0.4(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-tiqKW/e2MJVCr7/pRUXulpkyxllaOclkHNfhKTo4pmHjJIqnhMfwIjc1Q1R0Un3PI3kQywywu/791c8z9u0qeA==} + /@tanstack/react-virtual@3.1.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-YCzcbF/Ws/uZ0q3Z6fagH+JVhx4JLvbSflgldMgLsuvB8aXjZLLb3HvrEVxY480F9wFlBiXlvQxOyXb5ENPrNA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@tanstack/virtual-core': 3.0.0 + '@tanstack/virtual-core': 3.1.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@tanstack/virtual-core@3.0.0: - resolution: {integrity: sha512-SYXOBTjJb05rXa2vl55TTwO40A6wKu0R5i1qQwhJYNDIqaIGF7D0HsLw+pJAyi2OvntlEIVusx3xtbbgSUi6zg==} + /@tanstack/virtual-core@3.1.3: + resolution: {integrity: sha512-Y5B4EYyv1j9V8LzeAoOVeTg0LI7Fo5InYKgAjkY1Pu9GjtUwX/EKxNcU7ng3sKr99WEf+bPTcktAeybyMOYo+g==} dev: false /@theguild/remark-mermaid@0.0.5(react@18.2.0): @@ -419,7 +419,7 @@ packages: /@theguild/remark-npm2yarn@0.2.1: resolution: {integrity: sha512-jUTFWwDxtLEFtGZh/TW/w30ySaDJ8atKWH8dq2/IiQF61dPrGfETpl0WxD0VdBfuLOeU14/kop466oBSRO/5CA==} dependencies: - npm-to-yarn: 2.1.0 + npm-to-yarn: 2.2.1 unist-util-visit: 5.0.0 dev: false @@ -449,8 +449,8 @@ packages: '@types/ms': 0.7.34 dev: false - /@types/estree-jsx@1.0.4: - resolution: {integrity: sha512-5idy3hvI9lAMqsyilBM+N+boaCf1MgoefbDxN6KEO5aK17TOHwFAYT9sjxzeKAiIWRUBgLxmZ9mPcnzZXtTcRQ==} + /@types/estree-jsx@1.0.5: + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} dependencies: '@types/estree': 1.0.5 dev: false @@ -499,8 +499,8 @@ packages: resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} dev: false - /@types/node@20.11.17: - resolution: {integrity: sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw==} + /@types/node@20.11.24: + resolution: {integrity: sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==} dependencies: undici-types: 5.26.5 dev: true @@ -509,8 +509,8 @@ packages: resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} dev: false - /@types/react@18.2.55: - resolution: {integrity: sha512-Y2Tz5P4yz23brwm2d7jNon39qoAtMMmalOQv6+fEFt1mT+FcM3D841wDpoUvFXhaYenuROCy3FZYqdTjM7qVyA==} + /@types/react@18.2.61: + resolution: {integrity: sha512-NURTN0qNnJa7O/k4XUkEW2yfygA+NxS0V5h1+kp9jPwhzZy95q3ADoGMP0+JypMhrZBTTgjKAUlTctde1zzeQA==} dependencies: '@types/prop-types': 15.7.11 '@types/scheduler': 0.16.8 @@ -626,8 +626,8 @@ packages: peerDependencies: postcss: ^8.1.0 dependencies: - browserslist: 4.22.3 - caniuse-lite: 1.0.30001585 + browserslist: 4.23.0 + caniuse-lite: 1.0.30001591 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -661,15 +661,15 @@ packages: fill-range: 7.0.1 dev: true - /browserslist@4.22.3: - resolution: {integrity: sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==} + /browserslist@4.23.0: + resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001585 - electron-to-chromium: 1.4.665 + caniuse-lite: 1.0.30001591 + electron-to-chromium: 1.4.689 node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.22.3) + update-browserslist-db: 1.0.13(browserslist@4.23.0) dev: true /busboy@1.6.0: @@ -684,8 +684,8 @@ packages: engines: {node: '>= 6'} dev: true - /caniuse-lite@1.0.30001585: - resolution: {integrity: sha512-yr2BWR1yLXQ8fMpdS/4ZZXpseBgE7o4g41x3a6AJOqZuOi+iE/WdJYAuZ6Y95i4Ohd2Y+9MzIWRR+uGABH4s3Q==} + /caniuse-lite@1.0.30001591: + resolution: {integrity: sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ==} /ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -1163,8 +1163,8 @@ packages: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} dev: true - /diff@5.1.0: - resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} + /diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} engines: {node: '>=0.3.1'} dev: false @@ -1172,20 +1172,20 @@ packages: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} dev: true - /dompurify@3.0.8: - resolution: {integrity: sha512-b7uwreMYL2eZhrSCRC4ahLTeZcPZxSmYfmcQGXGkXiZSNW1X85v+SDM5KsWcpivIiUBH47Ji7NtyUdpLeF5JZQ==} + /dompurify@3.0.9: + resolution: {integrity: sha512-uyb4NDIvQ3hRn6NiC+SIFaP4mJ/MdXlvtunaqK9Bn6dD3RuB/1S/gasEjDHD8eiaqdSael2vBv+hOs7Y+jhYOQ==} dev: false /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /electron-to-chromium@1.4.665: - resolution: {integrity: sha512-UpyCWObBoD+nSZgOC2ToaIdZB0r9GhqT2WahPKiSki6ckkSuKhQNso8V2PrFcHBMleI/eqbKgVQgVC4Wni4ilw==} + /electron-to-chromium@1.4.689: + resolution: {integrity: sha512-GatzRKnGPS1go29ep25reM94xxd1Wj8ritU0yRhCJ/tr1Bg8gKnm6R9O/yPOhGQBoLMZ9ezfrpghNaTw97C/PQ==} dev: true - /elkjs@0.9.1: - resolution: {integrity: sha512-JWKDyqAdltuUcyxaECtYG6H4sqysXSLeoXuGUBfRNESMTkj+w+qdb0jya8Z/WI0jVd03WQtCGhS6FOFtlhD5FQ==} + /elkjs@0.9.2: + resolution: {integrity: sha512-2Y/RaA1pdgSHpY0YG4TYuYCD2wh97CRvu22eLG3Kz0pgQ/6KbIFTxsTnDc4MH/6hFlg2L/9qXrDMG0nMjP63iw==} dev: false /emoji-regex@8.0.0: @@ -1231,7 +1231,7 @@ packages: /estree-util-build-jsx@2.2.2: resolution: {integrity: sha512-m56vOXcOBuaF+Igpb9OPAy7f9w9OIkb5yhjsZuaPm7HoGi4oTOQi0h2+yZ+AtKklYFZ+rPC4n0wYCJCEU1ONqg==} dependencies: - '@types/estree-jsx': 1.0.4 + '@types/estree-jsx': 1.0.5 estree-util-is-identifier-name: 2.1.0 estree-walker: 3.0.3 dev: false @@ -1243,7 +1243,7 @@ packages: /estree-util-to-js@1.2.0: resolution: {integrity: sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==} dependencies: - '@types/estree-jsx': 1.0.4 + '@types/estree-jsx': 1.0.5 astring: 1.8.6 source-map: 0.7.4 dev: false @@ -1258,7 +1258,7 @@ packages: /estree-util-visit@1.2.1: resolution: {integrity: sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==} dependencies: - '@types/estree-jsx': 1.0.4 + '@types/estree-jsx': 1.0.5 '@types/unist': 2.0.10 dev: false @@ -1506,7 +1506,7 @@ packages: resolution: {integrity: sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==} dependencies: '@types/estree': 1.0.5 - '@types/estree-jsx': 1.0.4 + '@types/estree-jsx': 1.0.5 '@types/hast': 2.3.10 '@types/unist': 2.0.10 comma-separated-tokens: 2.0.3 @@ -1757,8 +1757,8 @@ packages: engines: {node: '>=10'} dev: true - /lilconfig@3.0.0: - resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} + /lilconfig@3.1.1: + resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} engines: {node: '>=14'} dev: true @@ -1813,7 +1813,7 @@ packages: /match-sorter@6.3.4: resolution: {integrity: sha512-jfZW7cWS5y/1xswZo8VBOdudUiSd9nifYRWphc9M5D/ee4w4AoXLgBEdRbgVaxbMuagBPeUC5y2Hi8DO6o9aDg==} dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.0 remove-accents: 0.5.0 dev: false @@ -1920,7 +1920,7 @@ packages: /mdast-util-mdx-expression@1.3.2: resolution: {integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==} dependencies: - '@types/estree-jsx': 1.0.4 + '@types/estree-jsx': 1.0.5 '@types/hast': 2.3.10 '@types/mdast': 3.0.15 mdast-util-from-markdown: 1.3.1 @@ -1932,7 +1932,7 @@ packages: /mdast-util-mdx-jsx@2.1.4: resolution: {integrity: sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==} dependencies: - '@types/estree-jsx': 1.0.4 + '@types/estree-jsx': 1.0.5 '@types/hast': 2.3.10 '@types/mdast': 3.0.15 '@types/unist': 2.0.10 @@ -1963,7 +1963,7 @@ packages: /mdast-util-mdxjs-esm@1.3.1: resolution: {integrity: sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==} dependencies: - '@types/estree-jsx': 1.0.4 + '@types/estree-jsx': 1.0.5 '@types/hast': 2.3.10 '@types/mdast': 3.0.15 mdast-util-from-markdown: 1.3.1 @@ -2042,8 +2042,8 @@ packages: d3-sankey: 0.12.3 dagre-d3-es: 7.0.10 dayjs: 1.11.10 - dompurify: 3.0.8 - elkjs: 0.9.1 + dompurify: 3.0.9 + elkjs: 0.9.2 khroma: 2.1.0 lodash-es: 4.17.21 mdast-util-from-markdown: 1.3.1 @@ -2488,32 +2488,32 @@ packages: - supports-color dev: false - /next-seo@6.4.0(next@14.1.0)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-XQFxkOL2hw0YE+P100HbI3EAvcludlHPxuzMgaIjKb7kPK0CvjGvLFjd9hszZFEDc5oiQkGFA8+cuWcnip7eYA==} + /next-seo@6.5.0(next@14.1.1)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-MfzUeWTN/x/rsKp/1n0213eojO97lIl0unxqbeCY+6pAucViHDA8GSLRRcXpgjsSmBxfCFdfpu7LXbt4ANQoNQ==} peerDependencies: next: ^8.1.1-canary.54 || >=9.0.0 react: '>=16.0.0' react-dom: '>=16.0.0' dependencies: - next: 14.1.0(react-dom@18.2.0)(react@18.2.0) + next: 14.1.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /next-themes@0.2.1(next@14.1.0)(react-dom@18.2.0)(react@18.2.0): + /next-themes@0.2.1(next@14.1.1)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-B+AKNfYNIzh0vqQQKqQItTS8evEouKD7H5Hj3kmuPERwddR2TxvDSFZuTj6T7Jfn1oyeUyJMydPl1Bkxkh0W7A==} peerDependencies: next: '*' react: '*' react-dom: '*' dependencies: - next: 14.1.0(react-dom@18.2.0)(react@18.2.0) + next: 14.1.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /next@14.1.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-wlzrsbfeSU48YQBjZhDzOwhWhGsy+uQycR8bHAOt1LY1bn3zZEcDyHQOEoN3aWzQ8LHCAJ1nqrWCc9XF2+O45Q==} + /next@14.1.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-McrGJqlGSHeaz2yTRPkEucxQKe5Zq7uPwyeHNmJaZNY4wx9E9QdxmTp310agFRoMuIYgQrCrT3petg13fSVOww==} engines: {node: '>=18.17.0'} hasBin: true peerDependencies: @@ -2527,31 +2527,31 @@ packages: sass: optional: true dependencies: - '@next/env': 14.1.0 + '@next/env': 14.1.1 '@swc/helpers': 0.5.2 busboy: 1.6.0 - caniuse-lite: 1.0.30001585 + caniuse-lite: 1.0.30001591 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) styled-jsx: 5.1.1(react@18.2.0) optionalDependencies: - '@next/swc-darwin-arm64': 14.1.0 - '@next/swc-darwin-x64': 14.1.0 - '@next/swc-linux-arm64-gnu': 14.1.0 - '@next/swc-linux-arm64-musl': 14.1.0 - '@next/swc-linux-x64-gnu': 14.1.0 - '@next/swc-linux-x64-musl': 14.1.0 - '@next/swc-win32-arm64-msvc': 14.1.0 - '@next/swc-win32-ia32-msvc': 14.1.0 - '@next/swc-win32-x64-msvc': 14.1.0 + '@next/swc-darwin-arm64': 14.1.1 + '@next/swc-darwin-x64': 14.1.1 + '@next/swc-linux-arm64-gnu': 14.1.1 + '@next/swc-linux-arm64-musl': 14.1.1 + '@next/swc-linux-x64-gnu': 14.1.1 + '@next/swc-linux-x64-musl': 14.1.1 + '@next/swc-win32-arm64-msvc': 14.1.1 + '@next/swc-win32-ia32-msvc': 14.1.1 + '@next/swc-win32-x64-msvc': 14.1.1 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros dev: false - /nextra-theme-docs@2.13.3(next@14.1.0)(nextra@2.13.3)(react-dom@18.2.0)(react@18.2.0): + /nextra-theme-docs@2.13.3(next@14.1.1)(nextra@2.13.3)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-B6xrnR86Gg4GzV56AomSwtmvSyAvnJz1xKOGGav1XKxkwvC8QeI17jdt/CqiKyIObJ+5bLqSFiKhaAZ5DYQP3g==} peerDependencies: next: '>=9.5.3' @@ -2568,17 +2568,17 @@ packages: git-url-parse: 13.1.1 intersection-observer: 0.12.2 match-sorter: 6.3.4 - next: 14.1.0(react-dom@18.2.0)(react@18.2.0) - next-seo: 6.4.0(next@14.1.0)(react-dom@18.2.0)(react@18.2.0) - next-themes: 0.2.1(next@14.1.0)(react-dom@18.2.0)(react@18.2.0) - nextra: 2.13.3(next@14.1.0)(react-dom@18.2.0)(react@18.2.0) + next: 14.1.1(react-dom@18.2.0)(react@18.2.0) + next-seo: 6.5.0(next@14.1.1)(react-dom@18.2.0)(react@18.2.0) + next-themes: 0.2.1(next@14.1.1)(react-dom@18.2.0)(react@18.2.0) + nextra: 2.13.3(next@14.1.1)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) scroll-into-view-if-needed: 3.1.0 zod: 3.22.4 dev: false - /nextra@2.13.3(next@14.1.0)(react-dom@18.2.0)(react@18.2.0): + /nextra@2.13.3(next@14.1.1)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-OBVuyQKh+oqrbVt0AosgNYnuReWuNrtJVEN7q18b/oEg2wEpuiq3UJfmIvGgOdNYc3zv3OYrzbcq7IhwtdHHEw==} engines: {node: '>=16'} peerDependencies: @@ -2598,7 +2598,7 @@ packages: gray-matter: 4.0.3 katex: 0.16.9 lodash.get: 4.4.2 - next: 14.1.0(react-dom@18.2.0)(react@18.2.0) + next: 14.1.1(react-dom@18.2.0)(react@18.2.0) next-mdx-remote: 4.4.1(react-dom@18.2.0)(react@18.2.0) p-limit: 3.1.0 react: 18.2.0 @@ -2644,8 +2644,8 @@ packages: path-key: 2.0.1 dev: false - /npm-to-yarn@2.1.0: - resolution: {integrity: sha512-2C1IgJLdJngq1bSER7K7CGFszRr9s2rijEwvENPEgI0eK9xlD3tNwDc0UJnRj7FIT2aydWm72jB88uVswAhXHA==} + /npm-to-yarn@2.2.1: + resolution: {integrity: sha512-O/j/ROyX0KGLG7O6Ieut/seQ0oiTpHF2tXAcFbpdTLQFiaNtkyTXXocM1fwpaa60dg1qpWj0nHlbNhx6qwuENQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: false @@ -2788,9 +2788,9 @@ packages: ts-node: optional: true dependencies: - lilconfig: 3.0.0 + lilconfig: 3.1.1 postcss: 8.4.35 - yaml: 2.3.4 + yaml: 2.4.0 dev: true /postcss-nested@6.0.1(postcss@8.4.35): @@ -3196,7 +3196,7 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true dependencies: - '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 glob: 10.3.10 lines-and-columns: 1.2.4 @@ -3451,13 +3451,13 @@ packages: unist-util-visit-parents: 6.0.1 dev: false - /update-browserslist-db@1.0.13(browserslist@4.22.3): + /update-browserslist-db@1.0.13(browserslist@4.23.0): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.22.3 + browserslist: 4.23.0 escalade: 3.1.2 picocolors: 1.0.0 dev: true @@ -3477,7 +3477,7 @@ packages: hasBin: true dependencies: dequal: 2.0.3 - diff: 5.1.0 + diff: 5.2.0 kleur: 4.1.5 sade: 1.8.1 dev: false @@ -3581,9 +3581,10 @@ packages: resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} dev: false - /yaml@2.3.4: - resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} + /yaml@2.4.0: + resolution: {integrity: sha512-j9iR8g+/t0lArF4V6NE/QCfT+CO7iLqrXAHZbJdo+LfjqP1vR8Fg5bSiaq6Q2lOD1AUEVrEVIgABvBFYojJVYQ==} engines: {node: '>= 14'} + hasBin: true dev: true /yocto-queue@0.1.0: diff --git a/frontend/admin/forum/components/forums-select/list.tsx b/frontend/admin/forum/components/forums-select/list.tsx index 141883c1b..45da105e1 100644 --- a/frontend/admin/forum/components/forums-select/list.tsx +++ b/frontend/admin/forum/components/forums-select/list.tsx @@ -1,14 +1,14 @@ import { CheckIcon } from "lucide-react"; import { useTranslations } from "next-intl"; -import type { ShowForumForums } from "@/graphql/hooks"; +import type { ShowForumForumsAdmin } from "@/graphql/hooks"; import type { ContentForumsSelectProps } from "./content"; import { CommandGroup, CommandItem } from "@/components/ui/command"; import { cn } from "@/functions/classnames"; import { useTextLang } from "@/hooks/core/use-text-lang"; interface Props extends ContentForumsSelectProps { - edges: Pick[]; + edges: Pick[]; } export const ListContentForumsSelect = ({ edges, onSelect, values }: Props) => { @@ -42,9 +42,7 @@ export const ListContentForumsSelect = ({ edges, onSelect, values }: Props) => { > - - {convertText(item.name)} - {item.id} - + {convertText(item.name)} ))} diff --git a/frontend/admin/forum/views/forums/table/item/actions/actions.tsx b/frontend/admin/forum/views/forums/table/item/actions/actions.tsx index c768ff397..5a93a52bc 100644 --- a/frontend/admin/forum/views/forums/table/item/actions/actions.tsx +++ b/frontend/admin/forum/views/forums/table/item/actions/actions.tsx @@ -3,13 +3,16 @@ import { DeleteActionForumAdmin } from "./delete/delete"; import type { ShowForumForumsAdminWithChildren } from "../../hooks/use-forum-forums-admin-api"; -export const ActionsForumAdmin = ( - props: Omit -) => { +interface ActionsForumAdminProps + extends Omit { + childrenCount: number; +} + +export const ActionsForumAdmin = (props: ActionsForumAdminProps) => { return (
- + {props.childrenCount > 0 && }
); }; diff --git a/frontend/admin/forum/views/forums/table/item/actions/delete/delete.tsx b/frontend/admin/forum/views/forums/table/item/actions/delete/delete.tsx index 02e06556e..e9d0ef4b7 100644 --- a/frontend/admin/forum/views/forums/table/item/actions/delete/delete.tsx +++ b/frontend/admin/forum/views/forums/table/item/actions/delete/delete.tsx @@ -25,12 +25,7 @@ export const DeleteActionForumAdmin = ( return ( - diff --git a/frontend/admin/forum/views/forums/table/item/item.tsx b/frontend/admin/forum/views/forums/table/item/item.tsx index 14e01c6ad..b9c3999be 100644 --- a/frontend/admin/forum/views/forums/table/item/item.tsx +++ b/frontend/admin/forum/views/forums/table/item/item.tsx @@ -103,7 +103,12 @@ export const ItemTableForumsForumAdmin = ({ {convertText(name)} - + ); diff --git a/frontend/next.config.js b/frontend/next.config.js index 9d3425573..8a92512f0 100644 --- a/frontend/next.config.js +++ b/frontend/next.config.js @@ -31,8 +31,8 @@ const config = () => { { hostname: "localhost", port: "8080", - protocol: "http" - // pathname: "/public/**" + protocol: "http", + pathname: "/public/**" }, { hostname: backend.hostname, diff --git a/frontend/package.json b/frontend/package.json index d6520992f..8b744f8c5 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -43,13 +43,13 @@ "cropperjs": "^1.6.1", "date-fns": "^3.3.1", "emoji-mart": "^5.5.2", - "framer-motion": "^11.0.6", + "framer-motion": "^11.0.8", "graphql": "^16.8.1", "graphql-tag": "^2.12.6", "lexical": "^0.13.1", "lodash": "^4.17.21", - "lucide-react": "^0.343.0", - "next": "^14.1.0", + "lucide-react": "^0.344.0", + "next": "^14.1.1", "next-intl": "^3.9.1", "next-themes": "^0.2.1", "react": "18.2.0", @@ -62,7 +62,7 @@ "react-virtuoso": "^4.7.1", "server-only": "^0.0.1", "sharp": "^0.33.2", - "sonner": "^1.4.2", + "sonner": "^1.4.3", "tailwindcss-animate": "^1.0.7", "use-debounce": "^10.0.0", "vaul": "^0.9.0", @@ -99,8 +99,8 @@ "@tanstack/react-query-devtools": "^5.24.1", "@tanstack/react-table": "^8.13.2", "@types/lodash": "^4.14.202", - "@types/node": "^20.11.22", - "@types/react": "^18.2.60", + "@types/node": "^20.11.24", + "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "@typescript-eslint/eslint-plugin": "^7.1.0", "@typescript-eslint/parser": "^7.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a96c13641..77f0ebc45 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -124,8 +124,8 @@ importers: specifier: ^1.5.3 version: 1.5.3 '@types/cookie-parser': - specifier: ^1.4.6 - version: 1.4.6 + specifier: ^1.4.7 + version: 1.4.7 '@types/express': specifier: ^4.17.21 version: 4.17.21 @@ -133,8 +133,8 @@ importers: specifier: ^29.5.12 version: 29.5.12 '@types/node': - specifier: ^20.11.22 - version: 20.11.22 + specifier: ^20.11.24 + version: 20.11.24 '@types/object-path': specifier: ^0.11.4 version: 0.11.4 @@ -185,7 +185,7 @@ importers: version: 2.0.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.11.22)(ts-node@10.9.2) + version: 29.7.0(@types/node@20.11.24)(ts-node@10.9.2) source-map-support: specifier: ^0.5.21 version: 0.5.21 @@ -200,7 +200,7 @@ importers: version: 9.5.1(typescript@5.3.3)(webpack@5.90.3) ts-node: specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.4.2)(@types/node@20.11.22)(typescript@5.3.3) + version: 10.9.2(@swc/core@1.4.2)(@types/node@20.11.24)(typescript@5.3.3) tsconfig-paths: specifier: ^4.2.0 version: 4.2.0 @@ -212,58 +212,58 @@ importers: dependencies: '@radix-ui/react-accordion': specifier: ^1.1.2 - version: 1.1.2(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) + version: 1.1.2(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-alert-dialog': specifier: ^1.0.5 - version: 1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-checkbox': specifier: ^1.0.4 - version: 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-dialog': specifier: ^1.0.5 - version: 1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-hover-card': specifier: ^1.0.7 - version: 1.0.7(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.7(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-label': specifier: ^2.0.2 - version: 2.0.2(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) + version: 2.0.2(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-navigation-menu': specifier: ^1.1.4 - version: 1.1.4(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) + version: 1.1.4(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-progress': specifier: ^1.0.3 - version: 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-radio-group': specifier: ^1.1.3 - version: 1.1.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) + version: 1.1.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-scroll-area': specifier: ^1.0.5 - version: 1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-select': specifier: ^2.0.0 - version: 2.0.0(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) + version: 2.0.0(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-separator': specifier: ^1.0.3 - version: 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-slot': specifier: ^1.0.2 - version: 1.0.2(@types/react@18.2.60)(react@18.2.0) + version: 1.0.2(@types/react@18.2.61)(react@18.2.0) '@radix-ui/react-switch': specifier: ^1.0.3 - version: 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-tabs': specifier: ^1.0.4 - version: 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-toggle': specifier: ^1.0.3 - version: 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-toggle-group': specifier: ^1.0.4 - version: 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-tooltip': specifier: ^1.0.7 - version: 1.0.7(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.7(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) autoprefixer: specifier: ^10.4.17 version: 10.4.17(postcss@8.4.35) @@ -275,7 +275,7 @@ importers: version: 2.1.0 cmdk: specifier: ^0.2.1 - version: 0.2.1(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) + version: 0.2.1(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) cropperjs: specifier: ^1.6.1 version: 1.6.1 @@ -286,8 +286,8 @@ importers: specifier: ^5.5.2 version: 5.5.2 framer-motion: - specifier: ^11.0.6 - version: 11.0.6(react-dom@18.2.0)(react@18.2.0) + specifier: ^11.0.8 + version: 11.0.8(react-dom@18.2.0)(react@18.2.0) graphql: specifier: ^16.8.1 version: 16.8.1 @@ -301,17 +301,17 @@ importers: specifier: ^4.17.21 version: 4.17.21 lucide-react: - specifier: ^0.343.0 - version: 0.343.0(react@18.2.0) + specifier: ^0.344.0 + version: 0.344.0(react@18.2.0) next: - specifier: ^14.1.0 - version: 14.1.0(@babel/core@7.24.0)(react-dom@18.2.0)(react@18.2.0)(sass@1.71.1) + specifier: ^14.1.1 + version: 14.1.1(@babel/core@7.24.0)(react-dom@18.2.0)(react@18.2.0)(sass@1.71.1) next-intl: specifier: ^3.9.1 - version: 3.9.1(next@14.1.0)(react@18.2.0) + version: 3.9.1(next@14.1.1)(react@18.2.0) next-themes: specifier: ^0.2.1 - version: 0.2.1(next@14.1.0)(react-dom@18.2.0)(react@18.2.0) + version: 0.2.1(next@14.1.1)(react-dom@18.2.0)(react@18.2.0) react: specifier: 18.2.0 version: 18.2.0 @@ -343,8 +343,8 @@ importers: specifier: ^0.33.2 version: 0.33.2 sonner: - specifier: ^1.4.2 - version: 1.4.2(react-dom@18.2.0)(react@18.2.0) + specifier: ^1.4.3 + version: 1.4.3(react-dom@18.2.0)(react@18.2.0) tailwindcss-animate: specifier: ^1.0.7 version: 1.0.7(tailwindcss@3.4.1) @@ -353,7 +353,7 @@ importers: version: 10.0.0(react@18.2.0) vaul: specifier: ^0.9.0 - version: 0.9.0(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) + version: 0.9.0(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) zod: specifier: ^3.22.4 version: 3.22.4 @@ -372,7 +372,7 @@ importers: version: 1.1.2 '@graphql-codegen/cli': specifier: 5.0.2 - version: 5.0.2(@types/node@20.11.22)(graphql@16.8.1)(typescript@5.3.3) + version: 5.0.2(@types/node@20.11.24)(graphql@16.8.1)(typescript@5.3.3) '@graphql-codegen/typescript': specifier: ^4.0.6 version: 4.0.6(graphql@16.8.1) @@ -405,7 +405,7 @@ importers: version: 0.13.1(@lexical/clipboard@0.13.1)(@lexical/selection@0.13.1)(lexical@0.13.1) '@lexical/react': specifier: ^0.13.1 - version: 0.13.1(lexical@0.13.1)(react-dom@18.2.0)(react@18.2.0)(yjs@13.6.12) + version: 0.13.1(lexical@0.13.1)(react-dom@18.2.0)(react@18.2.0)(yjs@13.6.14) '@lexical/rich-text': specifier: ^0.13.1 version: 0.13.1(@lexical/clipboard@0.13.1)(@lexical/selection@0.13.1)(@lexical/utils@0.13.1)(lexical@0.13.1) @@ -423,16 +423,16 @@ importers: version: 14.1.0 '@radix-ui/react-dropdown-menu': specifier: ^2.0.6 - version: 2.0.6(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) + version: 2.0.6(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-icons': specifier: ^1.3.0 version: 1.3.0(react@18.2.0) '@radix-ui/react-popover': specifier: ^1.0.7 - version: 1.0.7(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.7(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-toolbar': specifier: ^1.0.4 - version: 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) '@tanstack/eslint-plugin-query': specifier: ^5.20.1 version: 5.20.1(eslint@8.57.0)(typescript@5.3.3) @@ -449,11 +449,11 @@ importers: specifier: ^4.14.202 version: 4.14.202 '@types/node': - specifier: ^20.11.22 - version: 20.11.22 + specifier: ^20.11.24 + version: 20.11.24 '@types/react': - specifier: ^18.2.60 - version: 18.2.60 + specifier: ^18.2.61 + version: 18.2.61 '@types/react-dom': specifier: ^18.2.19 version: 18.2.19 @@ -498,7 +498,7 @@ importers: version: 3.4.1(ts-node@10.9.2) ts-node: specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.4.2)(@types/node@20.11.22)(typescript@5.3.3) + version: 10.9.2(@swc/core@1.4.2)(@types/node@20.11.24)(typescript@5.3.3) typescript: specifier: ^5.3.3 version: 5.3.3 @@ -640,7 +640,7 @@ packages: '@types/node-fetch': 2.6.11 async-retry: 1.3.3 cors: 2.8.5 - express: 4.18.2 + express: 4.18.3 graphql: 16.8.1 loglevel: 1.9.1 lru-cache: 7.18.3 @@ -839,8 +839,8 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.24.0 - '@jridgewell/gen-mapping': 0.3.4 - '@jridgewell/trace-mapping': 0.3.23 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.24 jsesc: 2.5.2 /@babel/helper-annotate-as-pure@7.22.5: @@ -2076,7 +2076,7 @@ packages: tslib: 2.6.2 dev: true - /@graphql-codegen/cli@5.0.2(@types/node@20.11.22)(graphql@16.8.1)(typescript@5.3.3): + /@graphql-codegen/cli@5.0.2(@types/node@20.11.24)(graphql@16.8.1)(typescript@5.3.3): resolution: {integrity: sha512-MBIaFqDiLKuO4ojN6xxG9/xL9wmfD3ZjZ7RsPjwQnSHBCUXnEkdKvX+JVpx87Pq29Ycn8wTJUguXnTZ7Di0Mlw==} hasBin: true peerDependencies: @@ -2095,12 +2095,12 @@ packages: '@graphql-tools/apollo-engine-loader': 8.0.1(graphql@16.8.1) '@graphql-tools/code-file-loader': 8.1.1(graphql@16.8.1) '@graphql-tools/git-loader': 8.0.5(graphql@16.8.1) - '@graphql-tools/github-loader': 8.0.1(@types/node@20.11.22)(graphql@16.8.1) + '@graphql-tools/github-loader': 8.0.1(@types/node@20.11.24)(graphql@16.8.1) '@graphql-tools/graphql-file-loader': 8.0.1(graphql@16.8.1) '@graphql-tools/json-file-loader': 8.0.1(graphql@16.8.1) '@graphql-tools/load': 8.0.2(graphql@16.8.1) - '@graphql-tools/prisma-loader': 8.0.3(@types/node@20.11.22)(graphql@16.8.1) - '@graphql-tools/url-loader': 8.0.2(@types/node@20.11.22)(graphql@16.8.1) + '@graphql-tools/prisma-loader': 8.0.3(@types/node@20.11.24)(graphql@16.8.1) + '@graphql-tools/url-loader': 8.0.2(@types/node@20.11.24)(graphql@16.8.1) '@graphql-tools/utils': 10.1.0(graphql@16.8.1) '@whatwg-node/fetch': 0.8.8 chalk: 4.1.2 @@ -2108,7 +2108,7 @@ packages: debounce: 1.2.1 detect-indent: 6.1.0 graphql: 16.8.1 - graphql-config: 5.0.3(@types/node@20.11.22)(graphql@16.8.1)(typescript@5.3.3) + graphql-config: 5.0.3(@types/node@20.11.24)(graphql@16.8.1)(typescript@5.3.3) inquirer: 8.2.6 is-glob: 4.0.3 jiti: 1.21.0 @@ -2382,7 +2382,7 @@ packages: - utf-8-validate dev: true - /@graphql-tools/executor-http@1.0.9(@types/node@20.11.22)(graphql@16.8.1): + /@graphql-tools/executor-http@1.0.9(@types/node@20.11.24)(graphql@16.8.1): resolution: {integrity: sha512-+NXaZd2MWbbrWHqU4EhXcrDbogeiCDmEbrAN+rMn4Nu2okDjn2MTFDbTIab87oEubQCH4Te1wDkWPKrzXup7+Q==} engines: {node: '>=16.0.0'} peerDependencies: @@ -2393,7 +2393,7 @@ packages: '@whatwg-node/fetch': 0.9.16 extract-files: 11.0.0 graphql: 16.8.1 - meros: 1.3.0(@types/node@20.11.22) + meros: 1.3.0(@types/node@20.11.24) tslib: 2.6.2 value-or-promise: 1.0.12 transitivePeerDependencies: @@ -2448,14 +2448,14 @@ packages: - supports-color dev: true - /@graphql-tools/github-loader@8.0.1(@types/node@20.11.22)(graphql@16.8.1): + /@graphql-tools/github-loader@8.0.1(@types/node@20.11.24)(graphql@16.8.1): resolution: {integrity: sha512-W4dFLQJ5GtKGltvh/u1apWRFKBQOsDzFxO9cJkOYZj1VzHCpRF43uLST4VbCfWve+AwBqOuKr7YgkHoxpRMkcg==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: '@ardatan/sync-fetch': 0.0.1 - '@graphql-tools/executor-http': 1.0.9(@types/node@20.11.22)(graphql@16.8.1) + '@graphql-tools/executor-http': 1.0.9(@types/node@20.11.24)(graphql@16.8.1) '@graphql-tools/graphql-tag-pluck': 8.3.0(graphql@16.8.1) '@graphql-tools/utils': 10.1.0(graphql@16.8.1) '@whatwg-node/fetch': 0.9.16 @@ -2580,13 +2580,13 @@ packages: tslib: 2.6.2 dev: true - /@graphql-tools/prisma-loader@8.0.3(@types/node@20.11.22)(graphql@16.8.1): + /@graphql-tools/prisma-loader@8.0.3(@types/node@20.11.24)(graphql@16.8.1): resolution: {integrity: sha512-oZhxnMr3Jw2WAW1h9FIhF27xWzIB7bXWM8olz4W12oII4NiZl7VRkFw9IT50zME2Bqi9LGh9pkmMWkjvbOpl+Q==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/url-loader': 8.0.2(@types/node@20.11.22)(graphql@16.8.1) + '@graphql-tools/url-loader': 8.0.2(@types/node@20.11.24)(graphql@16.8.1) '@graphql-tools/utils': 10.1.0(graphql@16.8.1) '@types/js-yaml': 4.0.9 '@types/json-stable-stringify': 1.0.36 @@ -2666,7 +2666,7 @@ packages: value-or-promise: 1.0.12 dev: true - /@graphql-tools/url-loader@8.0.2(@types/node@20.11.22)(graphql@16.8.1): + /@graphql-tools/url-loader@8.0.2(@types/node@20.11.24)(graphql@16.8.1): resolution: {integrity: sha512-1dKp2K8UuFn7DFo1qX5c1cyazQv2h2ICwA9esHblEqCYrgf69Nk8N7SODmsfWg94OEaI74IqMoM12t7eIGwFzQ==} engines: {node: '>=16.0.0'} peerDependencies: @@ -2675,7 +2675,7 @@ packages: '@ardatan/sync-fetch': 0.0.1 '@graphql-tools/delegate': 10.0.4(graphql@16.8.1) '@graphql-tools/executor-graphql-ws': 1.1.2(graphql@16.8.1) - '@graphql-tools/executor-http': 1.0.9(@types/node@20.11.22)(graphql@16.8.1) + '@graphql-tools/executor-http': 1.0.9(@types/node@20.11.24)(graphql@16.8.1) '@graphql-tools/executor-legacy-ws': 1.0.6(graphql@16.8.1) '@graphql-tools/utils': 10.1.0(graphql@16.8.1) '@graphql-tools/wrap': 10.0.2(graphql@16.8.1) @@ -2999,7 +2999,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.11.22 + '@types/node': 20.11.24 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -3020,14 +3020,14 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.22 + '@types/node': 20.11.24 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.11.22)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.11.24)(ts-node@10.9.2) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -3055,7 +3055,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.22 + '@types/node': 20.11.24 jest-mock: 29.7.0 dev: true @@ -3082,7 +3082,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.11.22 + '@types/node': 20.11.24 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -3114,8 +3114,8 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.23 - '@types/node': 20.11.22 + '@jridgewell/trace-mapping': 0.3.24 + '@types/node': 20.11.24 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -3148,7 +3148,7 @@ packages: resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jridgewell/trace-mapping': 0.3.23 + '@jridgewell/trace-mapping': 0.3.24 callsites: 3.1.0 graceful-fs: 4.2.11 dev: true @@ -3179,7 +3179,7 @@ packages: dependencies: '@babel/core': 7.24.0 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.23 + '@jridgewell/trace-mapping': 0.3.24 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 @@ -3203,7 +3203,7 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.11.22 + '@types/node': 20.11.24 '@types/yargs': 17.0.32 chalk: 4.1.2 dev: true @@ -3220,6 +3220,14 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.23 + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.24 + /@jridgewell/resolve-uri@3.1.1: resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} @@ -3232,11 +3240,15 @@ packages: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + /@jridgewell/source-map@0.3.5: resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} dependencies: - '@jridgewell/gen-mapping': 0.3.4 - '@jridgewell/trace-mapping': 0.3.23 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.24 dev: true /@jridgewell/sourcemap-codec@1.4.15: @@ -3248,6 +3260,12 @@ packages: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 + /@jridgewell/trace-mapping@0.3.24: + resolution: {integrity: sha512-+VaWXDa6+l6MhflBvVXjIEAzb59nQ2JUK3bwRp2zRpPtU+8TFRy9Gg/5oIcNlkEL5PGlBFGfemUVvIgLnTzq7Q==} + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: @@ -3398,7 +3416,7 @@ packages: lexical: 0.13.1 dev: true - /@lexical/react@0.13.1(lexical@0.13.1)(react-dom@18.2.0)(react@18.2.0)(yjs@13.6.12): + /@lexical/react@0.13.1(lexical@0.13.1)(react-dom@18.2.0)(react@18.2.0)(yjs@13.6.14): resolution: {integrity: sha512-Sy6EL230KAb0RZsZf1dZrRrc3+rvCDQWltcd8C/cqBUYlxsLYCW9s4f3RB2werngD/PtLYbBB48SYXNkIALITA==} peerDependencies: lexical: 0.13.1 @@ -3421,7 +3439,7 @@ packages: '@lexical/table': 0.13.1(lexical@0.13.1) '@lexical/text': 0.13.1(lexical@0.13.1) '@lexical/utils': 0.13.1(lexical@0.13.1) - '@lexical/yjs': 0.13.1(lexical@0.13.1)(yjs@13.6.12) + '@lexical/yjs': 0.13.1(lexical@0.13.1)(yjs@13.6.14) lexical: 0.13.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -3480,7 +3498,7 @@ packages: lexical: 0.13.1 dev: true - /@lexical/yjs@0.13.1(lexical@0.13.1)(yjs@13.6.12): + /@lexical/yjs@0.13.1(lexical@0.13.1)(yjs@13.6.14): resolution: {integrity: sha512-4GbqQM+PwNTV59AZoNrfTe/0rLjs+cX6Y6yAdZSRPBwr5L3JzYeU1TTcFCVQTtsE7KF8ddVP8sD7w9pi8rOWLA==} peerDependencies: lexical: 0.13.1 @@ -3488,7 +3506,7 @@ packages: dependencies: '@lexical/offset': 0.13.1(lexical@0.13.1) lexical: 0.13.1 - yjs: 13.6.12 + yjs: 13.6.14 dev: true /@ljharb/through@2.3.12: @@ -3885,8 +3903,8 @@ packages: - utf-8-validate dev: true - /@next/env@14.1.0: - resolution: {integrity: sha512-Py8zIo+02ht82brwwhTg36iogzFqGLPXlRGKQw5s+qP/kMNc4MAyDeEwBKDijk6zTIbegEgu8Qy7C1LboslQAw==} + /@next/env@14.1.1: + resolution: {integrity: sha512-7CnQyD5G8shHxQIIg3c7/pSeYFeMhsNbpU/bmvH7ZnDql7mNRgg8O2JZrhrc/soFnfBnKP4/xXNiiSIPn2w8gA==} dev: false /@next/eslint-plugin-next@14.1.0: @@ -3895,8 +3913,8 @@ packages: glob: 10.3.10 dev: true - /@next/swc-darwin-arm64@14.1.0: - resolution: {integrity: sha512-nUDn7TOGcIeyQni6lZHfzNoo9S0euXnu0jhsbMOmMJUBfgsnESdjN97kM7cBqQxZa8L/bM9om/S5/1dzCrW6wQ==} + /@next/swc-darwin-arm64@14.1.1: + resolution: {integrity: sha512-yDjSFKQKTIjyT7cFv+DqQfW5jsD+tVxXTckSe1KIouKk75t1qZmj/mV3wzdmFb0XHVGtyRjDMulfVG8uCKemOQ==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] @@ -3904,8 +3922,8 @@ packages: dev: false optional: true - /@next/swc-darwin-x64@14.1.0: - resolution: {integrity: sha512-1jgudN5haWxiAl3O1ljUS2GfupPmcftu2RYJqZiMJmmbBT5M1XDffjUtRUzP4W3cBHsrvkfOFdQ71hAreNQP6g==} + /@next/swc-darwin-x64@14.1.1: + resolution: {integrity: sha512-KCQmBL0CmFmN8D64FHIZVD9I4ugQsDBBEJKiblXGgwn7wBCSe8N4Dx47sdzl4JAg39IkSN5NNrr8AniXLMb3aw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] @@ -3913,8 +3931,8 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-gnu@14.1.0: - resolution: {integrity: sha512-RHo7Tcj+jllXUbK7xk2NyIDod3YcCPDZxj1WLIYxd709BQ7WuRYl3OWUNG+WUfqeQBds6kvZYlc42NJJTNi4tQ==} + /@next/swc-linux-arm64-gnu@14.1.1: + resolution: {integrity: sha512-YDQfbWyW0JMKhJf/T4eyFr4b3tceTorQ5w2n7I0mNVTFOvu6CGEzfwT3RSAQGTi/FFMTFcuspPec/7dFHuP7Eg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -3922,8 +3940,8 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-musl@14.1.0: - resolution: {integrity: sha512-v6kP8sHYxjO8RwHmWMJSq7VZP2nYCkRVQ0qolh2l6xroe9QjbgV8siTbduED4u0hlk0+tjS6/Tuy4n5XCp+l6g==} + /@next/swc-linux-arm64-musl@14.1.1: + resolution: {integrity: sha512-fiuN/OG6sNGRN/bRFxRvV5LyzLB8gaL8cbDH5o3mEiVwfcMzyE5T//ilMmaTrnA8HLMS6hoz4cHOu6Qcp9vxgQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -3931,8 +3949,8 @@ packages: dev: false optional: true - /@next/swc-linux-x64-gnu@14.1.0: - resolution: {integrity: sha512-zJ2pnoFYB1F4vmEVlb/eSe+VH679zT1VdXlZKX+pE66grOgjmKJHKacf82g/sWE4MQ4Rk2FMBCRnX+l6/TVYzQ==} + /@next/swc-linux-x64-gnu@14.1.1: + resolution: {integrity: sha512-rv6AAdEXoezjbdfp3ouMuVqeLjE1Bin0AuE6qxE6V9g3Giz5/R3xpocHoAi7CufRR+lnkuUjRBn05SYJ83oKNQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -3940,8 +3958,8 @@ packages: dev: false optional: true - /@next/swc-linux-x64-musl@14.1.0: - resolution: {integrity: sha512-rbaIYFt2X9YZBSbH/CwGAjbBG2/MrACCVu2X0+kSykHzHnYH5FjHxwXLkcoJ10cX0aWCEynpu+rP76x0914atg==} + /@next/swc-linux-x64-musl@14.1.1: + resolution: {integrity: sha512-YAZLGsaNeChSrpz/G7MxO3TIBLaMN8QWMr3X8bt6rCvKovwU7GqQlDu99WdvF33kI8ZahvcdbFsy4jAFzFX7og==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -3949,8 +3967,8 @@ packages: dev: false optional: true - /@next/swc-win32-arm64-msvc@14.1.0: - resolution: {integrity: sha512-o1N5TsYc8f/HpGt39OUQpQ9AKIGApd3QLueu7hXk//2xq5Z9OxmV6sQfNp8C7qYmiOlHYODOGqNNa0e9jvchGQ==} + /@next/swc-win32-arm64-msvc@14.1.1: + resolution: {integrity: sha512-1L4mUYPBMvVDMZg1inUYyPvFSduot0g73hgfD9CODgbr4xiTYe0VOMTZzaRqYJYBA9mana0x4eaAaypmWo1r5A==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] @@ -3958,8 +3976,8 @@ packages: dev: false optional: true - /@next/swc-win32-ia32-msvc@14.1.0: - resolution: {integrity: sha512-XXIuB1DBRCFwNO6EEzCTMHT5pauwaSj4SWs7CYnME57eaReAKBXCnkUE80p/pAZcewm7hs+vGvNqDPacEXHVkw==} + /@next/swc-win32-ia32-msvc@14.1.1: + resolution: {integrity: sha512-jvIE9tsuj9vpbbXlR5YxrghRfMuG0Qm/nZ/1KDHc+y6FpnZ/apsgh+G6t15vefU0zp3WSpTMIdXRUsNl/7RSuw==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] @@ -3967,8 +3985,8 @@ packages: dev: false optional: true - /@next/swc-win32-x64-msvc@14.1.0: - resolution: {integrity: sha512-9WEbVRRAqJ3YFVqEZIxUqkiO8l1nool1LmNxygr5HWF8AcSYsEpneUDhmjUVJEzO2A04+oPtZdombzzPPkTtgg==} + /@next/swc-win32-x64-msvc@14.1.1: + resolution: {integrity: sha512-S6K6EHDU5+1KrBDLko7/c1MNy/Ya73pIAmvKeFwsF4RmBFJSO7/7YeD4FnZ4iBdzE69PpQ4sOMU9ORKeNuxe8A==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -4107,7 +4125,7 @@ packages: dependencies: '@babel/runtime': 7.24.0 - /@radix-ui/react-accordion@1.1.2(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-accordion@1.1.2(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-fDG7jcoNKVjSK6yfmuAs0EnPDro0WMXIhMtXdTBWqEioVW206ku+4Lw07e+13lUkFkpoEQ2PdeMIAGpdqEAmDg==} peerDependencies: '@types/react': '*' @@ -4122,21 +4140,21 @@ packages: dependencies: '@babel/runtime': 7.24.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collapsible': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-collapsible': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-alert-dialog@1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-alert-dialog@1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-OrVIOcZL0tl6xibeuGt5/+UxoT2N27KCFOPjFyfXMnchxSHZ/OW7cCX2nGlIYJrbHK/fczPcFzAwvNBB6XBNMA==} peerDependencies: '@types/react': '*' @@ -4151,18 +4169,18 @@ packages: dependencies: '@babel/runtime': 7.24.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.60)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.61)(react@18.2.0) + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} peerDependencies: '@types/react': '*' @@ -4176,13 +4194,13 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.0 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - /@radix-ui/react-checkbox@1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-checkbox@1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-CBuGQa52aAYnADZVt/KBQzXrwx6TqnlwtcIPGtVt5JkkzQwMOLJjPukimhfKEr4GQNd43C+djUh5Ikopj8pSLg==} peerDependencies: '@types/react': '*' @@ -4197,20 +4215,20 @@ packages: dependencies: '@babel/runtime': 7.24.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-collapsible@1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-collapsible@1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg==} peerDependencies: '@types/react': '*' @@ -4225,20 +4243,20 @@ packages: dependencies: '@babel/runtime': 7.24.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} peerDependencies: '@types/react': '*' @@ -4252,11 +4270,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.0 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.60)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.61)(react@18.2.0) + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -4270,7 +4288,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.60)(react@18.2.0): + /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.61)(react@18.2.0): resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} peerDependencies: '@types/react': '*' @@ -4280,7 +4298,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.0 - '@types/react': 18.2.60 + '@types/react': 18.2.61 react: 18.2.0 /@radix-ui/react-context@1.0.0(react@18.2.0): @@ -4292,7 +4310,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-context@1.0.1(@types/react@18.2.60)(react@18.2.0): + /@radix-ui/react-context@1.0.1(@types/react@18.2.61)(react@18.2.0): resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} peerDependencies: '@types/react': '*' @@ -4302,10 +4320,10 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.0 - '@types/react': 18.2.60 + '@types/react': 18.2.61 react: 18.2.0 - /@radix-ui/react-dialog@1.0.0(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-dialog@1.0.0(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-Yn9YU+QlHYLWwV1XfKiqnGVpWYWk6MeBVM6x/bcoyPvxgjQGoeT35482viLPctTMWoMw0PoHgqfSox7Ig+957Q==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 @@ -4327,12 +4345,12 @@ packages: aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.5.4(@types/react@18.2.60)(react@18.2.0) + react-remove-scroll: 2.5.4(@types/react@18.2.61)(react@18.2.0) transitivePeerDependencies: - '@types/react' dev: false - /@radix-ui/react-dialog@1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-dialog@1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==} peerDependencies: '@types/react': '*' @@ -4347,26 +4365,26 @@ packages: dependencies: '@babel/runtime': 7.24.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.5.5(@types/react@18.2.60)(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.2.61)(react@18.2.0) dev: false - /@radix-ui/react-direction@1.0.1(@types/react@18.2.60)(react@18.2.0): + /@radix-ui/react-direction@1.0.1(@types/react@18.2.61)(react@18.2.0): resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} peerDependencies: '@types/react': '*' @@ -4376,7 +4394,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.0 - '@types/react': 18.2.60 + '@types/react': 18.2.61 react: 18.2.0 /@radix-ui/react-dismissable-layer@1.0.0(react-dom@18.2.0)(react@18.2.0): @@ -4395,7 +4413,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==} peerDependencies: '@types/react': '*' @@ -4410,16 +4428,16 @@ packages: dependencies: '@babel/runtime': 7.24.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.60)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.61)(react@18.2.0) + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - /@radix-ui/react-dropdown-menu@2.0.6(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-dropdown-menu@2.0.6(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA==} peerDependencies: '@types/react': '*' @@ -4434,13 +4452,13 @@ packages: dependencies: '@babel/runtime': 7.24.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-menu': 2.0.6(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-menu': 2.0.6(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -4455,7 +4473,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-focus-guards@1.0.1(@types/react@18.2.60)(react@18.2.0): + /@radix-ui/react-focus-guards@1.0.1(@types/react@18.2.61)(react@18.2.0): resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} peerDependencies: '@types/react': '*' @@ -4465,7 +4483,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.0 - '@types/react': 18.2.60 + '@types/react': 18.2.61 react: 18.2.0 /@radix-ui/react-focus-scope@1.0.0(react-dom@18.2.0)(react@18.2.0): @@ -4482,7 +4500,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==} peerDependencies: '@types/react': '*' @@ -4496,15 +4514,15 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.0 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - /@radix-ui/react-hover-card@1.0.7(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-hover-card@1.0.7(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-OcUN2FU0YpmajD/qkph3XzMcK/NmSk9hGWnjV68p6QiZMgILugusgQwnLSDs3oFSJYGKf3Y49zgFedhGh04k9A==} peerDependencies: '@types/react': '*' @@ -4519,15 +4537,15 @@ packages: dependencies: '@babel/runtime': 7.24.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -4551,7 +4569,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-id@1.0.1(@types/react@18.2.60)(react@18.2.0): + /@radix-ui/react-id@1.0.1(@types/react@18.2.61)(react@18.2.0): resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} peerDependencies: '@types/react': '*' @@ -4561,11 +4579,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.0 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@types/react': 18.2.61 react: 18.2.0 - /@radix-ui/react-label@2.0.2(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-label@2.0.2(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==} peerDependencies: '@types/react': '*' @@ -4579,14 +4597,14 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.0 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-menu@2.0.6(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-menu@2.0.6(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-BVkFLS+bUC8HcImkRKPSiVumA1VPOOEC5WBMiT+QAVsPzW1FJzI9KnqgGxVDPBcql5xXrHkD3JOVoXWEXD8SYA==} peerDependencies: '@types/react': '*' @@ -4601,30 +4619,30 @@ packages: dependencies: '@babel/runtime': 7.24.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.5.5(@types/react@18.2.60)(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.2.61)(react@18.2.0) dev: true - /@radix-ui/react-navigation-menu@1.1.4(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-navigation-menu@1.1.4(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-Cc+seCS3PmWmjI51ufGG7zp1cAAIRqHVw7C9LOA2TZ+R4hG6rDvHcTqIsEEFLmZO3zNVH72jOOE7kKNy8W+RtA==} peerDependencies: '@types/react': '*' @@ -4639,26 +4657,26 @@ packages: dependencies: '@babel/runtime': 7.24.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-popover@1.0.7(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-popover@1.0.7(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-shtvVnlsxT6faMnK/a7n0wptwBD23xc1Z5mdrtKLwVEfsEMXodS0r5s0/g5P0hX//EKYZS2sxUjqfzlg52ZSnQ==} peerDependencies: '@types/react': '*' @@ -4673,27 +4691,27 @@ packages: dependencies: '@babel/runtime': 7.24.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.5.5(@types/react@18.2.60)(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.2.61)(react@18.2.0) dev: true - /@radix-ui/react-popper@1.1.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-popper@1.1.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==} peerDependencies: '@types/react': '*' @@ -4708,16 +4726,16 @@ packages: dependencies: '@babel/runtime': 7.24.0 '@floating-ui/react-dom': 2.0.8(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.60)(react@18.2.0) + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.61)(react@18.2.0) '@radix-ui/rect': 1.0.1 - '@types/react': 18.2.60 + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -4734,7 +4752,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-portal@1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-portal@1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==} peerDependencies: '@types/react': '*' @@ -4748,8 +4766,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.0 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -4767,7 +4785,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} peerDependencies: '@types/react': '*' @@ -4781,9 +4799,9 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.0 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -4800,7 +4818,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} peerDependencies: '@types/react': '*' @@ -4814,13 +4832,13 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.0 - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.60)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.61)(react@18.2.0) + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - /@radix-ui/react-progress@1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-progress@1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-5G6Om/tYSxjSeEdrb1VfKkfZfn/1IlPWd731h2RfPuSbIfNUgfqAwbKfJCg/PP6nuUCTrYzalwHSpSinoWoCag==} peerDependencies: '@types/react': '*' @@ -4834,15 +4852,15 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.0 - '@radix-ui/react-context': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-context': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-radio-group@1.1.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-radio-group@1.1.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-x+yELayyefNeKeTx4fjK6j99Fs6c4qKm3aY38G3swQVTN6xMpsrbigC0uHs2L//g8q4qR7qOcww8430jJmi2ag==} peerDependencies: '@types/react': '*' @@ -4857,22 +4875,22 @@ packages: dependencies: '@babel/runtime': 7.24.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} peerDependencies: '@types/react': '*' @@ -4887,20 +4905,20 @@ packages: dependencies: '@babel/runtime': 7.24.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - /@radix-ui/react-scroll-area@1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-scroll-area@1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-b6PAgH4GQf9QEn8zbT2XUHpW5z8BzqEc7Kl11TwDrvuTrxlkcjTD5qa/bxgKr+nmuXKu4L/W5UZ4mlP/VG/5Gw==} peerDependencies: '@types/react': '*' @@ -4916,20 +4934,20 @@ packages: '@babel/runtime': 7.24.0 '@radix-ui/number': 1.0.1 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-select@2.0.0(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-select@2.0.0(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-RH5b7af4oHtkcHS7pG6Sgv5rk5Wxa7XI8W5gvB1N/yiuDGZxko1ynvOiVhFM7Cis2A8zxF9bTOUVbRDzPepe6w==} peerDependencies: '@types/react': '*' @@ -4945,32 +4963,32 @@ packages: '@babel/runtime': 7.24.0 '@radix-ui/number': 1.0.1 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-remove-scroll: 2.5.5(@types/react@18.2.60)(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.2.61)(react@18.2.0) dev: false - /@radix-ui/react-separator@1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-separator@1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw==} peerDependencies: '@types/react': '*' @@ -4984,8 +5002,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.0 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -5000,7 +5018,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-slot@1.0.2(@types/react@18.2.60)(react@18.2.0): + /@radix-ui/react-slot@1.0.2(@types/react@18.2.61)(react@18.2.0): resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} peerDependencies: '@types/react': '*' @@ -5010,11 +5028,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.0 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@types/react': 18.2.61 react: 18.2.0 - /@radix-ui/react-switch@1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-switch@1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-mxm87F88HyHztsI7N+ZUmEoARGkC22YVW5CaC+Byc+HRpuvCrOBPTAnXgf+tZ/7i0Sg/eOePGdMhUKhPaQEqow==} peerDependencies: '@types/react': '*' @@ -5029,19 +5047,19 @@ packages: dependencies: '@babel/runtime': 7.24.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-tabs@1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-tabs@1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog==} peerDependencies: '@types/react': '*' @@ -5056,20 +5074,20 @@ packages: dependencies: '@babel/runtime': 7.24.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-context': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-toggle-group@1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-toggle-group@1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A==} peerDependencies: '@types/react': '*' @@ -5084,18 +5102,18 @@ packages: dependencies: '@babel/runtime': 7.24.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-toggle': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-context': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-toggle': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - /@radix-ui/react-toggle@1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-toggle@1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg==} peerDependencies: '@types/react': '*' @@ -5110,14 +5128,14 @@ packages: dependencies: '@babel/runtime': 7.24.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - /@radix-ui/react-toolbar@1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-toolbar@1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-tBgmM/O7a07xbaEkYJWYTXkIdU/1pW4/KZORR43toC/4XWyBCURK0ei9kMUdp+gTPPKBgYLxXmRSH1EVcIDp8Q==} peerDependencies: '@types/react': '*' @@ -5132,19 +5150,19 @@ packages: dependencies: '@babel/runtime': 7.24.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-separator': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-toggle-group': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-context': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-separator': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-toggle-group': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true - /@radix-ui/react-tooltip@1.0.7(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-tooltip@1.0.7(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-lPh5iKNFVQ/jav/j6ZrWq3blfDJ0OH9R6FlNUHPMqdLuQ9vwDgFsRxvl8b7Asuy5c8xmoojHUxKHQSOAvMHxyw==} peerDependencies: '@types/react': '*' @@ -5159,18 +5177,18 @@ packages: dependencies: '@babel/runtime': 7.24.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -5185,7 +5203,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.60)(react@18.2.0): + /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.61)(react@18.2.0): resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} peerDependencies: '@types/react': '*' @@ -5195,7 +5213,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.0 - '@types/react': 18.2.60 + '@types/react': 18.2.61 react: 18.2.0 /@radix-ui/react-use-controllable-state@1.0.0(react@18.2.0): @@ -5208,7 +5226,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.60)(react@18.2.0): + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.61)(react@18.2.0): resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} peerDependencies: '@types/react': '*' @@ -5218,8 +5236,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.0 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@types/react': 18.2.61 react: 18.2.0 /@radix-ui/react-use-escape-keydown@1.0.0(react@18.2.0): @@ -5232,7 +5250,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.60)(react@18.2.0): + /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.61)(react@18.2.0): resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} peerDependencies: '@types/react': '*' @@ -5242,8 +5260,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.0 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@types/react': 18.2.61 react: 18.2.0 /@radix-ui/react-use-layout-effect@1.0.0(react@18.2.0): @@ -5255,7 +5273,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.60)(react@18.2.0): + /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.61)(react@18.2.0): resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} peerDependencies: '@types/react': '*' @@ -5265,10 +5283,10 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.0 - '@types/react': 18.2.60 + '@types/react': 18.2.61 react: 18.2.0 - /@radix-ui/react-use-previous@1.0.1(@types/react@18.2.60)(react@18.2.0): + /@radix-ui/react-use-previous@1.0.1(@types/react@18.2.61)(react@18.2.0): resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} peerDependencies: '@types/react': '*' @@ -5278,11 +5296,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.0 - '@types/react': 18.2.60 + '@types/react': 18.2.61 react: 18.2.0 dev: false - /@radix-ui/react-use-rect@1.0.1(@types/react@18.2.60)(react@18.2.0): + /@radix-ui/react-use-rect@1.0.1(@types/react@18.2.61)(react@18.2.0): resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} peerDependencies: '@types/react': '*' @@ -5293,10 +5311,10 @@ packages: dependencies: '@babel/runtime': 7.24.0 '@radix-ui/rect': 1.0.1 - '@types/react': 18.2.60 + '@types/react': 18.2.61 react: 18.2.0 - /@radix-ui/react-use-size@1.0.1(@types/react@18.2.60)(react@18.2.0): + /@radix-ui/react-use-size@1.0.1(@types/react@18.2.61)(react@18.2.0): resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} peerDependencies: '@types/react': '*' @@ -5306,11 +5324,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.0 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.60)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.61)(react@18.2.0) + '@types/react': 18.2.61 react: 18.2.0 - /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} peerDependencies: '@types/react': '*' @@ -5324,8 +5342,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.0 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.60 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.61 '@types/react-dom': 18.2.19 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -5688,20 +5706,20 @@ packages: /@types/bcrypt@5.0.2: resolution: {integrity: sha512-6atioO8Y75fNcbmj0G7UjI9lXN2pQ/IGJ2FWT4a/btd0Lk9lQalHLKhkgKVZ3r+spnmWUKfbMi1GEe9wyHQfNQ==} dependencies: - '@types/node': 20.11.22 + '@types/node': 20.11.24 dev: true /@types/body-parser@1.19.5: resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} dependencies: '@types/connect': 3.4.38 - '@types/node': 20.11.22 + '@types/node': 20.11.24 dev: true /@types/busboy@1.5.3: resolution: {integrity: sha512-YMBLFN/xBD8bnqywIlGyYqsNFXu6bsiY7h3Ae0kO17qEuTjsqeyYMRPSUDacIKIquws2Y6KjmxAyNx8xB3xQbw==} dependencies: - '@types/node': 20.11.22 + '@types/node': 20.11.24 dev: true /@types/cacheable-request@6.0.3: @@ -5709,18 +5727,18 @@ packages: dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 20.11.22 + '@types/node': 20.11.24 '@types/responselike': 1.0.3 dev: true /@types/connect@3.4.38: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: - '@types/node': 20.11.22 + '@types/node': 20.11.24 dev: true - /@types/cookie-parser@1.4.6: - resolution: {integrity: sha512-KoooCrD56qlLskXPLGUiJxOMnv5l/8m7cQD2OxJ73NPMhuSz9PmvwRD6EpjDyKBVrdJDdQ4bQK7JFNHnNmax0w==} + /@types/cookie-parser@1.4.7: + resolution: {integrity: sha512-Fvuyi354Z+uayxzIGCwYTayFKocfV7TuDYZClCdIP9ckhvAu/ixDtCB6qx2TT0FKjPLf1f3P/J1rgf6lPs64mw==} dependencies: '@types/express': 4.17.21 dev: true @@ -5735,17 +5753,17 @@ packages: /@types/cors@2.8.17: resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} dependencies: - '@types/node': 20.11.22 + '@types/node': 20.11.24 /@types/eslint-scope@3.7.7: resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} dependencies: - '@types/eslint': 8.56.4 + '@types/eslint': 8.56.5 '@types/estree': 1.0.5 dev: true - /@types/eslint@8.56.4: - resolution: {integrity: sha512-lG1GLUnL5vuRBGb3MgWUWLdGMH2Hps+pERuyQXCfWozuGKdnhf9Pbg4pkcrVUHjKrU7Rl+GCZ/299ObBXZFAxg==} + /@types/eslint@8.56.5: + resolution: {integrity: sha512-u5/YPJHo1tvkSF2CE0USEkxon82Z5DBy2xR+qfyYNszpX9qcs4sT6uq2kBbj4BXY1+DBGDPnrhMZV3pKWGNukw==} dependencies: '@types/estree': 1.0.5 '@types/json-schema': 7.0.15 @@ -5758,7 +5776,7 @@ packages: /@types/express-serve-static-core@4.17.43: resolution: {integrity: sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==} dependencies: - '@types/node': 20.11.22 + '@types/node': 20.11.24 '@types/qs': 6.9.12 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -5776,7 +5794,7 @@ packages: /@types/graceful-fs@4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: - '@types/node': 20.11.22 + '@types/node': 20.11.24 dev: true /@types/http-cache-semantics@4.0.4: @@ -5833,13 +5851,13 @@ packages: /@types/jsonwebtoken@9.0.5: resolution: {integrity: sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==} dependencies: - '@types/node': 20.11.22 + '@types/node': 20.11.24 dev: true /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 20.11.22 + '@types/node': 20.11.24 dev: true /@types/lodash@4.14.202: @@ -5869,12 +5887,12 @@ packages: /@types/node-fetch@2.6.11: resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==} dependencies: - '@types/node': 20.11.22 + '@types/node': 20.11.24 form-data: 4.0.0 dev: true - /@types/node@20.11.22: - resolution: {integrity: sha512-/G+IxWxma6V3E+pqK1tSl2Fo1kl41pK1yeCyDsgkF9WlVAme4j5ISYM2zR11bgLFJGLN5sVK40T4RJNuiZbEjA==} + /@types/node@20.11.24: + resolution: {integrity: sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==} dependencies: undici-types: 5.26.5 @@ -5885,7 +5903,7 @@ packages: /@types/pg@8.11.2: resolution: {integrity: sha512-G2Mjygf2jFMU/9hCaTYxJrwdObdcnuQde1gndooZSOHsNSaCehAuwc7EIuSA34Do8Jx2yZ19KtvW8P0j4EuUXw==} dependencies: - '@types/node': 20.11.22 + '@types/node': 20.11.24 pg-protocol: 1.6.0 pg-types: 4.0.2 @@ -5903,10 +5921,10 @@ packages: /@types/react-dom@18.2.19: resolution: {integrity: sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==} dependencies: - '@types/react': 18.2.60 + '@types/react': 18.2.61 - /@types/react@18.2.60: - resolution: {integrity: sha512-dfiPj9+k20jJrLGOu9Nf6eqxm2EyJRrq2NvwOFsfbb7sFExZ9WELPs67UImHj3Ayxg8ruTtKtNnbjaF8olPq0A==} + /@types/react@18.2.61: + resolution: {integrity: sha512-NURTN0qNnJa7O/k4XUkEW2yfygA+NxS0V5h1+kp9jPwhzZy95q3ADoGMP0+JypMhrZBTTgjKAUlTctde1zzeQA==} dependencies: '@types/prop-types': 15.7.11 '@types/scheduler': 0.16.8 @@ -5915,13 +5933,13 @@ packages: /@types/readdir-glob@1.1.5: resolution: {integrity: sha512-raiuEPUYqXu+nvtY2Pe8s8FEmZ3x5yAH4VkLdihcPdalvsHltomrRC9BzuStrJ9yk06470hS0Crw0f1pXqD+Hg==} dependencies: - '@types/node': 20.11.22 + '@types/node': 20.11.24 dev: true /@types/responselike@1.0.3: resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} dependencies: - '@types/node': 20.11.22 + '@types/node': 20.11.24 dev: true /@types/scheduler@0.16.8: @@ -5939,7 +5957,7 @@ packages: resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} dependencies: '@types/mime': 1.3.5 - '@types/node': 20.11.22 + '@types/node': 20.11.24 dev: true /@types/serve-static@1.15.5: @@ -5947,7 +5965,7 @@ packages: dependencies: '@types/http-errors': 2.0.4 '@types/mime': 3.0.4 - '@types/node': 20.11.22 + '@types/node': 20.11.24 dev: true /@types/stack-utils@2.0.3: @@ -5959,7 +5977,7 @@ packages: dependencies: '@types/cookiejar': 2.1.5 '@types/methods': 1.1.4 - '@types/node': 20.11.22 + '@types/node': 20.11.24 dev: true /@types/supertest@6.0.2: @@ -5972,7 +5990,7 @@ packages: /@types/tar@6.1.11: resolution: {integrity: sha512-ThA1WD8aDdVU4VLuyq5NEqriwXErF5gEIJeyT6gHBWU7JtSmW2a5qjNv3/vR82O20mW+1vhmeZJfBQPT3HCugg==} dependencies: - '@types/node': 20.11.22 + '@types/node': 20.11.24 minipass: 4.2.8 dev: true @@ -5986,7 +6004,7 @@ packages: /@types/ws@8.5.10: resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} dependencies: - '@types/node': 20.11.22 + '@types/node': 20.11.24 dev: true /@types/yargs-parser@21.0.3: @@ -6736,7 +6754,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 es-errors: 1.3.0 es-shim-unscopables: 1.0.2 dev: true @@ -7324,11 +7342,11 @@ packages: engines: {node: '>=6'} dev: true - /cli-color@2.0.3: - resolution: {integrity: sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==} + /cli-color@2.0.4: + resolution: {integrity: sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA==} engines: {node: '>=0.10'} dependencies: - d: 1.0.1 + d: 1.0.2 es5-ext: 0.10.64 es6-iterator: 2.0.3 memoizee: 0.4.15 @@ -7421,13 +7439,13 @@ packages: engines: {node: '>=0.10.0'} dev: false - /cmdk@0.2.1(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /cmdk@0.2.1(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-U6//9lQ6JvT47+6OF6Gi8BvkxYQ8SCRRSKIJkthIMsFsLZRG0cKvTtuTaefyIKMQb8rvvXy0wGdpTNq/jPtm+g==} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 dependencies: - '@radix-ui/react-dialog': 1.0.0(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-dialog': 1.0.0(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: @@ -7647,7 +7665,7 @@ packages: typescript: 5.3.3 dev: true - /create-jest@29.7.0(@types/node@20.11.22)(ts-node@10.9.2): + /create-jest@29.7.0(@types/node@20.11.24)(ts-node@10.9.2): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -7656,7 +7674,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.11.22)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.11.24)(ts-node@10.9.2) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -7745,11 +7763,12 @@ packages: /csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - /d@1.0.1: - resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} + /d@1.0.2: + resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} + engines: {node: '>=0.12'} dependencies: es5-ext: 0.10.64 - type: 1.2.0 + type: 2.7.2 dev: true /damerau-levenshtein@1.0.8: @@ -8153,7 +8172,7 @@ packages: dependencies: '@types/cookie': 0.4.1 '@types/cors': 2.8.17 - '@types/node': 20.11.22 + '@types/node': 20.11.24 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.4.2 @@ -8283,6 +8302,53 @@ packages: which-typed-array: 1.1.14 dev: true + /es-abstract@1.22.5: + resolution: {integrity: sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-set-tostringtag: 2.0.3 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.3 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.1 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-negative-zero: 2.0.3 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.1 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.0 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.8 + string.prototype.trimend: 1.0.7 + string.prototype.trimstart: 1.0.7 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.5 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.14 + dev: true + /es-array-method-boxes-properly@1.0.0: resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} dev: true @@ -8306,7 +8372,7 @@ packages: asynciterator.prototype: 1.0.0 call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 es-errors: 1.3.0 es-set-tostringtag: 2.0.3 function-bind: 1.1.2 @@ -8363,7 +8429,7 @@ packages: requiresBuild: true dependencies: es6-iterator: 2.0.3 - es6-symbol: 3.1.3 + es6-symbol: 3.1.4 esniff: 2.0.1 next-tick: 1.1.0 dev: true @@ -8371,25 +8437,26 @@ packages: /es6-iterator@2.0.3: resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} dependencies: - d: 1.0.1 + d: 1.0.2 es5-ext: 0.10.64 - es6-symbol: 3.1.3 + es6-symbol: 3.1.4 dev: true - /es6-symbol@3.1.3: - resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==} + /es6-symbol@3.1.4: + resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} + engines: {node: '>=0.12'} dependencies: - d: 1.0.1 + d: 1.0.2 ext: 1.7.0 dev: true /es6-weak-map@2.0.3: resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==} dependencies: - d: 1.0.1 + d: 1.0.2 es5-ext: 0.10.64 es6-iterator: 2.0.3 - es6-symbol: 3.1.3 + es6-symbol: 3.1.4 dev: true /esbuild-register@3.5.0(esbuild@0.19.12): @@ -8832,7 +8899,7 @@ packages: resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} engines: {node: '>=0.10'} dependencies: - d: 1.0.1 + d: 1.0.2 es5-ext: 0.10.64 event-emitter: 0.3.5 type: 2.7.2 @@ -8890,7 +8957,7 @@ packages: /event-emitter@0.3.5: resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} dependencies: - d: 1.0.1 + d: 1.0.2 es5-ext: 0.10.64 dev: true @@ -8993,6 +9060,45 @@ packages: - supports-color dev: true + /express@4.18.3: + resolution: {integrity: sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw==} + engines: {node: '>= 0.10.0'} + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.2 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.5.0 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.2.0 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.7 + qs: 6.11.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.18.0 + serve-static: 1.15.0 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: true + /ext-list@2.2.2: resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==} engines: {node: '>=0.10.0'} @@ -9279,8 +9385,8 @@ packages: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} dev: false - /framer-motion@11.0.6(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-BpO3mWF8UwxzO3Ca5AmSkrg14QYTeJa9vKgoLOoBdBdTPj0e81i1dMwnX6EQJXRieUx20uiDBXq8bA6y7N6b8Q==} + /framer-motion@11.0.8(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-1KSGNuqe1qZkS/SWQlDnqK2VCVzRVEoval379j0FiUBJAZoqgwyvqFkfvJbgW2IPFo4wX16K+M0k5jO23lCIjA==} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 @@ -9556,7 +9662,7 @@ packages: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true - /graphql-config@5.0.3(@types/node@20.11.22)(graphql@16.8.1)(typescript@5.3.3): + /graphql-config@5.0.3(@types/node@20.11.24)(graphql@16.8.1)(typescript@5.3.3): resolution: {integrity: sha512-BNGZaoxIBkv9yy6Y7omvsaBUHOzfFcII3UN++tpH8MGOKFPFkCPZuwx09ggANMt8FgyWP1Od8SWPmrUEZca4NQ==} engines: {node: '>= 16.0.0'} peerDependencies: @@ -9570,7 +9676,7 @@ packages: '@graphql-tools/json-file-loader': 8.0.1(graphql@16.8.1) '@graphql-tools/load': 8.0.2(graphql@16.8.1) '@graphql-tools/merge': 9.0.3(graphql@16.8.1) - '@graphql-tools/url-loader': 8.0.2(@types/node@20.11.22)(graphql@16.8.1) + '@graphql-tools/url-loader': 8.0.2(@types/node@20.11.24)(graphql@16.8.1) '@graphql-tools/utils': 10.1.0(graphql@16.8.1) cosmiconfig: 8.3.6(typescript@5.3.3) graphql: 16.8.1 @@ -10335,7 +10441,7 @@ packages: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.22 + '@types/node': 20.11.24 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.1 @@ -10356,7 +10462,7 @@ packages: - supports-color dev: true - /jest-cli@29.7.0(@types/node@20.11.22)(ts-node@10.9.2): + /jest-cli@29.7.0(@types/node@20.11.24)(ts-node@10.9.2): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -10370,10 +10476,10 @@ packages: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.11.22)(ts-node@10.9.2) + create-jest: 29.7.0(@types/node@20.11.24)(ts-node@10.9.2) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.11.22)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.11.24)(ts-node@10.9.2) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -10384,7 +10490,7 @@ packages: - ts-node dev: true - /jest-config@29.7.0(@types/node@20.11.22)(ts-node@10.9.2): + /jest-config@29.7.0(@types/node@20.11.24)(ts-node@10.9.2): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -10399,7 +10505,7 @@ packages: '@babel/core': 7.24.0 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.22 + '@types/node': 20.11.24 babel-jest: 29.7.0(@babel/core@7.24.0) chalk: 4.1.2 ci-info: 3.9.0 @@ -10419,7 +10525,7 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.2(@swc/core@1.4.2)(@types/node@20.11.22)(typescript@5.3.3) + ts-node: 10.9.2(@swc/core@1.4.2)(@types/node@20.11.24)(typescript@5.3.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -10460,7 +10566,7 @@ packages: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.22 + '@types/node': 20.11.24 jest-mock: 29.7.0 jest-util: 29.7.0 dev: true @@ -10476,7 +10582,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.11.22 + '@types/node': 20.11.24 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -10527,7 +10633,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.11.22 + '@types/node': 20.11.24 jest-util: 29.7.0 dev: true @@ -10582,7 +10688,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.22 + '@types/node': 20.11.24 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -10613,7 +10719,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.22 + '@types/node': 20.11.24 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 @@ -10665,7 +10771,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.11.22 + '@types/node': 20.11.24 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -10690,7 +10796,7 @@ packages: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.22 + '@types/node': 20.11.24 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -10702,7 +10808,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.11.22 + '@types/node': 20.11.24 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -10711,13 +10817,13 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.11.22 + '@types/node': 20.11.24 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest@29.7.0(@types/node@20.11.22)(ts-node@10.9.2): + /jest@29.7.0(@types/node@20.11.24)(ts-node@10.9.2): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -10730,7 +10836,7 @@ packages: '@jest/core': 29.7.0(ts-node@10.9.2) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.11.22)(ts-node@10.9.2) + jest-cli: 29.7.0(@types/node@20.11.24)(ts-node@10.9.2) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -10781,7 +10887,7 @@ packages: resolution: {integrity: sha512-cVnggDrVkAAA3OvFfHpFEhOnmcsUpleEKq4d4O8sQWWSH40MBrWstKigVB1kGrgLWzuom+7rRdaCsnBD6VyObQ==} hasBin: true dependencies: - cli-color: 2.0.3 + cli-color: 2.0.4 difflib: 0.2.4 dreamopt: 0.8.0 dev: true @@ -11129,8 +11235,8 @@ packages: es5-ext: 0.10.64 dev: true - /lucide-react@0.343.0(react@18.2.0): - resolution: {integrity: sha512-zDjzr5OlS86DJZNSy5igMx18T423LfEyZ6lxo82KpjCi8m5DPddl/OPLRDHyfs/TqZPh7C1ySPw4D6matfm6bQ==} + /lucide-react@0.344.0(react@18.2.0): + resolution: {integrity: sha512-6YyBnn91GB45VuVT96bYCOKElbJzUHqp65vX8cDcu55MQL9T969v4dhGClpljamuI/+KMO9P6w9Acq1CVQGvIQ==} peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 dependencies: @@ -11196,7 +11302,7 @@ packages: /memoizee@0.4.15: resolution: {integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==} dependencies: - d: 1.0.1 + d: 1.0.2 es5-ext: 0.10.64 es6-weak-map: 2.0.3 event-emitter: 0.3.5 @@ -11218,7 +11324,7 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - /meros@1.3.0(@types/node@20.11.22): + /meros@1.3.0(@types/node@20.11.24): resolution: {integrity: sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==} engines: {node: '>=13'} peerDependencies: @@ -11227,7 +11333,7 @@ packages: '@types/node': optional: true dependencies: - '@types/node': 20.11.22 + '@types/node': 20.11.24 dev: true /methods@1.1.2: @@ -11448,7 +11554,7 @@ packages: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: true - /next-intl@3.9.1(next@14.1.0)(react@18.2.0): + /next-intl@3.9.1(next@14.1.1)(react@18.2.0): resolution: {integrity: sha512-1j+5lLTY5kHshqnVoeAep+gQO1xX1KlJU3irZkdCOhr0woo562qLKOsGGVh+7bB5luBMu9qQBQy7ZwNK81Z2Ig==} peerDependencies: next: ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0 @@ -11456,19 +11562,19 @@ packages: dependencies: '@formatjs/intl-localematcher': 0.2.32 negotiator: 0.6.3 - next: 14.1.0(@babel/core@7.24.0)(react-dom@18.2.0)(react@18.2.0)(sass@1.71.1) + next: 14.1.1(@babel/core@7.24.0)(react-dom@18.2.0)(react@18.2.0)(sass@1.71.1) react: 18.2.0 use-intl: 3.9.1(react@18.2.0) dev: false - /next-themes@0.2.1(next@14.1.0)(react-dom@18.2.0)(react@18.2.0): + /next-themes@0.2.1(next@14.1.1)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-B+AKNfYNIzh0vqQQKqQItTS8evEouKD7H5Hj3kmuPERwddR2TxvDSFZuTj6T7Jfn1oyeUyJMydPl1Bkxkh0W7A==} peerDependencies: next: '*' react: '*' react-dom: '*' dependencies: - next: 14.1.0(@babel/core@7.24.0)(react-dom@18.2.0)(react@18.2.0)(sass@1.71.1) + next: 14.1.1(@babel/core@7.24.0)(react-dom@18.2.0)(react@18.2.0)(sass@1.71.1) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -11477,8 +11583,8 @@ packages: resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} dev: true - /next@14.1.0(@babel/core@7.24.0)(react-dom@18.2.0)(react@18.2.0)(sass@1.71.1): - resolution: {integrity: sha512-wlzrsbfeSU48YQBjZhDzOwhWhGsy+uQycR8bHAOt1LY1bn3zZEcDyHQOEoN3aWzQ8LHCAJ1nqrWCc9XF2+O45Q==} + /next@14.1.1(@babel/core@7.24.0)(react-dom@18.2.0)(react@18.2.0)(sass@1.71.1): + resolution: {integrity: sha512-McrGJqlGSHeaz2yTRPkEucxQKe5Zq7uPwyeHNmJaZNY4wx9E9QdxmTp310agFRoMuIYgQrCrT3petg13fSVOww==} engines: {node: '>=18.17.0'} hasBin: true peerDependencies: @@ -11492,7 +11598,7 @@ packages: sass: optional: true dependencies: - '@next/env': 14.1.0 + '@next/env': 14.1.1 '@swc/helpers': 0.5.2 busboy: 1.6.0 caniuse-lite: 1.0.30001591 @@ -11503,15 +11609,15 @@ packages: sass: 1.71.1 styled-jsx: 5.1.1(@babel/core@7.24.0)(react@18.2.0) optionalDependencies: - '@next/swc-darwin-arm64': 14.1.0 - '@next/swc-darwin-x64': 14.1.0 - '@next/swc-linux-arm64-gnu': 14.1.0 - '@next/swc-linux-arm64-musl': 14.1.0 - '@next/swc-linux-x64-gnu': 14.1.0 - '@next/swc-linux-x64-musl': 14.1.0 - '@next/swc-win32-arm64-msvc': 14.1.0 - '@next/swc-win32-ia32-msvc': 14.1.0 - '@next/swc-win32-x64-msvc': 14.1.0 + '@next/swc-darwin-arm64': 14.1.1 + '@next/swc-darwin-x64': 14.1.1 + '@next/swc-linux-arm64-gnu': 14.1.1 + '@next/swc-linux-arm64-musl': 14.1.1 + '@next/swc-linux-x64-gnu': 14.1.1 + '@next/swc-linux-x64-musl': 14.1.1 + '@next/swc-win32-arm64-msvc': 14.1.1 + '@next/swc-win32-ia32-msvc': 14.1.1 + '@next/swc-win32-x64-msvc': 14.1.1 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -11677,7 +11783,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 dev: true /object.fromentries@2.0.7: @@ -11703,7 +11809,7 @@ packages: resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} dependencies: define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 dev: true /object.values@1.1.7: @@ -12104,7 +12210,7 @@ packages: dependencies: lilconfig: 3.1.1 postcss: 8.4.35 - ts-node: 10.9.2(@swc/core@1.4.2)(@types/node@20.11.22)(typescript@5.3.3) + ts-node: 10.9.2(@swc/core@1.4.2)(@types/node@20.11.24)(typescript@5.3.3) yaml: 2.4.0 /postcss-nested@6.0.1(postcss@8.4.35): @@ -12343,14 +12449,14 @@ packages: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} dependencies: - side-channel: 1.0.5 + side-channel: 1.0.6 dev: true /qs@6.11.2: resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} engines: {node: '>=0.6'} dependencies: - side-channel: 1.0.5 + side-channel: 1.0.6 dev: true /queue-microtask@1.2.3: @@ -12456,7 +12562,7 @@ packages: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: true - /react-remove-scroll-bar@2.3.5(@types/react@18.2.60)(react@18.2.0): + /react-remove-scroll-bar@2.3.5(@types/react@18.2.61)(react@18.2.0): resolution: {integrity: sha512-3cqjOqg6s0XbOjWvmasmqHch+RLxIEk2r/70rzGXuz3iIGQsQheEQyqYCBb5EECoD01Vo2SIbDqW4paLeLTASw==} engines: {node: '>=10'} peerDependencies: @@ -12466,12 +12572,12 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.60 + '@types/react': 18.2.61 react: 18.2.0 - react-style-singleton: 2.2.1(@types/react@18.2.60)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.2.61)(react@18.2.0) tslib: 2.6.2 - /react-remove-scroll@2.5.4(@types/react@18.2.60)(react@18.2.0): + /react-remove-scroll@2.5.4(@types/react@18.2.61)(react@18.2.0): resolution: {integrity: sha512-xGVKJJr0SJGQVirVFAUZ2k1QLyO6m+2fy0l8Qawbp5Jgrv3DeLalrfMNBFSlmz5kriGGzsVBtGVnf4pTKIhhWA==} engines: {node: '>=10'} peerDependencies: @@ -12481,16 +12587,16 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.60 + '@types/react': 18.2.61 react: 18.2.0 - react-remove-scroll-bar: 2.3.5(@types/react@18.2.60)(react@18.2.0) - react-style-singleton: 2.2.1(@types/react@18.2.60)(react@18.2.0) + react-remove-scroll-bar: 2.3.5(@types/react@18.2.61)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.2.61)(react@18.2.0) tslib: 2.6.2 - use-callback-ref: 1.3.1(@types/react@18.2.60)(react@18.2.0) - use-sidecar: 1.1.2(@types/react@18.2.60)(react@18.2.0) + use-callback-ref: 1.3.1(@types/react@18.2.61)(react@18.2.0) + use-sidecar: 1.1.2(@types/react@18.2.61)(react@18.2.0) dev: false - /react-remove-scroll@2.5.5(@types/react@18.2.60)(react@18.2.0): + /react-remove-scroll@2.5.5(@types/react@18.2.61)(react@18.2.0): resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} engines: {node: '>=10'} peerDependencies: @@ -12500,15 +12606,15 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.60 + '@types/react': 18.2.61 react: 18.2.0 - react-remove-scroll-bar: 2.3.5(@types/react@18.2.60)(react@18.2.0) - react-style-singleton: 2.2.1(@types/react@18.2.60)(react@18.2.0) + react-remove-scroll-bar: 2.3.5(@types/react@18.2.61)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.2.61)(react@18.2.0) tslib: 2.6.2 - use-callback-ref: 1.3.1(@types/react@18.2.60)(react@18.2.0) - use-sidecar: 1.1.2(@types/react@18.2.60)(react@18.2.0) + use-callback-ref: 1.3.1(@types/react@18.2.61)(react@18.2.0) + use-sidecar: 1.1.2(@types/react@18.2.61)(react@18.2.0) - /react-style-singleton@2.2.1(@types/react@18.2.60)(react@18.2.0): + /react-style-singleton@2.2.1(@types/react@18.2.61)(react@18.2.0): resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} peerDependencies: @@ -12518,7 +12624,7 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.60 + '@types/react': 18.2.61 get-nonce: 1.0.1 invariant: 2.2.4 react: 18.2.0 @@ -12640,7 +12746,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 es-errors: 1.3.0 get-intrinsic: 1.2.4 globalthis: 1.0.3 @@ -13095,6 +13201,16 @@ packages: object-inspect: 1.13.1 dev: true + /side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.1 + dev: true + /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -13190,8 +13306,8 @@ packages: - supports-color - utf-8-validate - /sonner@1.4.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-x3Kfzfhb56V/ErvUnH5dZcsu6QkZpyIlRAogO4vAbN+AkBsA/8CFqOV+5djqbE5pQCpejtO4JBWL1zRj2sO/Vg==} + /sonner@1.4.3(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-SArYlHbkjqRuLiR0iGY2ZSr09oOrxw081ZZkQPfXrs8aZQLIBOLOdzTYxGJB5yIZ7qL56UEPmrX1YqbODwG0Lw==} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 @@ -13335,13 +13451,13 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.22.5 get-intrinsic: 1.2.4 has-symbols: 1.0.3 internal-slot: 1.0.7 regexp.prototype.flags: 1.5.2 set-function-name: 2.0.2 - side-channel: 1.0.5 + side-channel: 1.0.6 dev: true /string.prototype.trim@1.2.8: @@ -13474,7 +13590,7 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true dependencies: - '@jridgewell/gen-mapping': 0.3.4 + '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 glob: 10.3.10 lines-and-columns: 1.2.4 @@ -13642,7 +13758,7 @@ packages: uglify-js: optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.23 + '@jridgewell/trace-mapping': 0.3.24 '@swc/core': 1.4.2 esbuild: 0.19.12 jest-worker: 27.5.1 @@ -13668,7 +13784,7 @@ packages: uglify-js: optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.23 + '@jridgewell/trace-mapping': 0.3.24 '@swc/core': 1.4.2 esbuild: 0.19.12 jest-worker: 27.5.1 @@ -13834,7 +13950,7 @@ packages: bs-logger: 0.2.6 esbuild: 0.19.12 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.11.22)(ts-node@10.9.2) + jest: 29.7.0(@types/node@20.11.24)(ts-node@10.9.2) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -13864,7 +13980,7 @@ packages: resolution: {integrity: sha512-PGcnJoTBnVGy6yYNFxWVNkdcAuAMstvutN9MgDJIV6L0oG8fB+ZNNy1T+wJzah8RPGor1mZuPQkVfXNDpy9eHA==} dev: true - /ts-node@10.9.2(@swc/core@1.4.2)(@types/node@20.11.22)(typescript@5.3.3): + /ts-node@10.9.2(@swc/core@1.4.2)(@types/node@20.11.24)(typescript@5.3.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -13884,7 +14000,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.11.22 + '@types/node': 20.11.24 acorn: 8.11.3 acorn-walk: 8.3.2 arg: 4.1.3 @@ -13969,10 +14085,6 @@ packages: mime-types: 2.1.35 dev: true - /type@1.2.0: - resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==} - dev: true - /type@2.7.2: resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} dev: true @@ -14153,7 +14265,7 @@ packages: resolution: {integrity: sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==} dev: true - /use-callback-ref@1.3.1(@types/react@18.2.60)(react@18.2.0): + /use-callback-ref@1.3.1(@types/react@18.2.61)(react@18.2.0): resolution: {integrity: sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ==} engines: {node: '>=10'} peerDependencies: @@ -14163,7 +14275,7 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.60 + '@types/react': 18.2.61 react: 18.2.0 tslib: 2.6.2 @@ -14186,7 +14298,7 @@ packages: react: 18.2.0 dev: false - /use-sidecar@1.1.2(@types/react@18.2.60)(react@18.2.0): + /use-sidecar@1.1.2(@types/react@18.2.61)(react@18.2.0): resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} engines: {node: '>=10'} peerDependencies: @@ -14196,7 +14308,7 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.60 + '@types/react': 18.2.61 detect-node-es: 1.1.0 react: 18.2.0 tslib: 2.6.2 @@ -14221,7 +14333,7 @@ packages: resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} engines: {node: '>=10.12.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.23 + '@jridgewell/trace-mapping': 0.3.24 '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 dev: true @@ -14239,13 +14351,13 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - /vaul@0.9.0(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0): + /vaul@0.9.0(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-bZSySGbAHiTXmZychprnX/dE0EsSige88xtyyL3/MCRbrFotRPQZo7UdydGXZWw+CKbNOw5Ow8gwAo93/nB/Cg==} peerDependencies: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 dependencies: - '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.60)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.2.19)(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: @@ -14649,8 +14761,8 @@ packages: yargs-parser: 21.1.1 dev: true - /yjs@13.6.12: - resolution: {integrity: sha512-KOT8ILoyVH2f/PxPadeu5kVVS055D1r3x1iFfJVJzFdnN98pVGM8H07NcKsO+fG3F7/0tf30Vnokf5YIqhU/iw==} + /yjs@13.6.14: + resolution: {integrity: sha512-D+7KcUr0j+vBCUSKXXEWfA+bG4UQBviAwP3gYBhkstkgwy5+8diOPMx0iqLIOxNo/HxaREUimZRxqHGAHCL2BQ==} engines: {node: '>=16.0.0', npm: '>=8.0.0'} dependencies: lib0: 0.2.90 From 9a66625b4c403c6a7ba73c50a051e666ad0821ad Mon Sep 17 00:00:00 2001 From: aXenDeveloper Date: Fri, 1 Mar 2024 17:50:08 +0100 Subject: [PATCH 6/6] feat(forum): Add total topics and total posts into forum item view --- .../table/hooks/use-forum-forums-admin-api.ts | 14 ++++++- .../forums/table/item/actions/actions.tsx | 2 +- frontend/components/icon/icon.tsx | 3 +- frontend/graphql/hooks.ts | 37 +++++++++++++++++-- .../forums/admin__forum_forums__show.gql | 4 ++ .../queries/forum/forum_forums__show.gql | 12 ++++++ .../queries/forum/forum_forums__show_item.gql | 26 ++++++++++++- frontend/langs/en/forum.json | 2 + frontend/langs/pl/forum.json | 2 + .../views/forum/forums/category/category.tsx | 10 ++--- .../1/forum/views/forum/forums/item/child.tsx | 4 +- .../forums/item/{item-forum.tsx => item.tsx} | 20 ++++++++-- .../views/forum/forums/item/last-post.tsx | 3 ++ .../1/forum/views/forum/forums/item/stats.tsx | 28 ++++++++++++++ .../forum/forums/item/wrapper-item-forum.tsx | 8 ++-- .../forums/views/[id]/forum-forum-view.tsx | 2 +- 16 files changed, 152 insertions(+), 25 deletions(-) rename frontend/themes/1/forum/views/forum/forums/item/{item-forum.tsx => item.tsx} (69%) create mode 100644 frontend/themes/1/forum/views/forum/forums/item/last-post.tsx create mode 100644 frontend/themes/1/forum/views/forum/forums/item/stats.tsx diff --git a/frontend/admin/forum/views/forums/table/hooks/use-forum-forums-admin-api.ts b/frontend/admin/forum/views/forums/table/hooks/use-forum-forums-admin-api.ts index 94e349339..f82316467 100644 --- a/frontend/admin/forum/views/forums/table/hooks/use-forum-forums-admin-api.ts +++ b/frontend/admin/forum/views/forums/table/hooks/use-forum-forums-admin-api.ts @@ -48,7 +48,19 @@ export const useForumForumsAdminAPI = ({ initData }: Args) => { parentId, depth: parent.depth + 1, index: parent.children.length, - children: (item.children ?? []) as ShowForumForumsAdminWithChildren[] + // Map children to add permissions / Disable all permissions, by default + children: + item.children.map(child => ({ + ...child, + children: [], + permissions: { + can_all_read: false, + can_all_create: false, + can_all_reply: false, + can_all_view: false, + groups: [] + } + })) ?? [] }); }); diff --git a/frontend/admin/forum/views/forums/table/item/actions/actions.tsx b/frontend/admin/forum/views/forums/table/item/actions/actions.tsx index 5a93a52bc..0695c56ec 100644 --- a/frontend/admin/forum/views/forums/table/item/actions/actions.tsx +++ b/frontend/admin/forum/views/forums/table/item/actions/actions.tsx @@ -12,7 +12,7 @@ export const ActionsForumAdmin = (props: ActionsForumAdminProps) => { return (
- {props.childrenCount > 0 && } + {props.childrenCount === 0 && }
); }; diff --git a/frontend/components/icon/icon.tsx b/frontend/components/icon/icon.tsx index e4816266a..8adb12a77 100644 --- a/frontend/components/icon/icon.tsx +++ b/frontend/components/icon/icon.tsx @@ -6,8 +6,9 @@ import { cn } from "@/functions/classnames"; export type IconLucideNames = keyof typeof Lucide.icons; -interface Props extends Lucide.LucideProps { +interface Props extends Omit { name: IconLucideNames | string; + className?: string; } export const Icon = memo(({ className, name, ...props }: Props) => { diff --git a/frontend/graphql/hooks.ts b/frontend/graphql/hooks.ts index 94ccc51a2..a5887e362 100644 --- a/frontend/graphql/hooks.ts +++ b/frontend/graphql/hooks.ts @@ -512,6 +512,7 @@ export type QueryAdmin__Core_Themes__ShowArgs = { export type QueryAdmin__Forum_Forums__ShowArgs = { cursor?: InputMaybe; first?: InputMaybe; + ids?: InputMaybe>; last?: InputMaybe; parent_id?: InputMaybe; search?: InputMaybe; @@ -880,6 +881,8 @@ export type ShowForumForumsCounts = { __typename?: 'ShowForumForumsCounts'; posts: Scalars['Int']['output']; topics: Scalars['Int']['output']; + total_posts: Scalars['Int']['output']; + total_topics: Scalars['Int']['output']; }; export type ShowForumForumsObj = { @@ -1478,12 +1481,12 @@ export type Admin__Forum_Forums__ShowQueryVariables = Exact<{ }>; -export type Admin__Forum_Forums__ShowQuery = { __typename?: 'Query', admin__forum_forums__show: { __typename?: 'ShowForumForumsAdminObj', edges: Array<{ __typename?: 'ShowForumForumsAdmin', id: number, position: number, created: number, description: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, children: Array<{ __typename?: 'ChildrenShowForumForums', created: number, id: number, position: number, description: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, _count: { __typename?: 'ShowForumForumsCounts', posts: number, topics: number } }>, permissions: { __typename?: 'PermissionsForumForumsAdmin', can_all_create: boolean, can_all_read: boolean, can_all_reply: boolean, can_all_view: boolean, groups: Array<{ __typename?: 'GroupsPermissionsForumForums', can_create: boolean, can_read: boolean, can_reply: boolean, can_view: boolean, id: number }> }, _count: { __typename?: 'ShowForumForumsCounts', posts: number, topics: number } }>, pageInfo: { __typename?: 'PageInfo', count: number, endCursor?: number | null, hasNextPage: boolean, hasPreviousPage: boolean, startCursor?: number | null, totalCount: number } } }; +export type Admin__Forum_Forums__ShowQuery = { __typename?: 'Query', admin__forum_forums__show: { __typename?: 'ShowForumForumsAdminObj', edges: Array<{ __typename?: 'ShowForumForumsAdmin', id: number, position: number, created: number, description: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, children: Array<{ __typename?: 'ChildrenShowForumForums', created: number, id: number, position: number, description: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, _count: { __typename?: 'ShowForumForumsCounts', posts: number, topics: number, total_posts: number, total_topics: number } }>, permissions: { __typename?: 'PermissionsForumForumsAdmin', can_all_create: boolean, can_all_read: boolean, can_all_reply: boolean, can_all_view: boolean, groups: Array<{ __typename?: 'GroupsPermissionsForumForums', can_create: boolean, can_read: boolean, can_reply: boolean, can_view: boolean, id: number }> }, _count: { __typename?: 'ShowForumForumsCounts', posts: number, topics: number, total_posts: number, total_topics: number } }>, pageInfo: { __typename?: 'PageInfo', count: number, endCursor?: number | null, hasNextPage: boolean, hasPreviousPage: boolean, startCursor?: number | null, totalCount: number } } }; export type Forum_Forums__ShowQueryVariables = Exact<{ [key: string]: never; }>; -export type Forum_Forums__ShowQuery = { __typename?: 'Query', forum_forums__show: { __typename?: 'ShowForumForumsObj', edges: Array<{ __typename?: 'ShowForumForumsWithChildren', id: number, description: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, children: Array<{ __typename?: 'ChildrenShowForumForums', id: number, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, children: Array<{ __typename?: 'LastChildShowForumForums', id: number, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }> }>, description: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }> }> }> } }; +export type Forum_Forums__ShowQuery = { __typename?: 'Query', forum_forums__show: { __typename?: 'ShowForumForumsObj', edges: Array<{ __typename?: 'ShowForumForumsWithChildren', id: number, description: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, children: Array<{ __typename?: 'ChildrenShowForumForums', id: number, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, children: Array<{ __typename?: 'LastChildShowForumForums', id: number, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }> }>, description: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, _count: { __typename?: 'ShowForumForumsCounts', total_posts: number, total_topics: number, topics: number, posts: number } }>, _count: { __typename?: 'ShowForumForumsCounts', total_posts: number, total_topics: number, topics: number, posts: number } }> } }; export type Forum_Forums__Show_ItemQueryVariables = Exact<{ cursor?: InputMaybe; @@ -1493,7 +1496,7 @@ export type Forum_Forums__Show_ItemQueryVariables = Exact<{ }>; -export type Forum_Forums__Show_ItemQuery = { __typename?: 'Query', forum_forums__show: { __typename?: 'ShowForumForumsObj', edges: Array<{ __typename?: 'ShowForumForumsWithChildren', id: number, description: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, children: Array<{ __typename?: 'ChildrenShowForumForums', id: number, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, children: Array<{ __typename?: 'LastChildShowForumForums', id: number, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }> }>, description: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }> }>, permissions: { __typename?: 'PermissionsForumForums', can_create: boolean } }> }, forum_topics__show: { __typename?: 'ShowTopicsForumsObj', edges: Array<{ __typename?: 'ShowTopicsForums', created: number, id: number, locked: boolean, title: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, user: { __typename?: 'User', id: number, name_seo: string, name: string, avatar_color: string, avatar?: { __typename?: 'AvatarUser', id: number, dir_folder: string, name: string } | null, group: { __typename?: 'GroupUser', id: number, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }> } }, content: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, forum: { __typename?: 'ForumTopicsForums', id: number, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }> } }>, pageInfo: { __typename?: 'PageInfo', count: number, endCursor?: number | null, hasNextPage: boolean, hasPreviousPage: boolean, startCursor?: number | null, totalCount: number } } }; +export type Forum_Forums__Show_ItemQuery = { __typename?: 'Query', forum_forums__show: { __typename?: 'ShowForumForumsObj', edges: Array<{ __typename?: 'ShowForumForumsWithChildren', id: number, description: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, children: Array<{ __typename?: 'ChildrenShowForumForums', id: number, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, children: Array<{ __typename?: 'LastChildShowForumForums', id: number, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }> }>, description: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, _count: { __typename?: 'ShowForumForumsCounts', total_posts: number, total_topics: number, topics: number, posts: number } }>, permissions: { __typename?: 'PermissionsForumForums', can_create: boolean }, _count: { __typename?: 'ShowForumForumsCounts', total_posts: number, total_topics: number, topics: number, posts: number } }> }, forum_topics__show: { __typename?: 'ShowTopicsForumsObj', edges: Array<{ __typename?: 'ShowTopicsForums', created: number, id: number, locked: boolean, title: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, user: { __typename?: 'User', id: number, name_seo: string, name: string, avatar_color: string, avatar?: { __typename?: 'AvatarUser', id: number, dir_folder: string, name: string } | null, group: { __typename?: 'GroupUser', id: number, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }> } }, content: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }>, forum: { __typename?: 'ForumTopicsForums', id: number, name: Array<{ __typename?: 'TextLanguage', language_code: string, value: string }> } }>, pageInfo: { __typename?: 'PageInfo', count: number, endCursor?: number | null, hasNextPage: boolean, hasPreviousPage: boolean, startCursor?: number | null, totalCount: number } } }; export type Forum_Forums__Show_Item_MoreQueryVariables = Exact<{ cursor?: InputMaybe; @@ -2477,6 +2480,8 @@ export const Admin__Forum_Forums__Show = gql` _count { posts topics + total_posts + total_topics } } permissions { @@ -2495,6 +2500,8 @@ export const Admin__Forum_Forums__Show = gql` _count { posts topics + total_posts + total_topics } } pageInfo { @@ -2538,6 +2545,18 @@ export const Forum_Forums__Show = gql` language_code value } + _count { + total_posts + total_topics + topics + posts + } + } + _count { + total_posts + total_topics + topics + posts } } } @@ -2573,10 +2592,22 @@ export const Forum_Forums__Show_Item = gql` language_code value } + _count { + total_posts + total_topics + topics + posts + } } permissions { can_create } + _count { + total_posts + total_topics + topics + posts + } } } forum_topics__show( diff --git a/frontend/graphql/queries/forum/admin/forums/admin__forum_forums__show.gql b/frontend/graphql/queries/forum/admin/forums/admin__forum_forums__show.gql index 78453f4fe..0223dd019 100644 --- a/frontend/graphql/queries/forum/admin/forums/admin__forum_forums__show.gql +++ b/frontend/graphql/queries/forum/admin/forums/admin__forum_forums__show.gql @@ -31,6 +31,8 @@ query Admin__forum_forums__show($first: Int, $cursor: Int, $parentId: Int) { _count { posts topics + total_posts + total_topics } } permissions { @@ -49,6 +51,8 @@ query Admin__forum_forums__show($first: Int, $cursor: Int, $parentId: Int) { _count { posts topics + total_posts + total_topics } } pageInfo { diff --git a/frontend/graphql/queries/forum/forum_forums__show.gql b/frontend/graphql/queries/forum/forum_forums__show.gql index 78c463a0c..b5bcac9e3 100644 --- a/frontend/graphql/queries/forum/forum_forums__show.gql +++ b/frontend/graphql/queries/forum/forum_forums__show.gql @@ -27,6 +27,18 @@ query Forum_forums__show { language_code value } + _count { + total_posts + total_topics + topics + posts + } + } + _count { + total_posts + total_topics + topics + posts } } } diff --git a/frontend/graphql/queries/forum/forum_forums__show_item.gql b/frontend/graphql/queries/forum/forum_forums__show_item.gql index fa8c0e6af..d79be009b 100644 --- a/frontend/graphql/queries/forum/forum_forums__show_item.gql +++ b/frontend/graphql/queries/forum/forum_forums__show_item.gql @@ -1,4 +1,9 @@ -query Forum_forums__show_item($cursor: Int, $first: Int, $last: Int, $forumId: Int!) { +query Forum_forums__show_item( + $cursor: Int + $first: Int + $last: Int + $forumId: Int! +) { forum_forums__show(ids: [$forumId]) { edges { id @@ -27,13 +32,30 @@ query Forum_forums__show_item($cursor: Int, $first: Int, $last: Int, $forumId: I language_code value } + _count { + total_posts + total_topics + topics + posts + } } permissions { can_create } + _count { + total_posts + total_topics + topics + posts + } } } - forum_topics__show(cursor: $cursor, first: $first, last: $last, forum_id: $forumId) { + forum_topics__show( + cursor: $cursor + first: $first + last: $last + forum_id: $forumId + ) { edges { created id diff --git a/frontend/langs/en/forum.json b/frontend/langs/en/forum.json index 989a9395d..2ac2ee4d9 100644 --- a/frontend/langs/en/forum.json +++ b/frontend/langs/en/forum.json @@ -2,6 +2,8 @@ "forum": { "forum": "Forum", "by": "By , ", + "topics_title_count": "{count, plural, =1 {Topic} other {Topics}}", + "posts_title_count": "{count, plural, =1 {Post} other {Posts}}", "topics": { "not_found": "No topics found in this forum.", "username_format": ", ", diff --git a/frontend/langs/pl/forum.json b/frontend/langs/pl/forum.json index c3236049c..448d38332 100644 --- a/frontend/langs/pl/forum.json +++ b/frontend/langs/pl/forum.json @@ -2,6 +2,8 @@ "forum": { "forum": "Forum", "by": "Przez , ", + "topics_title_count": "{count, plural, =1 {Temat} few {Tematy} many {Tematów} other {Tematów}}", + "posts_title_count": "{count, plural, =1 {Post} few {Posty} many {Postów} other {Postów}}", "topics": { "not_found": "Nie znaleziono tematów w tym forum.", "username_format": ", ", diff --git a/frontend/themes/1/forum/views/forum/forums/category/category.tsx b/frontend/themes/1/forum/views/forum/forums/category/category.tsx index eabe41a18..aa810e35b 100644 --- a/frontend/themes/1/forum/views/forum/forums/category/category.tsx +++ b/frontend/themes/1/forum/views/forum/forums/category/category.tsx @@ -1,18 +1,16 @@ import { Card, CardContent } from "@/components/ui/card"; import { Link } from "@/i18n"; import { cn } from "@/functions/classnames"; -import { ItemForum, type ItemForumProps } from "../item/item-forum"; -import type { TextLanguage } from "@/graphql/hooks"; +import { ItemForum, type ItemForumProps } from "../item/item"; +import type { ShowForumForumsWithChildren } from "@/graphql/hooks"; import { useTextLang } from "@/hooks/core/use-text-lang"; import { ReadOnlyEditor } from "@/components/editor/read-only/read-only-editor"; import { WrapperCategoryForum } from "./wrapper"; import { ChevronCategoryForumButton } from "./chevron-button"; import { ChildrenWrapperCategoryForum } from "./children-wrapper"; -interface Props { - description: TextLanguage[]; - id: number; - name: TextLanguage[]; +interface Props + extends Pick { children?: ItemForumProps[] | null; } diff --git a/frontend/themes/1/forum/views/forum/forums/item/child.tsx b/frontend/themes/1/forum/views/forum/forums/item/child.tsx index de374f221..312dc02c3 100644 --- a/frontend/themes/1/forum/views/forum/forums/item/child.tsx +++ b/frontend/themes/1/forum/views/forum/forums/item/child.tsx @@ -3,14 +3,14 @@ import { Folder } from "lucide-react"; import { Link } from "@/i18n"; -import type { ItemForumProps } from "./item-forum"; +import type { ItemForumProps } from "./item"; import { buttonVariants } from "@/components/ui/button"; import { useTextLang } from "@/hooks/core/use-text-lang"; export const ChildButtonItemForum = ({ id, name -}: Omit) => { +}: Pick) => { const { convertNameToLink, convertText } = useTextLang(); return ( diff --git a/frontend/themes/1/forum/views/forum/forums/item/item-forum.tsx b/frontend/themes/1/forum/views/forum/forums/item/item.tsx similarity index 69% rename from frontend/themes/1/forum/views/forum/forums/item/item-forum.tsx rename to frontend/themes/1/forum/views/forum/forums/item/item.tsx index 41b2381ef..592e4d436 100644 --- a/frontend/themes/1/forum/views/forum/forums/item/item-forum.tsx +++ b/frontend/themes/1/forum/views/forum/forums/item/item.tsx @@ -1,20 +1,24 @@ import { MessagesSquare } from "lucide-react"; import { Link } from "@/i18n"; -import type { TextLanguage } from "@/graphql/hooks"; +import type { ShowForumForumsCounts, TextLanguage } from "@/graphql/hooks"; import { useTextLang } from "@/hooks/core/use-text-lang"; import { ReadOnlyEditor } from "@/components/editor/read-only/read-only-editor"; import { WrapperItemForum } from "./wrapper-item-forum"; import { ChildButtonItemForum } from "./child"; +import { StatsItemForum } from "./stats"; +import { LastPostItemForum } from "./last-post"; export interface ItemForumProps { + _count: Pick; description: TextLanguage[]; id: number; name: TextLanguage[]; - children?: Omit[] | null; + children?: Omit[] | null; } export const ItemForum = ({ + _count, children, description, id, @@ -24,7 +28,10 @@ export const ItemForum = ({ const href = `/forum/${convertNameToLink({ id, name })}`; return ( - +
@@ -55,6 +62,13 @@ export const ItemForum = ({ )}
+ + {_count.total_topics > 0 && _count.total_posts > 0 && ( +
+ + +
+ )}
); }; diff --git a/frontend/themes/1/forum/views/forum/forums/item/last-post.tsx b/frontend/themes/1/forum/views/forum/forums/item/last-post.tsx new file mode 100644 index 000000000..c86578345 --- /dev/null +++ b/frontend/themes/1/forum/views/forum/forums/item/last-post.tsx @@ -0,0 +1,3 @@ +export const LastPostItemForum = () => { + return
Last Post - Not Implemented!
; +}; diff --git a/frontend/themes/1/forum/views/forum/forums/item/stats.tsx b/frontend/themes/1/forum/views/forum/forums/item/stats.tsx new file mode 100644 index 000000000..f0de6ac98 --- /dev/null +++ b/frontend/themes/1/forum/views/forum/forums/item/stats.tsx @@ -0,0 +1,28 @@ +import { useTranslations } from "next-intl"; + +import type { ShowForumForumsCounts } from "@/graphql/hooks"; + +export const StatsItemForum = ({ + total_posts, + total_topics +}: Pick) => { + const t = useTranslations("forum"); + + return ( +
+
+ {total_topics} + + {t("topics_title_count", { count: total_topics })} + +
+ +
+ {total_posts} + + {t("posts_title_count", { count: total_posts })} + +
+
+ ); +}; diff --git a/frontend/themes/1/forum/views/forum/forums/item/wrapper-item-forum.tsx b/frontend/themes/1/forum/views/forum/forums/item/wrapper-item-forum.tsx index d2220c0ee..5e54a8ee3 100644 --- a/frontend/themes/1/forum/views/forum/forums/item/wrapper-item-forum.tsx +++ b/frontend/themes/1/forum/views/forum/forums/item/wrapper-item-forum.tsx @@ -9,16 +9,14 @@ import { useRouter } from "@/i18n"; interface Props { children: ReactNode; href: string; + className?: string; } -export const WrapperItemForum = ({ children, href }: Props) => { +export const WrapperItemForum = ({ children, className, href }: Props) => { const { push } = useRouter(); return ( -
push(href)} - className="px-6 py-4 border-t hover:bg-muted/50 flex gap-4 cursor-pointer flex-col md:flex-row" - > +
push(href)} className={className}> {children}
); diff --git a/frontend/themes/1/forum/views/forum/forums/views/[id]/forum-forum-view.tsx b/frontend/themes/1/forum/views/forum/forums/views/[id]/forum-forum-view.tsx index 5dfdc03ac..b53e7523d 100644 --- a/frontend/themes/1/forum/views/forum/forums/views/[id]/forum-forum-view.tsx +++ b/frontend/themes/1/forum/views/forum/forums/views/[id]/forum-forum-view.tsx @@ -8,7 +8,7 @@ import { TopicsListForum } from "./topics-list/topics-list"; import { ReadOnlyEditor } from "@/components/editor/read-only/read-only-editor"; import { HeaderContent } from "@/components/header-content/header-content"; -import { ItemForum } from "../../item/item-forum"; +import { ItemForum } from "../../item/item"; export interface ForumForumViewProps { data: Forum_Forums__Show_ItemQuery;