From 08d9a9083c94764c86cbaf704adf01dc7d28653c Mon Sep 17 00:00:00 2001 From: TechQuery Date: Sat, 31 May 2025 06:07:10 +0800 Subject: [PATCH 1/4] [refactor] simplify Activity Form pages with REST Form component [refactor] simplify Badge lists with Badge Bar component [fix] some detail bugs [optimize] update Upstream packages Signed-off-by: TechQuery --- components/Activity/ActivityEditor.tsx | 374 ++---- components/DateTimeInput.tsx | 6 +- components/Git/Card.tsx | 22 +- components/Git/CardList.tsx | 25 +- components/Git/GitTeamCard.tsx | 22 +- components/HTMLEditor.tsx | 15 +- models/Activity/Enrollment.ts | 12 +- models/Activity/index.ts | 11 +- package.json | 14 +- pnpm-lock.yaml | 1585 +++++++++++------------- 10 files changed, 885 insertions(+), 1201 deletions(-) diff --git a/components/Activity/ActivityEditor.tsx b/components/Activity/ActivityEditor.tsx index 929216e8..1a133058 100644 --- a/components/Activity/ActivityEditor.tsx +++ b/components/Activity/ActivityEditor.tsx @@ -1,25 +1,16 @@ import { Hackathon } from '@kaiyuanshe/openhackathon-service'; import { Loading } from 'idea-react'; -import { observable } from 'mobx'; +import { computed } from 'mobx'; import { textJoin } from 'mobx-i18n'; import { observer } from 'mobx-react'; import { ObservedComponent } from 'mobx-react-helper'; -import { BadgeInput, FileUploader } from 'mobx-restful-table'; -import dynamic from 'next/dynamic'; -import { FormEvent } from 'react'; -import { Button, Col, Form, Row } from 'react-bootstrap'; -import { formToJSON } from 'web-utility'; +import { BadgeInput, Field, FileUploader, RestForm } from 'mobx-restful-table'; import activityStore from '../../models/Activity'; import fileStore from '../../models/Base/File'; import { i18n, I18nContext } from '../../models/Base/Translation'; import { DateTimeInput } from '../DateTimeInput'; - -const HTMLEditor = dynamic(() => import('../HTMLEditor'), { ssr: false }); - -interface ActivityFormData extends Hackathon { - bannerUrls: string[] | string; -} +import { CustomTools } from '../HTMLEditor'; export interface ActivityEditorProps { name?: string; @@ -29,249 +20,152 @@ export interface ActivityEditorProps { export class ActivityEditor extends ObservedComponent { static contextType = I18nContext; - @observable - accessor detailHTML = ''; - - @observable - accessor validated = false; - - async componentDidMount() { - const { name } = this.props; - - if (!name) return; - - const { detail } = await activityStore.getOne(name); - - this.detailHTML = detail || ''; - } - - componentWillUnmount() { - activityStore.clearCurrent(); - } - - submitHandler = async (event: FormEvent) => { - event.preventDefault(); - event.stopPropagation(); - - const form = event.currentTarget; - - if (!form.checkValidity()) return (this.validated = true); - - const { t } = this.observedContext, - { name } = this.props, - data = formToJSON(form); - - data.detail = (data.detail || '') + ''; - - data.banners = [data.bannerUrls ?? []].flat().map(bannerUrl => { - const [name] = bannerUrl.split('/').slice(-1); - - return { - name, - description: name, - uri: bannerUrl, - }; - }); - // @ts-expect-error Type compatibility issue - await activityStore.updateOne(data, name); + submitHandler = async ({ name }: Hackathon) => { + const { t } = this.observedContext; if (!name && confirm(t('create_work_success'))) { - await activityStore.publishOne(data.name); + await activityStore.publishOne(name); alert(t('has_published')); } location.pathname = name ? `/activity/${name}` : `/`; }; - render() { - const { t } = this.observedContext, - { - name, - displayName, - tags = [], - banners, - location, - enrollmentStartedAt, - enrollmentEndedAt, - eventStartedAt, - eventEndedAt, - judgeStartedAt, - judgeEndedAt, - ribbon, - maxEnrollment, - summary, - detail, - } = activityStore.currentOne, - { downloading, uploading } = activityStore; - - const loading = downloading > 0 || uploading > 0 || fileStore.uploading > 0; - - return ( -
- {loading && } - - - - {t('activity_id')} - * - - - - - {textJoin(t('please_enter'), t('activity_id'))} - - - - - - - {t('activity_name')} - * - - - - - {textJoin(t('please_enter'), t('activity_name'))} - - - - - - - {t('tag')} - - - - - + @computed + get fields(): Field[] { + const { t } = this.observedContext; - - - {t('bannerUrls')} - * - - + return [ + { + key: 'name', + renderLabel: t('activity_id'), + // @ts-expect-error Upstream Type issue + pattern: '[a-zA-Z0-9]+', + required: true, + invalidMessage: t('name_placeholder'), + }, + { + key: 'displayName', + renderLabel: t('activity_name'), + required: true, + invalidMessage: textJoin(t('please_enter'), t('activity_name')), + }, + { + key: 'tags', + renderLabel: t('tag'), + renderInput: ({ tags }, { key, ...meta }) => ( + + + + ), + }, + { + key: 'banners', + renderLabel: t('bannerUrls'), + accept: 'image/*', + required: true, + multiple: true, + max: 10, + uploader: fileStore, + renderInput: ({ banners }, { key, uploader, ...meta }) => ( + uri)} /> - - - - - - {t('activity_address')} - * - - - - - {textJoin(t('please_enter'), t('activity_address'))} - - - - - - - - - - - {t('ribbon')} - - - - - - - - - {t('max_enrollment')} - - - - - + + ), + }, + { + key: 'location', + renderLabel: t('activity_address'), + required: true, + invalidMessage: textJoin(t('please_enter'), t('activity_address')), + }, + { + key: 'enrollmentStartedAt', + renderInput: ({ enrollmentStartedAt, enrollmentEndedAt }) => ( + + ), + }, + { + key: 'eventStartedAt', + renderInput: ({ eventStartedAt, eventEndedAt }) => ( + + ), + }, + { + key: 'judgeStartedAt', + renderInput: ({ judgeStartedAt, judgeEndedAt }) => ( + + ), + }, + { key: 'ribbon', renderLabel: t('ribbon') }, + { + key: 'maxEnrollment', + renderLabel: t('max_enrollment'), + placeholder: t('max_enrollment_placeholder'), + type: 'number', + min: 0, + max: 100000, + }, + { + key: 'summary', + renderLabel: t('activity_introduction'), + required: true, + invalidMessage: textJoin(t('please_enter'), t('activity_introduction')), + }, + { + key: 'detail', + renderLabel: t('activity_detail'), + contentEditable: true, + tools: CustomTools, + required: true, + invalidMessage: textJoin(t('please_enter'), t('activity_detail')), + }, + ]; + } - - - {t('activity_introduction')} - * - - - - - {textJoin(t('please_enter'), t('activity_introduction'))} - - - + render() { + const i18n = this.observedContext, + { downloading, uploading } = activityStore; - - - {t('activity_detail')} - * - - - (this.detailHTML = code)} /> - + const loading = downloading > 0 || uploading > 0 || fileStore.uploading > 0; -
- -
- + return ( + <> + + {loading && } + ); } } diff --git a/components/DateTimeInput.tsx b/components/DateTimeInput.tsx index 796708a7..dc53b5ae 100644 --- a/components/DateTimeInput.tsx +++ b/components/DateTimeInput.tsx @@ -5,7 +5,7 @@ import { ChangeEvent } from 'react'; import { Col, Form, InputGroup, Row } from 'react-bootstrap'; import { formatDate } from 'web-utility'; -import { i18n } from '../models/Base/Translation'; +import { i18n, I18nContext } from '../models/Base/Translation'; export interface DateTimeInputProps { id?: string; @@ -18,6 +18,8 @@ export interface DateTimeInputProps { @observer export class DateTimeInput extends ObservedComponent { + static contextType = I18nContext; + @observable accessor start = ''; @@ -43,7 +45,7 @@ export class DateTimeInput extends ObservedComponent + {label} * diff --git a/components/Git/Card.tsx b/components/Git/Card.tsx index a5045f67..b0347e2b 100644 --- a/components/Git/Card.tsx +++ b/components/Git/Card.tsx @@ -1,8 +1,8 @@ import { GitTemplate, HackathonBase } from '@kaiyuanshe/openhackathon-service'; -import { text2color } from 'idea-react'; import { observer } from 'mobx-react'; +import { BadgeBar } from 'mobx-restful-table'; import { FC, ReactNode, useContext } from 'react'; -import { Badge, Button, Card, Col, Form, Row } from 'react-bootstrap'; +import { Button, Card, Col, Form, Row } from 'react-bootstrap'; import { I18nContext } from '../../models/Base/Translation'; import { GitLogo } from './Logo'; @@ -37,20 +37,10 @@ export const GitCard: FC = observer( - + ({ text, link: `https://github.com/topics/${text}` }))} + /> {languages && Object.keys(languages).map(language => ( diff --git a/components/Git/CardList.tsx b/components/Git/CardList.tsx index f34af1fc..13da0d5a 100644 --- a/components/Git/CardList.tsx +++ b/components/Git/CardList.tsx @@ -1,8 +1,8 @@ import { GitTemplate } from '@kaiyuanshe/openhackathon-service'; -import { text2color } from 'idea-react'; import { observer } from 'mobx-react'; +import { BadgeBar } from 'mobx-restful-table'; import { FC, useContext } from 'react'; -import { Badge, Button, Card, Col, Form, Row } from 'react-bootstrap'; +import { Button, Card, Col, Form, Row } from 'react-bootstrap'; import { I18nContext } from '../../models/Base/Translation'; import { XScrollListProps } from '../layout/ScrollList'; @@ -32,20 +32,13 @@ export const CardList: FC> = observer( - + ({ + text, + link: `https://github.com/topics/${text}`, + }))} + /> {languages && Object.keys(languages).map(language => ( diff --git a/components/Git/GitTeamCard.tsx b/components/Git/GitTeamCard.tsx index 92727a62..6f87a6b4 100644 --- a/components/Git/GitTeamCard.tsx +++ b/components/Git/GitTeamCard.tsx @@ -1,8 +1,8 @@ import { GitTemplate } from '@kaiyuanshe/openhackathon-service'; -import { text2color } from 'idea-react'; import { observer } from 'mobx-react'; +import { BadgeBar } from 'mobx-restful-table'; import { FC, ReactNode, useContext } from 'react'; -import { Badge, Card, Col, Form, Row } from 'react-bootstrap'; +import { Card, Col, Form, Row } from 'react-bootstrap'; import { I18nContext } from '../../models/Base/Translation'; import { GitLogo } from './Logo'; @@ -34,20 +34,10 @@ export const GitTeamCard: FC = observer( - + ({ text, link: `https://github.com/topics/${text}` }))} + /> {languages.map(language => ( diff --git a/components/HTMLEditor.tsx b/components/HTMLEditor.tsx index 3b7229d3..87937985 100644 --- a/components/HTMLEditor.tsx +++ b/components/HTMLEditor.tsx @@ -1,6 +1,7 @@ import { FC } from 'react'; import { AudioTool, + CopyMarkdownTool, Editor, EditorProps, IFrameTool, @@ -12,16 +13,14 @@ import { Constructor, uniqueID } from 'web-utility'; import fileStore from '../models/Base/File'; -ImageTool.prototype.save = blob => - fileStore.upload(new File([blob], uniqueID())); +ImageTool.prototype.save = blob => fileStore.upload(new File([blob], uniqueID())); const ExcludeTools = [IFrameTool, AudioTool, VideoTool]; -const CustomTools = OriginalTools.filter( - Tool => !ExcludeTools.includes(Tool as Constructor), -); +export const CustomTools = [ + ...OriginalTools.filter(Tool => !ExcludeTools.includes(Tool as Constructor)), + CopyMarkdownTool, +]; +const HTMLEditor: FC = props => ; -const HTMLEditor: FC = props => ( - -); export default HTMLEditor; diff --git a/models/Activity/Enrollment.ts b/models/Activity/Enrollment.ts index db748610..3b1d7fc9 100644 --- a/models/Activity/Enrollment.ts +++ b/models/Activity/Enrollment.ts @@ -1,9 +1,9 @@ import { Enrollment, User } from '@kaiyuanshe/openhackathon-service'; import { computed, observable } from 'mobx'; import { Statistic, toggle } from 'mobx-restful'; -import { buildURLData, countBy, groupBy } from 'web-utility'; +import { countBy, groupBy } from 'web-utility'; -import { createListStream, Filter, TableModel } from '../Base'; +import { Filter, TableModel } from '../Base'; import { i18n } from '../Base/Translation'; import sessionStore from '../User/Session'; @@ -36,14 +36,6 @@ export class EnrollmentModel extends TableModel { return sessionStore.exportURLOf('enrollments', this.baseURI); } - openStream(filter: EnrollmentFilter) { - return createListStream( - `${this.baseURI}s?${buildURLData(filter)}`, - this.client, - count => (this.totalCount = count), - ); - } - @toggle('downloading') async getSessionOne() { const { body } = await this.client.get(this.baseURI); diff --git a/models/Activity/index.ts b/models/Activity/index.ts index d36ddcdc..7dad309f 100644 --- a/models/Activity/index.ts +++ b/models/Activity/index.ts @@ -7,10 +7,9 @@ import { } from '@kaiyuanshe/openhackathon-service'; import { action, observable } from 'mobx'; import { persist, restore, toggle } from 'mobx-restful'; -import { buildURLData } from 'web-utility'; import { isServer } from '../../configuration'; -import { createListStream, Filter, InputData, TableModel } from '../Base'; +import { Filter, InputData, TableModel } from '../Base'; import { GitModel } from '../Git'; import platformAdmin from '../User/PlatformAdmin'; import { AwardModel } from './Award'; @@ -89,14 +88,6 @@ export class ActivityModel extends TableModel { return (this.currentOrganization = new OrganizerModel(`hackathon/${name}`)); } - openStream({ userId, listType = 'online', orderby = 'updatedAt' }: ActivityFilter) { - return createListStream( - `${this.baseURI}s?${buildURLData({ userId, listType, orderby, top: 6 })}`, - this.client, - count => (this.totalCount = count), - ); - } - @toggle('uploading') async updateOne(data: InputData, name?: string) { if (!name) { diff --git a/package.json b/package.json index 83bdb23a..0ba17db5 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "@fortawesome/free-solid-svg-icons": "^6.7.2", "@fortawesome/react-fontawesome": "^0.2.2", "@giscus/react": "^3.1.0", - "@sentry/nextjs": "^9.22.0", + "@sentry/nextjs": "^9.24.0", "array-unique-proposal": "^0.3.4", "classnames": "^2.5.1", "echarts-jsx": "^0.5.4", @@ -30,8 +30,8 @@ "mobx-react": "^9.2.0", "mobx-react-helper": "^0.4.1", "mobx-restful": "^2.1.0", - "mobx-restful-table": "^2.4.0", - "next": "^15.3.2", + "mobx-restful-table": "^2.5.0", + "next": "^15.3.3", "next-ssr-middleware": "^1.0.0", "open-react-map": "^0.9.0", "react": "^19.1.0", @@ -42,7 +42,7 @@ "web-utility": "^4.4.3" }, "devDependencies": { - "@babel/core": "^7.27.3", + "@babel/core": "^7.27.4", "@babel/plugin-proposal-decorators": "^7.27.1", "@babel/preset-react": "^7.27.1", "@babel/preset-typescript": "^7.27.1", @@ -51,7 +51,7 @@ "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.27.0", "@kaiyuanshe/openhackathon-service": "^0.21.1", - "@next/eslint-plugin-next": "^15.3.2", + "@next/eslint-plugin-next": "^15.3.3", "@octokit/openapi-types": "^25.1.0", "@softonus/prettier-plugin-duplicate-remover": "^1.1.2", "@stylistic/eslint-plugin": "^4.4.0", @@ -60,10 +60,10 @@ "@types/koa": "^2.15.0", "@types/leaflet": "^1.9.18", "@types/next-pwa": "^5.6.9", - "@types/node": "^22.15.23", + "@types/node": "^22.15.29", "@types/react": "^19.1.6", "eslint": "^9.27.0", - "eslint-config-next": "^15.3.2", + "eslint-config-next": "^15.3.3", "eslint-config-prettier": "^10.1.5", "eslint-plugin-react": "^7.37.5", "eslint-plugin-simple-import-sort": "^12.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a9602934..6c8d64ec 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,7 +6,7 @@ settings: overrides: mobx-restful: ^2.1.0 - next: ^15.3.2 + next: ^15.3.3 importers: @@ -31,8 +31,8 @@ importers: specifier: ^3.1.0 version: 3.1.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@sentry/nextjs': - specifier: ^9.22.0 - version: 9.22.0(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(next@15.3.2(@babel/core@7.27.3)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(webpack@5.99.9) + specifier: ^9.24.0 + version: 9.24.0(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(next@15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(webpack@5.99.9) array-unique-proposal: specifier: ^0.3.4 version: 0.3.4 @@ -82,14 +82,14 @@ importers: specifier: ^2.1.0 version: 2.1.0(mobx@6.13.7)(typescript@5.8.3) mobx-restful-table: - specifier: ^2.4.0 - version: 2.4.0(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + specifier: ^2.5.0 + version: 2.5.0(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) next: - specifier: ^15.3.2 - version: 15.3.2(@babel/core@7.27.3)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^15.3.3 + version: 15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) next-ssr-middleware: specifier: ^1.0.0 - version: 1.0.0(next@15.3.2(@babel/core@7.27.3)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + version: 1.0.0(next@15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(typescript@5.8.3) open-react-map: specifier: ^0.9.0 version: 0.9.0(mobx-react@9.2.0(mobx@6.13.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(mobx@6.13.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) @@ -113,17 +113,17 @@ importers: version: 4.4.3(typescript@5.8.3) devDependencies: '@babel/core': - specifier: ^7.27.3 - version: 7.27.3 + specifier: ^7.27.4 + version: 7.27.4 '@babel/plugin-proposal-decorators': specifier: ^7.27.1 - version: 7.27.1(@babel/core@7.27.3) + version: 7.27.1(@babel/core@7.27.4) '@babel/preset-react': specifier: ^7.27.1 - version: 7.27.1(@babel/core@7.27.3) + version: 7.27.1(@babel/core@7.27.4) '@babel/preset-typescript': specifier: ^7.27.1 - version: 7.27.1(@babel/core@7.27.3) + version: 7.27.1(@babel/core@7.27.4) '@cspell/eslint-plugin': specifier: ^9.0.2 version: 9.0.2(eslint@9.27.0(jiti@2.4.2)) @@ -140,8 +140,8 @@ importers: specifier: ^0.21.1 version: 0.21.1(mobx@6.13.7)(typescript@5.8.3) '@next/eslint-plugin-next': - specifier: ^15.3.2 - version: 15.3.2 + specifier: ^15.3.3 + version: 15.3.3 '@octokit/openapi-types': specifier: ^25.1.0 version: 25.1.0 @@ -165,10 +165,10 @@ importers: version: 1.9.18 '@types/next-pwa': specifier: ^5.6.9 - version: 5.6.9(@babel/core@7.27.3)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 5.6.9(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@types/node': - specifier: ^22.15.23 - version: 22.15.23 + specifier: ^22.15.29 + version: 22.15.29 '@types/react': specifier: ^19.1.6 version: 19.1.6 @@ -176,8 +176,8 @@ importers: specifier: ^9.27.0 version: 9.27.0(jiti@2.4.2) eslint-config-next: - specifier: ^15.3.2 - version: 15.3.2(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + specifier: ^15.3.3 + version: 15.3.3(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) eslint-config-prettier: specifier: ^10.1.5 version: 10.1.5(eslint@9.27.0(jiti@2.4.2)) @@ -189,7 +189,7 @@ importers: version: 12.1.1(eslint@9.27.0(jiti@2.4.2)) get-git-folder: specifier: ^0.1.2 - version: 0.1.2(@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.3))(@babel/preset-env@7.27.2(@babel/core@7.27.3))(@types/node@22.15.23) + version: 0.1.2(@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.4))(@babel/preset-env@7.27.2(@babel/core@7.27.4))(@types/node@22.15.29) globals: specifier: ^16.2.0 version: 16.2.0 @@ -210,10 +210,10 @@ importers: version: 16.1.0 next-pwa: specifier: ^5.6.0 - version: 5.6.0(@babel/core@7.27.3)(next@15.3.2(@babel/core@7.27.3)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(webpack@5.99.9) + version: 5.6.0(@babel/core@7.27.4)(next@15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(webpack@5.99.9) next-with-less: specifier: ^3.0.1 - version: 3.0.1(less-loader@12.3.0(less@4.3.0)(webpack@5.99.9))(less@4.3.0)(next@15.3.2(@babel/core@7.27.3)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)) + version: 3.0.1(less-loader@12.3.0(less@4.3.0)(webpack@5.99.9))(less@4.3.0)(next@15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)) prettier: specifier: ^3.5.3 version: 3.5.3 @@ -246,24 +246,20 @@ packages: resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.27.2': - resolution: {integrity: sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==} + '@babel/compat-data@7.27.3': + resolution: {integrity: sha512-V42wFfx1ymFte+ecf6iXghnnP8kWTO+ZLXIyZq+1LAXHHvTZdVxicn4yiVYdYMGaCO3tmqub11AorKkv+iodqw==} engines: {node: '>=6.9.0'} - '@babel/core@7.27.3': - resolution: {integrity: sha512-hyrN8ivxfvJ4i0fIJuV4EOlV0WDMz5Ui4StRTgVaAvWeiRCilXgwVvxJKtFQ3TKtHgJscB2YiXKGNJuVwhQMtA==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.27.1': - resolution: {integrity: sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==} + '@babel/core@7.27.4': + resolution: {integrity: sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==} engines: {node: '>=6.9.0'} '@babel/generator@7.27.3': resolution: {integrity: sha512-xnlJYj5zepml8NXtjkG0WquFUv8RskFqyFcVgTBp5k+NaA/8uw/K+OSVf8AMGw5e9HKP2ETd5xpK5MLZQD6b4Q==} engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.27.1': - resolution: {integrity: sha512-WnuuDILl9oOBbKnb4L+DyODx7iC47XfzmNCpTttFsSp6hTG7XZxu60+4IO+2/hPfcGOoKbFiwoI/+zwARbNQow==} + '@babel/helper-annotate-as-pure@7.27.3': + resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} engines: {node: '>=6.9.0'} '@babel/helper-compilation-targets@7.27.2': @@ -295,12 +291,6 @@ packages: resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.27.1': - resolution: {integrity: sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/helper-module-transforms@7.27.3': resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==} engines: {node: '>=6.9.0'} @@ -347,17 +337,12 @@ packages: resolution: {integrity: sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.27.3': - resolution: {integrity: sha512-h/eKy9agOya1IGuLaZ9tEUgz+uIRXcbtOhRtUyyMf8JFmn1iT13vnl/IGVWSkdOCG/pC57U4S1jnAabAavTMwg==} + '@babel/helpers@7.27.4': + resolution: {integrity: sha512-Y+bO6U+I7ZKaM5G5rDUZiYfUvQPUibYmAFe7EnKdnKBbVXDZxvp+MWOH5gYciY0EPk4EScsuFMQBbEfpdRKSCQ==} engines: {node: '>=6.9.0'} - '@babel/parser@7.27.2': - resolution: {integrity: sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/parser@7.27.3': - resolution: {integrity: sha512-xyYxRj6+tLNDTWi0KCBcZ9V7yg3/lwL9DWh9Uwh/RIVlIfFidggcgxKX3GCXwCiswwcGRawBKbEg2LG/Y8eJhw==} + '@babel/parser@7.27.4': + resolution: {integrity: sha512-BRmLHGwpUqLFR2jzx9orBuX/ABDkj2jLKOXrHDTN2aOKL+jFDDKaRNo9nyYsIl9h/UE/7lMKdDjKQQyxKKDZ7g==} engines: {node: '>=6.0.0'} hasBin: true @@ -463,8 +448,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoping@7.27.1': - resolution: {integrity: sha512-QEcFlMl9nGTgh1rn2nIeU5bkfb9BAjaQcWbiP4LvKxUot52ABcTkpcyJ7f2Q2U2RuQ84BNLgts3jRme2dTx6Fw==} + '@babel/plugin-transform-block-scoping@7.27.3': + resolution: {integrity: sha512-+F8CnfhuLhwUACIJMLWnjz6zvzYM2r0yeIHKlbgfw7ml8rOMJsXNXV/hyRcb3nb493gRs4WvYpQAndWj/qQmkQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -493,8 +478,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-destructuring@7.27.1': - resolution: {integrity: sha512-ttDCqhfvpE9emVkXbPD8vyxxh4TWYACVybGkDj+oReOGwnp066ITEivDlLwe0b1R0+evJ13IXQuLNB5w1fhC5Q==} + '@babel/plugin-transform-destructuring@7.27.3': + resolution: {integrity: sha512-s4Jrok82JpiaIprtY2nHsYmrThKvvwgHwjgd7UMiYhZaN0asdXNLr0y+NjTfkA7SyQE5i2Fb7eawUOZmLvyqOA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -619,8 +604,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-rest-spread@7.27.2': - resolution: {integrity: sha512-AIUHD7xJ1mCrj3uPozvtngY3s0xpv7Nu7DoUSnzNY6Xam1Cy4rUznR//pvMHOhQ4AvbCexhbqXCtpxGHOGOO6g==} + '@babel/plugin-transform-object-rest-spread@7.27.3': + resolution: {integrity: sha512-7ZZtznF9g4l2JCImCo5LNKFHB5eXnN39lLtLY5Tg+VkR0jwOt7TBciMckuiQIOIW7L5tkQOCh3bVGYeXgMx52Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -691,8 +676,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regenerator@7.27.1': - resolution: {integrity: sha512-B19lbbL7PMrKr52BNPjCqg1IyNUIjTcxKj8uX9zHO+PmWN93s19NDr/f69mIkEp2x9nmDJ08a7lgHaTTzvW7mw==} + '@babel/plugin-transform-regenerator@7.27.4': + resolution: {integrity: sha512-Glp/0n8xuj+E1588otw5rjJkTXfzW7FjH3IIUrfqiZOPQCd2vbg8e+DQE8jK9g4V5/zrxFW+D9WM9gboRPELpQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -792,24 +777,16 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.27.1': - resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==} + '@babel/runtime@7.27.4': + resolution: {integrity: sha512-t3yaEOuGu9NlIZ+hIeGbBjFtZT7j2cb2tg0fuaJKeGotchRjjLfrBA9Kwf8quhpP1EUuxModQg04q/mBwyg8uA==} engines: {node: '>=6.9.0'} '@babel/template@7.27.2': resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.27.1': - resolution: {integrity: sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.27.3': - resolution: {integrity: sha512-lId/IfN/Ye1CIu8xG7oKBHXd2iNb2aW1ilPszzGcJug6M8RCKfVNcYhpI5+bMvFYjK7lXIM0R+a+6r8xhHp2FQ==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.27.1': - resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==} + '@babel/traverse@7.27.4': + resolution: {integrity: sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==} engines: {node: '>=6.9.0'} '@babel/types@7.27.3': @@ -1322,56 +1299,56 @@ packages: '@napi-rs/wasm-runtime@0.2.10': resolution: {integrity: sha512-bCsCyeZEwVErsGmyPNSzwfwFn4OdxBj0mmv6hOFucB/k81Ojdu68RbZdxYsRQUPc9l6SU5F/cG+bXgWs3oUgsQ==} - '@next/env@15.3.2': - resolution: {integrity: sha512-xURk++7P7qR9JG1jJtLzPzf0qEvqCN0A/T3DXf8IPMKo9/6FfjxtEffRJIIew/bIL4T3C2jLLqBor8B/zVlx6g==} + '@next/env@15.3.3': + resolution: {integrity: sha512-OdiMrzCl2Xi0VTjiQQUK0Xh7bJHnOuET2s+3V+Y40WJBAXrJeGA3f+I8MZJ/YQ3mVGi5XGR1L66oFlgqXhQ4Vw==} - '@next/eslint-plugin-next@15.3.2': - resolution: {integrity: sha512-ijVRTXBgnHT33aWnDtmlG+LJD+5vhc9AKTJPquGG5NKXjpKNjc62woIhFtrAcWdBobt8kqjCoaJ0q6sDQoX7aQ==} + '@next/eslint-plugin-next@15.3.3': + resolution: {integrity: sha512-VKZJEiEdpKkfBmcokGjHu0vGDG+8CehGs90tBEy/IDoDDKGngeyIStt2MmE5FYNyU9BhgR7tybNWTAJY/30u+Q==} - '@next/swc-darwin-arm64@15.3.2': - resolution: {integrity: sha512-2DR6kY/OGcokbnCsjHpNeQblqCZ85/1j6njYSkzRdpLn5At7OkSdmk7WyAmB9G0k25+VgqVZ/u356OSoQZ3z0g==} + '@next/swc-darwin-arm64@15.3.3': + resolution: {integrity: sha512-WRJERLuH+O3oYB4yZNVahSVFmtxRNjNF1I1c34tYMoJb0Pve+7/RaLAJJizyYiFhjYNGHRAE1Ri2Fd23zgDqhg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.3.2': - resolution: {integrity: sha512-ro/fdqaZWL6k1S/5CLv1I0DaZfDVJkWNaUU3un8Lg6m0YENWlDulmIWzV96Iou2wEYyEsZq51mwV8+XQXqMp3w==} + '@next/swc-darwin-x64@15.3.3': + resolution: {integrity: sha512-XHdzH/yBc55lu78k/XwtuFR/ZXUTcflpRXcsu0nKmF45U96jt1tsOZhVrn5YH+paw66zOANpOnFQ9i6/j+UYvw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.3.2': - resolution: {integrity: sha512-covwwtZYhlbRWK2HlYX9835qXum4xYZ3E2Mra1mdQ+0ICGoMiw1+nVAn4d9Bo7R3JqSmK1grMq/va+0cdh7bJA==} + '@next/swc-linux-arm64-gnu@15.3.3': + resolution: {integrity: sha512-VZ3sYL2LXB8znNGcjhocikEkag/8xiLgnvQts41tq6i+wql63SMS1Q6N8RVXHw5pEUjiof+II3HkDd7GFcgkzw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.3.2': - resolution: {integrity: sha512-KQkMEillvlW5Qk5mtGA/3Yz0/tzpNlSw6/3/ttsV1lNtMuOHcGii3zVeXZyi4EJmmLDKYcTcByV2wVsOhDt/zg==} + '@next/swc-linux-arm64-musl@15.3.3': + resolution: {integrity: sha512-h6Y1fLU4RWAp1HPNJWDYBQ+e3G7sLckyBXhmH9ajn8l/RSMnhbuPBV/fXmy3muMcVwoJdHL+UtzRzs0nXOf9SA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.3.2': - resolution: {integrity: sha512-uRBo6THWei0chz+Y5j37qzx+BtoDRFIkDzZjlpCItBRXyMPIg079eIkOCl3aqr2tkxL4HFyJ4GHDes7W8HuAUg==} + '@next/swc-linux-x64-gnu@15.3.3': + resolution: {integrity: sha512-jJ8HRiF3N8Zw6hGlytCj5BiHyG/K+fnTKVDEKvUCyiQ/0r5tgwO7OgaRiOjjRoIx2vwLR+Rz8hQoPrnmFbJdfw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.3.2': - resolution: {integrity: sha512-+uxFlPuCNx/T9PdMClOqeE8USKzj8tVz37KflT3Kdbx/LOlZBRI2yxuIcmx1mPNK8DwSOMNCr4ureSet7eyC0w==} + '@next/swc-linux-x64-musl@15.3.3': + resolution: {integrity: sha512-HrUcTr4N+RgiiGn3jjeT6Oo208UT/7BuTr7K0mdKRBtTbT4v9zJqCDKO97DUqqoBK1qyzP1RwvrWTvU6EPh/Cw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.3.2': - resolution: {integrity: sha512-LLTKmaI5cfD8dVzh5Vt7+OMo+AIOClEdIU/TSKbXXT2iScUTSxOGoBhfuv+FU8R9MLmrkIL1e2fBMkEEjYAtPQ==} + '@next/swc-win32-arm64-msvc@15.3.3': + resolution: {integrity: sha512-SxorONgi6K7ZUysMtRF3mIeHC5aA3IQLmKFQzU0OuhuUYwpOBc1ypaLJLP5Bf3M9k53KUUUj4vTPwzGvl/NwlQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.3.2': - resolution: {integrity: sha512-aW5B8wOPioJ4mBdMDXkt5f3j8pUr9W8AnlX0Df35uRWNT1Y6RIybxjnSUe+PhM+M1bwgyY8PHLmXZC6zT1o5tA==} + '@next/swc-win32-x64-msvc@15.3.3': + resolution: {integrity: sha512-4QZG6F8enl9/S2+yIiOiju0iCTFd93d8VC1q9LZS4p/Xuk81W2QDjCFeoogmrWWkAD59z8ZxepBQap2dKS5ruw==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -1590,8 +1567,8 @@ packages: '@popperjs/core@2.11.8': resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - '@prisma/instrumentation@6.7.0': - resolution: {integrity: sha512-3NuxWlbzYNevgPZbV0ktA2z6r0bfh0g22ONTxcK09a6+6MdIPjHsYx1Hnyu4yOq+j7LmupO5J69hhuOnuvj8oQ==} + '@prisma/instrumentation@6.8.2': + resolution: {integrity: sha512-5NCTbZjw7a+WIZ/ey6G8SY+YKcyM2zBF0hOT1muvqC9TbVtTCr5Qv3RL/2iNDOzLUHEvo4I1uEfioyfuNOGK8Q==} peerDependencies: '@opentelemetry/api': ^1.8 @@ -1791,32 +1768,32 @@ packages: '@rushstack/eslint-patch@1.11.0': resolution: {integrity: sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==} - '@sentry-internal/browser-utils@9.22.0': - resolution: {integrity: sha512-Ou1tBnVxFAIn8i9gvrWzRotNJQYiu3awNXpsFCw6qFwmiKAVPa6b13vCdolhXnrIiuR77jY1LQnKh9hXpoRzsg==} + '@sentry-internal/browser-utils@9.24.0': + resolution: {integrity: sha512-fWIrHyui8KKufnbqhGyDvvr+u9wiOEEzxXEjs/CKp+6fa+jej6Mk8K+su1f/mz7R3HVzhxvht/gZ+y193uK4qw==} engines: {node: '>=18'} - '@sentry-internal/feedback@9.22.0': - resolution: {integrity: sha512-zgMVkoC61fgi41zLcSZA59vOtKxcLrKBo1ECYhPD1hxEaneNqY5fhXDwlQBw96P5l2yqkgfX6YZtSdU4ejI9yA==} + '@sentry-internal/feedback@9.24.0': + resolution: {integrity: sha512-Z9jQqKzRppwAEqiytLWNV8JOo52vlxcSGz52FjKx3KXG75PXwk0M3sBXh762WoGLisUIRLTp8LOk6304L/O8dg==} engines: {node: '>=18'} - '@sentry-internal/replay-canvas@9.22.0': - resolution: {integrity: sha512-EcG9IMSEalFe49kowBTJObWjof/iHteDwpyuAszsFDdQUYATrVUtwpwN7o52vDYWJud4arhjrQnMamIGxa79eQ==} + '@sentry-internal/replay-canvas@9.24.0': + resolution: {integrity: sha512-506RdDF6iE8hMyzpzp9Vc0GM7kELxxs7UCoi/6KpvXFftcydWI3S2bru8dEZsxVoKh2hdle6SpbNgl+iPI0DSQ==} engines: {node: '>=18'} - '@sentry-internal/replay@9.22.0': - resolution: {integrity: sha512-9GOycoKbrclcRXfcbNV8svbmAsOS5R4wXBQmKF4pFLkmFA/lJv9kdZSNYkRvkrxdNfbMIJXP+DV9EqTZcryXig==} + '@sentry-internal/replay@9.24.0': + resolution: {integrity: sha512-312wMPeQI8K2vO/lA/CF6Uv5UReoZC7RarsNUJEoOKa9Bq1BXWUq929oTHzu/2NDv194H2u3eqSGsSp6xiuKTw==} engines: {node: '>=18'} - '@sentry/babel-plugin-component-annotate@3.3.1': - resolution: {integrity: sha512-5GOxGT7lZN+I8A7Vp0rWY+726FDKEw8HnFiebe51rQrMbfGfCu2Aw9uSM0nT9OG6xhV6WvGccIcCszTPs4fUZQ==} + '@sentry/babel-plugin-component-annotate@3.5.0': + resolution: {integrity: sha512-s2go8w03CDHbF9luFGtBHKJp4cSpsQzNVqgIa9Pfa4wnjipvrK6CxVT4icpLA3YO6kg5u622Yoa5GF3cJdippw==} engines: {node: '>= 14'} - '@sentry/browser@9.22.0': - resolution: {integrity: sha512-3TeRm74dvX0JdjX0AgkQa+22iUHwHnY+Q6M05NZ+tDeCNHGK/mEBTeqquS1oQX67jWyuvYmG3VV6RJUxtG9Paw==} + '@sentry/browser@9.24.0': + resolution: {integrity: sha512-RP+27/owvIqD4J0TibIHK1UcA7iObxLOXBEilDKjaJOZMLhv3JkpU8A+UI9pFzEYqeIGVDDaBzYgbCHrLWcoCA==} engines: {node: '>=18'} - '@sentry/bundler-plugin-core@3.3.1': - resolution: {integrity: sha512-Dd6xaWb293j9otEJ1yJqG2Ra6zB49OPzMNdIkdP8wdY+S9UFQE5PyKTyredmPY7hqCc005OrUQZolIIo9Zl13A==} + '@sentry/bundler-plugin-core@3.5.0': + resolution: {integrity: sha512-zDzPrhJqAAy2VzV4g540qAZH4qxzisstK2+NIJPZUUKztWRWUV2cMHsyUtdctYgloGkLyGpZJBE3RE6dmP/xqQ==} engines: {node: '>= 14'} '@sentry/cli-darwin@2.42.2': @@ -1865,22 +1842,22 @@ packages: engines: {node: '>= 10'} hasBin: true - '@sentry/core@9.22.0': - resolution: {integrity: sha512-ixvtKmPF42Y6ckGUbFlB54OWI75H2gO5UYHojO6eXFpS7xO3ZGgV/QH6wb40mWK+0w5XZ0233FuU9VpsuE6mKA==} + '@sentry/core@9.24.0': + resolution: {integrity: sha512-uRWrB4Y49ZOWcDLCXqdjd2Fs6Onill0GQI+JgXMw7wa+i03+QRiQvUAUyde8O62jR4dvP3GDo9PDWnDNhi3z5A==} engines: {node: '>=18'} - '@sentry/nextjs@9.22.0': - resolution: {integrity: sha512-FbXP0z32kTxavz39E096JcGJQfp6hmmddXSSmG23m2Va/dpC+xNl5+bxmLdt2NRaY6o3nPxqsB/bKccpMJBvMw==} + '@sentry/nextjs@9.24.0': + resolution: {integrity: sha512-KDZ2EX2otbkaVnp6rBADdhSUrsg6r+KWeeZbYVW7zBYZ99ORG7+m3pOtf7qaMcoSivhElPoLzblCyvK0zcPpTg==} engines: {node: '>=18'} peerDependencies: - next: ^15.3.2 + next: ^15.3.3 - '@sentry/node@9.22.0': - resolution: {integrity: sha512-89r2p6n0xeT2eiqIB0WXgz/rJzUgiOgZex7NvYwzEGeP0GoteDIf0Kbth/gCOy1md/ngiW+0X+S2Ed/uRw4XEQ==} + '@sentry/node@9.24.0': + resolution: {integrity: sha512-rIe8rLCdPi/9VWkoRlXRCbjpNlKhHeS8EqlT40ZwlWxdJl5WOcktq3mIWcV2oTqupWogDImjQgeCeydXWt5aog==} engines: {node: '>=18'} - '@sentry/opentelemetry@9.22.0': - resolution: {integrity: sha512-m6JI2LUCm4FT34OQgh7or2Y9chKn8BrqawNqu7BEqbsGADE5VPwtdu7DwPOD7pC6KN9lGHVf0bqS7197e8Kz/A==} + '@sentry/opentelemetry@9.24.0': + resolution: {integrity: sha512-bdXXwBLuIS127CjMveizBbgBKQEGlL3Ye8LxHCKqvifNK9BXgXGPnh6bHum/EgskWqx4ni/aET1h4f1kluql5A==} engines: {node: '>=18'} peerDependencies: '@opentelemetry/api': ^1.9.0 @@ -1888,20 +1865,20 @@ packages: '@opentelemetry/core': ^1.30.1 || ^2.0.0 '@opentelemetry/instrumentation': ^0.57.1 || ^0.200.0 '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.0.0 - '@opentelemetry/semantic-conventions': ^1.30.0 + '@opentelemetry/semantic-conventions': ^1.34.0 - '@sentry/react@9.22.0': - resolution: {integrity: sha512-mI43NnioBYdG5TiXqRlhV1feZs9bnrrl+k5HOHBK7VQtymaXO0fkcsRLZTkdSgLRLMJGasZuvVhq2xK+18QyWQ==} + '@sentry/react@9.24.0': + resolution: {integrity: sha512-CEgNuxnaax5JXvCJGO8MaPU6Doqf8OMK/52SwZxTwJJFsQBAC2v7Dl+Qot7H4GVb0exg3psumL4NjNeXAfGcpA==} engines: {node: '>=18'} peerDependencies: react: ^16.14.0 || 17.x || 18.x || 19.x - '@sentry/vercel-edge@9.22.0': - resolution: {integrity: sha512-M1BXBCFKKXzYz+rQnHyZb8p7yuraRu/cQAOxY5Cksd5RhS8RqVbKBHrtaIQ4tJ9dDRo0PkQxb02Ufun3JVsByg==} + '@sentry/vercel-edge@9.24.0': + resolution: {integrity: sha512-X85EkcrHoICRDQ5+6f5KqGhXATbFaTw/NEz92uVqSLQjv0EEKJ+SPwQpIH9ccLSeXg/R5GYXR0Z6kEYS/zo/Vw==} engines: {node: '>=18'} - '@sentry/webpack-plugin@3.3.1': - resolution: {integrity: sha512-AFRnGNUnlIvq3M+ADdfWb+DIXWKK6yYEkVPAyOppkjO+cL/19gjXMdvAwv+CMFts28YCFKF8Kr3pamUiCmwodA==} + '@sentry/webpack-plugin@3.5.0': + resolution: {integrity: sha512-xvclj0QY2HyU7uJLzOlHSrZQBDwfnGKJxp8mmlU4L7CwmK+8xMCqlO7tYZoqE4K/wU3c2xpXql70x8qmvNMxzQ==} engines: {node: '>= 14'} peerDependencies: webpack: '>=4.40.0' @@ -2042,11 +2019,11 @@ packages: '@types/next-pwa@5.6.9': resolution: {integrity: sha512-KcymH+MtFYB5KVKIOH1DMqd0wUb8VLCxzHtsaRQQ7S8sGOaTH24Lo2vGZf6/0Ok9e+xWCKhqsSt6cgDJTk91Iw==} - '@types/node@18.19.103': - resolution: {integrity: sha512-hHTHp+sEz6SxFsp+SA+Tqrua3AbmlAw+Y//aEwdHrdZkYVRWdvWD3y5uPZ0flYOkgskaFWqZ/YGFm3FaFQ0pRw==} + '@types/node@18.19.110': + resolution: {integrity: sha512-WW2o4gTmREtSnqKty9nhqF/vA0GKd0V/rbC0OyjSk9Bz6bzlsXKT+i7WDdS/a0z74rfT2PO4dArVCSnapNLA5Q==} - '@types/node@22.15.23': - resolution: {integrity: sha512-7Ec1zaFPF4RJ0eXu1YT/xgiebqwqoJz8rYPDi/O2BcZ++Wpt0Kq9cl0eg6NN6bYbPnR67ZLo7St5Q3UK0SnARw==} + '@types/node@22.15.29': + resolution: {integrity: sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ==} '@types/pg-pool@2.0.6': resolution: {integrity: sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==} @@ -2106,14 +2083,6 @@ packages: '@types/which@3.0.4': resolution: {integrity: sha512-liyfuo/106JdlgSchJzXEQCVArk0CvevqPote8F8HgWgJ3dRCcTHgJIsLDuee0kxk/mhbInzIZk3QWSZJ8R+2w==} - '@typescript-eslint/eslint-plugin@8.32.1': - resolution: {integrity: sha512-6u6Plg9nP/J1GRpe/vcjjabo6Uc5YQPAMxsgQyGC/I0RuukiG1wIe3+Vtg3IrSCVJDmqK3j8adrtzXSENRtFgg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/eslint-plugin@8.33.0': resolution: {integrity: sha512-CACyQuqSHt7ma3Ns601xykeBK/rDeZa3w6IS6UtMQbixO5DWy+8TilKkviGDH6jtWCo8FGRKEK5cLLkPvEammQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2122,13 +2091,6 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/parser@8.32.1': - resolution: {integrity: sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/parser@8.33.0': resolution: {integrity: sha512-JaehZvf6m0yqYp34+RVnihBAChkqeH+tqqhS0GuX1qgPpwLvmTPheKEs6OeCK6hVJgXZHJ2vbjnC9j119auStQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2140,10 +2102,6 @@ packages: resolution: {integrity: sha512-d1hz0u9l6N+u/gcrk6s6gYdl7/+pp8yHheRTqP6X5hVDKALEaTn8WfGiit7G511yueBEL3OpOEpD+3/MBdoN+A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.32.1': - resolution: {integrity: sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.33.0': resolution: {integrity: sha512-LMi/oqrzpqxyO72ltP+dBSP6V0xiUb4saY7WLtxSfiNEBI8m321LLVFU9/QDJxjDQG9/tjSqKz/E3380TEqSTw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2154,13 +2112,6 @@ packages: peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/type-utils@8.32.1': - resolution: {integrity: sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/type-utils@8.33.0': resolution: {integrity: sha512-lScnHNCBqL1QayuSrWeqAL5GmqNdVUQAAMTaCwdYEdWfIrSrOGzyLGRCHXcCixa5NK6i5l0AfSO2oBSjCjf4XQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2168,33 +2119,16 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/types@8.32.1': - resolution: {integrity: sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.33.0': resolution: {integrity: sha512-DKuXOKpM5IDT1FA2g9x9x1Ug81YuKrzf4mYX8FAVSNu5Wo/LELHWQyM1pQaDkI42bX15PWl0vNPt1uGiIFUOpg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.32.1': - resolution: {integrity: sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/typescript-estree@8.33.0': resolution: {integrity: sha512-vegY4FQoB6jL97Tu/lWRsAiUUp8qJTqzAmENH2k59SJhw0Th1oszb9Idq/FyyONLuNqT1OADJPXfyUNOR8SzAQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.32.1': - resolution: {integrity: sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.33.0': resolution: {integrity: sha512-lPFuQaLA9aSNa7D5u2EpRiqdAUhzShwGg/nhpBlc4GR6kcTABttCuyjFs8BcEZ8VWrjCBof/bePhP3Q3fS+Yrw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2202,96 +2136,92 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/visitor-keys@8.32.1': - resolution: {integrity: sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.33.0': resolution: {integrity: sha512-7RW7CMYoskiz5OOGAWjJFxgb7c5UNjTG292gYhWeOAcFmYCtVCSqjqSBj5zMhxbXo2JOW95YYrUWJfU0zrpaGQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@unrs/resolver-binding-darwin-arm64@1.7.2': - resolution: {integrity: sha512-vxtBno4xvowwNmO/ASL0Y45TpHqmNkAaDtz4Jqb+clmcVSSl8XCG/PNFFkGsXXXS6AMjP+ja/TtNCFFa1QwLRg==} + '@unrs/resolver-binding-darwin-arm64@1.7.8': + resolution: {integrity: sha512-rsRK8T7yxraNRDmpFLZCWqpea6OlXPNRRCjWMx24O1V86KFol7u2gj9zJCv6zB1oJjtnzWceuqdnCgOipFcJPA==} cpu: [arm64] os: [darwin] - '@unrs/resolver-binding-darwin-x64@1.7.2': - resolution: {integrity: sha512-qhVa8ozu92C23Hsmv0BF4+5Dyyd5STT1FolV4whNgbY6mj3kA0qsrGPe35zNR3wAN7eFict3s4Rc2dDTPBTuFQ==} + '@unrs/resolver-binding-darwin-x64@1.7.8': + resolution: {integrity: sha512-16yEMWa+Olqkk8Kl6Bu0ltT5OgEedkSAsxcz1B3yEctrDYp3EMBu/5PPAGhWVGnwhtf3hNe3y15gfYBAjOv5tQ==} cpu: [x64] os: [darwin] - '@unrs/resolver-binding-freebsd-x64@1.7.2': - resolution: {integrity: sha512-zKKdm2uMXqLFX6Ac7K5ElnnG5VIXbDlFWzg4WJ8CGUedJryM5A3cTgHuGMw1+P5ziV8CRhnSEgOnurTI4vpHpg==} + '@unrs/resolver-binding-freebsd-x64@1.7.8': + resolution: {integrity: sha512-ST4uqF6FmdZQgv+Q73FU1uHzppeT4mhX3IIEmHlLObrv5Ep50olWRz0iQ4PWovadjHMTAmpuJAGaAuCZYb7UAQ==} cpu: [x64] os: [freebsd] - '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.2': - resolution: {integrity: sha512-8N1z1TbPnHH+iDS/42GJ0bMPLiGK+cUqOhNbMKtWJ4oFGzqSJk/zoXFzcQkgtI63qMcUI7wW1tq2usZQSb2jxw==} + '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.8': + resolution: {integrity: sha512-Z/A/4Rm2VWku2g25C3tVb986fY6unx5jaaCFpx1pbAj0OKkyuJ5wcQLHvNbIcJ9qhiYwXfrkB7JNlxrAbg7YFg==} cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm-musleabihf@1.7.2': - resolution: {integrity: sha512-tjYzI9LcAXR9MYd9rO45m1s0B/6bJNuZ6jeOxo1pq1K6OBuRMMmfyvJYval3s9FPPGmrldYA3mi4gWDlWuTFGA==} + '@unrs/resolver-binding-linux-arm-musleabihf@1.7.8': + resolution: {integrity: sha512-HN0p7o38qKmDo3bZUiQa6gP7Qhf0sKgJZtRfSHi6JL2Gi4NaUVF0EO1sQ1RHbeQ4VvfjUGMh3QE5dxEh06BgQQ==} cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm64-gnu@1.7.2': - resolution: {integrity: sha512-jon9M7DKRLGZ9VYSkFMflvNqu9hDtOCEnO2QAryFWgT6o6AXU8du56V7YqnaLKr6rAbZBWYsYpikF226v423QA==} + '@unrs/resolver-binding-linux-arm64-gnu@1.7.8': + resolution: {integrity: sha512-HsoVqDBt9G69AN0KWeDNJW+7i8KFlwxrbbnJffgTGpiZd6Jw+Q95sqkXp8y458KhKduKLmXfVZGnKBTNxAgPjw==} cpu: [arm64] os: [linux] - '@unrs/resolver-binding-linux-arm64-musl@1.7.2': - resolution: {integrity: sha512-c8Cg4/h+kQ63pL43wBNaVMmOjXI/X62wQmru51qjfTvI7kmCy5uHTJvK/9LrF0G8Jdx8r34d019P1DVJmhXQpA==} + '@unrs/resolver-binding-linux-arm64-musl@1.7.8': + resolution: {integrity: sha512-VfR2yTDUbUvn+e/Aw22CC9fQg9zdShHAfwWctNBdOk7w9CHWl2OtYlcMvjzMAns8QxoHQoqn3/CEnZ4Ts7hfrA==} cpu: [arm64] os: [linux] - '@unrs/resolver-binding-linux-ppc64-gnu@1.7.2': - resolution: {integrity: sha512-A+lcwRFyrjeJmv3JJvhz5NbcCkLQL6Mk16kHTNm6/aGNc4FwPHPE4DR9DwuCvCnVHvF5IAd9U4VIs/VvVir5lg==} + '@unrs/resolver-binding-linux-ppc64-gnu@1.7.8': + resolution: {integrity: sha512-xUauVQNz4uDgs4UJJiUAwMe3N0PA0wvtImh7V0IFu++UKZJhssXbKHBRR4ecUJpUHCX2bc4Wc8sGsB6P+7BANg==} cpu: [ppc64] os: [linux] - '@unrs/resolver-binding-linux-riscv64-gnu@1.7.2': - resolution: {integrity: sha512-hQQ4TJQrSQW8JlPm7tRpXN8OCNP9ez7PajJNjRD1ZTHQAy685OYqPrKjfaMw/8LiHCt8AZ74rfUVHP9vn0N69Q==} + '@unrs/resolver-binding-linux-riscv64-gnu@1.7.8': + resolution: {integrity: sha512-GqyIB+CuSHGhhc8ph5RrurtNetYJjb6SctSHafqmdGcRuGi6uyTMR8l18hMEhZFsXdFMc/MpInPLvmNV22xn+A==} cpu: [riscv64] os: [linux] - '@unrs/resolver-binding-linux-riscv64-musl@1.7.2': - resolution: {integrity: sha512-NoAGbiqrxtY8kVooZ24i70CjLDlUFI7nDj3I9y54U94p+3kPxwd2L692YsdLa+cqQ0VoqMWoehDFp21PKRUoIQ==} + '@unrs/resolver-binding-linux-riscv64-musl@1.7.8': + resolution: {integrity: sha512-eEU3rWIFRv60xaAbtsgwHNWRZGD7cqkpCvNtio/f1TjEE3HfKLzPNB24fA9X/8ZXQrGldE65b7UKK3PmO4eWIQ==} cpu: [riscv64] os: [linux] - '@unrs/resolver-binding-linux-s390x-gnu@1.7.2': - resolution: {integrity: sha512-KaZByo8xuQZbUhhreBTW+yUnOIHUsv04P8lKjQ5otiGoSJ17ISGYArc+4vKdLEpGaLbemGzr4ZeUbYQQsLWFjA==} + '@unrs/resolver-binding-linux-s390x-gnu@1.7.8': + resolution: {integrity: sha512-GVLI0f4I4TlLqEUoOFvTWedLsJEdvsD0+sxhdvQ5s+N+m2DSynTs8h9jxR0qQbKlpHWpc2Ortz3z48NHRT4l+w==} cpu: [s390x] os: [linux] - '@unrs/resolver-binding-linux-x64-gnu@1.7.2': - resolution: {integrity: sha512-dEidzJDubxxhUCBJ/SHSMJD/9q7JkyfBMT77Px1npl4xpg9t0POLvnWywSk66BgZS/b2Hy9Y1yFaoMTFJUe9yg==} + '@unrs/resolver-binding-linux-x64-gnu@1.7.8': + resolution: {integrity: sha512-GX1pZ/4ncUreB0Rlp1l7bhKAZ8ZmvDIgXdeb5V2iK0eRRF332+6gRfR/r5LK88xfbtOpsmRHU6mQ4N8ZnwvGEA==} cpu: [x64] os: [linux] - '@unrs/resolver-binding-linux-x64-musl@1.7.2': - resolution: {integrity: sha512-RvP+Ux3wDjmnZDT4XWFfNBRVG0fMsc+yVzNFUqOflnDfZ9OYujv6nkh+GOr+watwrW4wdp6ASfG/e7bkDradsw==} + '@unrs/resolver-binding-linux-x64-musl@1.7.8': + resolution: {integrity: sha512-n1N84MnsvDupzVuYqJGj+2pb9s8BI1A5RgXHvtVFHedGZVBCFjDpQVRlmsFMt6xZiKwDPaqsM16O/1isCUGt7w==} cpu: [x64] os: [linux] - '@unrs/resolver-binding-wasm32-wasi@1.7.2': - resolution: {integrity: sha512-y797JBmO9IsvXVRCKDXOxjyAE4+CcZpla2GSoBQ33TVb3ILXuFnMrbR/QQZoauBYeOFuu4w3ifWLw52sdHGz6g==} + '@unrs/resolver-binding-wasm32-wasi@1.7.8': + resolution: {integrity: sha512-x94WnaU5g+pCPDVedfnXzoG6lCOF2xFGebNwhtbJCWfceE94Zj8aysSxdxotlrZrxnz5D3ijtyFUYtpz04n39Q==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@unrs/resolver-binding-win32-arm64-msvc@1.7.2': - resolution: {integrity: sha512-gtYTh4/VREVSLA+gHrfbWxaMO/00y+34htY7XpioBTy56YN2eBjkPrY1ML1Zys89X3RJDKVaogzwxlM1qU7egg==} + '@unrs/resolver-binding-win32-arm64-msvc@1.7.8': + resolution: {integrity: sha512-vst2u8EJZ5L6jhJ6iLis3w9rg16aYqRxQuBAMYQRVrPMI43693hLP7DuqyOBRKgsQXy9/jgh204k0ViHkqQgdg==} cpu: [arm64] os: [win32] - '@unrs/resolver-binding-win32-ia32-msvc@1.7.2': - resolution: {integrity: sha512-Ywv20XHvHTDRQs12jd3MY8X5C8KLjDbg/jyaal/QLKx3fAShhJyD4blEANInsjxW3P7isHx1Blt56iUDDJO3jg==} + '@unrs/resolver-binding-win32-ia32-msvc@1.7.8': + resolution: {integrity: sha512-yb3LZOLMFqnA+/ShlE1E5bpYPGDsA590VHHJPB+efnyowT776GJXBoh82em6O9WmYBUq57YblGTcMYAFBm72HA==} cpu: [ia32] os: [win32] - '@unrs/resolver-binding-win32-x64-msvc@1.7.2': - resolution: {integrity: sha512-friS8NEQfHaDbkThxopGk+LuE5v3iY0StruifjQEt7SLbA46OnfgMO15sOTkbpJkol6RB+1l1TYPXh0sCddpvA==} + '@unrs/resolver-binding-win32-x64-msvc@1.7.8': + resolution: {integrity: sha512-hHKFx+opG5BA3/owMXon8ypwSotBGTdblG6oda/iOu9+OEYnk0cxD2uIcGyGT8jCK578kV+xMrNxqbn8Zjlpgw==} cpu: [x64] os: [win32] @@ -2551,8 +2481,8 @@ packages: browser-fs-access@0.37.0: resolution: {integrity: sha512-MKpvZrKtv6pBJ2ACd+VwfS9XauBKTMVZg2UBibypuK1gfiXM7euZjbdKmvRsyxeQRhfzNVQrzCSVGXs19/LP8Q==} - browserslist@4.24.5: - resolution: {integrity: sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==} + browserslist@4.25.0: + resolution: {integrity: sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -2597,8 +2527,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001718: - resolution: {integrity: sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==} + caniuse-lite@1.0.30001720: + resolution: {integrity: sha512-Ec/2yV2nNPwb4DnTANEV99ZWwm3ZWfdlfkQbWSDDt+PsXEVYwlhPH8tdMaPunYTKKmz7AnHi2oNEi1GcmKCD8g==} chalk@3.0.0: resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} @@ -2901,8 +2831,8 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.157: - resolution: {integrity: sha512-/0ybgsQd1muo8QlnuTpKwtl0oX5YMlUGbm8xyqgDU00motRkKFFbUJySAQBWcY79rVqNLWIWa87BGVGClwAB2w==} + electron-to-chromium@1.5.161: + resolution: {integrity: sha512-hwtetwfKNZo/UlwHIVBlKZVdy7o8bIZxxKs0Mv/ROPiQQQmDgdm5a+KvKtBsxM8ZjFzTaCeLoodZ8jiBE3o9rA==} element-internals-polyfill@1.3.13: resolution: {integrity: sha512-viZ7wJsvh6eFwGQX512zEaccK/c6RRFSerJsdkfe3DW/ZtruvNeOR33fpPZgfXxvqRdU2lK33KM4S6GqaTgVKQ==} @@ -2937,8 +2867,8 @@ packages: resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} hasBin: true - es-abstract@1.23.10: - resolution: {integrity: sha512-MtUbM072wlJNyeYAe0mhzrD+M6DIJa96CZAOBBrhDbgKnB4MApIKefcyAB1eOdYn8cUNZgvwBvEzdoAYsxgEIw==} + es-abstract@1.24.0: + resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} engines: {node: '>= 0.4'} es-define-property@1.0.1: @@ -2983,8 +2913,8 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-config-next@15.3.2: - resolution: {integrity: sha512-FerU4DYccO4FgeYFFglz0SnaKRe1ejXQrDb8kWUkTAg036YWi+jUsgg4sIGNCDhAsDITsZaL4MzBWKB6f4G1Dg==} + eslint-config-next@15.3.3: + resolution: {integrity: sha512-QJLv/Ouk2vZnxL4b67njJwTLjTf7uZRltI0LL4GERYR4qMF5z08+gxkfODAeaK7TiC6o+cER91bDaEnwrTWV6Q==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 typescript: '>=3.3.1' @@ -3170,8 +3100,8 @@ packages: fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} - fdir@6.4.4: - resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} + fdir@6.4.5: + resolution: {integrity: sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -3260,8 +3190,8 @@ packages: functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - fx@36.0.2: - resolution: {integrity: sha512-bosodrsJ+IlgquKTTqzIiZrcKwWgjv+sILRoNtnUZdsaD2D1sxOmUnAL3B8uhQLdBikAUzJkv5XHpZjc+x2nCQ==} + fx@36.0.3: + resolution: {integrity: sha512-E+flQ8IQpctke+/dfBdKg2h8UGZapVfadRU3LR4xC/BYvaJPoUlxfbrfWBLzdKYrqfWse5YxEpekRl853L/zrw==} hasBin: true gensequence@7.0.0: @@ -3461,8 +3391,8 @@ packages: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} - import-in-the-middle@1.13.2: - resolution: {integrity: sha512-Yjp9X7s2eHSXvZYQ0aye6UvwYPrVB5C2k47fuXjFKnYinAByaDZjh4t9MT2wEga9775n6WaIqyHnQhBxYtX2mg==} + import-in-the-middle@1.14.0: + resolution: {integrity: sha512-g5zLT0HaztRJWysayWYiUq/7E5H825QIiecMD2pI5QO7Wzr847l6GDvPvmZaDIdrDtS2w7qRczywxiK6SL5vRw==} import-meta-resolve@4.1.0: resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} @@ -3570,6 +3500,10 @@ packages: is-module@1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + is-number-object@1.1.1: resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} engines: {node: '>= 0.4'} @@ -4059,8 +3993,8 @@ packages: react-native: optional: true - mobx-restful-table@2.4.0: - resolution: {integrity: sha512-1dWkPku3ivK+Khr94qyjyAYK8oV+hnR9pyxvTc2CmcYYRp7ghV4blNnc3bmu5QQrNfe4aqOkYeVJC0mDZz8KNg==} + mobx-restful-table@2.5.0: + resolution: {integrity: sha512-ma2Dons0AHeSR4HJ+d8Fb20EAltrPca8BeZ3O2aZNco4dn9Z1JnF1RPTET2qzjKNdai34wosHWJSSRJsY2YK2A==} peerDependencies: react: '>=16.8' @@ -4110,12 +4044,12 @@ packages: next-pwa@5.6.0: resolution: {integrity: sha512-XV8g8C6B7UmViXU8askMEYhWwQ4qc/XqJGnexbLV68hzKaGHZDMtHsm2TNxFcbR7+ypVuth/wwpiIlMwpRJJ5A==} peerDependencies: - next: ^15.3.2 + next: ^15.3.3 next-ssr-middleware@1.0.0: resolution: {integrity: sha512-mYnrUyumfb3L7ik7sgmT7a9UHFfVl33VfzKMZxbQgAVNfcRbsIx7zPKyCjMCiSLovRRH3FRLibtgq+3brBAuIQ==} peerDependencies: - next: ^15.3.2 + next: ^15.3.3 react: '>=18' next-with-less@3.0.1: @@ -4123,10 +4057,10 @@ packages: peerDependencies: less: '*' less-loader: '>= 7.0.0' - next: ^15.3.2 + next: ^15.3.3 - next@15.3.2: - resolution: {integrity: sha512-CA3BatMyHkxZ48sgOCLdVHjFU36N7TF1HhqAHLFOkV6buwZnvMI84Cug8xD56B9mCuKrqXnLn94417GrZ/jjCQ==} + next@15.3.3: + resolution: {integrity: sha512-JqNj29hHNmCLtNvd090SyRbXJiivQ+58XjCcrC50Crb5g5u2zi7Y2YivbsEfzk6AtVI80akdOQbaMZwWB1Hthw==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -4804,6 +4738,10 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} + stream-combiner@0.0.4: resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} @@ -4894,8 +4832,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - synckit@0.11.6: - resolution: {integrity: sha512-2pR2ubZSV64f/vqm9eLPz/KOvR9Dm+Co/5ChLgeHl0yEDRc6h5hXHoxEQH8Y5Ljycozd3p1k5TTSVdzYGkPvLw==} + synckit@0.11.8: + resolution: {integrity: sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==} engines: {node: ^14.18.0 || >=16.0.0} tapable@2.2.2: @@ -4926,8 +4864,8 @@ packages: uglify-js: optional: true - terser@5.39.2: - resolution: {integrity: sha512-yEPUmWve+VA78bI71BW70Dh0TuV4HHd+I5SHOAfS1+QBOmvmCiiffgjR8ryyEd3KIfvPGFqoADt8LdQ6XpXIvg==} + terser@5.40.0: + resolution: {integrity: sha512-cfeKl/jjwSR5ar7d0FGmave9hFGJT8obyo0z+CrQOylLDbk7X81nPU6vq9VORa5jU30SkDnT2FXjLbR8HLP+xA==} engines: {node: '>=10'} hasBin: true @@ -4937,8 +4875,8 @@ packages: through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - tinyglobby@0.2.13: - resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} + tinyglobby@0.2.14: + resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} to-regex-range@5.0.1: @@ -5092,8 +5030,8 @@ packages: unplugin@1.0.1: resolution: {integrity: sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA==} - unrs-resolver@1.7.2: - resolution: {integrity: sha512-BBKpaylOW8KbHsu378Zky/dGh4ckT/4NW/0SHRABdqRLcQJ2dAOjDo9g97p04sWflm0kqPqpUatxReNV/dqI5A==} + unrs-resolver@1.7.8: + resolution: {integrity: sha512-2zsXwyOXmCX9nGz4vhtZRYhe30V78heAv+KDc21A/KMdovGHbZcixeD5JHEF0DrFXzdytwuzYclcPbvp8A3Jlw==} upath@1.2.0: resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} @@ -5332,19 +5270,19 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.27.2': {} + '@babel/compat-data@7.27.3': {} - '@babel/core@7.27.3': + '@babel/core@7.27.4': dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.27.1 '@babel/generator': 7.27.3 '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.3) - '@babel/helpers': 7.27.3 - '@babel/parser': 7.27.3 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4) + '@babel/helpers': 7.27.4 + '@babel/parser': 7.27.4 '@babel/template': 7.27.2 - '@babel/traverse': 7.27.3 + '@babel/traverse': 7.27.4 '@babel/types': 7.27.3 convert-source-map: 2.0.0 debug: 4.4.1 @@ -5354,57 +5292,49 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.27.1': - dependencies: - '@babel/parser': 7.27.2 - '@babel/types': 7.27.1 - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 3.1.0 - '@babel/generator@7.27.3': dependencies: - '@babel/parser': 7.27.3 + '@babel/parser': 7.27.4 '@babel/types': 7.27.3 '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 - '@babel/helper-annotate-as-pure@7.27.1': + '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.27.1 + '@babel/types': 7.27.3 '@babel/helper-compilation-targets@7.27.2': dependencies: - '@babel/compat-data': 7.27.2 + '@babel/compat-data': 7.27.3 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.24.5 + browserslist: 4.25.0 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.27.3)': + '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 - '@babel/helper-annotate-as-pure': 7.27.1 + '@babel/core': 7.27.4 + '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.3) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.4) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.27.1 + '@babel/traverse': 7.27.4 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.27.3)': + '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 - '@babel/helper-annotate-as-pure': 7.27.1 + '@babel/core': 7.27.4 + '@babel/helper-annotate-as-pure': 7.27.3 regexpu-core: 6.2.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.27.3)': + '@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 debug: 4.4.1 @@ -5415,64 +5345,55 @@ snapshots: '@babel/helper-member-expression-to-functions@7.27.1': dependencies: - '@babel/traverse': 7.27.1 - '@babel/types': 7.27.1 + '@babel/traverse': 7.27.4 + '@babel/types': 7.27.3 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.27.1': dependencies: - '@babel/traverse': 7.27.1 - '@babel/types': 7.27.1 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.27.1(@babel/core@7.27.3)': - dependencies: - '@babel/core': 7.27.3 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.27.1 + '@babel/traverse': 7.27.4 + '@babel/types': 7.27.3 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.27.3(@babel/core@7.27.3)': + '@babel/helper-module-transforms@7.27.3(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-module-imports': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.27.3 + '@babel/traverse': 7.27.4 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.27.1 + '@babel/types': 7.27.3 '@babel/helper-plugin-utils@7.27.1': {} - '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.27.3)': + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 - '@babel/helper-annotate-as-pure': 7.27.1 + '@babel/core': 7.27.4 + '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-wrap-function': 7.27.1 - '@babel/traverse': 7.27.1 + '@babel/traverse': 7.27.4 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.27.1(@babel/core@7.27.3)': + '@babel/helper-replace-supers@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.27.1 + '@babel/traverse': 7.27.4 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: - '@babel/traverse': 7.27.1 - '@babel/types': 7.27.1 + '@babel/traverse': 7.27.4 + '@babel/types': 7.27.3 transitivePeerDependencies: - supports-color @@ -5485,592 +5406,576 @@ snapshots: '@babel/helper-wrap-function@7.27.1': dependencies: '@babel/template': 7.27.2 - '@babel/traverse': 7.27.1 - '@babel/types': 7.27.1 + '@babel/traverse': 7.27.4 + '@babel/types': 7.27.3 transitivePeerDependencies: - supports-color - '@babel/helpers@7.27.3': + '@babel/helpers@7.27.4': dependencies: '@babel/template': 7.27.2 '@babel/types': 7.27.3 - '@babel/parser@7.27.2': - dependencies: - '@babel/types': 7.27.1 - - '@babel/parser@7.27.3': + '@babel/parser@7.27.4': dependencies: '@babel/types': 7.27.3 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.27.1 + '@babel/traverse': 7.27.4 transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.3) + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.4) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.27.1 + '@babel/traverse': 7.27.4 transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-decorators@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-proposal-decorators@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.3) + '@babel/core': 7.27.4 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-decorators': 7.27.1(@babel/core@7.27.3) + '@babel/plugin-syntax-decorators': 7.27.1(@babel/core@7.27.4) transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.3)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 - '@babel/plugin-syntax-decorators@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-syntax-decorators@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.27.3)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.3) + '@babel/core': 7.27.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-async-generator-functions@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-async-generator-functions@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.3) - '@babel/traverse': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.4) + '@babel/traverse': 7.27.4 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.3) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.4) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-block-scoping@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-block-scoping@7.27.3(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.3) + '@babel/core': 7.27.4 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-class-static-block@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.3) + '@babel/core': 7.27.4 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-classes@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 - '@babel/helper-annotate-as-pure': 7.27.1 + '@babel/core': 7.27.4 + '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.3) - '@babel/traverse': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.4) + '@babel/traverse': 7.27.4 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/template': 7.27.2 - '@babel/plugin-transform-destructuring@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-destructuring@7.27.3(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.3) + '@babel/core': 7.27.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.3) + '@babel/core': 7.27.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.27.1 + '@babel/traverse': 7.27.4 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-literals@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 - '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.3) + '@babel/core': 7.27.4 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 - '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.3) + '@babel/core': 7.27.4 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 - '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.3) + '@babel/core': 7.27.4 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.27.1 + '@babel/traverse': 7.27.4 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 - '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.3) + '@babel/core': 7.27.4 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.3) + '@babel/core': 7.27.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-object-rest-spread@7.27.2(@babel/core@7.27.3)': + '@babel/plugin-transform-object-rest-spread@7.27.3(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-destructuring': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.27.3) + '@babel/plugin-transform-destructuring': 7.27.3(@babel/core@7.27.4) + '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.3) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.4) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-parameters@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.3) + '@babel/core': 7.27.4 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 - '@babel/helper-annotate-as-pure': 7.27.1 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.3) + '@babel/core': 7.27.4 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-display-name@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-react-display-name@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 - '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.27.3) + '@babel/core': 7.27.4 + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.27.4) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 - '@babel/helper-annotate-as-pure': 7.27.1 + '@babel/core': 7.27.4 + '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.3) - '@babel/types': 7.27.1 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.4) + '@babel/types': 7.27.3 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 - '@babel/helper-annotate-as-pure': 7.27.1 + '@babel/core': 7.27.4 + '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-regenerator@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-regenerator@7.27.4(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.3) + '@babel/core': 7.27.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-spread@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-spread@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-typescript@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-typescript@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 - '@babel/helper-annotate-as-pure': 7.27.1 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.3) + '@babel/core': 7.27.4 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.3) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.4) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.3) + '@babel/core': 7.27.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.3) + '@babel/core': 7.27.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.27.3)': + '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.3) + '@babel/core': 7.27.4 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.4) '@babel/helper-plugin-utils': 7.27.1 - '@babel/preset-env@7.27.2(@babel/core@7.27.3)': + '@babel/preset-env@7.27.2(@babel/core@7.27.4)': dependencies: - '@babel/compat-data': 7.27.2 - '@babel/core': 7.27.3 + '@babel/compat-data': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.3) - '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.27.3) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-async-generator-functions': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-block-scoping': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-class-static-block': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-classes': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-destructuring': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-object-rest-spread': 7.27.2(@babel/core@7.27.3) - '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-regenerator': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.27.3) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.27.3) - babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.27.3) - babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.27.3) - babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.27.3) + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.4) + '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.27.4) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-async-generator-functions': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-block-scoping': 7.27.3(@babel/core@7.27.4) + '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-class-static-block': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-classes': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-destructuring': 7.27.3(@babel/core@7.27.4) + '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-object-rest-spread': 7.27.3(@babel/core@7.27.4) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-regenerator': 7.27.4(@babel/core@7.27.4) + '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.27.4) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.27.4) + babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.27.4) + babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.27.4) + babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.27.4) core-js-compat: 3.42.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.27.3)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/types': 7.27.1 + '@babel/types': 7.27.3 esutils: 2.0.3 - '@babel/preset-react@7.27.1(@babel/core@7.27.3)': + '@babel/preset-react@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-transform-react-display-name': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.27.3) + '@babel/plugin-transform-react-display-name': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.27.4) transitivePeerDependencies: - supports-color - '@babel/preset-typescript@7.27.1(@babel/core@7.27.3)': + '@babel/preset-typescript@7.27.1(@babel/core@7.27.4)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.3) - '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.27.3) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.4) + '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.27.4) transitivePeerDependencies: - supports-color - '@babel/runtime@7.27.1': {} + '@babel/runtime@7.27.4': {} '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.27.3 + '@babel/parser': 7.27.4 '@babel/types': 7.27.3 - '@babel/traverse@7.27.1': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.27.1 - '@babel/parser': 7.27.2 - '@babel/template': 7.27.2 - '@babel/types': 7.27.1 - debug: 4.4.1 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/traverse@7.27.3': + '@babel/traverse@7.27.4': dependencies: '@babel/code-frame': 7.27.1 '@babel/generator': 7.27.3 - '@babel/parser': 7.27.3 + '@babel/parser': 7.27.4 '@babel/template': 7.27.2 '@babel/types': 7.27.3 debug: 4.4.1 @@ -6078,11 +5983,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/types@7.27.1': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/types@7.27.3': dependencies: '@babel/helper-string-parser': 7.27.1 @@ -6299,7 +6199,7 @@ snapshots: '@cspell/url': 9.0.2 cspell-lib: 9.0.2 eslint: 9.27.0(jiti@2.4.2) - synckit: 0.11.6 + synckit: 0.11.8 '@cspell/filetypes@9.0.2': {} @@ -6565,34 +6465,34 @@ snapshots: '@tybys/wasm-util': 0.9.0 optional: true - '@next/env@15.3.2': {} + '@next/env@15.3.3': {} - '@next/eslint-plugin-next@15.3.2': + '@next/eslint-plugin-next@15.3.3': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@15.3.2': + '@next/swc-darwin-arm64@15.3.3': optional: true - '@next/swc-darwin-x64@15.3.2': + '@next/swc-darwin-x64@15.3.3': optional: true - '@next/swc-linux-arm64-gnu@15.3.2': + '@next/swc-linux-arm64-gnu@15.3.3': optional: true - '@next/swc-linux-arm64-musl@15.3.2': + '@next/swc-linux-arm64-musl@15.3.3': optional: true - '@next/swc-linux-x64-gnu@15.3.2': + '@next/swc-linux-x64-gnu@15.3.3': optional: true - '@next/swc-linux-x64-musl@15.3.2': + '@next/swc-linux-x64-musl@15.3.3': optional: true - '@next/swc-win32-arm64-msvc@15.3.2': + '@next/swc-win32-arm64-msvc@15.3.3': optional: true - '@next/swc-win32-x64-msvc@15.3.2': + '@next/swc-win32-x64-msvc@15.3.3': optional: true '@nodelib/fs.scandir@2.1.5': @@ -6822,7 +6722,7 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/api-logs': 0.57.2 '@types/shimmer': 1.2.0 - import-in-the-middle: 1.13.2 + import-in-the-middle: 1.14.0 require-in-the-middle: 7.5.2 semver: 7.7.2 shimmer: 1.2.1 @@ -6857,7 +6757,7 @@ snapshots: '@popperjs/core@2.11.8': {} - '@prisma/instrumentation@6.7.0(@opentelemetry/api@1.9.0)': + '@prisma/instrumentation@6.8.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) @@ -6906,7 +6806,7 @@ snapshots: '@restart/ui@1.9.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@babel/runtime': 7.27.1 + '@babel/runtime': 7.27.4 '@popperjs/core': 2.11.8 '@react-aria/ssr': 3.9.8(react@19.1.0) '@restart/hooks': 0.5.1(react@19.1.0) @@ -6918,9 +6818,9 @@ snapshots: uncontrollable: 8.0.4(react@19.1.0) warning: 4.0.3 - '@rollup/plugin-babel@5.3.1(@babel/core@7.27.3)(rollup@2.79.2)': + '@rollup/plugin-babel@5.3.1(@babel/core@7.27.4)(rollup@2.79.2)': dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 '@babel/helper-module-imports': 7.27.1 '@rollup/pluginutils': 3.1.0(rollup@2.79.2) rollup: 2.79.2 @@ -6932,7 +6832,7 @@ snapshots: '@rollup/pluginutils': 5.1.4(rollup@4.35.0) commondir: 1.0.1 estree-walker: 2.0.2 - fdir: 6.4.4(picomatch@4.0.2) + fdir: 6.4.5(picomatch@4.0.2) is-reference: 1.2.1 magic-string: 0.30.17 picomatch: 4.0.2 @@ -7031,38 +6931,38 @@ snapshots: '@rushstack/eslint-patch@1.11.0': {} - '@sentry-internal/browser-utils@9.22.0': + '@sentry-internal/browser-utils@9.24.0': dependencies: - '@sentry/core': 9.22.0 + '@sentry/core': 9.24.0 - '@sentry-internal/feedback@9.22.0': + '@sentry-internal/feedback@9.24.0': dependencies: - '@sentry/core': 9.22.0 + '@sentry/core': 9.24.0 - '@sentry-internal/replay-canvas@9.22.0': + '@sentry-internal/replay-canvas@9.24.0': dependencies: - '@sentry-internal/replay': 9.22.0 - '@sentry/core': 9.22.0 + '@sentry-internal/replay': 9.24.0 + '@sentry/core': 9.24.0 - '@sentry-internal/replay@9.22.0': + '@sentry-internal/replay@9.24.0': dependencies: - '@sentry-internal/browser-utils': 9.22.0 - '@sentry/core': 9.22.0 + '@sentry-internal/browser-utils': 9.24.0 + '@sentry/core': 9.24.0 - '@sentry/babel-plugin-component-annotate@3.3.1': {} + '@sentry/babel-plugin-component-annotate@3.5.0': {} - '@sentry/browser@9.22.0': + '@sentry/browser@9.24.0': dependencies: - '@sentry-internal/browser-utils': 9.22.0 - '@sentry-internal/feedback': 9.22.0 - '@sentry-internal/replay': 9.22.0 - '@sentry-internal/replay-canvas': 9.22.0 - '@sentry/core': 9.22.0 + '@sentry-internal/browser-utils': 9.24.0 + '@sentry-internal/feedback': 9.24.0 + '@sentry-internal/replay': 9.24.0 + '@sentry-internal/replay-canvas': 9.24.0 + '@sentry/core': 9.24.0 - '@sentry/bundler-plugin-core@3.3.1': + '@sentry/bundler-plugin-core@3.5.0': dependencies: - '@babel/core': 7.27.3 - '@sentry/babel-plugin-component-annotate': 3.3.1 + '@babel/core': 7.27.4 + '@sentry/babel-plugin-component-annotate': 3.5.0 '@sentry/cli': 2.42.2 dotenv: 16.5.0 find-up: 5.0.0 @@ -7113,22 +7013,22 @@ snapshots: - encoding - supports-color - '@sentry/core@9.22.0': {} + '@sentry/core@9.24.0': {} - '@sentry/nextjs@9.22.0(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(next@15.3.2(@babel/core@7.27.3)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(webpack@5.99.9)': + '@sentry/nextjs@9.24.0(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(next@15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(webpack@5.99.9)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.34.0 '@rollup/plugin-commonjs': 28.0.1(rollup@4.35.0) - '@sentry-internal/browser-utils': 9.22.0 - '@sentry/core': 9.22.0 - '@sentry/node': 9.22.0 - '@sentry/opentelemetry': 9.22.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.34.0) - '@sentry/react': 9.22.0(react@19.1.0) - '@sentry/vercel-edge': 9.22.0 - '@sentry/webpack-plugin': 3.3.1(webpack@5.99.9) + '@sentry-internal/browser-utils': 9.24.0 + '@sentry/core': 9.24.0 + '@sentry/node': 9.24.0 + '@sentry/opentelemetry': 9.24.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.34.0) + '@sentry/react': 9.24.0(react@19.1.0) + '@sentry/vercel-edge': 9.24.0 + '@sentry/webpack-plugin': 3.5.0(webpack@5.99.9) chalk: 3.0.0 - next: 15.3.2(@babel/core@7.27.3)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + next: 15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) resolve: 1.22.8 rollup: 4.35.0 stacktrace-parser: 0.1.11 @@ -7142,7 +7042,7 @@ snapshots: - supports-color - webpack - '@sentry/node@9.22.0': + '@sentry/node@9.24.0': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/context-async-hooks': 1.30.1(@opentelemetry/api@1.9.0) @@ -7173,15 +7073,15 @@ snapshots: '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.34.0 - '@prisma/instrumentation': 6.7.0(@opentelemetry/api@1.9.0) - '@sentry/core': 9.22.0 - '@sentry/opentelemetry': 9.22.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.34.0) - import-in-the-middle: 1.13.2 + '@prisma/instrumentation': 6.8.2(@opentelemetry/api@1.9.0) + '@sentry/core': 9.24.0 + '@sentry/opentelemetry': 9.24.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.34.0) + import-in-the-middle: 1.14.0 minimatch: 9.0.5 transitivePeerDependencies: - supports-color - '@sentry/opentelemetry@9.22.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.34.0)': + '@sentry/opentelemetry@9.24.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.34.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/context-async-hooks': 1.30.1(@opentelemetry/api@1.9.0) @@ -7189,23 +7089,23 @@ snapshots: '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.34.0 - '@sentry/core': 9.22.0 + '@sentry/core': 9.24.0 - '@sentry/react@9.22.0(react@19.1.0)': + '@sentry/react@9.24.0(react@19.1.0)': dependencies: - '@sentry/browser': 9.22.0 - '@sentry/core': 9.22.0 + '@sentry/browser': 9.24.0 + '@sentry/core': 9.24.0 hoist-non-react-statics: 3.3.2 react: 19.1.0 - '@sentry/vercel-edge@9.22.0': + '@sentry/vercel-edge@9.24.0': dependencies: '@opentelemetry/api': 1.9.0 - '@sentry/core': 9.22.0 + '@sentry/core': 9.24.0 - '@sentry/webpack-plugin@3.3.1(webpack@5.99.9)': + '@sentry/webpack-plugin@3.5.0(webpack@5.99.9)': dependencies: - '@sentry/bundler-plugin-core': 3.3.1 + '@sentry/bundler-plugin-core': 3.5.0 unplugin: 1.0.1 uuid: 9.0.1 webpack: 5.99.9 @@ -7217,7 +7117,7 @@ snapshots: '@stylistic/eslint-plugin@4.4.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: - '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) eslint: 9.27.0(jiti@2.4.2) eslint-visitor-keys: 4.2.0 espree: 10.3.0 @@ -7244,12 +7144,12 @@ snapshots: dependencies: tslib: 2.8.1 - '@tech_query/node-toolkit@1.2.1(@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.3))(@babel/preset-env@7.27.2(@babel/core@7.27.3))(@types/node@22.15.23)': + '@tech_query/node-toolkit@1.2.1(@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.4))(@babel/preset-env@7.27.2(@babel/core@7.27.4))(@types/node@22.15.29)': dependencies: - '@babel/core': 7.27.3 - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.3) - '@babel/preset-env': 7.27.2(@babel/core@7.27.3) - '@types/node': 22.15.23 + '@babel/core': 7.27.4 + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.4) + '@babel/preset-env': 7.27.2(@babel/core@7.27.4) + '@types/node': 22.15.29 cross-spawn: 7.0.6 file-type: 16.5.4 fs-extra: 11.3.0 @@ -7271,16 +7171,16 @@ snapshots: '@types/accepts@1.3.7': dependencies: - '@types/node': 22.15.23 + '@types/node': 22.15.29 '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.15.23 + '@types/node': 22.15.29 '@types/connect@3.4.38': dependencies: - '@types/node': 22.15.23 + '@types/node': 22.15.29 '@types/content-disposition@0.5.8': {} @@ -7289,7 +7189,7 @@ snapshots: '@types/connect': 3.4.38 '@types/express': 5.0.2 '@types/keygrip': 1.0.6 - '@types/node': 22.15.23 + '@types/node': 22.15.29 '@types/eslint-config-prettier@6.11.3': {} @@ -7311,7 +7211,7 @@ snapshots: '@types/express-serve-static-core@5.0.6': dependencies: - '@types/node': 22.15.23 + '@types/node': 22.15.29 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -7325,14 +7225,14 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 22.15.23 + '@types/node': 22.15.29 '@types/geojson@7946.0.16': {} '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 22.15.23 + '@types/node': 22.15.29 '@types/http-assert@1.5.6': {} @@ -7344,12 +7244,12 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 22.15.23 + '@types/node': 22.15.29 '@types/jsonwebtoken@9.0.9': dependencies: '@types/ms': 2.1.0 - '@types/node': 22.15.23 + '@types/node': 22.15.29 '@types/keygrip@1.0.6': {} @@ -7366,7 +7266,7 @@ snapshots: '@types/http-errors': 2.0.4 '@types/keygrip': 1.0.6 '@types/koa-compose': 3.2.8 - '@types/node': 22.15.23 + '@types/node': 22.15.29 '@types/koa__router@12.0.4': dependencies: @@ -7388,14 +7288,14 @@ snapshots: '@types/mysql@2.15.26': dependencies: - '@types/node': 22.15.23 + '@types/node': 22.15.29 - '@types/next-pwa@5.6.9(@babel/core@7.27.3)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@types/next-pwa@5.6.9(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@types/node': 22.15.23 + '@types/node': 22.15.29 '@types/react': 19.1.6 '@types/react-dom': 19.1.5(@types/react@19.1.6) - next: 15.3.2(@babel/core@7.27.3)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + next: 15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) workbox-build: 6.6.0 transitivePeerDependencies: - '@babel/core' @@ -7409,11 +7309,11 @@ snapshots: - sass - supports-color - '@types/node@18.19.103': + '@types/node@18.19.110': dependencies: undici-types: 5.26.5 - '@types/node@22.15.23': + '@types/node@22.15.29': dependencies: undici-types: 6.21.0 @@ -7423,7 +7323,7 @@ snapshots: '@types/pg@8.6.1': dependencies: - '@types/node': 22.15.23 + '@types/node': 22.15.29 pg-protocol: 1.10.0 pg-types: 2.2.0 @@ -7449,24 +7349,24 @@ snapshots: '@types/resolve@1.17.1': dependencies: - '@types/node': 22.15.23 + '@types/node': 22.15.29 '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.15.23 + '@types/node': 22.15.29 '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 22.15.23 + '@types/node': 22.15.29 '@types/send': 0.17.4 '@types/shimmer@1.2.0': {} '@types/tedious@4.0.14': dependencies: - '@types/node': 22.15.23 + '@types/node': 22.15.29 '@types/trusted-types@2.0.7': {} @@ -7476,23 +7376,6 @@ snapshots: '@types/which@3.0.4': {} - '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': - dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/type-utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.32.1 - eslint: 9.27.0(jiti@2.4.2) - graphemer: 1.4.0 - ignore: 7.0.4 - natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/eslint-plugin@8.33.0(@typescript-eslint/parser@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 @@ -7510,18 +7393,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.32.1 - debug: 4.4.1 - eslint: 9.27.0(jiti@2.4.2) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/parser@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@typescript-eslint/scope-manager': 8.33.0 @@ -7543,11 +7414,6 @@ snapshots: - supports-color - typescript - '@typescript-eslint/scope-manager@8.32.1': - dependencies: - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/visitor-keys': 8.32.1 - '@typescript-eslint/scope-manager@8.33.0': dependencies: '@typescript-eslint/types': 8.33.0 @@ -7557,17 +7423,6 @@ snapshots: dependencies: typescript: 5.8.3 - '@typescript-eslint/type-utils@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': - dependencies: - '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - debug: 4.4.1 - eslint: 9.27.0(jiti@2.4.2) - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/type-utils@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@typescript-eslint/typescript-estree': 8.33.0(typescript@5.8.3) @@ -7579,24 +7434,8 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.32.1': {} - '@typescript-eslint/types@8.33.0': {} - '@typescript-eslint/typescript-estree@8.32.1(typescript@5.8.3)': - dependencies: - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/visitor-keys': 8.32.1 - debug: 4.4.1 - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/typescript-estree@8.33.0(typescript@5.8.3)': dependencies: '@typescript-eslint/project-service': 8.33.0(typescript@5.8.3) @@ -7613,17 +7452,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - eslint: 9.27.0(jiti@2.4.2) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/utils@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.4.2)) @@ -7635,67 +7463,62 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.32.1': - dependencies: - '@typescript-eslint/types': 8.32.1 - eslint-visitor-keys: 4.2.0 - '@typescript-eslint/visitor-keys@8.33.0': dependencies: '@typescript-eslint/types': 8.33.0 eslint-visitor-keys: 4.2.0 - '@unrs/resolver-binding-darwin-arm64@1.7.2': + '@unrs/resolver-binding-darwin-arm64@1.7.8': optional: true - '@unrs/resolver-binding-darwin-x64@1.7.2': + '@unrs/resolver-binding-darwin-x64@1.7.8': optional: true - '@unrs/resolver-binding-freebsd-x64@1.7.2': + '@unrs/resolver-binding-freebsd-x64@1.7.8': optional: true - '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.2': + '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.8': optional: true - '@unrs/resolver-binding-linux-arm-musleabihf@1.7.2': + '@unrs/resolver-binding-linux-arm-musleabihf@1.7.8': optional: true - '@unrs/resolver-binding-linux-arm64-gnu@1.7.2': + '@unrs/resolver-binding-linux-arm64-gnu@1.7.8': optional: true - '@unrs/resolver-binding-linux-arm64-musl@1.7.2': + '@unrs/resolver-binding-linux-arm64-musl@1.7.8': optional: true - '@unrs/resolver-binding-linux-ppc64-gnu@1.7.2': + '@unrs/resolver-binding-linux-ppc64-gnu@1.7.8': optional: true - '@unrs/resolver-binding-linux-riscv64-gnu@1.7.2': + '@unrs/resolver-binding-linux-riscv64-gnu@1.7.8': optional: true - '@unrs/resolver-binding-linux-riscv64-musl@1.7.2': + '@unrs/resolver-binding-linux-riscv64-musl@1.7.8': optional: true - '@unrs/resolver-binding-linux-s390x-gnu@1.7.2': + '@unrs/resolver-binding-linux-s390x-gnu@1.7.8': optional: true - '@unrs/resolver-binding-linux-x64-gnu@1.7.2': + '@unrs/resolver-binding-linux-x64-gnu@1.7.8': optional: true - '@unrs/resolver-binding-linux-x64-musl@1.7.2': + '@unrs/resolver-binding-linux-x64-musl@1.7.8': optional: true - '@unrs/resolver-binding-wasm32-wasi@1.7.2': + '@unrs/resolver-binding-wasm32-wasi@1.7.8': dependencies: '@napi-rs/wasm-runtime': 0.2.10 optional: true - '@unrs/resolver-binding-win32-arm64-msvc@1.7.2': + '@unrs/resolver-binding-win32-arm64-msvc@1.7.8': optional: true - '@unrs/resolver-binding-win32-ia32-msvc@1.7.2': + '@unrs/resolver-binding-win32-ia32-msvc@1.7.8': optional: true - '@unrs/resolver-binding-win32-x64-msvc@1.7.2': + '@unrs/resolver-binding-win32-x64-msvc@1.7.8': optional: true '@webassemblyjs/ast@1.14.1': @@ -7865,7 +7688,7 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.10 + es-abstract: 1.24.0 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 is-string: 1.1.1 @@ -7886,7 +7709,7 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.10 + es-abstract: 1.24.0 es-errors: 1.3.0 es-object-atoms: 1.1.1 es-shim-unscopables: 1.1.0 @@ -7896,7 +7719,7 @@ snapshots: call-bind: 1.0.8 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.23.10 + es-abstract: 1.24.0 es-errors: 1.3.0 es-object-atoms: 1.1.1 es-shim-unscopables: 1.1.0 @@ -7905,21 +7728,21 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.10 + es-abstract: 1.24.0 es-shim-unscopables: 1.1.0 array.prototype.flatmap@1.3.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.10 + es-abstract: 1.24.0 es-shim-unscopables: 1.1.0 array.prototype.tosorted@1.1.4: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.10 + es-abstract: 1.24.0 es-errors: 1.3.0 es-shim-unscopables: 1.1.0 @@ -7928,7 +7751,7 @@ snapshots: array-buffer-byte-length: 1.0.2 call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.10 + es-abstract: 1.24.0 es-errors: 1.3.0 get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 @@ -7949,36 +7772,36 @@ snapshots: axobject-query@4.1.0: {} - babel-loader@8.4.1(@babel/core@7.27.3)(webpack@5.99.9): + babel-loader@8.4.1(@babel/core@7.27.4)(webpack@5.99.9): dependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 find-cache-dir: 3.3.2 loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 webpack: 5.99.9 - babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.27.3): + babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.27.4): dependencies: - '@babel/compat-data': 7.27.2 - '@babel/core': 7.27.3 - '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.3) + '@babel/compat-data': 7.27.3 + '@babel/core': 7.27.4 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.4) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.27.3): + babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.27.4): dependencies: - '@babel/core': 7.27.3 - '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.3) + '@babel/core': 7.27.4 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.4) core-js-compat: 3.42.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.27.3): + babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.27.4): dependencies: - '@babel/core': 7.27.3 - '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.3) + '@babel/core': 7.27.4 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.4) transitivePeerDependencies: - supports-color @@ -8007,12 +7830,12 @@ snapshots: browser-fs-access@0.37.0: {} - browserslist@4.24.5: + browserslist@4.25.0: dependencies: - caniuse-lite: 1.0.30001718 - electron-to-chromium: 1.5.157 + caniuse-lite: 1.0.30001720 + electron-to-chromium: 1.5.161 node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.24.5) + update-browserslist-db: 1.1.3(browserslist@4.25.0) buffer-equal-constant-time@1.0.1: {} @@ -8055,7 +7878,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001718: {} + caniuse-lite@1.0.30001720: {} chalk@3.0.0: dependencies: @@ -8144,9 +7967,9 @@ snapshots: colorette@2.0.20: {} - commander-jsx@0.6.9(@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.3))(@babel/preset-env@7.27.2(@babel/core@7.27.3))(@types/node@22.15.23): + commander-jsx@0.6.9(@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.4))(@babel/preset-env@7.27.2(@babel/core@7.27.4))(@types/node@22.15.29): dependencies: - '@tech_query/node-toolkit': 1.2.1(@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.3))(@babel/preset-env@7.27.2(@babel/core@7.27.3))(@types/node@22.15.23) + '@tech_query/node-toolkit': 1.2.1(@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.4))(@babel/preset-env@7.27.2(@babel/core@7.27.4))(@types/node@22.15.29) tslib: 2.8.1 transitivePeerDependencies: - '@babel/plugin-transform-modules-commonjs' @@ -8191,7 +8014,7 @@ snapshots: core-js-compat@3.42.0: dependencies: - browserslist: 4.24.5 + browserslist: 4.25.0 core-util-is@1.0.3: {} @@ -8355,7 +8178,7 @@ snapshots: dom-helpers@5.2.1: dependencies: - '@babel/runtime': 7.27.1 + '@babel/runtime': 7.27.4 csstype: 3.1.3 dotenv@16.5.0: {} @@ -8407,7 +8230,7 @@ snapshots: dependencies: jake: 10.9.2 - electron-to-chromium@1.5.157: {} + electron-to-chromium@1.5.161: {} element-internals-polyfill@1.3.13: {} @@ -8433,7 +8256,7 @@ snapshots: prr: 1.0.1 optional: true - es-abstract@1.23.10: + es-abstract@1.24.0: dependencies: array-buffer-byte-length: 1.0.2 arraybuffer.prototype.slice: 1.0.4 @@ -8462,7 +8285,9 @@ snapshots: is-array-buffer: 3.0.5 is-callable: 1.2.7 is-data-view: 1.0.2 + is-negative-zero: 2.0.3 is-regex: 1.2.1 + is-set: 2.0.3 is-shared-array-buffer: 1.0.4 is-string: 1.1.1 is-typed-array: 1.1.15 @@ -8477,6 +8302,7 @@ snapshots: safe-push-apply: 1.0.0 safe-regex-test: 1.1.0 set-proto: 1.0.0 + stop-iteration-iterator: 1.1.0 string.prototype.trim: 1.2.10 string.prototype.trimend: 1.0.9 string.prototype.trimstart: 1.0.8 @@ -8496,7 +8322,7 @@ snapshots: call-bind: 1.0.8 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.23.10 + es-abstract: 1.24.0 es-errors: 1.3.0 es-set-tostringtag: 2.1.0 function-bind: 1.1.2 @@ -8539,16 +8365,16 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-next@15.3.2(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3): + eslint-config-next@15.3.3(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3): dependencies: - '@next/eslint-plugin-next': 15.3.2 + '@next/eslint-plugin-next': 15.3.3 '@rushstack/eslint-patch': 1.11.0 - '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 8.33.0(@typescript-eslint/parser@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) eslint: 9.27.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.31.0)(eslint@9.27.0(jiti@2.4.2)) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.27.0(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.27.0(jiti@2.4.2)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.27.0(jiti@2.4.2)) eslint-plugin-react: 7.37.5(eslint@9.27.0(jiti@2.4.2)) eslint-plugin-react-hooks: 5.2.0(eslint@9.27.0(jiti@2.4.2)) @@ -8579,25 +8405,25 @@ snapshots: get-tsconfig: 4.10.1 is-bun-module: 2.0.0 stable-hash: 0.0.5 - tinyglobby: 0.2.13 - unrs-resolver: 1.7.2 + tinyglobby: 0.2.14 + unrs-resolver: 1.7.8 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.27.0(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.27.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.27.0(jiti@2.4.2)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.27.0(jiti@2.4.2)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) eslint: 9.27.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.31.0)(eslint@9.27.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.27.0(jiti@2.4.2)): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.27.0(jiti@2.4.2)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -8608,7 +8434,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.27.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.27.0(jiti@2.4.2)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.27.0(jiti@2.4.2)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -8620,7 +8446,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.33.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -8803,7 +8629,7 @@ snapshots: dependencies: reusify: 1.1.0 - fdir@6.4.4(picomatch@4.0.2): + fdir@6.4.5(picomatch@4.0.2): optionalDependencies: picomatch: 4.0.2 @@ -8898,7 +8724,7 @@ snapshots: functions-have-names@1.2.3: {} - fx@36.0.2: {} + fx@36.0.3: {} gensequence@7.0.0: {} @@ -8906,9 +8732,9 @@ snapshots: get-east-asian-width@1.3.0: {} - get-git-folder@0.1.2(@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.3))(@babel/preset-env@7.27.2(@babel/core@7.27.3))(@types/node@22.15.23): + get-git-folder@0.1.2(@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.4))(@babel/preset-env@7.27.2(@babel/core@7.27.4))(@types/node@22.15.29): dependencies: - commander-jsx: 0.6.9(@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.3))(@babel/preset-env@7.27.2(@babel/core@7.27.3))(@types/node@22.15.23) + commander-jsx: 0.6.9(@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.4))(@babel/preset-env@7.27.2(@babel/core@7.27.4))(@types/node@22.15.29) zx: 7.2.3 transitivePeerDependencies: - '@babel/plugin-transform-modules-commonjs' @@ -9139,7 +8965,7 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 - import-in-the-middle@1.13.2: + import-in-the-middle@1.14.0: dependencies: acorn: 8.14.1 acorn-import-attributes: 1.9.5(acorn@8.14.1) @@ -9251,6 +9077,8 @@ snapshots: is-module@1.0.0: {} + is-negative-zero@2.0.3: {} + is-number-object@1.1.1: dependencies: call-bound: 1.0.4 @@ -9353,13 +9181,13 @@ snapshots: jest-worker@26.6.2: dependencies: - '@types/node': 22.15.23 + '@types/node': 22.15.29 merge-stream: 2.0.0 supports-color: 7.2.0 jest-worker@27.5.1: dependencies: - '@types/node': 22.15.23 + '@types/node': 22.15.29 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -9724,7 +9552,7 @@ snapshots: mobx-i18n@0.7.1(mobx@6.13.7)(typescript@5.8.3): dependencies: '@swc/helpers': 0.5.17 - '@types/node': 22.15.23 + '@types/node': 22.15.29 mobx: 6.13.7 regenerator-runtime: 0.14.1 web-utility: 4.4.3(typescript@5.8.3) @@ -9757,7 +9585,7 @@ snapshots: optionalDependencies: react-dom: 19.1.0(react@19.1.0) - mobx-restful-table@2.4.0(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3): + mobx-restful-table@2.5.0(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3): dependencies: '@swc/helpers': 0.5.17 classnames: 2.5.1 @@ -9817,12 +9645,12 @@ snapshots: neo-async@2.6.2: {} - next-pwa@5.6.0(@babel/core@7.27.3)(next@15.3.2(@babel/core@7.27.3)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(webpack@5.99.9): + next-pwa@5.6.0(@babel/core@7.27.4)(next@15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(webpack@5.99.9): dependencies: - babel-loader: 8.4.1(@babel/core@7.27.3)(webpack@5.99.9) + babel-loader: 8.4.1(@babel/core@7.27.4)(webpack@5.99.9) clean-webpack-plugin: 4.0.0(webpack@5.99.9) globby: 11.1.0 - next: 15.3.2(@babel/core@7.27.3)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + next: 15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) terser-webpack-plugin: 5.3.14(webpack@5.99.9) workbox-webpack-plugin: 6.6.0(webpack@5.99.9) workbox-window: 6.6.0 @@ -9835,7 +9663,7 @@ snapshots: - uglify-js - webpack - next-ssr-middleware@1.0.0(next@15.3.2(@babel/core@7.27.3)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(typescript@5.8.3): + next-ssr-middleware@1.0.0(next@15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(typescript@5.8.3): dependencies: '@koa/bodyparser': 5.1.2(koa@3.0.0) '@koa/router': 13.1.0 @@ -9845,7 +9673,7 @@ snapshots: '@types/react': 19.1.6 jsonwebtoken: 9.0.2 koa: 3.0.0 - next: 15.3.2(@babel/core@7.27.3)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + next: 15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: 19.1.0 tslib: 2.8.1 web-utility: 4.4.3(typescript@5.8.3) @@ -9853,33 +9681,33 @@ snapshots: - supports-color - typescript - next-with-less@3.0.1(less-loader@12.3.0(less@4.3.0)(webpack@5.99.9))(less@4.3.0)(next@15.3.2(@babel/core@7.27.3)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)): + next-with-less@3.0.1(less-loader@12.3.0(less@4.3.0)(webpack@5.99.9))(less@4.3.0)(next@15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)): dependencies: clone-deep: 4.0.1 less: 4.3.0 less-loader: 12.3.0(less@4.3.0)(webpack@5.99.9) - next: 15.3.2(@babel/core@7.27.3)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + next: 15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - next@15.3.2(@babel/core@7.27.3)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + next@15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - '@next/env': 15.3.2 + '@next/env': 15.3.3 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 - caniuse-lite: 1.0.30001718 + caniuse-lite: 1.0.30001720 postcss: 8.4.31 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - styled-jsx: 5.1.6(@babel/core@7.27.3)(react@19.1.0) + styled-jsx: 5.1.6(@babel/core@7.27.4)(react@19.1.0) optionalDependencies: - '@next/swc-darwin-arm64': 15.3.2 - '@next/swc-darwin-x64': 15.3.2 - '@next/swc-linux-arm64-gnu': 15.3.2 - '@next/swc-linux-arm64-musl': 15.3.2 - '@next/swc-linux-x64-gnu': 15.3.2 - '@next/swc-linux-x64-musl': 15.3.2 - '@next/swc-win32-arm64-msvc': 15.3.2 - '@next/swc-win32-x64-msvc': 15.3.2 + '@next/swc-darwin-arm64': 15.3.3 + '@next/swc-darwin-x64': 15.3.3 + '@next/swc-linux-arm64-gnu': 15.3.3 + '@next/swc-linux-arm64-musl': 15.3.3 + '@next/swc-linux-x64-gnu': 15.3.3 + '@next/swc-linux-x64-musl': 15.3.3 + '@next/swc-win32-arm64-msvc': 15.3.3 + '@next/swc-win32-x64-msvc': 15.3.3 '@opentelemetry/api': 1.9.0 sharp: 0.34.2 transitivePeerDependencies: @@ -9928,14 +9756,14 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.10 + es-abstract: 1.24.0 es-object-atoms: 1.1.1 object.groupby@1.0.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.10 + es-abstract: 1.24.0 object.values@1.2.1: dependencies: @@ -10198,7 +10026,7 @@ snapshots: react-bootstrap@2.10.10(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - '@babel/runtime': 7.27.1 + '@babel/runtime': 7.27.4 '@restart/hooks': 0.4.16(react@19.1.0) '@restart/ui': 1.9.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@types/prop-types': 15.7.14 @@ -10252,7 +10080,7 @@ snapshots: react-transition-group@4.4.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - '@babel/runtime': 7.27.1 + '@babel/runtime': 7.27.4 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -10281,7 +10109,7 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.10 + es-abstract: 1.24.0 es-errors: 1.3.0 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 @@ -10375,7 +10203,7 @@ snapshots: jest-worker: 26.6.2 rollup: 2.79.2 serialize-javascript: 4.0.0 - terser: 5.39.2 + terser: 5.40.0 rollup@2.79.2: optionalDependencies: @@ -10611,6 +10439,11 @@ snapshots: statuses@2.0.1: {} + stop-iteration-iterator@1.1.0: + dependencies: + es-errors: 1.3.0 + internal-slot: 1.1.0 + stream-combiner@0.0.4: dependencies: duplexer: 0.1.2 @@ -10629,14 +10462,14 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.10 + es-abstract: 1.24.0 string.prototype.matchall@4.0.12: dependencies: call-bind: 1.0.8 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.23.10 + es-abstract: 1.24.0 es-errors: 1.3.0 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 @@ -10650,7 +10483,7 @@ snapshots: string.prototype.repeat@1.0.0: dependencies: define-properties: 1.2.1 - es-abstract: 1.23.10 + es-abstract: 1.24.0 string.prototype.trim@1.2.10: dependencies: @@ -10658,7 +10491,7 @@ snapshots: call-bound: 1.0.4 define-data-property: 1.1.4 define-properties: 1.2.1 - es-abstract: 1.23.10 + es-abstract: 1.24.0 es-object-atoms: 1.1.1 has-property-descriptors: 1.0.2 @@ -10700,12 +10533,12 @@ snapshots: '@tokenizer/token': 0.3.0 peek-readable: 4.1.0 - styled-jsx@5.1.6(@babel/core@7.27.3)(react@19.1.0): + styled-jsx@5.1.6(@babel/core@7.27.4)(react@19.1.0): dependencies: client-only: 0.0.1 react: 19.1.0 optionalDependencies: - '@babel/core': 7.27.3 + '@babel/core': 7.27.4 supports-color@7.2.0: dependencies: @@ -10717,7 +10550,7 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - synckit@0.11.6: + synckit@0.11.8: dependencies: '@pkgr/core': 0.2.4 @@ -10738,10 +10571,10 @@ snapshots: jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 - terser: 5.39.2 + terser: 5.40.0 webpack: 5.99.9 - terser@5.39.2: + terser@5.40.0: dependencies: '@jridgewell/source-map': 0.3.6 acorn: 8.14.1 @@ -10754,9 +10587,9 @@ snapshots: through@2.3.8: {} - tinyglobby@0.2.13: + tinyglobby@0.2.14: dependencies: - fdir: 6.4.4(picomatch@4.0.2) + fdir: 6.4.5(picomatch@4.0.2) picomatch: 4.0.2 to-regex-range@5.0.1: @@ -10876,7 +10709,7 @@ snapshots: uncontrollable@7.2.1(react@19.1.0): dependencies: - '@babel/runtime': 7.27.1 + '@babel/runtime': 7.27.4 '@types/react': 19.1.6 invariant: 2.2.4 react: 19.1.0 @@ -10916,33 +10749,33 @@ snapshots: webpack-sources: 3.3.0 webpack-virtual-modules: 0.5.0 - unrs-resolver@1.7.2: + unrs-resolver@1.7.8: dependencies: napi-postinstall: 0.2.4 optionalDependencies: - '@unrs/resolver-binding-darwin-arm64': 1.7.2 - '@unrs/resolver-binding-darwin-x64': 1.7.2 - '@unrs/resolver-binding-freebsd-x64': 1.7.2 - '@unrs/resolver-binding-linux-arm-gnueabihf': 1.7.2 - '@unrs/resolver-binding-linux-arm-musleabihf': 1.7.2 - '@unrs/resolver-binding-linux-arm64-gnu': 1.7.2 - '@unrs/resolver-binding-linux-arm64-musl': 1.7.2 - '@unrs/resolver-binding-linux-ppc64-gnu': 1.7.2 - '@unrs/resolver-binding-linux-riscv64-gnu': 1.7.2 - '@unrs/resolver-binding-linux-riscv64-musl': 1.7.2 - '@unrs/resolver-binding-linux-s390x-gnu': 1.7.2 - '@unrs/resolver-binding-linux-x64-gnu': 1.7.2 - '@unrs/resolver-binding-linux-x64-musl': 1.7.2 - '@unrs/resolver-binding-wasm32-wasi': 1.7.2 - '@unrs/resolver-binding-win32-arm64-msvc': 1.7.2 - '@unrs/resolver-binding-win32-ia32-msvc': 1.7.2 - '@unrs/resolver-binding-win32-x64-msvc': 1.7.2 + '@unrs/resolver-binding-darwin-arm64': 1.7.8 + '@unrs/resolver-binding-darwin-x64': 1.7.8 + '@unrs/resolver-binding-freebsd-x64': 1.7.8 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.7.8 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.7.8 + '@unrs/resolver-binding-linux-arm64-gnu': 1.7.8 + '@unrs/resolver-binding-linux-arm64-musl': 1.7.8 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.7.8 + '@unrs/resolver-binding-linux-riscv64-gnu': 1.7.8 + '@unrs/resolver-binding-linux-riscv64-musl': 1.7.8 + '@unrs/resolver-binding-linux-s390x-gnu': 1.7.8 + '@unrs/resolver-binding-linux-x64-gnu': 1.7.8 + '@unrs/resolver-binding-linux-x64-musl': 1.7.8 + '@unrs/resolver-binding-wasm32-wasi': 1.7.8 + '@unrs/resolver-binding-win32-arm64-msvc': 1.7.8 + '@unrs/resolver-binding-win32-ia32-msvc': 1.7.8 + '@unrs/resolver-binding-win32-x64-msvc': 1.7.8 upath@1.2.0: {} - update-browserslist-db@1.1.3(browserslist@4.24.5): + update-browserslist-db@1.1.3(browserslist@4.25.0): dependencies: - browserslist: 4.24.5 + browserslist: 4.25.0 escalade: 3.2.0 picocolors: 1.1.1 @@ -11008,7 +10841,7 @@ snapshots: '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.14.1 - browserslist: 4.24.5 + browserslist: 4.25.0 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.1 es-module-lexer: 1.7.0 @@ -11106,10 +10939,10 @@ snapshots: workbox-build@6.6.0: dependencies: '@apideck/better-ajv-errors': 0.3.6(ajv@8.17.1) - '@babel/core': 7.27.3 - '@babel/preset-env': 7.27.2(@babel/core@7.27.3) - '@babel/runtime': 7.27.1 - '@rollup/plugin-babel': 5.3.1(@babel/core@7.27.3)(rollup@2.79.2) + '@babel/core': 7.27.4 + '@babel/preset-env': 7.27.2(@babel/core@7.27.4) + '@babel/runtime': 7.27.4 + '@rollup/plugin-babel': 5.3.1(@babel/core@7.27.4)(rollup@2.79.2) '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.2) '@rollup/plugin-replace': 2.4.2(rollup@2.79.2) '@surma/rollup-plugin-off-main-thread': 2.2.3 @@ -11247,12 +11080,12 @@ snapshots: dependencies: '@types/fs-extra': 11.0.4 '@types/minimist': 1.2.5 - '@types/node': 18.19.103 + '@types/node': 18.19.110 '@types/ps-tree': 1.1.6 '@types/which': 3.0.4 chalk: 5.4.1 fs-extra: 11.3.0 - fx: 36.0.2 + fx: 36.0.3 globby: 13.2.2 minimist: 1.2.8 node-fetch: 3.3.1 From a3aa4d272e42dccea06ea9b0ba2e0e70e59520c3 Mon Sep 17 00:00:00 2001 From: TechQuery Date: Sat, 31 May 2025 09:23:58 +0800 Subject: [PATCH 2/4] [refactor] simplify Announcement table & form with REST Table component [refactor] simplify Admin tables & form with REST Table component Signed-off-by: TechQuery --- components/Message/MessageList.tsx | 129 ++-------------- components/Message/MessageModal.tsx | 94 ------------ .../PlatformAdmin/PlatformAdminModal.tsx | 70 --------- components/User/HackathonAdminList.tsx | 138 ++++-------------- pages/activity/[name]/index.tsx | 2 +- .../activity/[name]/manage/administrator.tsx | 138 ++++++++---------- pages/activity/[name]/manage/announcement.tsx | 74 +--------- pages/admin/platform-admin.tsx | 79 ++-------- translation/en-US.ts | 17 ++- translation/zh-CN.ts | 17 ++- translation/zh-TW.ts | 17 ++- 11 files changed, 158 insertions(+), 617 deletions(-) delete mode 100644 components/Message/MessageModal.tsx delete mode 100644 components/PlatformAdmin/PlatformAdminModal.tsx diff --git a/components/Message/MessageList.tsx b/components/Message/MessageList.tsx index 3768876d..95653497 100644 --- a/components/Message/MessageList.tsx +++ b/components/Message/MessageList.tsx @@ -1,137 +1,32 @@ -import { faEdit, faTrash } from '@fortawesome/free-solid-svg-icons'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { Announcement } from '@kaiyuanshe/openhackathon-service'; -import { observable } from 'mobx'; +import { computed } from 'mobx'; import { observer } from 'mobx-react'; import { ObservedComponent } from 'mobx-react-helper'; -import { ScrollList, ScrollListProps } from 'mobx-restful-table'; -import { FC, useContext } from 'react'; -import { Button, Form, Table } from 'react-bootstrap'; +import { Column, RestTable, RestTableProps } from 'mobx-restful-table'; -import { AnnouncementType, AnnouncementTypeName } from '../../models/Activity/Message'; import { i18n, I18nContext } from '../../models/Base/Translation'; -import styles from '../../styles/participant.module.less'; -import { XScrollListProps } from '../layout/ScrollList'; -export interface AnnouncementListLayoutProps extends XScrollListProps { - hideControls?: boolean; - onEdit?: (id: number) => any; - onDelete?: (id: number) => any; -} - -export const AnnouncementListLayout: FC = observer( - ({ defaultData = [], selectedIds = [], hideControls, onSelect, onEdit, onDelete }) => { - const i18n = useContext(I18nContext); - const { t } = i18n; - - return ( - - - - - - - - - - - - {defaultData.map(({ id, title, content }) => ( - - - - - - - - ))} - -
{t('title')}{t('content')}{t('type')}
{title}{content}{AnnouncementTypeName(i18n)[AnnouncementType.Hackathon]}
- ); - }, -); - -export type AnnouncementListProps = Pick, 'store'> & - AnnouncementListLayoutProps; +export type AnnouncementListProps = Omit, 'translator' | 'columns'>; @observer export class AnnouncementList extends ObservedComponent { static contextType = I18nContext; - @observable - accessor selectedIds: number[] = []; - - onSelect = (list: number[]) => (this.selectedIds = list) && this.props.onSelect?.(list); - - onEdit = (id: number) => { - this.props.onEdit?.(id); - this.props.store.getOne(id); - }; - - onDelete = (id: number) => { + @computed + get columns(): Column[] { const { t } = this.observedContext; - if (!confirm(t('sure_delete_this_message'))) return; - - this.props.onDelete?.(id); - this.props.store.deleteOne(id); - }; + return [ + { key: 'title', renderHead: t('title'), required: true }, + { key: 'content', renderHead: t('content'), required: true, rows: 3 }, + ]; + } render() { - const i18n = this.observedContext, - { props } = this; + const i18n = this.observedContext; return ( - ( - - )} - /> + ); } } diff --git a/components/Message/MessageModal.tsx b/components/Message/MessageModal.tsx deleted file mode 100644 index 33dbdf9d..00000000 --- a/components/Message/MessageModal.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import { Announcement } from '@kaiyuanshe/openhackathon-service'; -import { observer } from 'mobx-react'; -import { ObservedComponent } from 'mobx-react-helper'; -import { NewData } from 'mobx-restful'; -import { createRef, FormEvent } from 'react'; -import { Button, Form, Modal, ModalProps } from 'react-bootstrap'; -import { formToJSON } from 'web-utility'; - -import { AnnouncementModel, AnnouncementTypeName } from '../../models/Activity/Message'; -import { i18n, I18nContext } from '../../models/Base/Translation'; - -export interface AnnouncementModalProps extends Pick { - store: AnnouncementModel; - onSave?: () => any; -} - -@observer -export class AnnouncementModal extends ObservedComponent { - static contextType = I18nContext; - - private form = createRef(); - - handleSubmit = async (event: FormEvent) => { - event.preventDefault(); - event.stopPropagation(); - - const { store } = this.props || {}, - form = this.form.current; - - if (!store || !form) return; - - const data = formToJSON>(form); - - await store.updateOne(data, store.currentOne.id); - await store.refreshList(); - - store.clearCurrent(); - form.reset(); - }; - - handleReset = () => { - this.form.current?.reset(); - this.props.onHide?.(); - }; - - render() { - const i18n = this.observedContext, - { show, onHide, store } = this.props; - const { t } = i18n, - { content, title } = store.currentOne, - loading = store.uploading > 0; - - return ( - - - {t('publish_announcement')} - - - - {t('title')} - - - - {t('content')} - - - - {t('type')} - - {Object.entries(AnnouncementTypeName(i18n)).map(([key, value]) => ( - - ))} - - - - - - - - - ); - } -} diff --git a/components/PlatformAdmin/PlatformAdminModal.tsx b/components/PlatformAdmin/PlatformAdminModal.tsx deleted file mode 100644 index bf27d089..00000000 --- a/components/PlatformAdmin/PlatformAdminModal.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import { observable } from 'mobx'; -import { observer } from 'mobx-react'; -import { ObservedComponent } from 'mobx-react-helper'; -import { FormEvent } from 'react'; -import { Button, Form, Modal, ModalProps } from 'react-bootstrap'; - -import { i18n, I18nContext } from '../../models/Base/Translation'; -import userStore from '../../models/User'; -import { PlatformAdminModel } from '../../models/User/PlatformAdmin'; -import { UserList } from '../User/UserList'; - -export interface PlatformAdminModalProps extends Pick { - store: PlatformAdminModel; - onSave?: () => any; -} - -@observer -export class PlatformAdminModal extends ObservedComponent { - static contextType = I18nContext; - - @observable - accessor userId = 0; - - increaseId = async (event: FormEvent) => { - event.preventDefault(); - event.stopPropagation(); - - const { t } = this.observedContext, - { store, onSave } = this.props, - { userId } = this; - - if (!userId) return alert(t('search_an_user')); - - await store.addOnePlatformAdmin(userId); - onSave?.(); - this.handleReset(); - }; - - handleReset = () => { - userStore.clear(); - this.props.onHide?.(); - }; - - render() { - const { t } = this.observedContext, - { show, store } = this.props; - const loading = store.uploading > 0; - - return ( - - - {t('add_manager')} - - - (this.userId = userId)} /> -
- - - - -
-
-
- ); - } -} diff --git a/components/User/HackathonAdminList.tsx b/components/User/HackathonAdminList.tsx index facf9e1c..62cb9e7e 100644 --- a/components/User/HackathonAdminList.tsx +++ b/components/User/HackathonAdminList.tsx @@ -1,112 +1,32 @@ -import 'array-unique-proposal'; +import { PlatformAdmin } from '@kaiyuanshe/openhackathon-service'; +import { Column, RestForm, SearchableInput } from 'mobx-restful-table'; -import { PlatformAdmin, Staff } from '@kaiyuanshe/openhackathon-service'; -import { observer } from 'mobx-react'; -import { FC, useContext } from 'react'; -import { Form, Table } from 'react-bootstrap'; +import { i18n } from '../../models/Base/Translation'; +import userStore from '../../models/User'; -import { i18n, I18nContext } from '../../models/Base/Translation'; -import styles from '../../styles/Table.module.less'; -import { convertDatetime } from '../../utils/time'; -import { XScrollListProps } from '../layout/ScrollList'; - -const TableHeads = ({ t }: typeof i18n) => [ - t('all'), - t('name'), - t('mail'), - t('phone_number'), - t('role_type'), - t('status'), - // t('last_login_time'), - t('create_time'), - t('remark'), -]; - -export const HackathonAdminList: FC> = observer( - ({ defaultData = [], selectedIds = [], onSelect }) => { - const i18n = useContext(I18nContext); - const { t } = i18n; - - return ( - - - - {TableHeads(i18n).map((data, idx) => - idx ? ( - - ) : ( - - ), - )} - - - - {defaultData.map(({ createdAt, user: { id, email, mobilePhone, name }, description }) => ( - - {[ - id, - name, - email, - mobilePhone, - description ? t('referee') : t('admin'), - createdAt ? t('approve') : t('status_pending'), - // convertDatetime(lastLogin), - convertDatetime(createdAt), - description, - ].map((data, idx) => - idx ? ( - - ) : ( - - ), - )} - - ))} - -
{data} - { - if (input) - input.indeterminate = - !!selectedIds.length && selectedIds.length < defaultData.length; - }} - inline - type="checkbox" - name="selectAll" - aria-label="selectAll" - checked={selectedIds.length === defaultData.length} - onChange={() => - onSelect?.( - selectedIds.length === defaultData.length - ? [] - : defaultData.map(({ user: { id } }) => id), - ) - } - /> -
{data} - { - if (checked) return onSelect([...selectedIds, id].uniqueBy()); - - const index = selectedIds.indexOf(id); - - onSelect([ - ...selectedIds.slice(0, index), - ...selectedIds.slice(index + 1), - ]); - }) - } - /> -
- ); +export const adminColumns = (translator: typeof i18n): Column[] => [ + { + key: 'user', + renderHead: translator.t('user'), + renderBody: ({ user: { name, email, mobilePhone } }) => ( +
+ {name} + 📧 + 📱 +
+ ), + renderInput: ({ user }, { key, ...meta }) => ( + + + + ), }, -); + { key: 'description', renderHead: translator.t('description') }, +]; diff --git a/pages/activity/[name]/index.tsx b/pages/activity/[name]/index.tsx index 973de086..9732882e 100644 --- a/pages/activity/[name]/index.tsx +++ b/pages/activity/[name]/index.tsx @@ -280,7 +280,7 @@ export default class ActivityPage extends ObservedComponent - +

{t('my_team')}

diff --git a/pages/activity/[name]/manage/administrator.tsx b/pages/activity/[name]/manage/administrator.tsx index ed04fe03..c837e375 100644 --- a/pages/activity/[name]/manage/administrator.tsx +++ b/pages/activity/[name]/manage/administrator.tsx @@ -1,16 +1,15 @@ -import { faPlus, faTrash } from '@fortawesome/free-solid-svg-icons'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { observable } from 'mobx'; +import { Staff, StaffType } from '@kaiyuanshe/openhackathon-service'; +import { Loading } from 'idea-react'; +import { computed } from 'mobx'; import { observer } from 'mobx-react'; import { ObservedComponent } from 'mobx-react-helper'; -import { ScrollList } from 'mobx-restful-table'; +import { Column, RestTable } from 'mobx-restful-table'; import { compose, RouteProps, router } from 'next-ssr-middleware'; -import { FC, FormEvent, useContext } from 'react'; -import { Badge, Button, Col, Form, ListGroup, Row } from 'react-bootstrap'; +import { FC, useContext } from 'react'; +import { Badge, Col, ListGroup, Row } from 'react-bootstrap'; import { ActivityManageFrame } from '../../../../components/Activity/ActivityManageFrame'; -import { AdministratorModal } from '../../../../components/User/ActivityAdministratorModal'; -import { HackathonAdminList } from '../../../../components/User/HackathonAdminList'; +import { adminColumns } from '../../../../components/User/HackathonAdminList'; import activityStore from '../../../../models/Activity'; import { i18n, I18nContext } from '../../../../models/Base/Translation'; import { sessionGuard } from '../../../api/core'; @@ -40,26 +39,24 @@ class AdministratorEditor extends ObservedComponent) => { - event.preventDefault(); - event.stopPropagation(); - - const { t } = this.observedContext, - { selectedIds } = this; - - if (!selectedIds[0]) return alert(t('please_select_at_least_one_user')); - - if (!confirm(t('confirm_to_delete_admin_or_referee'))) return; - - for (const id of selectedIds) await this.store.deleteOne(id); - }; + @computed + get columns() { + const i18n = this.observedContext; + const { t } = i18n; + + return [ + { + key: 'type', + renderHead: t('type'), + type: 'radio', + options: [ + { value: 'admin', label: t('admin') }, + { value: 'judge', label: t('referee') }, + ], + }, + ...adminColumns(i18n), + ] as Column[]; + } renderList() { const { t } = this.observedContext, @@ -67,19 +64,31 @@ class AdministratorEditor extends ObservedComponent - + this.store.getList({}, 1)} + > {t('all_user')} {allItems.length} - + this.store.getList({ type: 'admin' as StaffType.Admin }, 1)} + > {t('admin')} {typeCount.admin} - + this.store.getList({ type: 'judge' as StaffType.Judge }, 1)} + > {t('referee')} {typeCount.judge} @@ -91,57 +100,26 @@ class AdministratorEditor extends ObservedComponent 0; + { downloading, uploading } = this.store; - return ( -
- - - {this.renderList()} + const loading = downloading > 0 || uploading > 0; - - - - - - - ( - (this.selectedIds = list)} - /> - )} - /> - - - - (this.show = false)} - onSave={() => { - this.show = false; - this.store.refreshList(); - }} - /> - + return ( + + + {this.renderList()} + + + + {loading && } + + ); } } diff --git a/pages/activity/[name]/manage/announcement.tsx b/pages/activity/[name]/manage/announcement.tsx index 85337e31..14d3dda2 100644 --- a/pages/activity/[name]/manage/announcement.tsx +++ b/pages/activity/[name]/manage/announcement.tsx @@ -1,15 +1,12 @@ -import { faPlus, faTrash } from '@fortawesome/free-solid-svg-icons'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { observable } from 'mobx'; +import { Loading } from 'idea-react'; import { observer } from 'mobx-react'; import { ObservedComponent } from 'mobx-react-helper'; import { compose, RouteProps, router } from 'next-ssr-middleware'; -import { Component, Context, createRef, FC, FormEvent, useContext } from 'react'; -import { Button, Container, Form } from 'react-bootstrap'; +import { FC, useContext } from 'react'; +import { Container } from 'react-bootstrap'; import { ActivityManageFrame } from '../../../../components/Activity/ActivityManageFrame'; import { AnnouncementList } from '../../../../components/Message/MessageList'; -import { AnnouncementModal } from '../../../../components/Message/MessageModal'; import activityStore from '../../../../models/Activity'; import { i18n, I18nContext } from '../../../../models/Base/Translation'; import { sessionGuard } from '../../../api/core'; @@ -40,72 +37,15 @@ class MessageListEditor extends ObservedComponent(); - - @observable - accessor selectedIds: number[] = []; - - @observable - accessor show = false; - - handleReset = () => this.form.current?.reset(); - - handleSubmit = async (event: FormEvent) => { - event.preventDefault(); - event.stopPropagation(); - - const { t } = this.observedContext, - { selectedIds } = this; - - if (!selectedIds[0]) return alert(t('please_select_at_least_one_announcement')); - - if (!confirm(t('confirm_to_delete_announcement'))) return; - - for (const id of selectedIds) await this.store.deleteOne(id); - }; - render() { - const { t } = this.observedContext, - { store, show } = this; - const loading = store.uploading > 0; + const { downloading, uploading } = this.store; + const loading = downloading > 0 || uploading > 0; return ( -
- - -
+ - (this.selectedIds = list)} - onEdit={() => (this.show = true)} - onDelete={this.handleReset} - /> - (this.show = false)} - onSave={() => { - this.show = false; - store.refreshList(); - }} - /> + {loading && }
); } diff --git a/pages/admin/platform-admin.tsx b/pages/admin/platform-admin.tsx index 686ef53a..4c0d1c83 100644 --- a/pages/admin/platform-admin.tsx +++ b/pages/admin/platform-admin.tsx @@ -1,15 +1,11 @@ -import { faPlus, faTrash } from '@fortawesome/free-solid-svg-icons'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { observable } from 'mobx'; +import { Loading } from 'idea-react'; import { observer } from 'mobx-react'; import { ObservedComponent } from 'mobx-react-helper'; -import { ScrollList } from 'mobx-restful-table'; -import { FC, FormEvent, useContext } from 'react'; -import { Button, Form } from 'react-bootstrap'; +import { RestTable } from 'mobx-restful-table'; +import { FC, useContext } from 'react'; import { PlatformAdminFrame } from '../../components/PlatformAdmin/PlatformAdminFrame'; -import { PlatformAdminModal } from '../../components/PlatformAdmin/PlatformAdminModal'; -import { HackathonAdminList } from '../../components/User/HackathonAdminList'; +import { adminColumns } from '../../components/User/HackathonAdminList'; import { i18n, I18nContext } from '../../models/Base/Translation'; import { PlatformAdminModel } from '../../models/User/PlatformAdmin'; import { sessionGuard } from '../api/core'; @@ -33,68 +29,23 @@ class PlatformAdminView extends ObservedComponent<{}, typeof i18n> { store = new PlatformAdminModel(); - @observable - accessor selectedIds: number[] = []; - - @observable - accessor show = false; - - handleSubmit = async (event: FormEvent) => { - event.preventDefault(); - event.stopPropagation(); - - const { t } = this.observedContext, - { selectedIds } = this; - - if (!selectedIds[0]) return alert(t('please_select_at_least_one_user')); - - if (!confirm(t('confirm_to_delete_platform_admin'))) return; - - for (const id of selectedIds) await this.store.deleteOne(id); - }; - render() { const i18n = this.observedContext, - { store, show } = this; - const { t } = i18n, - loading = store.uploading > 0; + { downloading, uploading } = this.store; + + const loading = downloading > 0 || uploading > 0; return ( -
- - - + ( - (this.selectedIds = list)} - /> - )} - /> - (this.show = false)} - onSave={() => { - this.show = false; - this.store.refreshList(); - }} + store={this.store} + columns={adminColumns(i18n)} + editable + deletable /> - + {loading && } + ); } } diff --git a/translation/en-US.ts b/translation/en-US.ts index cbf46d1b..a87072a6 100644 --- a/translation/en-US.ts +++ b/translation/en-US.ts @@ -1,10 +1,22 @@ import { textJoin } from 'mobx-i18n'; +import { IDType } from 'mobx-restful'; import { diffTime } from 'web-utility'; export default { home_page: 'Home page', load_more: 'Load more...', no_more: 'No more', + + // Pagination Table + create: 'Create', + view: 'View', + submit: 'Submit', + cancel: 'Cancel', + edit: 'Edit', + delete: 'Delete', + total_x_rows: ({ totalCount }: { totalCount: number }) => `Total ${totalCount} rows`, + sure_to_delete_x: ({ keys }: { keys: IDType[] }) => `Are you sure to delete ${keys.join(', ')}?`, + select: 'select', open_hackathon_platform: 'Open Hackathon', create_activity: 'Create Activity', @@ -67,12 +79,8 @@ export default { loading: 'Loading...', sign_in: 'Sign in', sign_out: 'Sign out', - create: 'Create', - edit: 'Edit', - submit: 'Submit', save: 'Save', success: 'Success', - cancel: 'Cancel', edit_profile: 'Edit Profile', edit_profile_tips: "After editing profile in GitHub, it'll be reloaded at next sign-in.", hackathons: 'Hackathons', @@ -84,7 +92,6 @@ export default { partners: 'Partners', top_hackathons: 'Top hackathons', manage_this_hackathon: 'Manage', - delete: 'Delete', all: 'All', organizer: 'Organizer', organizer_manage: 'Manage Organizer', diff --git a/translation/zh-CN.ts b/translation/zh-CN.ts index 7a6ab45a..a9068415 100644 --- a/translation/zh-CN.ts +++ b/translation/zh-CN.ts @@ -1,10 +1,22 @@ import { textJoin } from 'mobx-i18n'; +import { IDType } from 'mobx-restful'; import { diffTime } from 'web-utility'; export default { home_page: '主页', load_more: '加载更多……', no_more: '没有更多', + + // Pagination Table + create: '新增', + view: '查看', + submit: '提交', + cancel: '取消', + edit: '编辑', + delete: '删除', + total_x_rows: ({ totalCount }: { totalCount: number }) => `共 ${totalCount} 行`, + sure_to_delete_x: ({ keys }: { keys: IDType[] }) => `您确定删除 ${keys.join('、')} 吗?`, + select: '选择', open_hackathon_platform: '开放黑客松', create_activity: '创建活动', @@ -67,12 +79,8 @@ export default { loading: '加载中……', sign_in: '登录', sign_out: '登出', - create: '创建', - edit: '编辑', - submit: '提交', save: '保存', success: '成功', - cancel: '取消', edit_profile: '编辑用户资料', edit_profile_tips: '在 GitHub 编辑用户资料后,下次登录时会自动同步。', hackathons: '黑客松活动', @@ -84,7 +92,6 @@ export default { partners: '合作伙伴', top_hackathons: '热门活动', manage_this_hackathon: '管理', - delete: '删除', all: '全部', organizer: '主办方', organizer_manage: '主办方管理', diff --git a/translation/zh-TW.ts b/translation/zh-TW.ts index 2e6542ea..3188067b 100644 --- a/translation/zh-TW.ts +++ b/translation/zh-TW.ts @@ -1,10 +1,22 @@ import { textJoin } from 'mobx-i18n'; +import { IDType } from 'mobx-restful'; import { diffTime } from 'web-utility'; export default { home_page: '主頁', load_more: '加載更多……', no_more: '沒有更多', + + // Pagination Table + create: '新增', + view: '查看', + submit: '提交', + cancel: '取消', + edit: '編輯', + delete: '刪除', + total_x_rows: ({ totalCount }: { totalCount: number }) => `共 ${totalCount} 行`, + sure_to_delete_x: ({ keys }: { keys: IDType[] }) => `您確定刪除 ${keys.join('、')} 嗎?`, + select: '選擇', open_hackathon_platform: '開放黑客松', create_activity: '創建活動', @@ -67,12 +79,8 @@ export default { loading: '加載中……', sign_in: '登錄', sign_out: '退出', - create: '創建', - edit: '編輯', - submit: '提交', save: '保存', success: '成功', - cancel: '取消', edit_profile: '編輯用戶資料', edit_profile_tips: '在 GitHub 編輯用戶資料後,下次登錄時會自動同步。', hackathons: '黑客鬆活動', @@ -84,7 +92,6 @@ export default { partners: '合作夥伴', top_hackathons: '熱門活動', manage_this_hackathon: '管理', - delete: '刪除', all: '全部', organizer: '主辦方', organizer_manage: '主辦方管理', From 78289db8d5d0374dc938d2ff071f2b3b316e438e Mon Sep 17 00:00:00 2001 From: TechQuery Date: Sat, 31 May 2025 23:42:01 +0800 Subject: [PATCH 3/4] [refactor] simplify table & form of Organization & Award with REST Table component [remove] outdated User List & Admin Modal components Signed-off-by: TechQuery --- components/Activity/ActivityEditor.tsx | 1 - components/Activity/AwardList.tsx | 120 ++++++----------- components/Organization/OrganizationList.tsx | 96 ------------- .../User/ActivityAdministratorModal.tsx | 103 -------------- components/User/UserList.tsx | 114 ---------------- package.json | 2 +- pages/activity/[name]/index.tsx | 11 +- pages/activity/[name]/manage/award.tsx | 2 +- pages/activity/[name]/manage/organization.tsx | 126 +++++++----------- pnpm-lock.yaml | 10 +- 10 files changed, 106 insertions(+), 479 deletions(-) delete mode 100644 components/Organization/OrganizationList.tsx delete mode 100644 components/User/ActivityAdministratorModal.tsx delete mode 100644 components/User/UserList.tsx diff --git a/components/Activity/ActivityEditor.tsx b/components/Activity/ActivityEditor.tsx index 1a133058..d33045dc 100644 --- a/components/Activity/ActivityEditor.tsx +++ b/components/Activity/ActivityEditor.tsx @@ -39,7 +39,6 @@ export class ActivityEditor extends ObservedComponent { - onEdit?: (id: number) => any; - onDelete?: (id: number) => any; -} export const AwardTargetName = ({ t }: typeof i18n) => ({ individual: t('personal'), team: t('team'), }); -const AwardTableHead = ({ t }: typeof i18n) => [ - t('quantity'), - t('type'), - t('photo'), - t('name'), - t('description'), - t('operation'), -]; +@observer +export class AwardList extends ObservedComponent<{ store: AwardModel }, typeof i18n> { + static contextType = I18nContext; -export const AwardListLayout: FC = observer( - ({ defaultData = [], onEdit, onDelete }) => { - const i18n = useContext(I18nContext); + @computed + get columns(): Column[] { + const i18n = this.observedContext; const { t } = i18n; - return ( - - - - {AwardTableHead(i18n).map((data, idx) => ( - - ))} - - - - {defaultData.map(({ quantity, target, pictures, name, description, id }) => ( - - - - - - - - - ))} - -
{data}
{quantity}{AwardTargetName(i18n)[target]} - {pictures! && {pictures?.[0].description}} - - - {description} - -
- ); - }, -); - -export type AwardListProps = Pick, 'store'> & AwardListLayoutProps; - -export class AwardList extends PureComponent { - onEdit = (id: number) => { - this.props.onEdit?.(id); - this.props.store.getOne(id); - }; + return [ + { key: 'quantity', renderHead: t('quantity') }, + { + key: 'target', + renderHead: t('type'), + renderBody: ({ target }) => AwardTargetName(i18n)[target], + }, + { + key: 'pictures', + renderHead: t('photo'), + renderBody: ({ pictures }) => + pictures && {pictures?.[0].description}, + }, + { key: 'name', renderHead: t('name') }, + { key: 'description', renderHead: t('description') }, + ]; + } - onDelete = (id: number) => { - if (!confirm(i18n.t('sure_delete_this_work'))) return; + render() { + const i18n = this.observedContext, + { store } = this.props; + const { downloading, uploading } = store; - this.props.onDelete?.(id); - this.props.store.deleteOne(id); - }; + const loading = downloading > 0 || uploading > 0; - render() { return ( - ( - - )} - /> + <> + + + {loading && } + ); } } diff --git a/components/Organization/OrganizationList.tsx b/components/Organization/OrganizationList.tsx deleted file mode 100644 index 9dec6833..00000000 --- a/components/Organization/OrganizationList.tsx +++ /dev/null @@ -1,96 +0,0 @@ -import { Organizer } from '@kaiyuanshe/openhackathon-service'; -import { FC, useContext } from 'react'; -import { Form, Image, Table } from 'react-bootstrap'; - -import { OrganizerTypeName } from '../../models/Activity/Organization'; -import { I18nContext } from '../../models/Base/Translation'; -import styles from '../../styles/Table.module.less'; -import { XScrollListProps } from '../layout/ScrollList'; -import { OrganizationCard } from './OrganizationCard'; - -export const OrganizationListLayout: FC> = ({ defaultData = [] }) => ( -
    - {defaultData.map(item => ( -
  • - -
  • - ))} -
-); - -export const OrganizationTableLayout: FC> = ({ - defaultData = [], - selectedIds = [], - onSelect, -}) => { - const i18n = useContext(I18nContext); - const { t } = i18n; - - return ( - - - - - - - - - - - - {defaultData.map(({ id, name, description, type, logo }) => ( - - - - - - - - ))} - -
- { - if (input) - input.indeterminate = - !!selectedIds?.length && selectedIds.length < defaultData.length; - }} - inline - type="checkbox" - name="organizationId" - checked={selectedIds?.length > 0 && selectedIds?.length === defaultData?.length} - onChange={() => - onSelect?.( - selectedIds.length === defaultData.length ? [] : defaultData.map(({ id }) => id), - ) - } - /> - {t('name')}{t('introduction')}{t('type')}logo
- { - if (checked) return onSelect([...selectedIds, id]); - - const index = selectedIds.indexOf(id); - - onSelect([...selectedIds.slice(0, index), ...selectedIds.slice(index + 1)]); - }) - } - /> - {name}{description}{OrganizerTypeName(i18n)[type]} - {logo! && ( - {logo?.description - )} -
- ); -}; diff --git a/components/User/ActivityAdministratorModal.tsx b/components/User/ActivityAdministratorModal.tsx deleted file mode 100644 index ab44b4d6..00000000 --- a/components/User/ActivityAdministratorModal.tsx +++ /dev/null @@ -1,103 +0,0 @@ -import { Staff } from '@kaiyuanshe/openhackathon-service'; -import { observable } from 'mobx'; -import { observer } from 'mobx-react'; -import { ObservedComponent } from 'mobx-react-helper'; -import { FormEvent } from 'react'; -import { Button, Col, Form, Modal, ModalProps, Row } from 'react-bootstrap'; -import { formToJSON } from 'web-utility'; - -import { StaffModel } from '../../models/Activity/Staff'; -import { i18n, I18nContext } from '../../models/Base/Translation'; -import userStore from '../../models/User'; -import { UserList } from './UserList'; - -export interface AdministratorModalProps extends Pick { - store: StaffModel; - onSave?: () => any; -} - -@observer -export class AdministratorModal extends ObservedComponent { - static contextType = I18nContext; - - @observable - accessor userId = 0; - - increaseId = async (event: FormEvent) => { - event.preventDefault(); - event.stopPropagation(); - - const { t } = this.observedContext, - { currentTarget } = event, - { store, onSave } = this.props, - { userId } = this; - const { type, description } = formToJSON>(currentTarget); - - if (!userId) return alert(t('search_an_user')); - - await store.updateOne({ type, description }, userId); - onSave?.(); - this.handleReset(); - }; - - handleReset = () => { - userStore.clear(); - this.props.onHide?.(); - }; - - render() { - const { t } = this.observedContext, - { show, store } = this.props; - const loading = store.uploading > 0; - - return ( - - - {t('add_manager')} - - - (this.userId = userId)} /> -
- - - - - - - - - - - - - - - - - - - - -
-
-
- ); - } -} diff --git a/components/User/UserList.tsx b/components/User/UserList.tsx deleted file mode 100644 index dcabd3d3..00000000 --- a/components/User/UserList.tsx +++ /dev/null @@ -1,114 +0,0 @@ -import { User } from '@kaiyuanshe/openhackathon-service'; -import { observer } from 'mobx-react'; -import { ScrollList, ScrollListProps } from 'mobx-restful-table'; -import { FC, PureComponent, useContext } from 'react'; -import { Button, Col, Form, Row, Table } from 'react-bootstrap'; -import { formToJSON } from 'web-utility'; - -import { i18n, I18nContext } from '../../models/Base/Translation'; -import { UserFilter } from '../../models/User'; -import { XScrollListProps } from '../layout/ScrollList'; - -export interface UserListLayoutProps extends XScrollListProps { - onSearch?: (keyword: string) => any; -} - -export const UserListLayout: FC = observer( - ({ defaultData = [], selectedIds, onSelect, onSearch }) => { - const { t } = useContext(I18nContext); - - return ( - <> -
{ - event.preventDefault(); - event.stopPropagation(); - - onSearch?.(formToJSON<{ keyword: string }>(event.currentTarget).keyword); - }} - > - - - - - - - - -
- -
- - - - - - - - - - - {defaultData.map(({ name, email, mobilePhone, id }) => ( - - - - - - - ))} - -
#{t('user_name')}{t('mail')}{t('phone_number')}
- - onSelect?.([formToJSON<{ userId: number }>(form!).userId]) - } - /> - {name}{email}{mobilePhone}
-
- - ); - }, -); - -export type UserListProps = Pick, 'store'> & UserListLayoutProps; - -export class UserList extends PureComponent { - onSearch = async (keywords: string) => { - const { store, onSearch } = this.props; - - store.clear(); - - await store.getList({ keywords }); - - onSearch?.(keywords); - }; - - render() { - const { props } = this; - - return ( - ( - - )} - /> - ); - } -} diff --git a/package.json b/package.json index 0ba17db5..cee2b610 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "mobx-react": "^9.2.0", "mobx-react-helper": "^0.4.1", "mobx-restful": "^2.1.0", - "mobx-restful-table": "^2.5.0", + "mobx-restful-table": "^2.5.1", "next": "^15.3.3", "next-ssr-middleware": "^1.0.0", "open-react-map": "^0.9.0", diff --git a/pages/activity/[name]/index.tsx b/pages/activity/[name]/index.tsx index 9732882e..c6206024 100644 --- a/pages/activity/[name]/index.tsx +++ b/pages/activity/[name]/index.tsx @@ -21,7 +21,7 @@ import { getActivityStatusText } from '../../../components/Activity/ActivityEntr import { CommentBox } from '../../../components/CommentBox'; import { PageHead } from '../../../components/layout/PageHead'; import { AnnouncementList } from '../../../components/Message/MessageList'; -import { OrganizationListLayout } from '../../../components/Organization/OrganizationList'; +import { OrganizationCard } from '../../../components/Organization/OrganizationCard'; import { TeamCard } from '../../../components/Team/TeamCard'; import { TeamCreateModal } from '../../../components/Team/TeamCreateModal'; import { TeamListLayout } from '../../../components/Team/TeamList'; @@ -307,7 +307,14 @@ export default class ActivityPage extends ObservedComponent 0 && ( <>

{t('sponsor_information')}

- + +
    + {organizationList.map(item => ( +
  • + +
  • + ))} +
)} {displayName && location && ( diff --git a/pages/activity/[name]/manage/award.tsx b/pages/activity/[name]/manage/award.tsx index 4d457108..2c86069a 100644 --- a/pages/activity/[name]/manage/award.tsx +++ b/pages/activity/[name]/manage/award.tsx @@ -136,7 +136,7 @@ class AwardEditor extends ObservedComponent { {this.renderForm()} - +
); diff --git a/pages/activity/[name]/manage/organization.tsx b/pages/activity/[name]/manage/organization.tsx index 9388052b..f819220c 100644 --- a/pages/activity/[name]/manage/organization.tsx +++ b/pages/activity/[name]/manage/organization.tsx @@ -1,17 +1,16 @@ -import { faPlus, faTrash } from '@fortawesome/free-solid-svg-icons'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { observable } from 'mobx'; +import { Organizer } from '@kaiyuanshe/openhackathon-service'; +import { Loading } from 'idea-react'; +import { computed } from 'mobx'; import { observer } from 'mobx-react'; import { ObservedComponent } from 'mobx-react-helper'; -import { ScrollList } from 'mobx-restful-table'; +import { Column, RestTable } from 'mobx-restful-table'; import { compose, RouteProps, router } from 'next-ssr-middleware'; -import { Component, Context, FC, FormEvent, useContext } from 'react'; -import { Badge, Button, Col, Form, ListGroup, Row } from 'react-bootstrap'; +import { FC, useContext } from 'react'; +import { Badge, Col, Image, ListGroup, Row } from 'react-bootstrap'; import { ActivityManageFrame } from '../../../../components/Activity/ActivityManageFrame'; -import { OrganizationModal } from '../../../../components/Organization/ActivityOrganizationModal'; -import { OrganizationTableLayout } from '../../../../components/Organization/OrganizationList'; import activityStore from '../../../../models/Activity'; +import { OrganizerTypeName } from '../../../../models/Activity/Organization'; import { i18n, I18nContext } from '../../../../models/Base/Translation'; import { sessionGuard } from '../../../api/core'; @@ -41,25 +40,33 @@ class OrganizationEditor extends ObservedComponent) => { - event.preventDefault(); - event.stopPropagation(); - - const { t } = this.observedContext, - { selectedIds } = this; - - if (!selectedIds[0]) return alert(t('please_select_at_least_one_partner')); - - if (!confirm(t('confirm_to_delete_partner'))) return; - - for (const id of selectedIds) await this.store.deleteOne(id); - }; + @computed + get columns(): Column[] { + const i18n = this.observedContext; + const { t } = i18n; + + return [ + { key: 'name', renderHead: t('name') }, + { key: 'description', renderHead: t('introduction') }, + { + key: 'type', + renderHead: t('type'), + renderBody: ({ type }) => OrganizerTypeName(i18n)[type], + }, + { + key: 'logo', + renderBody: ({ logo, name, description }) => + logo && ( + {logo?.description + ), + }, + ]; + } renderList() { const { t } = this.observedContext, @@ -91,57 +98,26 @@ class OrganizationEditor extends ObservedComponent 0; + loading = downloading > 0 || uploading > 0; return ( -
- - - {this.renderList()} - - - - - - - - ( - (this.selectedIds = list)} - /> - )} - /> - - - - (this.show = false)} - onSave={() => { - this.show = false; - store.refreshList(); - }} - /> - + + + {this.renderList()} + + + + {loading && } + + ); } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6c8d64ec..db4ea702 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -82,8 +82,8 @@ importers: specifier: ^2.1.0 version: 2.1.0(mobx@6.13.7)(typescript@5.8.3) mobx-restful-table: - specifier: ^2.5.0 - version: 2.5.0(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + specifier: ^2.5.1 + version: 2.5.1(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) next: specifier: ^15.3.3 version: 15.3.3(@babel/core@7.27.4)(@opentelemetry/api@1.9.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -3993,8 +3993,8 @@ packages: react-native: optional: true - mobx-restful-table@2.5.0: - resolution: {integrity: sha512-ma2Dons0AHeSR4HJ+d8Fb20EAltrPca8BeZ3O2aZNco4dn9Z1JnF1RPTET2qzjKNdai34wosHWJSSRJsY2YK2A==} + mobx-restful-table@2.5.1: + resolution: {integrity: sha512-Xh5MjJ8itANcfLEoWnWYPvEEqrKwnUKz11NiqES5jW55YCjA+T3/nq7HrEFPx9gF3BIheNlEAERfczAU+bHoFQ==} peerDependencies: react: '>=16.8' @@ -9585,7 +9585,7 @@ snapshots: optionalDependencies: react-dom: 19.1.0(react@19.1.0) - mobx-restful-table@2.5.0(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3): + mobx-restful-table@2.5.1(@types/react@19.1.6)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3): dependencies: '@swc/helpers': 0.5.17 classnames: 2.5.1 From 1b3949859afdaa80808a03c8033ba5eda45723cb Mon Sep 17 00:00:00 2001 From: TechQuery Date: Sun, 1 Jun 2025 03:29:21 +0800 Subject: [PATCH 4/4] [refactor] simplify Team Participant & Role table with REST Table component Signed-off-by: TechQuery --- components/Team/TeamAdministratorTable.tsx | 86 ----------------- components/Team/TeamParticipantTable.tsx | 94 ------------------- components/User/HackathonAdminList.tsx | 19 ++-- .../[name]/team/[tid]/manage/participant.tsx | 69 +++++++++++--- .../[name]/team/[tid]/manage/role.tsx | 65 +++++++++---- 5 files changed, 112 insertions(+), 221 deletions(-) delete mode 100644 components/Team/TeamAdministratorTable.tsx delete mode 100644 components/Team/TeamParticipantTable.tsx diff --git a/components/Team/TeamAdministratorTable.tsx b/components/Team/TeamAdministratorTable.tsx deleted file mode 100644 index 98ccc9ae..00000000 --- a/components/Team/TeamAdministratorTable.tsx +++ /dev/null @@ -1,86 +0,0 @@ -import { TeamMember, TeamMemberRole } from '@kaiyuanshe/openhackathon-service'; -import { observer } from 'mobx-react'; -import { FC, useContext } from 'react'; -import { Form, Table } from 'react-bootstrap'; - -import { i18n, I18nContext } from '../../models/Base/Translation'; -import sessionStore from '../../models/User/Session'; -import styles from '../../styles/Table.module.less'; -import { XScrollListProps } from '../layout/ScrollList'; - -export interface TeamAdministratorTableLayoutProps extends XScrollListProps { - onUpdateRole?: (userId: number, role: TeamMemberRole) => any; - onPopUpUpdateRoleModal?: (userId: number) => any; -} - -const TableHeads = ({ t }: typeof i18n) => [ - '#', - t('mail'), - t('phone_number'), - // t('contact_address'), - // t('last_login_time'), - t('remark'), - t('role_type'), -]; -const RoleName = ({ t }: typeof i18n) => ({ member: t('member'), admin: t('admin') }); - -export const TeamAdministratorTableLayout: FC = observer( - ({ defaultData = [], onUpdateRole }) => { - const i18n = useContext(I18nContext), - { id: currentUserId } = sessionStore?.user || {}; - - return ( - - - - {TableHeads(i18n).map((data, idx) => ( - - ))} - - - - {defaultData.map( - ({ user: { id, email, mobilePhone, name }, role, description }, index) => ( - - {[ - index + 1, - name || email || mobilePhone || '--', - email || '--', - mobilePhone || '--', - // address || '--', - // convertDatetime(lastLogin), - description, - id, - ].map((data, idx, { length }) => - idx + 1 === length ? ( - - ) : ( - - ), - )} - - ), - )} - -
{data}
- - onUpdateRole?.(id, value as TeamMemberRole) - } - > - {Object.entries(RoleName(i18n)).map(([key, value]) => ( - - ))} - - - {data} -
- ); - }, -); diff --git a/components/Team/TeamParticipantTable.tsx b/components/Team/TeamParticipantTable.tsx deleted file mode 100644 index 1ab030e2..00000000 --- a/components/Team/TeamParticipantTable.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import { TeamMember, TeamMemberStatus } from '@kaiyuanshe/openhackathon-service'; -import { observer } from 'mobx-react'; -import { FC, useContext } from 'react'; -import { Form, Table } from 'react-bootstrap'; - -import { i18n, I18nContext } from '../../models/Base/Translation'; -import styles from '../../styles/Table.module.less'; -import { convertDatetime } from '../../utils/time'; -import { XScrollListProps } from '../layout/ScrollList'; - -export interface TeamParticipantTableLayoutProps extends XScrollListProps { - onApprove?: (userId: number, status: TeamMemberStatus) => any; -} - -const StatusName = ({ t }: typeof i18n): Record => ({ - approved: t('status_approved'), - pendingApproval: t('status_pending'), -}); - -const TableHeads = ({ t }: typeof i18n) => [ - '#', - t('mail'), - t('phone_number'), - // t('contact_address'), - t('apply_time'), - t('apply_role'), - t('remark'), - t('status'), -]; - -export const TeamParticipantTableLayout: FC = observer( - ({ defaultData = [], onApprove }) => { - const i18n = useContext(I18nContext); - const { t } = i18n; - - return ( - - - - {TableHeads(i18n).map((data, idx) => ( - - ))} - - - - {defaultData.map( - ( - { createdAt, description, role, status, user: { id, email, mobilePhone, name } }, - index, - ) => ( - - {[ - index + 1, - name || email || mobilePhone || '--', - email || '--', - mobilePhone || '--', - // address || '--', - convertDatetime(createdAt), - role === 'admin' ? t('admin') : t('member'), - description, - status, - ].map((data, idx, { length }) => - idx + 1 === length ? ( - - ) : ( - - ), - )} - - ), - )} - -
{data}
- - onApprove?.(id, value as TeamMemberStatus) - } - > - {Object.entries(StatusName(i18n)).map(([key, value]) => ( - - ))} - - - {data} -
- ); - }, -); diff --git a/components/User/HackathonAdminList.tsx b/components/User/HackathonAdminList.tsx index 62cb9e7e..b03bcdc3 100644 --- a/components/User/HackathonAdminList.tsx +++ b/components/User/HackathonAdminList.tsx @@ -1,20 +1,23 @@ -import { PlatformAdmin } from '@kaiyuanshe/openhackathon-service'; +import { PlatformAdmin, User } from '@kaiyuanshe/openhackathon-service'; import { Column, RestForm, SearchableInput } from 'mobx-restful-table'; +import { FC } from 'react'; import { i18n } from '../../models/Base/Translation'; import userStore from '../../models/User'; +export const UserBadge: FC = ({ name, email, mobilePhone }) => ( +
+ {name} + 📧 + 📱 +
+); + export const adminColumns = (translator: typeof i18n): Column[] => [ { key: 'user', renderHead: translator.t('user'), - renderBody: ({ user: { name, email, mobilePhone } }) => ( -
- {name} - 📧 - 📱 -
- ), + renderBody: ({ user }) => , renderInput: ({ user }, { key, ...meta }) => ( => ({ + approved: t('status_approved'), + pendingApproval: t('status_pending'), +}); + export const getServerSideProps = compose(router, sessionGuard); @observer @@ -26,11 +35,48 @@ export default class TeamParticipantPage extends ObservedComponent< .teamOf(this.props.route.params!.name) .memberOf(+this.props.route.params!.tid); + @computed + get columns(): Column[] { + const i18n = this.observedContext; + const { t } = i18n; + + return [ + { key: 'user', renderHead: t('user'), renderBody: ({ user }) => }, + { + key: 'createdAt', + renderHead: t('apply_time'), + renderBody: ({ createdAt }) => convertDatetime(createdAt), + }, + { + key: 'role', + renderHead: t('apply_role'), + renderBody: ({ role }) => (role === 'admin' ? t('admin') : t('member')), + }, + { key: 'description', renderHead: t('remark') }, + { + key: 'status', + renderHead: t('status'), + renderBody: ({ status, user: { id } }) => ( + ({ value, label }))} + defaultValue={status} + onChange={({ currentTarget: { value } }) => + this.store.updateOne({ status: value as TeamMemberStatus }, id) + } + /> + ), + }, + ]; + } + render() { - const { store } = this, + const { props, store, columns } = this, { t } = this.observedContext; - const { resolvedUrl, params } = this.props.route; - const { name, tid } = params!; + const { resolvedUrl, params } = props.route, + { downloading, uploading } = store; + const { name, tid } = params!, + loading = downloading > 0 || uploading > 0; return ( - ( - store.updateOne({ status }, userId)} - /> - )} - /> + + + {loading && } ); } diff --git a/pages/activity/[name]/team/[tid]/manage/role.tsx b/pages/activity/[name]/team/[tid]/manage/role.tsx index 91cca0e7..147008a5 100644 --- a/pages/activity/[name]/team/[tid]/manage/role.tsx +++ b/pages/activity/[name]/team/[tid]/manage/role.tsx @@ -1,19 +1,24 @@ -import { TeamMemberStatus } from '@kaiyuanshe/openhackathon-service'; +import { TeamMember, TeamMemberRole } from '@kaiyuanshe/openhackathon-service'; +import { Loading } from 'idea-react'; +import { computed } from 'mobx'; import { observer } from 'mobx-react'; import { ObservedComponent } from 'mobx-react-helper'; -import { ScrollList } from 'mobx-restful-table'; +import { Column, FormField, RestTable } from 'mobx-restful-table'; import { compose, router } from 'next-ssr-middleware'; -import { TeamAdministratorTableLayout } from '../../../../../../components/Team/TeamAdministratorTable'; import { TeamManageBaseParams, TeamManageBaseProps, TeamManageFrame, } from '../../../../../../components/Team/TeamManageFrame'; +import { UserBadge } from '../../../../../../components/User/HackathonAdminList'; import activityStore from '../../../../../../models/Activity'; import { i18n, I18nContext } from '../../../../../../models/Base/Translation'; +import sessionStore from '../../../../../../models/User/Session'; import { sessionGuard } from '../../../../../api/core'; +const RoleName = ({ t }: typeof i18n) => ({ member: t('member'), admin: t('admin') }); + export const getServerSideProps = compose(router, sessionGuard); @observer @@ -27,11 +32,44 @@ export default class TeamAdministratorPage extends ObservedComponent< .teamOf(this.props.route.params!.name) .memberOf(+this.props.route.params!.tid); + @computed + get columns(): Column[] { + const i18n = this.observedContext; + const { t } = i18n, + currentUserId = sessionStore?.user?.id; + + return [ + { + key: 'user', + renderHead: t('user'), + renderBody: ({ user }) => , + }, + { key: 'description', renderHead: t('remark') }, + { + key: 'role', + renderHead: t('role_type'), + renderBody: ({ role, user: { id } }) => ( + ({ value, label }))} + defaultValue={role} + disabled={currentUserId === id} + onChange={({ currentTarget: { value } }) => + this.store.updateOne({ role: value as TeamMemberRole }, id) + } + /> + ), + }, + ]; + } + render() { - const { props, store } = this, + const { props, store, columns } = this, { t } = this.observedContext; - const { resolvedUrl, params } = this.props.route; - const { name, tid } = params!; + const { resolvedUrl, params } = props.route, + { downloading, uploading } = store; + const { name, tid } = params!, + loading = downloading > 0 || uploading > 0; return ( - ( - store.updateOne({ role }, userId)} - /> - )} - /> + + + {loading && } ); }