From 1f286071dec9a77e1c271abdaf73547028db91d1 Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Tue, 16 Jul 2024 12:20:45 +0300 Subject: [PATCH 01/79] initial commit --- cvat-core/src/session-implementation.ts | 5 +- cvat-core/src/session.ts | 2 +- cvat-ui/src/actions/tasks-actions.ts | 2 +- .../create-task-page/create-task-content.tsx | 35 ++++++ .../quality-configuration-form.tsx | 118 ++++++++++++++++++ cvat-ui/src/reducers/index.ts | 8 ++ cvat-ui/src/reducers/plugins-reducer.ts | 8 ++ 7 files changed, 175 insertions(+), 3 deletions(-) create mode 100644 cvat-ui/src/components/create-task-page/quality-configuration-form.tsx diff --git a/cvat-core/src/session-implementation.ts b/cvat-core/src/session-implementation.ts index 4483c111393..944e2a7ad7d 100644 --- a/cvat-core/src/session-implementation.ts +++ b/cvat-core/src/session-implementation.ts @@ -666,7 +666,7 @@ export function implementTask(Task: typeof TaskClass): typeof TaskClass { }); } - const taskSpec: any = { + let taskSpec: any = { name: this.name, labels: this.labels.map((el) => el.toJSON()), }; @@ -695,6 +695,9 @@ export function implementTask(Task: typeof TaskClass): typeof TaskClass { taskSpec.source_storage = this.sourceStorage.toJSON(); } + const { fields } = options; + taskSpec = { ...taskSpec, ...fields }; + const taskDataSpec = { client_files: this.clientFiles, server_files: this.serverFiles, diff --git a/cvat-core/src/session.ts b/cvat-core/src/session.ts index 6209c361912..6066783c06c 100644 --- a/cvat-core/src/session.ts +++ b/cvat-core/src/session.ts @@ -1118,7 +1118,7 @@ export class Task extends Session { return result; } - async save(options?: { requestStatusCallback?: (request: Request) => void }): Promise { + async save(options?: { requestStatusCallback?: (request: Request) => void, fields: any }): Promise { const result = await PluginRegistry.apiWrapper.call(this, Task.prototype.save, options); return result; } diff --git a/cvat-ui/src/actions/tasks-actions.ts b/cvat-ui/src/actions/tasks-actions.ts index 78a9f55b392..83b6f363ae0 100644 --- a/cvat-ui/src/actions/tasks-actions.ts +++ b/cvat-ui/src/actions/tasks-actions.ts @@ -258,7 +258,6 @@ ThunkAction { taskInstance.clientFiles = data.files.local; taskInstance.serverFiles = data.files.share.concat(data.files.cloudStorage); taskInstance.remoteFiles = data.files.remote; - try { const savedTask = await taskInstance.save({ requestStatusCallback(request) { @@ -280,6 +279,7 @@ ThunkAction { onProgress?.(`${message} ${progress ? `${Math.floor(progress * 100)}%` : ''}. ${helperMessage}`); if (request.id) updateRequestProgress(request, dispatch); }, + fields: { ...data.quality }, }); dispatch(updateTaskInState(savedTask)); diff --git a/cvat-ui/src/components/create-task-page/create-task-content.tsx b/cvat-ui/src/components/create-task-page/create-task-content.tsx index e39716809d7..41e5fb812cb 100644 --- a/cvat-ui/src/components/create-task-page/create-task-content.tsx +++ b/cvat-ui/src/components/create-task-page/create-task-content.tsx @@ -26,6 +26,7 @@ import ProjectSearchField from './project-search-field'; import ProjectSubsetField from './project-subset-field'; import MultiTasksProgress from './multi-task-progress'; import AdvancedConfigurationForm, { AdvancedConfiguration, SortingMethod } from './advanced-configuration-form'; +import QualityConfigurationForm, { QualityConfiguration } from './quality-configuration-form'; type TabName = 'local' | 'share' | 'remote' | 'cloudStorage'; const core = getCore(); @@ -35,6 +36,7 @@ export interface CreateTaskData { basic: BaseConfiguration; subset: string; advanced: AdvancedConfiguration; + quality: QualityConfiguration; labels: any[]; files: Files; activeFileManagerTab: TabName; @@ -83,6 +85,8 @@ const defaultState: State = { useProjectSourceStorage: true, useProjectTargetStorage: true, }, + quality: { + }, labels: [], files: { local: [], @@ -152,6 +156,7 @@ function filterFiles(remoteFiles: RemoteFile[], many: boolean): RemoteFile[] { class CreateTaskContent extends React.PureComponent { private basicConfigurationComponent: RefObject; private advancedConfigurationComponent: RefObject; + private qualityConfigurationComponent: RefObject; private fileManagerComponent: any; public constructor(props: Props & RouteComponentProps) { @@ -159,6 +164,7 @@ class CreateTaskContent extends React.PureComponent(); this.advancedConfigurationComponent = React.createRef(); + this.qualityConfigurationComponent = React.createRef(); } public componentDidMount(): void { @@ -246,6 +252,14 @@ class CreateTaskContent extends React.PureComponent { + console.log(values); + const { quality } = this.state; + this.setState({ + quality: { ...quality, ...values }, + }); + }; + private handleSubmitAdvancedConfiguration = (values: AdvancedConfiguration): Promise => ( new Promise((resolve) => { this.setState({ @@ -877,6 +891,26 @@ class CreateTaskContent extends React.PureComponent + Quality, + children: ( + + ), + }]} + /> + + ); + } + private renderFooterSingleTask(): JSX.Element { const { uploadFileErrorMessage, loading, statusInProgressTask: status } = this.state; @@ -967,6 +1001,7 @@ class CreateTaskContent extends React.PureComponent {many ? this.renderFooterMultiTasks() : this.renderFooterSingleTask() } diff --git a/cvat-ui/src/components/create-task-page/quality-configuration-form.tsx b/cvat-ui/src/components/create-task-page/quality-configuration-form.tsx new file mode 100644 index 00000000000..39d23a4ce4c --- /dev/null +++ b/cvat-ui/src/components/create-task-page/quality-configuration-form.tsx @@ -0,0 +1,118 @@ +// Copyright (C) 2024 CVAT.ai Corporation +// +// SPDX-License-Identifier: MIT + +import React, { useState } from 'react'; +import Input from 'antd/lib/input'; +import Form from 'antd/lib/form'; +import { usePlugins } from 'utils/hooks'; +import { CombinedState } from 'reducers'; +import { PercentageOutlined } from '@ant-design/icons'; +import Radio from 'antd/lib/radio'; + +export interface QualityConfiguration { +} + +interface Props { + onChange(values: QualityConfiguration): void; +} + +enum ValidationMethod { + NONE = 'none', + GT = 'gt_job', +} + +export default function QualityConfigurationForm(props: Props): React.JSX.Element { + const { onChange } = props; + const [currentValidationMethod, setCurrentValidationMethod] = useState(ValidationMethod.NONE); + + let paramsBlock: JSX.Element | null = null; + if (currentValidationMethod === ValidationMethod.GT) { + paramsBlock = ( + + } /> + + ); + } + + const validationMethodPlugins = usePlugins( + (state: CombinedState) => state.plugins.components.createTaskPage.qualityForm.validationMethods.items, + props, + { currentValidationMethod }, + ); + const validationMethodParamsPlugins = usePlugins( + (state: CombinedState) => state.plugins.components.createTaskPage.qualityForm.validationMethods.params, + props, + { currentValidationMethod }, + ); + + const validationFormItems: [JSX.Element, number][] = []; + validationFormItems.push([ + ( + + None + + ), 10, + ]); + validationFormItems.push([ + ( + + Ground truth + + ), 20, + ]); + validationFormItems.push(...validationMethodPlugins.map(({ component: Component, weight }, index: number) => ( + [, weight] as [JSX.Element, number] + ))); + + const validationParamsItems: [JSX.Element, number][] = []; + validationParamsItems.push([ + paramsBlock, 20, + ]); + validationParamsItems + .push(...validationMethodParamsPlugins.map(({ component: Component, weight }, index: number) => ( + [, weight] as [JSX.Element, number] + ))); + + return ( +
{ + const { value } = e.target; + const key = e.target.name; + onChange({ [key]: value }); + }} + > + + { + setCurrentValidationMethod(e.target.value); + }} + > + + { validationFormItems.sort((item1, item2) => item1[1] - item2[1]) + .map((item) => item[0]) } + + + { validationParamsItems.sort((item1, item2) => item1[1] - item2[1]) + .map((item) => item[0]) } +
+ ); +} diff --git a/cvat-ui/src/reducers/index.ts b/cvat-ui/src/reducers/index.ts index 6ed20a30c19..fe6744beb8c 100644 --- a/cvat-ui/src/reducers/index.ts +++ b/cvat-ui/src/reducers/index.ts @@ -284,6 +284,14 @@ export interface PluginsState { }; }; }; + createTaskPage: { + qualityForm: { + validationMethods: { + items: PluginComponent[]; + params: PluginComponent[]; + } + }, + } projectActions: { items: PluginComponent[]; }; diff --git a/cvat-ui/src/reducers/plugins-reducer.ts b/cvat-ui/src/reducers/plugins-reducer.ts index 1ad69517ef9..bcca4251151 100644 --- a/cvat-ui/src/reducers/plugins-reducer.ts +++ b/cvat-ui/src/reducers/plugins-reducer.ts @@ -47,6 +47,14 @@ const defaultState: PluginsState = { }, }, }, + createTaskPage: { + qualityForm: { + validationMethods: { + items: [], + params: [], + }, + }, + }, projectActions: { items: [], }, From 0350e61dce0493e1acddab989db07a6690f7352c Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Tue, 16 Jul 2024 13:30:56 +0300 Subject: [PATCH 02/79] update quality form view --- .../components/create-job-page/job-form.tsx | 38 ++++++++++++------- .../quality-configuration-form.tsx | 26 ++++++++++--- 2 files changed, 44 insertions(+), 20 deletions(-) diff --git a/cvat-ui/src/components/create-job-page/job-form.tsx b/cvat-ui/src/components/create-job-page/job-form.tsx index 60445c6a0ef..dc07af1127f 100644 --- a/cvat-ui/src/components/create-job-page/job-form.tsx +++ b/cvat-ui/src/components/create-job-page/job-form.tsx @@ -22,6 +22,7 @@ import { createJobAsync } from 'actions/jobs-actions'; export enum FrameSelectionMethod { RANDOM = 'random_uniform', + RANDOM_PER_JOB = 'random_per_job', } interface JobDataMutual { @@ -46,6 +47,28 @@ interface Props { const defaultQuantity = 5; +export function groundTruthFrameSelect(): JSX.Element { + return ( + + + + ); +} + function JobForm(props: Props): JSX.Element { const { task } = props; const { size: taskSize } = task; @@ -132,20 +155,7 @@ function JobForm(props: Props): JSX.Element { - - - + {groundTruthFrameSelect()} diff --git a/cvat-ui/src/components/create-task-page/quality-configuration-form.tsx b/cvat-ui/src/components/create-task-page/quality-configuration-form.tsx index 39d23a4ce4c..0c057dce3f7 100644 --- a/cvat-ui/src/components/create-task-page/quality-configuration-form.tsx +++ b/cvat-ui/src/components/create-task-page/quality-configuration-form.tsx @@ -9,6 +9,8 @@ import { usePlugins } from 'utils/hooks'; import { CombinedState } from 'reducers'; import { PercentageOutlined } from '@ant-design/icons'; import Radio from 'antd/lib/radio'; +import { groundTruthFrameSelect } from 'components/create-job-page/job-form'; +import { Col } from 'antd/lib/grid'; export interface QualityConfiguration { } @@ -29,12 +31,24 @@ export default function QualityConfigurationForm(props: Props): React.JSX.Elemen let paramsBlock: JSX.Element | null = null; if (currentValidationMethod === ValidationMethod.GT) { paramsBlock = ( - - } /> - + <> + {groundTruthFrameSelect()} + + + } /> + + + + ); } From 7e399166acf54121989d0e3e4573b8b6cc80191b Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Wed, 17 Jul 2024 12:50:53 +0300 Subject: [PATCH 03/79] moved quality tab to quality control page --- .../components/actions-menu/actions-menu.tsx | 11 +- .../analytics-page/analytics-page.tsx | 23 +-- .../src/components/analytics-page/styles.scss | 65 +----- cvat-ui/src/components/cvat-app.tsx | 2 + .../quality-control/quality-control-page.tsx | 189 ++++++++++++++++++ .../shared/quality-settings-modal.tsx | 0 .../components/quality-control/styles.scss | 93 +++++++++ .../task-quality/empty-job.tsx | 0 .../task-quality/gt-conflicts.tsx | 2 +- .../task-quality/issues.tsx | 2 +- .../task-quality/job-list.tsx | 0 .../task-quality/mean-quality.tsx | 2 +- .../task-quality/quality-settings-form.tsx | 0 .../task-quality/task-quality-component.tsx | 0 .../utils/text-formatting.ts | 0 .../src/components/tasks-page/task-item.tsx | 4 + .../containers/actions-menu/actions-menu.tsx | 4 + 17 files changed, 308 insertions(+), 89 deletions(-) create mode 100644 cvat-ui/src/components/quality-control/quality-control-page.tsx rename cvat-ui/src/components/{analytics-page => quality-control}/shared/quality-settings-modal.tsx (100%) create mode 100644 cvat-ui/src/components/quality-control/styles.scss rename cvat-ui/src/components/{analytics-page => quality-control}/task-quality/empty-job.tsx (100%) rename cvat-ui/src/components/{analytics-page => quality-control}/task-quality/gt-conflicts.tsx (98%) rename cvat-ui/src/components/{analytics-page => quality-control}/task-quality/issues.tsx (96%) rename cvat-ui/src/components/{analytics-page => quality-control}/task-quality/job-list.tsx (100%) rename cvat-ui/src/components/{analytics-page => quality-control}/task-quality/mean-quality.tsx (97%) rename cvat-ui/src/components/{analytics-page => quality-control}/task-quality/quality-settings-form.tsx (100%) rename cvat-ui/src/components/{analytics-page => quality-control}/task-quality/task-quality-component.tsx (100%) rename cvat-ui/src/components/{analytics-page => quality-control}/utils/text-formatting.ts (100%) diff --git a/cvat-ui/src/components/actions-menu/actions-menu.tsx b/cvat-ui/src/components/actions-menu/actions-menu.tsx index 8a6997dfe2f..a20502931f2 100644 --- a/cvat-ui/src/components/actions-menu/actions-menu.tsx +++ b/cvat-ui/src/components/actions-menu/actions-menu.tsx @@ -34,6 +34,7 @@ export enum Actions { OPEN_BUG_TRACKER = 'open_bug_tracker', BACKUP_TASK = 'backup_task', VIEW_ANALYTICS = 'view_analytics', + QUALITY_CONTROL = 'quality_control', } function ActionsMenuComponent(props: Props): JSX.Element { @@ -111,10 +112,18 @@ function ActionsMenuComponent(props: Props): JSX.Element { ), 50]); + menuItems.push([( + + Quality control + + ), 60]); + if (projectID === null) { menuItems.push([( Move to project - ), 60]); + ), 70]); } menuItems.push([( diff --git a/cvat-ui/src/components/analytics-page/analytics-page.tsx b/cvat-ui/src/components/analytics-page/analytics-page.tsx index dfac6803add..5484e779adf 100644 --- a/cvat-ui/src/components/analytics-page/analytics-page.tsx +++ b/cvat-ui/src/components/analytics-page/analytics-page.tsx @@ -5,7 +5,6 @@ import './styles.scss'; import React, { useCallback, useEffect, useState } from 'react'; -import { useDispatch } from 'react-redux'; import { useLocation, useParams } from 'react-router'; import { Link } from 'react-router-dom'; import { Row, Col } from 'antd/lib/grid'; @@ -14,15 +13,12 @@ import Title from 'antd/lib/typography/Title'; import notification from 'antd/lib/notification'; import moment from 'moment'; import { useIsMounted } from 'utils/hooks'; -import { Project, Task } from 'reducers'; import { - AnalyticsReport, Job, RQStatus, getCore, + AnalyticsReport, Job, RQStatus, getCore, Project, Task, } from 'cvat-core-wrapper'; -import { updateJobAsync } from 'actions/jobs-actions'; import CVATLoadingSpinner from 'components/common/loading-spinner'; import GoBackButton from 'components/common/go-back-button'; import AnalyticsOverview, { DateIntervals } from './analytics-performance'; -import TaskQualityComponent from './task-quality/task-quality-component'; const core = getCore(); @@ -80,7 +76,6 @@ function readInstanceId(type: InstanceType): number { type InstanceType = 'project' | 'task' | 'job'; function AnalyticsPage(): JSX.Element { - const dispatch = useDispatch(); const location = useLocation(); const requestedInstanceType: InstanceType = readInstanceType(location); @@ -224,15 +219,6 @@ function AnalyticsPage(): JSX.Element { }); }, [requestedInstanceType, requestedInstanceID, timePeriod]); - const onJobUpdate = useCallback((job: Job, data: Parameters[0]): void => { - setFetching(true); - dispatch(updateJobAsync(job, data)).finally(() => { - if (isMounted()) { - setFetching(false); - } - }); - }, []); - const onTabKeyChange = useCallback((key: string): void => { setTab(key as AnalyticsTabs); }, []); @@ -282,12 +268,7 @@ function AnalyticsPage(): JSX.Element { onCreateReport={onCreateReport} /> ), - }, - ...(instanceType === 'task' ? [{ - key: AnalyticsTabs.QUALITY, - label: 'Quality', - children: , - }] : [])]} + }]} /> ); } diff --git a/cvat-ui/src/components/analytics-page/styles.scss b/cvat-ui/src/components/analytics-page/styles.scss index 23e7886ce07..a62336515cc 100644 --- a/cvat-ui/src/components/analytics-page/styles.scss +++ b/cvat-ui/src/components/analytics-page/styles.scss @@ -17,8 +17,7 @@ } .cvat-task-quality-page, -.cvat-analytics-overview, -.cvat-project-quality-page { +.cvat-analytics-overview { >.ant-row { margin-top: $grid-unit-size; } @@ -30,19 +29,6 @@ justify-content: space-between; } -.cvat-task-mean-annotation-quality { - .ant-statistic { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - } - - .ant-card-body { - padding: $grid-unit-size * 2 $grid-unit-size * 3; - } -} - .cvat-analytics-refresh-button { margin-right: $grid-unit-size; } @@ -93,10 +79,6 @@ } } -.cvat-analytics-time-hint { - font-size: 10px; -} - .cvat-analytics-page { height: 100%; } @@ -107,48 +89,3 @@ height: 100%; padding-bottom: $grid-unit-size * 2; } - -.cvat-task-quality-reports-hint { - margin-bottom: $grid-unit-size * 3; -} - -.cvat-job-empty-ground-truth-item { - .ant-card-body { - padding: $grid-unit-size * 3; - } - - .ant-btn { - padding-left: $grid-unit-size * 3; - padding-right: $grid-unit-size * 3; - } -} - -.cvat-quality-settings-switch { - padding: $grid-unit-size $grid-unit-size * 1.25; - border: 1px solid lightgray; - margin-left: $grid-unit-size; - border-radius: $border-radius-base; -} - -.cvat-quality-settings-title { - margin-bottom: $grid-unit-size * 2; - align-items: center; -} - -.cvat-modal-quality-settings { - top: $grid-unit-size * 3; - - .ant-divider { - margin: $grid-unit-size 0; - } - - .ant-form-item-control-input { - min-height: 0; - } -} - -.cvat-job-list-item-conflicts { - display: flex; - justify-content: space-between; - align-items: center; -} diff --git a/cvat-ui/src/components/cvat-app.tsx b/cvat-ui/src/components/cvat-app.tsx index d061a97d532..d810fc55b91 100644 --- a/cvat-ui/src/components/cvat-app.tsx +++ b/cvat-ui/src/components/cvat-app.tsx @@ -82,6 +82,7 @@ import EmailVerificationSentPage from './email-confirmation-pages/email-verifica import IncorrectEmailConfirmationPage from './email-confirmation-pages/incorrect-email-confirmation'; import CreateJobPage from './create-job-page/create-job-page'; import AnalyticsPage from './analytics-page/analytics-page'; +import QualityControlPage from './quality-control/quality-control-page'; import InvitationWatcher from './invitation-watcher/invitation-watcher'; interface CVATAppProps { @@ -513,6 +514,7 @@ class CVATApplication extends React.PureComponent + diff --git a/cvat-ui/src/components/quality-control/quality-control-page.tsx b/cvat-ui/src/components/quality-control/quality-control-page.tsx new file mode 100644 index 00000000000..6625e5f3cd4 --- /dev/null +++ b/cvat-ui/src/components/quality-control/quality-control-page.tsx @@ -0,0 +1,189 @@ +// Copyright (C) 2023-2024 CVAT.ai Corporation +// +// SPDX-License-Identifier: MIT + +import './styles.scss'; + +import React, { useCallback, useEffect, useState } from 'react'; +import { useDispatch } from 'react-redux'; +import { useParams } from 'react-router'; +import { Link } from 'react-router-dom'; +import { Row, Col } from 'antd/lib/grid'; +import Tabs from 'antd/lib/tabs'; +import Title from 'antd/lib/typography/Title'; +import notification from 'antd/lib/notification'; +import { useIsMounted } from 'utils/hooks'; +import { + Job, Task, getCore, +} from 'cvat-core-wrapper'; +import { updateJobAsync } from 'actions/jobs-actions'; +import CVATLoadingSpinner from 'components/common/loading-spinner'; +import GoBackButton from 'components/common/go-back-button'; +import TaskQualityComponent from './task-quality/task-quality-component'; + +const core = getCore(); + +enum QualityControlTabs { + OVERVIEW = 'overview', + SETTINGS = 'settings', +} + +function getTabFromHash(): QualityControlTabs { + const tab = window.location.hash.slice(1) as QualityControlTabs; + return Object.values(QualityControlTabs).includes(tab) ? tab : QualityControlTabs.OVERVIEW; +} + +function readInstanceType(): InstanceType { + return 'task'; +} + +function readInstanceId(): number { + return +useParams<{ tid: string }>().tid; +} + +type InstanceType = 'project' | 'task' | 'job'; + +function QualityControlPage(): JSX.Element { + const dispatch = useDispatch(); + + const requestedInstanceType: InstanceType = readInstanceType(); + const requestedInstanceID = readInstanceId(); + + const [activeTab, setTab] = useState(getTabFromHash()); + const [instanceType, setInstanceType] = useState(null); + const [instance, setInstance] = useState(null); + const [fetching, setFetching] = useState(true); + const isMounted = useIsMounted(); + + const receiveInstance = async (type: InstanceType, id: number): Promise => { + let receivedInstance: Task | null = null; + + try { + switch (type) { + case 'task': { + [receivedInstance] = await core.tasks.get({ id }); + break; + } + default: + return; + } + + if (isMounted()) { + setInstance(receivedInstance); + setInstanceType(type); + } + } catch (error: unknown) { + notification.error({ + message: `Could not receive requested ${type}`, + description: `${error instanceof Error ? error.message : ''}`, + }); + } + }; + + useEffect(() => { + if (Number.isInteger(requestedInstanceID) && ['project', 'task', 'job'].includes(requestedInstanceType)) { + setFetching(true); + Promise.all([ + receiveInstance(requestedInstanceType, requestedInstanceID), + ]).finally(() => { + if (isMounted()) { + setFetching(false); + } + }); + } else { + notification.error({ + message: 'Could not load this page', + description: `Not valid resource ${requestedInstanceType} #${requestedInstanceID}`, + }); + } + + return () => { + if (isMounted()) { + setInstance(null); + } + }; + }, [requestedInstanceType, requestedInstanceID]); + + useEffect(() => { + window.addEventListener('hashchange', () => { + const hash = getTabFromHash(); + setTab(hash); + }); + }, []); + + useEffect(() => { + window.location.hash = activeTab; + }, [activeTab]); + + const onJobUpdate = useCallback((job: Job, data: Parameters[0]): void => { + setFetching(true); + dispatch(updateJobAsync(job, data)).finally(() => { + if (isMounted()) { + setFetching(false); + } + }); + }, []); + + const onTabKeyChange = useCallback((key: string): void => { + setTab(key as QualityControlTabs); + }, []); + + let backNavigation: JSX.Element | null = null; + let title: JSX.Element | null = null; + let tabs: JSX.Element | null = null; + if (instanceType && instance) { + backNavigation = ( + + + + ); + + const qualityControlFor = {`Task #${instance.id}`}; + title = ( + + + Quality control for + {' '} + {qualityControlFor} + + + ); + + tabs = ( + + ), + }]} + /> + ); + } + + return ( +
+ {fetching ? ( +
+ +
+ ) : ( + + {backNavigation} + + {title} + {tabs} + + + )} +
+ ); +} + +export default React.memo(QualityControlPage); diff --git a/cvat-ui/src/components/analytics-page/shared/quality-settings-modal.tsx b/cvat-ui/src/components/quality-control/shared/quality-settings-modal.tsx similarity index 100% rename from cvat-ui/src/components/analytics-page/shared/quality-settings-modal.tsx rename to cvat-ui/src/components/quality-control/shared/quality-settings-modal.tsx diff --git a/cvat-ui/src/components/quality-control/styles.scss b/cvat-ui/src/components/quality-control/styles.scss new file mode 100644 index 00000000000..72fbd6cfea2 --- /dev/null +++ b/cvat-ui/src/components/quality-control/styles.scss @@ -0,0 +1,93 @@ +// Copyright (C) 2024 CVAT.ai Corporation +// +// SPDX-License-Identifier: MIT + +@import 'base'; + +.cvat-task-quality-page { + >.ant-row { + margin-top: $grid-unit-size; + } +} + +.cvat-task-mean-annotation-quality { + .ant-statistic { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + } + + .ant-card-body { + padding: $grid-unit-size * 2 $grid-unit-size * 3; + } +} + +.cvat-analytics-download-report-button { + padding-left: $grid-unit-size * 2; + padding-right: $grid-unit-size * 2; + + a { + color: white; + + &:hover { + color: white; + } + } +} + +.cvat-analytics-page { + height: 100%; +} + +.cvat-analytics-wrapper { + overflow-y: auto; + width: 100%; + height: 100%; + padding-bottom: $grid-unit-size * 2; +} + +.cvat-task-quality-reports-hint { + margin-bottom: $grid-unit-size * 3; +} + +.cvat-job-empty-ground-truth-item { + .ant-card-body { + padding: $grid-unit-size * 3; + } + + .ant-btn { + padding-left: $grid-unit-size * 3; + padding-right: $grid-unit-size * 3; + } +} + +.cvat-quality-settings-switch { + padding: $grid-unit-size $grid-unit-size * 1.25; + border: 1px solid lightgray; + margin-left: $grid-unit-size; + border-radius: $border-radius-base; +} + +.cvat-quality-settings-title { + margin-bottom: $grid-unit-size * 2; + align-items: center; +} + +.cvat-modal-quality-settings { + top: $grid-unit-size * 3; + + .ant-divider { + margin: $grid-unit-size 0; + } + + .ant-form-item-control-input { + min-height: 0; + } +} + +.cvat-job-list-item-conflicts { + display: flex; + justify-content: space-between; + align-items: center; +} diff --git a/cvat-ui/src/components/analytics-page/task-quality/empty-job.tsx b/cvat-ui/src/components/quality-control/task-quality/empty-job.tsx similarity index 100% rename from cvat-ui/src/components/analytics-page/task-quality/empty-job.tsx rename to cvat-ui/src/components/quality-control/task-quality/empty-job.tsx diff --git a/cvat-ui/src/components/analytics-page/task-quality/gt-conflicts.tsx b/cvat-ui/src/components/quality-control/task-quality/gt-conflicts.tsx similarity index 98% rename from cvat-ui/src/components/analytics-page/task-quality/gt-conflicts.tsx rename to cvat-ui/src/components/quality-control/task-quality/gt-conflicts.tsx index 9804412cf1d..1caeace1691 100644 --- a/cvat-ui/src/components/analytics-page/task-quality/gt-conflicts.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/gt-conflicts.tsx @@ -7,7 +7,7 @@ import Text from 'antd/lib/typography/Text'; import { Col, Row } from 'antd/lib/grid'; import { QualityReport, QualitySummary } from 'cvat-core-wrapper'; -import AnalyticsCard from '../views/analytics-card'; +import AnalyticsCard from '../../analytics-page/views/analytics-card'; import { percent, clampValue } from '../utils/text-formatting'; interface Props { diff --git a/cvat-ui/src/components/analytics-page/task-quality/issues.tsx b/cvat-ui/src/components/quality-control/task-quality/issues.tsx similarity index 96% rename from cvat-ui/src/components/analytics-page/task-quality/issues.tsx rename to cvat-ui/src/components/quality-control/task-quality/issues.tsx index f0e0dcf1936..ca4bc41845c 100644 --- a/cvat-ui/src/components/analytics-page/task-quality/issues.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/issues.tsx @@ -9,7 +9,7 @@ import Text from 'antd/lib/typography/Text'; import notification from 'antd/lib/notification'; import { Task } from 'cvat-core-wrapper'; import { useIsMounted } from 'utils/hooks'; -import AnalyticsCard from '../views/analytics-card'; +import AnalyticsCard from '../../analytics-page/views/analytics-card'; import { percent, clampValue } from '../utils/text-formatting'; interface Props { diff --git a/cvat-ui/src/components/analytics-page/task-quality/job-list.tsx b/cvat-ui/src/components/quality-control/task-quality/job-list.tsx similarity index 100% rename from cvat-ui/src/components/analytics-page/task-quality/job-list.tsx rename to cvat-ui/src/components/quality-control/task-quality/job-list.tsx diff --git a/cvat-ui/src/components/analytics-page/task-quality/mean-quality.tsx b/cvat-ui/src/components/quality-control/task-quality/mean-quality.tsx similarity index 97% rename from cvat-ui/src/components/analytics-page/task-quality/mean-quality.tsx rename to cvat-ui/src/components/quality-control/task-quality/mean-quality.tsx index a28f6dc4610..bec2fadf134 100644 --- a/cvat-ui/src/components/analytics-page/task-quality/mean-quality.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/mean-quality.tsx @@ -9,7 +9,7 @@ import Text from 'antd/lib/typography/Text'; import Button from 'antd/lib/button'; import { QualityReport, getCore } from 'cvat-core-wrapper'; -import AnalyticsCard from '../views/analytics-card'; +import AnalyticsCard from '../../analytics-page/views/analytics-card'; import { toRepresentation } from '../utils/text-formatting'; interface Props { diff --git a/cvat-ui/src/components/analytics-page/task-quality/quality-settings-form.tsx b/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx similarity index 100% rename from cvat-ui/src/components/analytics-page/task-quality/quality-settings-form.tsx rename to cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx diff --git a/cvat-ui/src/components/analytics-page/task-quality/task-quality-component.tsx b/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx similarity index 100% rename from cvat-ui/src/components/analytics-page/task-quality/task-quality-component.tsx rename to cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx diff --git a/cvat-ui/src/components/analytics-page/utils/text-formatting.ts b/cvat-ui/src/components/quality-control/utils/text-formatting.ts similarity index 100% rename from cvat-ui/src/components/analytics-page/utils/text-formatting.ts rename to cvat-ui/src/components/quality-control/utils/text-formatting.ts diff --git a/cvat-ui/src/components/tasks-page/task-item.tsx b/cvat-ui/src/components/tasks-page/task-item.tsx index 4719c0a0d6f..9bc5fdec313 100644 --- a/cvat-ui/src/components/tasks-page/task-item.tsx +++ b/cvat-ui/src/components/tasks-page/task-item.tsx @@ -238,6 +238,9 @@ class TaskItemComponent extends React.PureComponent { history.push(`/tasks/${taskInstance.id}/analytics`); }; + const onViewQualityControl = (): void => { + history.push(`/tasks/${taskInstance.id}/quality-control`); + }; return ( @@ -267,6 +270,7 @@ class TaskItemComponent extends React.PureComponent )} > diff --git a/cvat-ui/src/containers/actions-menu/actions-menu.tsx b/cvat-ui/src/containers/actions-menu/actions-menu.tsx index 0883e8067c6..e9773c2b905 100644 --- a/cvat-ui/src/containers/actions-menu/actions-menu.tsx +++ b/cvat-ui/src/containers/actions-menu/actions-menu.tsx @@ -21,6 +21,7 @@ import { importActions } from 'actions/import-actions'; interface OwnProps { taskInstance: any; onViewAnalytics: () => void; + onViewQualityControl: () => void; } interface StateToProps { @@ -86,6 +87,7 @@ function ActionsMenuContainer(props: OwnProps & StateToProps & DispatchToProps): openRunModelWindow, openMoveTaskToProjectWindow, onViewAnalytics, + onViewQualityControl, } = props; const onClickMenu = (params: MenuInfo): void | JSX.Element => { const [action] = params.keyPath; @@ -105,6 +107,8 @@ function ActionsMenuContainer(props: OwnProps & StateToProps & DispatchToProps): showImportModal(taskInstance); } else if (action === Actions.VIEW_ANALYTICS) { onViewAnalytics(); + } else if (action === Actions.QUALITY_CONTROL) { + onViewQualityControl(); } }; From e4e16f4d6ba4a8499a25a96b38f5425647b54a57 Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Wed, 17 Jul 2024 13:32:56 +0300 Subject: [PATCH 04/79] added support for plugin tabs --- .../quality-control/quality-control-page.tsx | 35 +++++++++++++------ cvat-ui/src/reducers/index.ts | 7 +++- cvat-ui/src/reducers/plugins-reducer.ts | 5 +++ 3 files changed, 35 insertions(+), 12 deletions(-) diff --git a/cvat-ui/src/components/quality-control/quality-control-page.tsx b/cvat-ui/src/components/quality-control/quality-control-page.tsx index 6625e5f3cd4..e2ecfdb9a59 100644 --- a/cvat-ui/src/components/quality-control/quality-control-page.tsx +++ b/cvat-ui/src/components/quality-control/quality-control-page.tsx @@ -12,13 +12,14 @@ import { Row, Col } from 'antd/lib/grid'; import Tabs from 'antd/lib/tabs'; import Title from 'antd/lib/typography/Title'; import notification from 'antd/lib/notification'; -import { useIsMounted } from 'utils/hooks'; +import { useIsMounted, usePlugins } from 'utils/hooks'; import { Job, Task, getCore, } from 'cvat-core-wrapper'; import { updateJobAsync } from 'actions/jobs-actions'; import CVATLoadingSpinner from 'components/common/loading-spinner'; import GoBackButton from 'components/common/go-back-button'; +import { CombinedState } from 'reducers'; import TaskQualityComponent from './task-quality/task-quality-component'; const core = getCore(); @@ -55,6 +56,7 @@ function QualityControlPage(): JSX.Element { const [fetching, setFetching] = useState(true); const isMounted = useIsMounted(); + const pluginTabs = usePlugins((state: CombinedState) => state.plugins.components.qualityControlPage.tabs.items, {}); const receiveInstance = async (type: InstanceType, id: number): Promise => { let receivedInstance: Task | null = null; @@ -111,9 +113,9 @@ function QualityControlPage(): JSX.Element { }); }, []); - useEffect(() => { - window.location.hash = activeTab; - }, [activeTab]); + // useEffect(() => { + // window.location.hash = activeTab; + // }, [activeTab]); const onJobUpdate = useCallback((job: Job, data: Parameters[0]): void => { setFetching(true); @@ -149,6 +151,22 @@ function QualityControlPage(): JSX.Element { ); + const tabsItems = []; + tabsItems.push([{ + key: QualityControlTabs.OVERVIEW, + label: 'Performance', + children: ( + + ), + }, 10]); + tabsItems.push(...pluginTabs.map(({ component: Component, weight }, index: number) => [{ + key: Component.name, + label: Component.name, + children: ( + + ), + }, weight])); + tabs = ( - ), - }]} + items={tabsItems.sort((item1, item2) => item1[1] - item2[1]) + .map((item) => item[0])} /> ); } diff --git a/cvat-ui/src/reducers/index.ts b/cvat-ui/src/reducers/index.ts index fe6744beb8c..e1456009c22 100644 --- a/cvat-ui/src/reducers/index.ts +++ b/cvat-ui/src/reducers/index.ts @@ -291,7 +291,12 @@ export interface PluginsState { params: PluginComponent[]; } }, - } + }; + qualityControlPage:{ + tabs: { + items: PluginComponent[]; + }, + }; projectActions: { items: PluginComponent[]; }; diff --git a/cvat-ui/src/reducers/plugins-reducer.ts b/cvat-ui/src/reducers/plugins-reducer.ts index bcca4251151..dc5d157e8d1 100644 --- a/cvat-ui/src/reducers/plugins-reducer.ts +++ b/cvat-ui/src/reducers/plugins-reducer.ts @@ -55,6 +55,11 @@ const defaultState: PluginsState = { }, }, }, + qualityControlPage: { + tabs: { + items: [], + }, + }, projectActions: { items: [], }, From c096c1d41ea4afe2719d4b7de2d8d52e728df4af Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Thu, 18 Jul 2024 12:54:45 +0300 Subject: [PATCH 05/79] changed yellow quality color --- .../components/quality-control/quality-control-page.tsx | 8 ++++++-- cvat-ui/src/utils/quality-color.ts | 6 +++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/cvat-ui/src/components/quality-control/quality-control-page.tsx b/cvat-ui/src/components/quality-control/quality-control-page.tsx index e2ecfdb9a59..e7c4075bdf4 100644 --- a/cvat-ui/src/components/quality-control/quality-control-page.tsx +++ b/cvat-ui/src/components/quality-control/quality-control-page.tsx @@ -56,7 +56,11 @@ function QualityControlPage(): JSX.Element { const [fetching, setFetching] = useState(true); const isMounted = useIsMounted(); - const pluginTabs = usePlugins((state: CombinedState) => state.plugins.components.qualityControlPage.tabs.items, {}); + const pluginTabs = usePlugins( + (state: CombinedState) => state.plugins.components.qualityControlPage.tabs.items, + {}, + { task: instance }, + ); const receiveInstance = async (type: InstanceType, id: number): Promise => { let receivedInstance: Task | null = null; @@ -163,7 +167,7 @@ function QualityControlPage(): JSX.Element { key: Component.name, label: Component.name, children: ( - + ), }, weight])); diff --git a/cvat-ui/src/utils/quality-color.ts b/cvat-ui/src/utils/quality-color.ts index 5373a1457c7..1f94d4cfdc2 100644 --- a/cvat-ui/src/utils/quality-color.ts +++ b/cvat-ui/src/utils/quality-color.ts @@ -1,10 +1,10 @@ -// Copyright (C) 2023 CVAT.ai Corporation +// Copyright (C) 2023-2024 CVAT.ai Corporation // // SPDX-License-Identifier: MIT -enum QualityColors { +export enum QualityColors { GREEN = '#237804', - YELLOW = '#ffec3d', + YELLOW = '#ed9c00', RED = '#ff4d4f', GRAY = '#8c8c8c', } From 09f22a60e9493bdd1221b620787a0e081c16f616 Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Fri, 19 Jul 2024 13:22:42 +0300 Subject: [PATCH 06/79] style control improvements --- .../components/analytics-page/views/analytics-card.tsx | 9 ++++++--- .../quality-control/task-quality/gt-conflicts.tsx | 2 +- .../components/quality-control/task-quality/issues.tsx | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/cvat-ui/src/components/analytics-page/views/analytics-card.tsx b/cvat-ui/src/components/analytics-page/views/analytics-card.tsx index 1bd4538d817..5f5302ecf7c 100644 --- a/cvat-ui/src/components/analytics-page/views/analytics-card.tsx +++ b/cvat-ui/src/components/analytics-page/views/analytics-card.tsx @@ -11,7 +11,10 @@ import { QuestionCircleOutlined } from '@ant-design/icons'; interface Props { title: string; - size?: number; + size?: { + cardSize?: number; + leftElementSize?: number; + }; className?: string; value?: string | number; tooltip?: JSX.Element; @@ -26,10 +29,10 @@ function AnalyticsCard(props: Props): JSX.Element { } = props; return ( - + - + diff --git a/cvat-ui/src/components/quality-control/task-quality/gt-conflicts.tsx b/cvat-ui/src/components/quality-control/task-quality/gt-conflicts.tsx index 1caeace1691..cdfc765a794 100644 --- a/cvat-ui/src/components/quality-control/task-quality/gt-conflicts.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/gt-conflicts.tsx @@ -103,7 +103,7 @@ function GTConflicts(props: Props): JSX.Element { className='cvat-task-gt-conflicts' value={conflictsRepresentation} tooltip={} - size={12} + size={{ cardSize: 12 }} bottomElement={bottomElement} /> ); diff --git a/cvat-ui/src/components/quality-control/task-quality/issues.tsx b/cvat-ui/src/components/quality-control/task-quality/issues.tsx index ca4bc41845c..bdd304563f9 100644 --- a/cvat-ui/src/components/quality-control/task-quality/issues.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/issues.tsx @@ -57,7 +57,7 @@ function Issues(props: Props): JSX.Element { title='Issues' className='cvat-task-issues' value={issuesCount} - size={12} + size={{ cardSize: 12 }} bottomElement={bottomElement} /> ); From 7e3840287e476533c010d87fe96f97bd057e2bb5 Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Wed, 24 Jul 2024 10:10:54 +0300 Subject: [PATCH 07/79] demo implementation --- cvat-core/src/api-implementation.ts | 17 + cvat-core/src/api.ts | 8 + cvat-core/src/index.ts | 4 + cvat-core/src/server-proxy.ts | 71 +++++ .../create-task-page/create-task-content.tsx | 7 +- .../quality-configuration-form.tsx | 72 ++++- .../components/create-task-page/styles.scss | 7 + .../quality-control/quality-control-page.tsx | 299 ++++++++++++++++-- .../quality-control/quality-settings.tsx | 44 +++ .../shared/quality-settings-modal.tsx | 97 ------ .../components/quality-control/styles.scss | 33 ++ .../task-quality/mean-quality.tsx | 11 +- .../task-quality/quality-settings-form.tsx | 111 +++++-- .../task-quality/task-quality-component.tsx | 283 ++++------------- cvat-ui/src/components/task-page/top-bar.tsx | 4 + 15 files changed, 672 insertions(+), 396 deletions(-) create mode 100644 cvat-ui/src/components/quality-control/quality-settings.tsx delete mode 100644 cvat-ui/src/components/quality-control/shared/quality-settings-modal.tsx diff --git a/cvat-core/src/api-implementation.ts b/cvat-core/src/api-implementation.ts index 1e7bfb5164c..26d117fd074 100644 --- a/cvat-core/src/api-implementation.ts +++ b/cvat-core/src/api-implementation.ts @@ -553,6 +553,23 @@ export default function implementAPI(cvat: CVATCore): CVATCore { const params = fieldsToSnakeCase(body); await serverProxy.analytics.performance.calculate(params, onUpdate); }); + implementationMixin(cvat.analytics.quality.calculate, async ( + body: Parameters[0], + onUpdate: Parameters[1], + ) => { + checkFilter(body, { + jobID: isInteger, + taskID: isInteger, + projectID: isInteger, + }); + + if (!('taskID' in body)) { + throw new ArgumentError('One "taskID" is not provided'); + } + + const params = fieldsToSnakeCase(body); + await serverProxy.analytics.quality.calculate(params, onUpdate); + }); implementationMixin(cvat.frames.getMeta, async (type, id) => { const result = await serverProxy.frames.getMeta(type, id); return new FramesMetaData({ diff --git a/cvat-core/src/api.ts b/cvat-core/src/api.ts index 00a65ac3a84..b121f6460d4 100644 --- a/cvat-core/src/api.ts +++ b/cvat-core/src/api.ts @@ -373,6 +373,14 @@ function build(): CVATCore { const result = await PluginRegistry.apiWrapper(cvat.analytics.quality.conflicts, filter); return result; }, + async calculate(body, onUpdate) { + const result = await PluginRegistry.apiWrapper( + cvat.analytics.quality.calculate, + body, + onUpdate, + ); + return result; + }, settings: { async get(filter = {}) { const result = await PluginRegistry.apiWrapper(cvat.analytics.quality.settings.get, filter); diff --git a/cvat-core/src/index.ts b/cvat-core/src/index.ts index efd069e919d..d4f3b777bb6 100644 --- a/cvat-core/src/index.ts +++ b/cvat-core/src/index.ts @@ -136,6 +136,10 @@ export default interface CVATCore { quality: { reports: (filter: QualityReportsFilter) => Promise>; conflicts: (filter: QualityConflictsFilter) => Promise; + calculate: ( + body: { taskID?: number; }, + onUpdate: (status: enums.RQStatus, progress: number, message: string) => void, + ) => Promise; settings: { get: (filter: QualitySettingsFilter) => Promise; }; diff --git a/cvat-core/src/server-proxy.ts b/cvat-core/src/server-proxy.ts index caa945d8448..c26405f8ce6 100644 --- a/cvat-core/src/server-proxy.ts +++ b/cvat-core/src/server-proxy.ts @@ -2350,6 +2350,76 @@ async function calculateAnalyticsReport( return promise; } +const listenToCreateQualityReportCallbacks: { + task: LongProcessListener; +} = { + task: {}, +}; + +async function calculateQualityReport( + body: { + task_id?: number; + }, + onUpdate: (state: string, progress: number, message: string) => void, +): Promise { + const id = body.task_id; + const { backendAPI } = config; + const params = enableOrganization(); + let listenerStorage: LongProcessListener = null; + + if (Number.isInteger(body.task_id)) { + listenerStorage = listenToCreateQualityReportCallbacks.task; + } + + if (listenerStorage[id]) { + listenerStorage[id].onUpdate.push(onUpdate); + return listenerStorage[id].promise; + } + + const promise = new Promise((resolve, reject) => { + Axios.post(`${backendAPI}/quality/reports`, { + ...body, + ...params, + }).then(({ data: { rq_id: rqID } }) => { + listenerStorage[id].onUpdate.forEach((_onUpdate) => _onUpdate(RQStatus.QUEUED, 0, 'Quality report request sent')); + const checkStatus = (): void => { + Axios.post(`${backendAPI}/quality/reports`, { + ...body, + ...params, + }, { params: { rq_id: rqID } }).then((response) => { + // TODO: rewrite server logic, now it returns 202, 201 codes, but we need RQ statuses and details + // after this patch is merged https://github.com/cvat-ai/cvat/pull/7537 + if (response.status === 201) { + listenerStorage[id].onUpdate.forEach((_onUpdate) => _onUpdate(RQStatus.FINISHED, 0, 'Done')); + resolve(); + return; + } + + listenerStorage[id].onUpdate.forEach((_onUpdate) => _onUpdate(RQStatus.QUEUED, 0, 'Quality report calculation is in progress')); + setTimeout(checkStatus, 10000); + }).catch((errorData) => { + reject(generateError(errorData)); + }); + }; + + setTimeout(checkStatus, 2500); + }).catch((errorData) => { + reject(generateError(errorData)); + }); + }); + + listenerStorage[id] = { + promise, + onUpdate: [onUpdate], + }; + + promise.finally(() => { + delete listenerStorage[id]; + }); + + return promise; +} + export default Object.freeze({ server: Object.freeze({ setAuthData, @@ -2505,6 +2575,7 @@ export default Object.freeze({ quality: Object.freeze({ reports: getQualityReports, conflicts: getQualityConflicts, + calculate: calculateQualityReport, settings: Object.freeze({ get: getQualitySettings, update: updateQualitySettings, diff --git a/cvat-ui/src/components/create-task-page/create-task-content.tsx b/cvat-ui/src/components/create-task-page/create-task-content.tsx index 41e5fb812cb..48a2c582c55 100644 --- a/cvat-ui/src/components/create-task-page/create-task-content.tsx +++ b/cvat-ui/src/components/create-task-page/create-task-content.tsx @@ -252,12 +252,13 @@ class CreateTaskContent extends React.PureComponent { - console.log(values); + private handleChangeQualityConfiguration = (values: QualityConfiguration, reset = false): void => { + console.log(values, reset); const { quality } = this.state; this.setState({ - quality: { ...quality, ...values }, + quality: { ...(reset ? {} : quality), ...values }, }); + console.log({ ...(reset ? {} : quality), ...values }); }; private handleSubmitAdvancedConfiguration = (values: AdvancedConfiguration): Promise => ( diff --git a/cvat-ui/src/components/create-task-page/quality-configuration-form.tsx b/cvat-ui/src/components/create-task-page/quality-configuration-form.tsx index 0c057dce3f7..af41915ac9a 100644 --- a/cvat-ui/src/components/create-task-page/quality-configuration-form.tsx +++ b/cvat-ui/src/components/create-task-page/quality-configuration-form.tsx @@ -2,21 +2,21 @@ // // SPDX-License-Identifier: MIT -import React, { useState } from 'react'; +import React, { useEffect, useState } from 'react'; import Input from 'antd/lib/input'; import Form from 'antd/lib/form'; import { usePlugins } from 'utils/hooks'; import { CombinedState } from 'reducers'; import { PercentageOutlined } from '@ant-design/icons'; import Radio from 'antd/lib/radio'; -import { groundTruthFrameSelect } from 'components/create-job-page/job-form'; +import { FrameSelectionMethod } from 'components/create-job-page/job-form'; import { Col } from 'antd/lib/grid'; +import Select from 'antd/lib/select'; -export interface QualityConfiguration { -} +export interface QualityConfiguration {} interface Props { - onChange(values: QualityConfiguration): void; + onChange(values: QualityConfiguration, reset?: boolean): void; } enum ValidationMethod { @@ -24,19 +24,63 @@ enum ValidationMethod { GT = 'gt_job', } +const initialValues = { + validation_method: ValidationMethod.NONE, +}; + export default function QualityConfigurationForm(props: Props): React.JSX.Element { const { onChange } = props; const [currentValidationMethod, setCurrentValidationMethod] = useState(ValidationMethod.NONE); + useEffect(() => { + onChange(initialValues); + }, []); + + useEffect(() => { + if (currentValidationMethod === ValidationMethod.GT) { + onChange({ + validation_method: ValidationMethod.GT, + validation_frames_percent: 5, + frame_selection_method: FrameSelectionMethod.RANDOM, + }, true); + } else if (currentValidationMethod === ValidationMethod.NONE) { + onChange({ + validation_method: ValidationMethod.NONE, + }, true); + } + }, [currentValidationMethod]); + let paramsBlock: JSX.Element | null = null; if (currentValidationMethod === ValidationMethod.GT) { paramsBlock = ( <> - {groundTruthFrameSelect()} + + + + + ( [ { + console.log(e); const { value } = e.target; const key = e.target.name; - onChange({ [key]: value }); + if (key !== 'validation_method') { + onChange({ [key]: value }); + } }} + initialValues={initialValues} > .ant-collapse-header { + align-items: center; + } +} diff --git a/cvat-ui/src/components/quality-control/quality-control-page.tsx b/cvat-ui/src/components/quality-control/quality-control-page.tsx index e7c4075bdf4..36a5fef084b 100644 --- a/cvat-ui/src/components/quality-control/quality-control-page.tsx +++ b/cvat-ui/src/components/quality-control/quality-control-page.tsx @@ -4,7 +4,9 @@ import './styles.scss'; -import React, { useCallback, useEffect, useState } from 'react'; +import React, { + useCallback, useEffect, useReducer, useState, +} from 'react'; import { useDispatch } from 'react-redux'; import { useParams } from 'react-router'; import { Link } from 'react-router-dom'; @@ -14,24 +16,21 @@ import Title from 'antd/lib/typography/Title'; import notification from 'antd/lib/notification'; import { useIsMounted, usePlugins } from 'utils/hooks'; import { - Job, Task, getCore, + Job, JobType, QualityReport, QualitySettings, RQStatus, Task, getCore, } from 'cvat-core-wrapper'; import { updateJobAsync } from 'actions/jobs-actions'; import CVATLoadingSpinner from 'components/common/loading-spinner'; import GoBackButton from 'components/common/go-back-button'; import { CombinedState } from 'reducers'; +import { createAction } from 'utils/redux'; import TaskQualityComponent from './task-quality/task-quality-component'; +import QualitySettingsComponent from './quality-settings'; const core = getCore(); -enum QualityControlTabs { - OVERVIEW = 'overview', - SETTINGS = 'settings', -} - -function getTabFromHash(): QualityControlTabs { - const tab = window.location.hash.slice(1) as QualityControlTabs; - return Object.values(QualityControlTabs).includes(tab) ? tab : QualityControlTabs.OVERVIEW; +function getTabFromHash(supportedTabs: string[]): string { + const tab = window.location.hash.slice(1); + return supportedTabs.includes(tab) ? tab : supportedTabs[0]; } function readInstanceType(): InstanceType { @@ -44,24 +43,133 @@ function readInstanceId(): number { type InstanceType = 'project' | 'task' | 'job'; +interface State { + fetching: boolean; + taskReport: QualityReport | null; + jobsReports: QualityReport[]; + reportRefreshingStatus: string | null; + qualitySettings: { + settings: QualitySettings | null; + fetching: boolean; + visible: boolean; + }, +} + +enum ReducerActionType { + SET_FETCHING = 'SET_FETCHING', + SET_TASK_REPORT = 'SET_TASK_REPORT', + SET_JOBS_REPORTS = 'SET_JOBS_REPORTS', + SET_QUALITY_SETTINGS = 'SET_QUALITY_SETTINGS', + SET_QUALITY_SETTINGS_VISIBLE = 'SET_QUALITY_SETTINGS_VISIBLE', + SET_QUALITY_SETTINGS_FETCHING = 'SET_QUALITY_SETTINGS_FETCHING', + SET_REPORT_REFRESHING_STATUS = 'SET_REPORT_REFRESHING_STATUS', +} + +export const reducerActions = { + setFetching: (fetching: boolean) => ( + createAction(ReducerActionType.SET_FETCHING, { fetching }) + ), + setTaskReport: (qualityReport: QualityReport) => ( + createAction(ReducerActionType.SET_TASK_REPORT, { qualityReport }) + ), + setJobsReports: (qualityReports: QualityReport[]) => ( + createAction(ReducerActionType.SET_JOBS_REPORTS, { qualityReports }) + ), + setQualitySettings: (qualitySettings: QualitySettings) => ( + createAction(ReducerActionType.SET_QUALITY_SETTINGS, { qualitySettings }) + ), + setQualitySettingsVisible: (visible: boolean) => ( + createAction(ReducerActionType.SET_QUALITY_SETTINGS_VISIBLE, { visible }) + ), + setQualitySettingsFetching: (fetching: boolean) => ( + createAction(ReducerActionType.SET_QUALITY_SETTINGS_FETCHING, { fetching }) + ), + setReportRefreshingStatus: (status: string | null) => ( + createAction(ReducerActionType.SET_REPORT_REFRESHING_STATUS, { status }) + ), +}; + +const reducer = (state: State, action: ActionUnion): State => { + if (action.type === ReducerActionType.SET_FETCHING) { + return { + ...state, + fetching: action.payload.fetching, + }; + } + + if (action.type === ReducerActionType.SET_TASK_REPORT) { + return { + ...state, + taskReport: action.payload.qualityReport, + }; + } + + if (action.type === ReducerActionType.SET_JOBS_REPORTS) { + return { + ...state, + jobsReports: action.payload.qualityReports, + }; + } + + if (action.type === ReducerActionType.SET_QUALITY_SETTINGS) { + return { + ...state, + qualitySettings: { + ...state.qualitySettings, + settings: action.payload.qualitySettings, + }, + }; + } + + if (action.type === ReducerActionType.SET_QUALITY_SETTINGS_FETCHING) { + return { + ...state, + qualitySettings: { + ...state.qualitySettings, + fetching: action.payload.fetching, + }, + }; + } + + if (action.type === ReducerActionType.SET_REPORT_REFRESHING_STATUS) { + return { + ...state, + reportRefreshingStatus: action.payload.status, + }; + } + + return state; +}; + function QualityControlPage(): JSX.Element { - const dispatch = useDispatch(); + const appDispatch = useDispatch(); + const [state, dispatch] = useReducer(reducer, { + fetching: true, + taskReport: null, + jobsReports: [], + reportRefreshingStatus: null, + qualitySettings: { + settings: null, + fetching: true, + visible: false, + }, + }); const requestedInstanceType: InstanceType = readInstanceType(); const requestedInstanceID = readInstanceId(); - const [activeTab, setTab] = useState(getTabFromHash()); const [instanceType, setInstanceType] = useState(null); const [instance, setInstance] = useState(null); - const [fetching, setFetching] = useState(true); const isMounted = useIsMounted(); const pluginTabs = usePlugins( - (state: CombinedState) => state.plugins.components.qualityControlPage.tabs.items, + (appState: CombinedState) => appState.plugins.components.qualityControlPage.tabs.items, {}, { task: instance }, ); - const receiveInstance = async (type: InstanceType, id: number): Promise => { + const supportedTabs = ['Overview', 'Settings', ...pluginTabs.map(({ component: Component }) => Component.name)]; + const [activeTab, setTab] = useState(getTabFromHash(supportedTabs)); + const receiveInstance = async (type: InstanceType, id: number): Promise => { let receivedInstance: Task | null = null; try { @@ -71,31 +179,129 @@ function QualityControlPage(): JSX.Element { break; } default: - return; + return null; } if (isMounted()) { setInstance(receivedInstance); setInstanceType(type); } + return receivedInstance; } catch (error: unknown) { notification.error({ message: `Could not receive requested ${type}`, description: `${error instanceof Error ? error.message : ''}`, }); + return null; } }; + const receiveReport = useCallback((taskInstance: Task) => { + dispatch(reducerActions.setFetching(true)); + dispatch(reducerActions.setQualitySettingsFetching(true)); + + function handleError(error: Error): void { + if (isMounted()) { + notification.error({ + description: error.toString(), + message: 'Could not initialize quality analytics page', + }); + } + } + + core.analytics.quality.reports({ pageSize: 1, target: 'task', taskID: taskInstance.id }).then(([report]) => { + let reportRequest = Promise.resolve([]); + if (report) { + reportRequest = core.analytics.quality.reports({ + pageSize: taskInstance.jobs.length, + parentID: report.id, + target: 'job', + }); + } + const settingsRequest = core.analytics.quality.settings.get({ taskID: taskInstance.id }); + + Promise.all([reportRequest, settingsRequest]).then(([jobReports, settings]) => { + dispatch(reducerActions.setQualitySettings(settings)); + dispatch(reducerActions.setTaskReport(report || null)); + dispatch(reducerActions.setJobsReports(jobReports)); + }).catch(handleError).finally(() => { + dispatch(reducerActions.setQualitySettingsFetching(false)); + dispatch(reducerActions.setFetching(false)); + }); + }).catch(handleError); + }, [instance]); + + const onCreateReport = useCallback(() => { + const onUpdate = (status: RQStatus, progress: number, message: string): void => { + dispatch(reducerActions.setReportRefreshingStatus(message)); + }; + + const body = { taskID: instance.id }; + + core.analytics.quality.calculate(body, onUpdate).then(() => { + receiveReport(instance); + }).finally(() => { + dispatch(reducerActions.setReportRefreshingStatus(null)); + }).catch((error: unknown) => { + if (isMounted()) { + notification.error({ + message: 'Error occurred during requesting performance report', + description: error instanceof Error ? error.message : '', + }); + } + }); + }, [instance]); + + const onSaveQualitySettings = useCallback(async (values) => { + try { + const { settings } = state.qualitySettings; + if (settings) { + settings.lowOverlapThreshold = values.lowOverlapThreshold / 100; + settings.iouThreshold = values.iouThreshold / 100; + settings.compareAttributes = values.compareAttributes; + + settings.oksSigma = values.oksSigma / 100; + + settings.lineThickness = values.lineThickness / 100; + settings.lineOrientationThreshold = values.lineOrientationThreshold / 100; + settings.orientedLines = values.orientedLines; + + settings.compareGroups = values.compareGroups; + settings.groupMatchThreshold = values.groupMatchThreshold / 100; + + settings.checkCoveredAnnotations = values.checkCoveredAnnotations; + settings.objectVisibilityThreshold = values.objectVisibilityThreshold / 100; + + settings.panopticComparison = values.panopticComparison; + + try { + dispatch(reducerActions.setQualitySettingsFetching(true)); + const responseSettings = await settings.save(); + dispatch(reducerActions.setQualitySettings(responseSettings)); + } catch (error: unknown) { + notification.error({ + message: 'Could not save quality settings', + description: typeof Error === 'object' ? (error as object).toString() : '', + }); + throw error; + } finally { + dispatch(reducerActions.setQualitySettingsFetching(false)); + } + } + return settings; + } catch (e) { + return false; + } + }, [state.qualitySettings.settings]); + useEffect(() => { if (Number.isInteger(requestedInstanceID) && ['project', 'task', 'job'].includes(requestedInstanceType)) { - setFetching(true); + dispatch(reducerActions.setFetching(true)); Promise.all([ receiveInstance(requestedInstanceType, requestedInstanceID), - ]).finally(() => { - if (isMounted()) { - setFetching(false); - } - }); + ]).then((result) => Promise.all([ + receiveReport(result[0]), + ])); } else { notification.error({ message: 'Could not load this page', @@ -112,26 +318,26 @@ function QualityControlPage(): JSX.Element { useEffect(() => { window.addEventListener('hashchange', () => { - const hash = getTabFromHash(); + const hash = getTabFromHash(supportedTabs); setTab(hash); }); }, []); - // useEffect(() => { - // window.location.hash = activeTab; - // }, [activeTab]); + useEffect(() => { + window.location.hash = activeTab; + }, [activeTab]); const onJobUpdate = useCallback((job: Job, data: Parameters[0]): void => { - setFetching(true); - dispatch(updateJobAsync(job, data)).finally(() => { + dispatch(reducerActions.setFetching(true)); + appDispatch(updateJobAsync(job, data)).finally(() => { if (isMounted()) { - setFetching(false); + dispatch(reducerActions.setFetching(false)); } }); }, []); const onTabKeyChange = useCallback((key: string): void => { - setTab(key as QualityControlTabs); + setTab(key); }, []); let backNavigation: JSX.Element | null = null; @@ -156,13 +362,36 @@ function QualityControlPage(): JSX.Element { ); const tabsItems = []; + const gtJob = instance.jobs.find((job: Job) => job.type === JobType.GROUND_TRUTH); tabsItems.push([{ - key: QualityControlTabs.OVERVIEW, - label: 'Performance', + key: 'Overview', + label: 'Overview', children: ( - + ), }, 10]); + + if (gtJob) { + tabsItems.push([{ + key: 'Settings', + label: 'Settings', + children: ( + + ), + }, 100]); + } + tabsItems.push(...pluginTabs.map(({ component: Component, weight }, index: number) => [{ key: Component.name, label: Component.name, @@ -175,7 +404,7 @@ function QualityControlPage(): JSX.Element { item1[1] - item2[1]) @@ -186,7 +415,7 @@ function QualityControlPage(): JSX.Element { return (
- {fetching ? ( + {state.fetching && state.qualitySettings.fetching ? (
diff --git a/cvat-ui/src/components/quality-control/quality-settings.tsx b/cvat-ui/src/components/quality-control/quality-settings.tsx new file mode 100644 index 00000000000..0280da544a4 --- /dev/null +++ b/cvat-ui/src/components/quality-control/quality-settings.tsx @@ -0,0 +1,44 @@ +// Copyright (C) 2023-2024 CVAT.ai Corporation +// +// SPDX-License-Identifier: MIT + +import React, { useCallback } from 'react'; +import Text from 'antd/lib/typography/Text'; +import Form from 'antd/lib/form'; +import { QualitySettings } from 'cvat-core-wrapper'; +import CVATLoadingSpinner from 'components/common/loading-spinner'; +import QualitySettingsForm from './task-quality/quality-settings-form'; + +interface Props { + fetching: boolean; + qualitySettings: QualitySettings | null; + setQualitySettings: (settings: QualitySettings) => void; +} + +export default function QualitySettingsComponent(props: Props): JSX.Element | null { + const { + fetching, + qualitySettings: settings, + setQualitySettings, + } = props; + + const [form] = Form.useForm(); + const onSave = useCallback(async () => { + const values = await form.validateFields(); + setQualitySettings(values); + }, [form]); + + if (fetching) { + return ( +
+ +
+ ); + } + + return settings ? ( + + ) : ( + No quality settings + ); +} diff --git a/cvat-ui/src/components/quality-control/shared/quality-settings-modal.tsx b/cvat-ui/src/components/quality-control/shared/quality-settings-modal.tsx deleted file mode 100644 index c3119037991..00000000000 --- a/cvat-ui/src/components/quality-control/shared/quality-settings-modal.tsx +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright (C) 2023-2024 CVAT.ai Corporation -// -// SPDX-License-Identifier: MIT - -import React, { useCallback } from 'react'; -import Text from 'antd/lib/typography/Text'; -import Modal from 'antd/lib/modal'; -import Form from 'antd/lib/form'; -import notification from 'antd/lib/notification'; -import { QualitySettings } from 'cvat-core-wrapper'; -import QualitySettingsForm from '../task-quality/quality-settings-form'; - -interface Props { - fetching: boolean; - qualitySettings: QualitySettings | null; - visible: boolean; - setVisible: (visible: boolean) => void; - setQualitySettings: (settings: QualitySettings) => void; -} - -export default function QualitySettingsModal(props: Props): JSX.Element | null { - const { - fetching, - visible, - qualitySettings: settings, - setVisible, - setQualitySettings, - } = props; - - const [form] = Form.useForm(); - - const onOk = useCallback(async () => { - try { - if (settings) { - const values = await form.validateFields(); - settings.lowOverlapThreshold = values.lowOverlapThreshold / 100; - settings.iouThreshold = values.iouThreshold / 100; - settings.compareAttributes = values.compareAttributes; - - settings.oksSigma = values.oksSigma / 100; - - settings.lineThickness = values.lineThickness / 100; - settings.lineOrientationThreshold = values.lineOrientationThreshold / 100; - settings.orientedLines = values.orientedLines; - - settings.compareGroups = values.compareGroups; - settings.groupMatchThreshold = values.groupMatchThreshold / 100; - - settings.checkCoveredAnnotations = values.checkCoveredAnnotations; - settings.objectVisibilityThreshold = values.objectVisibilityThreshold / 100; - - settings.panopticComparison = values.panopticComparison; - - try { - const responseSettings = await settings.save(); - setQualitySettings(responseSettings); - } catch (error: unknown) { - notification.error({ - message: 'Could not save quality settings', - description: typeof Error === 'object' ? (error as object).toString() : '', - }); - throw error; - } - await settings.save(); - } - setVisible(false); - return settings; - } catch (e) { - return false; - } - }, [settings]); - - const onCancel = useCallback(() => { - setVisible(false); - }, []); - - return ( - Annotation Quality Settings} - open={visible} - onOk={onOk} - onCancel={onCancel} - confirmLoading={fetching} - destroyOnClose - className='cvat-modal-quality-settings' - > - { settings ? ( - - ) : ( - No quality settings - )} - - ); -} diff --git a/cvat-ui/src/components/quality-control/styles.scss b/cvat-ui/src/components/quality-control/styles.scss index 72fbd6cfea2..5adada104a3 100644 --- a/cvat-ui/src/components/quality-control/styles.scss +++ b/cvat-ui/src/components/quality-control/styles.scss @@ -91,3 +91,36 @@ justify-content: space-between; align-items: center; } + +.cvat-quality-settings-form { + display: block; + position: relative; + max-height: $grid-unit-size * 80; + overflow-y: scroll; + + &::-webkit-scrollbar { + background-color: #fff; + width: $grid-unit-size * 2; + } + + &::-webkit-scrollbar-track { + background-color: #fff; + } + + &::-webkit-scrollbar-thumb { + background-color: #babac0; + border-radius: $border-radius-base * 2; + border: 6px solid #fff; + } + + .cvat-quality-settings-save-btn { + position: sticky; + z-index: 1; + top: 0; + height: 0; + } + + .ant-divider-horizontal { + margin: $grid-unit-size 0; + } +} diff --git a/cvat-ui/src/components/quality-control/task-quality/mean-quality.tsx b/cvat-ui/src/components/quality-control/task-quality/mean-quality.tsx index bec2fadf134..d501f05f057 100644 --- a/cvat-ui/src/components/quality-control/task-quality/mean-quality.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/mean-quality.tsx @@ -3,7 +3,7 @@ // SPDX-License-Identifier: MIT import React from 'react'; -import { DownloadOutlined, SettingOutlined } from '@ant-design/icons'; +import { DownloadOutlined } from '@ant-design/icons'; import { Col, Row } from 'antd/lib/grid'; import Text from 'antd/lib/typography/Text'; import Button from 'antd/lib/button'; @@ -15,11 +15,10 @@ import { toRepresentation } from '../utils/text-formatting'; interface Props { taskID: number; taskReport: QualityReport | null; - setQualitySettingsVisible: (visible: boolean) => void; } function MeanQuality(props: Props): JSX.Element { - const { taskID, taskReport, setQualitySettingsVisible } = props; + const { taskID, taskReport } = props; const reportSummary = taskReport?.summary; const tooltip = ( @@ -73,12 +72,6 @@ function MeanQuality(props: Props): JSX.Element { ) : null } - - setQualitySettingsVisible(true)} - /> -
); diff --git a/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx b/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx index e9eb16ba3d2..1c1521943f6 100644 --- a/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx @@ -12,16 +12,23 @@ import Form, { FormInstance } from 'antd/lib/form'; import Checkbox from 'antd/lib/checkbox/Checkbox'; import CVATTooltip from 'components/common/cvat-tooltip'; import { QualitySettings } from 'cvat-core-wrapper'; +import { Button, Select } from 'antd/lib'; interface FormProps { form: FormInstance; settings: QualitySettings; + onSave: () => void; } export default function QualitySettingsForm(props: FormProps): JSX.Element | null { - const { form, settings } = props; + const { form, settings, onSave } = props; const initialValues = { + targetMetric: 'accuracy_micro', + targetMetricThreshold: 80, + + jobValidationCount: 3, + lowOverlapThreshold: settings.lowOverlapThreshold * 100, iouThreshold: settings.iouThreshold * 100, compareAttributes: settings.compareAttributes, @@ -121,12 +128,79 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul
+ + + + + General + + + + + + + + + + + + + + + + + Job validation + + + + + + + + + + + + + Shape comparison + - + - + - - - - - Compare attributes - - - - @@ -178,7 +239,7 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul - + - + - + - + - + - + - + - + - + [0]) => void; -} - -interface State { - fetching: boolean; taskReport: QualityReport | null; jobsReports: QualityReport[]; - qualitySettings: { - settings: QualitySettings | null; - fetching: boolean; - visible: boolean; - }, -} - -enum ReducerActionType { - SET_FETCHING = 'SET_FETCHING', - SET_TASK_REPORT = 'SET_TASK_REPORT', - SET_JOBS_REPORTS = 'SET_JOBS_REPORTS', - SET_QUALITY_SETTINGS = 'SET_QUALITY_SETTINGS', - SET_QUALITY_SETTINGS_VISIBLE = 'SET_QUALITY_SETTINGS_VISIBLE', - SET_QUALITY_SETTINGS_FETCHING = 'SET_QUALITY_SETTINGS_FETCHING', + reportRefreshingStatus: string | null; + onJobUpdate: (job: Job, data: Parameters[0]) => void; + onCreateReport: () => void; } -export const reducerActions = { - setFetching: (fetching: boolean) => ( - createAction(ReducerActionType.SET_FETCHING, { fetching }) - ), - setTaskReport: (qualityReport: QualityReport) => ( - createAction(ReducerActionType.SET_TASK_REPORT, { qualityReport }) - ), - setJobsReports: (qualityReports: QualityReport[]) => ( - createAction(ReducerActionType.SET_JOBS_REPORTS, { qualityReports }) - ), - setQualitySettings: (qualitySettings: QualitySettings) => ( - createAction(ReducerActionType.SET_QUALITY_SETTINGS, { qualitySettings }) - ), - setQualitySettingsVisible: (visible: boolean) => ( - createAction(ReducerActionType.SET_QUALITY_SETTINGS_VISIBLE, { visible }) - ), - setQualitySettingsFetching: (fetching: boolean) => ( - createAction(ReducerActionType.SET_QUALITY_SETTINGS_FETCHING, { fetching }) - ), -}; - -const reducer = (state: State, action: ActionUnion): State => { - if (action.type === ReducerActionType.SET_FETCHING) { - return { - ...state, - fetching: action.payload.fetching, - }; - } - - if (action.type === ReducerActionType.SET_TASK_REPORT) { - return { - ...state, - taskReport: action.payload.qualityReport, - }; - } - - if (action.type === ReducerActionType.SET_JOBS_REPORTS) { - return { - ...state, - jobsReports: action.payload.qualityReports, - }; - } - - if (action.type === ReducerActionType.SET_QUALITY_SETTINGS) { - return { - ...state, - qualitySettings: { - ...state.qualitySettings, - settings: action.payload.qualitySettings, - }, - }; - } - - if (action.type === ReducerActionType.SET_QUALITY_SETTINGS_VISIBLE) { - return { - ...state, - qualitySettings: { - ...state.qualitySettings, - visible: action.payload.visible, - }, - }; - } - - if (action.type === ReducerActionType.SET_QUALITY_SETTINGS_FETCHING) { - return { - ...state, - qualitySettings: { - ...state.qualitySettings, - fetching: action.payload.fetching, - }, - }; - } - - return state; -}; - function TaskQualityComponent(props: Props): JSX.Element { - const { task, onJobUpdate } = props; - const isMounted = useIsMounted(); - - const [state, dispatch] = useReducer(reducer, { - fetching: true, - taskReport: null, - jobsReports: [], - qualitySettings: { - settings: null, - fetching: true, - visible: false, - }, - }); - - useEffect(() => { - dispatch(reducerActions.setFetching(true)); - dispatch(reducerActions.setQualitySettingsFetching(true)); - - function handleError(error: Error): void { - if (isMounted()) { - notification.error({ - description: error.toString(), - message: 'Could not initialize quality analytics page', - }); - } - } - - core.analytics.quality.reports({ pageSize: 1, target: 'task', taskID: task.id }).then(([report]) => { - let reportRequest = Promise.resolve([]); - if (report) { - reportRequest = core.analytics.quality.reports({ - pageSize: task.jobs.length, - parentID: report.id, - target: 'job', - }); - } - const settingsRequest = core.analytics.quality.settings.get({ taskID: task.id }); - - Promise.all([reportRequest, settingsRequest]).then(([jobReports, settings]) => { - dispatch(reducerActions.setQualitySettings(settings)); - dispatch(reducerActions.setTaskReport(report || null)); - dispatch(reducerActions.setJobsReports(jobReports)); - }).catch(handleError).finally(() => { - dispatch(reducerActions.setQualitySettingsFetching(false)); - dispatch(reducerActions.setFetching(false)); - }); - }).catch(handleError); - }, [task?.id]); + const { + task, onJobUpdate, taskReport, jobsReports, reportRefreshingStatus, onCreateReport, + } = props; const gtJob = task.jobs.find((job: Job) => job.type === JobType.GROUND_TRUTH); - const { - fetching, taskReport, jobsReports, - qualitySettings: { - settings: qualitySettings, fetching: qualitySettingsFetching, visible: qualitySettingsVisible, - }, - } = state; - return (
{ - fetching ? ( - - ) : ( + gtJob ? ( <> + + + +
diff --git a/cvat-ui/src/components/task-page/top-bar.tsx b/cvat-ui/src/components/task-page/top-bar.tsx index cab6e21bac0..a242aef4441 100644 --- a/cvat-ui/src/components/task-page/top-bar.tsx +++ b/cvat-ui/src/components/task-page/top-bar.tsx @@ -25,6 +25,9 @@ export default function DetailsComponent(props: DetailsComponentProps): JSX.Elem const onViewAnalytics = useCallback(() => { history.push(`/tasks/${taskInstance.id}/analytics`); }, [history]); + const onViewQualityControl = (): void => { + history.push(`/tasks/${taskInstance.id}/quality-control`); + }; return ( @@ -59,6 +62,7 @@ export default function DetailsComponent(props: DetailsComponentProps): JSX.Elem )} > From 4d402287a2d71010fc83b6e80255148ae910721d Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Wed, 24 Jul 2024 17:50:31 +0300 Subject: [PATCH 08/79] small fix --- .../components/create-task-page/quality-configuration-form.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cvat-ui/src/components/create-task-page/quality-configuration-form.tsx b/cvat-ui/src/components/create-task-page/quality-configuration-form.tsx index af41915ac9a..acab1da4558 100644 --- a/cvat-ui/src/components/create-task-page/quality-configuration-form.tsx +++ b/cvat-ui/src/components/create-task-page/quality-configuration-form.tsx @@ -118,7 +118,7 @@ export default function QualityConfigurationForm(props: Props): React.JSX.Elemen validationFormItems.push([ ( - Ground truth + Ground Truth ), 20, ]); From f4c747b49fe2792e841cfe4b28d3ddf71a88298e Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Thu, 25 Jul 2024 10:25:27 +0300 Subject: [PATCH 09/79] moved sorter to table utils --- .../quality-control/task-quality/job-list.tsx | 48 +--------------- .../quality-control/utils/table-utils.ts | 55 +++++++++++++++++++ 2 files changed, 58 insertions(+), 45 deletions(-) create mode 100644 cvat-ui/src/components/quality-control/utils/table-utils.ts diff --git a/cvat-ui/src/components/quality-control/task-quality/job-list.tsx b/cvat-ui/src/components/quality-control/task-quality/job-list.tsx index 0f816fa16f8..4940598d1f3 100644 --- a/cvat-ui/src/components/quality-control/task-quality/job-list.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/job-list.tsx @@ -6,7 +6,7 @@ import React, { useState } from 'react'; import { useHistory } from 'react-router'; import { Row, Col } from 'antd/lib/grid'; import { DownloadOutlined, QuestionCircleOutlined } from '@ant-design/icons'; -import { ColumnFilterItem, Key } from 'antd/lib/table/interface'; +import { Key } from 'antd/lib/table/interface'; import Table from 'antd/lib/table'; import Button from 'antd/lib/button'; import Text from 'antd/lib/typography/Text'; @@ -19,6 +19,7 @@ import { getQualityColor } from 'utils/quality-color'; import Tag from 'antd/lib/tag'; import { toRepresentation } from '../utils/text-formatting'; import { ConflictsTooltip } from './gt-conflicts'; +import { sorter, collectUsers } from '../utils/table-utils'; interface Props { task: Task; @@ -37,49 +38,6 @@ function JobListComponent(props: Props): JSX.Element { const { id: taskId, jobs } = taskInstance; const [renderedJobs] = useState(jobs.filter((job: Job) => job.type === JobType.ANNOTATION)); - function sorter(path: string) { - return (obj1: any, obj2: any): number => { - let currentObj1 = obj1; - let currentObj2 = obj2; - let field1: string | number | null = null; - let field2: string | number | null = null; - for (const pathSegment of path.split('.')) { - field1 = currentObj1 && pathSegment in currentObj1 ? currentObj1[pathSegment] : null; - field2 = currentObj2 && pathSegment in currentObj2 ? currentObj2[pathSegment] : null; - currentObj1 = currentObj1 && pathSegment in currentObj1 ? currentObj1[pathSegment] : null; - currentObj2 = currentObj2 && pathSegment in currentObj2 ? currentObj2[pathSegment] : null; - } - - if (field1 !== null && field2 !== null) { - if (typeof field1 === 'string' && typeof field2 === 'string') return field1.localeCompare(field2); - if (typeof field1 === 'number' && typeof field2 === 'number' && - Number.isFinite(field1) && Number.isFinite(field2)) return field1 - field2; - } - - if (field1 === null && field2 === null) return 0; - - if (field1 === null || (typeof field1 === 'number' && !Number.isFinite(field1))) { - return -1; - } - - return 1; - }; - } - - function collectUsers(path: string): ColumnFilterItem[] { - return Array.from( - new Set( - Object.values(jobsReports).map((report: QualityReport) => { - if (report[path] === null) { - return null; - } - - return report[path].username; - }), - ), - ).map((value: string | null) => ({ text: value || 'Is Empty', value: value || false })); - } - const columns = [ { title: 'Job', @@ -133,7 +91,7 @@ function JobListComponent(props: Props): JSX.Element { {report?.assignee?.username} ), sorter: sorter('assignee.assignee.username'), - filters: collectUsers('assignee'), + filters: collectUsers(jobsReports, 'assignee'), onFilter: (value: boolean | Key, record: any) => ( record.assignee.assignee?.username || false ) === value, diff --git a/cvat-ui/src/components/quality-control/utils/table-utils.ts b/cvat-ui/src/components/quality-control/utils/table-utils.ts new file mode 100644 index 00000000000..6fa1234ec6f --- /dev/null +++ b/cvat-ui/src/components/quality-control/utils/table-utils.ts @@ -0,0 +1,55 @@ +// Copyright (C) 2024 CVAT.ai Corporation +// +// SPDX-License-Identifier: MIT + +import { ColumnFilterItem } from 'antd/lib/table/interface'; +import { QualityReport } from 'cvat-core-wrapper'; + +export function sorter(path: string) { + return (obj1: any, obj2: any): number => { + let currentObj1 = obj1; + let currentObj2 = obj2; + let field1: string | number | null = null; + let field2: string | number | null = null; + for (const pathSegment of path.split('.')) { + field1 = currentObj1 && pathSegment in currentObj1 ? currentObj1[pathSegment] : null; + field2 = currentObj2 && pathSegment in currentObj2 ? currentObj2[pathSegment] : null; + currentObj1 = currentObj1 && pathSegment in currentObj1 ? currentObj1[pathSegment] : null; + currentObj2 = currentObj2 && pathSegment in currentObj2 ? currentObj2[pathSegment] : null; + } + + if (field1 !== null && field2 !== null) { + if (typeof field1 === 'string' && typeof field2 === 'string') return field1.localeCompare(field2); + if (typeof field1 === 'number' && typeof field2 === 'number' && + Number.isFinite(field1) && Number.isFinite(field2)) return field1 - field2; + if (typeof field1 === 'boolean' && typeof field2 === 'boolean') { + if (field1 === field2) { + return 0; + } + return field1 ? -1 : 1; + } + } + + if (field1 === null && field2 === null) return 0; + + if (field1 === null || (typeof field1 === 'number' && !Number.isFinite(field1))) { + return -1; + } + + return 1; + }; +} + +export function collectUsers(reports: Record, path: string): ColumnFilterItem[] { + return Array.from( + new Set( + Object.values(reports).map((report: QualityReport) => { + if (report[path] === null) { + return null; + } + + return report[path].username; + }), + ), + ).map((value: string | null) => ({ text: value || 'Is Empty', value: value || false })); +} From 097c006082d205a0e514f656e5143c15b12a2661 Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Thu, 25 Jul 2024 11:59:43 +0300 Subject: [PATCH 10/79] added new quality settings params --- cvat-core/src/quality-settings.ts | 29 ++++++++++++++ cvat-core/src/server-response-types.ts | 2 + .../quality-control/quality-control-page.tsx | 40 ++++++++++--------- .../task-quality/quality-settings-form.tsx | 10 ++--- cvat-ui/src/cvat-core-wrapper.ts | 3 +- 5 files changed, 59 insertions(+), 25 deletions(-) diff --git a/cvat-core/src/quality-settings.ts b/cvat-core/src/quality-settings.ts index 73f9245d131..1e88156c01c 100644 --- a/cvat-core/src/quality-settings.ts +++ b/cvat-core/src/quality-settings.ts @@ -6,8 +6,17 @@ import { SerializedQualitySettingsData } from './server-response-types'; import PluginRegistry from './plugins'; import serverProxy from './server-proxy'; +export enum TargetMetric { + ACCURACY_MICRO = 'accuracy_micro', + PRECISION_MICRO = 'precision_micro', + RECALL_MICRO = 'recall_micro', + DICE_MACRO = 'dice_macro', +} + export default class QualitySettings { #id: number; + #targetMetric: TargetMetric; + #targetMetricThreshold: number; #task: number; #iouThreshold: number; #oksSigma: number; @@ -25,6 +34,8 @@ export default class QualitySettings { constructor(initialData: SerializedQualitySettingsData) { this.#id = initialData.id; this.#task = initialData.task; + this.#targetMetric = initialData.target_metric as TargetMetric; + this.#targetMetricThreshold = initialData.target_metric_threshold; this.#iouThreshold = initialData.iou_threshold; this.#oksSigma = initialData.oks_sigma; this.#lineThickness = initialData.line_thickness; @@ -143,6 +154,22 @@ export default class QualitySettings { this.#compareAttributes = newVal; } + get targetMetric(): TargetMetric { + return this.#targetMetric; + } + + set targetMetric(newVal: TargetMetric) { + this.#targetMetric = newVal; + } + + get targetMetricThreshold(): number { + return this.#targetMetricThreshold; + } + + set targetMetricThreshold(newVal: number) { + this.#targetMetricThreshold = newVal; + } + public toJSON(): SerializedQualitySettingsData { const result: SerializedQualitySettingsData = { iou_threshold: this.#iouThreshold, @@ -157,6 +184,8 @@ export default class QualitySettings { object_visibility_threshold: this.#objectVisibilityThreshold, panoptic_comparison: this.#panopticComparison, compare_attributes: this.#compareAttributes, + target_metric: this.#targetMetric, + target_metric_threshold: this.#targetMetricThreshold, }; return result; diff --git a/cvat-core/src/server-response-types.ts b/cvat-core/src/server-response-types.ts index a85a157ec8e..39fff964b94 100644 --- a/cvat-core/src/server-response-types.ts +++ b/cvat-core/src/server-response-types.ts @@ -241,6 +241,8 @@ export type QualitySettingsFilter = Camelized; export interface SerializedQualitySettingsData { id?: number; task?: number; + target_metric?: string; + target_metric_threshold?: number; iou_threshold?: number; oks_sigma?: number; line_thickness?: number; diff --git a/cvat-ui/src/components/quality-control/quality-control-page.tsx b/cvat-ui/src/components/quality-control/quality-control-page.tsx index 36a5fef084b..2649184aaf3 100644 --- a/cvat-ui/src/components/quality-control/quality-control-page.tsx +++ b/cvat-ui/src/components/quality-control/quality-control-page.tsx @@ -22,7 +22,7 @@ import { updateJobAsync } from 'actions/jobs-actions'; import CVATLoadingSpinner from 'components/common/loading-spinner'; import GoBackButton from 'components/common/go-back-button'; import { CombinedState } from 'reducers'; -import { createAction } from 'utils/redux'; +import { ActionUnion, createAction } from 'utils/redux'; import TaskQualityComponent from './task-quality/task-quality-component'; import QualitySettingsComponent from './quality-settings'; @@ -232,24 +232,26 @@ function QualityControlPage(): JSX.Element { }, [instance]); const onCreateReport = useCallback(() => { - const onUpdate = (status: RQStatus, progress: number, message: string): void => { - dispatch(reducerActions.setReportRefreshingStatus(message)); - }; - - const body = { taskID: instance.id }; - - core.analytics.quality.calculate(body, onUpdate).then(() => { - receiveReport(instance); - }).finally(() => { - dispatch(reducerActions.setReportRefreshingStatus(null)); - }).catch((error: unknown) => { - if (isMounted()) { - notification.error({ - message: 'Error occurred during requesting performance report', - description: error instanceof Error ? error.message : '', - }); - } - }); + if (instance) { + const onUpdate = (status: RQStatus, progress: number, message: string): void => { + dispatch(reducerActions.setReportRefreshingStatus(message)); + }; + + const body = { taskID: instance.id }; + + core.analytics.quality.calculate(body, onUpdate).then(() => { + receiveReport(instance); + }).finally(() => { + dispatch(reducerActions.setReportRefreshingStatus(null)); + }).catch((error: unknown) => { + if (isMounted()) { + notification.error({ + message: 'Error occurred during requesting performance report', + description: error instanceof Error ? error.message : '', + }); + } + }); + } }, [instance]); const onSaveQualitySettings = useCallback(async (values) => { diff --git a/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx b/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx index 1c1521943f6..af26359ca9f 100644 --- a/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx @@ -11,7 +11,7 @@ import Divider from 'antd/lib/divider'; import Form, { FormInstance } from 'antd/lib/form'; import Checkbox from 'antd/lib/checkbox/Checkbox'; import CVATTooltip from 'components/common/cvat-tooltip'; -import { QualitySettings } from 'cvat-core-wrapper'; +import { QualitySettings, TargetMetric } from 'cvat-core-wrapper'; import { Button, Select } from 'antd/lib'; interface FormProps { @@ -154,16 +154,16 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul style={{ width: '70%' }} virtual={false} > - + Accuracy micro - + Precision micro - + Recall micro - + Dice macro diff --git a/cvat-ui/src/cvat-core-wrapper.ts b/cvat-ui/src/cvat-core-wrapper.ts index 48bc735a148..295135e23e1 100644 --- a/cvat-ui/src/cvat-core-wrapper.ts +++ b/cvat-ui/src/cvat-core-wrapper.ts @@ -21,7 +21,7 @@ import { Job, Task } from 'cvat-core/src/session'; import Project from 'cvat-core/src/project'; import QualityReport, { QualitySummary } from 'cvat-core/src/quality-report'; import QualityConflict, { AnnotationConflict, ConflictSeverity } from 'cvat-core/src/quality-conflict'; -import QualitySettings from 'cvat-core/src/quality-settings'; +import QualitySettings, { TargetMetric } from 'cvat-core/src/quality-settings'; import { FramesMetaData, FrameData } from 'cvat-core/src/frames'; import { ServerError, RequestError } from 'cvat-core/src/exceptions'; import { @@ -91,6 +91,7 @@ export { QualityReport, QualityConflict, QualitySettings, + TargetMetric, AnnotationConflict, ConflictSeverity, FramesMetaData, From ff472bfa392867f52be6156e475670fc97c3a9a0 Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Thu, 25 Jul 2024 16:49:58 +0300 Subject: [PATCH 11/79] added support of colors corresponding to target threshold --- .../quality-control/quality-control-page.tsx | 37 ++++++++++++------- .../quality-control/task-quality/job-list.tsx | 4 +- .../task-quality/task-quality-component.tsx | 6 ++- cvat-ui/src/utils/quality-color.ts | 22 ++++++++--- 4 files changed, 47 insertions(+), 22 deletions(-) diff --git a/cvat-ui/src/components/quality-control/quality-control-page.tsx b/cvat-ui/src/components/quality-control/quality-control-page.tsx index 2649184aaf3..8e3c361e307 100644 --- a/cvat-ui/src/components/quality-control/quality-control-page.tsx +++ b/cvat-ui/src/components/quality-control/quality-control-page.tsx @@ -23,6 +23,7 @@ import CVATLoadingSpinner from 'components/common/loading-spinner'; import GoBackButton from 'components/common/go-back-button'; import { CombinedState } from 'reducers'; import { ActionUnion, createAction } from 'utils/redux'; +import { BASE_TARGET_THRESHOLD, qualityColorGenerator, QualityColors } from 'utils/quality-color'; import TaskQualityComponent from './task-quality/task-quality-component'; import QualitySettingsComponent from './quality-settings'; @@ -52,6 +53,7 @@ interface State { settings: QualitySettings | null; fetching: boolean; visible: boolean; + getQualityColor: (value?: number) => QualityColors; }, } @@ -117,6 +119,7 @@ const reducer = (state: State, action: ActionUnion): Stat qualitySettings: { ...state.qualitySettings, settings: action.payload.qualitySettings, + getQualityColor: qualityColorGenerator(action.payload.qualitySettings.targetMetricThreshold), }, }; } @@ -152,6 +155,7 @@ function QualityControlPage(): JSX.Element { settings: null, fetching: true, visible: false, + getQualityColor: qualityColorGenerator(BASE_TARGET_THRESHOLD), }, }); @@ -165,7 +169,7 @@ function QualityControlPage(): JSX.Element { const pluginTabs = usePlugins( (appState: CombinedState) => appState.plugins.components.qualityControlPage.tabs.items, {}, - { task: instance }, + { task: instance, getQualityColor: state.qualitySettings.getQualityColor }, ); const supportedTabs = ['Overview', 'Settings', ...pluginTabs.map(({ component: Component }) => Component.name)]; const [activeTab, setTab] = useState(getTabFromHash(supportedTabs)); @@ -196,7 +200,7 @@ function QualityControlPage(): JSX.Element { } }; - const receiveReport = useCallback((taskInstance: Task) => { + const receiveReport = useCallback(async (taskInstance: Task) => { dispatch(reducerActions.setFetching(true)); dispatch(reducerActions.setQualitySettingsFetching(true)); @@ -209,10 +213,11 @@ function QualityControlPage(): JSX.Element { } } - core.analytics.quality.reports({ pageSize: 1, target: 'task', taskID: taskInstance.id }).then(([report]) => { - let reportRequest = Promise.resolve([]); + try { + const [report] = await core.analytics.quality.reports({ pageSize: 1, target: 'task', taskID: taskInstance.id }); + let jobReportsRequest = Promise.resolve([]); if (report) { - reportRequest = core.analytics.quality.reports({ + jobReportsRequest = core.analytics.quality.reports({ pageSize: taskInstance.jobs.length, parentID: report.id, target: 'job', @@ -220,7 +225,7 @@ function QualityControlPage(): JSX.Element { } const settingsRequest = core.analytics.quality.settings.get({ taskID: taskInstance.id }); - Promise.all([reportRequest, settingsRequest]).then(([jobReports, settings]) => { + await Promise.all([jobReportsRequest, settingsRequest]).then(([jobReports, settings]) => { dispatch(reducerActions.setQualitySettings(settings)); dispatch(reducerActions.setTaskReport(report || null)); dispatch(reducerActions.setJobsReports(jobReports)); @@ -228,7 +233,9 @@ function QualityControlPage(): JSX.Element { dispatch(reducerActions.setQualitySettingsFetching(false)); dispatch(reducerActions.setFetching(false)); }); - }).catch(handleError); + } catch (error: unknown) { + handleError(error as Error); + } }, [instance]); const onCreateReport = useCallback(() => { @@ -299,11 +306,11 @@ function QualityControlPage(): JSX.Element { useEffect(() => { if (Number.isInteger(requestedInstanceID) && ['project', 'task', 'job'].includes(requestedInstanceType)) { dispatch(reducerActions.setFetching(true)); - Promise.all([ - receiveInstance(requestedInstanceType, requestedInstanceID), - ]).then((result) => Promise.all([ - receiveReport(result[0]), - ])); + receiveInstance(requestedInstanceType, requestedInstanceID).then((task) => { + if (task) { + receiveReport(task); + } + }); } else { notification.error({ message: 'Could not load this page', @@ -376,6 +383,7 @@ function QualityControlPage(): JSX.Element { reportRefreshingStatus={state.reportRefreshingStatus} taskReport={state.taskReport} jobsReports={state.jobsReports} + getQualityColor={state.qualitySettings.getQualityColor} /> ), }, 10]); @@ -398,7 +406,10 @@ function QualityControlPage(): JSX.Element { key: Component.name, label: Component.name, children: ( - + ), }, weight])); diff --git a/cvat-ui/src/components/quality-control/task-quality/job-list.tsx b/cvat-ui/src/components/quality-control/task-quality/job-list.tsx index 4940598d1f3..e1485dfce25 100644 --- a/cvat-ui/src/components/quality-control/task-quality/job-list.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/job-list.tsx @@ -15,8 +15,8 @@ import { Task, Job, JobType, QualityReport, getCore, } from 'cvat-core-wrapper'; import CVATTooltip from 'components/common/cvat-tooltip'; -import { getQualityColor } from 'utils/quality-color'; import Tag from 'antd/lib/tag'; +import { QualityColors } from 'utils/quality-color'; import { toRepresentation } from '../utils/text-formatting'; import { ConflictsTooltip } from './gt-conflicts'; import { sorter, collectUsers } from '../utils/table-utils'; @@ -24,12 +24,14 @@ import { sorter, collectUsers } from '../utils/table-utils'; interface Props { task: Task; jobsReports: QualityReport[]; + getQualityColor: (value?: number) => QualityColors; } function JobListComponent(props: Props): JSX.Element { const { task: taskInstance, jobsReports: jobsReportsArray, + getQualityColor, } = props; const jobsReports: Record = jobsReportsArray diff --git a/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx b/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx index 7acde465c85..431ba414f58 100644 --- a/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx @@ -13,6 +13,7 @@ import { } from 'cvat-core-wrapper'; import React from 'react'; import CVATTooltip from 'components/common/cvat-tooltip'; +import { QualityColors } from 'utils/quality-color'; import EmptyGtJob from './empty-job'; import GtConflicts from './gt-conflicts'; import Issues from './issues'; @@ -26,11 +27,12 @@ interface Props { reportRefreshingStatus: string | null; onJobUpdate: (job: Job, data: Parameters[0]) => void; onCreateReport: () => void; + getQualityColor: (value?: number) => QualityColors; } function TaskQualityComponent(props: Props): JSX.Element { const { - task, onJobUpdate, taskReport, jobsReports, reportRefreshingStatus, onCreateReport, + task, onJobUpdate, taskReport, jobsReports, reportRefreshingStatus, onCreateReport, getQualityColor, } = props; const gtJob = task.jobs.find((job: Job) => job.type === JobType.GROUND_TRUTH); @@ -90,7 +92,7 @@ function TaskQualityComponent(props: Props): JSX.Element { - + ) : ( diff --git a/cvat-ui/src/utils/quality-color.ts b/cvat-ui/src/utils/quality-color.ts index 1f94d4cfdc2..78892459f3b 100644 --- a/cvat-ui/src/utils/quality-color.ts +++ b/cvat-ui/src/utils/quality-color.ts @@ -9,13 +9,23 @@ export enum QualityColors { GRAY = '#8c8c8c', } -const thresholds = { - low: 75, - middle: 82, - high: 91, +export const BASE_TARGET_THRESHOLD = 80; + +const ratios = { + low: 0.82, + middle: 0.9, + high: 1, }; -export function getQualityColor(value?: number): QualityColors { +export const qualityColorGenerator = (targetMetric?: number) => (value?: number) => { + const baseValue = targetMetric ?? BASE_TARGET_THRESHOLD; + + const thresholds = { + low: baseValue * ratios.low, + middle: baseValue * ratios.middle, + high: baseValue * ratios.high, + }; + if (!value) { return QualityColors.GRAY; } @@ -31,4 +41,4 @@ export function getQualityColor(value?: number): QualityColors { } return QualityColors.GRAY; -} +}; From 04fb850fb40c68ab75257aef3299fe0d863ea156 Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Thu, 1 Aug 2024 14:39:33 +0300 Subject: [PATCH 12/79] made quality form public --- cvat-core/src/session-implementation.ts | 16 +- cvat-core/src/session.ts | 26 +- cvat-ui/src/actions/tasks-actions.ts | 12 +- .../create-task-page/create-task-content.tsx | 41 ++- .../quality-configuration-form.tsx | 289 ++++++++---------- cvat-ui/src/reducers/index.ts | 8 - cvat-ui/src/reducers/plugins-reducer.ts | 8 - 7 files changed, 211 insertions(+), 189 deletions(-) diff --git a/cvat-core/src/session-implementation.ts b/cvat-core/src/session-implementation.ts index 944e2a7ad7d..b6fff055fa3 100644 --- a/cvat-core/src/session-implementation.ts +++ b/cvat-core/src/session-implementation.ts @@ -666,7 +666,7 @@ export function implementTask(Task: typeof TaskClass): typeof TaskClass { }); } - let taskSpec: any = { + const taskSpec: any = { name: this.name, labels: this.labels.map((el) => el.toJSON()), }; @@ -695,8 +695,18 @@ export function implementTask(Task: typeof TaskClass): typeof TaskClass { taskSpec.source_storage = this.sourceStorage.toJSON(); } - const { fields } = options; - taskSpec = { ...taskSpec, ...fields }; + if (this.validationMethod !== 'undefined') { + taskSpec.validation_method = this.validationMethod; + } + if (typeof this.validationFramesPercent !== 'undefined') { + taskSpec.validation_frames_percent = this.validationFramesPercent; + } + if (typeof this.validationFramesPerJob !== 'undefined') { + taskSpec.validation_frames_per_job = this.validationFramesPerJob; + } + if (typeof this.frameSelectionMethod !== 'undefined') { + taskSpec.frame_selection_method = this.frameSelectionMethod; + } const taskDataSpec = { client_files: this.clientFiles, diff --git a/cvat-core/src/session.ts b/cvat-core/src/session.ts index 6066783c06c..3a57cff8e6e 100644 --- a/cvat-core/src/session.ts +++ b/cvat-core/src/session.ts @@ -730,6 +730,11 @@ export class Task extends Session { public readonly cloudStorageID: number; public readonly sortingMethod: string; + public readonly validationMethod: string; + public readonly validationFramesPercent: number; + public readonly validationFramesPerJob: number; + public readonly frameSelectionMethod: string; + constructor(initialData: Readonly & { labels?: SerializedLabel[]; progress?: SerializedTask['jobs']; @@ -775,7 +780,10 @@ export class Task extends Session { sorting_method: undefined, files: undefined, - quality_settings: undefined, + validation_method: undefined, + validation_frames_percent: undefined, + validation_frames_per_job: undefined, + frame_selection_method: undefined, }; const updateTrigger = new FieldUpdateTrigger(); @@ -785,7 +793,7 @@ export class Task extends Session { data[property] = initialData[property]; } } - + console.log(data); if (data.assignee) data.assignee = new User(data.assignee); if (data.owner) data.owner = new User(data.owner); @@ -1103,6 +1111,18 @@ export class Task extends Session { progress: { get: () => data.progress, }, + validationFramesPercent: { + get: () => data.validation_frames_percent, + }, + validationFramesPerJob: { + get: () => data.validation_frames_per_job, + }, + frameSelectionMethod: { + get: () => data.frame_selection_method, + }, + validationMethod: { + get: () => data.validation_method, + }, _internalData: { get: () => data, }, @@ -1118,7 +1138,7 @@ export class Task extends Session { return result; } - async save(options?: { requestStatusCallback?: (request: Request) => void, fields: any }): Promise { + async save(options?: { requestStatusCallback?: (request: Request) => void }): Promise { const result = await PluginRegistry.apiWrapper.call(this, Task.prototype.save, options); return result; } diff --git a/cvat-ui/src/actions/tasks-actions.ts b/cvat-ui/src/actions/tasks-actions.ts index 83b6f363ae0..77c6aad2303 100644 --- a/cvat-ui/src/actions/tasks-actions.ts +++ b/cvat-ui/src/actions/tasks-actions.ts @@ -11,6 +11,7 @@ import { import { filterNull } from 'utils/filter-null'; import { ThunkDispatch, ThunkAction } from 'utils/redux'; +import { ValidationMethod } from 'components/create-task-page/quality-configuration-form'; import { getInferenceStatusAsync } from './models-actions'; import { updateRequestProgress } from './requests-actions'; @@ -254,6 +255,16 @@ ThunkAction { description.cloud_storage_id = data.cloudStorageId; } + if (data.quality.validationMethod === ValidationMethod.GT) { + description.validation_method = ValidationMethod.GT; + description.validation_frames_percent = data.quality.validationFramesPercent; + description.frame_selection_method = data.quality.frameSelectionMethod; + } else if (data.quality.validationMethod === ValidationMethod.HONEYPOTS) { + description.validation_method = ValidationMethod.HONEYPOTS; + description.validation_frames_percent = data.quality.validationFramesPercent; + description.validation_frames_per_job = data.quality.validationFramesPerJob; + } + const taskInstance = new cvat.classes.Task(description); taskInstance.clientFiles = data.files.local; taskInstance.serverFiles = data.files.share.concat(data.files.cloudStorage); @@ -279,7 +290,6 @@ ThunkAction { onProgress?.(`${message} ${progress ? `${Math.floor(progress * 100)}%` : ''}. ${helperMessage}`); if (request.id) updateRequestProgress(request, dispatch); }, - fields: { ...data.quality }, }); dispatch(updateTaskInState(savedTask)); diff --git a/cvat-ui/src/components/create-task-page/create-task-content.tsx b/cvat-ui/src/components/create-task-page/create-task-content.tsx index 48a2c582c55..9d254c4770e 100644 --- a/cvat-ui/src/components/create-task-page/create-task-content.tsx +++ b/cvat-ui/src/components/create-task-page/create-task-content.tsx @@ -21,12 +21,13 @@ import FileManagerComponent, { Files } from 'components/file-manager/file-manage import { RemoteFile } from 'components/file-manager/remote-browser'; import { getFileContentType, getContentTypeRemoteFile, getFileNameFromPath } from 'utils/files'; +import { FrameSelectionMethod } from 'components/create-job-page/job-form'; import BasicConfigurationForm, { BaseConfiguration } from './basic-configuration-form'; import ProjectSearchField from './project-search-field'; import ProjectSubsetField from './project-subset-field'; import MultiTasksProgress from './multi-task-progress'; import AdvancedConfigurationForm, { AdvancedConfiguration, SortingMethod } from './advanced-configuration-form'; -import QualityConfigurationForm, { QualityConfiguration } from './quality-configuration-form'; +import QualityConfigurationForm, { QualityConfiguration, ValidationMethod } from './quality-configuration-form'; type TabName = 'local' | 'share' | 'remote' | 'cloudStorage'; const core = getCore(); @@ -86,6 +87,10 @@ const defaultState: State = { useProjectTargetStorage: true, }, quality: { + validationMethod: ValidationMethod.NONE, + validationFramesPercent: 5, + validationFramesPerJob: 1, + frameSelectionMethod: FrameSelectionMethod.RANDOM, }, labels: [], files: { @@ -252,14 +257,13 @@ class CreateTaskContent extends React.PureComponent { - console.log(values, reset); - const { quality } = this.state; - this.setState({ - quality: { ...(reset ? {} : quality), ...values }, - }); - console.log({ ...(reset ? {} : quality), ...values }); - }; + private handleSubmitQualityConfiguration = (values: QualityConfiguration): Promise => ( + new Promise((resolve) => { + this.setState({ + quality: { ...values }, + }, resolve); + }) + ); private handleSubmitAdvancedConfiguration = (values: AdvancedConfiguration): Promise => ( new Promise((resolve) => { @@ -299,6 +303,15 @@ class CreateTaskContent extends React.PureComponent { + this.setState((state) => ({ + quality: { + ...state.quality, + validationMethod: value, + }, + })); + }; + private focusToForm = (): void => { this.basicConfigurationComponent.current?.focus(); }; @@ -446,6 +459,9 @@ class CreateTaskContent extends React.PureComponent { + if (this.qualityConfigurationComponent.current) { + this.qualityConfigurationComponent.current.submit(); + } if (this.advancedConfigurationComponent.current) { return this.advancedConfigurationComponent.current.submit(); } @@ -893,6 +909,8 @@ class CreateTaskContent extends React.PureComponent ), }]} diff --git a/cvat-ui/src/components/create-task-page/quality-configuration-form.tsx b/cvat-ui/src/components/create-task-page/quality-configuration-form.tsx index acab1da4558..554f3635afe 100644 --- a/cvat-ui/src/components/create-task-page/quality-configuration-form.tsx +++ b/cvat-ui/src/components/create-task-page/quality-configuration-form.tsx @@ -2,183 +2,160 @@ // // SPDX-License-Identifier: MIT -import React, { useEffect, useState } from 'react'; +import React, { RefObject } from 'react'; import Input from 'antd/lib/input'; -import Form from 'antd/lib/form'; -import { usePlugins } from 'utils/hooks'; -import { CombinedState } from 'reducers'; +import Form, { FormInstance } from 'antd/lib/form'; import { PercentageOutlined } from '@ant-design/icons'; import Radio from 'antd/lib/radio'; import { FrameSelectionMethod } from 'components/create-job-page/job-form'; -import { Col } from 'antd/lib/grid'; +import { Col, Row } from 'antd/lib/grid'; import Select from 'antd/lib/select'; -export interface QualityConfiguration {} +export interface QualityConfiguration { + validationMethod: ValidationMethod; + validationFramesPercent: number; + validationFramesPerJob: number; + frameSelectionMethod: FrameSelectionMethod; +} interface Props { - onChange(values: QualityConfiguration, reset?: boolean): void; + onSubmit(values: QualityConfiguration): Promise; + initialValues: QualityConfiguration; + validationMethod: ValidationMethod; + onChangeValidationMethod: (method: ValidationMethod) => void; } -enum ValidationMethod { +export enum ValidationMethod { NONE = 'none', GT = 'gt_job', + HONEYPOTS = 'gt_pool', } -const initialValues = { - validation_method: ValidationMethod.NONE, -}; - -export default function QualityConfigurationForm(props: Props): React.JSX.Element { - const { onChange } = props; - const [currentValidationMethod, setCurrentValidationMethod] = useState(ValidationMethod.NONE); - - useEffect(() => { - onChange(initialValues); - }, []); +export default class QualityConfigurationForm extends React.PureComponent { + private formRef: RefObject; - useEffect(() => { - if (currentValidationMethod === ValidationMethod.GT) { - onChange({ - validation_method: ValidationMethod.GT, - validation_frames_percent: 5, - frame_selection_method: FrameSelectionMethod.RANDOM, - }, true); - } else if (currentValidationMethod === ValidationMethod.NONE) { - onChange({ - validation_method: ValidationMethod.NONE, - }, true); - } - }, [currentValidationMethod]); - - let paramsBlock: JSX.Element | null = null; - if (currentValidationMethod === ValidationMethod.GT) { - paramsBlock = ( - <> - - - - - - - - } /> - - - - - ); + public constructor(props: Props) { + super(props); + this.formRef = React.createRef(); } - const validationMethodPlugins = usePlugins( - (state: CombinedState) => state.plugins.components.createTaskPage.qualityForm.validationMethods.items, - props, - { currentValidationMethod }, - ); - const validationMethodParamsPlugins = usePlugins( - (state: CombinedState) => state.plugins.components.createTaskPage.qualityForm.validationMethods.params, - props, - { currentValidationMethod }, - ); - - const validationFormItems: [JSX.Element, number][] = []; - validationFormItems.push([ - ( - - None - - ), 10, - ]); - validationFormItems.push([ - ( - - Ground Truth - - ), 20, - ]); - validationFormItems.push(...validationMethodPlugins.map(({ component: Component, weight }, index: number) => ( - [, weight] as [JSX.Element, number] - ))); + public submit(): Promise { + const { onSubmit } = this.props; + if (this.formRef.current) { + return this.formRef.current.validateFields().then((values: QualityConfiguration) => { + onSubmit(values); + }); + } - const validationParamsItems: [JSX.Element, number][] = []; - if (paramsBlock) { - validationParamsItems.push([ - paramsBlock, 20, - ]); + return Promise.reject(new Error('Qualiuty form ref is empty')); } - validationParamsItems - .push(...validationMethodParamsPlugins.map(({ component: Component, weight }, index: number) => ( - [, weight] as [JSX.Element, number] - ))); + public render(): JSX.Element { + const { initialValues, validationMethod, onChangeValidationMethod } = this.props; + + let paramsBlock: JSX.Element | null = null; + if (validationMethod === ValidationMethod.GT) { + paramsBlock = ( + <> + + + + + + + + } /> + + + + ); + } else if (validationMethod === ValidationMethod.HONEYPOTS) { + paramsBlock = ( + + + + } /> + + + + + } /> + + + + ); + } - return ( - { - console.log(e); - const { value } = e.target; - const key = e.target.name; - if (key !== 'validation_method') { - onChange({ [key]: value }); - } - }} - initialValues={initialValues} - > - - { - setCurrentValidationMethod(e.target.value); - }} + - - { validationFormItems.sort((item1, item2) => item1[1] - item2[1]) - .map((item) => item[0]) } - - - { validationParamsItems.sort((item1, item2) => item1[1] - item2[1]) - .map((item) => item[0]) } - - ); + { + onChangeValidationMethod(e.target.value); + }} + > + + None + + + Ground Truth + + + Honeypots + + +
+ { paramsBlock } + + ); + } } diff --git a/cvat-ui/src/reducers/index.ts b/cvat-ui/src/reducers/index.ts index ac75391b0d0..648eb6889ef 100644 --- a/cvat-ui/src/reducers/index.ts +++ b/cvat-ui/src/reducers/index.ts @@ -284,14 +284,6 @@ export interface PluginsState { }; }; }; - createTaskPage: { - qualityForm: { - validationMethods: { - items: PluginComponent[]; - params: PluginComponent[]; - } - }, - }; qualityControlPage:{ tabs: { items: PluginComponent[]; diff --git a/cvat-ui/src/reducers/plugins-reducer.ts b/cvat-ui/src/reducers/plugins-reducer.ts index dc5d157e8d1..87fb7470299 100644 --- a/cvat-ui/src/reducers/plugins-reducer.ts +++ b/cvat-ui/src/reducers/plugins-reducer.ts @@ -47,14 +47,6 @@ const defaultState: PluginsState = { }, }, }, - createTaskPage: { - qualityForm: { - validationMethods: { - items: [], - params: [], - }, - }, - }, qualityControlPage: { tabs: { items: [], From b7e8900d6c2589598f659d097021217788328b68 Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Sat, 3 Aug 2024 13:45:00 +0300 Subject: [PATCH 13/79] implemented paid placeholder, management tab overload --- cvat-core/src/session.ts | 2 +- cvat-ui/src/assets/index.d.ts | 1 + cvat-ui/src/assets/paid-feature.png | Bin 0 -> 153475 bytes .../paid-feature-placeholder.tsx | 70 +++++++++++++++ .../paid-feature-placeholder/styles.scss | 39 ++++++++ .../quality-control/quality-control-page.tsx | 44 ++++----- .../task-quality/task-quality-component.tsx | 84 ++---------------- .../task-quality-magement-component.tsx | 60 +++++++++++++ cvat-ui/src/reducers/index.ts | 2 +- cvat-ui/src/reducers/plugins-reducer.ts | 2 +- 10 files changed, 202 insertions(+), 102 deletions(-) create mode 100644 cvat-ui/src/assets/paid-feature.png create mode 100644 cvat-ui/src/components/paid-feature-placeholder/paid-feature-placeholder.tsx create mode 100644 cvat-ui/src/components/paid-feature-placeholder/styles.scss create mode 100644 cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx diff --git a/cvat-core/src/session.ts b/cvat-core/src/session.ts index 3a57cff8e6e..1051d3fb53b 100644 --- a/cvat-core/src/session.ts +++ b/cvat-core/src/session.ts @@ -793,7 +793,7 @@ export class Task extends Session { data[property] = initialData[property]; } } - console.log(data); + if (data.assignee) data.assignee = new User(data.assignee); if (data.owner) data.owner = new User(data.owner); diff --git a/cvat-ui/src/assets/index.d.ts b/cvat-ui/src/assets/index.d.ts index 82255972f22..94a4c109f09 100644 --- a/cvat-ui/src/assets/index.d.ts +++ b/cvat-ui/src/assets/index.d.ts @@ -3,3 +3,4 @@ // SPDX-License-Identifier: MIT declare module '*.svg'; +declare module '*.png'; diff --git a/cvat-ui/src/assets/paid-feature.png b/cvat-ui/src/assets/paid-feature.png new file mode 100644 index 0000000000000000000000000000000000000000..4b9db861aa7331d61d826647d175faa122029c8c GIT binary patch literal 153475 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 z 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

-RQ`jvv6i&wK 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 a|NS3J1bCy7hle=;0000 + } + > + + + + + + You discovered a premium feature + + + + + + + {featureDescription} + + + + + + + + + + + + + + + ); +} diff --git a/cvat-ui/src/components/paid-feature-placeholder/styles.scss b/cvat-ui/src/components/paid-feature-placeholder/styles.scss new file mode 100644 index 00000000000..baaca856534 --- /dev/null +++ b/cvat-ui/src/components/paid-feature-placeholder/styles.scss @@ -0,0 +1,39 @@ +// Copyright (C) 2024 CVAT.ai Corporation +// +// SPDX-License-Identifier: MIT + +@import 'base'; + +.cvat-paid-feature-placeholder-wrapper { + display: flex; + justify-content: center; + align-items: center; + padding: $grid-unit-size * 4; +} + +.cvat-paid-feature-placeholder { + width: $grid-unit-size * 60; + height: $grid-unit-size * 85; + + .ant-card-body { + height: 80%; + } +} + +.cvat-paid-feature-placeholder-title { + text-align: center; + + span { + font-size: 28px; + font-weight: bold; + } +} + +.cvat-paid-feature-placeholder-description { + text-align: center; +} + +.cvat-paid-feature-placeholder-inner-wrapper { + height: 100%; + justify-content: space-between; +} \ No newline at end of file diff --git a/cvat-ui/src/components/quality-control/quality-control-page.tsx b/cvat-ui/src/components/quality-control/quality-control-page.tsx index 8e3c361e307..0c5700075b3 100644 --- a/cvat-ui/src/components/quality-control/quality-control-page.tsx +++ b/cvat-ui/src/components/quality-control/quality-control-page.tsx @@ -14,17 +14,17 @@ import { Row, Col } from 'antd/lib/grid'; import Tabs from 'antd/lib/tabs'; import Title from 'antd/lib/typography/Title'; import notification from 'antd/lib/notification'; -import { useIsMounted, usePlugins } from 'utils/hooks'; +import { useIsMounted } from 'utils/hooks'; import { Job, JobType, QualityReport, QualitySettings, RQStatus, Task, getCore, } from 'cvat-core-wrapper'; import { updateJobAsync } from 'actions/jobs-actions'; import CVATLoadingSpinner from 'components/common/loading-spinner'; import GoBackButton from 'components/common/go-back-button'; -import { CombinedState } from 'reducers'; import { ActionUnion, createAction } from 'utils/redux'; import { BASE_TARGET_THRESHOLD, qualityColorGenerator, QualityColors } from 'utils/quality-color'; import TaskQualityComponent from './task-quality/task-quality-component'; +import TaskQualityManagementComponent from './task-quality/task-quality-magement-component'; import QualitySettingsComponent from './quality-settings'; const core = getCore(); @@ -166,12 +166,7 @@ function QualityControlPage(): JSX.Element { const [instance, setInstance] = useState(null); const isMounted = useIsMounted(); - const pluginTabs = usePlugins( - (appState: CombinedState) => appState.plugins.components.qualityControlPage.tabs.items, - {}, - { task: instance, getQualityColor: state.qualitySettings.getQualityColor }, - ); - const supportedTabs = ['Overview', 'Settings', ...pluginTabs.map(({ component: Component }) => Component.name)]; + const supportedTabs = ['overview', 'settings', 'management']; const [activeTab, setTab] = useState(getTabFromHash(supportedTabs)); const receiveInstance = async (type: InstanceType, id: number): Promise => { let receivedInstance: Task | null = null; @@ -373,7 +368,7 @@ function QualityControlPage(): JSX.Element { const tabsItems = []; const gtJob = instance.jobs.find((job: Job) => job.type === JobType.GROUND_TRUTH); tabsItems.push([{ - key: 'Overview', + key: 'overview', label: 'Overview', children: ( + ), + }, 20]); + if (gtJob) { tabsItems.push([{ - key: 'Settings', + key: 'settings', label: 'Settings', children: ( ), - }, 100]); + }, 30]); } - tabsItems.push(...pluginTabs.map(({ component: Component, weight }, index: number) => [{ - key: Component.name, - label: Component.name, - children: ( - - ), - }, weight])); - tabs = ( job.type === JobType.GROUND_TRUTH); - return (

- { - gtJob ? ( - <> - - - -
); } diff --git a/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx b/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx new file mode 100644 index 00000000000..a278f8e8e8c --- /dev/null +++ b/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx @@ -0,0 +1,60 @@ +// Copyright (C) 2024 CVAT.ai Corporation +// +// SPDX-License-Identifier: MIT + +import { + Job, QualityReport, Task, +} from 'cvat-core-wrapper'; +import React from 'react'; +import { QualityColors } from 'utils/quality-color'; +import PaidFeaturePlaceholder from 'components/paid-feature-placeholder/paid-feature-placeholder'; +import { usePlugins } from 'utils/hooks'; + +interface Props { + task: Task; + taskReport: QualityReport | null; + jobsReports: QualityReport[]; + reportRefreshingStatus: string | null; + onJobUpdate: (job: Job, data: Parameters[0]) => void; + onCreateReport: () => void; + getQualityColor: (value?: number) => QualityColors; +} + +function TaskQualityManagementComponent(props: Props): JSX.Element { + const { + task, onJobUpdate, taskReport, jobsReports, reportRefreshingStatus, onCreateReport, getQualityColor, + } = props; + + const plugins = usePlugins((state) => state.plugins.components.qualityControlPage.tabs.management, props, { + task, + getQualityColor, + }); + + const items: [JSX.Element, number][] = []; + items.push([( + + ), 0]); + items.push(...plugins.map(({ component: Component, weight }, index: number) => ( + [, weight] as [JSX.Element, number] + ))); + const renderedComponent = items.sort((a, b) => b[1] - a[1])[0][0]; + + return ( +
+ {renderedComponent} +
+ ); +} + +export default React.memo(TaskQualityManagementComponent); diff --git a/cvat-ui/src/reducers/index.ts b/cvat-ui/src/reducers/index.ts index 648eb6889ef..ff24e4a16d7 100644 --- a/cvat-ui/src/reducers/index.ts +++ b/cvat-ui/src/reducers/index.ts @@ -286,7 +286,7 @@ export interface PluginsState { }; qualityControlPage:{ tabs: { - items: PluginComponent[]; + management: PluginComponent[]; }, }; projectActions: { diff --git a/cvat-ui/src/reducers/plugins-reducer.ts b/cvat-ui/src/reducers/plugins-reducer.ts index 87fb7470299..24160763aee 100644 --- a/cvat-ui/src/reducers/plugins-reducer.ts +++ b/cvat-ui/src/reducers/plugins-reducer.ts @@ -49,7 +49,7 @@ const defaultState: PluginsState = { }, qualityControlPage: { tabs: { - items: [], + management: [], }, }, projectActions: { From 8295dbcde706111653f44b364b5415c8a9c2536f Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Sun, 4 Aug 2024 12:03:53 +0300 Subject: [PATCH 14/79] added overview plugin --- .../quality-control/quality-control-page.tsx | 20 +++--------- .../task-quality/task-quality-component.tsx | 32 ++++++++++++++++--- cvat-ui/src/reducers/index.ts | 1 + cvat-ui/src/reducers/plugins-reducer.ts | 1 + 4 files changed, 33 insertions(+), 21 deletions(-) diff --git a/cvat-ui/src/components/quality-control/quality-control-page.tsx b/cvat-ui/src/components/quality-control/quality-control-page.tsx index 0c5700075b3..a39a1979b2c 100644 --- a/cvat-ui/src/components/quality-control/quality-control-page.tsx +++ b/cvat-ui/src/components/quality-control/quality-control-page.tsx @@ -195,8 +195,7 @@ function QualityControlPage(): JSX.Element { } }; - const receiveReport = useCallback(async (taskInstance: Task) => { - dispatch(reducerActions.setFetching(true)); + const receiveSettings = useCallback(async (taskInstance: Task) => { dispatch(reducerActions.setQualitySettingsFetching(true)); function handleError(error: Error): void { @@ -209,21 +208,10 @@ function QualityControlPage(): JSX.Element { } try { - const [report] = await core.analytics.quality.reports({ pageSize: 1, target: 'task', taskID: taskInstance.id }); - let jobReportsRequest = Promise.resolve([]); - if (report) { - jobReportsRequest = core.analytics.quality.reports({ - pageSize: taskInstance.jobs.length, - parentID: report.id, - target: 'job', - }); - } const settingsRequest = core.analytics.quality.settings.get({ taskID: taskInstance.id }); - await Promise.all([jobReportsRequest, settingsRequest]).then(([jobReports, settings]) => { + await Promise.all([settingsRequest]).then(([settings]) => { dispatch(reducerActions.setQualitySettings(settings)); - dispatch(reducerActions.setTaskReport(report || null)); - dispatch(reducerActions.setJobsReports(jobReports)); }).catch(handleError).finally(() => { dispatch(reducerActions.setQualitySettingsFetching(false)); dispatch(reducerActions.setFetching(false)); @@ -242,7 +230,7 @@ function QualityControlPage(): JSX.Element { const body = { taskID: instance.id }; core.analytics.quality.calculate(body, onUpdate).then(() => { - receiveReport(instance); + receiveSettings(instance); }).finally(() => { dispatch(reducerActions.setReportRefreshingStatus(null)); }).catch((error: unknown) => { @@ -303,7 +291,7 @@ function QualityControlPage(): JSX.Element { dispatch(reducerActions.setFetching(true)); receiveInstance(requestedInstanceType, requestedInstanceID).then((task) => { if (task) { - receiveReport(task); + receiveSettings(task); } }); } else { diff --git a/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx b/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx index 2804227c684..4efc3516d9b 100644 --- a/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx @@ -8,6 +8,7 @@ import { import React from 'react'; import { QualityColors } from 'utils/quality-color'; import PaidFeaturePlaceholder from 'components/paid-feature-placeholder/paid-feature-placeholder'; +import { usePlugins } from 'utils/hooks'; interface Props { task: Task; @@ -24,13 +25,34 @@ function TaskQualityComponent(props: Props): JSX.Element { task, onJobUpdate, taskReport, jobsReports, reportRefreshingStatus, onCreateReport, getQualityColor, } = props; + const plugins = usePlugins((state) => state.plugins.components.qualityControlPage.tabs.overview, props, { + task, + getQualityColor, + }); + + const items: [JSX.Element, number][] = []; + items.push([( + + ), 0]); + items.push(...plugins.map(({ component: Component, weight }, index: number) => ( + [, weight] as [JSX.Element, number] + ))); + const renderedComponent = items.sort((a, b) => b[1] - a[1])[0][0]; + return (
- + {renderedComponent}
); } diff --git a/cvat-ui/src/reducers/index.ts b/cvat-ui/src/reducers/index.ts index ff24e4a16d7..38d5fc6f0bc 100644 --- a/cvat-ui/src/reducers/index.ts +++ b/cvat-ui/src/reducers/index.ts @@ -286,6 +286,7 @@ export interface PluginsState { }; qualityControlPage:{ tabs: { + overview: PluginComponent[]; management: PluginComponent[]; }, }; diff --git a/cvat-ui/src/reducers/plugins-reducer.ts b/cvat-ui/src/reducers/plugins-reducer.ts index 24160763aee..7ef82b08eb4 100644 --- a/cvat-ui/src/reducers/plugins-reducer.ts +++ b/cvat-ui/src/reducers/plugins-reducer.ts @@ -49,6 +49,7 @@ const defaultState: PluginsState = { }, qualityControlPage: { tabs: { + overview: [], management: [], }, }, From 0e963efc81118f471531aa871bbb4f8402d9a4b1 Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Mon, 5 Aug 2024 14:44:21 +0300 Subject: [PATCH 15/79] moved overview to plugin --- cvat-ui/src/components/job-item/job-item.tsx | 12 +- .../quality-control/quality-control-page.tsx | 2 +- .../task-quality/gt-conflicts.tsx | 112 --------- .../quality-control/task-quality/issues.tsx | 66 ------ .../quality-control/task-quality/job-list.tsx | 224 ------------------ .../task-quality/mean-quality.tsx | 90 ------- .../quality-control/utils/text-formatting.ts | 39 --- cvat-ui/src/components/task-page/job-list.tsx | 15 +- cvat-ui/src/utils/quality-color.ts | 44 ---- .../utils/table-utils.ts => utils/quality.ts} | 78 +++++- 10 files changed, 97 insertions(+), 585 deletions(-) delete mode 100644 cvat-ui/src/components/quality-control/task-quality/gt-conflicts.tsx delete mode 100644 cvat-ui/src/components/quality-control/task-quality/issues.tsx delete mode 100644 cvat-ui/src/components/quality-control/task-quality/job-list.tsx delete mode 100644 cvat-ui/src/components/quality-control/task-quality/mean-quality.tsx delete mode 100644 cvat-ui/src/components/quality-control/utils/text-formatting.ts delete mode 100644 cvat-ui/src/utils/quality-color.ts rename cvat-ui/src/{components/quality-control/utils/table-utils.ts => utils/quality.ts} (53%) diff --git a/cvat-ui/src/components/job-item/job-item.tsx b/cvat-ui/src/components/job-item/job-item.tsx index 7bff3540da0..07f41027613 100644 --- a/cvat-ui/src/components/job-item/job-item.tsx +++ b/cvat-ui/src/components/job-item/job-item.tsx @@ -5,9 +5,7 @@ import './styles.scss'; import React, { useEffect, useState } from 'react'; -import { useSelector } from 'react-redux'; import { Link } from 'react-router-dom'; -import { CombinedState } from 'reducers'; import moment from 'moment'; import { Col, Row } from 'antd/lib/grid'; import Card from 'antd/lib/card'; @@ -32,6 +30,7 @@ import JobActionsMenu from './job-actions-menu'; interface Props { job: Job; task: Task; + deleted: boolean; onJobUpdate: (job: Job, fields: Parameters[0]) => void; } @@ -99,13 +98,14 @@ function ReviewSummaryComponent({ jobInstance }: { jobInstance: any }): JSX.Elem } function JobItem(props: Props): JSX.Element { - const { job, task, onJobUpdate } = props; - const { stage, id } = job; + const { + job, task, deleted, onJobUpdate, + } = props; + const { stage } = job; const created = moment(job.createdDate); const updated = moment(job.updatedDate); const now = moment(moment.now()); - const deletes = useSelector((state: CombinedState) => state.jobs.activities.deletes); - const deleted = id in deletes ? deletes[id] === true : false; + const style = {}; if (deleted) { (style as any).pointerEvents = 'none'; diff --git a/cvat-ui/src/components/quality-control/quality-control-page.tsx b/cvat-ui/src/components/quality-control/quality-control-page.tsx index a39a1979b2c..6dcc3549bc7 100644 --- a/cvat-ui/src/components/quality-control/quality-control-page.tsx +++ b/cvat-ui/src/components/quality-control/quality-control-page.tsx @@ -22,7 +22,7 @@ import { updateJobAsync } from 'actions/jobs-actions'; import CVATLoadingSpinner from 'components/common/loading-spinner'; import GoBackButton from 'components/common/go-back-button'; import { ActionUnion, createAction } from 'utils/redux'; -import { BASE_TARGET_THRESHOLD, qualityColorGenerator, QualityColors } from 'utils/quality-color'; +import { BASE_TARGET_THRESHOLD, qualityColorGenerator, QualityColors } from 'utils/quality'; import TaskQualityComponent from './task-quality/task-quality-component'; import TaskQualityManagementComponent from './task-quality/task-quality-magement-component'; import QualitySettingsComponent from './quality-settings'; diff --git a/cvat-ui/src/components/quality-control/task-quality/gt-conflicts.tsx b/cvat-ui/src/components/quality-control/task-quality/gt-conflicts.tsx deleted file mode 100644 index cdfc765a794..00000000000 --- a/cvat-ui/src/components/quality-control/task-quality/gt-conflicts.tsx +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright (C) 2023-2024 CVAT.ai Corporation -// -// SPDX-License-Identifier: MIT - -import React from 'react'; -import Text from 'antd/lib/typography/Text'; -import { Col, Row } from 'antd/lib/grid'; - -import { QualityReport, QualitySummary } from 'cvat-core-wrapper'; -import AnalyticsCard from '../../analytics-page/views/analytics-card'; -import { percent, clampValue } from '../utils/text-formatting'; - -interface Props { - taskReport: QualityReport | null; -} - -interface ConflictTooltipProps { - reportSummary?: QualitySummary; -} - -export function ConflictsTooltip(props: ConflictTooltipProps): JSX.Element { - const { reportSummary } = props; - return ( - - - - Warnings: - - - Low overlap:  - {reportSummary?.conflictsByType.lowOverlap || 0} - - - Mismatching direction:  - {reportSummary?.conflictsByType.mismatchingDirection || 0} - - - Mismatching attributes:  - {reportSummary?.conflictsByType.mismatchingAttributes || 0} - - - Mismatching groups:  - {reportSummary?.conflictsByType.mismatchingGroups || 0} - - - Covered annotation:  - {reportSummary?.conflictsByType.coveredAnnotation || 0} - - - - - Errors: - - - Missing annotations:  - {reportSummary?.conflictsByType.missingAnnotations || 0} - - - Extra annotations:  - {reportSummary?.conflictsByType.extraAnnotations || 0} - - - Mismatching label:  - {reportSummary?.conflictsByType.mismatchingLabel || 0} - - - - ); -} - -function GTConflicts(props: Props): JSX.Element { - const { taskReport } = props; - let conflictsRepresentation: string | number = 'N/A'; - let reportSummary; - if (taskReport) { - reportSummary = taskReport.summary; - conflictsRepresentation = clampValue(reportSummary?.conflictCount); - } - - const bottomElement = ( - <> - - Errors: - {' '} - {clampValue(reportSummary?.errorCount)} - {reportSummary?.errorCount ? - ` (${percent(reportSummary?.errorCount, reportSummary?.conflictCount)})` : ''} - - - {', '} - Warnings: - {' '} - {clampValue(reportSummary?.warningCount)} - { reportSummary?.warningCount ? - ` (${percent(reportSummary?.warningCount, reportSummary?.conflictCount)})` : '' } - - - ); - - return ( - } - size={{ cardSize: 12 }} - bottomElement={bottomElement} - /> - ); -} - -export default React.memo(GTConflicts); diff --git a/cvat-ui/src/components/quality-control/task-quality/issues.tsx b/cvat-ui/src/components/quality-control/task-quality/issues.tsx deleted file mode 100644 index bdd304563f9..00000000000 --- a/cvat-ui/src/components/quality-control/task-quality/issues.tsx +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (C) 2023 CVAT.ai Corporation -// -// SPDX-License-Identifier: MIT - -import '../styles.scss'; - -import React, { useEffect, useState } from 'react'; -import Text from 'antd/lib/typography/Text'; -import notification from 'antd/lib/notification'; -import { Task } from 'cvat-core-wrapper'; -import { useIsMounted } from 'utils/hooks'; -import AnalyticsCard from '../../analytics-page/views/analytics-card'; -import { percent, clampValue } from '../utils/text-formatting'; - -interface Props { - task: Task; -} - -function Issues(props: Props): JSX.Element { - const { task } = props; - - const [issuesCount, setIssuesCount] = useState(0); - const [resolvedIssues, setResolvedIssues] = useState(0); - const isMounted = useIsMounted(); - - useEffect(() => { - task - .issues() - .then((issues: any[]) => { - if (isMounted()) { - setIssuesCount(issues.length); - setResolvedIssues(issues.reduce((acc, issue) => (issue.resolved ? acc + 1 : acc), 0)); - } - }) - .catch((_error: any) => { - if (isMounted()) { - notification.error({ - description: _error.toString(), - message: "Couldn't fetch issues", - className: 'cvat-notification-notice-get-issues-error', - }); - } - }); - }, []); - - const bottomElement = ( - - Resolved: - {' '} - {clampValue(resolvedIssues)} - {resolvedIssues ? ` (${percent(resolvedIssues, issuesCount)})` : ''} - - ); - - return ( - - ); -} - -export default React.memo(Issues); diff --git a/cvat-ui/src/components/quality-control/task-quality/job-list.tsx b/cvat-ui/src/components/quality-control/task-quality/job-list.tsx deleted file mode 100644 index e1485dfce25..00000000000 --- a/cvat-ui/src/components/quality-control/task-quality/job-list.tsx +++ /dev/null @@ -1,224 +0,0 @@ -// Copyright (C) 2023-2024 CVAT.ai Corporation -// -// SPDX-License-Identifier: MIT - -import React, { useState } from 'react'; -import { useHistory } from 'react-router'; -import { Row, Col } from 'antd/lib/grid'; -import { DownloadOutlined, QuestionCircleOutlined } from '@ant-design/icons'; -import { Key } from 'antd/lib/table/interface'; -import Table from 'antd/lib/table'; -import Button from 'antd/lib/button'; -import Text from 'antd/lib/typography/Text'; - -import { - Task, Job, JobType, QualityReport, getCore, -} from 'cvat-core-wrapper'; -import CVATTooltip from 'components/common/cvat-tooltip'; -import Tag from 'antd/lib/tag'; -import { QualityColors } from 'utils/quality-color'; -import { toRepresentation } from '../utils/text-formatting'; -import { ConflictsTooltip } from './gt-conflicts'; -import { sorter, collectUsers } from '../utils/table-utils'; - -interface Props { - task: Task; - jobsReports: QualityReport[]; - getQualityColor: (value?: number) => QualityColors; -} - -function JobListComponent(props: Props): JSX.Element { - const { - task: taskInstance, - jobsReports: jobsReportsArray, - getQualityColor, - } = props; - - const jobsReports: Record = jobsReportsArray - .reduce((acc, report) => ({ ...acc, [report.jobID]: report }), {}); - const history = useHistory(); - const { id: taskId, jobs } = taskInstance; - const [renderedJobs] = useState(jobs.filter((job: Job) => job.type === JobType.ANNOTATION)); - - const columns = [ - { - title: 'Job', - dataIndex: 'job', - key: 'job', - sorter: sorter('key'), - render: (id: number): JSX.Element => ( -
- -
- ), - }, - { - title: 'Stage', - dataIndex: 'stage', - key: 'stage', - className: 'cvat-job-item-stage', - render: (jobInstance: any): JSX.Element => { - const { stage } = jobInstance; - - return ( -
- {stage} -
- ); - }, - sorter: sorter('stage.stage'), - filters: [ - { text: 'annotation', value: 'annotation' }, - { text: 'validation', value: 'validation' }, - { text: 'acceptance', value: 'acceptance' }, - ], - onFilter: (value: boolean | Key, record: any) => record.stage.stage === value, - }, - { - title: 'Assignee', - dataIndex: 'assignee', - key: 'assignee', - className: 'cvat-job-item-assignee', - render: (report: QualityReport): JSX.Element => ( - {report?.assignee?.username} - ), - sorter: sorter('assignee.assignee.username'), - filters: collectUsers(jobsReports, 'assignee'), - onFilter: (value: boolean | Key, record: any) => ( - record.assignee.assignee?.username || false - ) === value, - }, - { - title: 'Frame intersection', - dataIndex: 'frame_intersection', - key: 'frame_intersection', - className: 'cvat-job-item-frame-intersection', - sorter: sorter('frame_intersection.summary.frameCount'), - render: (report?: QualityReport): JSX.Element => { - const frames = report?.summary.frameCount; - const frameSharePercent = report?.summary?.frameSharePercent; - return ( - - {toRepresentation(frames, false, 0)} - {frames ? ` (${toRepresentation(frameSharePercent)})` : ''} - - ); - }, - }, - { - title: 'Conflicts', - dataIndex: 'conflicts', - key: 'conflicts', - className: 'cvat-job-item-conflicts', - sorter: sorter('conflicts.summary.conflictCount'), - render: (report: QualityReport): JSX.Element => { - const conflictCount = report?.summary?.conflictCount; - return ( -
- - {conflictCount || 0} - - } - className='cvat-analytics-tooltip' - overlayStyle={{ maxWidth: '500px' }} - > - - -
- ); - }, - }, - { - title: 'Quality', - dataIndex: 'quality', - key: 'quality', - align: 'center' as const, - className: 'cvat-job-item-quality', - sorter: sorter('quality.summary.accuracy'), - render: (report?: QualityReport): JSX.Element => { - const meanAccuracy = report?.summary?.accuracy; - const accuracyRepresentation = toRepresentation(meanAccuracy); - return ( - accuracyRepresentation.includes('N/A') ? ( - - N/A - - ) : - {accuracyRepresentation} - ); - }, - }, - { - title: 'Download', - dataIndex: 'download', - key: 'download', - className: 'cvat-job-item-quality-report-download', - align: 'center' as const, - render: (job: Job): JSX.Element => { - const report = jobsReports[job.id]; - const reportID = report?.id; - return ( - reportID ? ( -
- - - ) : - ); - }, - }, - ]; - const data = renderedJobs.reduce((acc: any[], job: any) => { - const report = jobsReports[job.id]; - acc.push({ - key: job.id, - job: job.id, - download: job, - stage: job, - assignee: report, - quality: report, - conflicts: report, - frame_intersection: report, - }); - - return acc; - }, []); - - return ( -
- - - Jobs - - - 'cvat-task-jobs-table-row'} - columns={columns} - dataSource={data} - size='small' - /> - - ); -} - -export default React.memo(JobListComponent); diff --git a/cvat-ui/src/components/quality-control/task-quality/mean-quality.tsx b/cvat-ui/src/components/quality-control/task-quality/mean-quality.tsx deleted file mode 100644 index d501f05f057..00000000000 --- a/cvat-ui/src/components/quality-control/task-quality/mean-quality.tsx +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright (C) 2023-2024 CVAT.ai Corporation -// -// SPDX-License-Identifier: MIT - -import React from 'react'; -import { DownloadOutlined } from '@ant-design/icons'; -import { Col, Row } from 'antd/lib/grid'; -import Text from 'antd/lib/typography/Text'; -import Button from 'antd/lib/button'; - -import { QualityReport, getCore } from 'cvat-core-wrapper'; -import AnalyticsCard from '../../analytics-page/views/analytics-card'; -import { toRepresentation } from '../utils/text-formatting'; - -interface Props { - taskID: number; - taskReport: QualityReport | null; -} - -function MeanQuality(props: Props): JSX.Element { - const { taskID, taskReport } = props; - const reportSummary = taskReport?.summary; - - const tooltip = ( -
- - Mean annotation quality consists of: - - - Correct annotations:  - {reportSummary?.validCount || 0} - - - Task annotations:  - {reportSummary?.dsCount || 0} - - - GT annotations:  - {reportSummary?.gtCount || 0} - - - Accuracy:  - {toRepresentation(reportSummary?.accuracy)} - - - Precision:  - {toRepresentation(reportSummary?.precision)} - - - Recall:  - {toRepresentation(reportSummary?.recall)} - -
- ); - - const downloadReportButton = ( -
- -
- { - taskReport?.id ? ( - - ) : null - } - - - - ); - - return ( - - ); -} - -export default React.memo(MeanQuality); diff --git a/cvat-ui/src/components/quality-control/utils/text-formatting.ts b/cvat-ui/src/components/quality-control/utils/text-formatting.ts deleted file mode 100644 index 15bd8627ba4..00000000000 --- a/cvat-ui/src/components/quality-control/utils/text-formatting.ts +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (C) 2024 CVAT.ai Corporation -// -// SPDX-License-Identifier: MIT - -import config from 'config'; - -export function toRepresentation(val?: number, isPercent = true, decimals = 1): string { - if (!Number.isFinite(val)) { - return 'N/A'; - } - - let repr = ''; - if (!val || (isPercent && (val === 100))) { - repr = `${val}`; // remove noise in the fractional part - } else { - repr = `${val?.toFixed(decimals)}`; - } - - if (isPercent) { - repr += `${isPercent ? '%' : ''}`; - } - - return repr; -} - -export function percent(a?: number, b?: number, decimals = 1): string | number { - if (typeof a !== 'undefined' && Number.isFinite(a) && b) { - return toRepresentation(Number(a / b) * 100, true, decimals); - } - return 'N/A'; -} - -export function clampValue(a?: number): string | number { - if (typeof a !== 'undefined' && Number.isFinite(a)) { - if (a <= config.NUMERIC_VALUE_CLAMP_THRESHOLD) return a; - return `> ${config.NUMERIC_VALUE_CLAMP_THRESHOLD}`; - } - return 'N/A'; -} diff --git a/cvat-ui/src/components/task-page/job-list.tsx b/cvat-ui/src/components/task-page/job-list.tsx index 14bdab55ef1..addfafcc989 100644 --- a/cvat-ui/src/components/task-page/job-list.tsx +++ b/cvat-ui/src/components/task-page/job-list.tsx @@ -7,7 +7,7 @@ import React, { useCallback, useEffect, useState } from 'react'; import jsonLogic from 'json-logic-js'; import _ from 'lodash'; import copy from 'copy-to-clipboard'; -import { Indexable, JobsQuery } from 'reducers'; +import { CombinedState, Indexable, JobsQuery } from 'reducers'; import { useHistory } from 'react-router'; import { Row, Col } from 'antd/lib/grid'; import Text from 'antd/lib/typography/Text'; @@ -21,6 +21,7 @@ import CVATTooltip from 'components/common/cvat-tooltip'; import { SortingComponent, ResourceFilterHOC, defaultVisibility, updateHistoryFromQuery, } from 'components/resource-sorting-filtering'; +import { useSelector } from 'react-redux'; import { localStorageRecentKeyword, localStorageRecentCapacity, predefinedFilterValues, config, } from './jobs-filter-configuration'; @@ -68,6 +69,8 @@ function JobListComponent(props: Props): JSX.Element { const { task: taskInstance, onUpdateJob } = props; const [visibility, setVisibility] = useState(defaultVisibility); + const deletedJobs = useSelector((state: CombinedState) => state.jobs.activities.deletes); + const history = useHistory(); const { id: taskId } = taskInstance; const { jobs } = taskInstance; @@ -89,7 +92,15 @@ function JobListComponent(props: Props): JSX.Element { const filteredJobs = setUpJobsList(jobs, query); const jobViews = filteredJobs .slice((query.page - 1) * PAGE_SIZE, query.page * PAGE_SIZE) - .map((job: Job) => ); + .map((job: Job) => ( + + )); useEffect(() => { history.replace({ search: updateHistoryFromQuery(query), diff --git a/cvat-ui/src/utils/quality-color.ts b/cvat-ui/src/utils/quality-color.ts deleted file mode 100644 index 78892459f3b..00000000000 --- a/cvat-ui/src/utils/quality-color.ts +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (C) 2023-2024 CVAT.ai Corporation -// -// SPDX-License-Identifier: MIT - -export enum QualityColors { - GREEN = '#237804', - YELLOW = '#ed9c00', - RED = '#ff4d4f', - GRAY = '#8c8c8c', -} - -export const BASE_TARGET_THRESHOLD = 80; - -const ratios = { - low: 0.82, - middle: 0.9, - high: 1, -}; - -export const qualityColorGenerator = (targetMetric?: number) => (value?: number) => { - const baseValue = targetMetric ?? BASE_TARGET_THRESHOLD; - - const thresholds = { - low: baseValue * ratios.low, - middle: baseValue * ratios.middle, - high: baseValue * ratios.high, - }; - - if (!value) { - return QualityColors.GRAY; - } - - if (value >= thresholds.high) { - return QualityColors.GREEN; - } - if (value >= thresholds.middle) { - return QualityColors.YELLOW; - } - if (value >= thresholds.low) { - return QualityColors.RED; - } - - return QualityColors.GRAY; -}; diff --git a/cvat-ui/src/components/quality-control/utils/table-utils.ts b/cvat-ui/src/utils/quality.ts similarity index 53% rename from cvat-ui/src/components/quality-control/utils/table-utils.ts rename to cvat-ui/src/utils/quality.ts index 6fa1234ec6f..8d97d828cc5 100644 --- a/cvat-ui/src/components/quality-control/utils/table-utils.ts +++ b/cvat-ui/src/utils/quality.ts @@ -1,9 +1,51 @@ -// Copyright (C) 2024 CVAT.ai Corporation +// Copyright (C) 2023-2024 CVAT.ai Corporation // // SPDX-License-Identifier: MIT import { ColumnFilterItem } from 'antd/lib/table/interface'; import { QualityReport } from 'cvat-core-wrapper'; +import config from 'config'; + +export enum QualityColors { + GREEN = '#237804', + YELLOW = '#ed9c00', + RED = '#ff4d4f', + GRAY = '#8c8c8c', +} + +export const BASE_TARGET_THRESHOLD = 80; + +const ratios = { + low: 0.82, + middle: 0.9, + high: 1, +}; + +export const qualityColorGenerator = (targetMetric?: number) => (value?: number) => { + const baseValue = targetMetric ?? BASE_TARGET_THRESHOLD; + + const thresholds = { + low: baseValue * ratios.low, + middle: baseValue * ratios.middle, + high: baseValue * ratios.high, + }; + + if (!value) { + return QualityColors.GRAY; + } + + if (value >= thresholds.high) { + return QualityColors.GREEN; + } + if (value >= thresholds.middle) { + return QualityColors.YELLOW; + } + if (value >= thresholds.low) { + return QualityColors.RED; + } + + return QualityColors.GRAY; +}; export function sorter(path: string) { return (obj1: any, obj2: any): number => { @@ -53,3 +95,37 @@ export function collectUsers(reports: Record, path: strin ), ).map((value: string | null) => ({ text: value || 'Is Empty', value: value || false })); } + +export function toRepresentation(val?: number, isPercent = true, decimals = 1): string { + if (!Number.isFinite(val)) { + return 'N/A'; + } + + let repr = ''; + if (!val || (isPercent && (val === 100))) { + repr = `${val}`; // remove noise in the fractional part + } else { + repr = `${val?.toFixed(decimals)}`; + } + + if (isPercent) { + repr += `${isPercent ? '%' : ''}`; + } + + return repr; +} + +export function percent(a?: number, b?: number, decimals = 1): string | number { + if (typeof a !== 'undefined' && Number.isFinite(a) && b) { + return toRepresentation(Number(a / b) * 100, true, decimals); + } + return 'N/A'; +} + +export function clampValue(a?: number): string | number { + if (typeof a !== 'undefined' && Number.isFinite(a)) { + if (a <= config.NUMERIC_VALUE_CLAMP_THRESHOLD) return a; + return `> ${config.NUMERIC_VALUE_CLAMP_THRESHOLD}`; + } + return 'N/A'; +} From d9c5090758b506c10c7b52a89244e6148ebcf8c8 Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Thu, 8 Aug 2024 16:13:38 +0300 Subject: [PATCH 16/79] supported using job card in plugin --- .../components/job-item/job-actions-menu.tsx | 19 +++++++-------- cvat-ui/src/components/job-item/job-item.tsx | 14 +++++++++-- cvat-ui/src/components/jobs-page/job-card.tsx | 17 ++++++++++--- .../src/components/jobs-page/jobs-content.tsx | 16 ++++++++++--- .../src/components/jobs-page/jobs-page.tsx | 24 ++++++++++++++----- cvat-ui/src/components/plugins-entrypoint.tsx | 11 +++++++++ .../quality-control/quality-control-page.tsx | 22 ----------------- .../task-quality/task-quality-component.tsx | 9 ++----- .../task-quality-magement-component.tsx | 9 ++----- cvat-ui/src/components/task-page/job-list.tsx | 14 ++++++++--- .../src/components/task-page/task-page.tsx | 24 +++++++++++++++++-- 11 files changed, 114 insertions(+), 65 deletions(-) diff --git a/cvat-ui/src/components/job-item/job-actions-menu.tsx b/cvat-ui/src/components/job-item/job-actions-menu.tsx index 14e209af4eb..e92ffc16108 100644 --- a/cvat-ui/src/components/job-item/job-actions-menu.tsx +++ b/cvat-ui/src/components/job-item/job-actions-menu.tsx @@ -3,25 +3,24 @@ // SPDX-License-Identifier: MIT import React, { useCallback } from 'react'; -import { useDispatch } from 'react-redux'; import { useHistory } from 'react-router'; import Modal from 'antd/lib/modal'; -import { exportActions } from 'actions/export-actions'; import { Job, JobType } from 'cvat-core-wrapper'; -import { deleteJobAsync } from 'actions/jobs-actions'; -import { importActions } from 'actions/import-actions'; import Menu, { MenuInfo } from 'components/dropdown-menu'; interface Props { job: Job; - onJobUpdate: (job: Job, fields: Parameters[0]) => void; + onJobDelete: (job: Job) => void; + onJobExport: (job: Job) => void; + onJobImport: (job: Job) => void; } function JobActionsMenu(props: Props): JSX.Element { - const { job } = props; + const { + job, onJobDelete, onJobImport, onJobExport, + } = props; const history = useHistory(); - const dispatch = useDispatch(); const onDelete = useCallback(() => { Modal.confirm({ @@ -29,7 +28,7 @@ function JobActionsMenu(props: Props): JSX.Element { content: 'All related data (annotations) will be lost. Continue?', className: 'cvat-modal-confirm-delete-job', onOk: () => { - dispatch(deleteJobAsync(job)); + onJobDelete(job); }, okButtonProps: { type: 'primary', @@ -52,9 +51,9 @@ function JobActionsMenu(props: Props): JSX.Element { window.open(job.bugTracker, '_blank', 'noopener noreferrer'); } } else if (action.key === 'import_job') { - dispatch(importActions.openImportDatasetModal(job)); + onJobImport(job); } else if (action.key === 'export_job') { - dispatch(exportActions.openExportDatasetModal(job)); + onJobExport(job); } else if (action.key === 'view_analytics') { history.push(`/tasks/${job.taskId}/jobs/${job.id}/analytics`); } diff --git a/cvat-ui/src/components/job-item/job-item.tsx b/cvat-ui/src/components/job-item/job-item.tsx index 07f41027613..6dd68e4e4c3 100644 --- a/cvat-ui/src/components/job-item/job-item.tsx +++ b/cvat-ui/src/components/job-item/job-item.tsx @@ -32,6 +32,9 @@ interface Props { task: Task; deleted: boolean; onJobUpdate: (job: Job, fields: Parameters[0]) => void; + onJobDelete: (job: Job) => void; + onJobExport: (job: Job) => void; + onJobImport: (job: Job) => void; } function ReviewSummaryComponent({ jobInstance }: { jobInstance: any }): JSX.Element { @@ -99,7 +102,7 @@ function ReviewSummaryComponent({ jobInstance }: { jobInstance: any }): JSX.Elem function JobItem(props: Props): JSX.Element { const { - job, task, deleted, onJobUpdate, + job, task, deleted, onJobUpdate, onJobDelete, onJobExport, onJobImport, } = props; const { stage } = job; const created = moment(job.createdDate); @@ -260,7 +263,14 @@ function JobItem(props: Props): JSX.Element { } + overlay={( + + )} > diff --git a/cvat-ui/src/components/jobs-page/job-card.tsx b/cvat-ui/src/components/jobs-page/job-card.tsx index 4f4e98e3769..7c65c0c4256 100644 --- a/cvat-ui/src/components/jobs-page/job-card.tsx +++ b/cvat-ui/src/components/jobs-page/job-card.tsx @@ -25,11 +25,15 @@ const useCardHeight = useCardHeightHOC({ interface Props { job: Job; - onJobUpdate: (job: Job, fields: Parameters[0]) => void; + onJobDelete: (job: Job) => void; + onJobExport: (job: Job) => void; + onJobImport: (job: Job) => void; } function JobCardComponent(props: Props): JSX.Element { - const { job, onJobUpdate } = props; + const { + job, onJobDelete, onJobExport, onJobImport, + } = props; const history = useHistory(); const height = useCardHeight(); const onClick = (event: React.MouseEvent): void => { @@ -74,7 +78,14 @@ function JobCardComponent(props: Props): JSX.Element { } + overlay={( + + )} > diff --git a/cvat-ui/src/components/jobs-page/jobs-content.tsx b/cvat-ui/src/components/jobs-page/jobs-content.tsx index 9f48d27dff5..7c48e4ad047 100644 --- a/cvat-ui/src/components/jobs-page/jobs-content.tsx +++ b/cvat-ui/src/components/jobs-page/jobs-content.tsx @@ -12,11 +12,15 @@ import dimensions from 'utils/dimensions'; import JobCard from './job-card'; interface Props { - onJobUpdate(job: Job, data: Parameters[0]): void; + onJobDelete: (job: Job) => void; + onJobExport: (job: Job) => void; + onJobImport: (job: Job) => void; } function JobsContentComponent(props: Props): JSX.Element { - const { onJobUpdate } = props; + const { + onJobDelete, onJobExport, onJobImport, + } = props; const jobs = useSelector((state: CombinedState) => state.jobs.current); const groupedJobs = jobs.filter((job: Job) => job.type === JobType.ANNOTATION).reduce( @@ -39,7 +43,13 @@ function JobsContentComponent(props: Props): JSX.Element { {jobInstances.map((job: Job) => ( - + ))} diff --git a/cvat-ui/src/components/jobs-page/jobs-page.tsx b/cvat-ui/src/components/jobs-page/jobs-page.tsx index 6c9c911e091..6204980bfb0 100644 --- a/cvat-ui/src/components/jobs-page/jobs-page.tsx +++ b/cvat-ui/src/components/jobs-page/jobs-page.tsx @@ -4,7 +4,7 @@ // SPDX-License-Identifier: MIT import './styles.scss'; -import React, { useCallback, useEffect, useState } from 'react'; +import React, { useEffect, useState } from 'react'; import { useHistory } from 'react-router'; import { useDispatch, useSelector } from 'react-redux'; import Spin from 'antd/lib/spin'; @@ -14,9 +14,11 @@ import Pagination from 'antd/lib/pagination'; import { Job } from 'cvat-core-wrapper'; import { updateHistoryFromQuery } from 'components/resource-sorting-filtering'; import { CombinedState, Indexable, JobsQuery } from 'reducers'; -import { getJobsAsync, updateJobAsync } from 'actions/jobs-actions'; +import { deleteJobAsync, getJobsAsync } from 'actions/jobs-actions'; import { anySearch } from 'utils/any-search'; +import { exportActions } from 'actions/export-actions'; +import { importActions } from 'actions/import-actions'; import TopBarComponent from './top-bar'; import JobsContentComponent from './jobs-content'; import EmptyListComponent from './empty-list'; @@ -28,9 +30,15 @@ function JobsPageComponent(): JSX.Element { const query = useSelector((state: CombinedState) => state.jobs.query); const fetching = useSelector((state: CombinedState) => state.jobs.fetching); const count = useSelector((state: CombinedState) => state.jobs.count); - const onJobUpdate = useCallback((job: Job, data: Parameters[0]) => { - dispatch(updateJobAsync(job, data)); - }, []); + const onJobDelete = (job: Job): void => { + dispatch(deleteJobAsync(job)); + }; + const onJobExport = (job: Job): void => { + dispatch(exportActions.openExportDatasetModal(job)); + }; + const onJobImport = (job: Job): void => { + dispatch(importActions.openImportDatasetModal(job)); + }; const queryParams = new URLSearchParams(history.location.search); const updatedQuery = { ...query }; @@ -58,7 +66,11 @@ function JobsPageComponent(): JSX.Element { const content = count ? ( <> - + ): Stat }; } - if (action.type === ReducerActionType.SET_TASK_REPORT) { - return { - ...state, - taskReport: action.payload.qualityReport, - }; - } - - if (action.type === ReducerActionType.SET_JOBS_REPORTS) { - return { - ...state, - jobsReports: action.payload.qualityReports, - }; - } - if (action.type === ReducerActionType.SET_QUALITY_SETTINGS) { return { ...state, @@ -148,8 +132,6 @@ function QualityControlPage(): JSX.Element { const appDispatch = useDispatch(); const [state, dispatch] = useReducer(reducer, { fetching: true, - taskReport: null, - jobsReports: [], reportRefreshingStatus: null, qualitySettings: { settings: null, @@ -364,8 +346,6 @@ function QualityControlPage(): JSX.Element { onJobUpdate={onJobUpdate} onCreateReport={onCreateReport} reportRefreshingStatus={state.reportRefreshingStatus} - taskReport={state.taskReport} - jobsReports={state.jobsReports} getQualityColor={state.qualitySettings.getQualityColor} /> ), @@ -380,8 +360,6 @@ function QualityControlPage(): JSX.Element { onJobUpdate={onJobUpdate} onCreateReport={onCreateReport} reportRefreshingStatus={state.reportRefreshingStatus} - taskReport={state.taskReport} - jobsReports={state.jobsReports} getQualityColor={state.qualitySettings.getQualityColor} /> ), diff --git a/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx b/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx index 4efc3516d9b..e6cff7cfb6a 100644 --- a/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx @@ -3,7 +3,7 @@ // SPDX-License-Identifier: MIT import { - Job, QualityReport, Task, + Task, } from 'cvat-core-wrapper'; import React from 'react'; import { QualityColors } from 'utils/quality-color'; @@ -12,17 +12,12 @@ import { usePlugins } from 'utils/hooks'; interface Props { task: Task; - taskReport: QualityReport | null; - jobsReports: QualityReport[]; - reportRefreshingStatus: string | null; - onJobUpdate: (job: Job, data: Parameters[0]) => void; - onCreateReport: () => void; getQualityColor: (value?: number) => QualityColors; } function TaskQualityComponent(props: Props): JSX.Element { const { - task, onJobUpdate, taskReport, jobsReports, reportRefreshingStatus, onCreateReport, getQualityColor, + task, getQualityColor, } = props; const plugins = usePlugins((state) => state.plugins.components.qualityControlPage.tabs.overview, props, { diff --git a/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx b/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx index a278f8e8e8c..873e00b8770 100644 --- a/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx @@ -3,7 +3,7 @@ // SPDX-License-Identifier: MIT import { - Job, QualityReport, Task, + Task, } from 'cvat-core-wrapper'; import React from 'react'; import { QualityColors } from 'utils/quality-color'; @@ -12,17 +12,12 @@ import { usePlugins } from 'utils/hooks'; interface Props { task: Task; - taskReport: QualityReport | null; - jobsReports: QualityReport[]; - reportRefreshingStatus: string | null; - onJobUpdate: (job: Job, data: Parameters[0]) => void; - onCreateReport: () => void; getQualityColor: (value?: number) => QualityColors; } function TaskQualityManagementComponent(props: Props): JSX.Element { const { - task, onJobUpdate, taskReport, jobsReports, reportRefreshingStatus, onCreateReport, getQualityColor, + task, getQualityColor, } = props; const plugins = usePlugins((state) => state.plugins.components.qualityControlPage.tabs.management, props, { diff --git a/cvat-ui/src/components/task-page/job-list.tsx b/cvat-ui/src/components/task-page/job-list.tsx index addfafcc989..660773b4c24 100644 --- a/cvat-ui/src/components/task-page/job-list.tsx +++ b/cvat-ui/src/components/task-page/job-list.tsx @@ -32,7 +32,10 @@ const FilteringComponent = ResourceFilterHOC( interface Props { task: Task; - onUpdateJob(job: Job, data: Parameters[0]): void; + onJobUpdate(job: Job, data: Parameters[0]): void; + onJobDelete: (job: Job) => void; + onJobExport: (job: Job) => void; + onJobImport: (job: Job) => void; } const PAGE_SIZE = 10; @@ -66,7 +69,9 @@ function setUpJobsList(jobs: Job[], query: JobsQuery): Job[] { } function JobListComponent(props: Props): JSX.Element { - const { task: taskInstance, onUpdateJob } = props; + const { + task: taskInstance, onJobUpdate, onJobDelete, onJobExport, onJobImport, + } = props; const [visibility, setVisibility] = useState(defaultVisibility); const deletedJobs = useSelector((state: CombinedState) => state.jobs.activities.deletes); @@ -98,7 +103,10 @@ function JobListComponent(props: Props): JSX.Element { job={job} task={taskInstance} deleted={job.id in deletedJobs} - onJobUpdate={onUpdateJob} + onJobUpdate={onJobUpdate} + onJobDelete={onJobDelete} + onJobExport={onJobExport} + onJobImport={onJobImport} /> )); useEffect(() => { diff --git a/cvat-ui/src/components/task-page/task-page.tsx b/cvat-ui/src/components/task-page/task-page.tsx index 4f4f4f5254b..3730a10301a 100644 --- a/cvat-ui/src/components/task-page/task-page.tsx +++ b/cvat-ui/src/components/task-page/task-page.tsx @@ -13,13 +13,15 @@ import Result from 'antd/lib/result'; import notification from 'antd/lib/notification'; import { getInferenceStatusAsync } from 'actions/models-actions'; -import { updateJobAsync } from 'actions/jobs-actions'; +import { deleteJobAsync, updateJobAsync } from 'actions/jobs-actions'; import { getCore, Task, Job } from 'cvat-core-wrapper'; import JobListComponent from 'components/task-page/job-list'; import ModelRunnerModal from 'components/model-runner-modal/model-runner-dialog'; import CVATLoadingSpinner from 'components/common/loading-spinner'; import MoveTaskModal from 'components/move-task-modal/move-task-modal'; import { CombinedState } from 'reducers'; +import { exportActions } from 'actions/export-actions'; +import { importActions } from 'actions/import-actions'; import TopBarComponent from './top-bar'; import DetailsComponent from './details'; @@ -123,6 +125,18 @@ function TaskPageComponent(): JSX.Element { }); }; + const onJobDelete = (job: Job): void => { + dispatch(deleteJobAsync(job)); + }; + + const onJobExport = (job: Job): void => { + dispatch(exportActions.openExportDatasetModal(job)); + }; + + const onJobImport = (job: Job): void => { + dispatch(importActions.openImportDatasetModal(job)); + }; + return (
{ updatingTask ? : null } @@ -134,7 +148,13 @@ function TaskPageComponent(): JSX.Element {
- + From 0fb99f06bccb8a454ced166ec235d1bb2c2e855f Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Mon, 12 Aug 2024 18:01:38 +0300 Subject: [PATCH 17/79] moved quality report calculation --- cvat-core/src/api-implementation.ts | 17 ----- cvat-core/src/api.ts | 8 --- cvat-core/src/server-proxy.ts | 71 ------------------- .../task-quality/task-quality-component.tsx | 2 +- .../task-quality-magement-component.tsx | 2 +- 5 files changed, 2 insertions(+), 98 deletions(-) diff --git a/cvat-core/src/api-implementation.ts b/cvat-core/src/api-implementation.ts index 26d117fd074..1e7bfb5164c 100644 --- a/cvat-core/src/api-implementation.ts +++ b/cvat-core/src/api-implementation.ts @@ -553,23 +553,6 @@ export default function implementAPI(cvat: CVATCore): CVATCore { const params = fieldsToSnakeCase(body); await serverProxy.analytics.performance.calculate(params, onUpdate); }); - implementationMixin(cvat.analytics.quality.calculate, async ( - body: Parameters[0], - onUpdate: Parameters[1], - ) => { - checkFilter(body, { - jobID: isInteger, - taskID: isInteger, - projectID: isInteger, - }); - - if (!('taskID' in body)) { - throw new ArgumentError('One "taskID" is not provided'); - } - - const params = fieldsToSnakeCase(body); - await serverProxy.analytics.quality.calculate(params, onUpdate); - }); implementationMixin(cvat.frames.getMeta, async (type, id) => { const result = await serverProxy.frames.getMeta(type, id); return new FramesMetaData({ diff --git a/cvat-core/src/api.ts b/cvat-core/src/api.ts index b121f6460d4..00a65ac3a84 100644 --- a/cvat-core/src/api.ts +++ b/cvat-core/src/api.ts @@ -373,14 +373,6 @@ function build(): CVATCore { const result = await PluginRegistry.apiWrapper(cvat.analytics.quality.conflicts, filter); return result; }, - async calculate(body, onUpdate) { - const result = await PluginRegistry.apiWrapper( - cvat.analytics.quality.calculate, - body, - onUpdate, - ); - return result; - }, settings: { async get(filter = {}) { const result = await PluginRegistry.apiWrapper(cvat.analytics.quality.settings.get, filter); diff --git a/cvat-core/src/server-proxy.ts b/cvat-core/src/server-proxy.ts index c26405f8ce6..caa945d8448 100644 --- a/cvat-core/src/server-proxy.ts +++ b/cvat-core/src/server-proxy.ts @@ -2350,76 +2350,6 @@ async function calculateAnalyticsReport( return promise; } -const listenToCreateQualityReportCallbacks: { - task: LongProcessListener; -} = { - task: {}, -}; - -async function calculateQualityReport( - body: { - task_id?: number; - }, - onUpdate: (state: string, progress: number, message: string) => void, -): Promise { - const id = body.task_id; - const { backendAPI } = config; - const params = enableOrganization(); - let listenerStorage: LongProcessListener = null; - - if (Number.isInteger(body.task_id)) { - listenerStorage = listenToCreateQualityReportCallbacks.task; - } - - if (listenerStorage[id]) { - listenerStorage[id].onUpdate.push(onUpdate); - return listenerStorage[id].promise; - } - - const promise = new Promise((resolve, reject) => { - Axios.post(`${backendAPI}/quality/reports`, { - ...body, - ...params, - }).then(({ data: { rq_id: rqID } }) => { - listenerStorage[id].onUpdate.forEach((_onUpdate) => _onUpdate(RQStatus.QUEUED, 0, 'Quality report request sent')); - const checkStatus = (): void => { - Axios.post(`${backendAPI}/quality/reports`, { - ...body, - ...params, - }, { params: { rq_id: rqID } }).then((response) => { - // TODO: rewrite server logic, now it returns 202, 201 codes, but we need RQ statuses and details - // after this patch is merged https://github.com/cvat-ai/cvat/pull/7537 - if (response.status === 201) { - listenerStorage[id].onUpdate.forEach((_onUpdate) => _onUpdate(RQStatus.FINISHED, 0, 'Done')); - resolve(); - return; - } - - listenerStorage[id].onUpdate.forEach((_onUpdate) => _onUpdate(RQStatus.QUEUED, 0, 'Quality report calculation is in progress')); - setTimeout(checkStatus, 10000); - }).catch((errorData) => { - reject(generateError(errorData)); - }); - }; - - setTimeout(checkStatus, 2500); - }).catch((errorData) => { - reject(generateError(errorData)); - }); - }); - - listenerStorage[id] = { - promise, - onUpdate: [onUpdate], - }; - - promise.finally(() => { - delete listenerStorage[id]; - }); - - return promise; -} - export default Object.freeze({ server: Object.freeze({ setAuthData, @@ -2575,7 +2505,6 @@ export default Object.freeze({ quality: Object.freeze({ reports: getQualityReports, conflicts: getQualityConflicts, - calculate: calculateQualityReport, settings: Object.freeze({ get: getQualitySettings, update: updateQualitySettings, diff --git a/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx b/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx index e6cff7cfb6a..df447c0ac73 100644 --- a/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx @@ -6,7 +6,7 @@ import { Task, } from 'cvat-core-wrapper'; import React from 'react'; -import { QualityColors } from 'utils/quality-color'; +import { QualityColors } from 'utils/quality'; import PaidFeaturePlaceholder from 'components/paid-feature-placeholder/paid-feature-placeholder'; import { usePlugins } from 'utils/hooks'; diff --git a/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx b/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx index 873e00b8770..c2b92cefc6e 100644 --- a/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx @@ -6,7 +6,7 @@ import { Task, } from 'cvat-core-wrapper'; import React from 'react'; -import { QualityColors } from 'utils/quality-color'; +import { QualityColors } from 'utils/quality'; import PaidFeaturePlaceholder from 'components/paid-feature-placeholder/paid-feature-placeholder'; import { usePlugins } from 'utils/hooks'; From 3a749c749bfec7f96155f1a0eefdfea695f5f01d Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Tue, 13 Aug 2024 16:02:57 +0300 Subject: [PATCH 18/79] moved job validation count to plugin --- cvat-core/src/quality-settings.ts | 10 +- .../quality-control/quality-control-page.tsx | 48 +------- .../quality-control/quality-settings.tsx | 20 +++- .../task-quality/quality-settings-form.tsx | 106 ++++++++++++------ cvat-ui/src/reducers/index.ts | 5 + cvat-ui/src/reducers/plugins-reducer.ts | 5 + 6 files changed, 105 insertions(+), 89 deletions(-) diff --git a/cvat-core/src/quality-settings.ts b/cvat-core/src/quality-settings.ts index 1e88156c01c..ffad9b849b1 100644 --- a/cvat-core/src/quality-settings.ts +++ b/cvat-core/src/quality-settings.ts @@ -191,8 +191,8 @@ export default class QualitySettings { return result; } - public async save(): Promise { - const result = await PluginRegistry.apiWrapper.call(this, QualitySettings.prototype.save); + public async save(fields: any): Promise { + const result = await PluginRegistry.apiWrapper.call(this, QualitySettings.prototype.save, fields); return result; } } @@ -201,8 +201,10 @@ Object.defineProperties(QualitySettings.prototype.save, { implementation: { writable: false, enumerable: false, - value: async function implementation() { - const result = await serverProxy.analytics.quality.settings.update(this.id, this.toJSON()); + value: async function implementation(fields: any): Promise { + const result = await serverProxy.analytics.quality.settings.update( + this.id, { ...this.toJSON(), ...fields }, + ); return new QualitySettings(result); }, }, diff --git a/cvat-ui/src/components/quality-control/quality-control-page.tsx b/cvat-ui/src/components/quality-control/quality-control-page.tsx index 06ebffc9ad5..2d6ceaa8080 100644 --- a/cvat-ui/src/components/quality-control/quality-control-page.tsx +++ b/cvat-ui/src/components/quality-control/quality-control-page.tsx @@ -7,7 +7,6 @@ import './styles.scss'; import React, { useCallback, useEffect, useReducer, useState, } from 'react'; -import { useDispatch } from 'react-redux'; import { useParams } from 'react-router'; import { Link } from 'react-router-dom'; import { Row, Col } from 'antd/lib/grid'; @@ -16,9 +15,8 @@ import Title from 'antd/lib/typography/Title'; import notification from 'antd/lib/notification'; import { useIsMounted } from 'utils/hooks'; import { - Job, JobType, QualityReport, QualitySettings, RQStatus, Task, getCore, + Job, JobType, QualityReport, QualitySettings, Task, getCore, } from 'cvat-core-wrapper'; -import { updateJobAsync } from 'actions/jobs-actions'; import CVATLoadingSpinner from 'components/common/loading-spinner'; import GoBackButton from 'components/common/go-back-button'; import { ActionUnion, createAction } from 'utils/redux'; @@ -129,7 +127,6 @@ const reducer = (state: State, action: ActionUnion): Stat }; function QualityControlPage(): JSX.Element { - const appDispatch = useDispatch(); const [state, dispatch] = useReducer(reducer, { fetching: true, reportRefreshingStatus: null, @@ -203,30 +200,7 @@ function QualityControlPage(): JSX.Element { } }, [instance]); - const onCreateReport = useCallback(() => { - if (instance) { - const onUpdate = (status: RQStatus, progress: number, message: string): void => { - dispatch(reducerActions.setReportRefreshingStatus(message)); - }; - - const body = { taskID: instance.id }; - - core.analytics.quality.calculate(body, onUpdate).then(() => { - receiveSettings(instance); - }).finally(() => { - dispatch(reducerActions.setReportRefreshingStatus(null)); - }).catch((error: unknown) => { - if (isMounted()) { - notification.error({ - message: 'Error occurred during requesting performance report', - description: error instanceof Error ? error.message : '', - }); - } - }); - } - }, [instance]); - - const onSaveQualitySettings = useCallback(async (values) => { + const onSaveQualitySettings = useCallback(async (values, fields) => { try { const { settings } = state.qualitySettings; if (settings) { @@ -247,10 +221,9 @@ function QualityControlPage(): JSX.Element { settings.objectVisibilityThreshold = values.objectVisibilityThreshold / 100; settings.panopticComparison = values.panopticComparison; - try { dispatch(reducerActions.setQualitySettingsFetching(true)); - const responseSettings = await settings.save(); + const responseSettings = await settings.save(fields || {}); dispatch(reducerActions.setQualitySettings(responseSettings)); } catch (error: unknown) { notification.error({ @@ -301,15 +274,6 @@ function QualityControlPage(): JSX.Element { window.location.hash = activeTab; }, [activeTab]); - const onJobUpdate = useCallback((job: Job, data: Parameters[0]): void => { - dispatch(reducerActions.setFetching(true)); - appDispatch(updateJobAsync(job, data)).finally(() => { - if (isMounted()) { - dispatch(reducerActions.setFetching(false)); - } - }); - }, []); - const onTabKeyChange = useCallback((key: string): void => { setTab(key); }, []); @@ -343,9 +307,6 @@ function QualityControlPage(): JSX.Element { children: ( ), @@ -357,9 +318,6 @@ function QualityControlPage(): JSX.Element { children: ( ), diff --git a/cvat-ui/src/components/quality-control/quality-settings.tsx b/cvat-ui/src/components/quality-control/quality-settings.tsx index 0280da544a4..437d3298254 100644 --- a/cvat-ui/src/components/quality-control/quality-settings.tsx +++ b/cvat-ui/src/components/quality-control/quality-settings.tsx @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: MIT -import React, { useCallback } from 'react'; +import React, { useCallback, useState } from 'react'; import Text from 'antd/lib/typography/Text'; import Form from 'antd/lib/form'; import { QualitySettings } from 'cvat-core-wrapper'; @@ -12,7 +12,7 @@ import QualitySettingsForm from './task-quality/quality-settings-form'; interface Props { fetching: boolean; qualitySettings: QualitySettings | null; - setQualitySettings: (settings: QualitySettings) => void; + setQualitySettings: (settings: QualitySettings, fields: any) => void; } export default function QualitySettingsComponent(props: Props): JSX.Element | null { @@ -22,11 +22,16 @@ export default function QualitySettingsComponent(props: Props): JSX.Element | nu setQualitySettings, } = props; + const [additionalSettings, setAdditinalSettings] = useState({}); + const onAdditionalValueChanged = (key: string, value: number): void => { + setAdditinalSettings({ ...additionalSettings, [key]: value }); + }; + const [form] = Form.useForm(); const onSave = useCallback(async () => { const values = await form.validateFields(); - setQualitySettings(values); - }, [form]); + setQualitySettings(values, additionalSettings); + }, [form, additionalSettings]); if (fetching) { return ( @@ -37,7 +42,12 @@ export default function QualitySettingsComponent(props: Props): JSX.Element | nu } return settings ? ( - + ) : ( No quality settings ); diff --git a/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx b/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx index af26359ca9f..d1b26cf89aa 100644 --- a/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx @@ -13,22 +13,31 @@ import Checkbox from 'antd/lib/checkbox/Checkbox'; import CVATTooltip from 'components/common/cvat-tooltip'; import { QualitySettings, TargetMetric } from 'cvat-core-wrapper'; import { Button, Select } from 'antd/lib'; +import { usePlugins } from 'utils/hooks'; +import { CombinedState } from 'reducers'; interface FormProps { form: FormInstance; settings: QualitySettings; onSave: () => void; + onAdditionalValueChanged: (key: string, value: any) => void; } export default function QualitySettingsForm(props: FormProps): JSX.Element | null { - const { form, settings, onSave } = props; + const { + form, settings, onSave, onAdditionalValueChanged, + } = props; + + const pluginsToRender = usePlugins( + (state: CombinedState) => state.plugins.components.qualityControlPage.tabs.settings.form.items, + props, + { onAdditionalValueChanged }, + ); const initialValues = { targetMetric: 'accuracy_micro', targetMetricThreshold: 80, - jobValidationCount: 3, - lowOverlapThreshold: settings.lowOverlapThreshold * 100, iouThreshold: settings.iouThreshold * 100, compareAttributes: settings.compareAttributes, @@ -45,6 +54,8 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul checkCoveredAnnotations: settings.checkCoveredAnnotations, objectVisibilityThreshold: settings.objectVisibilityThreshold * 100, panopticComparison: settings.panopticComparison, + + fields: 1, }; const generalTooltip = ( @@ -124,23 +135,12 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul ); - return ( -
- -
- - - + const formItems: [JSX.Element, number][] = []; + formItems.push([ + <> - General + General @@ -180,23 +180,10 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul - - - Job validation - - - - - - - - - - + , + 10]); + formItems.push([ + <> Shape comparison @@ -228,6 +215,11 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul + , + 20]); + + formItems.push([ + <> Keypoint Comparison @@ -250,6 +242,11 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul + , + 30]); + + formItems.push([ + <> Line Comparison @@ -294,6 +291,11 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul + , + 40]); + + formItems.push([ + <> Group Comparison @@ -327,6 +329,11 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul + , + 50]); + + formItems.push([ + <> Segmentation Comparison @@ -372,6 +379,35 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul + , + 60]); + + formItems.push( + ...pluginsToRender.map(({ component: Component, weight }, index) => ( + [, weight] as [JSX.Element, number] + )), + ); + + return ( + + + + + + + { formItems.sort((item1, item2) => item1[1] - item2[1]) + .map((item) => item[0]) } ); } diff --git a/cvat-ui/src/reducers/index.ts b/cvat-ui/src/reducers/index.ts index f93cd47b317..9a649d41f20 100644 --- a/cvat-ui/src/reducers/index.ts +++ b/cvat-ui/src/reducers/index.ts @@ -288,6 +288,11 @@ export interface PluginsState { tabs: { overview: PluginComponent[]; management: PluginComponent[]; + settings: { + form: { + items: PluginComponent[]; + }, + } }, }; projectActions: { diff --git a/cvat-ui/src/reducers/plugins-reducer.ts b/cvat-ui/src/reducers/plugins-reducer.ts index 7ef82b08eb4..0d625462be2 100644 --- a/cvat-ui/src/reducers/plugins-reducer.ts +++ b/cvat-ui/src/reducers/plugins-reducer.ts @@ -51,6 +51,11 @@ const defaultState: PluginsState = { tabs: { overview: [], management: [], + settings: { + form: { + items: [], + }, + }, }, }, projectActions: { From c0f0d2f8f48db1fb5c612d65a5ab5a597ef66842 Mon Sep 17 00:00:00 2001 From: Maxim Zhiltsov Date: Mon, 19 Aug 2024 20:23:47 +0300 Subject: [PATCH 19/79] Job validations - common --- cvat/apps/analytics_report/permissions.py | 12 ++---- cvat/apps/engine/permissions.py | 36 ++++++++++------ ...tyreport_assignee_last_updated_and_more.py | 42 +++++++++++++++++++ cvat/apps/quality_control/models.py | 24 +++++++++++ cvat/apps/quality_control/quality_reports.py | 4 ++ cvat/apps/quality_control/serializers.py | 21 +++++++++- cvat/apps/webhooks/permissions.py | 2 +- 7 files changed, 116 insertions(+), 25 deletions(-) create mode 100644 cvat/apps/quality_control/migrations/0003_qualityreport_assignee_last_updated_and_more.py diff --git a/cvat/apps/analytics_report/permissions.py b/cvat/apps/analytics_report/permissions.py index 9735fce22f1..118d1fe892c 100644 --- a/cvat/apps/analytics_report/permissions.py +++ b/cvat/apps/analytics_report/permissions.py @@ -34,9 +34,7 @@ def create(cls, request, view, obj, iam_context): project_id = request.query_params.get("project_id", None) if job_id: - job = Job.objects.get(id=job_id) - iam_context = get_iam_context(request, job) - perm = JobPermission.create_scope_view(iam_context, int(job_id)) + perm = JobPermission.create_scope_view(request, int(job_id)) permissions.append(perm) else: job_id = request.data.get("job_id", None) @@ -48,15 +46,11 @@ def create(cls, request, view, obj, iam_context): task_id = job.segment.task.id if task_id: - task = Task.objects.get(id=task_id) - iam_context = get_iam_context(request, task) - perm = TaskPermission.create_scope_view(request, int(task_id), iam_context) + perm = TaskPermission.create_scope_view(request, int(task_id)) permissions.append(perm) if project_id: - project = Project.objects.get(id=project_id) - iam_context = get_iam_context(request, project) - perm = ProjectPermission.create_scope_view(iam_context, int(project_id)) + perm = ProjectPermission.create_scope_view(request, int(project_id)) permissions.append(perm) except ObjectDoesNotExist as ex: raise ValidationError( diff --git a/cvat/apps/engine/permissions.py b/cvat/apps/engine/permissions.py index 414d6488263..efa7d3f7b99 100644 --- a/cvat/apps/engine/permissions.py +++ b/cvat/apps/engine/permissions.py @@ -305,12 +305,17 @@ def get_scopes(request, view, obj): return scopes @classmethod - def create_scope_view(cls, iam_context, project_id): - try: - obj = Project.objects.get(id=project_id) - except Project.DoesNotExist as ex: - raise ValidationError(str(ex)) - return cls(**iam_context, obj=obj, scope=__class__.Scopes.VIEW) + def create_scope_view(cls, request, project: Union[int, Project], iam_context=None): + if isinstance(project, int): + try: + project = Project.objects.get(id=project) + except Project.DoesNotExist as ex: + raise ValidationError(str(ex)) + + if not iam_context and request: + iam_context = get_iam_context(request, project) + + return cls(**iam_context, obj=project, scope=__class__.Scopes.VIEW) @classmethod def create_scope_create(cls, request, org_id): @@ -422,7 +427,7 @@ def create(cls, request, view, obj, iam_context): permissions.append(perm) if project_id: - perm = ProjectPermission.create_scope_view(iam_context, project_id) + perm = ProjectPermission.create_scope_view(request, int(project_id), iam_context) permissions.append(perm) for field_source, field in [ @@ -684,12 +689,17 @@ def create_scope_view_data(cls, iam_context, job_id): return cls(**iam_context, obj=obj, scope='view:data') @classmethod - def create_scope_view(cls, iam_context, job_id): - try: - obj = Job.objects.get(id=job_id) - except Job.DoesNotExist as ex: - raise ValidationError(str(ex)) - return cls(**iam_context, obj=obj, scope=__class__.Scopes.VIEW) + def create_scope_view(cls, request, job: Union[int, Job], iam_context=None): + if isinstance(job, int): + try: + job = Job.objects.get(id=job) + except Job.DoesNotExist as ex: + raise ValidationError(str(ex)) + + if not iam_context and request: + iam_context = get_iam_context(request, job) + + return cls(**iam_context, obj=job, scope=__class__.Scopes.VIEW) def __init__(self, **kwargs): self.task_id = kwargs.pop('task_id', None) diff --git a/cvat/apps/quality_control/migrations/0003_qualityreport_assignee_last_updated_and_more.py b/cvat/apps/quality_control/migrations/0003_qualityreport_assignee_last_updated_and_more.py new file mode 100644 index 00000000000..529f52f0d37 --- /dev/null +++ b/cvat/apps/quality_control/migrations/0003_qualityreport_assignee_last_updated_and_more.py @@ -0,0 +1,42 @@ +# Generated by Django 4.2.14 on 2024-08-19 17:23 + +import cvat.apps.quality_control.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("quality_control", "0002_qualityreport_assignee"), + ] + + operations = [ + migrations.AddField( + model_name="qualityreport", + name="assignee_last_updated", + field=models.DateTimeField(null=True), + ), + migrations.AddField( + model_name="qualitysettings", + name="max_validations_per_job", + field=models.IntegerField(default=0), + ), + migrations.AddField( + model_name="qualitysettings", + name="target_metric", + field=models.CharField( + choices=[ + ("accuracy", "ACCURACY"), + ("precision", "PRECISION"), + ("recall", "RECALL"), + ], + default=cvat.apps.quality_control.models.QualityTargetMetricType["ACCURACY"], + max_length=32, + ), + ), + migrations.AddField( + model_name="qualitysettings", + name="target_metric_threshold", + field=models.FloatField(default=0.7), + ), + ] diff --git a/cvat/apps/quality_control/models.py b/cvat/apps/quality_control/models.py index c92e677479e..6dc2f9384d0 100644 --- a/cvat/apps/quality_control/models.py +++ b/cvat/apps/quality_control/models.py @@ -69,6 +69,19 @@ def choices(cls): return tuple((x.value, x.name) for x in cls) +class QualityTargetMetricType(str, Enum): + ACCURACY = "accuracy" + PRECISION = "precision" + RECALL = "recall" + + def __str__(self) -> str: + return self.value + + @classmethod + def choices(cls): + return tuple((x.value, x.name) for x in cls) + + class QualityReport(models.Model): job = models.ForeignKey( Job, on_delete=models.CASCADE, related_name="quality_reports", null=True, blank=True @@ -89,6 +102,7 @@ class QualityReport(models.Model): assignee = models.ForeignKey( User, on_delete=models.SET_NULL, related_name="quality_reports", null=True, blank=True ) + assignee_last_updated = models.DateTimeField(null=True) data = models.JSONField() @@ -204,6 +218,16 @@ class QualitySettings(models.Model): compare_attributes = models.BooleanField() + target_metric = models.CharField( + max_length=32, + choices=QualityTargetMetricType.choices(), + default=QualityTargetMetricType.ACCURACY, + ) + + target_metric_threshold = models.FloatField(default=0.7) + + max_validations_per_job = models.IntegerField(default=0) + def __init__(self, *args: Any, **kwargs: Any) -> None: defaults = deepcopy(self.get_defaults()) for field in self._meta.fields: diff --git a/cvat/apps/quality_control/quality_reports.py b/cvat/apps/quality_control/quality_reports.py index edc4264d380..a62e46f52cc 100644 --- a/cvat/apps/quality_control/quality_reports.py +++ b/cvat/apps/quality_control/quality_reports.py @@ -2302,6 +2302,7 @@ def _compute_reports(self, task_id: int) -> int: target_last_updated=job.updated_date, gt_last_updated=gt_job.updated_date, assignee_id=job.assignee_id, + assignee_last_updated=job.assignee_updated_date, data=job_comparison_report.to_json(), conflicts=[c.to_dict() for c in job_comparison_report.conflicts], ) @@ -2314,6 +2315,7 @@ def _compute_reports(self, task_id: int) -> int: target_last_updated=task.updated_date, gt_last_updated=gt_job.updated_date, assignee_id=task.assignee_id, + assignee_last_updated=task.assignee_updated_date, data=task_comparison_report.to_json(), conflicts=[], # the task doesn't have own conflicts ), @@ -2420,6 +2422,7 @@ def _save_reports(self, *, task_report: Dict, job_reports: List[Dict]) -> models target_last_updated=task_report["target_last_updated"], gt_last_updated=task_report["gt_last_updated"], assignee_id=task_report["assignee_id"], + assignee_last_updated=task_report["assignee_last_updated"], data=task_report["data"], ) db_task_report.save() @@ -2432,6 +2435,7 @@ def _save_reports(self, *, task_report: Dict, job_reports: List[Dict]) -> models target_last_updated=job_report["target_last_updated"], gt_last_updated=job_report["gt_last_updated"], assignee_id=job_report["assignee_id"], + assignee_last_updated=job_report["assignee_last_updated"], data=job_report["data"], ) db_job_reports.append(db_job_report) diff --git a/cvat/apps/quality_control/serializers.py b/cvat/apps/quality_control/serializers.py index 2ebe8f5a8c7..0688a4f9e6a 100644 --- a/cvat/apps/quality_control/serializers.py +++ b/cvat/apps/quality_control/serializers.py @@ -34,13 +34,15 @@ class QualityReportSummarySerializer(serializers.Serializer): error_count = serializers.IntegerField() conflicts_by_type = serializers.DictField(child=serializers.IntegerField()) - # This set is enough for basic characteristics, such as - # DS_unmatched, GT_unmatched, accuracy, precision and recall valid_count = serializers.IntegerField(source="annotations.valid_count") ds_count = serializers.IntegerField(source="annotations.ds_count") gt_count = serializers.IntegerField(source="annotations.gt_count") total_count = serializers.IntegerField(source="annotations.total_count") + accuracy = serializers.FloatField(source="annotations.accuracy") + precision = serializers.FloatField(source="annotations.precision") + recall = serializers.FloatField(source="annotations.recall") + class QualityReportSerializer(serializers.ModelSerializer): target = serializers.ChoiceField(models.QualityReportTarget.choices()) @@ -74,6 +76,9 @@ class Meta: fields = ( "id", "task_id", + "target_metric", + "target_metric_threshold", + "max_validations_per_job", "iou_threshold", "oks_sigma", "line_thickness", @@ -95,6 +100,15 @@ class Meta: extra_kwargs = {k: {"required": False} for k in fields} for field_name, help_text in { + "target_metric": "The primary metric used for quality estimation", + "target_metric_threshold": """ + Defines the minimal quality requirements in terms of the selected target metric. + """, + "max_validations_per_job": """ + The maximum number of job validation attempts for the job assignee. + The job can be automatically accepted if the job quality is above the required + threshold, defined by the target threshold parameter. + """, "iou_threshold": "Used for distinction between matched / unmatched shapes", "low_overlap_threshold": """ Used for distinction between strong / weak (low_overlap) matches @@ -144,4 +158,7 @@ def validate(self, attrs): if not 0 <= v <= 1: raise serializers.ValidationError(f"{k} must be in the range [0; 1]") + if (max_validations := attrs.get("max_validations_per_job")) and max_validations < 0: + raise serializers.ValidationError("max_validations_per_job cannot be less than 0") + return super().validate(attrs) diff --git a/cvat/apps/webhooks/permissions.py b/cvat/apps/webhooks/permissions.py index 40b4d3ebfd2..d2ffd87b395 100644 --- a/cvat/apps/webhooks/permissions.py +++ b/cvat/apps/webhooks/permissions.py @@ -39,7 +39,7 @@ def create(cls, request, view, obj, iam_context): permissions.append(perm) if project_id: - perm = ProjectPermission.create_scope_view(iam_context, project_id) + perm = ProjectPermission.create_scope_view(request, project_id, iam_context) permissions.append(perm) return permissions From da2d9fb4302a6807f84288123b60ab3010394090 Mon Sep 17 00:00:00 2001 From: Maxim Zhiltsov Date: Mon, 19 Aug 2024 21:07:49 +0300 Subject: [PATCH 20/79] Update changelog --- changelog.d/20240819_210200_mzhiltso_validation_api.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 changelog.d/20240819_210200_mzhiltso_validation_api.md diff --git a/changelog.d/20240819_210200_mzhiltso_validation_api.md b/changelog.d/20240819_210200_mzhiltso_validation_api.md new file mode 100644 index 00000000000..2031da1456a --- /dev/null +++ b/changelog.d/20240819_210200_mzhiltso_validation_api.md @@ -0,0 +1,4 @@ +### Added + +- Last assignee update date in quality reports, new options in quality settings + () From 65b459174403b65eb9e234f07b73b3fc4e521a7f Mon Sep 17 00:00:00 2001 From: Maxim Zhiltsov Date: Mon, 19 Aug 2024 21:09:46 +0300 Subject: [PATCH 21/79] Remove unused imports --- cvat/apps/analytics_report/permissions.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cvat/apps/analytics_report/permissions.py b/cvat/apps/analytics_report/permissions.py index 118d1fe892c..e6177b1d4df 100644 --- a/cvat/apps/analytics_report/permissions.py +++ b/cvat/apps/analytics_report/permissions.py @@ -7,9 +7,9 @@ from django.core.exceptions import ObjectDoesNotExist from rest_framework.exceptions import ValidationError -from cvat.apps.engine.models import Job, Project, Task +from cvat.apps.engine.models import Job from cvat.apps.engine.permissions import JobPermission, ProjectPermission, TaskPermission -from cvat.apps.iam.permissions import OpenPolicyAgentPermission, StrEnum, get_iam_context +from cvat.apps.iam.permissions import OpenPolicyAgentPermission, StrEnum class AnalyticsReportPermission(OpenPolicyAgentPermission): From c5fa228c2ba1861a906c01ecef8a236adbcaa0bd Mon Sep 17 00:00:00 2001 From: Maxim Zhiltsov Date: Mon, 19 Aug 2024 23:19:29 +0300 Subject: [PATCH 22/79] Update test assets --- tests/python/shared/assets/cvat_db/data.json | 112 ++++++++++++++---- .../python/shared/assets/quality_reports.json | 36 ++++++ .../shared/assets/quality_settings.json | 60 ++++++++++ 3 files changed, 188 insertions(+), 20 deletions(-) diff --git a/tests/python/shared/assets/cvat_db/data.json b/tests/python/shared/assets/cvat_db/data.json index 39b63b2c60b..064f6e70741 100644 --- a/tests/python/shared/assets/cvat_db/data.json +++ b/tests/python/shared/assets/cvat_db/data.json @@ -11864,6 +11864,7 @@ "target_last_updated": "2023-05-26T16:17:02.635Z", "gt_last_updated": "2023-05-26T16:16:50.630Z", "assignee": null, + "assignee_last_updated": null, "data": "{\"parameters\":{\"included_annotation_types\":[\"bbox\",\"points\",\"mask\",\"polygon\",\"polyline\",\"skeleton\"],\"compare_attributes\":true,\"ignored_attributes\":[],\"iou_threshold\":0.4,\"low_overlap_threshold\":0.8,\"oks_sigma\":0.09,\"line_thickness\":0.01,\"compare_line_orientation\":true,\"line_orientation_threshold\":0.1,\"compare_groups\":true,\"group_match_threshold\":0.5,\"check_covered_annotations\":true,\"object_visibility_threshold\":0.05,\"panoptic_comparison\":true},\"comparison_summary\":{\"frame_share\":0.2727272727272727,\"frames\":[0,1,2],\"conflict_count\":37,\"warning_count\":15,\"error_count\":22,\"conflicts_by_type\":{\"low_overlap\":6,\"missing_annotation\":9,\"extra_annotation\":10,\"mismatching_label\":3,\"mismatching_direction\":1,\"covered_annotation\":1,\"mismatching_attributes\":1,\"mismatching_groups\":6},\"annotations\":{\"valid_count\":21,\"missing_count\":9,\"extra_count\":10,\"total_count\":43,\"ds_count\":34,\"gt_count\":33,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"unmatched\"],\"rows\":[[0,2,3],[1,21,7],[1,8,0]],\"precision\":[0.0,0.7241379310344828,0.0],\"recall\":[0.0,0.6774193548387096,0.0],\"accuracy\":[0.0,0.5384615384615384,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.4883720930232558,\"precision\":0.6176470588235294,\"recall\":0.6363636363636364},\"annotation_components\":{\"shape\":{\"valid_count\":24,\"missing_count\":9,\"extra_count\":10,\"total_count\":43,\"ds_count\":34,\"gt_count\":33,\"mean_iou\":0.19532955159399454,\"accuracy\":0.5581395348837209},\"label\":{\"valid_count\":21,\"invalid_count\":3,\"total_count\":24,\"accuracy\":0.875}},\"frame_count\":3,\"mean_conflict_count\":12.333333333333334},\"frame_results\":{\"0\":{\"conflicts\":[{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":65,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":101,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":91,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":118,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":88,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":102,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":68,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"},{\"obj_id\":98,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":67,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"},{\"obj_id\":99,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":92,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":119,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":107,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":121,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":122,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":70,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":76,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":93,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":74,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":95,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":73,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":96,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"ellipse\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":64,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":66,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":94,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_label\",\"annotation_ids\":[{\"obj_id\":89,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":123,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_label\",\"annotation_ids\":[{\"obj_id\":92,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":119,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_label\",\"annotation_ids\":[{\"obj_id\":69,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"mask\"},{\"obj_id\":97,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_direction\",\"annotation_ids\":[{\"obj_id\":67,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"},{\"obj_id\":99,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"covered_annotation\",\"annotation_ids\":[{\"obj_id\":69,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"mask\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_attributes\",\"annotation_ids\":[{\"obj_id\":65,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":101,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":82,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":103,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":81,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":104,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":83,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":105,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":87,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":106,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":80,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":111,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":77,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":114,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"}],\"annotations\":{\"valid_count\":21,\"missing_count\":3,\"extra_count\":10,\"total_count\":37,\"ds_count\":34,\"gt_count\":27,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"unmatched\"],\"rows\":[[0,2,3],[1,21,7],[1,2,0]],\"precision\":[0.0,0.7241379310344828,0.0],\"recall\":[0.0,0.84,0.0],\"accuracy\":[0.0,0.6363636363636364,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.5675675675675675,\"precision\":0.6176470588235294,\"recall\":0.7777777777777778},\"annotation_components\":{\"shape\":{\"valid_count\":24,\"missing_count\":3,\"extra_count\":10,\"total_count\":37,\"ds_count\":34,\"gt_count\":27,\"mean_iou\":0.5859886547819836,\"accuracy\":0.6486486486486487},\"label\":{\"valid_count\":21,\"invalid_count\":3,\"total_count\":24,\"accuracy\":0.875}},\"conflict_count\":31,\"warning_count\":15,\"error_count\":16,\"conflicts_by_type\":{\"low_overlap\":6,\"missing_annotation\":3,\"extra_annotation\":10,\"mismatching_label\":3,\"mismatching_direction\":1,\"covered_annotation\":1,\"mismatching_attributes\":1,\"mismatching_groups\":6}},\"1\":{\"conflicts\":[{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":130,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":128,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":124,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":125,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"ellipse\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":127,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"mask\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":129,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"}],\"annotations\":{\"valid_count\":0,\"missing_count\":6,\"extra_count\":0,\"total_count\":6,\"ds_count\":0,\"gt_count\":6,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"unmatched\"],\"rows\":[[0,0,0],[0,0,0],[0,6,0]],\"precision\":[0.0,0.0,0.0],\"recall\":[0.0,0.0,0.0],\"accuracy\":[0.0,0.0,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.0,\"precision\":0.0,\"recall\":0.0},\"annotation_components\":{\"shape\":{\"valid_count\":0,\"missing_count\":6,\"extra_count\":0,\"total_count\":6,\"ds_count\":0,\"gt_count\":6,\"mean_iou\":0.0,\"accuracy\":0.0},\"label\":{\"valid_count\":0,\"invalid_count\":0,\"total_count\":0,\"accuracy\":0.0}},\"conflict_count\":6,\"warning_count\":0,\"error_count\":6,\"conflicts_by_type\":{\"missing_annotation\":6}},\"2\":{\"conflicts\":[],\"annotations\":{\"valid_count\":0,\"missing_count\":0,\"extra_count\":0,\"total_count\":0,\"ds_count\":0,\"gt_count\":0,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"unmatched\"],\"rows\":[[0,0,0],[0,0,0],[0,0,0]],\"precision\":[0.0,0.0,0.0],\"recall\":[0.0,0.0,0.0],\"accuracy\":[0.0,0.0,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.0,\"precision\":0.0,\"recall\":0.0},\"annotation_components\":{\"shape\":{\"valid_count\":0,\"missing_count\":0,\"extra_count\":0,\"total_count\":0,\"ds_count\":0,\"gt_count\":0,\"mean_iou\":0,\"accuracy\":0.0},\"label\":{\"valid_count\":0,\"invalid_count\":0,\"total_count\":0,\"accuracy\":0.0}},\"conflict_count\":0,\"warning_count\":0,\"error_count\":0,\"conflicts_by_type\":{}}}}" } }, @@ -11878,6 +11879,7 @@ "target_last_updated": "2023-05-26T16:11:24.294Z", "gt_last_updated": "2023-05-26T16:16:50.630Z", "assignee": null, + "assignee_last_updated": null, "data": "{\"parameters\":{\"included_annotation_types\":[\"bbox\",\"points\",\"mask\",\"polygon\",\"polyline\",\"skeleton\"],\"compare_attributes\":true,\"ignored_attributes\":[],\"iou_threshold\":0.4,\"low_overlap_threshold\":0.8,\"oks_sigma\":0.09,\"line_thickness\":0.01,\"compare_line_orientation\":true,\"line_orientation_threshold\":0.1,\"compare_groups\":true,\"group_match_threshold\":0.5,\"check_covered_annotations\":true,\"object_visibility_threshold\":0.05,\"panoptic_comparison\":true},\"comparison_summary\":{\"frame_share\":0.2727272727272727,\"frames\":[0,1,2],\"conflict_count\":37,\"warning_count\":15,\"error_count\":22,\"conflicts_by_type\":{\"low_overlap\":6,\"missing_annotation\":9,\"extra_annotation\":10,\"mismatching_label\":3,\"mismatching_direction\":1,\"covered_annotation\":1,\"mismatching_attributes\":1,\"mismatching_groups\":6},\"annotations\":{\"valid_count\":21,\"missing_count\":9,\"extra_count\":10,\"total_count\":43,\"ds_count\":34,\"gt_count\":33,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"unmatched\"],\"rows\":[[0,2,3],[1,21,7],[1,8,0]],\"precision\":[0.0,0.7241379310344828,0.0],\"recall\":[0.0,0.6774193548387096,0.0],\"accuracy\":[0.0,0.5384615384615384,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.4883720930232558,\"precision\":0.6176470588235294,\"recall\":0.6363636363636364},\"annotation_components\":{\"shape\":{\"valid_count\":24,\"missing_count\":9,\"extra_count\":10,\"total_count\":43,\"ds_count\":34,\"gt_count\":33,\"mean_iou\":0.19532955159399454,\"accuracy\":0.5581395348837209},\"label\":{\"valid_count\":21,\"invalid_count\":3,\"total_count\":24,\"accuracy\":0.875}},\"frame_count\":3,\"mean_conflict_count\":12.333333333333334},\"frame_results\":{\"0\":{\"conflicts\":[{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":65,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":101,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":91,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":118,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":88,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":102,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":68,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"},{\"obj_id\":98,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":67,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"},{\"obj_id\":99,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":92,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":119,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":107,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":121,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":122,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":70,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":76,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":93,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":74,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":95,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":73,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":96,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"ellipse\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":64,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":66,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":94,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_label\",\"annotation_ids\":[{\"obj_id\":89,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":123,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_label\",\"annotation_ids\":[{\"obj_id\":92,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":119,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_label\",\"annotation_ids\":[{\"obj_id\":69,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"mask\"},{\"obj_id\":97,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_direction\",\"annotation_ids\":[{\"obj_id\":67,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"},{\"obj_id\":99,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"covered_annotation\",\"annotation_ids\":[{\"obj_id\":69,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"mask\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_attributes\",\"annotation_ids\":[{\"obj_id\":65,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":101,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":82,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":103,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":81,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":104,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":83,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":105,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":87,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":106,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":80,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":111,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":77,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":114,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"}],\"annotations\":{\"valid_count\":21,\"missing_count\":3,\"extra_count\":10,\"total_count\":37,\"ds_count\":34,\"gt_count\":27,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"unmatched\"],\"rows\":[[0,2,3],[1,21,7],[1,2,0]],\"precision\":[0.0,0.7241379310344828,0.0],\"recall\":[0.0,0.84,0.0],\"accuracy\":[0.0,0.6363636363636364,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.5675675675675675,\"precision\":0.6176470588235294,\"recall\":0.7777777777777778},\"annotation_components\":{\"shape\":{\"valid_count\":24,\"missing_count\":3,\"extra_count\":10,\"total_count\":37,\"ds_count\":34,\"gt_count\":27,\"mean_iou\":0.5859886547819836,\"accuracy\":0.6486486486486487},\"label\":{\"valid_count\":21,\"invalid_count\":3,\"total_count\":24,\"accuracy\":0.875}},\"conflict_count\":31,\"warning_count\":15,\"error_count\":16,\"conflicts_by_type\":{\"low_overlap\":6,\"missing_annotation\":3,\"extra_annotation\":10,\"mismatching_label\":3,\"mismatching_direction\":1,\"covered_annotation\":1,\"mismatching_attributes\":1,\"mismatching_groups\":6}},\"1\":{\"conflicts\":[{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":130,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":128,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":124,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":125,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"ellipse\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":127,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"mask\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":129,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"}],\"annotations\":{\"valid_count\":0,\"missing_count\":6,\"extra_count\":0,\"total_count\":6,\"ds_count\":0,\"gt_count\":6,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"unmatched\"],\"rows\":[[0,0,0],[0,0,0],[0,6,0]],\"precision\":[0.0,0.0,0.0],\"recall\":[0.0,0.0,0.0],\"accuracy\":[0.0,0.0,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.0,\"precision\":0.0,\"recall\":0.0},\"annotation_components\":{\"shape\":{\"valid_count\":0,\"missing_count\":6,\"extra_count\":0,\"total_count\":6,\"ds_count\":0,\"gt_count\":6,\"mean_iou\":0.0,\"accuracy\":0.0},\"label\":{\"valid_count\":0,\"invalid_count\":0,\"total_count\":0,\"accuracy\":0.0}},\"conflict_count\":6,\"warning_count\":0,\"error_count\":6,\"conflicts_by_type\":{\"missing_annotation\":6}},\"2\":{\"conflicts\":[],\"annotations\":{\"valid_count\":0,\"missing_count\":0,\"extra_count\":0,\"total_count\":0,\"ds_count\":0,\"gt_count\":0,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"unmatched\"],\"rows\":[[0,0,0],[0,0,0],[0,0,0]],\"precision\":[0.0,0.0,0.0],\"recall\":[0.0,0.0,0.0],\"accuracy\":[0.0,0.0,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.0,\"precision\":0.0,\"recall\":0.0},\"annotation_components\":{\"shape\":{\"valid_count\":0,\"missing_count\":0,\"extra_count\":0,\"total_count\":0,\"ds_count\":0,\"gt_count\":0,\"mean_iou\":0,\"accuracy\":0.0},\"label\":{\"valid_count\":0,\"invalid_count\":0,\"total_count\":0,\"accuracy\":0.0}},\"conflict_count\":0,\"warning_count\":0,\"error_count\":0,\"conflicts_by_type\":{}}}}" } }, @@ -11892,6 +11894,7 @@ "target_last_updated": "2023-11-24T15:23:30.045Z", "gt_last_updated": "2023-11-24T15:18:55.216Z", "assignee": null, + "assignee_last_updated": null, "data": "{\"parameters\":{\"included_annotation_types\":[\"bbox\",\"points\",\"mask\",\"polygon\",\"polyline\",\"skeleton\"],\"compare_attributes\":true,\"ignored_attributes\":[],\"iou_threshold\":0.4,\"low_overlap_threshold\":0.8,\"oks_sigma\":0.09,\"line_thickness\":0.01,\"compare_line_orientation\":true,\"line_orientation_threshold\":0.1,\"compare_groups\":true,\"group_match_threshold\":0.5,\"check_covered_annotations\":true,\"object_visibility_threshold\":0.05,\"panoptic_comparison\":true},\"comparison_summary\":{\"frame_share\":0.2727272727272727,\"frames\":[0,1,2],\"conflict_count\":40,\"warning_count\":16,\"error_count\":24,\"conflicts_by_type\":{\"low_overlap\":7,\"missing_annotation\":10,\"extra_annotation\":11,\"mismatching_label\":3,\"mismatching_direction\":1,\"covered_annotation\":1,\"mismatching_attributes\":1,\"mismatching_groups\":6},\"annotations\":{\"valid_count\":22,\"missing_count\":10,\"extra_count\":11,\"total_count\":46,\"ds_count\":36,\"gt_count\":35,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"skele\",\"unmatched\"],\"rows\":[[0,2,0,3],[1,21,0,7],[0,0,1,1],[1,8,1,0]],\"precision\":[0.0,0.7241379310344828,0.5,0.0],\"recall\":[0.0,0.6774193548387096,0.5,0.0],\"accuracy\":[0.0,0.5384615384615384,0.3333333333333333,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.4782608695652174,\"precision\":0.6111111111111112,\"recall\":0.6285714285714286},\"annotation_components\":{\"shape\":{\"valid_count\":25,\"missing_count\":10,\"extra_count\":11,\"total_count\":46,\"ds_count\":36,\"gt_count\":35,\"mean_iou\":0.18567508032031,\"accuracy\":0.5434782608695652},\"label\":{\"valid_count\":22,\"invalid_count\":3,\"total_count\":25,\"accuracy\":0.88}},\"frame_count\":3,\"mean_conflict_count\":13.333333333333334},\"frame_results\":{\"0\":{\"conflicts\":[{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":65,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":101,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":91,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":118,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":88,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":102,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":68,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"},{\"obj_id\":98,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":67,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"},{\"obj_id\":99,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":141,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"skeleton\"},{\"obj_id\":132,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"skeleton\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":92,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":119,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":107,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":121,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":122,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":131,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"skeleton\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":70,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":76,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":93,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":74,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":95,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":73,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":96,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"ellipse\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":64,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":66,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":94,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":142,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"skeleton\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_label\",\"annotation_ids\":[{\"obj_id\":92,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":119,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_label\",\"annotation_ids\":[{\"obj_id\":89,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":123,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_label\",\"annotation_ids\":[{\"obj_id\":69,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"mask\"},{\"obj_id\":97,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_direction\",\"annotation_ids\":[{\"obj_id\":67,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"},{\"obj_id\":99,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"covered_annotation\",\"annotation_ids\":[{\"obj_id\":69,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"mask\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_attributes\",\"annotation_ids\":[{\"obj_id\":65,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":101,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":82,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":103,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":81,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":104,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":83,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":105,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":87,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":106,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":80,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":111,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":77,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":114,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"}],\"annotations\":{\"valid_count\":22,\"missing_count\":4,\"extra_count\":11,\"total_count\":40,\"ds_count\":36,\"gt_count\":29,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"skele\",\"unmatched\"],\"rows\":[[0,2,0,3],[1,21,0,7],[0,0,1,1],[1,2,1,0]],\"precision\":[0.0,0.7241379310344828,0.5,0.0],\"recall\":[0.0,0.84,0.5,0.0],\"accuracy\":[0.0,0.6363636363636364,0.3333333333333333,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.55,\"precision\":0.6111111111111112,\"recall\":0.7586206896551724},\"annotation_components\":{\"shape\":{\"valid_count\":25,\"missing_count\":4,\"extra_count\":11,\"total_count\":40,\"ds_count\":36,\"gt_count\":29,\"mean_iou\":0.55702524096093,\"accuracy\":0.625},\"label\":{\"valid_count\":22,\"invalid_count\":3,\"total_count\":25,\"accuracy\":0.88}},\"conflict_count\":34,\"warning_count\":16,\"error_count\":18,\"conflicts_by_type\":{\"low_overlap\":7,\"missing_annotation\":4,\"extra_annotation\":11,\"mismatching_label\":3,\"mismatching_direction\":1,\"covered_annotation\":1,\"mismatching_attributes\":1,\"mismatching_groups\":6}},\"1\":{\"conflicts\":[{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":130,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":128,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":124,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":125,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"ellipse\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":127,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"mask\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":129,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"}],\"annotations\":{\"valid_count\":0,\"missing_count\":6,\"extra_count\":0,\"total_count\":6,\"ds_count\":0,\"gt_count\":6,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"skele\",\"unmatched\"],\"rows\":[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,6,0,0]],\"precision\":[0.0,0.0,0.0,0.0],\"recall\":[0.0,0.0,0.0,0.0],\"accuracy\":[0.0,0.0,0.0,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.0,\"precision\":0.0,\"recall\":0.0},\"annotation_components\":{\"shape\":{\"valid_count\":0,\"missing_count\":6,\"extra_count\":0,\"total_count\":6,\"ds_count\":0,\"gt_count\":6,\"mean_iou\":0.0,\"accuracy\":0.0},\"label\":{\"valid_count\":0,\"invalid_count\":0,\"total_count\":0,\"accuracy\":0.0}},\"conflict_count\":6,\"warning_count\":0,\"error_count\":6,\"conflicts_by_type\":{\"missing_annotation\":6}},\"2\":{\"conflicts\":[],\"annotations\":{\"valid_count\":0,\"missing_count\":0,\"extra_count\":0,\"total_count\":0,\"ds_count\":0,\"gt_count\":0,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"skele\",\"unmatched\"],\"rows\":[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],\"precision\":[0.0,0.0,0.0,0.0],\"recall\":[0.0,0.0,0.0,0.0],\"accuracy\":[0.0,0.0,0.0,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.0,\"precision\":0.0,\"recall\":0.0},\"annotation_components\":{\"shape\":{\"valid_count\":0,\"missing_count\":0,\"extra_count\":0,\"total_count\":0,\"ds_count\":0,\"gt_count\":0,\"mean_iou\":0,\"accuracy\":0.0},\"label\":{\"valid_count\":0,\"invalid_count\":0,\"total_count\":0,\"accuracy\":0.0}},\"conflict_count\":0,\"warning_count\":0,\"error_count\":0,\"conflicts_by_type\":{}}}}" } }, @@ -11906,6 +11909,7 @@ "target_last_updated": "2023-11-24T15:23:30.269Z", "gt_last_updated": "2023-11-24T15:18:55.216Z", "assignee": null, + "assignee_last_updated": null, "data": "{\"parameters\":{\"included_annotation_types\":[\"bbox\",\"points\",\"mask\",\"polygon\",\"polyline\",\"skeleton\"],\"compare_attributes\":true,\"ignored_attributes\":[],\"iou_threshold\":0.4,\"low_overlap_threshold\":0.8,\"oks_sigma\":0.09,\"line_thickness\":0.01,\"compare_line_orientation\":true,\"line_orientation_threshold\":0.1,\"compare_groups\":true,\"group_match_threshold\":0.5,\"check_covered_annotations\":true,\"object_visibility_threshold\":0.05,\"panoptic_comparison\":true},\"comparison_summary\":{\"frame_share\":0.2727272727272727,\"frames\":[0,1,2],\"conflict_count\":40,\"warning_count\":16,\"error_count\":24,\"conflicts_by_type\":{\"low_overlap\":7,\"missing_annotation\":10,\"extra_annotation\":11,\"mismatching_label\":3,\"mismatching_direction\":1,\"covered_annotation\":1,\"mismatching_attributes\":1,\"mismatching_groups\":6},\"annotations\":{\"valid_count\":22,\"missing_count\":10,\"extra_count\":11,\"total_count\":46,\"ds_count\":36,\"gt_count\":35,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"skele\",\"unmatched\"],\"rows\":[[0,2,0,3],[1,21,0,7],[0,0,1,1],[1,8,1,0]],\"precision\":[0.0,0.7241379310344828,0.5,0.0],\"recall\":[0.0,0.6774193548387096,0.5,0.0],\"accuracy\":[0.0,0.5384615384615384,0.3333333333333333,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.4782608695652174,\"precision\":0.6111111111111112,\"recall\":0.6285714285714286},\"annotation_components\":{\"shape\":{\"valid_count\":25,\"missing_count\":10,\"extra_count\":11,\"total_count\":46,\"ds_count\":36,\"gt_count\":35,\"mean_iou\":0.18567508032031,\"accuracy\":0.5434782608695652},\"label\":{\"valid_count\":22,\"invalid_count\":3,\"total_count\":25,\"accuracy\":0.88}},\"frame_count\":3,\"mean_conflict_count\":13.333333333333334},\"frame_results\":{\"0\":{\"conflicts\":[{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":65,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":101,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":91,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":118,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":88,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":102,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":68,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"},{\"obj_id\":98,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":67,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"},{\"obj_id\":99,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":141,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"skeleton\"},{\"obj_id\":132,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"skeleton\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":92,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":119,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":107,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":121,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":122,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":131,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"skeleton\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":70,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":76,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":93,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":74,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":95,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":73,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":96,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"ellipse\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":64,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":66,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":94,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":142,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"skeleton\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_label\",\"annotation_ids\":[{\"obj_id\":92,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":119,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_label\",\"annotation_ids\":[{\"obj_id\":89,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":123,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_label\",\"annotation_ids\":[{\"obj_id\":69,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"mask\"},{\"obj_id\":97,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_direction\",\"annotation_ids\":[{\"obj_id\":67,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"},{\"obj_id\":99,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"covered_annotation\",\"annotation_ids\":[{\"obj_id\":69,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"mask\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_attributes\",\"annotation_ids\":[{\"obj_id\":65,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":101,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":82,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":103,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":81,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":104,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":83,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":105,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":87,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":106,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":80,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":111,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":77,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":114,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"}],\"annotations\":{\"valid_count\":22,\"missing_count\":4,\"extra_count\":11,\"total_count\":40,\"ds_count\":36,\"gt_count\":29,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"skele\",\"unmatched\"],\"rows\":[[0,2,0,3],[1,21,0,7],[0,0,1,1],[1,2,1,0]],\"precision\":[0.0,0.7241379310344828,0.5,0.0],\"recall\":[0.0,0.84,0.5,0.0],\"accuracy\":[0.0,0.6363636363636364,0.3333333333333333,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.55,\"precision\":0.6111111111111112,\"recall\":0.7586206896551724},\"annotation_components\":{\"shape\":{\"valid_count\":25,\"missing_count\":4,\"extra_count\":11,\"total_count\":40,\"ds_count\":36,\"gt_count\":29,\"mean_iou\":0.55702524096093,\"accuracy\":0.625},\"label\":{\"valid_count\":22,\"invalid_count\":3,\"total_count\":25,\"accuracy\":0.88}},\"conflict_count\":34,\"warning_count\":16,\"error_count\":18,\"conflicts_by_type\":{\"low_overlap\":7,\"missing_annotation\":4,\"extra_annotation\":11,\"mismatching_label\":3,\"mismatching_direction\":1,\"covered_annotation\":1,\"mismatching_attributes\":1,\"mismatching_groups\":6}},\"1\":{\"conflicts\":[{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":130,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":128,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":124,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":125,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"ellipse\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":127,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"mask\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":129,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"}],\"annotations\":{\"valid_count\":0,\"missing_count\":6,\"extra_count\":0,\"total_count\":6,\"ds_count\":0,\"gt_count\":6,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"skele\",\"unmatched\"],\"rows\":[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,6,0,0]],\"precision\":[0.0,0.0,0.0,0.0],\"recall\":[0.0,0.0,0.0,0.0],\"accuracy\":[0.0,0.0,0.0,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.0,\"precision\":0.0,\"recall\":0.0},\"annotation_components\":{\"shape\":{\"valid_count\":0,\"missing_count\":6,\"extra_count\":0,\"total_count\":6,\"ds_count\":0,\"gt_count\":6,\"mean_iou\":0.0,\"accuracy\":0.0},\"label\":{\"valid_count\":0,\"invalid_count\":0,\"total_count\":0,\"accuracy\":0.0}},\"conflict_count\":6,\"warning_count\":0,\"error_count\":6,\"conflicts_by_type\":{\"missing_annotation\":6}},\"2\":{\"conflicts\":[],\"annotations\":{\"valid_count\":0,\"missing_count\":0,\"extra_count\":0,\"total_count\":0,\"ds_count\":0,\"gt_count\":0,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"skele\",\"unmatched\"],\"rows\":[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],\"precision\":[0.0,0.0,0.0,0.0],\"recall\":[0.0,0.0,0.0,0.0],\"accuracy\":[0.0,0.0,0.0,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.0,\"precision\":0.0,\"recall\":0.0},\"annotation_components\":{\"shape\":{\"valid_count\":0,\"missing_count\":0,\"extra_count\":0,\"total_count\":0,\"ds_count\":0,\"gt_count\":0,\"mean_iou\":0,\"accuracy\":0.0},\"label\":{\"valid_count\":0,\"invalid_count\":0,\"total_count\":0,\"accuracy\":0.0}},\"conflict_count\":0,\"warning_count\":0,\"error_count\":0,\"conflicts_by_type\":{}}}}" } }, @@ -11920,6 +11924,7 @@ "target_last_updated": "2023-11-24T15:23:30.045Z", "gt_last_updated": "2023-11-24T15:18:55.216Z", "assignee": null, + "assignee_last_updated": null, "data": "{\"parameters\":{\"included_annotation_types\":[\"bbox\",\"points\",\"mask\",\"polygon\",\"polyline\",\"skeleton\"],\"compare_attributes\":true,\"ignored_attributes\":[],\"iou_threshold\":0.4,\"low_overlap_threshold\":0.8,\"oks_sigma\":0.09,\"line_thickness\":0.01,\"compare_line_orientation\":true,\"line_orientation_threshold\":0.1,\"compare_groups\":true,\"group_match_threshold\":0.5,\"check_covered_annotations\":true,\"object_visibility_threshold\":0.05,\"panoptic_comparison\":true},\"comparison_summary\":{\"frame_share\":0.2727272727272727,\"frames\":[0,1,2],\"conflict_count\":40,\"warning_count\":16,\"error_count\":24,\"conflicts_by_type\":{\"low_overlap\":7,\"missing_annotation\":10,\"extra_annotation\":11,\"mismatching_label\":3,\"mismatching_direction\":1,\"covered_annotation\":1,\"mismatching_attributes\":1,\"mismatching_groups\":6},\"annotations\":{\"valid_count\":22,\"missing_count\":10,\"extra_count\":11,\"total_count\":46,\"ds_count\":36,\"gt_count\":35,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"skele\",\"unmatched\"],\"rows\":[[0,2,0,3],[1,21,0,7],[0,0,1,1],[1,8,1,0]],\"precision\":[0.0,0.7241379310344828,0.5,0.0],\"recall\":[0.0,0.6774193548387096,0.5,0.0],\"accuracy\":[0.8478260869565217,0.6086956521739131,0.9565217391304348,0.5434782608695652],\"jaccard_index\":[0.0,0.5384615384615384,0.3333333333333333,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.4782608695652174,\"precision\":0.6111111111111112,\"recall\":0.6285714285714286},\"annotation_components\":{\"shape\":{\"valid_count\":25,\"missing_count\":10,\"extra_count\":11,\"total_count\":46,\"ds_count\":36,\"gt_count\":35,\"mean_iou\":0.18567508032031,\"accuracy\":0.5434782608695652},\"label\":{\"valid_count\":22,\"invalid_count\":3,\"total_count\":25,\"accuracy\":0.88}},\"frame_count\":3,\"mean_conflict_count\":13.333333333333334},\"frame_results\":{\"0\":{\"conflicts\":[{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":65,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":101,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":91,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":118,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":88,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":102,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":68,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"},{\"obj_id\":98,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":67,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"},{\"obj_id\":99,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":141,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"skeleton\"},{\"obj_id\":132,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"skeleton\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":92,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":119,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":107,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":121,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":122,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":131,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"skeleton\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":70,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":76,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":93,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":74,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":95,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":73,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":96,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"ellipse\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":64,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":66,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":94,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":142,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"skeleton\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_label\",\"annotation_ids\":[{\"obj_id\":92,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":119,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_label\",\"annotation_ids\":[{\"obj_id\":89,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":123,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_label\",\"annotation_ids\":[{\"obj_id\":69,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"mask\"},{\"obj_id\":97,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_direction\",\"annotation_ids\":[{\"obj_id\":67,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"},{\"obj_id\":99,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"covered_annotation\",\"annotation_ids\":[{\"obj_id\":69,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"mask\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_attributes\",\"annotation_ids\":[{\"obj_id\":65,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":101,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":82,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":103,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":81,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":104,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":83,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":105,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":87,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":106,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":80,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":111,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":77,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":114,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"}],\"annotations\":{\"valid_count\":22,\"missing_count\":4,\"extra_count\":11,\"total_count\":40,\"ds_count\":36,\"gt_count\":29,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"skele\",\"unmatched\"],\"rows\":[[0,2,0,3],[1,21,0,7],[0,0,1,1],[1,2,1,0]],\"precision\":[0.0,0.7241379310344828,0.5,0.0],\"recall\":[0.0,0.84,0.5,0.0],\"accuracy\":[0.825,0.7,0.95,0.625],\"jaccard_index\":[0.0,0.6363636363636364,0.3333333333333333,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.55,\"precision\":0.6111111111111112,\"recall\":0.7586206896551724},\"annotation_components\":{\"shape\":{\"valid_count\":25,\"missing_count\":4,\"extra_count\":11,\"total_count\":40,\"ds_count\":36,\"gt_count\":29,\"mean_iou\":0.55702524096093,\"accuracy\":0.625},\"label\":{\"valid_count\":22,\"invalid_count\":3,\"total_count\":25,\"accuracy\":0.88}},\"conflict_count\":34,\"warning_count\":16,\"error_count\":18,\"conflicts_by_type\":{\"low_overlap\":7,\"missing_annotation\":4,\"extra_annotation\":11,\"mismatching_label\":3,\"mismatching_direction\":1,\"covered_annotation\":1,\"mismatching_attributes\":1,\"mismatching_groups\":6}},\"1\":{\"conflicts\":[{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":130,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":128,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":124,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":125,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"ellipse\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":127,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"mask\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":129,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"}],\"annotations\":{\"valid_count\":0,\"missing_count\":6,\"extra_count\":0,\"total_count\":6,\"ds_count\":0,\"gt_count\":6,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"skele\",\"unmatched\"],\"rows\":[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,6,0,0]],\"precision\":[0.0,0.0,0.0,0.0],\"recall\":[0.0,0.0,0.0,0.0],\"accuracy\":[1.0,0.0,1.0,0.0],\"jaccard_index\":[0.0,0.0,0.0,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.0,\"precision\":0.0,\"recall\":0.0},\"annotation_components\":{\"shape\":{\"valid_count\":0,\"missing_count\":6,\"extra_count\":0,\"total_count\":6,\"ds_count\":0,\"gt_count\":6,\"mean_iou\":0.0,\"accuracy\":0.0},\"label\":{\"valid_count\":0,\"invalid_count\":0,\"total_count\":0,\"accuracy\":0.0}},\"conflict_count\":6,\"warning_count\":0,\"error_count\":6,\"conflicts_by_type\":{\"missing_annotation\":6}},\"2\":{\"conflicts\":[],\"annotations\":{\"valid_count\":0,\"missing_count\":0,\"extra_count\":0,\"total_count\":0,\"ds_count\":0,\"gt_count\":0,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"skele\",\"unmatched\"],\"rows\":[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],\"precision\":[0.0,0.0,0.0,0.0],\"recall\":[0.0,0.0,0.0,0.0],\"accuracy\":[0.0,0.0,0.0,0.0],\"jaccard_index\":[0.0,0.0,0.0,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.0,\"precision\":0.0,\"recall\":0.0},\"annotation_components\":{\"shape\":{\"valid_count\":0,\"missing_count\":0,\"extra_count\":0,\"total_count\":0,\"ds_count\":0,\"gt_count\":0,\"mean_iou\":0,\"accuracy\":0.0},\"label\":{\"valid_count\":0,\"invalid_count\":0,\"total_count\":0,\"accuracy\":0.0}},\"conflict_count\":0,\"warning_count\":0,\"error_count\":0,\"conflicts_by_type\":{}}}}" } }, @@ -11934,6 +11939,7 @@ "target_last_updated": "2023-11-24T15:23:30.269Z", "gt_last_updated": "2023-11-24T15:18:55.216Z", "assignee": null, + "assignee_last_updated": null, "data": "{\"parameters\":{\"included_annotation_types\":[\"bbox\",\"points\",\"mask\",\"polygon\",\"polyline\",\"skeleton\"],\"compare_attributes\":true,\"ignored_attributes\":[],\"iou_threshold\":0.4,\"low_overlap_threshold\":0.8,\"oks_sigma\":0.09,\"line_thickness\":0.01,\"compare_line_orientation\":true,\"line_orientation_threshold\":0.1,\"compare_groups\":true,\"group_match_threshold\":0.5,\"check_covered_annotations\":true,\"object_visibility_threshold\":0.05,\"panoptic_comparison\":true},\"comparison_summary\":{\"frame_share\":0.2727272727272727,\"frames\":[0,1,2],\"conflict_count\":40,\"warning_count\":16,\"error_count\":24,\"conflicts_by_type\":{\"low_overlap\":7,\"missing_annotation\":10,\"extra_annotation\":11,\"mismatching_label\":3,\"mismatching_direction\":1,\"covered_annotation\":1,\"mismatching_attributes\":1,\"mismatching_groups\":6},\"annotations\":{\"valid_count\":22,\"missing_count\":10,\"extra_count\":11,\"total_count\":46,\"ds_count\":36,\"gt_count\":35,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"skele\",\"unmatched\"],\"rows\":[[0,2,0,3],[1,21,0,7],[0,0,1,1],[1,8,1,0]],\"precision\":[0.0,0.7241379310344828,0.5,0.0],\"recall\":[0.0,0.6774193548387096,0.5,0.0],\"accuracy\":[0.8478260869565217,0.6086956521739131,0.9565217391304348,0.5434782608695652],\"jaccard_index\":[0.0,0.5384615384615384,0.3333333333333333,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.4782608695652174,\"precision\":0.6111111111111112,\"recall\":0.6285714285714286},\"annotation_components\":{\"shape\":{\"valid_count\":25,\"missing_count\":10,\"extra_count\":11,\"total_count\":46,\"ds_count\":36,\"gt_count\":35,\"mean_iou\":0.18567508032031,\"accuracy\":0.5434782608695652},\"label\":{\"valid_count\":22,\"invalid_count\":3,\"total_count\":25,\"accuracy\":0.88}},\"frame_count\":3,\"mean_conflict_count\":13.333333333333334},\"frame_results\":{\"0\":{\"conflicts\":[{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":65,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":101,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":91,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":118,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":88,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":102,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":68,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"},{\"obj_id\":98,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":67,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"},{\"obj_id\":99,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":141,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"skeleton\"},{\"obj_id\":132,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"skeleton\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":92,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":119,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":107,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":121,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":122,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":131,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"skeleton\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":70,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":76,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":93,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":74,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":95,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":73,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":96,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"ellipse\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":64,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":66,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":94,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":142,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"skeleton\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_label\",\"annotation_ids\":[{\"obj_id\":92,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":119,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_label\",\"annotation_ids\":[{\"obj_id\":89,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":123,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_label\",\"annotation_ids\":[{\"obj_id\":69,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"mask\"},{\"obj_id\":97,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_direction\",\"annotation_ids\":[{\"obj_id\":67,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"},{\"obj_id\":99,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"covered_annotation\",\"annotation_ids\":[{\"obj_id\":69,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"mask\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_attributes\",\"annotation_ids\":[{\"obj_id\":65,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":101,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":82,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":103,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":81,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":104,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":83,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":105,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":87,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":106,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":80,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":111,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":77,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":114,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"}],\"annotations\":{\"valid_count\":22,\"missing_count\":4,\"extra_count\":11,\"total_count\":40,\"ds_count\":36,\"gt_count\":29,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"skele\",\"unmatched\"],\"rows\":[[0,2,0,3],[1,21,0,7],[0,0,1,1],[1,2,1,0]],\"precision\":[0.0,0.7241379310344828,0.5,0.0],\"recall\":[0.0,0.84,0.5,0.0],\"accuracy\":[0.825,0.7,0.95,0.625],\"jaccard_index\":[0.0,0.6363636363636364,0.3333333333333333,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.55,\"precision\":0.6111111111111112,\"recall\":0.7586206896551724},\"annotation_components\":{\"shape\":{\"valid_count\":25,\"missing_count\":4,\"extra_count\":11,\"total_count\":40,\"ds_count\":36,\"gt_count\":29,\"mean_iou\":0.55702524096093,\"accuracy\":0.625},\"label\":{\"valid_count\":22,\"invalid_count\":3,\"total_count\":25,\"accuracy\":0.88}},\"conflict_count\":34,\"warning_count\":16,\"error_count\":18,\"conflicts_by_type\":{\"low_overlap\":7,\"missing_annotation\":4,\"extra_annotation\":11,\"mismatching_label\":3,\"mismatching_direction\":1,\"covered_annotation\":1,\"mismatching_attributes\":1,\"mismatching_groups\":6}},\"1\":{\"conflicts\":[{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":130,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":128,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":124,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":125,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"ellipse\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":127,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"mask\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":129,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"}],\"annotations\":{\"valid_count\":0,\"missing_count\":6,\"extra_count\":0,\"total_count\":6,\"ds_count\":0,\"gt_count\":6,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"skele\",\"unmatched\"],\"rows\":[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,6,0,0]],\"precision\":[0.0,0.0,0.0,0.0],\"recall\":[0.0,0.0,0.0,0.0],\"accuracy\":[1.0,0.0,1.0,0.0],\"jaccard_index\":[0.0,0.0,0.0,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.0,\"precision\":0.0,\"recall\":0.0},\"annotation_components\":{\"shape\":{\"valid_count\":0,\"missing_count\":6,\"extra_count\":0,\"total_count\":6,\"ds_count\":0,\"gt_count\":6,\"mean_iou\":0.0,\"accuracy\":0.0},\"label\":{\"valid_count\":0,\"invalid_count\":0,\"total_count\":0,\"accuracy\":0.0}},\"conflict_count\":6,\"warning_count\":0,\"error_count\":6,\"conflicts_by_type\":{\"missing_annotation\":6}},\"2\":{\"conflicts\":[],\"annotations\":{\"valid_count\":0,\"missing_count\":0,\"extra_count\":0,\"total_count\":0,\"ds_count\":0,\"gt_count\":0,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"skele\",\"unmatched\"],\"rows\":[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],\"precision\":[0.0,0.0,0.0,0.0],\"recall\":[0.0,0.0,0.0,0.0],\"accuracy\":[0.0,0.0,0.0,0.0],\"jaccard_index\":[0.0,0.0,0.0,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.0,\"precision\":0.0,\"recall\":0.0},\"annotation_components\":{\"shape\":{\"valid_count\":0,\"missing_count\":0,\"extra_count\":0,\"total_count\":0,\"ds_count\":0,\"gt_count\":0,\"mean_iou\":0,\"accuracy\":0.0},\"label\":{\"valid_count\":0,\"invalid_count\":0,\"total_count\":0,\"accuracy\":0.0}},\"conflict_count\":0,\"warning_count\":0,\"error_count\":0,\"conflicts_by_type\":{}}}}" } }, @@ -11948,6 +11954,7 @@ "target_last_updated": "2024-03-21T20:50:05.947Z", "gt_last_updated": "2024-03-21T20:50:20.020Z", "assignee": null, + "assignee_last_updated": null, "data": "{\"parameters\":{\"included_annotation_types\":[\"bbox\",\"points\",\"mask\",\"polygon\",\"polyline\",\"skeleton\"],\"compare_attributes\":true,\"ignored_attributes\":[],\"iou_threshold\":0.4,\"low_overlap_threshold\":0.8,\"oks_sigma\":0.09,\"line_thickness\":0.01,\"compare_line_orientation\":true,\"line_orientation_threshold\":0.1,\"compare_groups\":true,\"group_match_threshold\":0.5,\"check_covered_annotations\":true,\"object_visibility_threshold\":0.05,\"panoptic_comparison\":true},\"comparison_summary\":{\"frame_share\":0.2727272727272727,\"frames\":[4,5,7],\"conflict_count\":3,\"warning_count\":1,\"error_count\":2,\"conflicts_by_type\":{\"low_overlap\":1,\"missing_annotation\":1,\"extra_annotation\":1},\"annotations\":{\"valid_count\":2,\"missing_count\":1,\"extra_count\":1,\"total_count\":4,\"ds_count\":3,\"gt_count\":3,\"confusion_matrix\":{\"labels\":[\"cat\",\"dog\",\"unmatched\"],\"rows\":[[2,0,1],[0,0,0],[1,0,0]],\"precision\":[0.0,0.0,0.0],\"recall\":[0.0,0.0,0.0],\"accuracy\":[0.0,0.0,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.5,\"precision\":0.6666666666666666,\"recall\":0.6666666666666666},\"annotation_components\":{\"shape\":{\"valid_count\":2,\"missing_count\":1,\"extra_count\":1,\"total_count\":4,\"ds_count\":3,\"gt_count\":3,\"mean_iou\":null,\"accuracy\":0.5},\"label\":{\"valid_count\":2,\"invalid_count\":0,\"total_count\":2,\"accuracy\":1.0}},\"frame_count\":3,\"mean_conflict_count\":1.0},\"frame_results\":{\"5\":{\"conflicts\":[{\"frame_id\":5,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":156,\"job_id\":30,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":163,\"job_id\":32,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"}],\"annotations\":{\"valid_count\":1,\"missing_count\":0,\"extra_count\":0,\"total_count\":1,\"ds_count\":1,\"gt_count\":1,\"confusion_matrix\":{\"labels\":[\"cat\",\"dog\",\"unmatched\"],\"rows\":[[1,0,0],[0,0,0],[0,0,0]],\"precision\":[1.0,0.0,0.0],\"recall\":[1.0,0.0,0.0],\"accuracy\":[1.0,0.0,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":1.0,\"precision\":1.0,\"recall\":1.0},\"annotation_components\":{\"shape\":{\"valid_count\":1,\"missing_count\":0,\"extra_count\":0,\"total_count\":1,\"ds_count\":1,\"gt_count\":1,\"mean_iou\":0.6077449295377204,\"accuracy\":1.0},\"label\":{\"valid_count\":1,\"invalid_count\":0,\"total_count\":1,\"accuracy\":1.0}},\"conflict_count\":1,\"warning_count\":1,\"error_count\":0,\"conflicts_by_type\":{\"low_overlap\":1}},\"7\":{\"conflicts\":[],\"annotations\":{\"valid_count\":1,\"missing_count\":0,\"extra_count\":0,\"total_count\":1,\"ds_count\":1,\"gt_count\":1,\"confusion_matrix\":{\"labels\":[\"cat\",\"dog\",\"unmatched\"],\"rows\":[[1,0,0],[0,0,0],[0,0,0]],\"precision\":[1.0,0.0,0.0],\"recall\":[1.0,0.0,0.0],\"accuracy\":[1.0,0.0,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":1.0,\"precision\":1.0,\"recall\":1.0},\"annotation_components\":{\"shape\":{\"valid_count\":1,\"missing_count\":0,\"extra_count\":0,\"total_count\":1,\"ds_count\":1,\"gt_count\":1,\"mean_iou\":0.8588610910105674,\"accuracy\":1.0},\"label\":{\"valid_count\":1,\"invalid_count\":0,\"total_count\":1,\"accuracy\":1.0}},\"conflict_count\":0,\"warning_count\":0,\"error_count\":0,\"conflicts_by_type\":{}},\"4\":{\"conflicts\":[{\"frame_id\":4,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":162,\"job_id\":32,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":4,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":155,\"job_id\":29,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"}],\"annotations\":{\"valid_count\":0,\"missing_count\":1,\"extra_count\":1,\"total_count\":2,\"ds_count\":1,\"gt_count\":1,\"confusion_matrix\":{\"labels\":[\"cat\",\"dog\",\"unmatched\"],\"rows\":[[0,0,1],[0,0,0],[1,0,0]],\"precision\":[0.0,0.0,0.0],\"recall\":[0.0,0.0,0.0],\"accuracy\":[0.0,0.0,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.0,\"precision\":0.0,\"recall\":0.0},\"annotation_components\":{\"shape\":{\"valid_count\":0,\"missing_count\":1,\"extra_count\":1,\"total_count\":2,\"ds_count\":1,\"gt_count\":1,\"mean_iou\":0.1548852356623416,\"accuracy\":0.0},\"label\":{\"valid_count\":0,\"invalid_count\":0,\"total_count\":0,\"accuracy\":0.0}},\"conflict_count\":2,\"warning_count\":0,\"error_count\":2,\"conflicts_by_type\":{\"missing_annotation\":1,\"extra_annotation\":1}}}}" } }, @@ -11962,6 +11969,7 @@ "target_last_updated": "2024-03-21T20:50:27.594Z", "gt_last_updated": "2024-03-21T20:50:20.020Z", "assignee": null, + "assignee_last_updated": null, "data": "{\"parameters\":{\"included_annotation_types\":[\"bbox\",\"points\",\"mask\",\"polygon\",\"polyline\",\"skeleton\"],\"compare_attributes\":true,\"ignored_attributes\":[],\"iou_threshold\":0.4,\"low_overlap_threshold\":0.8,\"oks_sigma\":0.09,\"line_thickness\":0.01,\"compare_line_orientation\":true,\"line_orientation_threshold\":0.1,\"compare_groups\":true,\"group_match_threshold\":0.5,\"check_covered_annotations\":true,\"object_visibility_threshold\":0.05,\"panoptic_comparison\":true},\"comparison_summary\":{\"frame_share\":0.0,\"frames\":[],\"conflict_count\":0,\"warning_count\":0,\"error_count\":0,\"conflicts_by_type\":{},\"annotations\":{\"valid_count\":0,\"missing_count\":0,\"extra_count\":0,\"total_count\":0,\"ds_count\":0,\"gt_count\":0,\"confusion_matrix\":{\"labels\":[\"cat\",\"dog\",\"unmatched\"],\"rows\":[[0,0,0],[0,0,0],[0,0,0]],\"precision\":[0.0,0.0,0.0],\"recall\":[0.0,0.0,0.0],\"accuracy\":[0.0,0.0,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.0,\"precision\":0.0,\"recall\":0.0},\"annotation_components\":{\"shape\":{\"valid_count\":0,\"missing_count\":0,\"extra_count\":0,\"total_count\":0,\"ds_count\":0,\"gt_count\":0,\"mean_iou\":null,\"accuracy\":0.0},\"label\":{\"valid_count\":0,\"invalid_count\":0,\"total_count\":0,\"accuracy\":0.0}},\"frame_count\":0,\"mean_conflict_count\":0.0},\"frame_results\":{}}" } }, @@ -11976,6 +11984,7 @@ "target_last_updated": "2024-03-21T20:50:33.610Z", "gt_last_updated": "2024-03-21T20:50:20.020Z", "assignee": null, + "assignee_last_updated": null, "data": "{\"parameters\":{\"included_annotation_types\":[\"bbox\",\"points\",\"mask\",\"polygon\",\"polyline\",\"skeleton\"],\"compare_attributes\":true,\"ignored_attributes\":[],\"iou_threshold\":0.4,\"low_overlap_threshold\":0.8,\"oks_sigma\":0.09,\"line_thickness\":0.01,\"compare_line_orientation\":true,\"line_orientation_threshold\":0.1,\"compare_groups\":true,\"group_match_threshold\":0.5,\"check_covered_annotations\":true,\"object_visibility_threshold\":0.05,\"panoptic_comparison\":true},\"comparison_summary\":{\"frame_share\":0.4,\"frames\":[5,7],\"conflict_count\":1,\"warning_count\":1,\"error_count\":0,\"conflicts_by_type\":{\"low_overlap\":1},\"annotations\":{\"valid_count\":2,\"missing_count\":0,\"extra_count\":0,\"total_count\":2,\"ds_count\":2,\"gt_count\":2,\"confusion_matrix\":{\"labels\":[\"cat\",\"dog\",\"unmatched\"],\"rows\":[[2,0,0],[0,0,0],[0,0,0]],\"precision\":[1.0,0.0,0.0],\"recall\":[1.0,0.0,0.0],\"accuracy\":[1.0,0.0,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":1.0,\"precision\":1.0,\"recall\":1.0},\"annotation_components\":{\"shape\":{\"valid_count\":2,\"missing_count\":0,\"extra_count\":0,\"total_count\":2,\"ds_count\":2,\"gt_count\":2,\"mean_iou\":0.7333030102741439,\"accuracy\":1.0},\"label\":{\"valid_count\":2,\"invalid_count\":0,\"total_count\":2,\"accuracy\":1.0}},\"frame_count\":2,\"mean_conflict_count\":0.5},\"frame_results\":{\"5\":{\"conflicts\":[{\"frame_id\":5,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":156,\"job_id\":30,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":163,\"job_id\":32,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"}],\"annotations\":{\"valid_count\":1,\"missing_count\":0,\"extra_count\":0,\"total_count\":1,\"ds_count\":1,\"gt_count\":1,\"confusion_matrix\":{\"labels\":[\"cat\",\"dog\",\"unmatched\"],\"rows\":[[1,0,0],[0,0,0],[0,0,0]],\"precision\":[1.0,0.0,0.0],\"recall\":[1.0,0.0,0.0],\"accuracy\":[1.0,0.0,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":1.0,\"precision\":1.0,\"recall\":1.0},\"annotation_components\":{\"shape\":{\"valid_count\":1,\"missing_count\":0,\"extra_count\":0,\"total_count\":1,\"ds_count\":1,\"gt_count\":1,\"mean_iou\":0.6077449295377204,\"accuracy\":1.0},\"label\":{\"valid_count\":1,\"invalid_count\":0,\"total_count\":1,\"accuracy\":1.0}},\"conflict_count\":1,\"warning_count\":1,\"error_count\":0,\"conflicts_by_type\":{\"low_overlap\":1}},\"7\":{\"conflicts\":[],\"annotations\":{\"valid_count\":1,\"missing_count\":0,\"extra_count\":0,\"total_count\":1,\"ds_count\":1,\"gt_count\":1,\"confusion_matrix\":{\"labels\":[\"cat\",\"dog\",\"unmatched\"],\"rows\":[[1,0,0],[0,0,0],[0,0,0]],\"precision\":[1.0,0.0,0.0],\"recall\":[1.0,0.0,0.0],\"accuracy\":[1.0,0.0,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":1.0,\"precision\":1.0,\"recall\":1.0},\"annotation_components\":{\"shape\":{\"valid_count\":1,\"missing_count\":0,\"extra_count\":0,\"total_count\":1,\"ds_count\":1,\"gt_count\":1,\"mean_iou\":0.8588610910105674,\"accuracy\":1.0},\"label\":{\"valid_count\":1,\"invalid_count\":0,\"total_count\":1,\"accuracy\":1.0}},\"conflict_count\":0,\"warning_count\":0,\"error_count\":0,\"conflicts_by_type\":{}}}}" } }, @@ -11990,6 +11999,7 @@ "target_last_updated": "2024-03-21T20:50:39.585Z", "gt_last_updated": "2024-03-21T20:50:20.020Z", "assignee": null, + "assignee_last_updated": null, "data": "{\"parameters\":{\"included_annotation_types\":[\"bbox\",\"points\",\"mask\",\"polygon\",\"polyline\",\"skeleton\"],\"compare_attributes\":true,\"ignored_attributes\":[],\"iou_threshold\":0.4,\"low_overlap_threshold\":0.8,\"oks_sigma\":0.09,\"line_thickness\":0.01,\"compare_line_orientation\":true,\"line_orientation_threshold\":0.1,\"compare_groups\":true,\"group_match_threshold\":0.5,\"check_covered_annotations\":true,\"object_visibility_threshold\":0.05,\"panoptic_comparison\":true},\"comparison_summary\":{\"frame_share\":0.2,\"frames\":[4],\"conflict_count\":2,\"warning_count\":0,\"error_count\":2,\"conflicts_by_type\":{\"missing_annotation\":1,\"extra_annotation\":1},\"annotations\":{\"valid_count\":0,\"missing_count\":1,\"extra_count\":1,\"total_count\":2,\"ds_count\":1,\"gt_count\":1,\"confusion_matrix\":{\"labels\":[\"cat\",\"dog\",\"unmatched\"],\"rows\":[[0,0,1],[0,0,0],[1,0,0]],\"precision\":[0.0,0.0,0.0],\"recall\":[0.0,0.0,0.0],\"accuracy\":[0.0,0.0,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.0,\"precision\":0.0,\"recall\":0.0},\"annotation_components\":{\"shape\":{\"valid_count\":0,\"missing_count\":1,\"extra_count\":1,\"total_count\":2,\"ds_count\":1,\"gt_count\":1,\"mean_iou\":0.1548852356623416,\"accuracy\":0.0},\"label\":{\"valid_count\":0,\"invalid_count\":0,\"total_count\":0,\"accuracy\":0.0}},\"frame_count\":1,\"mean_conflict_count\":2.0},\"frame_results\":{\"4\":{\"conflicts\":[{\"frame_id\":4,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":162,\"job_id\":32,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":4,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":155,\"job_id\":29,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"}],\"annotations\":{\"valid_count\":0,\"missing_count\":1,\"extra_count\":1,\"total_count\":2,\"ds_count\":1,\"gt_count\":1,\"confusion_matrix\":{\"labels\":[\"cat\",\"dog\",\"unmatched\"],\"rows\":[[0,0,1],[0,0,0],[1,0,0]],\"precision\":[0.0,0.0,0.0],\"recall\":[0.0,0.0,0.0],\"accuracy\":[0.0,0.0,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.0,\"precision\":0.0,\"recall\":0.0},\"annotation_components\":{\"shape\":{\"valid_count\":0,\"missing_count\":1,\"extra_count\":1,\"total_count\":2,\"ds_count\":1,\"gt_count\":1,\"mean_iou\":0.1548852356623416,\"accuracy\":0.0},\"label\":{\"valid_count\":0,\"invalid_count\":0,\"total_count\":0,\"accuracy\":0.0}},\"conflict_count\":2,\"warning_count\":0,\"error_count\":2,\"conflicts_by_type\":{\"missing_annotation\":1,\"extra_annotation\":1}}}}" } }, @@ -12004,6 +12014,7 @@ "target_last_updated": "2023-11-24T15:23:30.045Z", "gt_last_updated": "2023-11-24T15:18:55.216Z", "assignee": null, + "assignee_last_updated": null, "data": "{\"parameters\":{\"included_annotation_types\":[\"bbox\",\"points\",\"mask\",\"polygon\",\"polyline\",\"skeleton\",\"label\"],\"compare_attributes\":true,\"ignored_attributes\":[],\"iou_threshold\":0.4,\"low_overlap_threshold\":0.8,\"oks_sigma\":0.09,\"line_thickness\":0.01,\"compare_line_orientation\":true,\"line_orientation_threshold\":0.1,\"compare_groups\":true,\"group_match_threshold\":0.5,\"check_covered_annotations\":true,\"object_visibility_threshold\":0.05,\"panoptic_comparison\":true},\"comparison_summary\":{\"frame_share\":0.2727272727272727,\"frames\":[0,1,2],\"conflict_count\":42,\"warning_count\":16,\"error_count\":26,\"conflicts_by_type\":{\"low_overlap\":7,\"missing_annotation\":12,\"extra_annotation\":11,\"mismatching_label\":3,\"mismatching_direction\":1,\"covered_annotation\":1,\"mismatching_attributes\":1,\"mismatching_groups\":6},\"annotations\":{\"valid_count\":22,\"missing_count\":12,\"extra_count\":11,\"total_count\":48,\"ds_count\":36,\"gt_count\":37,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"skele\",\"unmatched\"],\"rows\":[[0,2,0,3],[1,21,0,7],[0,0,1,1],[1,10,1,0]],\"precision\":[0.0,0.7241379310344828,0.5,0.0],\"recall\":[0.0,0.6363636363636364,0.5,0.0],\"accuracy\":[0.8541666666666666,0.5833333333333334,0.9583333333333334,0.5208333333333334],\"jaccard_index\":[0.0,0.5121951219512195,0.3333333333333333,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.4583333333333333,\"precision\":0.6111111111111112,\"recall\":0.5945945945945946},\"annotation_components\":{\"shape\":{\"valid_count\":25,\"missing_count\":10,\"extra_count\":11,\"total_count\":46,\"ds_count\":36,\"gt_count\":35,\"mean_iou\":0.18567508032031,\"accuracy\":0.5434782608695652},\"label\":{\"valid_count\":22,\"invalid_count\":3,\"total_count\":25,\"accuracy\":0.88}},\"frame_count\":3,\"mean_conflict_count\":14.0},\"frame_results\":{\"0\":{\"conflicts\":[{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":65,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":101,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":91,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":118,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":88,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":102,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":68,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"},{\"obj_id\":98,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":67,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"},{\"obj_id\":99,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":141,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"skeleton\"},{\"obj_id\":132,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"skeleton\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":92,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":119,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":107,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":121,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":122,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":131,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"skeleton\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":7,\"job_id\":28,\"type\":\"tag\",\"shape_type\":null}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":70,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":76,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":93,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":74,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":95,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":73,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":96,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"ellipse\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":64,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":66,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":94,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":142,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"skeleton\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_label\",\"annotation_ids\":[{\"obj_id\":92,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":119,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_label\",\"annotation_ids\":[{\"obj_id\":89,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":123,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_label\",\"annotation_ids\":[{\"obj_id\":69,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"mask\"},{\"obj_id\":97,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_direction\",\"annotation_ids\":[{\"obj_id\":67,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"},{\"obj_id\":99,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"covered_annotation\",\"annotation_ids\":[{\"obj_id\":69,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"mask\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_attributes\",\"annotation_ids\":[{\"obj_id\":65,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":101,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":82,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":103,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":81,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":104,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":83,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":105,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":87,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":106,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":80,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":111,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":77,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":114,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"}],\"annotations\":{\"valid_count\":22,\"missing_count\":5,\"extra_count\":11,\"total_count\":41,\"ds_count\":36,\"gt_count\":30,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"skele\",\"unmatched\"],\"rows\":[[0,2,0,3],[1,21,0,7],[0,0,1,1],[1,3,1,0]],\"precision\":[0.0,0.7241379310344828,0.5,0.0],\"recall\":[0.0,0.8076923076923077,0.5,0.0],\"accuracy\":[0.8292682926829268,0.6829268292682927,0.9512195121951219,0.6097560975609756],\"jaccard_index\":[0.0,0.6176470588235294,0.3333333333333333,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.5365853658536586,\"precision\":0.6111111111111112,\"recall\":0.7333333333333333},\"annotation_components\":{\"shape\":{\"valid_count\":25,\"missing_count\":4,\"extra_count\":11,\"total_count\":40,\"ds_count\":36,\"gt_count\":29,\"mean_iou\":0.55702524096093,\"accuracy\":0.625},\"label\":{\"valid_count\":22,\"invalid_count\":3,\"total_count\":25,\"accuracy\":0.88}},\"conflict_count\":35,\"warning_count\":16,\"error_count\":19,\"conflicts_by_type\":{\"low_overlap\":7,\"missing_annotation\":5,\"extra_annotation\":11,\"mismatching_label\":3,\"mismatching_direction\":1,\"covered_annotation\":1,\"mismatching_attributes\":1,\"mismatching_groups\":6}},\"1\":{\"conflicts\":[{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":130,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":128,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":124,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":125,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"ellipse\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":127,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"mask\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":129,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":8,\"job_id\":28,\"type\":\"tag\",\"shape_type\":null}],\"severity\":\"error\"}],\"annotations\":{\"valid_count\":0,\"missing_count\":7,\"extra_count\":0,\"total_count\":7,\"ds_count\":0,\"gt_count\":7,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"skele\",\"unmatched\"],\"rows\":[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,7,0,0]],\"precision\":[0.0,0.0,0.0,0.0],\"recall\":[0.0,0.0,0.0,0.0],\"accuracy\":[1.0,0.0,1.0,0.0],\"jaccard_index\":[0.0,0.0,0.0,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.0,\"precision\":0.0,\"recall\":0.0},\"annotation_components\":{\"shape\":{\"valid_count\":0,\"missing_count\":6,\"extra_count\":0,\"total_count\":6,\"ds_count\":0,\"gt_count\":6,\"mean_iou\":0.0,\"accuracy\":0.0},\"label\":{\"valid_count\":0,\"invalid_count\":0,\"total_count\":0,\"accuracy\":0.0}},\"conflict_count\":7,\"warning_count\":0,\"error_count\":7,\"conflicts_by_type\":{\"missing_annotation\":7}},\"2\":{\"conflicts\":[],\"annotations\":{\"valid_count\":0,\"missing_count\":0,\"extra_count\":0,\"total_count\":0,\"ds_count\":0,\"gt_count\":0,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"skele\",\"unmatched\"],\"rows\":[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],\"precision\":[0.0,0.0,0.0,0.0],\"recall\":[0.0,0.0,0.0,0.0],\"accuracy\":[0.0,0.0,0.0,0.0],\"jaccard_index\":[0.0,0.0,0.0,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.0,\"precision\":0.0,\"recall\":0.0},\"annotation_components\":{\"shape\":{\"valid_count\":0,\"missing_count\":0,\"extra_count\":0,\"total_count\":0,\"ds_count\":0,\"gt_count\":0,\"mean_iou\":0,\"accuracy\":0.0},\"label\":{\"valid_count\":0,\"invalid_count\":0,\"total_count\":0,\"accuracy\":0.0}},\"conflict_count\":0,\"warning_count\":0,\"error_count\":0,\"conflicts_by_type\":{}}}}" } }, @@ -12018,6 +12029,7 @@ "target_last_updated": "2023-11-24T15:23:30.269Z", "gt_last_updated": "2023-11-24T15:18:55.216Z", "assignee": null, + "assignee_last_updated": null, "data": "{\"parameters\":{\"included_annotation_types\":[\"bbox\",\"points\",\"mask\",\"polygon\",\"polyline\",\"skeleton\",\"label\"],\"compare_attributes\":true,\"ignored_attributes\":[],\"iou_threshold\":0.4,\"low_overlap_threshold\":0.8,\"oks_sigma\":0.09,\"line_thickness\":0.01,\"compare_line_orientation\":true,\"line_orientation_threshold\":0.1,\"compare_groups\":true,\"group_match_threshold\":0.5,\"check_covered_annotations\":true,\"object_visibility_threshold\":0.05,\"panoptic_comparison\":true},\"comparison_summary\":{\"frame_share\":0.2727272727272727,\"frames\":[0,1,2],\"conflict_count\":42,\"warning_count\":16,\"error_count\":26,\"conflicts_by_type\":{\"low_overlap\":7,\"missing_annotation\":12,\"extra_annotation\":11,\"mismatching_label\":3,\"mismatching_direction\":1,\"covered_annotation\":1,\"mismatching_attributes\":1,\"mismatching_groups\":6},\"annotations\":{\"valid_count\":22,\"missing_count\":12,\"extra_count\":11,\"total_count\":48,\"ds_count\":36,\"gt_count\":37,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"skele\",\"unmatched\"],\"rows\":[[0,2,0,3],[1,21,0,7],[0,0,1,1],[1,10,1,0]],\"precision\":[0.0,0.7241379310344828,0.5,0.0],\"recall\":[0.0,0.6363636363636364,0.5,0.0],\"accuracy\":[0.8541666666666666,0.5833333333333334,0.9583333333333334,0.5208333333333334],\"jaccard_index\":[0.0,0.5121951219512195,0.3333333333333333,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.4583333333333333,\"precision\":0.6111111111111112,\"recall\":0.5945945945945946},\"annotation_components\":{\"shape\":{\"valid_count\":25,\"missing_count\":10,\"extra_count\":11,\"total_count\":46,\"ds_count\":36,\"gt_count\":35,\"mean_iou\":0.18567508032031,\"accuracy\":0.5434782608695652},\"label\":{\"valid_count\":22,\"invalid_count\":3,\"total_count\":25,\"accuracy\":0.88}},\"frame_count\":3,\"mean_conflict_count\":14.0},\"frame_results\":{\"0\":{\"conflicts\":[{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":65,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":101,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":91,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":118,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":88,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":102,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":68,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"},{\"obj_id\":98,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":67,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"},{\"obj_id\":99,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":141,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"skeleton\"},{\"obj_id\":132,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"skeleton\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"low_overlap\",\"annotation_ids\":[{\"obj_id\":92,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":119,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":107,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":121,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":122,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":131,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"skeleton\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":7,\"job_id\":28,\"type\":\"tag\",\"shape_type\":null}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":70,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":76,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":93,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":74,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":95,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":73,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":96,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"ellipse\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":64,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":66,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":94,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"extra_annotation\",\"annotation_ids\":[{\"obj_id\":142,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"skeleton\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_label\",\"annotation_ids\":[{\"obj_id\":92,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":119,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_label\",\"annotation_ids\":[{\"obj_id\":89,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"points\"},{\"obj_id\":123,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_label\",\"annotation_ids\":[{\"obj_id\":69,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"mask\"},{\"obj_id\":97,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":0,\"type\":\"mismatching_direction\",\"annotation_ids\":[{\"obj_id\":67,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"polyline\"},{\"obj_id\":99,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"covered_annotation\",\"annotation_ids\":[{\"obj_id\":69,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"mask\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_attributes\",\"annotation_ids\":[{\"obj_id\":65,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":101,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":82,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":103,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":81,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":104,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":83,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":105,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":87,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":106,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":80,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":111,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"},{\"frame_id\":0,\"type\":\"mismatching_groups\",\"annotation_ids\":[{\"obj_id\":77,\"job_id\":27,\"type\":\"shape\",\"shape_type\":\"rectangle\"},{\"obj_id\":114,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"warning\"}],\"annotations\":{\"valid_count\":22,\"missing_count\":5,\"extra_count\":11,\"total_count\":41,\"ds_count\":36,\"gt_count\":30,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"skele\",\"unmatched\"],\"rows\":[[0,2,0,3],[1,21,0,7],[0,0,1,1],[1,3,1,0]],\"precision\":[0.0,0.7241379310344828,0.5,0.0],\"recall\":[0.0,0.8076923076923077,0.5,0.0],\"accuracy\":[0.8292682926829268,0.6829268292682927,0.9512195121951219,0.6097560975609756],\"jaccard_index\":[0.0,0.6176470588235294,0.3333333333333333,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.5365853658536586,\"precision\":0.6111111111111112,\"recall\":0.7333333333333333},\"annotation_components\":{\"shape\":{\"valid_count\":25,\"missing_count\":4,\"extra_count\":11,\"total_count\":40,\"ds_count\":36,\"gt_count\":29,\"mean_iou\":0.55702524096093,\"accuracy\":0.625},\"label\":{\"valid_count\":22,\"invalid_count\":3,\"total_count\":25,\"accuracy\":0.88}},\"conflict_count\":35,\"warning_count\":16,\"error_count\":19,\"conflicts_by_type\":{\"low_overlap\":7,\"missing_annotation\":5,\"extra_annotation\":11,\"mismatching_label\":3,\"mismatching_direction\":1,\"covered_annotation\":1,\"mismatching_attributes\":1,\"mismatching_groups\":6}},\"1\":{\"conflicts\":[{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":130,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"rectangle\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":128,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"points\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":124,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polygon\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":125,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"ellipse\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":127,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"mask\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":129,\"job_id\":28,\"type\":\"shape\",\"shape_type\":\"polyline\"}],\"severity\":\"error\"},{\"frame_id\":1,\"type\":\"missing_annotation\",\"annotation_ids\":[{\"obj_id\":8,\"job_id\":28,\"type\":\"tag\",\"shape_type\":null}],\"severity\":\"error\"}],\"annotations\":{\"valid_count\":0,\"missing_count\":7,\"extra_count\":0,\"total_count\":7,\"ds_count\":0,\"gt_count\":7,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"skele\",\"unmatched\"],\"rows\":[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,7,0,0]],\"precision\":[0.0,0.0,0.0,0.0],\"recall\":[0.0,0.0,0.0,0.0],\"accuracy\":[1.0,0.0,1.0,0.0],\"jaccard_index\":[0.0,0.0,0.0,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.0,\"precision\":0.0,\"recall\":0.0},\"annotation_components\":{\"shape\":{\"valid_count\":0,\"missing_count\":6,\"extra_count\":0,\"total_count\":6,\"ds_count\":0,\"gt_count\":6,\"mean_iou\":0.0,\"accuracy\":0.0},\"label\":{\"valid_count\":0,\"invalid_count\":0,\"total_count\":0,\"accuracy\":0.0}},\"conflict_count\":7,\"warning_count\":0,\"error_count\":7,\"conflicts_by_type\":{\"missing_annotation\":7}},\"2\":{\"conflicts\":[],\"annotations\":{\"valid_count\":0,\"missing_count\":0,\"extra_count\":0,\"total_count\":0,\"ds_count\":0,\"gt_count\":0,\"confusion_matrix\":{\"labels\":[\"dog\",\"cat\",\"skele\",\"unmatched\"],\"rows\":[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],\"precision\":[0.0,0.0,0.0,0.0],\"recall\":[0.0,0.0,0.0,0.0],\"accuracy\":[0.0,0.0,0.0,0.0],\"jaccard_index\":[0.0,0.0,0.0,0.0],\"axes\":{\"cols\":\"gt\",\"rows\":\"ds\"}},\"accuracy\":0.0,\"precision\":0.0,\"recall\":0.0},\"annotation_components\":{\"shape\":{\"valid_count\":0,\"missing_count\":0,\"extra_count\":0,\"total_count\":0,\"ds_count\":0,\"gt_count\":0,\"mean_iou\":0,\"accuracy\":0.0},\"label\":{\"valid_count\":0,\"invalid_count\":0,\"total_count\":0,\"accuracy\":0.0}},\"conflict_count\":0,\"warning_count\":0,\"error_count\":0,\"conflicts_by_type\":{}}}}" } }, @@ -16231,7 +16243,10 @@ "check_covered_annotations": true, "object_visibility_threshold": 0.05, "panoptic_comparison": true, - "compare_attributes": true + "compare_attributes": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, + "max_validations_per_job": 0 } }, { @@ -16250,7 +16265,10 @@ "check_covered_annotations": true, "object_visibility_threshold": 0.05, "panoptic_comparison": true, - "compare_attributes": true + "compare_attributes": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, + "max_validations_per_job": 0 } }, { @@ -16269,7 +16287,10 @@ "check_covered_annotations": true, "object_visibility_threshold": 0.05, "panoptic_comparison": true, - "compare_attributes": true + "compare_attributes": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, + "max_validations_per_job": 0 } }, { @@ -16288,7 +16309,10 @@ "check_covered_annotations": true, "object_visibility_threshold": 0.05, "panoptic_comparison": true, - "compare_attributes": true + "compare_attributes": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, + "max_validations_per_job": 0 } }, { @@ -16307,7 +16331,10 @@ "check_covered_annotations": true, "object_visibility_threshold": 0.05, "panoptic_comparison": true, - "compare_attributes": true + "compare_attributes": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, + "max_validations_per_job": 0 } }, { @@ -16326,7 +16353,10 @@ "check_covered_annotations": true, "object_visibility_threshold": 0.05, "panoptic_comparison": true, - "compare_attributes": true + "compare_attributes": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, + "max_validations_per_job": 0 } }, { @@ -16345,7 +16375,10 @@ "check_covered_annotations": true, "object_visibility_threshold": 0.05, "panoptic_comparison": true, - "compare_attributes": true + "compare_attributes": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, + "max_validations_per_job": 0 } }, { @@ -16364,7 +16397,10 @@ "check_covered_annotations": true, "object_visibility_threshold": 0.05, "panoptic_comparison": true, - "compare_attributes": true + "compare_attributes": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, + "max_validations_per_job": 0 } }, { @@ -16383,7 +16419,10 @@ "check_covered_annotations": true, "object_visibility_threshold": 0.05, "panoptic_comparison": true, - "compare_attributes": true + "compare_attributes": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, + "max_validations_per_job": 0 } }, { @@ -16402,7 +16441,10 @@ "check_covered_annotations": true, "object_visibility_threshold": 0.05, "panoptic_comparison": true, - "compare_attributes": true + "compare_attributes": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, + "max_validations_per_job": 0 } }, { @@ -16421,7 +16463,10 @@ "check_covered_annotations": true, "object_visibility_threshold": 0.05, "panoptic_comparison": true, - "compare_attributes": true + "compare_attributes": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, + "max_validations_per_job": 0 } }, { @@ -16440,7 +16485,10 @@ "check_covered_annotations": true, "object_visibility_threshold": 0.05, "panoptic_comparison": true, - "compare_attributes": true + "compare_attributes": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, + "max_validations_per_job": 0 } }, { @@ -16459,7 +16507,10 @@ "check_covered_annotations": true, "object_visibility_threshold": 0.05, "panoptic_comparison": true, - "compare_attributes": true + "compare_attributes": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, + "max_validations_per_job": 0 } }, { @@ -16478,7 +16529,10 @@ "check_covered_annotations": true, "object_visibility_threshold": 0.05, "panoptic_comparison": true, - "compare_attributes": true + "compare_attributes": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, + "max_validations_per_job": 0 } }, { @@ -16497,7 +16551,10 @@ "check_covered_annotations": true, "object_visibility_threshold": 0.05, "panoptic_comparison": true, - "compare_attributes": true + "compare_attributes": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, + "max_validations_per_job": 0 } }, { @@ -16516,7 +16573,10 @@ "check_covered_annotations": true, "object_visibility_threshold": 0.05, "panoptic_comparison": true, - "compare_attributes": true + "compare_attributes": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, + "max_validations_per_job": 0 } }, { @@ -16535,7 +16595,10 @@ "check_covered_annotations": true, "object_visibility_threshold": 0.05, "panoptic_comparison": true, - "compare_attributes": true + "compare_attributes": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, + "max_validations_per_job": 0 } }, { @@ -16554,7 +16617,10 @@ "check_covered_annotations": true, "object_visibility_threshold": 0.05, "panoptic_comparison": true, - "compare_attributes": true + "compare_attributes": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, + "max_validations_per_job": 0 } }, { @@ -16573,7 +16639,10 @@ "check_covered_annotations": true, "object_visibility_threshold": 0.05, "panoptic_comparison": true, - "compare_attributes": true + "compare_attributes": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, + "max_validations_per_job": 0 } }, { @@ -16592,7 +16661,10 @@ "check_covered_annotations": true, "object_visibility_threshold": 0.05, "panoptic_comparison": true, - "compare_attributes": true + "compare_attributes": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, + "max_validations_per_job": 0 } }, { diff --git a/tests/python/shared/assets/quality_reports.json b/tests/python/shared/assets/quality_reports.json index b1fa8173dfe..64ed156e6da 100644 --- a/tests/python/shared/assets/quality_reports.json +++ b/tests/python/shared/assets/quality_reports.json @@ -11,6 +11,7 @@ "job_id": null, "parent_id": null, "summary": { + "accuracy": 0.4883720930232558, "conflict_count": 37, "conflicts_by_type": { "covered_annotation": 1, @@ -27,6 +28,8 @@ "frame_count": 3, "frame_share": 0.2727272727272727, "gt_count": 33, + "precision": 0.6176470588235294, + "recall": 0.6363636363636364, "total_count": 43, "valid_count": 21, "warning_count": 15 @@ -43,6 +46,7 @@ "job_id": 27, "parent_id": 1, "summary": { + "accuracy": 0.4883720930232558, "conflict_count": 37, "conflicts_by_type": { "covered_annotation": 1, @@ -59,6 +63,8 @@ "frame_count": 3, "frame_share": 0.2727272727272727, "gt_count": 33, + "precision": 0.6176470588235294, + "recall": 0.6363636363636364, "total_count": 43, "valid_count": 21, "warning_count": 15 @@ -75,6 +81,7 @@ "job_id": null, "parent_id": null, "summary": { + "accuracy": 0.4782608695652174, "conflict_count": 40, "conflicts_by_type": { "covered_annotation": 1, @@ -91,6 +98,8 @@ "frame_count": 3, "frame_share": 0.2727272727272727, "gt_count": 35, + "precision": 0.6111111111111112, + "recall": 0.6285714285714286, "total_count": 46, "valid_count": 22, "warning_count": 16 @@ -107,6 +116,7 @@ "job_id": 27, "parent_id": 3, "summary": { + "accuracy": 0.4782608695652174, "conflict_count": 40, "conflicts_by_type": { "covered_annotation": 1, @@ -123,6 +133,8 @@ "frame_count": 3, "frame_share": 0.2727272727272727, "gt_count": 35, + "precision": 0.6111111111111112, + "recall": 0.6285714285714286, "total_count": 46, "valid_count": 22, "warning_count": 16 @@ -139,6 +151,7 @@ "job_id": null, "parent_id": null, "summary": { + "accuracy": 0.4782608695652174, "conflict_count": 40, "conflicts_by_type": { "covered_annotation": 1, @@ -155,6 +168,8 @@ "frame_count": 3, "frame_share": 0.2727272727272727, "gt_count": 35, + "precision": 0.6111111111111112, + "recall": 0.6285714285714286, "total_count": 46, "valid_count": 22, "warning_count": 16 @@ -171,6 +186,7 @@ "job_id": 27, "parent_id": 5, "summary": { + "accuracy": 0.4782608695652174, "conflict_count": 40, "conflicts_by_type": { "covered_annotation": 1, @@ -187,6 +203,8 @@ "frame_count": 3, "frame_share": 0.2727272727272727, "gt_count": 35, + "precision": 0.6111111111111112, + "recall": 0.6285714285714286, "total_count": 46, "valid_count": 22, "warning_count": 16 @@ -203,6 +221,7 @@ "job_id": null, "parent_id": null, "summary": { + "accuracy": 0.5, "conflict_count": 3, "conflicts_by_type": { "extra_annotation": 1, @@ -214,6 +233,8 @@ "frame_count": 3, "frame_share": 0.2727272727272727, "gt_count": 3, + "precision": 0.6666666666666666, + "recall": 0.6666666666666666, "total_count": 4, "valid_count": 2, "warning_count": 1 @@ -230,6 +251,7 @@ "job_id": 31, "parent_id": 7, "summary": { + "accuracy": 0.0, "conflict_count": 0, "conflicts_by_type": {}, "ds_count": 0, @@ -237,6 +259,8 @@ "frame_count": 0, "frame_share": 0.0, "gt_count": 0, + "precision": 0.0, + "recall": 0.0, "total_count": 0, "valid_count": 0, "warning_count": 0 @@ -253,6 +277,7 @@ "job_id": 30, "parent_id": 7, "summary": { + "accuracy": 1.0, "conflict_count": 1, "conflicts_by_type": { "low_overlap": 1 @@ -262,6 +287,8 @@ "frame_count": 2, "frame_share": 0.4, "gt_count": 2, + "precision": 1.0, + "recall": 1.0, "total_count": 2, "valid_count": 2, "warning_count": 1 @@ -278,6 +305,7 @@ "job_id": 29, "parent_id": 7, "summary": { + "accuracy": 0.0, "conflict_count": 2, "conflicts_by_type": { "extra_annotation": 1, @@ -288,6 +316,8 @@ "frame_count": 1, "frame_share": 0.2, "gt_count": 1, + "precision": 0.0, + "recall": 0.0, "total_count": 2, "valid_count": 0, "warning_count": 0 @@ -304,6 +334,7 @@ "job_id": null, "parent_id": null, "summary": { + "accuracy": 0.4583333333333333, "conflict_count": 42, "conflicts_by_type": { "covered_annotation": 1, @@ -320,6 +351,8 @@ "frame_count": 3, "frame_share": 0.2727272727272727, "gt_count": 37, + "precision": 0.6111111111111112, + "recall": 0.5945945945945946, "total_count": 48, "valid_count": 22, "warning_count": 16 @@ -336,6 +369,7 @@ "job_id": 27, "parent_id": 11, "summary": { + "accuracy": 0.4583333333333333, "conflict_count": 42, "conflicts_by_type": { "covered_annotation": 1, @@ -352,6 +386,8 @@ "frame_count": 3, "frame_share": 0.2727272727272727, "gt_count": 37, + "precision": 0.6111111111111112, + "recall": 0.5945945945945946, "total_count": 48, "valid_count": 22, "warning_count": 16 diff --git a/tests/python/shared/assets/quality_settings.json b/tests/python/shared/assets/quality_settings.json index e23c786e737..e38feba4b2e 100644 --- a/tests/python/shared/assets/quality_settings.json +++ b/tests/python/shared/assets/quality_settings.json @@ -14,9 +14,12 @@ "line_orientation_threshold": 0.1, "line_thickness": 0.01, "low_overlap_threshold": 0.8, + "max_validations_per_job": 0, "object_visibility_threshold": 0.05, "oks_sigma": 0.09, "panoptic_comparison": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, "task_id": 2 }, { @@ -30,9 +33,12 @@ "line_orientation_threshold": 0.1, "line_thickness": 0.01, "low_overlap_threshold": 0.8, + "max_validations_per_job": 0, "object_visibility_threshold": 0.05, "oks_sigma": 0.09, "panoptic_comparison": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, "task_id": 5 }, { @@ -46,9 +52,12 @@ "line_orientation_threshold": 0.1, "line_thickness": 0.01, "low_overlap_threshold": 0.8, + "max_validations_per_job": 0, "object_visibility_threshold": 0.05, "oks_sigma": 0.09, "panoptic_comparison": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, "task_id": 6 }, { @@ -62,9 +71,12 @@ "line_orientation_threshold": 0.1, "line_thickness": 0.01, "low_overlap_threshold": 0.8, + "max_validations_per_job": 0, "object_visibility_threshold": 0.05, "oks_sigma": 0.09, "panoptic_comparison": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, "task_id": 7 }, { @@ -78,9 +90,12 @@ "line_orientation_threshold": 0.1, "line_thickness": 0.01, "low_overlap_threshold": 0.8, + "max_validations_per_job": 0, "object_visibility_threshold": 0.05, "oks_sigma": 0.09, "panoptic_comparison": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, "task_id": 8 }, { @@ -94,9 +109,12 @@ "line_orientation_threshold": 0.1, "line_thickness": 0.01, "low_overlap_threshold": 0.8, + "max_validations_per_job": 0, "object_visibility_threshold": 0.05, "oks_sigma": 0.09, "panoptic_comparison": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, "task_id": 9 }, { @@ -110,9 +128,12 @@ "line_orientation_threshold": 0.1, "line_thickness": 0.01, "low_overlap_threshold": 0.8, + "max_validations_per_job": 0, "object_visibility_threshold": 0.05, "oks_sigma": 0.09, "panoptic_comparison": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, "task_id": 11 }, { @@ -126,9 +147,12 @@ "line_orientation_threshold": 0.1, "line_thickness": 0.01, "low_overlap_threshold": 0.8, + "max_validations_per_job": 0, "object_visibility_threshold": 0.05, "oks_sigma": 0.09, "panoptic_comparison": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, "task_id": 12 }, { @@ -142,9 +166,12 @@ "line_orientation_threshold": 0.1, "line_thickness": 0.01, "low_overlap_threshold": 0.8, + "max_validations_per_job": 0, "object_visibility_threshold": 0.05, "oks_sigma": 0.09, "panoptic_comparison": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, "task_id": 13 }, { @@ -158,9 +185,12 @@ "line_orientation_threshold": 0.1, "line_thickness": 0.01, "low_overlap_threshold": 0.8, + "max_validations_per_job": 0, "object_visibility_threshold": 0.05, "oks_sigma": 0.09, "panoptic_comparison": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, "task_id": 14 }, { @@ -174,9 +204,12 @@ "line_orientation_threshold": 0.1, "line_thickness": 0.01, "low_overlap_threshold": 0.8, + "max_validations_per_job": 0, "object_visibility_threshold": 0.05, "oks_sigma": 0.09, "panoptic_comparison": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, "task_id": 15 }, { @@ -190,9 +223,12 @@ "line_orientation_threshold": 0.1, "line_thickness": 0.01, "low_overlap_threshold": 0.8, + "max_validations_per_job": 0, "object_visibility_threshold": 0.05, "oks_sigma": 0.09, "panoptic_comparison": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, "task_id": 17 }, { @@ -206,9 +242,12 @@ "line_orientation_threshold": 0.1, "line_thickness": 0.01, "low_overlap_threshold": 0.8, + "max_validations_per_job": 0, "object_visibility_threshold": 0.05, "oks_sigma": 0.09, "panoptic_comparison": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, "task_id": 18 }, { @@ -222,9 +261,12 @@ "line_orientation_threshold": 0.1, "line_thickness": 0.01, "low_overlap_threshold": 0.8, + "max_validations_per_job": 0, "object_visibility_threshold": 0.05, "oks_sigma": 0.09, "panoptic_comparison": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, "task_id": 19 }, { @@ -238,9 +280,12 @@ "line_orientation_threshold": 0.1, "line_thickness": 0.01, "low_overlap_threshold": 0.8, + "max_validations_per_job": 0, "object_visibility_threshold": 0.05, "oks_sigma": 0.09, "panoptic_comparison": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, "task_id": 20 }, { @@ -254,9 +299,12 @@ "line_orientation_threshold": 0.1, "line_thickness": 0.01, "low_overlap_threshold": 0.8, + "max_validations_per_job": 0, "object_visibility_threshold": 0.05, "oks_sigma": 0.09, "panoptic_comparison": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, "task_id": 21 }, { @@ -270,9 +318,12 @@ "line_orientation_threshold": 0.1, "line_thickness": 0.01, "low_overlap_threshold": 0.8, + "max_validations_per_job": 0, "object_visibility_threshold": 0.05, "oks_sigma": 0.09, "panoptic_comparison": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, "task_id": 22 }, { @@ -286,9 +337,12 @@ "line_orientation_threshold": 0.1, "line_thickness": 0.01, "low_overlap_threshold": 0.8, + "max_validations_per_job": 0, "object_visibility_threshold": 0.05, "oks_sigma": 0.09, "panoptic_comparison": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, "task_id": 23 }, { @@ -302,9 +356,12 @@ "line_orientation_threshold": 0.1, "line_thickness": 0.01, "low_overlap_threshold": 0.8, + "max_validations_per_job": 0, "object_visibility_threshold": 0.05, "oks_sigma": 0.09, "panoptic_comparison": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, "task_id": 24 }, { @@ -318,9 +375,12 @@ "line_orientation_threshold": 0.1, "line_thickness": 0.01, "low_overlap_threshold": 0.8, + "max_validations_per_job": 0, "object_visibility_threshold": 0.05, "oks_sigma": 0.09, "panoptic_comparison": true, + "target_metric": "accuracy", + "target_metric_threshold": 0.7, "task_id": 25 } ] From bf09a38ff7273a11f7531e4ece5335dbdff7f6ea Mon Sep 17 00:00:00 2001 From: Maxim Zhiltsov Date: Mon, 19 Aug 2024 23:20:49 +0300 Subject: [PATCH 23/79] Update server schema --- cvat/schema.yml | 66 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/cvat/schema.yml b/cvat/schema.yml index d4f01b9642a..eb32393fa25 100644 --- a/cvat/schema.yml +++ b/cvat/schema.yml @@ -9320,6 +9320,28 @@ components: PatchedQualitySettingsRequest: type: object properties: + target_metric: + allOf: + - $ref: '#/components/schemas/TargetMetricEnum' + description: |- + The primary metric used for quality estimation + + * `accuracy` - ACCURACY + * `precision` - PRECISION + * `recall` - RECALL + target_metric_threshold: + type: number + format: double + description: | + Defines the minimal quality requirements in terms of the selected target metric. + max_validations_per_job: + type: integer + maximum: 2147483647 + minimum: -2147483648 + description: | + The maximum number of job validation attempts for the job assignee. + The job can be automatically accepted if the job quality is above the required + threshold, defined by the target threshold parameter. iou_threshold: type: number format: double @@ -9719,7 +9741,17 @@ components: type: integer total_count: type: integer + accuracy: + type: number + format: double + precision: + type: number + format: double + recall: + type: number + format: double required: + - accuracy - conflict_count - conflicts_by_type - ds_count @@ -9727,6 +9759,8 @@ components: - frame_count - frame_share - gt_count + - precision + - recall - total_count - valid_count - warning_count @@ -9747,6 +9781,28 @@ components: task_id: type: integer readOnly: true + target_metric: + allOf: + - $ref: '#/components/schemas/TargetMetricEnum' + description: |- + The primary metric used for quality estimation + + * `accuracy` - ACCURACY + * `precision` - PRECISION + * `recall` - RECALL + target_metric_threshold: + type: number + format: double + description: | + Defines the minimal quality requirements in terms of the selected target metric. + max_validations_per_job: + type: integer + maximum: 2147483647 + minimum: -2147483648 + description: | + The maximum number of job validation attempts for the job assignee. + The job can be automatically accepted if the job quality is above the required + threshold, defined by the target threshold parameter. iou_threshold: type: number format: double @@ -10325,6 +10381,16 @@ components: type: boolean required: - name + TargetMetricEnum: + enum: + - accuracy + - precision + - recall + type: string + description: |- + * `accuracy` - ACCURACY + * `precision` - PRECISION + * `recall` - RECALL TaskAnnotationsUpdateRequest: oneOf: - $ref: '#/components/schemas/LabeledDataRequest' From abb214fd5daf1e69ff1546d26110848775e2a815 Mon Sep 17 00:00:00 2001 From: Maxim Zhiltsov Date: Tue, 20 Aug 2024 10:51:59 +0300 Subject: [PATCH 24/79] Fix formatting --- .../0003_qualityreport_assignee_last_updated_and_more.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cvat/apps/quality_control/migrations/0003_qualityreport_assignee_last_updated_and_more.py b/cvat/apps/quality_control/migrations/0003_qualityreport_assignee_last_updated_and_more.py index 529f52f0d37..aa27c08c00e 100644 --- a/cvat/apps/quality_control/migrations/0003_qualityreport_assignee_last_updated_and_more.py +++ b/cvat/apps/quality_control/migrations/0003_qualityreport_assignee_last_updated_and_more.py @@ -1,8 +1,9 @@ # Generated by Django 4.2.14 on 2024-08-19 17:23 -import cvat.apps.quality_control.models from django.db import migrations, models +import cvat.apps.quality_control.models + class Migration(migrations.Migration): From 5bff076fa7e039ba6a9b3741efc60b0b3f108b51 Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Tue, 20 Aug 2024 13:10:13 +0300 Subject: [PATCH 25/79] removed quality components --- .../analytics-page/analytics-page.tsx | 23 +- .../shared/quality-settings-modal.tsx | 97 ------ .../src/components/analytics-page/styles.scss | 62 +--- .../analytics-page/task-quality/empty-job.tsx | 39 --- .../task-quality/gt-conflicts.tsx | 112 ------- .../analytics-page/task-quality/issues.tsx | 66 ---- .../analytics-page/task-quality/job-list.tsx | 264 --------------- .../task-quality/mean-quality.tsx | 97 ------ .../task-quality/quality-settings-form.tsx | 316 ------------------ .../task-quality/task-quality-component.tsx | 257 -------------- 10 files changed, 3 insertions(+), 1330 deletions(-) delete mode 100644 cvat-ui/src/components/analytics-page/shared/quality-settings-modal.tsx delete mode 100644 cvat-ui/src/components/analytics-page/task-quality/empty-job.tsx delete mode 100644 cvat-ui/src/components/analytics-page/task-quality/gt-conflicts.tsx delete mode 100644 cvat-ui/src/components/analytics-page/task-quality/issues.tsx delete mode 100644 cvat-ui/src/components/analytics-page/task-quality/job-list.tsx delete mode 100644 cvat-ui/src/components/analytics-page/task-quality/mean-quality.tsx delete mode 100644 cvat-ui/src/components/analytics-page/task-quality/quality-settings-form.tsx delete mode 100644 cvat-ui/src/components/analytics-page/task-quality/task-quality-component.tsx diff --git a/cvat-ui/src/components/analytics-page/analytics-page.tsx b/cvat-ui/src/components/analytics-page/analytics-page.tsx index dfac6803add..49bee64a35d 100644 --- a/cvat-ui/src/components/analytics-page/analytics-page.tsx +++ b/cvat-ui/src/components/analytics-page/analytics-page.tsx @@ -5,7 +5,6 @@ import './styles.scss'; import React, { useCallback, useEffect, useState } from 'react'; -import { useDispatch } from 'react-redux'; import { useLocation, useParams } from 'react-router'; import { Link } from 'react-router-dom'; import { Row, Col } from 'antd/lib/grid'; @@ -14,15 +13,12 @@ import Title from 'antd/lib/typography/Title'; import notification from 'antd/lib/notification'; import moment from 'moment'; import { useIsMounted } from 'utils/hooks'; -import { Project, Task } from 'reducers'; import { - AnalyticsReport, Job, RQStatus, getCore, + AnalyticsReport, Job, Project, RQStatus, Task, getCore, } from 'cvat-core-wrapper'; -import { updateJobAsync } from 'actions/jobs-actions'; import CVATLoadingSpinner from 'components/common/loading-spinner'; import GoBackButton from 'components/common/go-back-button'; import AnalyticsOverview, { DateIntervals } from './analytics-performance'; -import TaskQualityComponent from './task-quality/task-quality-component'; const core = getCore(); @@ -80,7 +76,6 @@ function readInstanceId(type: InstanceType): number { type InstanceType = 'project' | 'task' | 'job'; function AnalyticsPage(): JSX.Element { - const dispatch = useDispatch(); const location = useLocation(); const requestedInstanceType: InstanceType = readInstanceType(location); @@ -224,15 +219,6 @@ function AnalyticsPage(): JSX.Element { }); }, [requestedInstanceType, requestedInstanceID, timePeriod]); - const onJobUpdate = useCallback((job: Job, data: Parameters[0]): void => { - setFetching(true); - dispatch(updateJobAsync(job, data)).finally(() => { - if (isMounted()) { - setFetching(false); - } - }); - }, []); - const onTabKeyChange = useCallback((key: string): void => { setTab(key as AnalyticsTabs); }, []); @@ -282,12 +268,7 @@ function AnalyticsPage(): JSX.Element { onCreateReport={onCreateReport} /> ), - }, - ...(instanceType === 'task' ? [{ - key: AnalyticsTabs.QUALITY, - label: 'Quality', - children: , - }] : [])]} + }]} /> ); } diff --git a/cvat-ui/src/components/analytics-page/shared/quality-settings-modal.tsx b/cvat-ui/src/components/analytics-page/shared/quality-settings-modal.tsx deleted file mode 100644 index c3119037991..00000000000 --- a/cvat-ui/src/components/analytics-page/shared/quality-settings-modal.tsx +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright (C) 2023-2024 CVAT.ai Corporation -// -// SPDX-License-Identifier: MIT - -import React, { useCallback } from 'react'; -import Text from 'antd/lib/typography/Text'; -import Modal from 'antd/lib/modal'; -import Form from 'antd/lib/form'; -import notification from 'antd/lib/notification'; -import { QualitySettings } from 'cvat-core-wrapper'; -import QualitySettingsForm from '../task-quality/quality-settings-form'; - -interface Props { - fetching: boolean; - qualitySettings: QualitySettings | null; - visible: boolean; - setVisible: (visible: boolean) => void; - setQualitySettings: (settings: QualitySettings) => void; -} - -export default function QualitySettingsModal(props: Props): JSX.Element | null { - const { - fetching, - visible, - qualitySettings: settings, - setVisible, - setQualitySettings, - } = props; - - const [form] = Form.useForm(); - - const onOk = useCallback(async () => { - try { - if (settings) { - const values = await form.validateFields(); - settings.lowOverlapThreshold = values.lowOverlapThreshold / 100; - settings.iouThreshold = values.iouThreshold / 100; - settings.compareAttributes = values.compareAttributes; - - settings.oksSigma = values.oksSigma / 100; - - settings.lineThickness = values.lineThickness / 100; - settings.lineOrientationThreshold = values.lineOrientationThreshold / 100; - settings.orientedLines = values.orientedLines; - - settings.compareGroups = values.compareGroups; - settings.groupMatchThreshold = values.groupMatchThreshold / 100; - - settings.checkCoveredAnnotations = values.checkCoveredAnnotations; - settings.objectVisibilityThreshold = values.objectVisibilityThreshold / 100; - - settings.panopticComparison = values.panopticComparison; - - try { - const responseSettings = await settings.save(); - setQualitySettings(responseSettings); - } catch (error: unknown) { - notification.error({ - message: 'Could not save quality settings', - description: typeof Error === 'object' ? (error as object).toString() : '', - }); - throw error; - } - await settings.save(); - } - setVisible(false); - return settings; - } catch (e) { - return false; - } - }, [settings]); - - const onCancel = useCallback(() => { - setVisible(false); - }, []); - - return ( - Annotation Quality Settings} - open={visible} - onOk={onOk} - onCancel={onCancel} - confirmLoading={fetching} - destroyOnClose - className='cvat-modal-quality-settings' - > - { settings ? ( - - ) : ( - No quality settings - )} - - ); -} diff --git a/cvat-ui/src/components/analytics-page/styles.scss b/cvat-ui/src/components/analytics-page/styles.scss index 23e7886ce07..fff75687cef 100644 --- a/cvat-ui/src/components/analytics-page/styles.scss +++ b/cvat-ui/src/components/analytics-page/styles.scss @@ -16,9 +16,7 @@ } } -.cvat-task-quality-page, -.cvat-analytics-overview, -.cvat-project-quality-page { +.cvat-analytics-overview { >.ant-row { margin-top: $grid-unit-size; } @@ -30,19 +28,6 @@ justify-content: space-between; } -.cvat-task-mean-annotation-quality { - .ant-statistic { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - } - - .ant-card-body { - padding: $grid-unit-size * 2 $grid-unit-size * 3; - } -} - .cvat-analytics-refresh-button { margin-right: $grid-unit-size; } @@ -107,48 +92,3 @@ height: 100%; padding-bottom: $grid-unit-size * 2; } - -.cvat-task-quality-reports-hint { - margin-bottom: $grid-unit-size * 3; -} - -.cvat-job-empty-ground-truth-item { - .ant-card-body { - padding: $grid-unit-size * 3; - } - - .ant-btn { - padding-left: $grid-unit-size * 3; - padding-right: $grid-unit-size * 3; - } -} - -.cvat-quality-settings-switch { - padding: $grid-unit-size $grid-unit-size * 1.25; - border: 1px solid lightgray; - margin-left: $grid-unit-size; - border-radius: $border-radius-base; -} - -.cvat-quality-settings-title { - margin-bottom: $grid-unit-size * 2; - align-items: center; -} - -.cvat-modal-quality-settings { - top: $grid-unit-size * 3; - - .ant-divider { - margin: $grid-unit-size 0; - } - - .ant-form-item-control-input { - min-height: 0; - } -} - -.cvat-job-list-item-conflicts { - display: flex; - justify-content: space-between; - align-items: center; -} diff --git a/cvat-ui/src/components/analytics-page/task-quality/empty-job.tsx b/cvat-ui/src/components/analytics-page/task-quality/empty-job.tsx deleted file mode 100644 index ccb3aec48ea..00000000000 --- a/cvat-ui/src/components/analytics-page/task-quality/empty-job.tsx +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (C) 2023 CVAT.ai Corporation -// -// SPDX-License-Identifier: MIT - -import '../styles.scss'; - -import React from 'react'; -import { Link } from 'react-router-dom'; -import { Col, Row } from 'antd/lib/grid'; -import Card from 'antd/lib/card'; -import Button from 'antd/lib/button'; -import Text from 'antd/lib/typography/Text'; - -interface Props { - taskID: number, -} - -function EmptyJobComponent(props: Props): JSX.Element { - const { taskID } = props; - - return ( - - - - - A ground truth job for the task was not created - - - - - - - - ); -} - -export default React.memo(EmptyJobComponent); diff --git a/cvat-ui/src/components/analytics-page/task-quality/gt-conflicts.tsx b/cvat-ui/src/components/analytics-page/task-quality/gt-conflicts.tsx deleted file mode 100644 index 9804412cf1d..00000000000 --- a/cvat-ui/src/components/analytics-page/task-quality/gt-conflicts.tsx +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright (C) 2023-2024 CVAT.ai Corporation -// -// SPDX-License-Identifier: MIT - -import React from 'react'; -import Text from 'antd/lib/typography/Text'; -import { Col, Row } from 'antd/lib/grid'; - -import { QualityReport, QualitySummary } from 'cvat-core-wrapper'; -import AnalyticsCard from '../views/analytics-card'; -import { percent, clampValue } from '../utils/text-formatting'; - -interface Props { - taskReport: QualityReport | null; -} - -interface ConflictTooltipProps { - reportSummary?: QualitySummary; -} - -export function ConflictsTooltip(props: ConflictTooltipProps): JSX.Element { - const { reportSummary } = props; - return ( - - - - Warnings: - - - Low overlap:  - {reportSummary?.conflictsByType.lowOverlap || 0} - - - Mismatching direction:  - {reportSummary?.conflictsByType.mismatchingDirection || 0} - - - Mismatching attributes:  - {reportSummary?.conflictsByType.mismatchingAttributes || 0} - - - Mismatching groups:  - {reportSummary?.conflictsByType.mismatchingGroups || 0} - - - Covered annotation:  - {reportSummary?.conflictsByType.coveredAnnotation || 0} - - - - - Errors: - - - Missing annotations:  - {reportSummary?.conflictsByType.missingAnnotations || 0} - - - Extra annotations:  - {reportSummary?.conflictsByType.extraAnnotations || 0} - - - Mismatching label:  - {reportSummary?.conflictsByType.mismatchingLabel || 0} - - - - ); -} - -function GTConflicts(props: Props): JSX.Element { - const { taskReport } = props; - let conflictsRepresentation: string | number = 'N/A'; - let reportSummary; - if (taskReport) { - reportSummary = taskReport.summary; - conflictsRepresentation = clampValue(reportSummary?.conflictCount); - } - - const bottomElement = ( - <> - - Errors: - {' '} - {clampValue(reportSummary?.errorCount)} - {reportSummary?.errorCount ? - ` (${percent(reportSummary?.errorCount, reportSummary?.conflictCount)})` : ''} - - - {', '} - Warnings: - {' '} - {clampValue(reportSummary?.warningCount)} - { reportSummary?.warningCount ? - ` (${percent(reportSummary?.warningCount, reportSummary?.conflictCount)})` : '' } - - - ); - - return ( - } - size={12} - bottomElement={bottomElement} - /> - ); -} - -export default React.memo(GTConflicts); diff --git a/cvat-ui/src/components/analytics-page/task-quality/issues.tsx b/cvat-ui/src/components/analytics-page/task-quality/issues.tsx deleted file mode 100644 index f0e0dcf1936..00000000000 --- a/cvat-ui/src/components/analytics-page/task-quality/issues.tsx +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (C) 2023 CVAT.ai Corporation -// -// SPDX-License-Identifier: MIT - -import '../styles.scss'; - -import React, { useEffect, useState } from 'react'; -import Text from 'antd/lib/typography/Text'; -import notification from 'antd/lib/notification'; -import { Task } from 'cvat-core-wrapper'; -import { useIsMounted } from 'utils/hooks'; -import AnalyticsCard from '../views/analytics-card'; -import { percent, clampValue } from '../utils/text-formatting'; - -interface Props { - task: Task; -} - -function Issues(props: Props): JSX.Element { - const { task } = props; - - const [issuesCount, setIssuesCount] = useState(0); - const [resolvedIssues, setResolvedIssues] = useState(0); - const isMounted = useIsMounted(); - - useEffect(() => { - task - .issues() - .then((issues: any[]) => { - if (isMounted()) { - setIssuesCount(issues.length); - setResolvedIssues(issues.reduce((acc, issue) => (issue.resolved ? acc + 1 : acc), 0)); - } - }) - .catch((_error: any) => { - if (isMounted()) { - notification.error({ - description: _error.toString(), - message: "Couldn't fetch issues", - className: 'cvat-notification-notice-get-issues-error', - }); - } - }); - }, []); - - const bottomElement = ( - - Resolved: - {' '} - {clampValue(resolvedIssues)} - {resolvedIssues ? ` (${percent(resolvedIssues, issuesCount)})` : ''} - - ); - - return ( - - ); -} - -export default React.memo(Issues); diff --git a/cvat-ui/src/components/analytics-page/task-quality/job-list.tsx b/cvat-ui/src/components/analytics-page/task-quality/job-list.tsx deleted file mode 100644 index 0f816fa16f8..00000000000 --- a/cvat-ui/src/components/analytics-page/task-quality/job-list.tsx +++ /dev/null @@ -1,264 +0,0 @@ -// Copyright (C) 2023-2024 CVAT.ai Corporation -// -// SPDX-License-Identifier: MIT - -import React, { useState } from 'react'; -import { useHistory } from 'react-router'; -import { Row, Col } from 'antd/lib/grid'; -import { DownloadOutlined, QuestionCircleOutlined } from '@ant-design/icons'; -import { ColumnFilterItem, Key } from 'antd/lib/table/interface'; -import Table from 'antd/lib/table'; -import Button from 'antd/lib/button'; -import Text from 'antd/lib/typography/Text'; - -import { - Task, Job, JobType, QualityReport, getCore, -} from 'cvat-core-wrapper'; -import CVATTooltip from 'components/common/cvat-tooltip'; -import { getQualityColor } from 'utils/quality-color'; -import Tag from 'antd/lib/tag'; -import { toRepresentation } from '../utils/text-formatting'; -import { ConflictsTooltip } from './gt-conflicts'; - -interface Props { - task: Task; - jobsReports: QualityReport[]; -} - -function JobListComponent(props: Props): JSX.Element { - const { - task: taskInstance, - jobsReports: jobsReportsArray, - } = props; - - const jobsReports: Record = jobsReportsArray - .reduce((acc, report) => ({ ...acc, [report.jobID]: report }), {}); - const history = useHistory(); - const { id: taskId, jobs } = taskInstance; - const [renderedJobs] = useState(jobs.filter((job: Job) => job.type === JobType.ANNOTATION)); - - function sorter(path: string) { - return (obj1: any, obj2: any): number => { - let currentObj1 = obj1; - let currentObj2 = obj2; - let field1: string | number | null = null; - let field2: string | number | null = null; - for (const pathSegment of path.split('.')) { - field1 = currentObj1 && pathSegment in currentObj1 ? currentObj1[pathSegment] : null; - field2 = currentObj2 && pathSegment in currentObj2 ? currentObj2[pathSegment] : null; - currentObj1 = currentObj1 && pathSegment in currentObj1 ? currentObj1[pathSegment] : null; - currentObj2 = currentObj2 && pathSegment in currentObj2 ? currentObj2[pathSegment] : null; - } - - if (field1 !== null && field2 !== null) { - if (typeof field1 === 'string' && typeof field2 === 'string') return field1.localeCompare(field2); - if (typeof field1 === 'number' && typeof field2 === 'number' && - Number.isFinite(field1) && Number.isFinite(field2)) return field1 - field2; - } - - if (field1 === null && field2 === null) return 0; - - if (field1 === null || (typeof field1 === 'number' && !Number.isFinite(field1))) { - return -1; - } - - return 1; - }; - } - - function collectUsers(path: string): ColumnFilterItem[] { - return Array.from( - new Set( - Object.values(jobsReports).map((report: QualityReport) => { - if (report[path] === null) { - return null; - } - - return report[path].username; - }), - ), - ).map((value: string | null) => ({ text: value || 'Is Empty', value: value || false })); - } - - const columns = [ - { - title: 'Job', - dataIndex: 'job', - key: 'job', - sorter: sorter('key'), - render: (id: number): JSX.Element => ( -
- -
- ), - }, - { - title: 'Stage', - dataIndex: 'stage', - key: 'stage', - className: 'cvat-job-item-stage', - render: (jobInstance: any): JSX.Element => { - const { stage } = jobInstance; - - return ( -
- {stage} -
- ); - }, - sorter: sorter('stage.stage'), - filters: [ - { text: 'annotation', value: 'annotation' }, - { text: 'validation', value: 'validation' }, - { text: 'acceptance', value: 'acceptance' }, - ], - onFilter: (value: boolean | Key, record: any) => record.stage.stage === value, - }, - { - title: 'Assignee', - dataIndex: 'assignee', - key: 'assignee', - className: 'cvat-job-item-assignee', - render: (report: QualityReport): JSX.Element => ( - {report?.assignee?.username} - ), - sorter: sorter('assignee.assignee.username'), - filters: collectUsers('assignee'), - onFilter: (value: boolean | Key, record: any) => ( - record.assignee.assignee?.username || false - ) === value, - }, - { - title: 'Frame intersection', - dataIndex: 'frame_intersection', - key: 'frame_intersection', - className: 'cvat-job-item-frame-intersection', - sorter: sorter('frame_intersection.summary.frameCount'), - render: (report?: QualityReport): JSX.Element => { - const frames = report?.summary.frameCount; - const frameSharePercent = report?.summary?.frameSharePercent; - return ( - - {toRepresentation(frames, false, 0)} - {frames ? ` (${toRepresentation(frameSharePercent)})` : ''} - - ); - }, - }, - { - title: 'Conflicts', - dataIndex: 'conflicts', - key: 'conflicts', - className: 'cvat-job-item-conflicts', - sorter: sorter('conflicts.summary.conflictCount'), - render: (report: QualityReport): JSX.Element => { - const conflictCount = report?.summary?.conflictCount; - return ( -
- - {conflictCount || 0} - - } - className='cvat-analytics-tooltip' - overlayStyle={{ maxWidth: '500px' }} - > - - -
- ); - }, - }, - { - title: 'Quality', - dataIndex: 'quality', - key: 'quality', - align: 'center' as const, - className: 'cvat-job-item-quality', - sorter: sorter('quality.summary.accuracy'), - render: (report?: QualityReport): JSX.Element => { - const meanAccuracy = report?.summary?.accuracy; - const accuracyRepresentation = toRepresentation(meanAccuracy); - return ( - accuracyRepresentation.includes('N/A') ? ( - - N/A - - ) : - {accuracyRepresentation} - ); - }, - }, - { - title: 'Download', - dataIndex: 'download', - key: 'download', - className: 'cvat-job-item-quality-report-download', - align: 'center' as const, - render: (job: Job): JSX.Element => { - const report = jobsReports[job.id]; - const reportID = report?.id; - return ( - reportID ? ( - - - - ) : - ); - }, - }, - ]; - const data = renderedJobs.reduce((acc: any[], job: any) => { - const report = jobsReports[job.id]; - acc.push({ - key: job.id, - job: job.id, - download: job, - stage: job, - assignee: report, - quality: report, - conflicts: report, - frame_intersection: report, - }); - - return acc; - }, []); - - return ( -
- -
- Jobs - - -
'cvat-task-jobs-table-row'} - columns={columns} - dataSource={data} - size='small' - /> - - ); -} - -export default React.memo(JobListComponent); diff --git a/cvat-ui/src/components/analytics-page/task-quality/mean-quality.tsx b/cvat-ui/src/components/analytics-page/task-quality/mean-quality.tsx deleted file mode 100644 index a28f6dc4610..00000000000 --- a/cvat-ui/src/components/analytics-page/task-quality/mean-quality.tsx +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright (C) 2023-2024 CVAT.ai Corporation -// -// SPDX-License-Identifier: MIT - -import React from 'react'; -import { DownloadOutlined, SettingOutlined } from '@ant-design/icons'; -import { Col, Row } from 'antd/lib/grid'; -import Text from 'antd/lib/typography/Text'; -import Button from 'antd/lib/button'; - -import { QualityReport, getCore } from 'cvat-core-wrapper'; -import AnalyticsCard from '../views/analytics-card'; -import { toRepresentation } from '../utils/text-formatting'; - -interface Props { - taskID: number; - taskReport: QualityReport | null; - setQualitySettingsVisible: (visible: boolean) => void; -} - -function MeanQuality(props: Props): JSX.Element { - const { taskID, taskReport, setQualitySettingsVisible } = props; - const reportSummary = taskReport?.summary; - - const tooltip = ( -
- - Mean annotation quality consists of: - - - Correct annotations:  - {reportSummary?.validCount || 0} - - - Task annotations:  - {reportSummary?.dsCount || 0} - - - GT annotations:  - {reportSummary?.gtCount || 0} - - - Accuracy:  - {toRepresentation(reportSummary?.accuracy)} - - - Precision:  - {toRepresentation(reportSummary?.precision)} - - - Recall:  - {toRepresentation(reportSummary?.recall)} - -
- ); - - const downloadReportButton = ( -
- -
- { - taskReport?.id ? ( - - ) : null - } - - - setQualitySettingsVisible(true)} - /> - - - - ); - - return ( - - ); -} - -export default React.memo(MeanQuality); diff --git a/cvat-ui/src/components/analytics-page/task-quality/quality-settings-form.tsx b/cvat-ui/src/components/analytics-page/task-quality/quality-settings-form.tsx deleted file mode 100644 index e9eb16ba3d2..00000000000 --- a/cvat-ui/src/components/analytics-page/task-quality/quality-settings-form.tsx +++ /dev/null @@ -1,316 +0,0 @@ -// Copyright (C) 2023-2024 CVAT.ai Corporation -// -// SPDX-License-Identifier: MIT - -import React from 'react'; -import { QuestionCircleOutlined } from '@ant-design/icons/lib/icons'; -import Text from 'antd/lib/typography/Text'; -import InputNumber from 'antd/lib/input-number'; -import { Col, Row } from 'antd/lib/grid'; -import Divider from 'antd/lib/divider'; -import Form, { FormInstance } from 'antd/lib/form'; -import Checkbox from 'antd/lib/checkbox/Checkbox'; -import CVATTooltip from 'components/common/cvat-tooltip'; -import { QualitySettings } from 'cvat-core-wrapper'; - -interface FormProps { - form: FormInstance; - settings: QualitySettings; -} - -export default function QualitySettingsForm(props: FormProps): JSX.Element | null { - const { form, settings } = props; - - const initialValues = { - lowOverlapThreshold: settings.lowOverlapThreshold * 100, - iouThreshold: settings.iouThreshold * 100, - compareAttributes: settings.compareAttributes, - - oksSigma: settings.oksSigma * 100, - - lineThickness: settings.lineThickness * 100, - lineOrientationThreshold: settings.lineOrientationThreshold * 100, - orientedLines: settings.orientedLines, - - compareGroups: settings.compareGroups, - groupMatchThreshold: settings.groupMatchThreshold * 100, - - checkCoveredAnnotations: settings.checkCoveredAnnotations, - objectVisibilityThreshold: settings.objectVisibilityThreshold * 100, - panopticComparison: settings.panopticComparison, - }; - - const generalTooltip = ( -
- - Min overlap threshold(IoU) is used for distinction between matched / unmatched shapes. - - - Low overlap threshold is used for distinction between strong / weak (low overlap) matches. - -
- ); - - const keypointTooltip = ( -
- - Object Keypoint Similarity (OKS) is like IoU, but for skeleton points. - - - The Sigma value is the percent of the skeleton bbox area ^ 0.5. - Used as the radius of the circle around a GT point, - where the checked point is expected to be. - - - The value is also used to match single point annotations, in which case - the bbox is the whole image. For point groups the bbox is taken - for the whole group. - - - If there is a rectangle annotation in the points group or skeleton, - it is used as the group bbox (supposing the whole group describes a single object). - -
- ); - - const linesTooltip = ( -
- - Line thickness - thickness of polylines, relatively to the (image area) ^ 0.5. - The distance to the boundary around the GT line, - inside of which the checked line points should be. - - - Check orientation - Indicates that polylines have direction. - - - Min similarity gain - The minimal gain in the GT IoU between the given and reversed line directions - to consider the line inverted. Only useful with the Check orientation parameter. - -
- ); - - const groupTooltip = ( -
- - Compare groups - Enables or disables annotation group checks. - - - Min group match threshold - Minimal IoU for groups to be considered matching, - used when the Compare groups is enabled. - -
- ); - - const segmentationTooltip = ( -
- - Check object visibility - Check for partially-covered annotations. - - - Min visibility threshold - Minimal visible area percent of the spatial annotations (polygons, masks) - for reporting covered annotations, useful with the Check object visibility option. - - - Match only visible parts - Use only the visible part of the masks and polygons in comparisons. - -
- ); - - return ( -
- - - General - - - - - - -
- - - - - - - - - - - - - - - Compare attributes - - - - - - - - Keypoint Comparison - - - - - - - - - - - - - - - - Line Comparison - - - - - - - - - - - - - - - - - Check orientation - - - - - - - - - - - - - Group Comparison - - - - - - - - - - Compare groups - - - - - - - - - - - - - Segmentation Comparison - - - - - - - - - - Check object visibility - - - - - - - - - - - - - - Match only visible parts - - - - - - ); -} diff --git a/cvat-ui/src/components/analytics-page/task-quality/task-quality-component.tsx b/cvat-ui/src/components/analytics-page/task-quality/task-quality-component.tsx deleted file mode 100644 index 31051093d3d..00000000000 --- a/cvat-ui/src/components/analytics-page/task-quality/task-quality-component.tsx +++ /dev/null @@ -1,257 +0,0 @@ -// Copyright (C) 2023-2024 CVAT.ai Corporation -// -// SPDX-License-Identifier: MIT - -import moment from 'moment'; -import { Row } from 'antd/lib/grid'; -import Text from 'antd/lib/typography/Text'; -import notification from 'antd/lib/notification'; -import CVATLoadingSpinner from 'components/common/loading-spinner'; -import JobItem from 'components/job-item/job-item'; -import { - Job, JobType, QualityReport, QualitySettings, Task, getCore, -} from 'cvat-core-wrapper'; -import React, { useEffect, useReducer } from 'react'; -import { useIsMounted } from 'utils/hooks'; -import { ActionUnion, createAction } from 'utils/redux'; -import EmptyGtJob from './empty-job'; -import GtConflicts from './gt-conflicts'; -import Issues from './issues'; -import JobList from './job-list'; -import MeanQuality from './mean-quality'; -import QualitySettingsModal from '../shared/quality-settings-modal'; - -const core = getCore(); - -interface Props { - task: Task; - onJobUpdate: (job: Job, data: Parameters[0]) => void; -} - -interface State { - fetching: boolean; - taskReport: QualityReport | null; - jobsReports: QualityReport[]; - qualitySettings: { - settings: QualitySettings | null; - fetching: boolean; - visible: boolean; - }, -} - -enum ReducerActionType { - SET_FETCHING = 'SET_FETCHING', - SET_TASK_REPORT = 'SET_TASK_REPORT', - SET_JOBS_REPORTS = 'SET_JOBS_REPORTS', - SET_QUALITY_SETTINGS = 'SET_QUALITY_SETTINGS', - SET_QUALITY_SETTINGS_VISIBLE = 'SET_QUALITY_SETTINGS_VISIBLE', - SET_QUALITY_SETTINGS_FETCHING = 'SET_QUALITY_SETTINGS_FETCHING', -} - -export const reducerActions = { - setFetching: (fetching: boolean) => ( - createAction(ReducerActionType.SET_FETCHING, { fetching }) - ), - setTaskReport: (qualityReport: QualityReport) => ( - createAction(ReducerActionType.SET_TASK_REPORT, { qualityReport }) - ), - setJobsReports: (qualityReports: QualityReport[]) => ( - createAction(ReducerActionType.SET_JOBS_REPORTS, { qualityReports }) - ), - setQualitySettings: (qualitySettings: QualitySettings) => ( - createAction(ReducerActionType.SET_QUALITY_SETTINGS, { qualitySettings }) - ), - setQualitySettingsVisible: (visible: boolean) => ( - createAction(ReducerActionType.SET_QUALITY_SETTINGS_VISIBLE, { visible }) - ), - setQualitySettingsFetching: (fetching: boolean) => ( - createAction(ReducerActionType.SET_QUALITY_SETTINGS_FETCHING, { fetching }) - ), -}; - -const reducer = (state: State, action: ActionUnion): State => { - if (action.type === ReducerActionType.SET_FETCHING) { - return { - ...state, - fetching: action.payload.fetching, - }; - } - - if (action.type === ReducerActionType.SET_TASK_REPORT) { - return { - ...state, - taskReport: action.payload.qualityReport, - }; - } - - if (action.type === ReducerActionType.SET_JOBS_REPORTS) { - return { - ...state, - jobsReports: action.payload.qualityReports, - }; - } - - if (action.type === ReducerActionType.SET_QUALITY_SETTINGS) { - return { - ...state, - qualitySettings: { - ...state.qualitySettings, - settings: action.payload.qualitySettings, - }, - }; - } - - if (action.type === ReducerActionType.SET_QUALITY_SETTINGS_VISIBLE) { - return { - ...state, - qualitySettings: { - ...state.qualitySettings, - visible: action.payload.visible, - }, - }; - } - - if (action.type === ReducerActionType.SET_QUALITY_SETTINGS_FETCHING) { - return { - ...state, - qualitySettings: { - ...state.qualitySettings, - fetching: action.payload.fetching, - }, - }; - } - - return state; -}; - -function TaskQualityComponent(props: Props): JSX.Element { - const { task, onJobUpdate } = props; - const isMounted = useIsMounted(); - - const [state, dispatch] = useReducer(reducer, { - fetching: true, - taskReport: null, - jobsReports: [], - qualitySettings: { - settings: null, - fetching: true, - visible: false, - }, - }); - - useEffect(() => { - dispatch(reducerActions.setFetching(true)); - dispatch(reducerActions.setQualitySettingsFetching(true)); - - function handleError(error: Error): void { - if (isMounted()) { - notification.error({ - description: error.toString(), - message: 'Could not initialize quality analytics page', - }); - } - } - - core.analytics.quality.reports({ pageSize: 1, target: 'task', taskID: task.id }).then(([report]) => { - let reportRequest = Promise.resolve([]); - if (report) { - reportRequest = core.analytics.quality.reports({ - pageSize: task.jobs.length, - parentID: report.id, - target: 'job', - }); - } - const settingsRequest = core.analytics.quality.settings.get({ taskID: task.id }); - - Promise.all([reportRequest, settingsRequest]).then(([jobReports, settings]) => { - dispatch(reducerActions.setQualitySettings(settings)); - dispatch(reducerActions.setTaskReport(report || null)); - dispatch(reducerActions.setJobsReports(jobReports)); - }).catch(handleError).finally(() => { - dispatch(reducerActions.setQualitySettingsFetching(false)); - dispatch(reducerActions.setFetching(false)); - }); - }).catch(handleError); - }, [task?.id]); - - const gtJob = task.jobs.find((job: Job) => job.type === JobType.GROUND_TRUTH); - - const { - fetching, taskReport, jobsReports, - qualitySettings: { - settings: qualitySettings, fetching: qualitySettingsFetching, visible: qualitySettingsVisible, - }, - } = state; - - return ( -
- { - fetching ? ( - - ) : ( - <> - { - gtJob ? ( - <> - - - { `Created ${taskReport?.id ? moment(taskReport.createdDate).fromNow() : ''}`} - - - - dispatch(reducerActions.setQualitySettingsVisible(visible)) - } - taskID={task.id} - /> - - - - - - { - (!(gtJob && gtJob.stage === 'acceptance' && gtJob.state === 'completed')) ? ( - - - Quality reports are not computed unless the GT job is in the  - completed state -  and  - acceptance stage. - - - ) : null - } - - - - - - - - ) : ( - - - - ) - } - dispatch(reducerActions.setQualitySettings(settings)) - } - visible={qualitySettingsVisible} - setVisible={ - (visible) => dispatch(reducerActions.setQualitySettingsVisible(visible)) - } - /> - - ) - } -
- ); -} - -export default React.memo(TaskQualityComponent); From 042709e72b0410d55144a02b46506e03df448afe Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Tue, 20 Aug 2024 13:48:58 +0300 Subject: [PATCH 26/79] updated ground truth test --- .../cypress/e2e/features/ground_truth_jobs.js | 323 +----------------- 1 file changed, 9 insertions(+), 314 deletions(-) diff --git a/tests/cypress/e2e/features/ground_truth_jobs.js b/tests/cypress/e2e/features/ground_truth_jobs.js index 098f4128239..9eba445b76a 100644 --- a/tests/cypress/e2e/features/ground_truth_jobs.js +++ b/tests/cypress/e2e/features/ground_truth_jobs.js @@ -60,70 +60,13 @@ context('Ground truth jobs', () => { }, ]; - const rectangles = [ - { - points: 'By 2 Points', - type: 'Shape', - labelName, - firstX: 270, - firstY: 350, - secondX: 370, - secondY: 450, - }, - { - points: 'By 2 Points', - type: 'Shape', - labelName, - firstX: 270, - firstY: 350, - secondX: 370, - secondY: 450, - }, - { - id: 3, - points: 'By 2 Points', - type: 'Shape', - labelName, - firstX: 350, - firstY: 450, - secondX: 450, - secondY: 550, - }, - { - points: 'By 2 Points', - type: 'Shape', - labelName, - firstX: 130, - firstY: 200, - secondX: 150, - secondY: 250, - }, - ]; - let groundTruthJobID = null; let jobID = null; let taskID = null; - let qualityReportID = null; // With seed = 1, frameCount = 4, totalFrames = 10 - predifined ground truth frames are: const groundTruthFrames = [0, 1, 5, 6]; - function checkCardValue(className, value) { - cy.get(className) - .should('be.visible') - .within(() => { - cy.get('.cvat-analytics-card-value').should('have.text', value); - }); - } - - function openQualityTab() { - cy.clickInTaskMenu('View analytics', true); - cy.get('.cvat-task-analytics-tabs') - .within(() => { - cy.contains('Quality').click(); - }); - } - function checkRectangleAndObjectMenu(rectangle, isGroundTruthJob = false) { if (isGroundTruthJob) { cy.get(`#cvat_canvas_shape_${rectangle.id}`) @@ -145,77 +88,6 @@ context('Ground truth jobs', () => { .should('be.visible'); } - function checkConflicts(type = '', amount = 0, sidebar = true) { - switch (type) { - case 'warning': { - cy.get('.cvat-conflict-warning').should('have.length', amount); - if (sidebar) { - cy.get('.cvat-objects-sidebar-warning-item').should('have.length', amount); - } - break; - } - case 'error': { - cy.get('.cvat-conflict-error').should('have.length', amount); - if (sidebar) { - cy.get('.cvat-objects-sidebar-conflict-item').should('have.length', amount); - } - break; - } - default: { - cy.get('.cvat-conflict-warning').should('not.exist'); - cy.get('.cvat-conflict-error').should('not.exist'); - if (sidebar) { - cy.get('.cvat-objects-sidebar-warning-item').should('not.exist'); - cy.get('.cvat-objects-sidebar-conflict-item').should('not.exist'); - } - } - } - } - - function checkHighlight(darkenConflicts) { - cy.get('.cvat-conflict-label').first().trigger('mouseover'); - cy.get('.cvat-conflict-label.cvat-conflict-darken').should('have.length', darkenConflicts); - } - - function waitForReport(cvat, rqID) { - return new Promise((resolve) => { - function request() { - cvat.server.request(`/api/quality/reports?rq_id=${rqID}`, { - method: 'POST', - }).then((response) => { - if (response.status === 201) { - qualityReportID = response.data.id; - resolve(qualityReportID); - } else { - setTimeout(request, 500); - } - }); - } - - setTimeout(request, 500); - }); - } - - function createTaskQualityReport(taskId) { - cy.window().then((window) => window.cvat.server.request('/api/quality/reports', { - method: 'POST', - data: { - task_id: taskId, - }, - }).then((response) => { - const rqID = response.data.rq_id; - return waitForReport(window.cvat, rqID); - })).then(() => { - cy.visit('/tasks'); - cy.get('.cvat-spinner').should('not.exist'); - cy.intercept('GET', '/api/quality/reports**').as('getReport'); - - cy.openTask(taskName); - openQualityTab(); - cy.wait('@getReport'); - }); - } - before(() => { cy.visit('auth/login'); cy.login(); @@ -248,53 +120,24 @@ context('Ground truth jobs', () => { }); }); - it('Create ground truth job from task page', () => { - cy.createJob({ - ...jobOptions, - quantity: 15, - }); - cy.url().then((url) => { - groundTruthJobID = Number(url.split('/').slice(-1)[0].split('?')[0]); - - cy.interactMenu('Open the task'); - cy.get('.cvat-job-item').contains('a', `Job #${groundTruthJobID}`) - .parents('.cvat-job-item') - .find('.ant-tag') - .should('have.text', 'Ground truth'); - }); - }); - - it('Delete ground truth job', () => { - cy.deleteJob(groundTruthJobID); + after(() => { + cy.headlessDeleteTask(taskID); }); - it('Check quality page, create ground truth job from quality page', () => { - openQualityTab(); - - cy.get('.cvat-job-empty-ground-truth-item') - .should('be.visible') - .within(() => { - cy.contains('button', 'Create new').click(); - }); + it('Create ground truth job from task page', () => { cy.createJob({ ...jobOptions, frameCount: 4, seed: 1, - fromTaskPage: false, }); - cy.url().then((url) => { groundTruthJobID = Number(url.split('/').slice(-1)[0].split('?')[0]); cy.interactMenu('Open the task'); - openQualityTab(); cy.get('.cvat-job-item').contains('a', `Job #${groundTruthJobID}`) .parents('.cvat-job-item') .find('.ant-tag') .should('have.text', 'Ground truth'); - checkCardValue('.cvat-task-mean-annotation-quality', 'N/A'); - checkCardValue('.cvat-task-gt-conflicts', 'N/A'); - checkCardValue('.cvat-task-issues', '0'); }); }); @@ -326,9 +169,8 @@ context('Ground truth jobs', () => { cy.saveJob(); cy.interactMenu('Open the task'); - // job index is 2 because one gt job has been removed - cy.getJobIDFromIdx(2).then((gtJobID) => cy.setJobStage(gtJobID, 'acceptance')); - cy.getJobIDFromIdx(2).then((gtJobID) => cy.setJobState(gtJobID, 'completed')); + cy.getJobIDFromIdx(1).then((gtJobID) => cy.setJobStage(gtJobID, 'acceptance')); + cy.getJobIDFromIdx(1).then((gtJobID) => cy.setJobState(gtJobID, 'completed')); cy.get('.cvat-job-item').contains('a', `Job #${jobID}`).click(); cy.changeWorkspace('Review'); @@ -339,82 +181,9 @@ context('Ground truth jobs', () => { }); }); - it('Add annotations to regular job, check quality report', () => { - cy.changeWorkspace('Standard'); - groundTruthFrames.forEach((frame, index) => { - cy.goCheckFrameNumber(frame); - cy.createRectangle(rectangles[index]); - }); - cy.saveJob(); - - createTaskQualityReport(taskID); - checkCardValue('.cvat-task-mean-annotation-quality', '33.3%'); - checkCardValue('.cvat-task-gt-conflicts', '5'); - checkCardValue('.cvat-task-issues', '0'); - }); - - it('Check quality report is available for download', () => { - cy.get('.cvat-analytics-download-report-button').click(); - cy.verifyDownload(`quality-report-task_${taskID}-${qualityReportID}.json`); - }); - - it('Conflicts on canvas and sidebar', () => { - cy.get('.cvat-task-job-list').within(() => { - cy.contains('a', `Job #${jobID}`).click(); - }); - cy.get('.cvat-spinner').should('not.exist'); - - cy.changeWorkspace('Review'); - cy.get('.cvat-objects-sidebar-tabs').within(() => { - cy.contains('[role="tab"]', 'Issues').click(); - }); - cy.get('.cvat-objects-sidebar-show-ground-truth').filter(':visible').click(); - - cy.goCheckFrameNumber(groundTruthFrames[0]); - checkConflicts('error', 2); - checkHighlight(1); - - cy.goCheckFrameNumber(groundTruthFrames[1]); - checkConflicts('warning', 1); - - cy.goCheckFrameNumber(groundTruthFrames[2]); - checkConflicts(); - - cy.goCheckFrameNumber(groundTruthFrames[3]); - checkConflicts('error', 2); - checkHighlight(1); - }); - - it('Conflicts with annotation filter enabled', () => { - cy.addFiltersRule(0); - cy.setFilter({ - groupIndex: 0, - ruleIndex: 0, - field: 'ObjectID', - operator: '>', - value: '5', - submit: true, - }); - - groundTruthFrames.forEach((frame, index) => { - if (index !== groundTruthFrames.length - 1) { - cy.goCheckFrameNumber(frame); - checkConflicts('', 0, false); - } - }); - - cy.goCheckFrameNumber(groundTruthFrames[groundTruthFrames.length - 1]); - checkConflicts('error', 1, false); - }); - - it('Frames with conflicts navigation', () => { - cy.goCheckFrameNumber(groundTruthFrames[0]); - - cy.get('.cvat-issues-sidebar-next-frame').click(); - cy.checkFrameNum(groundTruthFrames[1]); - - cy.get('.cvat-issues-sidebar-next-frame').click(); - cy.checkFrameNum(groundTruthFrames[3]); + it('Delete ground truth job', () => { + cy.interactMenu('Open the task'); + cy.deleteJob(groundTruthJobID); }); }); @@ -430,7 +199,6 @@ context('Ground truth jobs', () => { const archivePath = `cypress/fixtures/${archiveName}`; const imagesFolder = `cypress/fixtures/${imageFileName}`; const directoryToArchive = imagesFolder; - let labels = []; before(() => { cy.visit('/tasks'); @@ -445,83 +213,10 @@ context('Ground truth jobs', () => { cy.url().then((url) => { taskID = Number(url.split('/').slice(-1)[0].split('?')[0]); }); - cy.get('.cvat-job-item').first().invoke('attr', 'data-row-id').then((val) => { - jobID = val; - }).then(() => { - cy.intercept(`/api/labels?**job_id=${jobID}**`).as('getJobLabels'); - cy.visit(`/tasks/${taskID}/jobs/${jobID}`); - cy.wait('@getJobLabels').then((interception) => { - labels = interception.response.body.results; - }); - }); }); afterEach(() => { - cy.window().then((window) => { - window.cvat.server.request(`/api/jobs/${jobID}`, { - method: 'DELETE', - }); - }); - }); - - it('Create ground truth job, compute quality report, check jobs table', () => { - cy.window().then((window) => window.cvat.server.request('/api/jobs', { - method: 'POST', - data: { - task_id: taskID, - frame_count: 20, - type: 'ground_truth', - frame_selection_method: 'random_uniform', - }, - }).then((response) => { - jobID = response.data.id; - return window.cvat.server.request(`/api/jobs/${jobID}/annotations`, { - method: 'PUT', - data: { - shapes: [], - tracks: [{ - label_id: labels[0].id, - frame: 0, - group: 0, - source: 'manual', - attributes: [], - elements: [], - shapes: [{ - type: 'rectangle', - occluded: false, - z_order: 0, - rotation: 0, - outside: false, - attributes: [], - frame: 0, - points: [250, 350, 350, 450], - }], - }], - tags: [], - }, - }); - }).then(() => ( - window.cvat.server.request(`/api/jobs/${jobID}`, { - method: 'PATCH', - data: { - stage: 'acceptance', - state: 'completed', - }, - }) - ))).then(() => { - createTaskQualityReport(taskID); - cy.get('.cvat-task-jobs-table .ant-pagination-item').last().invoke('text').then((page) => { - const lastPage = parseInt(page, 10); - - for (let i = 0; i < lastPage; i++) { - cy.get('.cvat-task-jobs-table-row').each((row) => { - cy.get(row).should('not.include.text', 'N/A'); - }); - - cy.get('.cvat-task-jobs-table .ant-pagination-next').click(); - } - }); - }); + cy.headlessDeleteTask(taskID); }); it('Check GT button should be disabled while waiting for GT job creation', () => { From 1d29c2f5fa6677197aae8dfe46a23f79136d2a59 Mon Sep 17 00:00:00 2001 From: Maxim Zhiltsov Date: Wed, 21 Aug 2024 16:58:55 +0300 Subject: [PATCH 27/79] Refactor field definition --- .../0003_qualityreport_assignee_last_updated_and_more.py | 4 ++-- cvat/apps/quality_control/models.py | 2 +- cvat/apps/quality_control/serializers.py | 3 --- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/cvat/apps/quality_control/migrations/0003_qualityreport_assignee_last_updated_and_more.py b/cvat/apps/quality_control/migrations/0003_qualityreport_assignee_last_updated_and_more.py index aa27c08c00e..0b9baee4454 100644 --- a/cvat/apps/quality_control/migrations/0003_qualityreport_assignee_last_updated_and_more.py +++ b/cvat/apps/quality_control/migrations/0003_qualityreport_assignee_last_updated_and_more.py @@ -1,4 +1,4 @@ -# Generated by Django 4.2.14 on 2024-08-19 17:23 +# Generated by Django 4.2.15 on 2024-08-21 13:56 from django.db import migrations, models @@ -20,7 +20,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name="qualitysettings", name="max_validations_per_job", - field=models.IntegerField(default=0), + field=models.PositiveIntegerField(default=0), ), migrations.AddField( model_name="qualitysettings", diff --git a/cvat/apps/quality_control/models.py b/cvat/apps/quality_control/models.py index 6dc2f9384d0..37f0f1f9612 100644 --- a/cvat/apps/quality_control/models.py +++ b/cvat/apps/quality_control/models.py @@ -226,7 +226,7 @@ class QualitySettings(models.Model): target_metric_threshold = models.FloatField(default=0.7) - max_validations_per_job = models.IntegerField(default=0) + max_validations_per_job = models.PositiveIntegerField(default=0) def __init__(self, *args: Any, **kwargs: Any) -> None: defaults = deepcopy(self.get_defaults()) diff --git a/cvat/apps/quality_control/serializers.py b/cvat/apps/quality_control/serializers.py index 0688a4f9e6a..0a669962c8c 100644 --- a/cvat/apps/quality_control/serializers.py +++ b/cvat/apps/quality_control/serializers.py @@ -158,7 +158,4 @@ def validate(self, attrs): if not 0 <= v <= 1: raise serializers.ValidationError(f"{k} must be in the range [0; 1]") - if (max_validations := attrs.get("max_validations_per_job")) and max_validations < 0: - raise serializers.ValidationError("max_validations_per_job cannot be less than 0") - return super().validate(attrs) From d81e1dacd041d4ec877a10b91042a940ba137df6 Mon Sep 17 00:00:00 2001 From: Maxim Zhiltsov Date: Wed, 21 Aug 2024 17:00:34 +0300 Subject: [PATCH 28/79] Update server schema --- cvat/schema.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cvat/schema.yml b/cvat/schema.yml index eb32393fa25..d0dc8555789 100644 --- a/cvat/schema.yml +++ b/cvat/schema.yml @@ -9337,7 +9337,7 @@ components: max_validations_per_job: type: integer maximum: 2147483647 - minimum: -2147483648 + minimum: 0 description: | The maximum number of job validation attempts for the job assignee. The job can be automatically accepted if the job quality is above the required @@ -9798,7 +9798,7 @@ components: max_validations_per_job: type: integer maximum: 2147483647 - minimum: -2147483648 + minimum: 0 description: | The maximum number of job validation attempts for the job assignee. The job can be automatically accepted if the job quality is above the required From b96bb727e1139a70fc4c96b4ec0946b65e24c995 Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Wed, 21 Aug 2024 18:27:34 +0300 Subject: [PATCH 29/79] adapted settings for new API --- cvat-core/src/quality-settings.ts | 26 ++++-- cvat-core/src/server-response-types.ts | 1 + .../quality-control/quality-control-page.tsx | 31 ++++--- .../quality-control/quality-settings.tsx | 14 +--- .../task-quality/quality-settings-form.tsx | 81 ++++++++++--------- 5 files changed, 84 insertions(+), 69 deletions(-) diff --git a/cvat-core/src/quality-settings.ts b/cvat-core/src/quality-settings.ts index ffad9b849b1..c45852cc7d6 100644 --- a/cvat-core/src/quality-settings.ts +++ b/cvat-core/src/quality-settings.ts @@ -7,16 +7,16 @@ import PluginRegistry from './plugins'; import serverProxy from './server-proxy'; export enum TargetMetric { - ACCURACY_MICRO = 'accuracy_micro', - PRECISION_MICRO = 'precision_micro', - RECALL_MICRO = 'recall_micro', - DICE_MACRO = 'dice_macro', + ACCURACY = 'accuracy', + PRECISION = 'precision', + RECALL = 'recall', } export default class QualitySettings { #id: number; #targetMetric: TargetMetric; #targetMetricThreshold: number; + #maxValidationsPerJob: number; #task: number; #iouThreshold: number; #oksSigma: number; @@ -36,6 +36,7 @@ export default class QualitySettings { this.#task = initialData.task; this.#targetMetric = initialData.target_metric as TargetMetric; this.#targetMetricThreshold = initialData.target_metric_threshold; + this.#maxValidationsPerJob = initialData.max_validations_per_job; this.#iouThreshold = initialData.iou_threshold; this.#oksSigma = initialData.oks_sigma; this.#lineThickness = initialData.line_thickness; @@ -170,6 +171,14 @@ export default class QualitySettings { this.#targetMetricThreshold = newVal; } + get maxValidationsPerJob(): number { + return this.#maxValidationsPerJob; + } + + set maxValidationsPerJob(newVal: number) { + this.#maxValidationsPerJob = newVal; + } + public toJSON(): SerializedQualitySettingsData { const result: SerializedQualitySettingsData = { iou_threshold: this.#iouThreshold, @@ -186,13 +195,14 @@ export default class QualitySettings { compare_attributes: this.#compareAttributes, target_metric: this.#targetMetric, target_metric_threshold: this.#targetMetricThreshold, + max_validations_per_job: this.#maxValidationsPerJob, }; return result; } - public async save(fields: any): Promise { - const result = await PluginRegistry.apiWrapper.call(this, QualitySettings.prototype.save, fields); + public async save(): Promise { + const result = await PluginRegistry.apiWrapper.call(this, QualitySettings.prototype.save); return result; } } @@ -201,9 +211,9 @@ Object.defineProperties(QualitySettings.prototype.save, { implementation: { writable: false, enumerable: false, - value: async function implementation(fields: any): Promise { + value: async function implementation(): Promise { const result = await serverProxy.analytics.quality.settings.update( - this.id, { ...this.toJSON(), ...fields }, + this.id, this.toJSON(), ); return new QualitySettings(result); }, diff --git a/cvat-core/src/server-response-types.ts b/cvat-core/src/server-response-types.ts index 39fff964b94..55d7291441c 100644 --- a/cvat-core/src/server-response-types.ts +++ b/cvat-core/src/server-response-types.ts @@ -243,6 +243,7 @@ export interface SerializedQualitySettingsData { task?: number; target_metric?: string; target_metric_threshold?: number; + max_validations_per_job?: number; iou_threshold?: number; oks_sigma?: number; line_thickness?: number; diff --git a/cvat-ui/src/components/quality-control/quality-control-page.tsx b/cvat-ui/src/components/quality-control/quality-control-page.tsx index 2d6ceaa8080..2436adadf16 100644 --- a/cvat-ui/src/components/quality-control/quality-control-page.tsx +++ b/cvat-ui/src/components/quality-control/quality-control-page.tsx @@ -200,10 +200,15 @@ function QualityControlPage(): JSX.Element { } }, [instance]); - const onSaveQualitySettings = useCallback(async (values, fields) => { + const onSaveQualitySettings = useCallback(async (values) => { try { const { settings } = state.qualitySettings; if (settings) { + settings.targetMetric = values.targetMetric; + settings.targetMetricThreshold = values.targetMetricThreshold / 100; + + settings.maxValidationsPerJob = values.maxValidationsPerJob; + settings.lowOverlapThreshold = values.lowOverlapThreshold / 100; settings.iouThreshold = values.iouThreshold / 100; settings.compareAttributes = values.compareAttributes; @@ -223,7 +228,7 @@ function QualityControlPage(): JSX.Element { settings.panopticComparison = values.panopticComparison; try { dispatch(reducerActions.setQualitySettingsFetching(true)); - const responseSettings = await settings.save(fields || {}); + const responseSettings = await settings.save(); dispatch(reducerActions.setQualitySettings(responseSettings)); } catch (error: unknown) { notification.error({ @@ -312,18 +317,18 @@ function QualityControlPage(): JSX.Element { ), }, 10]); - tabsItems.push([{ - key: 'management', - label: 'Management', - children: ( - - ), - }, 20]); - if (gtJob) { + tabsItems.push([{ + key: 'management', + label: 'Management', + children: ( + + ), + }, 20]); + tabsItems.push([{ key: 'settings', label: 'Settings', diff --git a/cvat-ui/src/components/quality-control/quality-settings.tsx b/cvat-ui/src/components/quality-control/quality-settings.tsx index 437d3298254..87fbc42d24a 100644 --- a/cvat-ui/src/components/quality-control/quality-settings.tsx +++ b/cvat-ui/src/components/quality-control/quality-settings.tsx @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: MIT -import React, { useCallback, useState } from 'react'; +import React, { useCallback } from 'react'; import Text from 'antd/lib/typography/Text'; import Form from 'antd/lib/form'; import { QualitySettings } from 'cvat-core-wrapper'; @@ -12,7 +12,7 @@ import QualitySettingsForm from './task-quality/quality-settings-form'; interface Props { fetching: boolean; qualitySettings: QualitySettings | null; - setQualitySettings: (settings: QualitySettings, fields: any) => void; + setQualitySettings: (settings: QualitySettings) => void; } export default function QualitySettingsComponent(props: Props): JSX.Element | null { @@ -22,16 +22,11 @@ export default function QualitySettingsComponent(props: Props): JSX.Element | nu setQualitySettings, } = props; - const [additionalSettings, setAdditinalSettings] = useState({}); - const onAdditionalValueChanged = (key: string, value: number): void => { - setAdditinalSettings({ ...additionalSettings, [key]: value }); - }; - const [form] = Form.useForm(); const onSave = useCallback(async () => { const values = await form.validateFields(); - setQualitySettings(values, additionalSettings); - }, [form, additionalSettings]); + setQualitySettings(values); + }, [form]); if (fetching) { return ( @@ -46,7 +41,6 @@ export default function QualitySettingsComponent(props: Props): JSX.Element | nu form={form} settings={settings} onSave={onSave} - onAdditionalValueChanged={onAdditionalValueChanged} /> ) : ( No quality settings diff --git a/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx b/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx index d1b26cf89aa..3d18c24dc9f 100644 --- a/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx @@ -13,30 +13,23 @@ import Checkbox from 'antd/lib/checkbox/Checkbox'; import CVATTooltip from 'components/common/cvat-tooltip'; import { QualitySettings, TargetMetric } from 'cvat-core-wrapper'; import { Button, Select } from 'antd/lib'; -import { usePlugins } from 'utils/hooks'; -import { CombinedState } from 'reducers'; interface FormProps { form: FormInstance; settings: QualitySettings; onSave: () => void; - onAdditionalValueChanged: (key: string, value: any) => void; } export default function QualitySettingsForm(props: FormProps): JSX.Element | null { const { - form, settings, onSave, onAdditionalValueChanged, + form, settings, onSave, } = props; - const pluginsToRender = usePlugins( - (state: CombinedState) => state.plugins.components.qualityControlPage.tabs.settings.form.items, - props, - { onAdditionalValueChanged }, - ); - const initialValues = { - targetMetric: 'accuracy_micro', - targetMetricThreshold: 80, + targetMetric: settings.targetMetric, + targetMetricThreshold: settings.targetMetricThreshold * 100, + + maxValidationsPerJob: settings.maxValidationsPerJob, lowOverlapThreshold: settings.lowOverlapThreshold * 100, iouThreshold: settings.iouThreshold * 100, @@ -54,8 +47,6 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul checkCoveredAnnotations: settings.checkCoveredAnnotations, objectVisibilityThreshold: settings.objectVisibilityThreshold * 100, panopticComparison: settings.panopticComparison, - - fields: 1, }; const generalTooltip = ( @@ -154,17 +145,14 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul style={{ width: '70%' }} virtual={false} > - - Accuracy micro - - - Precision micro + + Accuracy - - Recall micro + + Precision - - Dice macro + + Recall @@ -182,6 +170,33 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul , 10]); + + formItems.push([ + <> + + + Job validation + + + +
+ + + + + + + , + 20]); + formItems.push([ <> @@ -216,7 +231,7 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul , - 20]); + 30]); formItems.push([ <> @@ -243,7 +258,7 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul , - 30]); + 40]); formItems.push([ <> @@ -292,7 +307,7 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul , - 40]); + 50]); formItems.push([ <> @@ -330,7 +345,7 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul , - 50]); + 60]); formItems.push([ <> @@ -380,17 +395,7 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul , - 60]); - - formItems.push( - ...pluginsToRender.map(({ component: Component, weight }, index) => ( - [, weight] as [JSX.Element, number] - )), - ); + 70]); return (
Date: Thu, 22 Aug 2024 11:18:19 +0300 Subject: [PATCH 30/79] added fetching job meta, showing summary component --- .../quality-control/quality-control-page.tsx | 38 ++- .../task-quality/allocation-table.tsx | 306 ++++++++++++++++++ .../quality-control/task-quality/summary.tsx | 59 ++++ .../task-quality-magement-component.tsx | 52 ++- 4 files changed, 422 insertions(+), 33 deletions(-) create mode 100644 cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx create mode 100644 cvat-ui/src/components/quality-control/task-quality/summary.tsx diff --git a/cvat-ui/src/components/quality-control/quality-control-page.tsx b/cvat-ui/src/components/quality-control/quality-control-page.tsx index 2436adadf16..d07d75e5a41 100644 --- a/cvat-ui/src/components/quality-control/quality-control-page.tsx +++ b/cvat-ui/src/components/quality-control/quality-control-page.tsx @@ -15,7 +15,7 @@ import Title from 'antd/lib/typography/Title'; import notification from 'antd/lib/notification'; import { useIsMounted } from 'utils/hooks'; import { - Job, JobType, QualityReport, QualitySettings, Task, getCore, + Job, JobType, QualityReport, QualitySettings, Task, getCore, FramesMetaData, } from 'cvat-core-wrapper'; import CVATLoadingSpinner from 'components/common/loading-spinner'; import GoBackButton from 'components/common/go-back-button'; @@ -45,6 +45,10 @@ type InstanceType = 'project' | 'task' | 'job'; interface State { fetching: boolean; reportRefreshingStatus: string | null; + gtJob: { + instance: Job | null, + meta: FramesMetaData | null, + }, qualitySettings: { settings: QualitySettings | null; fetching: boolean; @@ -61,6 +65,7 @@ enum ReducerActionType { SET_QUALITY_SETTINGS_VISIBLE = 'SET_QUALITY_SETTINGS_VISIBLE', SET_QUALITY_SETTINGS_FETCHING = 'SET_QUALITY_SETTINGS_FETCHING', SET_REPORT_REFRESHING_STATUS = 'SET_REPORT_REFRESHING_STATUS', + SET_GT_JOB = 'SET_GT_JOB', } export const reducerActions = { @@ -85,6 +90,9 @@ export const reducerActions = { setReportRefreshingStatus: (status: string | null) => ( createAction(ReducerActionType.SET_REPORT_REFRESHING_STATUS, { status }) ), + setGtJob: (job: Job | null, meta: FramesMetaData | null) => ( + createAction(ReducerActionType.SET_GT_JOB, { job, meta }) + ), }; const reducer = (state: State, action: ActionUnion): State => { @@ -123,6 +131,17 @@ const reducer = (state: State, action: ActionUnion): Stat }; } + if (action.type === ReducerActionType.SET_GT_JOB) { + return { + ...state, + gtJob: { + ...state.gtJob, + instance: action.payload.job, + meta: action.payload.meta, + }, + }; + } + return state; }; @@ -130,6 +149,10 @@ function QualityControlPage(): JSX.Element { const [state, dispatch] = useReducer(reducer, { fetching: true, reportRefreshingStatus: null, + gtJob: { + instance: null, + meta: null, + }, qualitySettings: { settings: null, fetching: true, @@ -149,11 +172,17 @@ function QualityControlPage(): JSX.Element { const [activeTab, setTab] = useState(getTabFromHash(supportedTabs)); const receiveInstance = async (type: InstanceType, id: number): Promise => { let receivedInstance: Task | null = null; + let gtJob: Job | null = null; + let gtJobMeta: any = null; try { switch (type) { case 'task': { [receivedInstance] = await core.tasks.get({ id }); + gtJob = receivedInstance.jobs.find((job: Job) => job.type === JobType.GROUND_TRUTH) ?? null; + if (gtJob) { + gtJobMeta = await core.frames.getMeta('job', gtJob.id); + } break; } default: @@ -161,6 +190,7 @@ function QualityControlPage(): JSX.Element { } if (isMounted()) { + dispatch(reducerActions.setGtJob(gtJob, gtJobMeta)); setInstance(receivedInstance); setInstanceType(type); } @@ -247,7 +277,7 @@ function QualityControlPage(): JSX.Element { }, [state.qualitySettings.settings]); useEffect(() => { - if (Number.isInteger(requestedInstanceID) && ['project', 'task', 'job'].includes(requestedInstanceType)) { + if (Number.isInteger(requestedInstanceID) && ['task'].includes(requestedInstanceType)) { dispatch(reducerActions.setFetching(true)); receiveInstance(requestedInstanceType, requestedInstanceID).then((task) => { if (task) { @@ -305,7 +335,6 @@ function QualityControlPage(): JSX.Element { ); const tabsItems = []; - const gtJob = instance.jobs.find((job: Job) => job.type === JobType.GROUND_TRUTH); tabsItems.push([{ key: 'overview', label: 'Overview', @@ -317,13 +346,14 @@ function QualityControlPage(): JSX.Element { ), }, 10]); - if (gtJob) { + if (state.gtJob.instance && state.gtJob.meta) { tabsItems.push([{ key: 'management', label: 'Management', children: ( ), diff --git a/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx new file mode 100644 index 00000000000..d411bc9d4ec --- /dev/null +++ b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx @@ -0,0 +1,306 @@ +// Copyright (C) 2024 CVAT.ai Corporation +// +// SPDX-License-Identifier: MIT + +import React, { useState } from 'react'; +import { useHistory } from 'react-router'; +import { Row, Col } from 'antd/lib/grid'; +import { ResizableBox } from "react-resizable"; +import Table from 'antd/lib/table'; +import Button from 'antd/lib/button'; +import Text from 'antd/lib/typography/Text'; +import Tag from 'antd/lib/tag'; +import Icon, { DeleteOutlined, DownloadOutlined } from '@ant-design/icons'; +import { Task, Job } from 'cvat-core-wrapper'; +import { RestoreIcon } from 'icons'; +import { toRepresentation, sorter, QualityColors } from 'utils/quality'; +import CVATTooltip from 'components/common/cvat-tooltip'; + +import './styles.scss'; + +const DEFAULT_TITLE_HEIGHT = 20; +const DEFAULT_TITLE_WIDTH = 100; +const RESIZE_HANDLE_OFFSET = 30; + +interface Props { + report: AllocationReport; + task: Task; + gtJob: Job; + generateReportLink: (id: number) => string; + updateFrames: (report: AllocationReport, frames: number[], action: AllocationReportActions) => Promise; + getQualityColor: (value?: number) => QualityColors; +} + +function ResizableTitle(props) { + const { children, onResize } = props; + return ( + + {children} + + ); +} + +export default function AllocationTableComponent(props: Props): JSX.Element { + const { + report, + task, + gtJob, + generateReportLink, + updateFrames, + getQualityColor, + } = props; + + const history = useHistory(); + const taskID = task.id; + + const [select, setSelect] = useState({ + selectedRowKeys: [], + selectedRows: [], + }); + const { selectedRowKeys, selectedRows } = select; + + const rowSelection = { + selectedRowKeys, + onChange: (selectedRowKeys, selectedRows) => { + setSelect({ + ...select, + selectedRowKeys: [...selectedRowKeys], + selectedRows: [...selectedRows], + }); + }, + }; + const handleResize = + (key) => + (e, { size }) => { + setColumns((prevColumns) => { + const index = prevColumns.findIndex((col) => col.key === key); + const nextColumns = [...prevColumns]; + nextColumns[index] = { ...nextColumns[index], width: size.width + RESIZE_HANDLE_OFFSET }; + if (key === 'name') { + nextColumns[index].render = nameRenderFunc(size.width + RESIZE_HANDLE_OFFSET); + } + return nextColumns; + }); + }; + + const nameRenderFunc = (width) => ({ index, name }: { index: number, name: string }): JSX.Element => ( + + + + ); + + let [columns, setColumns] = useState([ + { + title: ( + + Frame + + ), + dataIndex: 'frame', + key: 'frame', + sorter: sorter('frame'), + render: (index: number): JSX.Element => ( +
+ +
+ ), + }, + { + title: ( + + Name + + ), + dataIndex: 'name', + key: 'name', + width: DEFAULT_TITLE_WIDTH, + sorter: sorter('name.name'), + render: nameRenderFunc(DEFAULT_TITLE_WIDTH), + }, + { + title: ( + + Use count + + ), + dataIndex: 'useCount', + key: 'useCount', + sorter: sorter('useCount'), + render: (useCount: number): JSX.Element => ( + useCount === 0 ? ( + 0 + ) : ( + {useCount} + ) + ), + }, + { + title: ( + + Quality + + ), + dataIndex: 'quality', + key: 'quality', + align: 'center' as const, + className: 'cvat-job-item-quality', + sorter: sorter('quality'), + render: (quality?: number): JSX.Element => { + const qualityRepresentation = toRepresentation(quality); + return ( + qualityRepresentation.includes('N/A') ? ( + + N/A + + ) : + {qualityRepresentation} + ); + }, + }, + { + title: ( + + Actions + + ), + dataIndex: 'actions', + key: 'actions', + align: 'center' as const, + className: 'cvat-job-item-quality', + sorter: sorter('active'), + filters: [ + { text: 'Active', value: true }, + { text: 'Excluded', value: false }, + ], + onFilter: (value: boolean, record: any) => record.actions.frameData.active === value, + render: ({ report, frameData }: {report: AllocationReport, frameData: AllocationSummary }): JSX.Element => { + return ( + frameData.active ? ( + {updateFrames(report, [frameData.index], AllocationReportActions.EXCLUDE)}} + /> + ) : ( + {updateFrames(report, [frameData.index], AllocationReportActions.RESTORE)}} + component={RestoreIcon} + /> + ) + ); + }, + }, + ]); + + const data = report.frames.map((frameData: AllocationSummary, index) => ({ + key: index, + frame: frameData.index, + name: { name: frameData.name, index: frameData.index }, + useCount: frameData.useCount, + quality: frameData.quality, + active: frameData.active, + actions: { report, frameData }, + })); + + return ( +
+ +
+ Frames + + + { + report?.id ? ( + + + + ) : null + } + + { + selectedRowKeys.length !== 0 ? ( + <> + + { + const framesToUpdate = selectedRows + .filter((frameData) => frameData.active) + .map((frameData) => frameData.frame); + updateFrames(report, framesToUpdate, AllocationReportActions.EXCLUDE); + setSelect({ + ...select, + selectedRowKeys: [], + selectedRows: [], + }); + }} + /> + + + { + const framesToUpdate = selectedRows + .filter((frameData) => !frameData.active) + .map((frameData) => frameData.frame); + updateFrames(report, framesToUpdate, AllocationReportActions.RESTORE); + setSelect({ + ...select, + selectedRowKeys: [], + selectedRows: [], + }); + }} + component={RestoreIcon} + /> + + + ) : null + } + +
{ + if (!rowData.actions.frameData.active) { + return 'cvat-allocation-frame-row cvat-allocation-frame-row-excluded'; + } + return 'cvat-allocation-frame'; + }} + columns={columns} + dataSource={data} + rowSelection={rowSelection} + size='small' + pagination={{ showSizeChanger: true }} + /> + + ); +} diff --git a/cvat-ui/src/components/quality-control/task-quality/summary.tsx b/cvat-ui/src/components/quality-control/task-quality/summary.tsx new file mode 100644 index 00000000000..6a2fc43802a --- /dev/null +++ b/cvat-ui/src/components/quality-control/task-quality/summary.tsx @@ -0,0 +1,59 @@ +// Copyright (C) 2024 CVAT.ai Corporation +// +// SPDX-License-Identifier: MIT + +import React from 'react'; +import { Row, Col } from 'antd/es/grid'; +import Text from 'antd/lib/typography/Text'; +import AnalyticsCard from 'components/analytics-page/views/analytics-card'; + +export interface Props { + excludedCount: number; + totalCount: number; + activeCount: number; +} + +export function SummaryComponent(props: Props): JSX.Element { + const { excludedCount, totalCount, activeCount } = props; + + const reportInfo = ( + + + + + + Excluded count: + {' '} + {excludedCount} + + + + + Total count: + {' '} + {totalCount} + + + + + + + Active count: + {' '} + {activeCount} + + + + + + ); + + return ( + + ); +} diff --git a/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx b/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx index c2b92cefc6e..876a64beac9 100644 --- a/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx @@ -3,51 +3,45 @@ // SPDX-License-Identifier: MIT import { + FramesMetaData, Task, } from 'cvat-core-wrapper'; import React from 'react'; import { QualityColors } from 'utils/quality'; -import PaidFeaturePlaceholder from 'components/paid-feature-placeholder/paid-feature-placeholder'; -import { usePlugins } from 'utils/hooks'; +import { Row } from 'antd/es/grid'; +import { SummaryComponent } from './summary'; +// import AllocationTableComponent from './allocation-table'; interface Props { task: Task; + gtJobFramesMeta: FramesMetaData; getQualityColor: (value?: number) => QualityColors; } function TaskQualityManagementComponent(props: Props): JSX.Element { const { - task, getQualityColor, + task, getQualityColor, gtJobFramesMeta, } = props; - const plugins = usePlugins((state) => state.plugins.components.qualityControlPage.tabs.management, props, { - task, - getQualityColor, - }); - - const items: [JSX.Element, number][] = []; - items.push([( - - ), 0]); - items.push(...plugins.map(({ component: Component, weight }, index: number) => ( - [, weight] as [JSX.Element, number] - ))); - const renderedComponent = items.sort((a, b) => b[1] - a[1])[0][0]; - return (
- {renderedComponent} + + + + {/* + + */}
); } From 82fdfb9beb2fc4e10582613d712d5848a6522691 Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Thu, 22 Aug 2024 12:35:42 +0300 Subject: [PATCH 31/79] added allocation table, styles --- .../quality-control/quality-control-page.tsx | 1 + .../components/quality-control/styles.scss | 66 ++++++ .../task-quality/allocation-table.tsx | 193 ++++++++---------- .../task-quality-magement-component.tsx | 14 +- 4 files changed, 162 insertions(+), 112 deletions(-) diff --git a/cvat-ui/src/components/quality-control/quality-control-page.tsx b/cvat-ui/src/components/quality-control/quality-control-page.tsx index d07d75e5a41..65f26c96a95 100644 --- a/cvat-ui/src/components/quality-control/quality-control-page.tsx +++ b/cvat-ui/src/components/quality-control/quality-control-page.tsx @@ -353,6 +353,7 @@ function QualityControlPage(): JSX.Element { children: ( diff --git a/cvat-ui/src/components/quality-control/styles.scss b/cvat-ui/src/components/quality-control/styles.scss index 5adada104a3..3f00c0f06e1 100644 --- a/cvat-ui/src/components/quality-control/styles.scss +++ b/cvat-ui/src/components/quality-control/styles.scss @@ -124,3 +124,69 @@ margin: $grid-unit-size 0; } } + + +$excluded-background: #d9d9d973; + +.cvat-allocation-frame-row-excluded:not(.ant-table-row-selected) { + background-color: $excluded-background; + + + .ant-table-cell-row-hover { + background-color: $excluded-background !important; + } +} + +.cvat-frame-allocation-list { + width: 100%; + height: auto; + margin-top: $grid-unit-size * 2; + overflow: hidden; + + td.ant-table-column-sort { + background: none; + } + + .react-resizable-handle { + position: absolute; + right: -28px; + bottom: 0; + z-index: 1; + width: 10px; + height: 100%; + cursor: ew-resize; + display: grid; + place-content: center; + } +} + +.cvat-frame-allocation-actions { + span[role='img'] { + padding: 0 $grid-unit-size; + } + + span[role='img']:hover { + cursor: pointer; + } +} + + +.cvat-frame-allocation-header { + margin-bottom: 0; + font-size: 20px; + font-weight: bold; +} + +.cvat-allocation-summary { + span { + font-size: 13px !important; + + } +} + +.cvat-open-fame-button { + span { + text-overflow: ellipsis; + overflow: hidden; + } +} diff --git a/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx index d411bc9d4ec..7d8f0d15a15 100644 --- a/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx @@ -5,29 +5,25 @@ import React, { useState } from 'react'; import { useHistory } from 'react-router'; import { Row, Col } from 'antd/lib/grid'; -import { ResizableBox } from "react-resizable"; +import { ResizableBox } from 'react-resizable'; import Table from 'antd/lib/table'; import Button from 'antd/lib/button'; import Text from 'antd/lib/typography/Text'; import Tag from 'antd/lib/tag'; -import Icon, { DeleteOutlined, DownloadOutlined } from '@ant-design/icons'; -import { Task, Job } from 'cvat-core-wrapper'; +import Icon, { DeleteOutlined } from '@ant-design/icons'; +import { Task, Job, FramesMetaData } from 'cvat-core-wrapper'; import { RestoreIcon } from 'icons'; import { toRepresentation, sorter, QualityColors } from 'utils/quality'; import CVATTooltip from 'components/common/cvat-tooltip'; -import './styles.scss'; - const DEFAULT_TITLE_HEIGHT = 20; const DEFAULT_TITLE_WIDTH = 100; const RESIZE_HANDLE_OFFSET = 30; interface Props { - report: AllocationReport; task: Task; gtJob: Job; - generateReportLink: (id: number) => string; - updateFrames: (report: AllocationReport, frames: number[], action: AllocationReportActions) => Promise; + gtJobFramesMeta: FramesMetaData getQualityColor: (value?: number) => QualityColors; } @@ -50,16 +46,13 @@ function ResizableTitle(props) { export default function AllocationTableComponent(props: Props): JSX.Element { const { - report, task, gtJob, - generateReportLink, - updateFrames, + gtJobFramesMeta, getQualityColor, } = props; const history = useHistory(); - const taskID = task.id; const [select, setSelect] = useState({ selectedRowKeys: [], @@ -77,34 +70,36 @@ export default function AllocationTableComponent(props: Props): JSX.Element { }); }, }; - const handleResize = - (key) => - (e, { size }) => { - setColumns((prevColumns) => { - const index = prevColumns.findIndex((col) => col.key === key); - const nextColumns = [...prevColumns]; - nextColumns[index] = { ...nextColumns[index], width: size.width + RESIZE_HANDLE_OFFSET }; - if (key === 'name') { - nextColumns[index].render = nameRenderFunc(size.width + RESIZE_HANDLE_OFFSET); - } - return nextColumns; - }); - }; - const nameRenderFunc = (width) => ({ index, name }: { index: number, name: string }): JSX.Element => ( - - - - ); + function nameRenderFunc(width: number) { + const component = ({ index, name }: { index: number, name: string }): JSX.Element => ( + + + + ); + return component; + } + const handleResize = + (key) => (e, { size }) => { + setColumns((prevColumns) => { + const index = prevColumns.findIndex((col) => col.key === key); + const nextColumns = [...prevColumns]; + nextColumns[index] = { ...nextColumns[index], width: size.width + RESIZE_HANDLE_OFFSET }; + if (key === 'name') { + nextColumns[index].render = nameRenderFunc(size.width + RESIZE_HANDLE_OFFSET); + } + return nextColumns; + }); + }; let [columns, setColumns] = useState([ { @@ -151,13 +146,16 @@ export default function AllocationTableComponent(props: Props): JSX.Element { ), dataIndex: 'useCount', key: 'useCount', + align: 'center' as const, sorter: sorter('useCount'), - render: (useCount: number): JSX.Element => ( - useCount === 0 ? ( - 0 - ) : ( - {useCount} - ) + render: (): JSX.Element => ( + + N/A + ), }, { @@ -171,21 +169,15 @@ export default function AllocationTableComponent(props: Props): JSX.Element { align: 'center' as const, className: 'cvat-job-item-quality', sorter: sorter('quality'), - render: (quality?: number): JSX.Element => { - const qualityRepresentation = toRepresentation(quality); - return ( - qualityRepresentation.includes('N/A') ? ( - - N/A - - ) : - {qualityRepresentation} - ); - }, + render: (): JSX.Element => ( + + N/A + + ), }, { title: ( @@ -203,32 +195,36 @@ export default function AllocationTableComponent(props: Props): JSX.Element { { text: 'Excluded', value: false }, ], onFilter: (value: boolean, record: any) => record.actions.frameData.active === value, - render: ({ report, frameData }: {report: AllocationReport, frameData: AllocationSummary }): JSX.Element => { - return ( - frameData.active ? ( - {updateFrames(report, [frameData.index], AllocationReportActions.EXCLUDE)}} - /> - ) : ( - {updateFrames(report, [frameData.index], AllocationReportActions.RESTORE)}} - component={RestoreIcon} - /> - ) - ); - }, + render: (): JSX.Element => ( + // frameData.active ? ( + // {}} + // /> + // ) : ( + // {}} + // component={RestoreIcon} + // /> + // ) + {}} + /> + ), }, ]); - const data = report.frames.map((frameData: AllocationSummary, index) => ({ - key: index, - frame: frameData.index, - name: { name: frameData.name, index: frameData.index }, - useCount: frameData.useCount, - quality: frameData.quality, - active: frameData.active, - actions: { report, frameData }, - })); + const data = gtJobFramesMeta.includedFrames.map((frameID: number) => { + const frameData = gtJobFramesMeta.frames[frameID] || gtJobFramesMeta.frames[0]; + return { + key: frameID, + frame: frameID, + name: { name: frameData.name, index: frameID }, + useCount: frameID, + quality: frameID, + active: frameID in gtJobFramesMeta.deletedFrames, + actions: { meta: gtJobFramesMeta, frameData }, + }; + }); return (
@@ -236,29 +232,16 @@ export default function AllocationTableComponent(props: Props): JSX.Element {
Frames - - { - report?.id ? ( - - - - ) : null - } - { selectedRowKeys.length !== 0 ? ( <> { - const framesToUpdate = selectedRows - .filter((frameData) => frameData.active) - .map((frameData) => frameData.frame); - updateFrames(report, framesToUpdate, AllocationReportActions.EXCLUDE); + // const framesToUpdate = selectedRows + // .filter((frameData) => frameData.active) + // .map((frameData) => frameData.frame); + // updateFrames(report, framesToUpdate, AllocationReportActions.EXCLUDE); setSelect({ ...select, selectedRowKeys: [], @@ -270,10 +253,10 @@ export default function AllocationTableComponent(props: Props): JSX.Element { { - const framesToUpdate = selectedRows - .filter((frameData) => !frameData.active) - .map((frameData) => frameData.frame); - updateFrames(report, framesToUpdate, AllocationReportActions.RESTORE); + // const framesToUpdate = selectedRows + // .filter((frameData) => !frameData.active) + // .map((frameData) => frameData.frame); + // updateFrames(report, framesToUpdate, AllocationReportActions.RESTORE); setSelect({ ...select, selectedRowKeys: [], @@ -290,7 +273,7 @@ export default function AllocationTableComponent(props: Props): JSX.Element {
{ - if (!rowData.actions.frameData.active) { + if (rowData.frame in rowData.actions.meta.deletedFrames) { return 'cvat-allocation-frame-row cvat-allocation-frame-row-excluded'; } return 'cvat-allocation-frame'; diff --git a/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx b/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx index 876a64beac9..06e7ac1595b 100644 --- a/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx @@ -4,23 +4,25 @@ import { FramesMetaData, + Job, Task, } from 'cvat-core-wrapper'; import React from 'react'; import { QualityColors } from 'utils/quality'; import { Row } from 'antd/es/grid'; import { SummaryComponent } from './summary'; -// import AllocationTableComponent from './allocation-table'; +import AllocationTableComponent from './allocation-table'; interface Props { task: Task; + gtJob: Job; gtJobFramesMeta: FramesMetaData; getQualityColor: (value?: number) => QualityColors; } function TaskQualityManagementComponent(props: Props): JSX.Element { const { - task, getQualityColor, gtJobFramesMeta, + task, gtJob, getQualityColor, gtJobFramesMeta, } = props; return ( @@ -32,16 +34,14 @@ function TaskQualityManagementComponent(props: Props): JSX.Element { totalCount={gtJobFramesMeta.size} /> - {/* + - */} + ); } From 7df74bbc2dab1037df9e9ceff0710311412b6606 Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Fri, 23 Aug 2024 13:20:46 +0300 Subject: [PATCH 32/79] implemented actual frame deleting/restoring from management page --- cvat-core/src/api-implementation.ts | 17 +++-- cvat-core/src/frames.ts | 21 +++--- cvat-core/src/session-implementation.ts | 21 +++--- cvat-core/src/session.ts | 7 +- .../quality-control/quality-control-page.tsx | 66 +++++++++++++++++-- .../task-quality/allocation-table.tsx | 66 +++++++++---------- .../task-quality-magement-component.tsx | 16 +++-- 7 files changed, 140 insertions(+), 74 deletions(-) diff --git a/cvat-core/src/api-implementation.ts b/cvat-core/src/api-implementation.ts index 1e7bfb5164c..4ec740c885d 100644 --- a/cvat-core/src/api-implementation.ts +++ b/cvat-core/src/api-implementation.ts @@ -37,7 +37,7 @@ import { import QualityReport from './quality-report'; import QualityConflict, { ConflictSeverity } from './quality-conflict'; import QualitySettings from './quality-settings'; -import { FramesMetaData } from './frames'; +import { FramesMetaData, getJobMeta } from './frames'; import AnalyticsReport from './analytics-report'; import { listActions, registerAction, runActions } from './annotations-actions'; import { JobType } from './enums'; @@ -554,11 +554,16 @@ export default function implementAPI(cvat: CVATCore): CVATCore { await serverProxy.analytics.performance.calculate(params, onUpdate); }); implementationMixin(cvat.frames.getMeta, async (type, id) => { - const result = await serverProxy.frames.getMeta(type, id); - return new FramesMetaData({ - ...result, - deleted_frames: Object.fromEntries(result.deleted_frames.map((_frame) => [_frame, true])), - }); + if (type === 'task') { + const result = await serverProxy.frames.getMeta(type, id); + return new FramesMetaData({ + ...result, + deleted_frames: Object.fromEntries(result.deleted_frames.map((_frame) => [_frame, true])), + }); + } + + const result = await getJobMeta(id, { reload: true }); + return result; }); return cvat; diff --git a/cvat-core/src/frames.ts b/cvat-core/src/frames.ts index 8aab9f7f0eb..e955d54f6d7 100644 --- a/cvat-core/src/frames.ts +++ b/cvat-core/src/frames.ts @@ -435,8 +435,8 @@ Object.defineProperty(FrameData.prototype.data, 'implementation', { writable: false, }); -async function getJobMeta(jobID: number): Promise { - if (!frameMetaCache[jobID]) { +export async function getJobMeta(jobID: number, { reload } = { reload: false }): Promise { + if (!frameMetaCache[jobID] || reload) { frameMetaCache[jobID] = serverProxy.frames.getMeta('job', jobID) .then((serverMeta) => new FramesMetaData({ ...serverMeta, @@ -655,24 +655,25 @@ export async function getDeletedFrames(instanceType: 'job' | 'task', id): Promis throw new Exception(`getDeletedFrames is not implemented for ${instanceType}`); } -export function deleteFrame(jobID: number, frame: number): void { - const { meta } = frameDataCache[jobID]; +export async function deleteFrame(jobID: number, frame: number): Promise { + const meta = await frameMetaCache[jobID]; meta.deletedFrames[frame] = true; } -export function restoreFrame(jobID: number, frame: number): void { - const { meta } = frameDataCache[jobID]; +export async function restoreFrame(jobID: number, frame: number): Promise { + const meta = await frameMetaCache[jobID]; delete meta.deletedFrames[frame]; } -export async function patchMeta(jobID: number): Promise { - const { meta } = frameDataCache[jobID]; +export async function patchMeta(jobID: number): Promise { + const meta = await frameMetaCache[jobID]; const updatedFields = meta.getUpdated(); if (Object.keys(updatedFields).length) { - const newMeta = await saveJobMeta(meta, jobID); - frameDataCache[jobID].meta = newMeta; + frameMetaCache[jobID] = saveJobMeta(meta, jobID); } + const newMeta = await frameMetaCache[jobID]; + return newMeta; } export async function findFrame( diff --git a/cvat-core/src/session-implementation.ts b/cvat-core/src/session-implementation.ts index b6fff055fa3..224a9ef0fd2 100644 --- a/cvat-core/src/session-implementation.ts +++ b/cvat-core/src/session-implementation.ts @@ -44,9 +44,11 @@ async function deleteFrameWrapper(jobID, frame): Promise { }; await redo(); - getHistory(this).do(HistoryActions.REMOVED_FRAME, async () => { - restoreFrame(jobID, frame); - }, redo, [], frame); + try { + getHistory(this).do(HistoryActions.REMOVED_FRAME, async () => { + restoreFrame(jobID, frame); + }, redo, [], frame); + } catch (error) { /* empty */ } } async function restoreFrameWrapper(jobID, frame): Promise { @@ -55,9 +57,11 @@ async function restoreFrameWrapper(jobID, frame): Promise { }; await redo(); - getHistory(this).do(HistoryActions.RESTORED_FRAME, async () => { - deleteFrame(jobID, frame); - }, redo, [], frame); + try { + getHistory(this).do(HistoryActions.RESTORED_FRAME, async () => { + deleteFrame(jobID, frame); + }, redo, [], frame); + } catch (error) { /* empty */ } } export function implementJob(Job: typeof JobClass): typeof JobClass { @@ -232,7 +236,7 @@ export function implementJob(Job: typeof JobClass): typeof JobClass { value: function saveFramesImplementation( this: JobClass, ): ReturnType { - return patchMeta(this.id); + return patchMeta(this.id).then((meta) => [meta]); }, }); @@ -912,8 +916,7 @@ export function implementTask(Task: typeof TaskClass): typeof TaskClass { value: async function saveFramesImplementation( this: TaskClass, ): ReturnType { - return Promise.all(this.jobs.map((job) => patchMeta(job.id))) - .then(() => Promise.resolve()); + return Promise.all(this.jobs.map((job) => patchMeta(job.id))); }, }); diff --git a/cvat-core/src/session.ts b/cvat-core/src/session.ts index 1051d3fb53b..3940bc5db7d 100644 --- a/cvat-core/src/session.ts +++ b/cvat-core/src/session.ts @@ -22,7 +22,7 @@ import { SerializedLabel, SerializedTask, } from './server-response-types'; import AnnotationGuide from './guide'; -import { FrameData } from './frames'; +import { FrameData, FramesMetaData } from './frames'; import Statistics from './statistics'; import { Request } from './request'; import logger from './logger'; @@ -223,10 +223,11 @@ function buildDuplicatedAPI(prototype) { ); }, async save() { - await PluginRegistry.apiWrapper.call( + const result = await PluginRegistry.apiWrapper.call( this, prototype.frames.save, ); + return result; }, async cachedChunks() { const result = await PluginRegistry.apiWrapper.call(this, prototype.frames.cachedChunks); @@ -377,7 +378,7 @@ export class Session { get: (frame: number, isPlaying?: boolean, step?: number) => Promise; delete: (frame: number) => Promise; restore: (frame: number) => Promise; - save: () => Promise; + save: () => Promise; cachedChunks: () => Promise; preview: () => Promise; contextImage: (frame: number) => Promise>; diff --git a/cvat-ui/src/components/quality-control/quality-control-page.tsx b/cvat-ui/src/components/quality-control/quality-control-page.tsx index 65f26c96a95..5a15775a1f8 100644 --- a/cvat-ui/src/components/quality-control/quality-control-page.tsx +++ b/cvat-ui/src/components/quality-control/quality-control-page.tsx @@ -24,6 +24,7 @@ import { BASE_TARGET_THRESHOLD, qualityColorGenerator, QualityColors } from 'uti import TaskQualityComponent from './task-quality/task-quality-component'; import TaskQualityManagementComponent from './task-quality/task-quality-magement-component'; import QualitySettingsComponent from './quality-settings'; +import { FramesAllocation } from './task-quality/allocation-table'; const core = getCore(); @@ -40,6 +41,16 @@ function readInstanceId(): number { return +useParams<{ tid: string }>().tid; } +function getFramesAllocationFromMeta(meta: FramesMetaData): FramesAllocation { + return { + includedFrames: [...meta.includedFrames], + deletedFrames: { ...meta.deletedFrames }, + names: meta.includedFrames.map((frameID: number) => ( + meta.frames[frameID].name ?? meta.frames[0].name + )), + }; +} + type InstanceType = 'project' | 'task' | 'job'; interface State { @@ -66,6 +77,7 @@ enum ReducerActionType { SET_QUALITY_SETTINGS_FETCHING = 'SET_QUALITY_SETTINGS_FETCHING', SET_REPORT_REFRESHING_STATUS = 'SET_REPORT_REFRESHING_STATUS', SET_GT_JOB = 'SET_GT_JOB', + SET_GT_JOB_META = 'SET_GT_JOB_META', } export const reducerActions = { @@ -90,8 +102,11 @@ export const reducerActions = { setReportRefreshingStatus: (status: string | null) => ( createAction(ReducerActionType.SET_REPORT_REFRESHING_STATUS, { status }) ), - setGtJob: (job: Job | null, meta: FramesMetaData | null) => ( - createAction(ReducerActionType.SET_GT_JOB, { job, meta }) + setGtJob: (job: Job | null) => ( + createAction(ReducerActionType.SET_GT_JOB, { job }) + ), + setGtJobMeta: (meta: FramesMetaData | null) => ( + createAction(ReducerActionType.SET_GT_JOB_META, { meta }) ), }; @@ -137,6 +152,15 @@ const reducer = (state: State, action: ActionUnion): Stat gtJob: { ...state.gtJob, instance: action.payload.job, + }, + }; + } + + if (action.type === ReducerActionType.SET_GT_JOB_META) { + return { + ...state, + gtJob: { + ...state.gtJob, meta: action.payload.meta, }, }; @@ -173,7 +197,7 @@ function QualityControlPage(): JSX.Element { const receiveInstance = async (type: InstanceType, id: number): Promise => { let receivedInstance: Task | null = null; let gtJob: Job | null = null; - let gtJobMeta: any = null; + let gtJobMeta: FramesMetaData | null = null; try { switch (type) { @@ -181,7 +205,7 @@ function QualityControlPage(): JSX.Element { [receivedInstance] = await core.tasks.get({ id }); gtJob = receivedInstance.jobs.find((job: Job) => job.type === JobType.GROUND_TRUTH) ?? null; if (gtJob) { - gtJobMeta = await core.frames.getMeta('job', gtJob.id); + gtJobMeta = await core.frames.getMeta('job', gtJob.id) as FramesMetaData; } break; } @@ -190,7 +214,8 @@ function QualityControlPage(): JSX.Element { } if (isMounted()) { - dispatch(reducerActions.setGtJob(gtJob, gtJobMeta)); + dispatch(reducerActions.setGtJob(gtJob)); + dispatch(reducerActions.setGtJobMeta(gtJobMeta)); setInstance(receivedInstance); setInstanceType(type); } @@ -276,6 +301,33 @@ function QualityControlPage(): JSX.Element { } }, [state.qualitySettings.settings]); + const onDeleteFrames = useCallback(async (frameIDs: number[]): Promise => { + console.log('delete', frameIDs); + const { instance: gtJob } = state.gtJob; + if (gtJob) { + dispatch(reducerActions.setFetching(true)); + await Promise.all(frameIDs.map((frameID: number): Promise => ( + gtJob.frames.delete(frameID) + ))); + const [newMeta] = await gtJob.frames.save(); + dispatch(reducerActions.setGtJobMeta(newMeta)); + dispatch(reducerActions.setFetching(false)); + } + }, [state.gtJob.instance]); + + const onRestoreFrames = useCallback(async (frameIDs: number[]): Promise => { + const { instance: gtJob } = state.gtJob; + if (gtJob) { + dispatch(reducerActions.setFetching(true)); + await Promise.all(frameIDs.map((frameID: number): Promise => ( + gtJob.frames.restore(frameID) + ))); + const [newMeta] = await gtJob.frames.save(); + dispatch(reducerActions.setGtJobMeta(newMeta)); + dispatch(reducerActions.setFetching(false)); + } + }, [state.gtJob.instance]); + useEffect(() => { if (Number.isInteger(requestedInstanceID) && ['task'].includes(requestedInstanceType)) { dispatch(reducerActions.setFetching(true)); @@ -354,7 +406,9 @@ function QualityControlPage(): JSX.Element { ), diff --git a/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx index 7d8f0d15a15..67860f945aa 100644 --- a/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx @@ -23,8 +23,10 @@ const RESIZE_HANDLE_OFFSET = 30; interface Props { task: Task; gtJob: Job; - gtJobFramesMeta: FramesMetaData + gtJobMeta: FramesMetaData; getQualityColor: (value?: number) => QualityColors; + onDeleteFrames: (frames: number[]) => void; + onRestoreFrames: (frames: number[]) => void; } function ResizableTitle(props) { @@ -48,8 +50,10 @@ export default function AllocationTableComponent(props: Props): JSX.Element { const { task, gtJob, - gtJobFramesMeta, + gtJobMeta, getQualityColor, + onDeleteFrames, + onRestoreFrames, } = props; const history = useHistory(); @@ -58,10 +62,9 @@ export default function AllocationTableComponent(props: Props): JSX.Element { selectedRowKeys: [], selectedRows: [], }); - const { selectedRowKeys, selectedRows } = select; const rowSelection = { - selectedRowKeys, + selectedRowKeys: select.selectedRowKeys, onChange: (selectedRowKeys, selectedRows) => { setSelect({ ...select, @@ -89,7 +92,7 @@ export default function AllocationTableComponent(props: Props): JSX.Element { return component; } const handleResize = - (key) => (e, { size }) => { + (key: string) => (event, { size }) => { setColumns((prevColumns) => { const index = prevColumns.findIndex((col) => col.key === key); const nextColumns = [...prevColumns]; @@ -101,7 +104,7 @@ export default function AllocationTableComponent(props: Props): JSX.Element { }); }; - let [columns, setColumns] = useState([ + const [columns, setColumns] = useState([ { title: ( @@ -195,36 +198,31 @@ export default function AllocationTableComponent(props: Props): JSX.Element { { text: 'Excluded', value: false }, ], onFilter: (value: boolean, record: any) => record.actions.frameData.active === value, - render: (): JSX.Element => ( - // frameData.active ? ( - // {}} - // /> - // ) : ( - // {}} - // component={RestoreIcon} - // /> - // ) - {}} - /> + render: ({ frameID, active }: { frameID: number, active: boolean }): JSX.Element => ( + active ? ( + { onRestoreFrames([frameID]); }} + component={RestoreIcon} + /> + ) : ( + { onDeleteFrames([frameID]); }} + /> + ) ), }, ]); - const data = gtJobFramesMeta.includedFrames.map((frameID: number) => { - const frameData = gtJobFramesMeta.frames[frameID] || gtJobFramesMeta.frames[0]; - return { - key: frameID, - frame: frameID, - name: { name: frameData.name, index: frameID }, - useCount: frameID, - quality: frameID, - active: frameID in gtJobFramesMeta.deletedFrames, - actions: { meta: gtJobFramesMeta, frameData }, - }; - }); + const data = gtJobMeta.includedFrames.map((frameID: number) => ({ + key: frameID, + frame: frameID, + name: { name: gtJobMeta.frames[frameID].name, index: frameID }, + useCount: frameID, + quality: frameID, + active: frameID in gtJobMeta.deletedFrames, + actions: { frameID, active: frameID in gtJobMeta.deletedFrames }, + }), + ); return (
@@ -233,7 +231,7 @@ export default function AllocationTableComponent(props: Props): JSX.Element { Frames { - selectedRowKeys.length !== 0 ? ( + select.selectedRowKeys.length !== 0 ? ( <>
{ - if (rowData.frame in rowData.actions.meta.deletedFrames) { + if (rowData.active) { return 'cvat-allocation-frame-row cvat-allocation-frame-row-excluded'; } return 'cvat-allocation-frame'; diff --git a/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx b/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx index 06e7ac1595b..7ceb53c45b1 100644 --- a/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx @@ -16,30 +16,34 @@ import AllocationTableComponent from './allocation-table'; interface Props { task: Task; gtJob: Job; - gtJobFramesMeta: FramesMetaData; + gtJobMeta: FramesMetaData; getQualityColor: (value?: number) => QualityColors; + onDeleteFrames: (frames: number[]) => void; + onRestoreFrames: (frames: number[]) => void; } function TaskQualityManagementComponent(props: Props): JSX.Element { const { - task, gtJob, getQualityColor, gtJobFramesMeta, + task, gtJob, gtJobMeta, getQualityColor, onDeleteFrames, onRestoreFrames, } = props; return (
From 6db52f3ae29854731eafc69e83854acc11745c1d Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Fri, 23 Aug 2024 13:44:44 +0300 Subject: [PATCH 33/79] fixed group operations --- .../quality-control/quality-control-page.tsx | 13 +------ .../task-quality/allocation-table.tsx | 35 ++++++++++++------- .../task-quality-magement-component.tsx | 12 ++++++- 3 files changed, 34 insertions(+), 26 deletions(-) diff --git a/cvat-ui/src/components/quality-control/quality-control-page.tsx b/cvat-ui/src/components/quality-control/quality-control-page.tsx index 5a15775a1f8..137fe1624cb 100644 --- a/cvat-ui/src/components/quality-control/quality-control-page.tsx +++ b/cvat-ui/src/components/quality-control/quality-control-page.tsx @@ -24,7 +24,6 @@ import { BASE_TARGET_THRESHOLD, qualityColorGenerator, QualityColors } from 'uti import TaskQualityComponent from './task-quality/task-quality-component'; import TaskQualityManagementComponent from './task-quality/task-quality-magement-component'; import QualitySettingsComponent from './quality-settings'; -import { FramesAllocation } from './task-quality/allocation-table'; const core = getCore(); @@ -41,16 +40,6 @@ function readInstanceId(): number { return +useParams<{ tid: string }>().tid; } -function getFramesAllocationFromMeta(meta: FramesMetaData): FramesAllocation { - return { - includedFrames: [...meta.includedFrames], - deletedFrames: { ...meta.deletedFrames }, - names: meta.includedFrames.map((frameID: number) => ( - meta.frames[frameID].name ?? meta.frames[0].name - )), - }; -} - type InstanceType = 'project' | 'task' | 'job'; interface State { @@ -302,7 +291,6 @@ function QualityControlPage(): JSX.Element { }, [state.qualitySettings.settings]); const onDeleteFrames = useCallback(async (frameIDs: number[]): Promise => { - console.log('delete', frameIDs); const { instance: gtJob } = state.gtJob; if (gtJob) { dispatch(reducerActions.setFetching(true)); @@ -410,6 +398,7 @@ function QualityControlPage(): JSX.Element { onDeleteFrames={onDeleteFrames} onRestoreFrames={onRestoreFrames} getQualityColor={state.qualitySettings.getQualityColor} + fetching={state.fetching} /> ), }, 20]); diff --git a/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx index 67860f945aa..084182c17dd 100644 --- a/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx @@ -9,7 +9,6 @@ import { ResizableBox } from 'react-resizable'; import Table from 'antd/lib/table'; import Button from 'antd/lib/button'; import Text from 'antd/lib/typography/Text'; -import Tag from 'antd/lib/tag'; import Icon, { DeleteOutlined } from '@ant-design/icons'; import { Task, Job, FramesMetaData } from 'cvat-core-wrapper'; import { RestoreIcon } from 'icons'; @@ -29,6 +28,16 @@ interface Props { onRestoreFrames: (frames: number[]) => void; } +interface RowData { + key: number; + frame: number; + name: { name: string, index: number }, + useCount: number, + quality: number, + active: boolean, + actions: { frameID: number, active: boolean }, +} + function ResizableTitle(props) { const { children, onResize } = props; return ( @@ -58,14 +67,14 @@ export default function AllocationTableComponent(props: Props): JSX.Element { const history = useHistory(); - const [select, setSelect] = useState({ + const [select, setSelect] = useState<{ selectedRowKeys: string[], selectedRows: RowData[] }>({ selectedRowKeys: [], selectedRows: [], }); const rowSelection = { selectedRowKeys: select.selectedRowKeys, - onChange: (selectedRowKeys, selectedRows) => { + onChange: (selectedRowKeys: string[], selectedRows: RowData[]) => { setSelect({ ...select, selectedRowKeys: [...selectedRowKeys], @@ -219,7 +228,7 @@ export default function AllocationTableComponent(props: Props): JSX.Element { name: { name: gtJobMeta.frames[frameID].name, index: frameID }, useCount: frameID, quality: frameID, - active: frameID in gtJobMeta.deletedFrames, + active: !(frameID in gtJobMeta.deletedFrames), actions: { frameID, active: frameID in gtJobMeta.deletedFrames }, }), ); @@ -236,10 +245,10 @@ export default function AllocationTableComponent(props: Props): JSX.Element {
{ - // const framesToUpdate = selectedRows - // .filter((frameData) => frameData.active) - // .map((frameData) => frameData.frame); - // updateFrames(report, framesToUpdate, AllocationReportActions.EXCLUDE); + const framesToUpdate = select.selectedRows + .filter((frameData) => frameData.active) + .map((frameData) => frameData.frame); + onDeleteFrames(framesToUpdate); setSelect({ ...select, selectedRowKeys: [], @@ -251,10 +260,10 @@ export default function AllocationTableComponent(props: Props): JSX.Element { { - // const framesToUpdate = selectedRows - // .filter((frameData) => !frameData.active) - // .map((frameData) => frameData.frame); - // updateFrames(report, framesToUpdate, AllocationReportActions.RESTORE); + const framesToUpdate = select.selectedRows + .filter((frameData) => !frameData.active) + .map((frameData) => frameData.frame); + onRestoreFrames(framesToUpdate); setSelect({ ...select, selectedRowKeys: [], @@ -271,7 +280,7 @@ export default function AllocationTableComponent(props: Props): JSX.Element {
{ - if (rowData.active) { + if (!rowData.active) { return 'cvat-allocation-frame-row cvat-allocation-frame-row-excluded'; } return 'cvat-allocation-frame'; diff --git a/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx b/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx index 7ceb53c45b1..19f99f32456 100644 --- a/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx @@ -10,6 +10,7 @@ import { import React from 'react'; import { QualityColors } from 'utils/quality'; import { Row } from 'antd/es/grid'; +import Spin from 'antd/lib/spin'; import { SummaryComponent } from './summary'; import AllocationTableComponent from './allocation-table'; @@ -17,6 +18,7 @@ interface Props { task: Task; gtJob: Job; gtJobMeta: FramesMetaData; + fetching: boolean; getQualityColor: (value?: number) => QualityColors; onDeleteFrames: (frames: number[]) => void; onRestoreFrames: (frames: number[]) => void; @@ -24,11 +26,19 @@ interface Props { function TaskQualityManagementComponent(props: Props): JSX.Element { const { - task, gtJob, gtJobMeta, getQualityColor, onDeleteFrames, onRestoreFrames, + task, gtJob, gtJobMeta, getQualityColor, + onDeleteFrames, onRestoreFrames, fetching, } = props; return (
+ { + fetching && ( +
+ +
+ ) + } Date: Fri, 23 Aug 2024 15:32:09 +0300 Subject: [PATCH 34/79] refactor quality control page --- .../quality-control/quality-control-page.tsx | 43 +++++++------------ 1 file changed, 15 insertions(+), 28 deletions(-) diff --git a/cvat-ui/src/components/quality-control/quality-control-page.tsx b/cvat-ui/src/components/quality-control/quality-control-page.tsx index 137fe1624cb..ab18741f3f8 100644 --- a/cvat-ui/src/components/quality-control/quality-control-page.tsx +++ b/cvat-ui/src/components/quality-control/quality-control-page.tsx @@ -32,15 +32,7 @@ function getTabFromHash(supportedTabs: string[]): string { return supportedTabs.includes(tab) ? tab : supportedTabs[0]; } -function readInstanceType(): InstanceType { - return 'task'; -} - -function readInstanceId(): number { - return +useParams<{ tid: string }>().tid; -} - -type InstanceType = 'project' | 'task' | 'job'; +type InstanceType = 'task'; interface State { fetching: boolean; @@ -174,8 +166,8 @@ function QualityControlPage(): JSX.Element { }, }); - const requestedInstanceType: InstanceType = readInstanceType(); - const requestedInstanceID = readInstanceId(); + const requestedInstanceType: InstanceType = 'task' as InstanceType; + const requestedInstanceID = +useParams<{ tid: string }>().tid; const [instanceType, setInstanceType] = useState(null); const [instance, setInstance] = useState(null); @@ -290,31 +282,26 @@ function QualityControlPage(): JSX.Element { } }, [state.qualitySettings.settings]); - const onDeleteFrames = useCallback(async (frameIDs: number[]): Promise => { + const updateMeta = (action: (frameID: number) => void) => async (frameIDs: number[]): Promise => { const { instance: gtJob } = state.gtJob; if (gtJob) { dispatch(reducerActions.setFetching(true)); - await Promise.all(frameIDs.map((frameID: number): Promise => ( - gtJob.frames.delete(frameID) - ))); + await Promise.all(frameIDs.map((frameID: number): void => action(frameID))); const [newMeta] = await gtJob.frames.save(); dispatch(reducerActions.setGtJobMeta(newMeta)); dispatch(reducerActions.setFetching(false)); } - }, [state.gtJob.instance]); + }; - const onRestoreFrames = useCallback(async (frameIDs: number[]): Promise => { - const { instance: gtJob } = state.gtJob; - if (gtJob) { - dispatch(reducerActions.setFetching(true)); - await Promise.all(frameIDs.map((frameID: number): Promise => ( - gtJob.frames.restore(frameID) - ))); - const [newMeta] = await gtJob.frames.save(); - dispatch(reducerActions.setGtJobMeta(newMeta)); - dispatch(reducerActions.setFetching(false)); - } - }, [state.gtJob.instance]); + const onDeleteFrames = useCallback( + updateMeta((frameID: number) => (state.gtJob.instance?.frames.delete(frameID))), + [state.gtJob.instance], + ); + + const onRestoreFrames = useCallback( + updateMeta((frameID: number) => (state.gtJob.instance?.frames.restore(frameID))), + [state.gtJob.instance], + ); useEffect(() => { if (Number.isInteger(requestedInstanceID) && ['task'].includes(requestedInstanceType)) { From 5e941aea206f13ebfb5309a60dd631c082c51205 Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Fri, 23 Aug 2024 15:44:08 +0300 Subject: [PATCH 35/79] fixed count on summary component --- .../task-quality/task-quality-magement-component.tsx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx b/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx index 19f99f32456..b6fa66ff7cc 100644 --- a/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx @@ -30,6 +30,14 @@ function TaskQualityManagementComponent(props: Props): JSX.Element { onDeleteFrames, onRestoreFrames, fetching, } = props; + const activeCount = gtJobMeta.includedFrames.reduce((acc: number, frameID: number) => ( + !(frameID in gtJobMeta.deletedFrames) ? acc + 1 : acc + ), 0); + + const excludedCount = Object.keys(gtJobMeta.deletedFrames).reduce((acc: number, frameID: string) => ( + gtJobMeta.includedFrames.includes(+frameID) ? acc + 1 : acc + ), 0); + return (
{ @@ -41,8 +49,8 @@ function TaskQualityManagementComponent(props: Props): JSX.Element { } From 8b46b85e0f327e83d4fa5cac7dcb29ae43623985 Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Sat, 24 Aug 2024 18:22:02 +0300 Subject: [PATCH 36/79] fixed styles of paid placeholder --- .../analytics-page/analytics-page.tsx | 22 ++++-- .../src/components/analytics-page/styles.scss | 2 +- .../paid-feature-placeholder/styles.scss | 8 +- .../quality-control/quality-control-page.tsx | 22 ++++-- .../components/quality-control/styles.scss | 77 ------------------- 5 files changed, 33 insertions(+), 98 deletions(-) diff --git a/cvat-ui/src/components/analytics-page/analytics-page.tsx b/cvat-ui/src/components/analytics-page/analytics-page.tsx index 49bee64a35d..0f0ab289bbc 100644 --- a/cvat-ui/src/components/analytics-page/analytics-page.tsx +++ b/cvat-ui/src/components/analytics-page/analytics-page.tsx @@ -228,9 +228,11 @@ function AnalyticsPage(): JSX.Element { let tabs: JSX.Element | null = null; if (instanceType && instance) { backNavigation = ( -
- - + + + + + ); let analyticsFor: JSX.Element | null = {`Project #${instance.id}`}; @@ -280,11 +282,15 @@ function AnalyticsPage(): JSX.Element { ) : ( - - {backNavigation} - - {title} - {tabs} + + + {backNavigation} + + + {title} + {tabs} + + )} diff --git a/cvat-ui/src/components/analytics-page/styles.scss b/cvat-ui/src/components/analytics-page/styles.scss index 9ce88fc038a..1f202bf6ce4 100644 --- a/cvat-ui/src/components/analytics-page/styles.scss +++ b/cvat-ui/src/components/analytics-page/styles.scss @@ -9,6 +9,7 @@ min-height: $grid-unit-size * 95; padding: $grid-unit-size * 4; padding-bottom: $grid-unit-size; + padding-top: 0; border-radius: $border-radius-base; .ant-tabs { @@ -86,5 +87,4 @@ overflow-y: auto; width: 100%; height: 100%; - padding-bottom: $grid-unit-size * 2; } diff --git a/cvat-ui/src/components/paid-feature-placeholder/styles.scss b/cvat-ui/src/components/paid-feature-placeholder/styles.scss index baaca856534..673ba7b499c 100644 --- a/cvat-ui/src/components/paid-feature-placeholder/styles.scss +++ b/cvat-ui/src/components/paid-feature-placeholder/styles.scss @@ -8,12 +8,12 @@ display: flex; justify-content: center; align-items: center; - padding: $grid-unit-size * 4; + padding: $grid-unit-size * 2; } .cvat-paid-feature-placeholder { - width: $grid-unit-size * 60; - height: $grid-unit-size * 85; + width: $grid-unit-size * 55; + height: $grid-unit-size * 77; .ant-card-body { height: 80%; @@ -36,4 +36,4 @@ .cvat-paid-feature-placeholder-inner-wrapper { height: 100%; justify-content: space-between; -} \ No newline at end of file +} diff --git a/cvat-ui/src/components/quality-control/quality-control-page.tsx b/cvat-ui/src/components/quality-control/quality-control-page.tsx index ab18741f3f8..59b9f319792 100644 --- a/cvat-ui/src/components/quality-control/quality-control-page.tsx +++ b/cvat-ui/src/components/quality-control/quality-control-page.tsx @@ -345,9 +345,11 @@ function QualityControlPage(): JSX.Element { let tabs: JSX.Element | null = null; if (instanceType && instance) { backNavigation = ( - - - + + + + + ); const qualityControlFor = {`Task #${instance.id}`}; @@ -423,11 +425,15 @@ function QualityControlPage(): JSX.Element { ) : ( - - {backNavigation} - - {title} - {tabs} + + + {backNavigation} + + + {title} + {tabs} + + )} diff --git a/cvat-ui/src/components/quality-control/styles.scss b/cvat-ui/src/components/quality-control/styles.scss index 3f00c0f06e1..2c08d2bebf5 100644 --- a/cvat-ui/src/components/quality-control/styles.scss +++ b/cvat-ui/src/components/quality-control/styles.scss @@ -4,64 +4,6 @@ @import 'base'; -.cvat-task-quality-page { - >.ant-row { - margin-top: $grid-unit-size; - } -} - -.cvat-task-mean-annotation-quality { - .ant-statistic { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - } - - .ant-card-body { - padding: $grid-unit-size * 2 $grid-unit-size * 3; - } -} - -.cvat-analytics-download-report-button { - padding-left: $grid-unit-size * 2; - padding-right: $grid-unit-size * 2; - - a { - color: white; - - &:hover { - color: white; - } - } -} - -.cvat-analytics-page { - height: 100%; -} - -.cvat-analytics-wrapper { - overflow-y: auto; - width: 100%; - height: 100%; - padding-bottom: $grid-unit-size * 2; -} - -.cvat-task-quality-reports-hint { - margin-bottom: $grid-unit-size * 3; -} - -.cvat-job-empty-ground-truth-item { - .ant-card-body { - padding: $grid-unit-size * 3; - } - - .ant-btn { - padding-left: $grid-unit-size * 3; - padding-right: $grid-unit-size * 3; - } -} - .cvat-quality-settings-switch { padding: $grid-unit-size $grid-unit-size * 1.25; border: 1px solid lightgray; @@ -74,24 +16,6 @@ align-items: center; } -.cvat-modal-quality-settings { - top: $grid-unit-size * 3; - - .ant-divider { - margin: $grid-unit-size 0; - } - - .ant-form-item-control-input { - min-height: 0; - } -} - -.cvat-job-list-item-conflicts { - display: flex; - justify-content: space-between; - align-items: center; -} - .cvat-quality-settings-form { display: block; position: relative; @@ -180,7 +104,6 @@ $excluded-background: #d9d9d973; .cvat-allocation-summary { span { font-size: 13px !important; - } } From ab2e42f581de17edb044d32d48c8628f093c85a8 Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Sat, 24 Aug 2024 18:27:13 +0300 Subject: [PATCH 37/79] added react resizible dep --- cvat-ui/package.json | 2 ++ .../quality-control/task-quality/allocation-table.tsx | 4 ++-- yarn.lock | 11 +++++++++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/cvat-ui/package.json b/cvat-ui/package.json index 4f46788fb2a..193dfe6435d 100644 --- a/cvat-ui/package.json +++ b/cvat-ui/package.json @@ -35,6 +35,7 @@ "@types/react-router-dom": "^5.1.9", "@types/redux-logger": "^3.0.9", "@types/resize-observer-browser": "^0.1.6", + "@types/react-resizable": "^3.0.8", "@uiw/react-md-editor": "^3.22.0", "antd": "5.17.1", "chart.js": "^4.3.0", @@ -59,6 +60,7 @@ "react-markdown": "^8.0.4", "react-moment": "^1.1.1", "react-redux": "^8.0.2", + "react-resizable": "^3.0.5", "react-router": "^5.1.0", "react-router-dom": "^5.1.0", "react-sortable-hoc": "^2.0.0", diff --git a/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx index 084182c17dd..57e40a72bdd 100644 --- a/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx @@ -4,15 +4,15 @@ import React, { useState } from 'react'; import { useHistory } from 'react-router'; -import { Row, Col } from 'antd/lib/grid'; import { ResizableBox } from 'react-resizable'; +import { Row, Col } from 'antd/lib/grid'; import Table from 'antd/lib/table'; import Button from 'antd/lib/button'; import Text from 'antd/lib/typography/Text'; import Icon, { DeleteOutlined } from '@ant-design/icons'; import { Task, Job, FramesMetaData } from 'cvat-core-wrapper'; import { RestoreIcon } from 'icons'; -import { toRepresentation, sorter, QualityColors } from 'utils/quality'; +import { sorter, QualityColors } from 'utils/quality'; import CVATTooltip from 'components/common/cvat-tooltip'; const DEFAULT_TITLE_HEIGHT = 20; diff --git a/yarn.lock b/yarn.lock index d6c1fe186aa..0fef3367e50 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2434,6 +2434,13 @@ hoist-non-react-statics "^3.3.0" redux "^4.0.0" +"@types/react-resizable@^3.0.8": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@types/react-resizable/-/react-resizable-3.0.8.tgz#b27001b4d262c82cc076272df4b8ef91d9487918" + integrity sha512-Pcvt2eGA7KNXldt1hkhVhAgZ8hK41m0mp89mFgQi7LAAEZiaLgm4fHJ5zbJZ/4m2LVaAyYrrRRv1LHDcrGQanA== + dependencies: + "@types/react" "*" + "@types/react-router-dom@^5.1.9": version "5.3.3" resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83" @@ -4418,7 +4425,7 @@ custom-error-instance@2.1.1: three "^0.156.1" "cvat-canvas@link:./cvat-canvas": - version "2.20.6" + version "2.20.9" dependencies: "@types/polylabel" "^1.0.5" polylabel "^1.1.0" @@ -4429,7 +4436,7 @@ custom-error-instance@2.1.1: svg.select.js "3.0.1" "cvat-core@link:./cvat-core": - version "15.1.0" + version "15.1.2" dependencies: axios "^1.6.0" axios-retry "^4.0.0" From 38536bd8d1f3f6feebbedc40e3975f23b5cfea81 Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Sat, 24 Aug 2024 18:42:17 +0300 Subject: [PATCH 38/79] fixed types --- .../task-quality/allocation-table.tsx | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx index 57e40a72bdd..97ec29e2154 100644 --- a/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx @@ -4,7 +4,7 @@ import React, { useState } from 'react'; import { useHistory } from 'react-router'; -import { ResizableBox } from 'react-resizable'; +import { ResizableBox, ResizableProps, ResizeCallbackData } from 'react-resizable'; import { Row, Col } from 'antd/lib/grid'; import Table from 'antd/lib/table'; import Button from 'antd/lib/button'; @@ -14,6 +14,7 @@ import { Task, Job, FramesMetaData } from 'cvat-core-wrapper'; import { RestoreIcon } from 'icons'; import { sorter, QualityColors } from 'utils/quality'; import CVATTooltip from 'components/common/cvat-tooltip'; +import { Key } from 'antd/lib/table/interface'; const DEFAULT_TITLE_HEIGHT = 20; const DEFAULT_TITLE_WIDTH = 100; @@ -38,7 +39,7 @@ interface RowData { actions: { frameID: number, active: boolean }, } -function ResizableTitle(props) { +function ResizableTitle(props: Partial) { const { children, onResize } = props; return ( ({ + const [select, setSelect] = useState<{ selectedRowKeys: Key[], selectedRows: RowData[] }>({ selectedRowKeys: [], selectedRows: [], }); const rowSelection = { selectedRowKeys: select.selectedRowKeys, - onChange: (selectedRowKeys: string[], selectedRows: RowData[]) => { + onChange: (selectedRowKeys: Key[], selectedRows: RowData[]) => { setSelect({ ...select, selectedRowKeys: [...selectedRowKeys], @@ -101,13 +102,14 @@ export default function AllocationTableComponent(props: Props): JSX.Element { return component; } const handleResize = - (key: string) => (event, { size }) => { + (key: string) => (e: React.SyntheticEvent, data: ResizeCallbackData) => { + const { size: { width } } = data; setColumns((prevColumns) => { const index = prevColumns.findIndex((col) => col.key === key); const nextColumns = [...prevColumns]; - nextColumns[index] = { ...nextColumns[index], width: size.width + RESIZE_HANDLE_OFFSET }; + nextColumns[index] = { ...nextColumns[index], width: width + RESIZE_HANDLE_OFFSET }; if (key === 'name') { - nextColumns[index].render = nameRenderFunc(size.width + RESIZE_HANDLE_OFFSET); + nextColumns[index].render = nameRenderFunc(width + RESIZE_HANDLE_OFFSET); } return nextColumns; }); @@ -206,7 +208,7 @@ export default function AllocationTableComponent(props: Props): JSX.Element { { text: 'Active', value: true }, { text: 'Excluded', value: false }, ], - onFilter: (value: boolean, record: any) => record.actions.frameData.active === value, + onFilter: (value: boolean | Key, record: any) => record.actions.frameData.active === value, render: ({ frameID, active }: { frameID: number, active: boolean }): JSX.Element => ( active ? ( Date: Mon, 26 Aug 2024 09:03:43 +0300 Subject: [PATCH 39/79] added settings for paid placeholder --- .../paid-feature-placeholder.tsx | 12 ++++++------ .../task-quality/task-quality-component.tsx | 7 ++++--- cvat-ui/src/config.tsx | 11 +++++++++++ 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/cvat-ui/src/components/paid-feature-placeholder/paid-feature-placeholder.tsx b/cvat-ui/src/components/paid-feature-placeholder/paid-feature-placeholder.tsx index 9a30752feeb..d89b6e3a0da 100644 --- a/cvat-ui/src/components/paid-feature-placeholder/paid-feature-placeholder.tsx +++ b/cvat-ui/src/components/paid-feature-placeholder/paid-feature-placeholder.tsx @@ -11,20 +11,20 @@ import { Row, Col } from 'antd/es/grid'; import './styles.scss'; import { Button } from 'antd'; import CVATMarkdown from 'components/common/cvat-markdown'; +import config from 'config'; interface Props { - featureName: string; featureDescription: string; - pricingLink: string; } export default function PaidFeaturePlaceholder(props: Props): JSX.Element | null { const { - featureName, featureDescription, - pricingLink, } = props; + const { PAID_PLACEHOLDER_CONFIG } = config; + const { url } = PAID_PLACEHOLDER_CONFIG; + return (
{ event.preventDefault(); - window.open(pricingLink, '_blank'); + window.open(url, '_blank'); }} > - Check pricing + Check pricing diff --git a/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx b/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx index df447c0ac73..a6e17c14fd9 100644 --- a/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx @@ -9,6 +9,7 @@ import React from 'react'; import { QualityColors } from 'utils/quality'; import PaidFeaturePlaceholder from 'components/paid-feature-placeholder/paid-feature-placeholder'; import { usePlugins } from 'utils/hooks'; +import config from 'config'; interface Props { task: Task; @@ -20,6 +21,8 @@ function TaskQualityComponent(props: Props): JSX.Element { task, getQualityColor, } = props; + const { PAID_PLACEHOLDER_CONFIG: { features: { qualityControl: featureDescription } } } = config; + const plugins = usePlugins((state) => state.plugins.components.qualityControlPage.tabs.overview, props, { task, getQualityColor, @@ -28,9 +31,7 @@ function TaskQualityComponent(props: Props): JSX.Element { const items: [JSX.Element, number][] = []; items.push([( ), 0]); items.push(...plugins.map(({ component: Component, weight }, index: number) => ( diff --git a/cvat-ui/src/config.tsx b/cvat-ui/src/config.tsx index 9719a0bc292..3f66a30d183 100644 --- a/cvat-ui/src/config.tsx +++ b/cvat-ui/src/config.tsx @@ -138,6 +138,16 @@ const BLACKLISTED_GO_BACK_PATHS = [ /\/auth.+/, ]; +const PAID_PLACEHOLDER_CONFIG = { + url: "https://www.cvat.ai/pricing/cloud", + features: { + qualityControl: + "The Quality Control feature enables effortless evaluation of annotation quality by creating" + + " a Ground Truth job that works as benchmark. CVAT automatically compares all task-related jobs" + + " to this benchmark, calculating annotation precision to ensure high-quality results." + } +} + export default { UNDEFINED_ATTRIBUTE_VALUE, NO_BREAK_SPACE, @@ -179,4 +189,5 @@ export default { LOCAL_STORAGE_LAST_FRAME_MEMORY_LIMIT, REQUEST_SUCCESS_NOTIFICATION_DURATION, BLACKLISTED_GO_BACK_PATHS, + PAID_PLACEHOLDER_CONFIG, }; From a6b970777bbff4826d792945084132a4c42b0e10 Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Mon, 26 Aug 2024 09:13:21 +0300 Subject: [PATCH 40/79] fixed eslint --- .../task-quality/allocation-table.tsx | 222 +++++++++--------- 1 file changed, 112 insertions(+), 110 deletions(-) diff --git a/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx index 97ec29e2154..d2bb61d4cae 100644 --- a/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: MIT -import React, { useState } from 'react'; +import React, { useEffect, useState } from 'react'; import { useHistory } from 'react-router'; import { ResizableBox, ResizableProps, ResizeCallbackData } from 'react-resizable'; import { Row, Col } from 'antd/lib/grid'; @@ -14,7 +14,7 @@ import { Task, Job, FramesMetaData } from 'cvat-core-wrapper'; import { RestoreIcon } from 'icons'; import { sorter, QualityColors } from 'utils/quality'; import CVATTooltip from 'components/common/cvat-tooltip'; -import { Key } from 'antd/lib/table/interface'; +import { Key, ColumnType } from 'antd/lib/table/interface'; const DEFAULT_TITLE_HEIGHT = 20; const DEFAULT_TITLE_WIDTH = 100; @@ -30,7 +30,6 @@ interface Props { } interface RowData { - key: number; frame: number; name: { name: string, index: number }, useCount: number, @@ -101,6 +100,8 @@ export default function AllocationTableComponent(props: Props): JSX.Element { ); return component; } + + const [columns, setColumns] = useState[]>([]); const handleResize = (key: string) => (e: React.SyntheticEvent, data: ResizeCallbackData) => { const { size: { width } } = data; @@ -114,115 +115,116 @@ export default function AllocationTableComponent(props: Props): JSX.Element { return nextColumns; }); }; - - const [columns, setColumns] = useState([ - { - title: ( - - Frame - - ), - dataIndex: 'frame', - key: 'frame', - sorter: sorter('frame'), - render: (index: number): JSX.Element => ( -
- +
+ ), + }, + { + title: ( + + Name + + ), + dataIndex: 'name', + key: 'name', + width: DEFAULT_TITLE_WIDTH, + sorter: sorter('name.name'), + render: nameRenderFunc(DEFAULT_TITLE_WIDTH), + }, + { + title: ( + + Use count + + ), + dataIndex: 'useCount', + key: 'useCount', + align: 'center' as const, + sorter: sorter('useCount'), + render: (): JSX.Element => ( + - {`#${index}`} - -
- ), - }, - { - title: ( - - Name - - ), - dataIndex: 'name', - key: 'name', - width: DEFAULT_TITLE_WIDTH, - sorter: sorter('name.name'), - render: nameRenderFunc(DEFAULT_TITLE_WIDTH), - }, - { - title: ( - - Use count - - ), - dataIndex: 'useCount', - key: 'useCount', - align: 'center' as const, - sorter: sorter('useCount'), - render: (): JSX.Element => ( - - N/A - - ), - }, - { - title: ( - - Quality - - ), - dataIndex: 'quality', - key: 'quality', - align: 'center' as const, - className: 'cvat-job-item-quality', - sorter: sorter('quality'), - render: (): JSX.Element => ( - - N/A - - ), - }, - { - title: ( - - Actions - - ), - dataIndex: 'actions', - key: 'actions', - align: 'center' as const, - className: 'cvat-job-item-quality', - sorter: sorter('active'), - filters: [ - { text: 'Active', value: true }, - { text: 'Excluded', value: false }, - ], - onFilter: (value: boolean | Key, record: any) => record.actions.frameData.active === value, - render: ({ frameID, active }: { frameID: number, active: boolean }): JSX.Element => ( - active ? ( - { onRestoreFrames([frameID]); }} - component={RestoreIcon} - /> - ) : ( - { onDeleteFrames([frameID]); }} - /> - ) - ), - }, - ]); + N/A + + ), + }, + { + title: ( + + Quality + + ), + dataIndex: 'quality', + key: 'quality', + align: 'center' as const, + className: 'cvat-job-item-quality', + sorter: sorter('quality'), + render: (): JSX.Element => ( + + N/A + + ), + }, + { + title: ( + + Actions + + ), + dataIndex: 'actions', + key: 'actions', + align: 'center' as const, + className: 'cvat-job-item-quality', + sorter: sorter('active'), + filters: [ + { text: 'Active', value: true }, + { text: 'Excluded', value: false }, + ], + onFilter: (value: boolean | Key, record: any) => record.actions.frameData.active === value, + render: ({ frameID, active }: { frameID: number, active: boolean }): JSX.Element => ( + active ? ( + { onRestoreFrames([frameID]); }} + component={RestoreIcon} + /> + ) : ( + { onDeleteFrames([frameID]); }} + /> + ) + ), + }, + ]) + }, []); const data = gtJobMeta.includedFrames.map((frameID: number) => ({ key: frameID, From 17e1f81e0fb484cb37e1b4cf6f976d7a2236571f Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Mon, 26 Aug 2024 09:35:01 +0300 Subject: [PATCH 41/79] fix some minor issues --- .../analytics-page/views/analytics-card.tsx | 2 +- .../quality-control/quality-control-page.tsx | 25 ++++++++----------- .../task-quality/allocation-table.tsx | 2 +- cvat-ui/src/utils/quality.ts | 2 +- 4 files changed, 14 insertions(+), 17 deletions(-) diff --git a/cvat-ui/src/components/analytics-page/views/analytics-card.tsx b/cvat-ui/src/components/analytics-page/views/analytics-card.tsx index 5f5302ecf7c..0f9afd6f624 100644 --- a/cvat-ui/src/components/analytics-page/views/analytics-card.tsx +++ b/cvat-ui/src/components/analytics-page/views/analytics-card.tsx @@ -29,7 +29,7 @@ function AnalyticsCard(props: Props): JSX.Element { } = props; return ( -
+ diff --git a/cvat-ui/src/components/quality-control/quality-control-page.tsx b/cvat-ui/src/components/quality-control/quality-control-page.tsx index 59b9f319792..6f8c98da148 100644 --- a/cvat-ui/src/components/quality-control/quality-control-page.tsx +++ b/cvat-ui/src/components/quality-control/quality-control-page.tsx @@ -166,7 +166,7 @@ function QualityControlPage(): JSX.Element { }, }); - const requestedInstanceType: InstanceType = 'task' as InstanceType; + const requestedInstanceType: InstanceType = 'task'; const requestedInstanceID = +useParams<{ tid: string }>().tid; const [instanceType, setInstanceType] = useState(null); @@ -174,24 +174,21 @@ function QualityControlPage(): JSX.Element { const isMounted = useIsMounted(); const supportedTabs = ['overview', 'settings', 'management']; - const [activeTab, setTab] = useState(getTabFromHash(supportedTabs)); + const [activeTab, setActiveTab] = useState(getTabFromHash(supportedTabs)); const receiveInstance = async (type: InstanceType, id: number): Promise => { let receivedInstance: Task | null = null; let gtJob: Job | null = null; let gtJobMeta: FramesMetaData | null = null; try { - switch (type) { - case 'task': { - [receivedInstance] = await core.tasks.get({ id }); - gtJob = receivedInstance.jobs.find((job: Job) => job.type === JobType.GROUND_TRUTH) ?? null; - if (gtJob) { - gtJobMeta = await core.frames.getMeta('job', gtJob.id) as FramesMetaData; - } - break; + if (instanceType === 'task') { + [receivedInstance] = await core.tasks.get({ id }); + gtJob = receivedInstance.jobs.find((job: Job) => job.type === JobType.GROUND_TRUTH) ?? null; + if (gtJob) { + gtJobMeta = await core.frames.getMeta('job', gtJob.id) as FramesMetaData; } - default: - return null; + } else { + return null; } if (isMounted()) { @@ -328,7 +325,7 @@ function QualityControlPage(): JSX.Element { useEffect(() => { window.addEventListener('hashchange', () => { const hash = getTabFromHash(supportedTabs); - setTab(hash); + setActiveTab(hash); }); }, []); @@ -337,7 +334,7 @@ function QualityControlPage(): JSX.Element { }, [activeTab]); const onTabKeyChange = useCallback((key: string): void => { - setTab(key); + setActiveTab(key); }, []); let backNavigation: JSX.Element | null = null; diff --git a/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx index d2bb61d4cae..2883efce158 100644 --- a/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx @@ -209,7 +209,7 @@ export default function AllocationTableComponent(props: Props): JSX.Element { { text: 'Active', value: true }, { text: 'Excluded', value: false }, ], - onFilter: (value: boolean | Key, record: any) => record.actions.frameData.active === value, + onFilter: (value: boolean | Key, record: RowData) => record.actions.active === value, render: ({ frameID, active }: { frameID: number, active: boolean }): JSX.Element => ( active ? ( , path: strin return report[path].username; }), ), - ).map((value: string | null) => ({ text: value || 'Is Empty', value: value || false })); + ).map((value: string | null) => ({ text: value ?? 'Is Empty', value: value ?? false })); } export function toRepresentation(val?: number, isPercent = true, decimals = 1): string { From 9872394f32f059724f678fb4dfaa6d9e63025a3b Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Mon, 26 Aug 2024 09:42:35 +0300 Subject: [PATCH 42/79] package & changelog --- ...240826_093730_klakhov_support_quality_plugin.md | 14 ++++++++++++++ cvat-core/package.json | 2 +- cvat-ui/package.json | 2 +- 3 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 changelog.d/20240826_093730_klakhov_support_quality_plugin.md diff --git a/changelog.d/20240826_093730_klakhov_support_quality_plugin.md b/changelog.d/20240826_093730_klakhov_support_quality_plugin.md new file mode 100644 index 00000000000..69d5e326e7c --- /dev/null +++ b/changelog.d/20240826_093730_klakhov_support_quality_plugin.md @@ -0,0 +1,14 @@ +### Changed + +- Moved quality control from `analytics` page to `quality control` page + () + +### Removed + +- Quality report no longer available in CVAT community version + () + +### Added + +- Quality management tab on `quality control` allowing to enable/disable GT frames + () diff --git a/cvat-core/package.json b/cvat-core/package.json index d9b3a8f9779..c93f4e9151a 100644 --- a/cvat-core/package.json +++ b/cvat-core/package.json @@ -1,6 +1,6 @@ { "name": "cvat-core", - "version": "15.1.2", + "version": "15.2.0", "type": "module", "description": "Part of Computer Vision Tool which presents an interface for client-side integration", "main": "src/api.ts", diff --git a/cvat-ui/package.json b/cvat-ui/package.json index 193dfe6435d..f8dbc0a2565 100644 --- a/cvat-ui/package.json +++ b/cvat-ui/package.json @@ -1,6 +1,6 @@ { "name": "cvat-ui", - "version": "1.65.0", + "version": "1.66.0", "description": "CVAT single-page application", "main": "src/index.tsx", "scripts": { From edad81ac05c502c7608f396ef9fdac6d306755b2 Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Mon, 26 Aug 2024 10:03:26 +0300 Subject: [PATCH 43/79] added plugin column --- .../quality-control/quality-control-page.tsx | 2 +- .../task-quality/allocation-table.tsx | 63 +++++++++++++------ cvat-ui/src/reducers/index.ts | 14 +++-- cvat-ui/src/reducers/plugins-reducer.ts | 12 ++-- 4 files changed, 61 insertions(+), 30 deletions(-) diff --git a/cvat-ui/src/components/quality-control/quality-control-page.tsx b/cvat-ui/src/components/quality-control/quality-control-page.tsx index 6f8c98da148..fa948056bed 100644 --- a/cvat-ui/src/components/quality-control/quality-control-page.tsx +++ b/cvat-ui/src/components/quality-control/quality-control-page.tsx @@ -181,7 +181,7 @@ function QualityControlPage(): JSX.Element { let gtJobMeta: FramesMetaData | null = null; try { - if (instanceType === 'task') { + if (type === 'task') { [receivedInstance] = await core.tasks.get({ id }); gtJob = receivedInstance.jobs.find((job: Job) => job.type === JobType.GROUND_TRUTH) ?? null; if (gtJob) { diff --git a/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx index 2883efce158..7add60603c4 100644 --- a/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx @@ -15,6 +15,8 @@ import { RestoreIcon } from 'icons'; import { sorter, QualityColors } from 'utils/quality'; import CVATTooltip from 'components/common/cvat-tooltip'; import { Key, ColumnType } from 'antd/lib/table/interface'; +import { usePlugins, Plugin } from 'utils/hooks'; +import { CombinedState } from 'reducers'; const DEFAULT_TITLE_HEIGHT = 20; const DEFAULT_TITLE_WIDTH = 100; @@ -67,6 +69,25 @@ export default function AllocationTableComponent(props: Props): JSX.Element { const history = useHistory(); + const notAvailableComponent = ( + + N/A + + ) + const qualityColumnPlugins = usePlugins( + (state: CombinedState) => + state.plugins.components.qualityControlPage.tabs.management.allocationTable.columns.quality, props, { frameID: null } + ); + + const useCountColumnPlugins = usePlugins( + (state: CombinedState) => + state.plugins.components.qualityControlPage.tabs.management.allocationTable.columns.useCount, props, { frameID: null } + ); + const [select, setSelect] = useState<{ selectedRowKeys: Key[], selectedRows: RowData[] }>({ selectedRowKeys: [], selectedRows: [], @@ -163,15 +184,18 @@ export default function AllocationTableComponent(props: Props): JSX.Element { key: 'useCount', align: 'center' as const, sorter: sorter('useCount'), - render: (): JSX.Element => ( - - N/A - - ), + render: (frameID): JSX.Element => { + const useCountColumnItems: [JSX.Element, number][] = [[notAvailableComponent, 10]]; + useCountColumnItems.push( + ...useCountColumnPlugins.map(({ component: Component, weight }, index) => { + const component = ; + return [component, weight] as [JSX.Element, number]; + }), + ); + const renderedComponent = useCountColumnItems.sort((a, b) => b[1] - a[1])[0][0]; + + return renderedComponent; + }, }, { title: ( @@ -184,15 +208,18 @@ export default function AllocationTableComponent(props: Props): JSX.Element { align: 'center' as const, className: 'cvat-job-item-quality', sorter: sorter('quality'), - render: (): JSX.Element => ( - - N/A - - ), + render: (frameID): JSX.Element => { + const qualityColumnItems: [JSX.Element, number][] = [[notAvailableComponent, 10]]; + qualityColumnItems.push( + ...qualityColumnPlugins.map(({ component: Component, weight }, index) => { + const component = ; + return [component, weight] as [JSX.Element, number]; + }), + ); + const renderedComponent = qualityColumnItems.sort((a, b) => b[1] - a[1])[0][0]; + + return renderedComponent; + }, }, { title: ( diff --git a/cvat-ui/src/reducers/index.ts b/cvat-ui/src/reducers/index.ts index 0d3cbb6ba62..9245e618742 100644 --- a/cvat-ui/src/reducers/index.ts +++ b/cvat-ui/src/reducers/index.ts @@ -287,12 +287,14 @@ export interface PluginsState { qualityControlPage:{ tabs: { overview: PluginComponent[]; - management: PluginComponent[]; - settings: { - form: { - items: PluginComponent[]; - }, - } + management: { + allocationTable: { + columns: { + quality: PluginComponent[]; + useCount: PluginComponent[]; + } + } + }, }, }; projectActions: { diff --git a/cvat-ui/src/reducers/plugins-reducer.ts b/cvat-ui/src/reducers/plugins-reducer.ts index 0d625462be2..a68543d9b1f 100644 --- a/cvat-ui/src/reducers/plugins-reducer.ts +++ b/cvat-ui/src/reducers/plugins-reducer.ts @@ -50,11 +50,13 @@ const defaultState: PluginsState = { qualityControlPage: { tabs: { overview: [], - management: [], - settings: { - form: { - items: [], - }, + management: { + allocationTable: { + columns: { + quality: [], + useCount: [], + } + } }, }, }, From ed72d7abf019f1d9efad5046bd9a58c1aa408ea8 Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Mon, 26 Aug 2024 10:19:57 +0300 Subject: [PATCH 44/79] fixed linter --- .../analytics-page/views/analytics-card.tsx | 2 +- .../task-quality/allocation-table.tsx | 18 ++++++++++-------- cvat-ui/src/config.tsx | 12 ++++++------ cvat-ui/src/reducers/plugins-reducer.ts | 4 ++-- 4 files changed, 19 insertions(+), 17 deletions(-) diff --git a/cvat-ui/src/components/analytics-page/views/analytics-card.tsx b/cvat-ui/src/components/analytics-page/views/analytics-card.tsx index 0f9afd6f624..655759bfaf7 100644 --- a/cvat-ui/src/components/analytics-page/views/analytics-card.tsx +++ b/cvat-ui/src/components/analytics-page/views/analytics-card.tsx @@ -29,7 +29,7 @@ function AnalyticsCard(props: Props): JSX.Element { } = props; return ( - + diff --git a/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx index 7add60603c4..74e145f3bc6 100644 --- a/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx @@ -15,7 +15,7 @@ import { RestoreIcon } from 'icons'; import { sorter, QualityColors } from 'utils/quality'; import CVATTooltip from 'components/common/cvat-tooltip'; import { Key, ColumnType } from 'antd/lib/table/interface'; -import { usePlugins, Plugin } from 'utils/hooks'; +import { usePlugins } from 'utils/hooks'; import { CombinedState } from 'reducers'; const DEFAULT_TITLE_HEIGHT = 20; @@ -77,15 +77,17 @@ export default function AllocationTableComponent(props: Props): JSX.Element { > N/A - ) + ); const qualityColumnPlugins = usePlugins( - (state: CombinedState) => - state.plugins.components.qualityControlPage.tabs.management.allocationTable.columns.quality, props, { frameID: null } + (state: CombinedState) => ( + state.plugins.components.qualityControlPage.tabs.management.allocationTable.columns.quality + ), props, { frameID: null }, ); const useCountColumnPlugins = usePlugins( - (state: CombinedState) => - state.plugins.components.qualityControlPage.tabs.management.allocationTable.columns.useCount, props, { frameID: null } + (state: CombinedState) => ( + state.plugins.components.qualityControlPage.tabs.management.allocationTable.columns.useCount + ), props, { frameID: null }, ); const [select, setSelect] = useState<{ selectedRowKeys: Key[], selectedRows: RowData[] }>({ @@ -188,7 +190,7 @@ export default function AllocationTableComponent(props: Props): JSX.Element { const useCountColumnItems: [JSX.Element, number][] = [[notAvailableComponent, 10]]; useCountColumnItems.push( ...useCountColumnPlugins.map(({ component: Component, weight }, index) => { - const component = ; + const component = ; return [component, weight] as [JSX.Element, number]; }), ); @@ -250,7 +252,7 @@ export default function AllocationTableComponent(props: Props): JSX.Element { ) ), }, - ]) + ]); }, []); const data = gtJobMeta.includedFrames.map((frameID: number) => ({ diff --git a/cvat-ui/src/config.tsx b/cvat-ui/src/config.tsx index 3f66a30d183..7e0b404b093 100644 --- a/cvat-ui/src/config.tsx +++ b/cvat-ui/src/config.tsx @@ -139,14 +139,14 @@ const BLACKLISTED_GO_BACK_PATHS = [ ]; const PAID_PLACEHOLDER_CONFIG = { - url: "https://www.cvat.ai/pricing/cloud", + url: 'https://www.cvat.ai/pricing/cloud', features: { qualityControl: - "The Quality Control feature enables effortless evaluation of annotation quality by creating" + - " a Ground Truth job that works as benchmark. CVAT automatically compares all task-related jobs" + - " to this benchmark, calculating annotation precision to ensure high-quality results." - } -} + 'The Quality Control feature enables effortless evaluation of annotation quality by creating' + + ' a Ground Truth job that works as benchmark. CVAT automatically compares all task-related jobs' + + ' to this benchmark, calculating annotation precision to ensure high-quality results.', + }, +}; export default { UNDEFINED_ATTRIBUTE_VALUE, diff --git a/cvat-ui/src/reducers/plugins-reducer.ts b/cvat-ui/src/reducers/plugins-reducer.ts index a68543d9b1f..36a83b9b01e 100644 --- a/cvat-ui/src/reducers/plugins-reducer.ts +++ b/cvat-ui/src/reducers/plugins-reducer.ts @@ -55,8 +55,8 @@ const defaultState: PluginsState = { columns: { quality: [], useCount: [], - } - } + }, + }, }, }, }, From 84ba53dfa726ba431d9373d70002002dfdc7bbe9 Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Mon, 26 Aug 2024 10:34:01 +0300 Subject: [PATCH 45/79] added plugin for management page --- .../task-quality-magement-component.tsx | 57 +++++++++++++------ cvat-ui/src/reducers/index.ts | 1 + cvat-ui/src/reducers/plugins-reducer.ts | 1 + 3 files changed, 42 insertions(+), 17 deletions(-) diff --git a/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx b/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx index b6fa66ff7cc..d51357b4bb9 100644 --- a/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx @@ -11,6 +11,8 @@ import React from 'react'; import { QualityColors } from 'utils/quality'; import { Row } from 'antd/es/grid'; import Spin from 'antd/lib/spin'; +import { usePlugins } from 'utils/hooks'; +import { CombinedState } from 'reducers'; import { SummaryComponent } from './summary'; import AllocationTableComponent from './allocation-table'; @@ -38,6 +40,40 @@ function TaskQualityManagementComponent(props: Props): JSX.Element { gtJobMeta.includedFrames.includes(+frameID) ? acc + 1 : acc ), 0); + const managementPagePlugins = usePlugins( + (state: CombinedState) => ( + state.plugins.components.qualityControlPage.tabs.management.page + ), props, + ); + const managementPageItems: [JSX.Element, number][] = []; + managementPageItems.push([( + + + + ), 10]); + managementPageItems.push([( + + + + ), 20]); + managementPageItems.push( + ...managementPagePlugins.map(({ component: Component, weight }, index) => { + const component = ; + return [component, weight] as [JSX.Element, number]; + }), + ); + return (
{ @@ -47,23 +83,10 @@ function TaskQualityManagementComponent(props: Props): JSX.Element {
) } - - - - - - + { + managementPageItems.sort((item1, item2) => item1[1] - item2[1]) + .map((item) => item[0]) + } ); } diff --git a/cvat-ui/src/reducers/index.ts b/cvat-ui/src/reducers/index.ts index 9245e618742..037c4742e9f 100644 --- a/cvat-ui/src/reducers/index.ts +++ b/cvat-ui/src/reducers/index.ts @@ -288,6 +288,7 @@ export interface PluginsState { tabs: { overview: PluginComponent[]; management: { + page: PluginComponent[]; allocationTable: { columns: { quality: PluginComponent[]; diff --git a/cvat-ui/src/reducers/plugins-reducer.ts b/cvat-ui/src/reducers/plugins-reducer.ts index 36a83b9b01e..4680d350986 100644 --- a/cvat-ui/src/reducers/plugins-reducer.ts +++ b/cvat-ui/src/reducers/plugins-reducer.ts @@ -51,6 +51,7 @@ const defaultState: PluginsState = { tabs: { overview: [], management: { + page: [], allocationTable: { columns: { quality: [], From d69a92c3c412bb564919466b1c90adf4617ea344 Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Mon, 26 Aug 2024 10:55:43 +0300 Subject: [PATCH 46/79] minor cleanup --- cvat-core/src/index.ts | 4 ---- .../components/quality-control/quality-control-page.tsx | 6 ------ cvat-ui/src/components/quality-control/styles.scss | 7 ------- 3 files changed, 17 deletions(-) diff --git a/cvat-core/src/index.ts b/cvat-core/src/index.ts index 035ab317dfd..89f5d98f4b9 100644 --- a/cvat-core/src/index.ts +++ b/cvat-core/src/index.ts @@ -135,10 +135,6 @@ export default interface CVATCore { quality: { reports: (filter: QualityReportsFilter) => Promise>; conflicts: (filter: QualityConflictsFilter) => Promise; - calculate: ( - body: { taskID?: number; }, - onUpdate: (status: enums.RQStatus, progress: number, message: string) => void, - ) => Promise; settings: { get: (filter: QualitySettingsFilter) => Promise; }; diff --git a/cvat-ui/src/components/quality-control/quality-control-page.tsx b/cvat-ui/src/components/quality-control/quality-control-page.tsx index fa948056bed..2bbaa687103 100644 --- a/cvat-ui/src/components/quality-control/quality-control-page.tsx +++ b/cvat-ui/src/components/quality-control/quality-control-page.tsx @@ -44,7 +44,6 @@ interface State { qualitySettings: { settings: QualitySettings | null; fetching: boolean; - visible: boolean; getQualityColor: (value?: number) => QualityColors; }, } @@ -54,7 +53,6 @@ enum ReducerActionType { SET_TASK_REPORT = 'SET_TASK_REPORT', SET_JOBS_REPORTS = 'SET_JOBS_REPORTS', SET_QUALITY_SETTINGS = 'SET_QUALITY_SETTINGS', - SET_QUALITY_SETTINGS_VISIBLE = 'SET_QUALITY_SETTINGS_VISIBLE', SET_QUALITY_SETTINGS_FETCHING = 'SET_QUALITY_SETTINGS_FETCHING', SET_REPORT_REFRESHING_STATUS = 'SET_REPORT_REFRESHING_STATUS', SET_GT_JOB = 'SET_GT_JOB', @@ -74,9 +72,6 @@ export const reducerActions = { setQualitySettings: (qualitySettings: QualitySettings) => ( createAction(ReducerActionType.SET_QUALITY_SETTINGS, { qualitySettings }) ), - setQualitySettingsVisible: (visible: boolean) => ( - createAction(ReducerActionType.SET_QUALITY_SETTINGS_VISIBLE, { visible }) - ), setQualitySettingsFetching: (fetching: boolean) => ( createAction(ReducerActionType.SET_QUALITY_SETTINGS_FETCHING, { fetching }) ), @@ -161,7 +156,6 @@ function QualityControlPage(): JSX.Element { qualitySettings: { settings: null, fetching: true, - visible: false, getQualityColor: qualityColorGenerator(BASE_TARGET_THRESHOLD), }, }); diff --git a/cvat-ui/src/components/quality-control/styles.scss b/cvat-ui/src/components/quality-control/styles.scss index 2c08d2bebf5..54c705f6099 100644 --- a/cvat-ui/src/components/quality-control/styles.scss +++ b/cvat-ui/src/components/quality-control/styles.scss @@ -4,13 +4,6 @@ @import 'base'; -.cvat-quality-settings-switch { - padding: $grid-unit-size $grid-unit-size * 1.25; - border: 1px solid lightgray; - margin-left: $grid-unit-size; - border-radius: $border-radius-base; -} - .cvat-quality-settings-title { margin-bottom: $grid-unit-size * 2; align-items: center; From 51ea349f4d7004656740dea303745954c6a1f0ed Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Mon, 26 Aug 2024 11:17:25 +0300 Subject: [PATCH 47/79] updated quality settings descriptions --- .../task-quality/quality-settings-form.tsx | 41 +++++++++++++++++-- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx b/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx index 3d18c24dc9f..6d8f2940299 100644 --- a/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx @@ -50,6 +50,31 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul }; const generalTooltip = ( +
+ + Target metric - the primary metric for annotation quality estimation. + Different metrics can prioritize different aspects, such as the type of the errors made, + per class or overall performance. This parameter affects display of the quality computed. + + + Target metric threshold - the minimum acceptable annotation quality level, + in terms of the target metric selected. This parameter affects display of the quality numbers. + +
+ ); + + const jobValidationTooltip = ( +
+ + Max validations per job - the maximum allowed number of job annotation results validations, + requested by job assignees, available per assignment. Requires ground truth configured. + If the job quality measured is below the target metric threshold, + the assignee is asked to check their work for errors and resubmit annotations. + +
+ ); + + const shapeComparisonTooltip = (
Min overlap threshold(IoU) is used for distinction between matched / unmatched shapes. @@ -131,8 +156,13 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul <> - General + General + + +
@@ -175,8 +205,13 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul <> - Job validation + Job validation + + + @@ -203,7 +238,7 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul Shape comparison - + From 7e8c44d50b902b32c6035deca74d6fd48665df94 Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Mon, 26 Aug 2024 11:42:10 +0300 Subject: [PATCH 48/79] minor bugfixes --- .../task-quality/allocation-table.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx index 74e145f3bc6..a9460fe1c7d 100644 --- a/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx @@ -241,14 +241,14 @@ export default function AllocationTableComponent(props: Props): JSX.Element { onFilter: (value: boolean | Key, record: RowData) => record.actions.active === value, render: ({ frameID, active }: { frameID: number, active: boolean }): JSX.Element => ( active ? ( + { onDeleteFrames([frameID]); }} + /> + ) : ( { onRestoreFrames([frameID]); }} component={RestoreIcon} /> - ) : ( - { onDeleteFrames([frameID]); }} - /> ) ), }, @@ -258,11 +258,11 @@ export default function AllocationTableComponent(props: Props): JSX.Element { const data = gtJobMeta.includedFrames.map((frameID: number) => ({ key: frameID, frame: frameID, - name: { name: gtJobMeta.frames[frameID].name, index: frameID }, + name: { name: gtJobMeta.frames[frameID]?.name ?? gtJobMeta.frames[0].name, index: frameID }, useCount: frameID, quality: frameID, active: !(frameID in gtJobMeta.deletedFrames), - actions: { frameID, active: frameID in gtJobMeta.deletedFrames }, + actions: { frameID, active: !(frameID in gtJobMeta.deletedFrames) }, }), ); From 0a44763e4177c6945a7f3a9a31837ef2752635ff Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Mon, 26 Aug 2024 11:48:35 +0300 Subject: [PATCH 49/79] applied coderabbit comments --- .../quality-configuration-form.tsx | 125 ++++++++---------- .../quality-control/quality-settings.tsx | 2 +- .../task-quality-magement-component.tsx | 13 +- 3 files changed, 63 insertions(+), 77 deletions(-) diff --git a/cvat-ui/src/components/create-task-page/quality-configuration-form.tsx b/cvat-ui/src/components/create-task-page/quality-configuration-form.tsx index 554f3635afe..46541e82aec 100644 --- a/cvat-ui/src/components/create-task-page/quality-configuration-form.tsx +++ b/cvat-ui/src/components/create-task-page/quality-configuration-form.tsx @@ -47,7 +47,60 @@ export default class QualityConfigurationForm extends React.PureComponent }); } - return Promise.reject(new Error('Qualiuty form ref is empty')); + return Promise.reject(new Error('Quality form ref is empty')); + } + + private gtParamsBlock(): JSX.Element { + return ( + <> + + + + + + + + } /> + + + + ); + } + + private honeypotsParamsBlock(): JSX.Element { + return ( + + + + } /> + + + + + } /> + + + + ); } public render(): JSX.Element { @@ -55,75 +108,9 @@ export default class QualityConfigurationForm extends React.PureComponent let paramsBlock: JSX.Element | null = null; if (validationMethod === ValidationMethod.GT) { - paramsBlock = ( - <> - - - - - - - - } /> - - - - ); + paramsBlock = this.gtParamsBlock(); } else if (validationMethod === ValidationMethod.HONEYPOTS) { - paramsBlock = ( - - - - } /> - - - - - } /> - - - - ); + paramsBlock = this.honeypotsParamsBlock(); } return ( diff --git a/cvat-ui/src/components/quality-control/quality-settings.tsx b/cvat-ui/src/components/quality-control/quality-settings.tsx index 87fbc42d24a..ba759ede9d6 100644 --- a/cvat-ui/src/components/quality-control/quality-settings.tsx +++ b/cvat-ui/src/components/quality-control/quality-settings.tsx @@ -26,7 +26,7 @@ export default function QualitySettingsComponent(props: Props): JSX.Element | nu const onSave = useCallback(async () => { const values = await form.validateFields(); setQualitySettings(values); - }, [form]); + }, [form, setQualitySettings]); if (fetching) { return ( diff --git a/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx b/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx index d51357b4bb9..6e590fb5cc6 100644 --- a/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx @@ -32,13 +32,12 @@ function TaskQualityManagementComponent(props: Props): JSX.Element { onDeleteFrames, onRestoreFrames, fetching, } = props; - const activeCount = gtJobMeta.includedFrames.reduce((acc: number, frameID: number) => ( - !(frameID in gtJobMeta.deletedFrames) ? acc + 1 : acc - ), 0); - - const excludedCount = Object.keys(gtJobMeta.deletedFrames).reduce((acc: number, frameID: string) => ( - gtJobMeta.includedFrames.includes(+frameID) ? acc + 1 : acc - ), 0); + const activeCount = gtJobMeta.includedFrames.filter((frameID: number) => ( + !(frameID in gtJobMeta.deletedFrames) + )).length; + const excludedCount = Object.keys(gtJobMeta.deletedFrames).filter((frameID: string) => ( + gtJobMeta.includedFrames.includes(+frameID) + )).length; const managementPagePlugins = usePlugins( (state: CombinedState) => ( From 8c4eb52dbb63101a0eae938940be32972b4f3e99 Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Mon, 26 Aug 2024 12:37:41 +0300 Subject: [PATCH 50/79] fixed multitask bug --- cvat-ui/src/components/create-task-page/create-task-content.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cvat-ui/src/components/create-task-page/create-task-content.tsx b/cvat-ui/src/components/create-task-page/create-task-content.tsx index 9d254c4770e..db4d460694c 100644 --- a/cvat-ui/src/components/create-task-page/create-task-content.tsx +++ b/cvat-ui/src/components/create-task-page/create-task-content.tsx @@ -595,6 +595,7 @@ class CreateTaskContent extends React.PureComponent Date: Mon, 26 Aug 2024 14:25:24 +0300 Subject: [PATCH 51/79] added plugin for sorting columns --- .../task-quality/allocation-table.tsx | 11 +++++++++-- cvat-ui/src/reducers/index.ts | 16 ++++++++++++++++ cvat-ui/src/reducers/plugins-reducer.ts | 16 ++++++++++++++++ 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx index a9460fe1c7d..87cc6e983bd 100644 --- a/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx @@ -3,6 +3,7 @@ // SPDX-License-Identifier: MIT import React, { useEffect, useState } from 'react'; +import { useSelector } from 'react-redux'; import { useHistory } from 'react-router'; import { ResizableBox, ResizableProps, ResizeCallbackData } from 'react-resizable'; import { Row, Col } from 'antd/lib/grid'; @@ -83,12 +84,18 @@ export default function AllocationTableComponent(props: Props): JSX.Element { state.plugins.components.qualityControlPage.tabs.management.allocationTable.columns.quality ), props, { frameID: null }, ); + const qualitySorter = useSelector((state: CombinedState) => ( + state.plugins.callbacks.qualityControlPage.tabs.management.allocationTable.columns.quality.sorter + ))[0] ?? sorter('quality'); const useCountColumnPlugins = usePlugins( (state: CombinedState) => ( state.plugins.components.qualityControlPage.tabs.management.allocationTable.columns.useCount ), props, { frameID: null }, ); + const useCountSorter = useSelector((state: CombinedState) => ( + state.plugins.callbacks.qualityControlPage.tabs.management.allocationTable.columns.useCount.sorter + ))[0] ?? sorter('useCount'); const [select, setSelect] = useState<{ selectedRowKeys: Key[], selectedRows: RowData[] }>({ selectedRowKeys: [], @@ -185,7 +192,7 @@ export default function AllocationTableComponent(props: Props): JSX.Element { dataIndex: 'useCount', key: 'useCount', align: 'center' as const, - sorter: sorter('useCount'), + sorter: useCountSorter, render: (frameID): JSX.Element => { const useCountColumnItems: [JSX.Element, number][] = [[notAvailableComponent, 10]]; useCountColumnItems.push( @@ -209,7 +216,7 @@ export default function AllocationTableComponent(props: Props): JSX.Element { key: 'quality', align: 'center' as const, className: 'cvat-job-item-quality', - sorter: sorter('quality'), + sorter: qualitySorter, render: (frameID): JSX.Element => { const qualityColumnItems: [JSX.Element, number][] = [[notAvailableComponent, 10]]; qualityColumnItems.push( diff --git a/cvat-ui/src/reducers/index.ts b/cvat-ui/src/reducers/index.ts index 037c4742e9f..179d38e0d88 100644 --- a/cvat-ui/src/reducers/index.ts +++ b/cvat-ui/src/reducers/index.ts @@ -259,6 +259,22 @@ export interface PluginsState { }; }; }; + qualityControlPage:{ + tabs: { + management: { + allocationTable: { + columns: { + quality: { + sorter: ((row1: any, row2: any) => number)[]; + }; + useCount: { + sorter: ((row1: any, row2: any) => number)[]; + }; + } + } + }, + }, + }; }; components: { header: { diff --git a/cvat-ui/src/reducers/plugins-reducer.ts b/cvat-ui/src/reducers/plugins-reducer.ts index 4680d350986..5fd96225141 100644 --- a/cvat-ui/src/reducers/plugins-reducer.ts +++ b/cvat-ui/src/reducers/plugins-reducer.ts @@ -22,6 +22,22 @@ const defaultState: PluginsState = { }, }, }, + qualityControlPage: { + tabs: { + management: { + allocationTable: { + columns: { + quality: { + sorter: [], + }, + useCount: { + sorter: [], + }, + }, + }, + }, + }, + }, }, components: { header: { From 3e89c5fa0c77693009908865022b3d602d588faf Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Tue, 27 Aug 2024 12:51:17 +0300 Subject: [PATCH 52/79] adapted quality settings changes --- .../quality-control/quality-control-page.tsx | 45 +++-- .../task-quality/quality-settings-form.tsx | 161 ++++++++---------- cvat-ui/src/utils/quality.ts | 16 +- 3 files changed, 105 insertions(+), 117 deletions(-) diff --git a/cvat-ui/src/components/quality-control/quality-control-page.tsx b/cvat-ui/src/components/quality-control/quality-control-page.tsx index 2bbaa687103..51a570696f2 100644 --- a/cvat-ui/src/components/quality-control/quality-control-page.tsx +++ b/cvat-ui/src/components/quality-control/quality-control-page.tsx @@ -16,11 +16,12 @@ import notification from 'antd/lib/notification'; import { useIsMounted } from 'utils/hooks'; import { Job, JobType, QualityReport, QualitySettings, Task, getCore, FramesMetaData, + TargetMetric, } from 'cvat-core-wrapper'; import CVATLoadingSpinner from 'components/common/loading-spinner'; import GoBackButton from 'components/common/go-back-button'; import { ActionUnion, createAction } from 'utils/redux'; -import { BASE_TARGET_THRESHOLD, qualityColorGenerator, QualityColors } from 'utils/quality'; +import { qualityColorGenerator, QualityColors } from 'utils/quality'; import TaskQualityComponent from './task-quality/task-quality-component'; import TaskQualityManagementComponent from './task-quality/task-quality-magement-component'; import QualitySettingsComponent from './quality-settings'; @@ -44,7 +45,8 @@ interface State { qualitySettings: { settings: QualitySettings | null; fetching: boolean; - getQualityColor: (value?: number) => QualityColors; + getQualityColor: ((value?: number) => QualityColors) | null; + targetMetric: TargetMetric | null; }, } @@ -101,6 +103,7 @@ const reducer = (state: State, action: ActionUnion): Stat ...state.qualitySettings, settings: action.payload.qualitySettings, getQualityColor: qualityColorGenerator(action.payload.qualitySettings.targetMetricThreshold), + targetMetric: action.payload.qualitySettings.targetMetric, }, }; } @@ -156,7 +159,8 @@ function QualityControlPage(): JSX.Element { qualitySettings: { settings: null, fetching: true, - getQualityColor: qualityColorGenerator(BASE_TARGET_THRESHOLD), + getQualityColor: null, + targetMetric: null, }, }); @@ -334,7 +338,22 @@ function QualityControlPage(): JSX.Element { let backNavigation: JSX.Element | null = null; let title: JSX.Element | null = null; let tabs: JSX.Element | null = null; - if (instanceType && instance) { + + const { + fetching, + gtJob: { + instance: gtJobInstance, + meta: gtJobMeta, + }, + qualitySettings: { + settings: qualitySettings, + fetching: qualitySettingsFetching, + getQualityColor, targetMetric, + }, + } = state; + const settingsInitialized = qualitySettings && getQualityColor && targetMetric; + + if (instanceType && instance && settingsInitialized) { backNavigation = ( @@ -361,24 +380,24 @@ function QualityControlPage(): JSX.Element { children: ( ), }, 10]); - if (state.gtJob.instance && state.gtJob.meta) { + if (gtJobInstance && gtJobMeta) { tabsItems.push([{ key: 'management', label: 'Management', children: ( ), }, 20]); @@ -388,8 +407,8 @@ function QualityControlPage(): JSX.Element { label: 'Settings', children: ( ), @@ -411,7 +430,7 @@ function QualityControlPage(): JSX.Element { return (
- {state.fetching && state.qualitySettings.fetching ? ( + {fetching && qualitySettingsFetching ? (
diff --git a/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx b/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx index 6d8f2940299..1eaa2e0c561 100644 --- a/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx @@ -3,6 +3,7 @@ // SPDX-License-Identifier: MIT import React from 'react'; +import { useSelector } from 'react-redux'; import { QuestionCircleOutlined } from '@ant-design/icons/lib/icons'; import Text from 'antd/lib/typography/Text'; import InputNumber from 'antd/lib/input-number'; @@ -10,9 +11,10 @@ import { Col, Row } from 'antd/lib/grid'; import Divider from 'antd/lib/divider'; import Form, { FormInstance } from 'antd/lib/form'; import Checkbox from 'antd/lib/checkbox/Checkbox'; +import { Button, Select } from 'antd/lib'; +import { CombinedState } from 'reducers'; import CVATTooltip from 'components/common/cvat-tooltip'; import { QualitySettings, TargetMetric } from 'cvat-core-wrapper'; -import { Button, Select } from 'antd/lib'; interface FormProps { form: FormInstance; @@ -25,6 +27,10 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul form, settings, onSave, } = props; + const schemaDescriptions = useSelector((state: CombinedState) => ( + state.serverAPI.schema?.components.schemas.QualitySettings.properties + )); + const initialValues = { targetMetric: settings.targetMetric, targetMetricThreshold: settings.targetMetricThreshold * 100, @@ -49,16 +55,23 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul panopticComparison: settings.panopticComparison, }; + const targetMetricDescription = `${schemaDescriptions.target_metric.description + .replaceAll(/\* [a-z` -]+[A-Z]+/g, '') + .replaceAll(/\n/g, '')}.`; + const generalTooltip = (
- Target metric - the primary metric for annotation quality estimation. - Different metrics can prioritize different aspects, such as the type of the errors made, - per class or overall performance. This parameter affects display of the quality computed. + Target metric - + {' '} + {targetMetricDescription} + This parameter affects display of the quality computed. - Target metric threshold - the minimum acceptable annotation quality level, - in terms of the target metric selected. This parameter affects display of the quality numbers. + Target metric threshold - + {' '} + {schemaDescriptions.target_metric_threshold.description} + This parameter affects display of the quality numbers.
); @@ -66,10 +79,9 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul const jobValidationTooltip = (
- Max validations per job - the maximum allowed number of job annotation results validations, - requested by job assignees, available per assignment. Requires ground truth configured. - If the job quality measured is below the target metric threshold, - the assignee is asked to check their work for errors and resubmit annotations. + Max validations per job - + {' '} + {schemaDescriptions.max_validations_per_job.description}
); @@ -77,10 +89,14 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul const shapeComparisonTooltip = (
- Min overlap threshold(IoU) is used for distinction between matched / unmatched shapes. + Min overlap threshold(IoU) - + {' '} + {schemaDescriptions.iou_threshold.description} - Low overlap threshold is used for distinction between strong / weak (low overlap) matches. + Low overlap threshold - + {' '} + {schemaDescriptions.low_overlap_threshold.description}
); @@ -88,21 +104,9 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul const keypointTooltip = (
- Object Keypoint Similarity (OKS) is like IoU, but for skeleton points. - - - The Sigma value is the percent of the skeleton bbox area ^ 0.5. - Used as the radius of the circle around a GT point, - where the checked point is expected to be. - - - The value is also used to match single point annotations, in which case - the bbox is the whole image. For point groups the bbox is taken - for the whole group. - - - If there is a rectangle annotation in the points group or skeleton, - it is used as the group bbox (supposing the whole group describes a single object). + Object Keypoint Similarity (OKS) - + {' '} + {schemaDescriptions.oks_sigma.description}
); @@ -110,16 +114,19 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul const linesTooltip = (
- Line thickness - thickness of polylines, relatively to the (image area) ^ 0.5. - The distance to the boundary around the GT line, - inside of which the checked line points should be. + Line thickness - + {' '} + {schemaDescriptions.line_thickness.description} - Check orientation - Indicates that polylines have direction. + Check orientation - + {' '} + {schemaDescriptions.compare_line_orientation.description} - Min similarity gain - The minimal gain in the GT IoU between the given and reversed line directions - to consider the line inverted. Only useful with the Check orientation parameter. + Min similarity gain - + {' '} + {schemaDescriptions.line_orientation_threshold.description}
); @@ -127,11 +134,14 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul const groupTooltip = (
- Compare groups - Enables or disables annotation group checks. + Compare groups - + {' '} + {schemaDescriptions.compare_groups.description} - Min group match threshold - Minimal IoU for groups to be considered matching, - used when the Compare groups is enabled. + Min group match threshold - + {' '} + {schemaDescriptions.group_match_threshold.description}
); @@ -139,21 +149,37 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul const segmentationTooltip = (
- Check object visibility - Check for partially-covered annotations. + Check object visibility - + {' '} + {schemaDescriptions.check_covered_annotations.description} - Min visibility threshold - Minimal visible area percent of the spatial annotations (polygons, masks) - for reporting covered annotations, useful with the Check object visibility option. + Min visibility threshold - + {' '} + {schemaDescriptions.object_visibility_threshold.description} - Match only visible parts - Use only the visible part of the masks and polygons in comparisons. + Match only visible parts - + {' '} + {schemaDescriptions.panoptic_comparison.description}
); - const formItems: [JSX.Element, number][] = []; - formItems.push([ - <> + return ( + + +
+ + + General @@ -198,11 +224,6 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul - , - 10]); - - formItems.push([ - <> Job validation @@ -229,11 +250,6 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul - , - 20]); - - formItems.push([ - <> Shape comparison @@ -265,11 +281,6 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul - , - 30]); - - formItems.push([ - <> Keypoint Comparison @@ -292,11 +303,6 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul - , - 40]); - - formItems.push([ - <> Line Comparison @@ -341,11 +347,6 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul - , - 50]); - - formItems.push([ - <> Group Comparison @@ -379,11 +380,6 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul - , - 60]); - - formItems.push([ - <> Segmentation Comparison @@ -429,25 +425,6 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul - , - 70]); - - return ( - - - - - - - { formItems.sort((item1, item2) => item1[1] - item2[1]) - .map((item) => item[0]) } ); } diff --git a/cvat-ui/src/utils/quality.ts b/cvat-ui/src/utils/quality.ts index 2a6dbf02992..6910ce6adb0 100644 --- a/cvat-ui/src/utils/quality.ts +++ b/cvat-ui/src/utils/quality.ts @@ -13,16 +13,14 @@ export enum QualityColors { GRAY = '#8c8c8c', } -export const BASE_TARGET_THRESHOLD = 80; - const ratios = { low: 0.82, middle: 0.9, high: 1, }; -export const qualityColorGenerator = (targetMetric?: number) => (value?: number) => { - const baseValue = targetMetric ?? BASE_TARGET_THRESHOLD; +export const qualityColorGenerator = (targetMetric: number) => (value?: number) => { + const baseValue = targetMetric * 100; const thresholds = { low: baseValue * ratios.low, @@ -82,16 +80,10 @@ export function sorter(path: string) { }; } -export function collectUsers(reports: Record, path: string): ColumnFilterItem[] { +export function collectAssignees(reports: QualityReport[]): ColumnFilterItem[] { return Array.from( new Set( - Object.values(reports).map((report: QualityReport) => { - if (report[path] === null) { - return null; - } - - return report[path].username; - }), + reports.map((report: QualityReport) => report.assignee?.username ?? null), ), ).map((value: string | null) => ({ text: value ?? 'Is Empty', value: value ?? false })); } From ec38612f7f58e534911c8b17d09762acf480711b Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Tue, 27 Aug 2024 13:51:32 +0300 Subject: [PATCH 53/79] supported target metric in plugin --- .../src/components/quality-control/quality-control-page.tsx | 1 + .../quality-control/task-quality/task-quality-component.tsx | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/cvat-ui/src/components/quality-control/quality-control-page.tsx b/cvat-ui/src/components/quality-control/quality-control-page.tsx index 51a570696f2..d723ad2cff0 100644 --- a/cvat-ui/src/components/quality-control/quality-control-page.tsx +++ b/cvat-ui/src/components/quality-control/quality-control-page.tsx @@ -381,6 +381,7 @@ function QualityControlPage(): JSX.Element { ), }, 10]); diff --git a/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx b/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx index a6e17c14fd9..15f574f72af 100644 --- a/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx @@ -3,6 +3,7 @@ // SPDX-License-Identifier: MIT import { + TargetMetric, Task, } from 'cvat-core-wrapper'; import React from 'react'; @@ -14,11 +15,12 @@ import config from 'config'; interface Props { task: Task; getQualityColor: (value?: number) => QualityColors; + targetMetric: TargetMetric; } function TaskQualityComponent(props: Props): JSX.Element { const { - task, getQualityColor, + task, getQualityColor, targetMetric, } = props; const { PAID_PLACEHOLDER_CONFIG: { features: { qualityControl: featureDescription } } } = config; @@ -26,6 +28,7 @@ function TaskQualityComponent(props: Props): JSX.Element { const plugins = usePlugins((state) => state.plugins.components.qualityControlPage.tabs.overview, props, { task, getQualityColor, + targetMetric, }); const items: [JSX.Element, number][] = []; @@ -41,6 +44,7 @@ function TaskQualityComponent(props: Props): JSX.Element { targetState={{ task, getQualityColor, + targetMetric, }} />, weight] as [JSX.Element, number] ))); From 823e921c844af0234d439954f538d9ab18996229 Mon Sep 17 00:00:00 2001 From: Kirill Lakhov Date: Wed, 28 Aug 2024 10:26:49 +0300 Subject: [PATCH 54/79] support for table actions plugins --- .../task-quality/allocation-table.tsx | 17 +++++++++++++++++ cvat-ui/src/reducers/index.ts | 3 ++- cvat-ui/src/reducers/plugins-reducer.ts | 1 + 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx index 87cc6e983bd..14d674edca0 100644 --- a/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx @@ -97,6 +97,19 @@ export default function AllocationTableComponent(props: Props): JSX.Element { state.plugins.callbacks.qualityControlPage.tabs.management.allocationTable.columns.useCount.sorter ))[0] ?? sorter('useCount'); + const allocationTableActionsPlugins = usePlugins( + (state: CombinedState) => ( + state.plugins.components.qualityControlPage.tabs.management.allocationTable.actions + ), props, + ); + const allocationTableActionsItems: [JSX.Element, number][] = []; + allocationTableActionsItems.push( + ...allocationTableActionsPlugins.map(({ component: Component, weight }, index) => { + const component = ; + return [component, weight] as [JSX.Element, number]; + }), + ); + const [select, setSelect] = useState<{ selectedRowKeys: Key[], selectedRows: RowData[] }>({ selectedRowKeys: [], selectedRows: [], @@ -279,6 +292,10 @@ export default function AllocationTableComponent(props: Props): JSX.Element { Frames + { + allocationTableActionsItems.sort((item1, item2) => item1[1] - item2[1]) + .map((item) => item[0]) + } { select.selectedRowKeys.length !== 0 ? ( <> diff --git a/cvat-ui/src/reducers/index.ts b/cvat-ui/src/reducers/index.ts index 179d38e0d88..2174b4a1529 100644 --- a/cvat-ui/src/reducers/index.ts +++ b/cvat-ui/src/reducers/index.ts @@ -309,7 +309,8 @@ export interface PluginsState { columns: { quality: PluginComponent[]; useCount: PluginComponent[]; - } + }, + actions: PluginComponent[]; } }, }, diff --git a/cvat-ui/src/reducers/plugins-reducer.ts b/cvat-ui/src/reducers/plugins-reducer.ts index 5fd96225141..67c4e882fd5 100644 --- a/cvat-ui/src/reducers/plugins-reducer.ts +++ b/cvat-ui/src/reducers/plugins-reducer.ts @@ -73,6 +73,7 @@ const defaultState: PluginsState = { quality: [], useCount: [], }, + actions: [], }, }, }, From 573053bdbfe96a5bc2e720fb50cc6772ea380280 Mon Sep 17 00:00:00 2001 From: Boris Sekachev Date: Tue, 3 Sep 2024 11:54:16 +0300 Subject: [PATCH 55/79] Accidently removed yarn.lock --- yarn.lock | 13962 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 13962 insertions(+) create mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000000..884ddbadde6 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,13962 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@ampproject/remapping@^2.2.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@ant-design/colors@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@ant-design/colors/-/colors-6.0.0.tgz#9b9366257cffcc47db42b9d0203bb592c13c0298" + integrity sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ== + dependencies: + "@ctrl/tinycolor" "^3.4.0" + +"@ant-design/colors@^7.0.0", "@ant-design/colors@^7.0.2": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@ant-design/colors/-/colors-7.1.0.tgz#60eadfa2e21871d8948dac5d50b9f056062f8af3" + integrity sha512-MMoDGWn1y9LdQJQSHiCC20x3uZ3CwQnv9QMz6pCmJOrqdgM9YxsoVVY0wtrdXbmfSgnV0KNk6zi09NAhMR2jvg== + dependencies: + "@ctrl/tinycolor" "^3.6.1" + +"@ant-design/compatible@^5.1.2": + version "5.1.3" + resolved "https://registry.yarnpkg.com/@ant-design/compatible/-/compatible-5.1.3.tgz#5ede26392defae43f54e19f604fdb44eb9859816" + integrity sha512-uLvjwENnpY/1gxYb5m8L2k+WmBpBHqH45fO76+4J+WUDKTUKpmwbEW3OG/in2mSO2HI6h3Mcp57+tAMr18ZkgQ== + dependencies: + classnames "^2.2.6" + dayjs "^1.11.4" + lodash.camelcase "^4.3.0" + lodash.upperfirst "^4.3.1" + rc-animate "^3.1.1" + rc-form "^2.4.12" + rc-util "^5.24.5" + +"@ant-design/css-animation@^1.7.2": + version "1.7.3" + resolved "https://registry.yarnpkg.com/@ant-design/css-animation/-/css-animation-1.7.3.tgz#60a1c970014e86b28f940510d69e503e428f1136" + integrity sha512-LrX0OGZtW+W6iLnTAqnTaoIsRelYeuLZWsrmBJFUXDALQphPsN8cE5DCsmoSlL0QYb94BQxINiuS70Ar/8BNgA== + +"@ant-design/cssinjs@^1.19.1": + version "1.21.1" + resolved "https://registry.yarnpkg.com/@ant-design/cssinjs/-/cssinjs-1.21.1.tgz#7320813c5f747e0cde52c388eff5198d78d57230" + integrity sha512-tyWnlK+XH7Bumd0byfbCiZNK43HEubMoCcu9VxwsAwiHdHTgWa+tMN0/yvxa+e8EzuFP1WdUNNPclRpVtD33lg== + dependencies: + "@babel/runtime" "^7.11.1" + "@emotion/hash" "^0.8.0" + "@emotion/unitless" "^0.7.5" + classnames "^2.3.1" + csstype "^3.1.3" + rc-util "^5.35.0" + stylis "^4.3.3" + +"@ant-design/icons-svg@^4.3.0", "@ant-design/icons-svg@^4.4.0": + version "4.4.2" + resolved "https://registry.yarnpkg.com/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz#ed2be7fb4d82ac7e1d45a54a5b06d6cecf8be6f6" + integrity sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA== + +"@ant-design/icons@^4.6.3": + version "4.8.3" + resolved "https://registry.yarnpkg.com/@ant-design/icons/-/icons-4.8.3.tgz#41555408ed5e9b0c3d53f3f24fe6a73abfcf4000" + integrity sha512-HGlIQZzrEbAhpJR6+IGdzfbPym94Owr6JZkJ2QCCnOkPVIWMO2xgIVcOKnl8YcpijIo39V7l2qQL5fmtw56cMw== + dependencies: + "@ant-design/colors" "^6.0.0" + "@ant-design/icons-svg" "^4.3.0" + "@babel/runtime" "^7.11.2" + classnames "^2.2.6" + lodash "^4.17.15" + rc-util "^5.9.4" + +"@ant-design/icons@^5.3.7": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ant-design/icons/-/icons-5.4.0.tgz#4bd8f335c68207cc06fe9943d164a81cdfcfbeac" + integrity sha512-QZbWC5xQYexCI5q4/fehSEkchJr5UGtvAJweT743qKUQQGs9IH2DehNLP49DJ3Ii9m9CijD2HN6fNy3WKhIFdA== + dependencies: + "@ant-design/colors" "^7.0.0" + "@ant-design/icons-svg" "^4.4.0" + "@babel/runtime" "^7.24.8" + classnames "^2.2.6" + rc-util "^5.31.1" + +"@ant-design/react-slick@~1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@ant-design/react-slick/-/react-slick-1.1.2.tgz#f84ce3e4d0dc941f02b16f1d1d6d7a371ffbb4f1" + integrity sha512-EzlvzE6xQUBrZuuhSAFTdsr4P2bBBHGZwKFemEfq8gIGyIQCxalYfZW/T2ORbtQx5rU69o+WycP3exY/7T1hGA== + dependencies: + "@babel/runtime" "^7.10.4" + classnames "^2.2.5" + json2mq "^0.2.0" + resize-observer-polyfill "^1.5.1" + throttle-debounce "^5.0.0" + +"@babel/cli@^7.13.16": + version "7.25.6" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.25.6.tgz#bc35561adc78ade43ac9c09a690768493ab9ed95" + integrity sha512-Z+Doemr4VtvSD2SNHTrkiFZ1LX+JI6tyRXAAOb4N9khIuPyoEPmTPJarPm8ljJV1D6bnMQjyHMWTT9NeKbQuXA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.25" + commander "^6.2.0" + convert-source-map "^2.0.0" + fs-readdir-recursive "^1.1.0" + glob "^7.2.0" + make-dir "^2.1.0" + slash "^2.0.0" + optionalDependencies: + "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.3" + chokidar "^3.6.0" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" + integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== + dependencies: + "@babel/highlight" "^7.24.7" + picocolors "^1.0.0" + +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.2", "@babel/compat-data@^7.25.4": + version "7.25.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.4.tgz#7d2a80ce229890edcf4cc259d4d696cb4dae2fcb" + integrity sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ== + +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9", "@babel/core@^7.4.5", "@babel/core@^7.6.0", "@babel/core@^7.7.5": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.25.2.tgz#ed8eec275118d7613e77a352894cd12ded8eba77" + integrity sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.24.7" + "@babel/generator" "^7.25.0" + "@babel/helper-compilation-targets" "^7.25.2" + "@babel/helper-module-transforms" "^7.25.2" + "@babel/helpers" "^7.25.0" + "@babel/parser" "^7.25.0" + "@babel/template" "^7.25.0" + "@babel/traverse" "^7.25.2" + "@babel/types" "^7.25.2" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/eslint-parser@^7.23.3": + version "7.25.1" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.25.1.tgz#469cee4bd18a88ff3edbdfbd227bd20e82aa9b82" + integrity sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg== + dependencies: + "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" + eslint-visitor-keys "^2.1.0" + semver "^6.3.1" + +"@babel/generator@^7.25.0", "@babel/generator@^7.25.6", "@babel/generator@^7.7.2": + version "7.25.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.6.tgz#0df1ad8cb32fe4d2b01d8bf437f153d19342a87c" + integrity sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw== + dependencies: + "@babel/types" "^7.25.6" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz#5373c7bc8366b12a033b4be1ac13a206c6656aab" + integrity sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg== + dependencies: + "@babel/types" "^7.24.7" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz#37d66feb012024f2422b762b9b2a7cfe27c7fba3" + integrity sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA== + dependencies: + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.24.7", "@babel/helper-compilation-targets@^7.24.8", "@babel/helper-compilation-targets@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz#e1d9410a90974a3a5a66e84ff55ef62e3c02d06c" + integrity sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw== + dependencies: + "@babel/compat-data" "^7.25.2" + "@babel/helper-validator-option" "^7.24.8" + browserslist "^4.23.1" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.24.7", "@babel/helper-create-class-features-plugin@^7.25.0", "@babel/helper-create-class-features-plugin@^7.25.4": + version "7.25.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz#57eaf1af38be4224a9d9dd01ddde05b741f50e14" + integrity sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-member-expression-to-functions" "^7.24.8" + "@babel/helper-optimise-call-expression" "^7.24.7" + "@babel/helper-replace-supers" "^7.25.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/traverse" "^7.25.4" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.24.7", "@babel/helper-create-regexp-features-plugin@^7.25.0", "@babel/helper-create-regexp-features-plugin@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz#24c75974ed74183797ffd5f134169316cd1808d9" + integrity sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + regexpu-core "^5.3.1" + semver "^6.3.1" + +"@babel/helper-define-polyfill-provider@^0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" + integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== + dependencies: + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + +"@babel/helper-member-expression-to-functions@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz#6155e079c913357d24a4c20480db7c712a5c3fb6" + integrity sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA== + dependencies: + "@babel/traverse" "^7.24.8" + "@babel/types" "^7.24.8" + +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b" + integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA== + dependencies: + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-module-transforms@^7.24.7", "@babel/helper-module-transforms@^7.24.8", "@babel/helper-module-transforms@^7.25.0", "@babel/helper-module-transforms@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz#ee713c29768100f2776edf04d4eb23b8d27a66e6" + integrity sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ== + dependencies: + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-simple-access" "^7.24.7" + "@babel/helper-validator-identifier" "^7.24.7" + "@babel/traverse" "^7.25.2" + +"@babel/helper-optimise-call-expression@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz#8b0a0456c92f6b323d27cfd00d1d664e76692a0f" + integrity sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A== + dependencies: + "@babel/types" "^7.24.7" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.24.8", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz#94ee67e8ec0e5d44ea7baeb51e571bd26af07878" + integrity sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg== + +"@babel/helper-remap-async-to-generator@^7.24.7", "@babel/helper-remap-async-to-generator@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz#d2f0fbba059a42d68e5e378feaf181ef6055365e" + integrity sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-wrap-function" "^7.25.0" + "@babel/traverse" "^7.25.0" + +"@babel/helper-replace-supers@^7.24.7", "@babel/helper-replace-supers@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz#ff44deac1c9f619523fe2ca1fd650773792000a9" + integrity sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.24.8" + "@babel/helper-optimise-call-expression" "^7.24.7" + "@babel/traverse" "^7.25.0" + +"@babel/helper-simple-access@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz#bcade8da3aec8ed16b9c4953b74e506b51b5edb3" + integrity sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg== + dependencies: + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz#5f8fa83b69ed5c27adc56044f8be2b3ea96669d9" + integrity sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ== + dependencies: + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-string-parser@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" + integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ== + +"@babel/helper-validator-identifier@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" + integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== + +"@babel/helper-validator-option@^7.24.7", "@babel/helper-validator-option@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz#3725cdeea8b480e86d34df15304806a06975e33d" + integrity sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q== + +"@babel/helper-wrap-function@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz#dab12f0f593d6ca48c0062c28bcfb14ebe812f81" + integrity sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ== + dependencies: + "@babel/template" "^7.25.0" + "@babel/traverse" "^7.25.0" + "@babel/types" "^7.25.0" + +"@babel/helpers@^7.25.0": + version "7.25.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.25.6.tgz#57ee60141829ba2e102f30711ffe3afab357cc60" + integrity sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q== + dependencies: + "@babel/template" "^7.25.0" + "@babel/types" "^7.25.6" + +"@babel/highlight@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" + integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== + dependencies: + "@babel/helper-validator-identifier" "^7.24.7" + chalk "^2.4.2" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.25.0", "@babel/parser@^7.25.6": + version "7.25.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.6.tgz#85660c5ef388cbbf6e3d2a694ee97a38f18afe2f" + integrity sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q== + dependencies: + "@babel/types" "^7.25.6" + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.3": + version "7.25.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz#dca427b45a6c0f5c095a1c639dfe2476a3daba7f" + integrity sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/traverse" "^7.25.3" + +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz#cd0c583e01369ef51676bdb3d7b603e17d2b3f73" + integrity sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.8" + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz#749bde80356b295390954643de7635e0dffabe73" + integrity sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.8" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz#e4eabdd5109acc399b38d7999b2ef66fc2022f89" + integrity sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/plugin-transform-optional-chaining" "^7.24.7" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz#3a82a70e7cb7294ad2559465ebcb871dfbf078fb" + integrity sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/traverse" "^7.25.0" + +"@babel/plugin-proposal-class-properties@^7.8.3": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-optional-chaining@^7.11.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" + integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-import-assertions@^7.24.7": + version "7.25.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.6.tgz#bb918905c58711b86f9710d74a3744b6c56573b5" + integrity sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.8" + +"@babel/plugin-syntax-import-attributes@^7.24.7": + version "7.25.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz#6d4c78f042db0e82fd6436cd65fec5dc78ad2bde" + integrity sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.8" + +"@babel/plugin-syntax-import-meta@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.2.0", "@babel/plugin-syntax-jsx@^7.24.7", "@babel/plugin-syntax-jsx@^7.7.2": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz#39a1fa4a7e3d3d7f34e2acc6be585b718d30e02d" + integrity sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.24.7", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.25.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz#04db9ce5a9043d9c635e75ae7969a2cd50ca97ff" + integrity sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.8" + +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-arrow-functions@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz#4f6886c11e423bd69f3ce51dbf42424a5f275514" + integrity sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-async-generator-functions@^7.25.4": + version "7.25.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz#2afd4e639e2d055776c9f091b6c0c180ed8cf083" + integrity sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-remap-async-to-generator" "^7.25.0" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/traverse" "^7.25.4" + +"@babel/plugin-transform-async-to-generator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz#72a3af6c451d575842a7e9b5a02863414355bdcc" + integrity sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA== + dependencies: + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-remap-async-to-generator" "^7.24.7" + +"@babel/plugin-transform-block-scoped-functions@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz#a4251d98ea0c0f399dafe1a35801eaba455bbf1f" + integrity sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-block-scoping@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz#23a6ed92e6b006d26b1869b1c91d1b917c2ea2ac" + integrity sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.8" + +"@babel/plugin-transform-class-properties@^7.25.4": + version "7.25.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz#bae7dbfcdcc2e8667355cd1fb5eda298f05189fd" + integrity sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.4" + "@babel/helper-plugin-utils" "^7.24.8" + +"@babel/plugin-transform-class-static-block@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz#c82027ebb7010bc33c116d4b5044fbbf8c05484d" + integrity sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-transform-classes@^7.25.4": + version "7.25.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz#d29dbb6a72d79f359952ad0b66d88518d65ef89a" + integrity sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-compilation-targets" "^7.25.2" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-replace-supers" "^7.25.0" + "@babel/traverse" "^7.25.4" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz#4cab3214e80bc71fae3853238d13d097b004c707" + integrity sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/template" "^7.24.7" + +"@babel/plugin-transform-destructuring@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz#c828e814dbe42a2718a838c2a2e16a408e055550" + integrity sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.8" + +"@babel/plugin-transform-dotall-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz#5f8bf8a680f2116a7207e16288a5f974ad47a7a0" + integrity sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-duplicate-keys@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz#dd20102897c9a2324e5adfffb67ff3610359a8ee" + integrity sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz#809af7e3339466b49c034c683964ee8afb3e2604" + integrity sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.0" + "@babel/helper-plugin-utils" "^7.24.8" + +"@babel/plugin-transform-dynamic-import@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz#4d8b95e3bae2b037673091aa09cd33fecd6419f4" + integrity sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-transform-exponentiation-operator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz#b629ee22645f412024297d5245bce425c31f9b0d" + integrity sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-export-namespace-from@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz#176d52d8d8ed516aeae7013ee9556d540c53f197" + integrity sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-transform-for-of@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz#f25b33f72df1d8be76399e1b8f3f9d366eb5bc70" + integrity sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + +"@babel/plugin-transform-function-name@^7.25.1": + version "7.25.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz#b85e773097526c1a4fc4ba27322748643f26fc37" + integrity sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA== + dependencies: + "@babel/helper-compilation-targets" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/traverse" "^7.25.1" + +"@babel/plugin-transform-json-strings@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz#f3e9c37c0a373fee86e36880d45b3664cedaf73a" + integrity sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-transform-literals@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz#deb1ad14fc5490b9a65ed830e025bca849d8b5f3" + integrity sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.8" + +"@babel/plugin-transform-logical-assignment-operators@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz#a58fb6eda16c9dc8f9ff1c7b1ba6deb7f4694cb0" + integrity sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-transform-member-expression-literals@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz#3b4454fb0e302e18ba4945ba3246acb1248315df" + integrity sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-modules-amd@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz#65090ed493c4a834976a3ca1cde776e6ccff32d7" + integrity sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg== + dependencies: + "@babel/helper-module-transforms" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-modules-commonjs@^7.24.7", "@babel/plugin-transform-modules-commonjs@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz#ab6421e564b717cb475d6fff70ae7f103536ea3c" + integrity sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA== + dependencies: + "@babel/helper-module-transforms" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-simple-access" "^7.24.7" + +"@babel/plugin-transform-modules-systemjs@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz#8f46cdc5f9e5af74f3bd019485a6cbe59685ea33" + integrity sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw== + dependencies: + "@babel/helper-module-transforms" "^7.25.0" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-validator-identifier" "^7.24.7" + "@babel/traverse" "^7.25.0" + +"@babel/plugin-transform-modules-umd@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz#edd9f43ec549099620df7df24e7ba13b5c76efc8" + integrity sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A== + dependencies: + "@babel/helper-module-transforms" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz#9042e9b856bc6b3688c0c2e4060e9e10b1460923" + integrity sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-new-target@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz#31ff54c4e0555cc549d5816e4ab39241dfb6ab00" + integrity sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-nullish-coalescing-operator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz#1de4534c590af9596f53d67f52a92f12db984120" + integrity sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-transform-numeric-separator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz#bea62b538c80605d8a0fac9b40f48e97efa7de63" + integrity sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-transform-object-rest-spread@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz#d13a2b93435aeb8a197e115221cab266ba6e55d6" + integrity sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q== + dependencies: + "@babel/helper-compilation-targets" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.24.7" + +"@babel/plugin-transform-object-super@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz#66eeaff7830bba945dd8989b632a40c04ed625be" + integrity sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-replace-supers" "^7.24.7" + +"@babel/plugin-transform-optional-catch-binding@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz#00eabd883d0dd6a60c1c557548785919b6e717b4" + integrity sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-transform-optional-chaining@^7.24.7", "@babel/plugin-transform-optional-chaining@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz#bb02a67b60ff0406085c13d104c99a835cdf365d" + integrity sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-transform-parameters@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz#5881f0ae21018400e320fc7eb817e529d1254b68" + integrity sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-private-methods@^7.25.4": + version "7.25.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz#9bbefbe3649f470d681997e0b64a4b254d877242" + integrity sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.4" + "@babel/helper-plugin-utils" "^7.24.8" + +"@babel/plugin-transform-private-property-in-object@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz#4eec6bc701288c1fab5f72e6a4bbc9d67faca061" + integrity sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-transform-property-literals@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz#f0d2ed8380dfbed949c42d4d790266525d63bbdc" + integrity sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-react-display-name@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz#9caff79836803bc666bcfe210aeb6626230c293b" + integrity sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-react-jsx-development@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz#eaee12f15a93f6496d852509a850085e6361470b" + integrity sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.24.7" + +"@babel/plugin-transform-react-jsx@^7.24.7": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.2.tgz#e37e8ebfa77e9f0b16ba07fadcb6adb47412227a" + integrity sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/plugin-syntax-jsx" "^7.24.7" + "@babel/types" "^7.25.2" + +"@babel/plugin-transform-react-pure-annotations@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz#bdd9d140d1c318b4f28b29a00fb94f97ecab1595" + integrity sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-regenerator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz#021562de4534d8b4b1851759fd7af4e05d2c47f8" + integrity sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + regenerator-transform "^0.15.2" + +"@babel/plugin-transform-reserved-words@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz#80037fe4fbf031fc1125022178ff3938bb3743a4" + integrity sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-shorthand-properties@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz#85448c6b996e122fa9e289746140aaa99da64e73" + integrity sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-spread@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz#e8a38c0fde7882e0fb8f160378f74bd885cc7bb3" + integrity sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + +"@babel/plugin-transform-sticky-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz#96ae80d7a7e5251f657b5cf18f1ea6bf926f5feb" + integrity sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-template-literals@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz#a05debb4a9072ae8f985bcf77f3f215434c8f8c8" + integrity sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-typeof-symbol@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz#383dab37fb073f5bfe6e60c654caac309f92ba1c" + integrity sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.8" + +"@babel/plugin-transform-typescript@^7.24.7": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz#237c5d10de6d493be31637c6b9fa30b6c5461add" + integrity sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-create-class-features-plugin" "^7.25.0" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/plugin-syntax-typescript" "^7.24.7" + +"@babel/plugin-transform-unicode-escapes@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz#2023a82ced1fb4971630a2e079764502c4148e0e" + integrity sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-unicode-property-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz#9073a4cd13b86ea71c3264659590ac086605bbcd" + integrity sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-unicode-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz#dfc3d4a51127108099b19817c0963be6a2adf19f" + integrity sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-unicode-sets-regex@^7.25.4": + version "7.25.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz#be664c2a0697ffacd3423595d5edef6049e8946c" + integrity sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.2" + "@babel/helper-plugin-utils" "^7.24.8" + +"@babel/preset-env@^7.6.0": + version "7.25.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.25.4.tgz#be23043d43a34a2721cd0f676c7ba6f1481f6af6" + integrity sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw== + dependencies: + "@babel/compat-data" "^7.25.4" + "@babel/helper-compilation-targets" "^7.25.2" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-validator-option" "^7.24.8" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.3" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.0" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.0" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.7" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.0" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.24.7" + "@babel/plugin-syntax-import-attributes" "^7.24.7" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.24.7" + "@babel/plugin-transform-async-generator-functions" "^7.25.4" + "@babel/plugin-transform-async-to-generator" "^7.24.7" + "@babel/plugin-transform-block-scoped-functions" "^7.24.7" + "@babel/plugin-transform-block-scoping" "^7.25.0" + "@babel/plugin-transform-class-properties" "^7.25.4" + "@babel/plugin-transform-class-static-block" "^7.24.7" + "@babel/plugin-transform-classes" "^7.25.4" + "@babel/plugin-transform-computed-properties" "^7.24.7" + "@babel/plugin-transform-destructuring" "^7.24.8" + "@babel/plugin-transform-dotall-regex" "^7.24.7" + "@babel/plugin-transform-duplicate-keys" "^7.24.7" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.0" + "@babel/plugin-transform-dynamic-import" "^7.24.7" + "@babel/plugin-transform-exponentiation-operator" "^7.24.7" + "@babel/plugin-transform-export-namespace-from" "^7.24.7" + "@babel/plugin-transform-for-of" "^7.24.7" + "@babel/plugin-transform-function-name" "^7.25.1" + "@babel/plugin-transform-json-strings" "^7.24.7" + "@babel/plugin-transform-literals" "^7.25.2" + "@babel/plugin-transform-logical-assignment-operators" "^7.24.7" + "@babel/plugin-transform-member-expression-literals" "^7.24.7" + "@babel/plugin-transform-modules-amd" "^7.24.7" + "@babel/plugin-transform-modules-commonjs" "^7.24.8" + "@babel/plugin-transform-modules-systemjs" "^7.25.0" + "@babel/plugin-transform-modules-umd" "^7.24.7" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.24.7" + "@babel/plugin-transform-new-target" "^7.24.7" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.7" + "@babel/plugin-transform-numeric-separator" "^7.24.7" + "@babel/plugin-transform-object-rest-spread" "^7.24.7" + "@babel/plugin-transform-object-super" "^7.24.7" + "@babel/plugin-transform-optional-catch-binding" "^7.24.7" + "@babel/plugin-transform-optional-chaining" "^7.24.8" + "@babel/plugin-transform-parameters" "^7.24.7" + "@babel/plugin-transform-private-methods" "^7.25.4" + "@babel/plugin-transform-private-property-in-object" "^7.24.7" + "@babel/plugin-transform-property-literals" "^7.24.7" + "@babel/plugin-transform-regenerator" "^7.24.7" + "@babel/plugin-transform-reserved-words" "^7.24.7" + "@babel/plugin-transform-shorthand-properties" "^7.24.7" + "@babel/plugin-transform-spread" "^7.24.7" + "@babel/plugin-transform-sticky-regex" "^7.24.7" + "@babel/plugin-transform-template-literals" "^7.24.7" + "@babel/plugin-transform-typeof-symbol" "^7.24.8" + "@babel/plugin-transform-unicode-escapes" "^7.24.7" + "@babel/plugin-transform-unicode-property-regex" "^7.24.7" + "@babel/plugin-transform-unicode-regex" "^7.24.7" + "@babel/plugin-transform-unicode-sets-regex" "^7.25.4" + "@babel/preset-modules" "0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.6" + babel-plugin-polyfill-regenerator "^0.6.1" + core-js-compat "^3.37.1" + semver "^6.3.1" + +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-react@^7.0.0": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.24.7.tgz#480aeb389b2a798880bf1f889199e3641cbb22dc" + integrity sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-validator-option" "^7.24.7" + "@babel/plugin-transform-react-display-name" "^7.24.7" + "@babel/plugin-transform-react-jsx" "^7.24.7" + "@babel/plugin-transform-react-jsx-development" "^7.24.7" + "@babel/plugin-transform-react-pure-annotations" "^7.24.7" + +"@babel/preset-typescript@^7.23.3", "@babel/preset-typescript@^7.6.0": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz#66cd86ea8f8c014855671d5ea9a737139cbbfef1" + integrity sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-validator-option" "^7.24.7" + "@babel/plugin-syntax-jsx" "^7.24.7" + "@babel/plugin-transform-modules-commonjs" "^7.24.7" + "@babel/plugin-transform-typescript" "^7.24.7" + +"@babel/register@^7.22.5": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.24.6.tgz#59e21dcc79e1d04eed5377633b0f88029a6bef9e" + integrity sha512-WSuFCc2wCqMeXkz/i3yfAAsxwWflEgbVkZzivgAmXl/MxrXeoYFZOOPllbC8R8WTF7u61wSRQtDVZ1879cdu6w== + dependencies: + clone-deep "^4.0.1" + find-cache-dir "^2.0.0" + make-dir "^2.1.0" + pirates "^4.0.6" + source-map-support "^0.5.16" + +"@babel/regjsgen@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" + integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.4", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.6", "@babel/runtime@^7.16.7", "@babel/runtime@^7.17.2", "@babel/runtime@^7.18.0", "@babel/runtime@^7.18.3", "@babel/runtime@^7.2.0", "@babel/runtime@^7.20.0", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.6", "@babel/runtime@^7.23.9", "@babel/runtime@^7.24.4", "@babel/runtime@^7.24.5", "@babel/runtime@^7.24.7", "@babel/runtime@^7.24.8", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": + version "7.25.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.6.tgz#9afc3289f7184d8d7f98b099884c26317b9264d2" + integrity sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/template@^7.24.7", "@babel/template@^7.25.0", "@babel/template@^7.3.3", "@babel/template@^7.4.4": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a" + integrity sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/parser" "^7.25.0" + "@babel/types" "^7.25.0" + +"@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8", "@babel/traverse@^7.25.0", "@babel/traverse@^7.25.1", "@babel/traverse@^7.25.2", "@babel/traverse@^7.25.3", "@babel/traverse@^7.25.4": + version "7.25.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.6.tgz#04fad980e444f182ecf1520504941940a90fea41" + integrity sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/generator" "^7.25.6" + "@babel/parser" "^7.25.6" + "@babel/template" "^7.25.0" + "@babel/types" "^7.25.6" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.25.6", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.25.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.6.tgz#893942ddb858f32ae7a004ec9d3a76b3463ef8e6" + integrity sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw== + dependencies: + "@babel/helper-string-parser" "^7.24.8" + "@babel/helper-validator-identifier" "^7.24.7" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@csstools/cascade-layer-name-parser@^1.0.13": + version "1.0.13" + resolved "https://registry.yarnpkg.com/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.13.tgz#6900157489bc53da1f6a66eaccd432025f6cd6fb" + integrity sha512-MX0yLTwtZzr82sQ0zOjqimpZbzjMaK/h2pmlrLK7DCzlmiZLYFpoO94WmN1akRVo6ll/TdpHb53vihHLUMyvng== + +"@csstools/color-helpers@^4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-4.2.1.tgz#da573554220ccb59757f12de62bf70c6b15645d4" + integrity sha512-CEypeeykO9AN7JWkr1OEOQb0HRzZlPWGwV0Ya6DuVgFdDi6g3ma/cPZ5ZPZM4AWQikDpq/0llnGGlIL+j8afzw== + +"@csstools/css-calc@^1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-1.2.4.tgz#9d9fb0dca33666cf97659f8f2c343ed0210e0e73" + integrity sha512-tfOuvUQeo7Hz+FcuOd3LfXVp+342pnWUJ7D2y8NUpu1Ww6xnTbHLpz018/y6rtbHifJ3iIEf9ttxXd8KG7nL0Q== + +"@csstools/css-color-parser@^2.0.4": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-2.0.5.tgz#ce1fe52f23f35f37bea2cf61ac865115aa17880a" + integrity sha512-lRZSmtl+DSjok3u9hTWpmkxFZnz7stkbZxzKc08aDUsdrWwhSgWo8yq9rq9DaFUtbAyAq2xnH92fj01S+pwIww== + dependencies: + "@csstools/color-helpers" "^4.2.1" + "@csstools/css-calc" "^1.2.4" + +"@csstools/css-parser-algorithms@^2.3.1", "@csstools/css-parser-algorithms@^2.7.1": + version "2.7.1" + resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz#6d93a8f7d8aeb7cd9ed0868f946e46f021b6aa70" + integrity sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw== + +"@csstools/css-tokenizer@^2.2.0", "@csstools/css-tokenizer@^2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.4.1.tgz#1d8b2e200197cf5f35ceb07ca2dade31f3a00ae8" + integrity sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg== + +"@csstools/media-query-list-parser@^2.1.13", "@csstools/media-query-list-parser@^2.1.4": + version "2.1.13" + resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.13.tgz#f00be93f6bede07c14ddf51a168ad2748e4fe9e5" + integrity sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA== + +"@csstools/postcss-cascade-layers@^4.0.6": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.6.tgz#5a421cd2d5792d1eb8c28e682dc5f2c3b85cb045" + integrity sha512-Xt00qGAQyqAODFiFEJNkTpSUz5VfYqnDLECdlA/Vv17nl/OIV5QfTRHGAXrBGG5YcJyHpJ+GF9gF/RZvOQz4oA== + dependencies: + "@csstools/selector-specificity" "^3.1.1" + postcss-selector-parser "^6.0.13" + +"@csstools/postcss-color-function@^3.0.19": + version "3.0.19" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-3.0.19.tgz#8db83be25bb590a29549b0305bdaa74e76366c62" + integrity sha512-d1OHEXyYGe21G3q88LezWWx31ImEDdmINNDy0LyLNN9ChgN2bPxoubUPiHf9KmwypBMaHmNcMuA/WZOKdZk/Lg== + dependencies: + "@csstools/css-color-parser" "^2.0.4" + "@csstools/css-parser-algorithms" "^2.7.1" + "@csstools/css-tokenizer" "^2.4.1" + "@csstools/postcss-progressive-custom-properties" "^3.3.0" + "@csstools/utilities" "^1.0.0" + +"@csstools/postcss-color-mix-function@^2.0.19": + version "2.0.19" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.19.tgz#dd5c8cccd95613d11d8a8f96a57c148daa0e6306" + integrity sha512-mLvQlMX+keRYr16AuvuV8WYKUwF+D0DiCqlBdvhQ0KYEtcQl9/is9Ssg7RcIys8x0jIn2h1zstS4izckdZj9wg== + dependencies: + "@csstools/css-color-parser" "^2.0.4" + "@csstools/css-parser-algorithms" "^2.7.1" + "@csstools/css-tokenizer" "^2.4.1" + "@csstools/postcss-progressive-custom-properties" "^3.3.0" + "@csstools/utilities" "^1.0.0" + +"@csstools/postcss-content-alt-text@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-1.0.0.tgz#f69f74cd7ff679a912a444a274f67b9e0ce67127" + integrity sha512-SkHdj7EMM/57GVvSxSELpUg7zb5eAndBeuvGwFzYtU06/QXJ/h9fuK7wO5suteJzGhm3GDF/EWPCdWV2h1IGHQ== + dependencies: + "@csstools/css-parser-algorithms" "^2.7.1" + "@csstools/css-tokenizer" "^2.4.1" + "@csstools/postcss-progressive-custom-properties" "^3.3.0" + "@csstools/utilities" "^1.0.0" + +"@csstools/postcss-exponential-functions@^1.0.9": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.9.tgz#443b42c26c65b57a84a21d81075dacd93eeb7fd8" + integrity sha512-x1Avr15mMeuX7Z5RJUl7DmjhUtg+Amn5DZRD0fQ2TlTFTcJS8U1oxXQ9e5mA62S2RJgUU6db20CRoJyDvae2EQ== + dependencies: + "@csstools/css-calc" "^1.2.4" + "@csstools/css-parser-algorithms" "^2.7.1" + "@csstools/css-tokenizer" "^2.4.1" + +"@csstools/postcss-font-format-keywords@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-3.0.2.tgz#b504cfc60588ac39fa5d1c67ef3da802b1bd7701" + integrity sha512-E0xz2sjm4AMCkXLCFvI/lyl4XO6aN1NCSMMVEOngFDJ+k2rDwfr6NDjWljk1li42jiLNChVX+YFnmfGCigZKXw== + dependencies: + "@csstools/utilities" "^1.0.0" + postcss-value-parser "^4.2.0" + +"@csstools/postcss-gamut-mapping@^1.0.11": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.11.tgz#7f5b0457fc16df8e0f9dd2fbe86b7e5a0240592c" + integrity sha512-KrHGsUPXRYxboXmJ9wiU/RzDM7y/5uIefLWKFSc36Pok7fxiPyvkSHO51kh+RLZS1W5hbqw9qaa6+tKpTSxa5g== + dependencies: + "@csstools/css-color-parser" "^2.0.4" + "@csstools/css-parser-algorithms" "^2.7.1" + "@csstools/css-tokenizer" "^2.4.1" + +"@csstools/postcss-gradients-interpolation-method@^4.0.20": + version "4.0.20" + resolved "https://registry.yarnpkg.com/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.20.tgz#e2a165719798cd8b503865297d8095c857eba77f" + integrity sha512-ZFl2JBHano6R20KB5ZrB8KdPM2pVK0u+/3cGQ2T8VubJq982I2LSOvQ4/VtxkAXjkPkk1rXt4AD1ni7UjTZ1Og== + dependencies: + "@csstools/css-color-parser" "^2.0.4" + "@csstools/css-parser-algorithms" "^2.7.1" + "@csstools/css-tokenizer" "^2.4.1" + "@csstools/postcss-progressive-custom-properties" "^3.3.0" + "@csstools/utilities" "^1.0.0" + +"@csstools/postcss-hwb-function@^3.0.18": + version "3.0.18" + resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.18.tgz#267dc59c97033b1108e377c98c45c35b713ea66b" + integrity sha512-3ifnLltR5C7zrJ+g18caxkvSRnu9jBBXCYgnBznRjxm6gQJGnnCO9H6toHfywNdNr/qkiVf2dymERPQLDnjLRQ== + dependencies: + "@csstools/css-color-parser" "^2.0.4" + "@csstools/css-parser-algorithms" "^2.7.1" + "@csstools/css-tokenizer" "^2.4.1" + "@csstools/postcss-progressive-custom-properties" "^3.3.0" + "@csstools/utilities" "^1.0.0" + +"@csstools/postcss-ic-unit@^3.0.7": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.7.tgz#2a4428c0d19bd456b4bfd60dcbe9e7c4974dfcef" + integrity sha512-YoaNHH2wNZD+c+rHV02l4xQuDpfR8MaL7hD45iJyr+USwvr0LOheeytJ6rq8FN6hXBmEeoJBeXXgGmM8fkhH4g== + dependencies: + "@csstools/postcss-progressive-custom-properties" "^3.3.0" + "@csstools/utilities" "^1.0.0" + postcss-value-parser "^4.2.0" + +"@csstools/postcss-initial@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-initial/-/postcss-initial-1.0.1.tgz#5aa378de9bfd0e6e377433f8986bdecf579e1268" + integrity sha512-wtb+IbUIrIf8CrN6MLQuFR7nlU5C7PwuebfeEXfjthUha1+XZj2RVi+5k/lukToA24sZkYAiSJfHM8uG/UZIdg== + +"@csstools/postcss-is-pseudo-class@^4.0.8": + version "4.0.8" + resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.8.tgz#d2bcc6c2d86d9653c333926a9ea488c2fc221a7f" + integrity sha512-0aj591yGlq5Qac+plaWCbn5cpjs5Sh0daovYUKJUOMjIp70prGH/XPLp7QjxtbFXz3CTvb0H9a35dpEuIuUi3Q== + dependencies: + "@csstools/selector-specificity" "^3.1.1" + postcss-selector-parser "^6.0.13" + +"@csstools/postcss-light-dark-function@^1.0.8": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-1.0.8.tgz#4d4cdad50a9b54b6b3a79cf32bf1cd956e82b0d7" + integrity sha512-x0UtpCyVnERsplUeoaY6nEtp1HxTf4lJjoK/ULEm40DraqFfUdUSt76yoOyX5rGY6eeOUOkurHyYlFHVKv/pew== + dependencies: + "@csstools/css-parser-algorithms" "^2.7.1" + "@csstools/css-tokenizer" "^2.4.1" + "@csstools/postcss-progressive-custom-properties" "^3.3.0" + "@csstools/utilities" "^1.0.0" + +"@csstools/postcss-logical-float-and-clear@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-2.0.1.tgz#c70ed8293cc376b1572bf56794219f54dc58c54d" + integrity sha512-SsrWUNaXKr+e/Uo4R/uIsqJYt3DaggIh/jyZdhy/q8fECoJSKsSMr7nObSLdvoULB69Zb6Bs+sefEIoMG/YfOA== + +"@csstools/postcss-logical-overflow@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-1.0.1.tgz#d14631369f43ef989c7e32f051ddb6952a8ce35c" + integrity sha512-Kl4lAbMg0iyztEzDhZuQw8Sj9r2uqFDcU1IPl+AAt2nue8K/f1i7ElvKtXkjhIAmKiy5h2EY8Gt/Cqg0pYFDCw== + +"@csstools/postcss-logical-overscroll-behavior@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-1.0.1.tgz#9305a6f0d08bb7b5f1a228272951f72d3bf9d44f" + integrity sha512-+kHamNxAnX8ojPCtV8WPcUP3XcqMFBSDuBuvT6MHgq7oX4IQxLIXKx64t7g9LiuJzE7vd06Q9qUYR6bh4YnGpQ== + +"@csstools/postcss-logical-resize@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-resize/-/postcss-logical-resize-2.0.1.tgz#a46c1b51055db96fb63af3bfe58909c773aea377" + integrity sha512-W5Gtwz7oIuFcKa5SmBjQ2uxr8ZoL7M2bkoIf0T1WeNqljMkBrfw1DDA8/J83k57NQ1kcweJEjkJ04pUkmyee3A== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-logical-viewport-units@^2.0.11": + version "2.0.11" + resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.11.tgz#f87fcaecd33403e19cb4d77a19e62ede8ed4ec13" + integrity sha512-ElITMOGcjQtvouxjd90WmJRIw1J7KMP+M+O87HaVtlgOOlDt1uEPeTeii8qKGe2AiedEp0XOGIo9lidbiU2Ogg== + dependencies: + "@csstools/css-tokenizer" "^2.4.1" + "@csstools/utilities" "^1.0.0" + +"@csstools/postcss-media-minmax@^1.1.8": + version "1.1.8" + resolved "https://registry.yarnpkg.com/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.8.tgz#a90b576805312b1bea7bda7d1726402b7f5ef430" + integrity sha512-KYQCal2i7XPNtHAUxCECdrC7tuxIWQCW+s8eMYs5r5PaAiVTeKwlrkRS096PFgojdNCmHeG0Cb7njtuNswNf+w== + dependencies: + "@csstools/css-calc" "^1.2.4" + "@csstools/css-parser-algorithms" "^2.7.1" + "@csstools/css-tokenizer" "^2.4.1" + "@csstools/media-query-list-parser" "^2.1.13" + +"@csstools/postcss-media-queries-aspect-ratio-number-values@^2.0.11": + version "2.0.11" + resolved "https://registry.yarnpkg.com/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.11.tgz#bb93203839521e99101b6adbab72dc9d9b57c9bc" + integrity sha512-YD6jrib20GRGQcnOu49VJjoAnQ/4249liuz7vTpy/JfgqQ1Dlc5eD4HPUMNLOw9CWey9E6Etxwf/xc/ZF8fECA== + dependencies: + "@csstools/css-parser-algorithms" "^2.7.1" + "@csstools/css-tokenizer" "^2.4.1" + "@csstools/media-query-list-parser" "^2.1.13" + +"@csstools/postcss-nested-calc@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@csstools/postcss-nested-calc/-/postcss-nested-calc-3.0.2.tgz#72ae4d087987ab5596397f5c2e5db4403b81c4a9" + integrity sha512-ySUmPyawiHSmBW/VI44+IObcKH0v88LqFe0d09Sb3w4B1qjkaROc6d5IA3ll9kjD46IIX/dbO5bwFN/swyoyZA== + dependencies: + "@csstools/utilities" "^1.0.0" + postcss-value-parser "^4.2.0" + +"@csstools/postcss-normalize-display-values@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-3.0.2.tgz#9013e6ade2fbd4cd725438c9ff0b1000062cf20d" + integrity sha512-fCapyyT/dUdyPtrelQSIV+d5HqtTgnNP/BEG9IuhgXHt93Wc4CfC1bQ55GzKAjWrZbgakMQ7MLfCXEf3rlZJOw== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-oklab-function@^3.0.19": + version "3.0.19" + resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.19.tgz#3bd0719914780fb53558af11958d0f4e6d2f952e" + integrity sha512-e3JxXmxjU3jpU7TzZrsNqSX4OHByRC3XjItV3Ieo/JEQmLg5rdOL4lkv/1vp27gXemzfNt44F42k/pn0FpE21Q== + dependencies: + "@csstools/css-color-parser" "^2.0.4" + "@csstools/css-parser-algorithms" "^2.7.1" + "@csstools/css-tokenizer" "^2.4.1" + "@csstools/postcss-progressive-custom-properties" "^3.3.0" + "@csstools/utilities" "^1.0.0" + +"@csstools/postcss-progressive-custom-properties@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.3.0.tgz#20177d3fc61d8f170c4ee1686f3d2ab6eec27bbb" + integrity sha512-W2oV01phnILaRGYPmGFlL2MT/OgYjQDrL9sFlbdikMFi6oQkFki9B86XqEWR7HCsTZFVq7dbzr/o71B75TKkGg== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-relative-color-syntax@^2.0.19": + version "2.0.19" + resolved "https://registry.yarnpkg.com/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.19.tgz#246b3a782e88df58184943c2471209c3d2085d65" + integrity sha512-MxUMSNvio1WwuS6WRLlQuv6nNPXwIWUFzBBAvL/tBdWfiKjiJnAa6eSSN5gtaacSqUkQ/Ce5Z1OzLRfeaWhADA== + dependencies: + "@csstools/css-color-parser" "^2.0.4" + "@csstools/css-parser-algorithms" "^2.7.1" + "@csstools/css-tokenizer" "^2.4.1" + "@csstools/postcss-progressive-custom-properties" "^3.3.0" + "@csstools/utilities" "^1.0.0" + +"@csstools/postcss-scope-pseudo-class@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-3.0.1.tgz#c5454ea2fb3cf9beaf212d3a631a5c18cd4fbc14" + integrity sha512-3ZFonK2gfgqg29gUJ2w7xVw2wFJ1eNWVDONjbzGkm73gJHVCYK5fnCqlLr+N+KbEfv2XbWAO0AaOJCFB6Fer6A== + dependencies: + postcss-selector-parser "^6.0.13" + +"@csstools/postcss-stepped-value-functions@^3.0.10": + version "3.0.10" + resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.10.tgz#41cf7b2fc6abc9216b453137a35aeeeb056d70d9" + integrity sha512-MZwo0D0TYrQhT5FQzMqfy/nGZ28D1iFtpN7Su1ck5BPHS95+/Y5O9S4kEvo76f2YOsqwYcT8ZGehSI1TnzuX2g== + dependencies: + "@csstools/css-calc" "^1.2.4" + "@csstools/css-parser-algorithms" "^2.7.1" + "@csstools/css-tokenizer" "^2.4.1" + +"@csstools/postcss-text-decoration-shorthand@^3.0.7": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.7.tgz#58dc60bb0718f6ec7d0a41d4124cf45a6813aeaa" + integrity sha512-+cptcsM5r45jntU6VjotnkC9GteFR7BQBfZ5oW7inLCxj7AfLGAzMbZ60hKTP13AULVZBdxky0P8um0IBfLHVA== + dependencies: + "@csstools/color-helpers" "^4.2.1" + postcss-value-parser "^4.2.0" + +"@csstools/postcss-trigonometric-functions@^3.0.10": + version "3.0.10" + resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.10.tgz#0ad99b0a2a77cdd9c957b6e6e83221acf9b6afd8" + integrity sha512-G9G8moTc2wiad61nY5HfvxLiM/myX0aYK4s1x8MQlPH29WDPxHQM7ghGgvv2qf2xH+rrXhztOmjGHJj4jsEqXw== + dependencies: + "@csstools/css-calc" "^1.2.4" + "@csstools/css-parser-algorithms" "^2.7.1" + "@csstools/css-tokenizer" "^2.4.1" + +"@csstools/postcss-unset-value@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-3.0.1.tgz#598a25630fd9ab0edf066d235916f7441404942a" + integrity sha512-dbDnZ2ja2U8mbPP0Hvmt2RMEGBiF1H7oY6HYSpjteXJGihYwgxgTr6KRbbJ/V6c+4wd51M+9980qG4gKVn5ttg== + +"@csstools/selector-resolve-nested@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@csstools/selector-resolve-nested/-/selector-resolve-nested-1.1.0.tgz#d872f2da402d3ce8bd0cf16ea5f9fba76b18e430" + integrity sha512-uWvSaeRcHyeNenKg8tp17EVDRkpflmdyvbE0DHo6D/GdBb6PDnCYYU6gRpXhtICMGMcahQmj2zGxwFM/WC8hCg== + +"@csstools/selector-specificity@^3.0.0", "@csstools/selector-specificity@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz#63085d2995ca0f0e55aa8b8a07d69bfd48b844fe" + integrity sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA== + +"@csstools/utilities@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@csstools/utilities/-/utilities-1.0.0.tgz#42f3c213f2fb929324d465684ab9f46a0febd4bb" + integrity sha512-tAgvZQe/t2mlvpNosA4+CkMiZ2azISW5WPAcdSalZlEjQvUfghHxfQcrCiK/7/CrfAWVxyM88kGFYO82heIGDg== + +"@ctrl/tinycolor@^3.4.0", "@ctrl/tinycolor@^3.6.1": + version "3.6.1" + resolved "https://registry.yarnpkg.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz#b6c75a56a1947cc916ea058772d666a2c8932f31" + integrity sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA== + +"@discoveryjs/json-ext@^0.5.0": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== + +"@emotion/hash@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" + integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== + +"@emotion/unitless@^0.7.5": + version "0.7.5" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" + integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": + version "4.11.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae" + integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A== + +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.57.0": + version "8.57.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" + integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== + +"@humanwhocodes/config-array@^0.11.14": + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== + dependencies: + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== + +"@icons/material@^0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@icons/material/-/material-0.2.4.tgz#e90c9f71768b3736e76d7dd6783fc6c2afa88bc8" + integrity sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw== + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/nyc-config-babel@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/nyc-config-babel/-/nyc-config-babel-3.0.0.tgz#56d0a5250d92b9455c7507775fcb5cb7215fee29" + integrity sha512-mPnSPXfTRWCzYsT64PnuPlce6/hGMCdVVMgU2FenXipbUd+FDwUlqlTihXxpxWzcNVOp8M+L1t/kIcgoC8A7hg== + +"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + slash "^3.0.0" + +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== + dependencies: + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + ci-info "^3.2.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== + dependencies: + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== + dependencies: + jest-get-type "^29.6.3" + +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== + dependencies: + expect "^29.7.0" + jest-snapshot "^29.7.0" + +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== + dependencies: + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" + "@types/node" "*" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" + +"@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" + +"@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^6.0.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== + dependencies: + "@jridgewell/trace-mapping" "^0.3.18" + callsites "^3.0.0" + graceful-fs "^4.2.9" + +"@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== + dependencies: + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== + dependencies: + "@jest/test-result" "^29.7.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + slash "^3.0.0" + +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.2" + +"@jest/types@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" + integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^13.0.0" + +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== + dependencies: + "@jest/schemas" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/source-map@^0.3.3": + version "0.3.6" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" + integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@kurkle/color@^0.3.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@kurkle/color/-/color-0.3.2.tgz#5acd38242e8bde4f9986e7913c8fdf49d3aa199f" + integrity sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw== + +"@leichtgewicht/ip-codec@^2.0.1": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1" + integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw== + +"@mapbox/node-pre-gyp@^1.0.0": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz#417db42b7f5323d79e93b34a6d7a2a12c0df43fa" + integrity sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ== + dependencies: + detect-libc "^2.0.0" + https-proxy-agent "^5.0.0" + make-dir "^3.1.0" + node-fetch "^2.6.7" + nopt "^5.0.0" + npmlog "^5.0.1" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.11" + +"@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3": + version "2.1.8-no-fsevents.3" + resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz#323d72dd25103d0c4fbdce89dadf574a787b1f9b" + integrity sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ== + +"@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": + version "5.1.1-v1" + resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129" + integrity sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg== + dependencies: + eslint-scope "5.1.1" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" + integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== + +"@protobufjs/base64@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" + integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== + +"@protobufjs/codegen@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" + integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== + +"@protobufjs/eventemitter@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" + integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== + +"@protobufjs/fetch@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" + integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== + dependencies: + "@protobufjs/aspromise" "^1.1.1" + "@protobufjs/inquire" "^1.1.0" + +"@protobufjs/float@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" + integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== + +"@protobufjs/inquire@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" + integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== + +"@protobufjs/path@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" + integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== + +"@protobufjs/pool@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" + integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== + +"@protobufjs/utf8@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" + integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== + +"@rc-component/async-validator@^5.0.3": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@rc-component/async-validator/-/async-validator-5.0.4.tgz#5291ad92f00a14b6766fc81735c234277f83e948" + integrity sha512-qgGdcVIF604M9EqjNF0hbUTz42bz/RDtxWdWuU5EQe3hi7M8ob54B6B35rOsvX5eSvIHIzT9iH1R3n+hk3CGfg== + dependencies: + "@babel/runtime" "^7.24.4" + +"@rc-component/color-picker@~1.5.3": + version "1.5.3" + resolved "https://registry.yarnpkg.com/@rc-component/color-picker/-/color-picker-1.5.3.tgz#f3b0e14bb67ec5ee77d1fd5d261f63dd4fd00449" + integrity sha512-+tGGH3nLmYXTalVe0L8hSZNs73VTP5ueSHwUlDC77KKRaN7G4DS4wcpG5DTDzdcV/Yas+rzA6UGgIyzd8fS4cw== + dependencies: + "@babel/runtime" "^7.23.6" + "@ctrl/tinycolor" "^3.6.1" + classnames "^2.2.6" + rc-util "^5.38.1" + +"@rc-component/context@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@rc-component/context/-/context-1.4.0.tgz#dc6fb021d6773546af8f016ae4ce9aea088395e8" + integrity sha512-kFcNxg9oLRMoL3qki0OMxK+7g5mypjgaaJp/pkOis/6rVxma9nJBF/8kCIuTYHUQNr0ii7MxqE33wirPZLJQ2w== + dependencies: + "@babel/runtime" "^7.10.1" + rc-util "^5.27.0" + +"@rc-component/mini-decimal@^1.0.1": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@rc-component/mini-decimal/-/mini-decimal-1.1.0.tgz#7b7a362b14a0a54cb5bc6fd2b82731f29f11d9b0" + integrity sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ== + dependencies: + "@babel/runtime" "^7.18.0" + +"@rc-component/mutate-observer@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@rc-component/mutate-observer/-/mutate-observer-1.1.0.tgz#ee53cc88b78aade3cd0653609215a44779386fd8" + integrity sha512-QjrOsDXQusNwGZPf4/qRQasg7UFEj06XiCJ8iuiq/Io7CrHrgVi6Uuetw60WAMG1799v+aM8kyc+1L/GBbHSlw== + dependencies: + "@babel/runtime" "^7.18.0" + classnames "^2.3.2" + rc-util "^5.24.4" + +"@rc-component/portal@^1.0.0-8", "@rc-component/portal@^1.0.0-9", "@rc-component/portal@^1.0.2", "@rc-component/portal@^1.1.0", "@rc-component/portal@^1.1.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@rc-component/portal/-/portal-1.1.2.tgz#55db1e51d784e034442e9700536faaa6ab63fc71" + integrity sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg== + dependencies: + "@babel/runtime" "^7.18.0" + classnames "^2.3.2" + rc-util "^5.24.4" + +"@rc-component/tour@~1.14.2": + version "1.14.2" + resolved "https://registry.yarnpkg.com/@rc-component/tour/-/tour-1.14.2.tgz#142f0973975eb0e3af3c75aa868ffc9d8ba27cae" + integrity sha512-A75DZ8LVvahBIvxooj3Gvf2sxe+CGOkmzPNX7ek0i0AJHyKZ1HXe5ieIGo3m0FMdZfVOlbCJ952Duq8VKAHk6g== + dependencies: + "@babel/runtime" "^7.18.0" + "@rc-component/portal" "^1.0.0-9" + "@rc-component/trigger" "^2.0.0" + classnames "^2.3.2" + rc-util "^5.24.4" + +"@rc-component/trigger@^2.0.0", "@rc-component/trigger@^2.1.1": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@rc-component/trigger/-/trigger-2.2.2.tgz#7c8c27ce92cacbb32b1cda70f0533fe52202c41d" + integrity sha512-xDyi0fJ3IV6XJEReMOewS9PEnnuLHKz4rjbgIniDsJFHjL5nROuUlu64mfo90jglLDkQUxRwK7aTtumA65/zYQ== + dependencies: + "@babel/runtime" "^7.23.2" + "@rc-component/portal" "^1.1.0" + classnames "^2.3.2" + rc-motion "^2.0.0" + rc-resize-observer "^1.3.1" + rc-util "^5.38.0" + +"@react-awesome-query-builder/antd@^6.5.2": + version "6.6.3" + resolved "https://registry.yarnpkg.com/@react-awesome-query-builder/antd/-/antd-6.6.3.tgz#f0361ba6ba42ae1559daa66d30acc53dd012fdf4" + integrity sha512-aLBPwfbuE5F8oON02e305daZvj49QEbYy3MNuBc6NvxTSCyBI1scCm2YQmuXQlhnSeOvD6ZXRuELvw4L7/dEmw== + dependencies: + "@react-awesome-query-builder/ui" "^6.6.3" + lodash "^4.17.21" + prop-types "^15.8.1" + rc-picker "^4.5.0" + +"@react-awesome-query-builder/core@^6.6.3": + version "6.6.3" + resolved "https://registry.yarnpkg.com/@react-awesome-query-builder/core/-/core-6.6.3.tgz#d9d56cad5f5570e9e102846232e8a7ded7bb5da9" + integrity sha512-+631G0kojyUfJYNiMU/Su/bJPiwFA9o5XEQXr5VGxIJDnfs+zU+iqg2CeUlqknRKOdRgqylJbi5ZXKVqRLDsxA== + dependencies: + "@babel/runtime" "^7.24.5" + clone "^2.1.2" + i18next "^23.11.5" + immutable "^4.3.6" + json-logic-js "^2.0.2" + lodash "^4.17.21" + moment "^2.30.1" + spel2js "^0.2.8" + sqlstring "^2.3.3" + +"@react-awesome-query-builder/ui@^6.6.3": + version "6.6.3" + resolved "https://registry.yarnpkg.com/@react-awesome-query-builder/ui/-/ui-6.6.3.tgz#51b24d17a9dd2668211e9dac64fe02bb85e086c0" + integrity sha512-cuCKn8Mto5vTjfmvJrFiM/ETopLXcPnyQ2PKc8gt+dpfLs7UzYLWBF+V72aYMiPfAMA27Jf2+aPNEGD2x0LemA== + dependencies: + "@react-awesome-query-builder/core" "^6.6.3" + classnames "^2.5.1" + lodash "^4.17.21" + prop-types "^15.8.1" + react-redux "^8.1.3" + redux "^4.2.1" + +"@rtsao/scc@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" + integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== + +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@sinonjs/commons@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" + integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^10.0.2": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== + dependencies: + "@sinonjs/commons" "^3.0.0" + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + +"@types/babel__core@^7.1.14": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.8" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" + integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.20.6" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" + integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== + dependencies: + "@babel/types" "^7.20.7" + +"@types/body-parser@*": + version "1.19.5" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" + integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/bonjour@^3.5.9": + version "3.5.13" + resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.13.tgz#adf90ce1a105e81dd1f9c61fdc5afda1bfb92956" + integrity sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ== + dependencies: + "@types/node" "*" + +"@types/connect-history-api-fallback@^1.3.5": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz#7de71645a103056b48ac3ce07b3520b819c1d5b3" + integrity sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw== + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.38" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== + dependencies: + "@types/node" "*" + +"@types/cookie@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.3.3.tgz#85bc74ba782fb7aa3a514d11767832b0e3bc6803" + integrity sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow== + +"@types/debug@^4.0.0": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== + dependencies: + "@types/ms" "*" + +"@types/estree@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== + +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": + version "4.19.5" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz#218064e321126fcf9048d1ca25dd2465da55d9c6" + integrity sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express@*", "@types/express@^4.17.13": + version "4.17.21" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" + integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/fabric@^4.5.7": + version "4.5.15" + resolved "https://registry.yarnpkg.com/@types/fabric/-/fabric-4.5.15.tgz#2b7a32717376e7c8768d144397e45a16693d9159" + integrity sha512-cjrHhi6R62rFtfqSopPoUEvnidhMngXBaDs6adrVIkY92o3bjWIIQ2InV0vaD262N/GurDrzJS2ih4TgY9gGAQ== + +"@types/graceful-fs@^4.1.3": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== + dependencies: + "@types/node" "*" + +"@types/hast@^2.0.0": + version "2.3.10" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.10.tgz#5c9d9e0b304bbb8879b857225c5ebab2d81d7643" + integrity sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw== + dependencies: + "@types/unist" "^2" + +"@types/history@^4.7.11": + version "4.7.11" + resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.11.tgz#56588b17ae8f50c53983a524fc3cc47437969d64" + integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA== + +"@types/hoist-non-react-statics@^3.0.1", "@types/hoist-non-react-statics@^3.3.0", "@types/hoist-non-react-statics@^3.3.1": + version "3.3.5" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz#dab7867ef789d87e2b4b0003c9d65c49cc44a494" + integrity sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg== + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + +"@types/html-minifier-terser@^6.0.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" + integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== + +"@types/http-errors@*": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" + integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== + +"@types/http-proxy@^1.17.8": + version "1.17.15" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.15.tgz#12118141ce9775a6499ecb4c01d02f90fc839d36" + integrity sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== + +"@types/istanbul-lib-report@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^1.1.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" + integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== + dependencies: + "@types/istanbul-lib-coverage" "*" + "@types/istanbul-lib-report" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jsdom@^20.0.0": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-20.0.1.tgz#07c14bc19bd2f918c1929541cdaacae894744808" + integrity sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ== + dependencies: + "@types/node" "*" + "@types/tough-cookie" "*" + parse5 "^7.0.0" + +"@types/json-logic-js@^2.0.2": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@types/json-logic-js/-/json-logic-js-2.0.7.tgz#09a70a932d0be937618a9fc791291b069e637fb0" + integrity sha512-fucvZmbjqa1+gpw/nIwcP+ZIYHTvmwxuQQFKw/yU7+ZSD63z/xgY5pWN7sYUDRzg2Wf9STapL+7c66FNzhU6+Q== + +"@types/json-schema@^7.0.12", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/lodash@^4.14.191": + version "4.17.7" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.7.tgz#2f776bcb53adc9e13b2c0dfd493dfcbd7de43612" + integrity sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA== + +"@types/long@^4.0.1": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" + integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== + +"@types/lru-cache@^7.10.10": + version "7.10.10" + resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-7.10.10.tgz#3fa937c35ff4b3f6753d5737915c9bf8e693a713" + integrity sha512-nEpVRPWW9EBmx2SCfNn3ClYxPL7IktPX12HhIoSc/H5mMjdeW3+YsXIpseLQ2xF35+OcpwKQbEUw5VtqE4PDNA== + dependencies: + lru-cache "*" + +"@types/mdast@^3.0.0": + version "3.0.15" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.15.tgz#49c524a263f30ffa28b71ae282f813ed000ab9f5" + integrity sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ== + dependencies: + "@types/unist" "^2" + +"@types/mime@^1": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" + integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== + +"@types/minimist@^1.2.2": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.5.tgz#ec10755e871497bcd83efe927e43ec46e8c0747e" + integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== + +"@types/mousetrap@^1.6.5": + version "1.6.15" + resolved "https://registry.yarnpkg.com/@types/mousetrap/-/mousetrap-1.6.15.tgz#f144a0c539a4cef553a631824651d48267e53c86" + integrity sha512-qL0hyIMNPow317QWW/63RvL1x5MVMV+Ru3NaY9f/CuEpCqrmb7WeuK2071ZY5hczOnm38qExWM2i2WtkXLSqFw== + +"@types/ms@*": + version "0.7.34" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" + integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== + +"@types/node-forge@^1.3.0": + version "1.3.11" + resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.11.tgz#0972ea538ddb0f4d9c2fa0ec5db5724773a604da" + integrity sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ== + dependencies: + "@types/node" "*" + +"@types/node@*", "@types/node@>=13.7.0": + version "22.5.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.5.2.tgz#e42344429702e69e28c839a7e16a8262a8086793" + integrity sha512-acJsPTEqYqulZS/Yp/S3GgeE6GZ0qYODUR8aVr/DkhHQ8l9nd4j5x1/ZJy9/gHrRlFMqkO6i0I3E27Alu4jjPg== + dependencies: + undici-types "~6.19.2" + +"@types/node@^18.0.3": + version "18.19.48" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.48.tgz#3a1696f4a7298d8831ed9ce47db62bf4c62c8880" + integrity sha512-7WevbG4ekUcRQSZzOwxWgi5dZmTak7FaxXDoW7xVxPBmKx1rTzfmRLkeCgJzcbBnOV2dkhAPc8cCeT6agocpjg== + dependencies: + undici-types "~5.26.4" + +"@types/normalize-package-data@^2.4.0": + version "2.4.4" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" + integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== + +"@types/parse5@^6.0.0": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-6.0.3.tgz#705bb349e789efa06f43f128cef51240753424cb" + integrity sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g== + +"@types/platform@^1.3.4": + version "1.3.6" + resolved "https://registry.yarnpkg.com/@types/platform/-/platform-1.3.6.tgz#23ec79503857be56a9de213c763257876a710730" + integrity sha512-ZmSaqHuvzv+jC232cFoz2QqPUkaj6EvMmCrWcx3WRr7xTPVFCMUOTcOq8m2d+Zw1iKRc1kDiaA+jtNrV0hkVew== + +"@types/polylabel@^1.0.5": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@types/polylabel/-/polylabel-1.1.3.tgz#15aba4277b03ac0ab60a0dea75a13bde45dcfc01" + integrity sha512-9Zw2KoDpi+T4PZz2G6pO2xArE0m/GSMTW1MIxF2s8ZY8x9XDO6fv9um0ydRGvcbkFLlaq8yNK6eZxnmMZtDgWQ== + +"@types/prismjs@^1.0.0": + version "1.26.4" + resolved "https://registry.yarnpkg.com/@types/prismjs/-/prismjs-1.26.4.tgz#1a9e1074619ce1d7322669e5b46fbe823925103a" + integrity sha512-rlAnzkW2sZOjbqZ743IHUhFcvzaGbqijwOu8QZnZCjfQzBqFE3s4lOTJEsxikImav9uzz/42I+O7YUs1mWgMlg== + +"@types/prop-types@*", "@types/prop-types@^15.0.0": + version "15.7.12" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" + integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== + +"@types/q@^1.5.1": + version "1.5.8" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.8.tgz#95f6c6a08f2ad868ba230ead1d2d7f7be3db3837" + integrity sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw== + +"@types/qs@*": + version "6.9.15" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.15.tgz#adde8a060ec9c305a82de1babc1056e73bd64dce" + integrity sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg== + +"@types/range-parser@*": + version "1.2.7" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" + integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== + +"@types/react-color@^3.0.5": + version "3.0.12" + resolved "https://registry.yarnpkg.com/@types/react-color/-/react-color-3.0.12.tgz#231e75f11dd6805bdf1c954774588fefc8172f30" + integrity sha512-pr3uKE3lSvf7GFo1Rn2K3QktiZQFFrSgSGJ/3iMvSOYWt2pPAJ97rVdVfhWxYJZ8prAEXzoP2XX//3qGSQgu7Q== + dependencies: + "@types/react" "*" + "@types/reactcss" "*" + +"@types/react-dom@18.2.19": + version "18.2.19" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.19.tgz#b84b7c30c635a6c26c6a6dfbb599b2da9788be58" + integrity sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA== + dependencies: + "@types/react" "*" + +"@types/react-grid-layout@^1.3.2": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/react-grid-layout/-/react-grid-layout-1.3.5.tgz#f4b52bf27775290ee0523214be0987be14e66823" + integrity sha512-WH/po1gcEcoR6y857yAnPGug+ZhkF4PaTUxgAbwfeSH/QOgVSakKHBXoPGad/sEznmkiaK3pqHk+etdWisoeBQ== + dependencies: + "@types/react" "*" + +"@types/react-redux@^7.1.18": + version "7.1.33" + resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.33.tgz#53c5564f03f1ded90904e3c90f77e4bd4dc20b15" + integrity sha512-NF8m5AjWCkert+fosDsN3hAlHzpjSiXlVy9EgQEmLoBhaNXbmyeGs/aj5dQzKuF+/q+S7JQagorGDW8pJ28Hmg== + dependencies: + "@types/hoist-non-react-statics" "^3.3.0" + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + redux "^4.0.0" + +"@types/react-resizable@^3.0.8": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@types/react-resizable/-/react-resizable-3.0.8.tgz#b27001b4d262c82cc076272df4b8ef91d9487918" + integrity sha512-Pcvt2eGA7KNXldt1hkhVhAgZ8hK41m0mp89mFgQi7LAAEZiaLgm4fHJ5zbJZ/4m2LVaAyYrrRRv1LHDcrGQanA== + dependencies: + "@types/react" "*" + +"@types/react-router-dom@^5.1.9": + version "5.3.3" + resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83" + integrity sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router" "*" + +"@types/react-router@*", "@types/react-router@^5.1.16": + version "5.1.20" + resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.20.tgz#88eccaa122a82405ef3efbcaaa5dcdd9f021387c" + integrity sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + +"@types/react@*", "@types/react@18.2.55": + version "18.2.55" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.55.tgz#38141821b7084404b5013742bc4ae08e44da7a67" + integrity sha512-Y2Tz5P4yz23brwm2d7jNon39qoAtMMmalOQv6+fEFt1mT+FcM3D841wDpoUvFXhaYenuROCy3FZYqdTjM7qVyA== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/reactcss@*": + version "1.2.12" + resolved "https://registry.yarnpkg.com/@types/reactcss/-/reactcss-1.2.12.tgz#57f6f046e7aafbe0288689bd96a2d5664378ca7b" + integrity sha512-BrXUQ86/wbbFiZv8h/Q1/Q1XOsaHneYmCb/tHe9+M8XBAAUc2EHfdY0DY22ZZjVSaXr5ix7j+zsqO2eGZub8lQ== + dependencies: + "@types/react" "*" + +"@types/redux-logger@^3.0.9": + version "3.0.13" + resolved "https://registry.yarnpkg.com/@types/redux-logger/-/redux-logger-3.0.13.tgz#473e98428cdcc6dc93c908de66732bf932e36bc8" + integrity sha512-jylqZXQfMxahkuPcO8J12AKSSCQngdEWQrw7UiLUJzMBcv1r4Qg77P6mjGLjM27e5gFQDPD8vwUMJ9AyVxFSsg== + dependencies: + redux "^5.0.0" + +"@types/resize-observer-browser@^0.1.6": + version "0.1.11" + resolved "https://registry.yarnpkg.com/@types/resize-observer-browser/-/resize-observer-browser-0.1.11.tgz#d3c98d788489d8376b7beac23863b1eebdd3c13c" + integrity sha512-cNw5iH8JkMkb3QkCoe7DaZiawbDQEUX8t7iuQaRTyLOyQCR2h+ibBD4GJt7p5yhUHrlOeL7ZtbxNHeipqNsBzQ== + +"@types/retry@0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== + +"@types/scheduler@*": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.23.0.tgz#0a6655b3e2708eaabca00b7372fafd7a792a7b09" + integrity sha512-YIoDCTH3Af6XM5VuwGG/QL/CJqga1Zm3NkU3HZ4ZHK2fRMPYP1VczsTUqtsf43PH/iJNVlPHAo2oWX7BSdB2Hw== + +"@types/semver@^7.3.12", "@types/semver@^7.5.0": + version "7.5.8" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== + +"@types/send@*": + version "0.17.4" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" + integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/serve-index@^1.9.1": + version "1.9.4" + resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.4.tgz#e6ae13d5053cb06ed36392110b4f9a49ac4ec898" + integrity sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug== + dependencies: + "@types/express" "*" + +"@types/serve-static@*", "@types/serve-static@^1.13.10": + version "1.15.7" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" + integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== + dependencies: + "@types/http-errors" "*" + "@types/node" "*" + "@types/send" "*" + +"@types/sockjs@^0.3.33": + version "0.3.36" + resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535" + integrity sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q== + dependencies: + "@types/node" "*" + +"@types/stack-utils@^2.0.0": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== + +"@types/stats.js@*": + version "0.17.3" + resolved "https://registry.yarnpkg.com/@types/stats.js/-/stats.js-0.17.3.tgz#705446e12ce0fad618557dd88236f51148b7a935" + integrity sha512-pXNfAD3KHOdif9EQXZ9deK82HVNaXP5ZIF5RP2QG6OQFNTaY2YIetfrE9t528vEreGQvEPRDDc8muaoYeK0SxQ== + +"@types/three@^0.156.0": + version "0.156.0" + resolved "https://registry.yarnpkg.com/@types/three/-/three-0.156.0.tgz#cd49f2a12e858400962ea818d1e1c45e638141a8" + integrity sha512-733bXDSRdlrxqOmQuOmfC1UBRuJ2pREPk8sWnx9MtIJEVDQMx8U0NQO5MVVaOrjzDPyLI+cFPim2X/ss9v0+LQ== + dependencies: + "@types/stats.js" "*" + "@types/webxr" "*" + fflate "~0.6.10" + meshoptimizer "~0.18.1" + +"@types/tough-cookie@*": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304" + integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== + +"@types/unist@^2", "@types/unist@^2.0.0", "@types/unist@^2.0.2": + version "2.0.11" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.11.tgz#11af57b127e32487774841f7a4e54eab166d03c4" + integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA== + +"@types/use-sync-external-store@^0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43" + integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA== + +"@types/webxr@*": + version "0.5.20" + resolved "https://registry.yarnpkg.com/@types/webxr/-/webxr-0.5.20.tgz#b16b681af314ec011b2e8221b0a072d691c04953" + integrity sha512-JGpU6qiIJQKUuVSKx1GtQnHJGxRjtfGIhzO2ilq43VZZS//f1h1Sgexbdk+Lq+7569a6EYhOWrUpIruR/1Enmg== + +"@types/ws@^8.5.5": + version "8.5.12" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.12.tgz#619475fe98f35ccca2a2f6c137702d85ec247b7e" + integrity sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ== + dependencies: + "@types/node" "*" + +"@types/yargs-parser@*": + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== + +"@types/yargs@^13.0.0": + version "13.0.12" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.12.tgz#d895a88c703b78af0465a9de88aa92c61430b092" + integrity sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ== + dependencies: + "@types/yargs-parser" "*" + +"@types/yargs@^17.0.8": + version "17.0.33" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" + integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^6.13.1": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3" + integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA== + dependencies: + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/type-utils" "6.21.0" + "@typescript-eslint/utils" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.4" + natural-compare "^1.4.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/parser@^6.13.1": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" + integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== + dependencies: + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + +"@typescript-eslint/scope-manager@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" + integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== + dependencies: + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + +"@typescript-eslint/type-utils@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e" + integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag== + dependencies: + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/utils" "6.21.0" + debug "^4.3.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/types@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== + +"@typescript-eslint/types@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" + integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== + +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/typescript-estree@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" + integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== + dependencies: + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "9.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/utils@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134" + integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" + semver "^7.5.4" + +"@typescript-eslint/utils@^5.10.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" + integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + eslint-scope "^5.1.1" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== + dependencies: + "@typescript-eslint/types" "5.62.0" + eslint-visitor-keys "^3.3.0" + +"@typescript-eslint/visitor-keys@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" + integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== + dependencies: + "@typescript-eslint/types" "6.21.0" + eslint-visitor-keys "^3.4.1" + +"@uiw/copy-to-clipboard@~1.0.12": + version "1.0.17" + resolved "https://registry.yarnpkg.com/@uiw/copy-to-clipboard/-/copy-to-clipboard-1.0.17.tgz#86f501ddc8a6db0b45e6899bcd9d48e0b78f233e" + integrity sha512-O2GUHV90Iw2VrSLVLK0OmNIMdZ5fgEg4NhvtwINsX+eZ/Wf6DWD0TdsK9xwV7dNRnK/UI2mQtl0a2/kRgm1m1A== + +"@uiw/react-markdown-preview@^4.2.1": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@uiw/react-markdown-preview/-/react-markdown-preview-4.2.2.tgz#5ea697ff91c875caf70e9b81fb428d72380fdd2c" + integrity sha512-Jy3GtAqcF2pKgvFtgLUEwR8u2t0Yk/DAnLTl6cf1RzhNYcAxm1auDs3KndZRBDP01xhmYLX4KiOcOg/qv+Jc0A== + dependencies: + "@babel/runtime" "^7.17.2" + "@uiw/copy-to-clipboard" "~1.0.12" + react-markdown "~8.0.0" + rehype-attr "~2.1.0" + rehype-autolink-headings "~6.1.1" + rehype-ignore "^1.0.1" + rehype-prism-plus "1.6.3" + rehype-raw "^6.1.1" + rehype-rewrite "~3.0.6" + rehype-slug "~5.1.0" + remark-gfm "~3.0.1" + unist-util-visit "^4.1.0" + +"@uiw/react-md-editor@^3.22.0": + version "3.25.6" + resolved "https://registry.yarnpkg.com/@uiw/react-md-editor/-/react-md-editor-3.25.6.tgz#76af93ab42280cb3f942e6b3f87ee8680ceb8828" + integrity sha512-YuDv5KiM931WFYBDCyk9/HvtLdIWk9DXvzC6d1riaLufvchM7IUHkqTkSl3HqmTod1exSN+5ZsUtKZ+S+GAsug== + dependencies: + "@babel/runtime" "^7.14.6" + "@uiw/react-markdown-preview" "^4.2.1" + rehype "~12.0.1" + rehype-prism-plus "~1.6.1" + +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + +"@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.12.1.tgz#bb16a0e8b1914f979f45864c23819cc3e3f0d4bb" + integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + +"@webassemblyjs/floating-point-hex-parser@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" + integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== + +"@webassemblyjs/helper-api-error@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" + integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== + +"@webassemblyjs/helper-buffer@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz#6df20d272ea5439bf20ab3492b7fb70e9bfcb3f6" + integrity sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw== + +"@webassemblyjs/helper-numbers@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" + integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" + integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== + +"@webassemblyjs/helper-wasm-section@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz#3da623233ae1a60409b509a52ade9bc22a37f7bf" + integrity sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/wasm-gen" "1.12.1" + +"@webassemblyjs/ieee754@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" + integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" + integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" + integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== + +"@webassemblyjs/wasm-edit@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz#9f9f3ff52a14c980939be0ef9d5df9ebc678ae3b" + integrity sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/helper-wasm-section" "1.12.1" + "@webassemblyjs/wasm-gen" "1.12.1" + "@webassemblyjs/wasm-opt" "1.12.1" + "@webassemblyjs/wasm-parser" "1.12.1" + "@webassemblyjs/wast-printer" "1.12.1" + +"@webassemblyjs/wasm-gen@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz#a6520601da1b5700448273666a71ad0a45d78547" + integrity sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wasm-opt@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz#9e6e81475dfcfb62dab574ac2dda38226c232bc5" + integrity sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-buffer" "1.12.1" + "@webassemblyjs/wasm-gen" "1.12.1" + "@webassemblyjs/wasm-parser" "1.12.1" + +"@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz#c47acb90e6f083391e3fa61d113650eea1e95937" + integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/helper-api-error" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wast-printer@1.12.1": + version "1.12.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz#bcecf661d7d1abdaf989d8341a4833e33e2b31ac" + integrity sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA== + dependencies: + "@webassemblyjs/ast" "1.12.1" + "@xtuc/long" "4.2.2" + +"@webpack-cli/configtest@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.1.1.tgz#3b2f852e91dac6e3b85fb2a314fb8bef46d94646" + integrity sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw== + +"@webpack-cli/info@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.2.tgz#cc3fbf22efeb88ff62310cf885c5b09f44ae0fdd" + integrity sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A== + +"@webpack-cli/serve@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e" + integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +abab@^2.0.5, abab@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + +acorn-globals@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3" + integrity sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q== + dependencies: + acorn "^8.1.0" + acorn-walk "^8.0.2" + +acorn-import-attributes@^1.9.5: + version "1.9.5" + resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef" + integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ== + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + +acorn-walk@^8.0.2: + version "8.3.3" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.3.tgz#9caeac29eefaa0c41e3d4c65137de4d6f34df43e" + integrity sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw== + dependencies: + acorn "^8.11.0" + +acorn@^7.1.1: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +acorn@^8.1.0, acorn@^8.11.0, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.1, acorn@^8.8.2, acorn@^8.9.0: + version "8.12.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" + integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== + +add-dom-event-listener@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz#6a92db3a0dd0abc254e095c0f1dc14acbbaae310" + integrity sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw== + dependencies: + object-assign "4.x" + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +airbnb@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/airbnb/-/airbnb-0.0.2.tgz#8d949cce0e6c653b7d0fa430fc27ed77483a619c" + integrity sha512-eC+7zzGrcM///BKt04V23v+W3b9dWDUltOzo0j5lzjhvvMc4EiSxh55k2vlVnHTZ0igqA8/i/1j2j+m7UlZ54w== + dependencies: + chalk "^2.4.2" + +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + +ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv-keywords@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + +ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.0, ajv@^8.0.1, ajv@^8.9.0: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-escapes@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6" + integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== + dependencies: + type-fest "^1.0.2" + +ansi-html-community@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" + integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== + +ansi-regex@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== + +ansi-regex@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" + integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +ansi-styles@^6.0.0, ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +antd@5.17.1: + version "5.17.1" + resolved "https://registry.yarnpkg.com/antd/-/antd-5.17.1.tgz#a4e00e2f2fc0e649db7f6f18a7a87ac6fb9742ee" + integrity sha512-cYjVCXH65bbSm54zW1It5YspHlnp4la9pEp/ZXj8UvK8g6rcFyVYh6PBHmwPjmtC6YewA4xkW5zEb3skWRkODA== + dependencies: + "@ant-design/colors" "^7.0.2" + "@ant-design/cssinjs" "^1.19.1" + "@ant-design/icons" "^5.3.7" + "@ant-design/react-slick" "~1.1.2" + "@babel/runtime" "^7.24.5" + "@ctrl/tinycolor" "^3.6.1" + "@rc-component/color-picker" "~1.5.3" + "@rc-component/mutate-observer" "^1.1.0" + "@rc-component/tour" "~1.14.2" + "@rc-component/trigger" "^2.1.1" + classnames "^2.5.1" + copy-to-clipboard "^3.3.3" + dayjs "^1.11.10" + qrcode.react "^3.1.0" + rc-cascader "~3.25.0" + rc-checkbox "~3.2.0" + rc-collapse "~3.7.3" + rc-dialog "~9.4.0" + rc-drawer "~7.1.0" + rc-dropdown "~4.2.0" + rc-field-form "~2.0.1" + rc-image "~7.6.0" + rc-input "~1.4.5" + rc-input-number "~9.0.0" + rc-mentions "~2.11.1" + rc-menu "~9.13.0" + rc-motion "^2.9.0" + rc-notification "~5.4.0" + rc-pagination "~4.0.4" + rc-picker "~4.5.0" + rc-progress "~4.0.0" + rc-rate "~2.12.0" + rc-resize-observer "^1.4.0" + rc-segmented "~2.3.0" + rc-select "~14.13.3" + rc-slider "~10.6.2" + rc-steps "~6.0.1" + rc-switch "~4.1.0" + rc-table "~7.45.5" + rc-tabs "~15.0.0 " + rc-textarea "~1.6.3" + rc-tooltip "~6.2.0" + rc-tree "~5.8.7" + rc-tree-select "~5.20.0" + rc-upload "~4.5.2" + rc-util "^5.39.3" + scroll-into-view-if-needed "^3.1.0" + throttle-debounce "^5.0.0" + +anymatch@^3.0.3, anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +append-transform@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-2.0.0.tgz#99d9d29c7b38391e6f428d28ce136551f0b77e12" + integrity sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg== + dependencies: + default-require-extensions "^3.0.0" + +"aproba@^1.0.3 || ^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +archy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== + +are-we-there-yet@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" + integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +aria-query@~5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" + integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== + dependencies: + deep-equal "^2.0.5" + +array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== + dependencies: + call-bind "^1.0.5" + is-array-buffer "^3.0.4" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-includes@^3.1.6, array-includes@^3.1.8: + version "3.1.8" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" + integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" + is-string "^1.0.7" + +array-tree-filter@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz#873ac00fec83749f255ac8dd083814b4f6329190" + integrity sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.findlast@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" + integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" + +array.prototype.findlastindex@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" + integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" + +array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.reduce@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz#6aadc2f995af29cb887eb866d981dc85ab6f7dc7" + integrity sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-array-method-boxes-properly "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + is-string "^1.0.7" + +array.prototype.tosorted@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" + integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.3" + es-errors "^1.3.0" + es-shim-unscopables "^1.0.2" + +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" + is-shared-array-buffer "^1.0.2" + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== + +ast-types-flow@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" + integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async-mutex@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.4.1.tgz#bccf55b96f2baf8df90ed798cb5544a1f6ee4c2c" + integrity sha512-WfoBo4E/TbCX1G95XTjbWTE3X2XLG0m1Xbv2cwOtuPdyH9CZvnaA5nCt1ucjaKEgW2A5IF71hxrRhr83Je5xjA== + dependencies: + tslib "^2.4.0" + +async-validator@~1.11.3: + version "1.11.5" + resolved "https://registry.yarnpkg.com/async-validator/-/async-validator-1.11.5.tgz#9d43cf49ef6bb76be5442388d19fb9a6e47597ea" + integrity sha512-XNtCsMAeAH1pdLMEg1z8/Bb3a8cdCbui9QbJATRFHHHW5kT6+NPI3zSVQUXgikTFITzsg+kYY5NTWhM2Orwt9w== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +autoprefixer@^10.4.19: + version "10.4.20" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.20.tgz#5caec14d43976ef42e32dcb4bd62878e96be5b3b" + integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g== + dependencies: + browserslist "^4.23.3" + caniuse-lite "^1.0.30001646" + fraction.js "^4.3.7" + normalize-range "^0.1.2" + picocolors "^1.0.1" + postcss-value-parser "^4.2.0" + +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + +axe-core@^4.9.1: + version "4.10.0" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.10.0.tgz#d9e56ab0147278272739a000880196cdfe113b59" + integrity sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g== + +axios-retry@^4.0.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/axios-retry/-/axios-retry-4.5.0.tgz#441fdc32cedf63d6abd5de5d53db3667afd4c39b" + integrity sha512-aR99oXhpEDGo0UuAlYcn2iGRds30k366Zfa05XWScR9QaQD4JYiP3/1Qt1u7YlefUOK+cn0CcwoL1oefavQUlQ== + dependencies: + is-retry-allowed "^2.2.0" + +axios@^1.6.0: + version "1.7.7" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.7.tgz#2f554296f9892a72ac8d8e4c5b79c14a91d0a47f" + integrity sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +axobject-query@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.1.1.tgz#3b6e5c6d4e43ca7ba51c5babf99d22a9c68485e1" + integrity sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg== + dependencies: + deep-equal "^2.0.5" + +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== + dependencies: + "@jest/transform" "^29.7.0" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.6.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-loader@^8.0.6: + version "8.3.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.3.0.tgz#124936e841ba4fe8176786d6ff28add1f134d6a8" + integrity sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q== + dependencies: + find-cache-dir "^3.3.1" + loader-utils "^2.0.0" + make-dir "^3.1.0" + schema-utils "^2.6.5" + +babel-plugin-import@^1.12.2: + version "1.13.8" + resolved "https://registry.yarnpkg.com/babel-plugin-import/-/babel-plugin-import-1.13.8.tgz#782c517f6bbf2de3b1f75aaafd6d20a491c4878c" + integrity sha512-36babpjra5m3gca44V6tSTomeBlPA7cHUynrE2WiQIm3rEGD9xy28MKsx5IdO45EbnpJY7Jrgd00C6Dwt/l/2Q== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + +babel-plugin-istanbul@^6.0.0, babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-plugin-polyfill-corejs2@^0.4.10: + version "0.4.11" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" + integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== + dependencies: + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.6.2" + semver "^6.3.1" + +babel-plugin-polyfill-corejs3@^0.10.6: + version "0.10.6" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz#2deda57caef50f59c525aeb4964d3b2f867710c7" + integrity sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.2" + core-js-compat "^3.38.0" + +babel-plugin-polyfill-regenerator@^0.6.1: + version "0.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" + integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.2" + +babel-plugin-react-svg@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/babel-plugin-react-svg/-/babel-plugin-react-svg-3.0.3.tgz#7da46a0bd8319f49ac85523d259f145ce5d78321" + integrity sha512-Pst1RWjUIiV0Ykv1ODSeceCBsFOP2Y4dusjq7/XkjuzJdvS9CjpkPMUIoO4MLlvp5PiLCeMlsOC7faEUA0gm3Q== + +babel-plugin-transform-import-meta@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-import-meta/-/babel-plugin-transform-import-meta-2.2.1.tgz#eb5b79019ff0a9157b94d8280955121189a2964b" + integrity sha512-AxNh27Pcg8Kt112RGa3Vod2QS2YXKKJ6+nSvRtv7qQTJAdx0MZa4UHZ4lnxHUWA2MNbLuZQv5FVab4P1CoLOWw== + dependencies: + "@babel/template" "^7.4.4" + tslib "^2.4.0" + +babel-preset-current-node-syntax@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz#9a929eafece419612ef4ae4f60b1862ebad8ef30" + integrity sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-import-attributes" "^7.24.7" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== + dependencies: + babel-plugin-jest-hoist "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + +babel-runtime@6.x: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g== + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +bail@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" + integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== + +bail@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" + integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +balanced-match@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-2.0.0.tgz#dc70f920d78db8b858535795867bf48f820633d9" + integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA== + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== + +bcp-47-match@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/bcp-47-match/-/bcp-47-match-2.0.3.tgz#603226f6e5d3914a581408be33b28a53144b09d0" + integrity sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ== + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + +body-parser@1.20.2: + version "1.20.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" + integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== + dependencies: + bytes "3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + +bonjour-service@^1.0.11: + version "1.2.1" + resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.2.1.tgz#eb41b3085183df3321da1264719fbada12478d02" + integrity sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw== + dependencies: + fast-deep-equal "^3.1.3" + multicast-dns "^7.2.5" + +boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@^3.0.3, braces@~3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + +browserslist@^4.21.10, browserslist@^4.23.1, browserslist@^4.23.3: + version "4.23.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800" + integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA== + dependencies: + caniuse-lite "^1.0.30001646" + electron-to-chromium "^1.5.4" + node-releases "^2.0.18" + update-browserslist-db "^1.1.0" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-from@^1.0.0, buffer-from@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +bundle-declarations-webpack-plugin@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/bundle-declarations-webpack-plugin/-/bundle-declarations-webpack-plugin-3.1.1.tgz#4d97586a77422e90c665085c9c59fe8f179c2650" + integrity sha512-Lz+bGKfI6YoPC0kBXPcvdHHMNaSuRvjqfB61xBdYGXIJ81YQiTNM7lqTmzrgXdITKTrLZn5i6+BJNGJw3MUzxw== + dependencies: + dts-bundle-generator "^6.7.0" + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +caching-transform@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-4.0.0.tgz#00d297a4206d71e2163c39eaffa8157ac0651f0f" + integrity sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA== + dependencies: + hasha "^5.0.0" + make-dir "^3.0.0" + package-hash "^4.0.0" + write-file-atomic "^3.0.0" + +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + +camelcase-keys@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-7.0.2.tgz#d048d8c69448745bb0de6fc4c1c52a30dfbe7252" + integrity sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg== + dependencies: + camelcase "^6.3.0" + map-obj "^4.1.0" + quick-lru "^5.1.1" + type-fest "^1.2.1" + +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.2.0, camelcase@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +camera-controls@^1.25.3: + version "1.38.2" + resolved "https://registry.yarnpkg.com/camera-controls/-/camera-controls-1.38.2.tgz#3289013e6de05cee51dc98af87d3fc7c1a7df585" + integrity sha512-EfzbovxLssyWpJVG9uKcazSDDIEcd1hUsPhPF/OWWnICsKY9WbLY/2S4UPW73HHbvnVeR/Z9wsWaQKtANy/2Yg== + +caniuse-lite@^1.0.30001646: + version "1.0.30001655" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz#0ce881f5a19a2dcfda2ecd927df4d5c1684b982f" + integrity sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg== + +canvas@^2.8.0: + version "2.11.2" + resolved "https://registry.yarnpkg.com/canvas/-/canvas-2.11.2.tgz#553d87b1e0228c7ac0fc72887c3adbac4abbd860" + integrity sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw== + dependencies: + "@mapbox/node-pre-gyp" "^1.0.0" + nan "^2.17.0" + simple-get "^3.0.3" + +ccount@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" + integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== + +ccount@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" + integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== + +chalk@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" + integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== + +chalk@^2.0.1, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +character-entities-html4@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" + integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== + +character-entities-legacy@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" + integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== + +character-entities-legacy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b" + integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== + +character-entities@^1.0.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" + integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== + +character-entities@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" + integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== + +character-reference-invalid@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" + integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== + +character-reference-invalid@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz#85c66b041e43b47210faf401278abf808ac45cb9" + integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw== + +chart.js@^4.3.0: + version "4.4.4" + resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-4.4.4.tgz#b682d2e7249f7a0cbb1b1d31c840266ae9db64b7" + integrity sha512-emICKGBABnxhMjUjlYRR12PmOXhJ2eJjEHL2/dZlWjxRAZT1D8xplLFq5M0tMQK8ja+wBS/tuVEJB5C6r7VxJA== + dependencies: + "@kurkle/color" "^0.3.0" + +check-links@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/check-links/-/check-links-1.1.8.tgz#842184178c85d9c2ab119175bcc2672681bc88a4" + integrity sha512-lxt1EeQ1CVkmiZzPfbPufperYK0t7MvhdLs3zlRH9areA6NVT1tcGymAdJONolNWQBdCFU/sek59RpeLmVHCnw== + dependencies: + got "^9.6.0" + is-relative-url "^2.0.0" + p-map "^2.0.0" + p-memoize "^2.1.0" + +"chokidar@>=3.0.0 <4.0.0", chokidar@^3.0.0, chokidar@^3.5.2, chokidar@^3.5.3, chokidar@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +chrome-trace-event@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" + integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== + +ci-info@^3.2.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== + +cjs-module-lexer@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.0.tgz#677de7ed7efff67cc40c9bf1897fea79d41b5215" + integrity sha512-N1NGmowPlGBLsOZLPvm48StN04V4YvQRL0i6b7ctrVY3epjP/ct7hFLOItz6pDIvRjwpfPxi52a2UWV2ziir8g== + +classnames@2.x, classnames@^2.2.1, classnames@^2.2.3, classnames@^2.2.5, classnames@^2.2.6, classnames@^2.3.1, classnames@^2.3.2, classnames@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" + integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== + +clean-css@^5.2.2: + version "5.3.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.3.tgz#b330653cd3bd6b75009cc25c714cae7b93351ccd" + integrity sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg== + dependencies: + source-map "~0.6.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-cursor@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" + integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== + dependencies: + restore-cursor "^4.0.0" + +cli-truncate@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" + integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== + dependencies: + slice-ansi "^5.0.0" + string-width "^5.0.0" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +clone@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== + +clsx@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" + integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== + +clsx@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" + integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== + +co@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/co/-/co-3.1.0.tgz#4ea54ea5a08938153185e15210c68d9092bc1b78" + integrity sha512-CQsjCRiNObI8AtTsNIBDRMQ4oMR83CzEswHYahClvul7gKk+lDQiOKv+5qh7LQWf5sh6jkZNispz/QlsZxyNgA== + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== + dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" + q "^1.1.2" + +collapse-white-space@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" + integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== + +collect-v8-coverage@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" + integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-support@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +colord@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" + integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== + +colorette@^2.0.10, colorette@^2.0.14, colorette@^2.0.20: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + +combine-errors@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/combine-errors/-/combine-errors-3.0.3.tgz#f4df6740083e5703a3181110c2b10551f003da86" + integrity sha512-C8ikRNRMygCwaTx+Ek3Yr+OuZzgZjduCOfSQBjbM8V3MfgcjSTeto/GXP6PAwKvJz/v15b7GHZvx5rOlczFw/Q== + dependencies: + custom-error-instance "2.1.1" + lodash.uniqby "4.5.0" + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +comma-separated-tokens@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" + integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== + +commander@11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-11.0.0.tgz#43e19c25dbedc8256203538e8d7e9346877a6f67" + integrity sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ== + +commander@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^6.2.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" + integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== + +commander@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +compute-scroll-into-view@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-3.1.0.tgz#753f11d972596558d8fe7c6bcbc8497690ab4c87" + integrity sha512-rj8l8pD4bJ1nx+dAkMhV1xB5RuZEyVysfxJqB1pRchh1KVvwOv9b7CGB8ZfjTImVv2oF+sYMUkMZq6Na5Ftmbg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +concat-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" + integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.0.2" + typedarray "^0.0.6" + +confusing-browser-globals@^1.0.10: + version "1.0.11" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" + integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== + +connect-history-api-fallback@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" + integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== + +console-control-strings@^1.0.0, console-control-strings@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4, content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +convert-source-map@^1.7.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" + integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== + +cookie@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +copy-to-clipboard@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0" + integrity sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA== + dependencies: + toggle-selection "^1.0.6" + +copy-webpack-plugin@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz#96d4dbdb5f73d02dd72d0528d1958721ab72e04a" + integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== + dependencies: + fast-glob "^3.2.11" + glob-parent "^6.0.1" + globby "^13.1.1" + normalize-path "^3.0.0" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" + +core-js-compat@^3.37.1, core-js-compat@^3.38.0: + version "3.38.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.38.1.tgz#2bc7a298746ca5a7bcb9c164bcb120f2ebc09a09" + integrity sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw== + dependencies: + browserslist "^4.23.3" + +core-js@^2.4.0: + version "2.6.12" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cosmiconfig@^8.2.0, cosmiconfig@^8.3.5: + version "8.3.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" + integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== + dependencies: + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + path-type "^4.0.0" + +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" + +create-react-class@^15.5.3: + version "15.7.0" + resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.7.0.tgz#7499d7ca2e69bb51d13faf59bd04f0c65a1d6c1e" + integrity sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng== + dependencies: + loose-envify "^1.3.1" + object-assign "^4.1.1" + +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +css-blank-pseudo@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-6.0.2.tgz#50db072d4fb5b40c2df9ffe5ca5fbb9b19c77fc8" + integrity sha512-J/6m+lsqpKPqWHOifAFtKFeGLOzw3jR92rxQcwRUfA/eTuZzKfKlxOmYDx2+tqOPQAueNvBiY8WhAeHu5qNmTg== + dependencies: + postcss-selector-parser "^6.0.13" + +css-functions-list@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.2.2.tgz#9a54c6dd8416ed25c1079cd88234e927526c1922" + integrity sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ== + +css-has-pseudo@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-6.0.5.tgz#372e7293ef9bb901ec0bdce85a6fc1365012fa2c" + integrity sha512-ZTv6RlvJJZKp32jPYnAJVhowDCrRrHUTAxsYSuUPBEDJjzws6neMnzkRblxtgmv1RgcV5dhH2gn7E3wA9Wt6lw== + dependencies: + "@csstools/selector-specificity" "^3.1.1" + postcss-selector-parser "^6.0.13" + postcss-value-parser "^4.2.0" + +css-loader@^6.8.1: + version "6.11.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.11.0.tgz#33bae3bf6363d0a7c2cf9031c96c744ff54d85ba" + integrity sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g== + dependencies: + icss-utils "^5.1.0" + postcss "^8.4.33" + postcss-modules-extract-imports "^3.1.0" + postcss-modules-local-by-default "^4.0.5" + postcss-modules-scope "^3.2.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.2.0" + semver "^7.5.4" + +css-prefers-color-scheme@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-9.0.1.tgz#30fcb94cc38b639b66fb99e1882ffd97f741feaa" + integrity sha512-iFit06ochwCKPRiWagbTa1OAWCvWWVdEnIFd8BaRrgO8YrrNh4RAWUQTFcYX5tdFZgFl1DJ3iiULchZyEbnF4g== + +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + +css-select@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-select@^4.1.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== + dependencies: + boolbase "^1.0.0" + css-what "^6.0.1" + domhandler "^4.3.1" + domutils "^2.8.0" + nth-check "^2.0.1" + +css-selector-parser@^1.0.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/css-selector-parser/-/css-selector-parser-1.4.1.tgz#03f9cb8a81c3e5ab2c51684557d5aaf6d2569759" + integrity sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g== + +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + +css-tree@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-tree@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" + integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== + dependencies: + mdn-data "2.0.30" + source-map-js "^1.0.1" + +css-what@^3.2.1: + version "3.4.2" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" + integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== + +css-what@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +cssdb@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-8.1.0.tgz#ad25cac6ac0dbc4f23693e09baa65cdd3ef7160a" + integrity sha512-BQN57lfS4dYt2iL0LgyrlDbefZKEtUyrO8rbzrbGrqBk6OoyNTQLF+porY9DrpDBjLo4NEvj2IJttC7vf3x+Ew== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +csso@^4.0.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== + dependencies: + css-tree "^1.1.2" + +cssom@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" + integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + +csstype@^3.0.2, csstype@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + +custom-error-instance@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/custom-error-instance/-/custom-error-instance-2.1.1.tgz#3cf6391487a6629a6247eb0ca0ce00081b7e361a" + integrity sha512-p6JFxJc3M4OTD2li2qaHkDCw9SfMw82Ldr6OC9Je1aXiGfhx2W8p3GaoeaGrPJTUN9NirTM/KTxHWMUdR1rsUg== + +"cvat-canvas3d@link:./cvat-canvas3d": + version "0.0.10" + dependencies: + "@types/three" "^0.156.0" + camera-controls "^1.25.3" + cvat-core "link:./cvat-core" + three "^0.156.1" + +"cvat-canvas@link:./cvat-canvas": + version "2.20.9" + dependencies: + "@types/polylabel" "^1.0.5" + polylabel "^1.1.0" + svg.draggable.js "2.2.2" + svg.draw.js "^2.0.4" + svg.js "2.7.1" + svg.resize.js "1.4.3" + svg.select.js "3.0.1" + +"cvat-core@link:./cvat-core": + version "15.2.0" + dependencies: + axios "^1.6.0" + axios-retry "^4.0.0" + cvat-data "link:./cvat-data" + detect-browser "^5.2.1" + error-stack-parser "^2.0.2" + form-data "^4.0.0" + js-cookie "^3.0.1" + json-logic-js "^2.0.1" + platform "^1.3.5" + quickhull "^1.0.3" + store "^2.0.12" + tus-js-client "^3.0.1" + +"cvat-data@link:./cvat-data": + version "2.1.0" + dependencies: + async-mutex "^0.4.0" + jszip "3.10.1" + +damerau-levenshtein@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" + integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== + +data-urls@^3.0.1, data-urls@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" + integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ== + dependencies: + abab "^2.0.6" + whatwg-mimetype "^3.0.0" + whatwg-url "^11.0.0" + +data-view-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" + integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" + integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" + integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +dayjs@^1.11.10, dayjs@^1.11.4: + version "1.11.13" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c" + integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg== + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@^4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" + integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== + dependencies: + ms "2.1.2" + +debug@4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +decamelize-keys@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" + integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0, decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + +decamelize@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-5.0.1.tgz#db11a92e58c741ef339fb0a2868d8a06a9a7b1e9" + integrity sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA== + +decimal.js@^10.3.1, decimal.js@^10.4.2: + version "10.4.3" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== + +decode-named-character-reference@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz#daabac9690874c394c81e4162a0304b35d824f0e" + integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg== + dependencies: + character-entities "^2.0.0" + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== + dependencies: + mimic-response "^1.0.0" + +decompress-response@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" + integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== + dependencies: + mimic-response "^2.0.0" + +dedent@^1.0.0: + version "1.5.3" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" + integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== + +deep-diff@^0.3.5: + version "0.3.8" + resolved "https://registry.yarnpkg.com/deep-diff/-/deep-diff-0.3.8.tgz#c01de63efb0eec9798801d40c7e0dae25b582c84" + integrity sha512-yVn6RZmHiGnxRKR9sJb3iVV2XTF1Ghh2DiWRZ3dMnGc43yUdWWF/kX6lQyk3+P84iprfWKU/8zFTrlkvtFm1ug== + +deep-equal@^2.0.5: + version "2.2.3" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.3.tgz#af89dafb23a396c7da3e862abc0be27cf51d56e1" + integrity sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.5" + es-get-iterator "^1.1.3" + get-intrinsic "^1.2.2" + is-arguments "^1.1.1" + is-array-buffer "^3.0.2" + is-date-object "^1.0.5" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + isarray "^2.0.5" + object-is "^1.1.5" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.1" + side-channel "^1.0.4" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.13" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +default-gateway@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" + integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== + dependencies: + execa "^5.0.0" + +default-require-extensions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-3.0.1.tgz#bfae00feeaeada68c2ae256c62540f60b80625bd" + integrity sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw== + dependencies: + strip-bom "^4.0.0" + +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +dequal@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-browser@^5.2.1: + version "5.3.0" + resolved "https://registry.yarnpkg.com/detect-browser/-/detect-browser-5.3.0.tgz#9705ef2bddf46072d0f7265a1fe300e36fe7ceca" + integrity sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w== + +detect-libc@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" + integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== + +diff@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" + integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +direction@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/direction/-/direction-2.0.1.tgz#71800dd3c4fa102406502905d3866e65bdebb985" + integrity sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA== + +dns-packet@^5.2.2, dns-packet@^5.2.4: + version "5.6.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.1.tgz#ae888ad425a9d1478a0674256ab866de1012cf2f" + integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== + dependencies: + "@leichtgewicht/ip-codec" "^2.0.1" + +dns-socket@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/dns-socket/-/dns-socket-4.2.2.tgz#58b0186ec053ea0731feb06783c7eeac4b95b616" + integrity sha512-BDeBd8najI4/lS00HSKpdFia+OvUMytaVjfzR9n5Lq8MlZRSvtbI+uLtx1+XmQFls5wFU9dssccTmQQ6nfpjdg== + dependencies: + dns-packet "^5.2.4" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-converter@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-scroll-into-view@1.x: + version "1.2.1" + resolved "https://registry.yarnpkg.com/dom-scroll-into-view/-/dom-scroll-into-view-1.2.1.tgz#e8f36732dd089b0201a88d7815dc3f88e6d66c7e" + integrity sha512-LwNVg3GJOprWDO+QhLL1Z9MMgWe/KAFLxVWKzjRTxNSPn8/LLDIfmuG71YHznXCqaqTjvHJDYO1MEAgX6XCNbQ== + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +dom-serializer@^1.0.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +domelementtype@1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domexception@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" + integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== + dependencies: + webidl-conversions "^7.0.0" + +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + +domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^2.5.2, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +dotenv-defaults@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dotenv-defaults/-/dotenv-defaults-2.0.2.tgz#6b3ec2e4319aafb70940abda72d3856770ee77ac" + integrity sha512-iOIzovWfsUHU91L5i8bJce3NYK5JXeAwH50Jh6+ARUdLiiGlYWfGw6UkzsYqaXZH/hjE/eCd/PlfM/qqyK0AMg== + dependencies: + dotenv "^8.2.0" + +dotenv-webpack@^8.0.1: + version "8.1.0" + resolved "https://registry.yarnpkg.com/dotenv-webpack/-/dotenv-webpack-8.1.0.tgz#4d66abc4a30395b46a030ebcd125320232b54873" + integrity sha512-owK1JcsPkIobeqjVrk6h7jPED/W6ZpdFsMPR+5ursB7/SdgDyO+VzAU+szK8C8u3qUhtENyYnj8eyXMR5kkGag== + dependencies: + dotenv-defaults "^2.0.2" + +dotenv@^8.2.0: + version "8.6.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" + integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== + +dts-bundle-generator@^6.7.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/dts-bundle-generator/-/dts-bundle-generator-6.13.0.tgz#c24df75632917d70168a04b103ee94672e01c4c9" + integrity sha512-v4mXZ08dnKO4RKUW2x4DNrb1cJyvtmxAzreV/zF1CZIXMKfe8GrQg6JDmTcikrK05/LMkdMuUrDe8N6w+6krsw== + dependencies: + typescript ">=3.0.1" + yargs "^17.2.1" + +duplexer3@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" + integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-to-chromium@^1.5.4: + version "1.5.13" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz#1abf0410c5344b2b829b7247e031f02810d442e6" + integrity sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q== + +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^5.17.1: + version "5.17.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15" + integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +entities@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +envinfo@^7.7.3: + version "7.13.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.13.0.tgz#81fbb81e5da35d74e814941aeab7c325a606fb31" + integrity sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +error-stack-parser@^2.0.2, error-stack-parser@^2.0.6: + version "2.1.4" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" + integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== + dependencies: + stackframe "^1.3.4" + +es-abstract@^1.17.2, es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: + version "1.23.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" + integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.0.3" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + hasown "^2.0.2" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" + is-callable "^1.2.7" + is-data-view "^1.0.1" + is-negative-zero "^2.0.3" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.3" + is-string "^1.0.7" + is-typed-array "^1.1.13" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.2" + safe-regex-test "^1.0.3" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.6" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.15" + +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-get-iterator@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" + integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" + is-arguments "^1.1.1" + is-map "^2.0.2" + is-set "^2.0.2" + is-string "^1.0.7" + isarray "^2.0.5" + stop-iteration-iterator "^1.0.0" + +es-iterator-helpers@^1.0.19: + version "1.0.19" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz#117003d0e5fec237b4b5c08aded722e0c6d50ca8" + integrity sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.3" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.3" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + globalthis "^1.0.3" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + internal-slot "^1.0.7" + iterator.prototype "^1.1.2" + safe-array-concat "^1.1.2" + +es-module-lexer@^1.2.1: + version "1.5.4" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.4.tgz#a8efec3a3da991e60efa6b633a7cad6ab8d26b78" + integrity sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw== + +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== + dependencies: + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" + +es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + dependencies: + hasown "^2.0.0" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es6-error@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + +escalade@^3.1.1, escalade@^3.1.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escape-string-regexp@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" + integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== + +escodegen@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" + integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionalDependencies: + source-map "~0.6.1" + +eslint-config-airbnb-base@14.2.1: + version "14.2.1" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz#8a2eb38455dc5a312550193b319cdaeef042cd1e" + integrity sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA== + dependencies: + confusing-browser-globals "^1.0.10" + object.assign "^4.1.2" + object.entries "^1.1.2" + +eslint-config-airbnb-base@^15.0.0: + version "15.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz#6b09add90ac79c2f8d723a2580e07f3925afd236" + integrity sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig== + dependencies: + confusing-browser-globals "^1.0.10" + object.assign "^4.1.2" + object.entries "^1.1.5" + semver "^6.3.0" + +eslint-config-airbnb-typescript@^17.1.0: + version "17.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-17.1.0.tgz#fda960eee4a510f092a9a1c139035ac588937ddc" + integrity sha512-GPxI5URre6dDpJ0CtcthSZVBAfI+Uw7un5OYNVxP2EYi3H81Jw701yFP7AU+/vCE7xBtFmjge7kfhhk4+RAiig== + dependencies: + eslint-config-airbnb-base "^15.0.0" + +eslint-config-airbnb@^19.0.4: + version "19.0.4" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz#84d4c3490ad70a0ffa571138ebcdea6ab085fdc3" + integrity sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew== + dependencies: + eslint-config-airbnb-base "^15.0.0" + object.assign "^4.1.2" + object.entries "^1.1.5" + +eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== + dependencies: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +eslint-module-utils@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.9.0.tgz#95d4ac038a68cd3f63482659dffe0883900eb342" + integrity sha512-McVbYmwA3NEKwRQY5g4aWMdcZE5xZxV8i8l7CqJSrameuGSQJtSWaL/LxTEzSKKaCcOhlpDR8XEfYXWPrdo/ZQ== + dependencies: + debug "^3.2.7" + +eslint-plugin-cypress@^2.11.2: + version "2.15.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-cypress/-/eslint-plugin-cypress-2.15.2.tgz#f22e12fad4c434edad7b298ef92bac8fa087ffa0" + integrity sha512-CtcFEQTDKyftpI22FVGpx8bkpKyYXBlNge6zSo0pl5/qJvBAnzaD76Vu2AsP16d6mTj478Ldn2mhgrWV+Xr0vQ== + dependencies: + globals "^13.20.0" + +eslint-plugin-import@^2.22.1: + version "2.30.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz#21ceea0fc462657195989dd780e50c92fe95f449" + integrity sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw== + dependencies: + "@rtsao/scc" "^1.1.0" + array-includes "^3.1.8" + array.prototype.findlastindex "^1.2.5" + array.prototype.flat "^1.3.2" + array.prototype.flatmap "^1.3.2" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.9" + eslint-module-utils "^2.9.0" + hasown "^2.0.2" + is-core-module "^2.15.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.fromentries "^2.0.8" + object.groupby "^1.0.3" + object.values "^1.2.0" + semver "^6.3.1" + tsconfig-paths "^3.15.0" + +eslint-plugin-jest@^26.5.3: + version "26.9.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-26.9.0.tgz#7931c31000b1c19e57dbfb71bbf71b817d1bf949" + integrity sha512-TWJxWGp1J628gxh2KhaH1H1paEdgE2J61BBF1I59c6xWeL5+D1BzMxGDN/nXAfX+aSkR5u80K+XhskK6Gwq9ng== + dependencies: + "@typescript-eslint/utils" "^5.10.0" + +eslint-plugin-jsx-a11y@^6.3.1: + version "6.9.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.9.0.tgz#67ab8ff460d4d3d6a0b4a570e9c1670a0a8245c8" + integrity sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g== + dependencies: + aria-query "~5.1.3" + array-includes "^3.1.8" + array.prototype.flatmap "^1.3.2" + ast-types-flow "^0.0.8" + axe-core "^4.9.1" + axobject-query "~3.1.1" + damerau-levenshtein "^1.0.8" + emoji-regex "^9.2.2" + es-iterator-helpers "^1.0.19" + hasown "^2.0.2" + jsx-ast-utils "^3.3.5" + language-tags "^1.0.9" + minimatch "^3.1.2" + object.fromentries "^2.0.8" + safe-regex-test "^1.0.3" + string.prototype.includes "^2.0.0" + +eslint-plugin-no-unsanitized@^3.0.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-3.2.0.tgz#a74239ae51363a5edbe6920eb34fe09aab925a9c" + integrity sha512-92opuXbjWmXcod94EyCKhp36V1QHLM/ArAST2ssgKOojALne0eZvSPfrg4oyr0EwTXvy0RJNe/Tkm33VkDUrKQ== + +eslint-plugin-react-hooks@^4.6.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz#c829eb06c0e6f484b3fbb85a97e57784f328c596" + integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== + +eslint-plugin-react@^7.33.2: + version "7.35.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.35.1.tgz#afc80387031aa99dd6e0a14437c77d02e5700b47" + integrity sha512-B5ok2JgbaaWn/zXbKCGgKDNL2tsID3Pd/c/yvjcpsd9HQDwyYc/TQv3AZMmOvrJgCs3AnYNUHRCQEMMQAYJ7Yg== + dependencies: + array-includes "^3.1.8" + array.prototype.findlast "^1.2.5" + array.prototype.flatmap "^1.3.2" + array.prototype.tosorted "^1.1.4" + doctrine "^2.1.0" + es-iterator-helpers "^1.0.19" + estraverse "^5.3.0" + hasown "^2.0.2" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.8" + object.fromentries "^2.0.8" + object.values "^1.2.0" + prop-types "^15.8.1" + resolve "^2.0.0-next.5" + semver "^6.3.1" + string.prototype.matchall "^4.0.11" + string.prototype.repeat "^1.0.0" + +eslint-plugin-security@^1.4.0: + version "1.7.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-security/-/eslint-plugin-security-1.7.1.tgz#0e9c4a471f6e4d3ca16413c7a4a51f3966ba16e4" + integrity sha512-sMStceig8AFglhhT2LqlU5r+/fn9OwsA72O5bBuQVTssPCdQAOQzL+oMn/ZcpeUY6KcNfLJArgcrsSULNjYYdQ== + dependencies: + safe-regex "^2.1.1" + +eslint-scope@5.1.1, eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@^8.54.0: + version "8.57.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" + integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.0" + "@humanwhocodes/config-array" "^0.11.14" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esprima@^4.0.0, esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.2: + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + +events@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +execa@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" + integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^4.3.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^3.0.7" + strip-final-newline "^3.0.0" + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expect@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== + dependencies: + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + +express@^4.17.3: + version "4.19.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" + integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.2" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.6.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.11.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +fabric@^5.2.1: + version "5.4.0" + resolved "https://registry.yarnpkg.com/fabric/-/fabric-5.4.0.tgz#314d0b31e6ae0c4b2b097dc5ed7fb0bd57cc79e5" + integrity sha512-jI2W6GBt6iUp9oZBswYfYPqDGiT/Xg8uw0Wr9+9zx5cyXTB5Xz1C600LFTi9pfHPwuD10+ChkYMI9pXQN/HkTA== + optionalDependencies: + canvas "^2.8.0" + jsdom "^19.0.0" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-equals@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-4.0.3.tgz#72884cc805ec3c6679b99875f6b7654f39f0e8c7" + integrity sha512-G3BSX9cfKttjr+2o1O22tYMLq0DPluZnYtq1rXumE1SpL/F/SLIfHx08WYQoWSIpeMYf8sRbJ8++71+v6Pnxfg== + +fast-glob@^3.2.11, fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fast-uri@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.1.tgz#cddd2eecfc83a71c1be2cc2ef2061331be8a7134" + integrity sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw== + +fastest-levenshtein@^1.0.12, fastest-levenshtein@^1.0.16: + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + +fastq@^1.6.0: + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + dependencies: + reusify "^1.0.4" + +fault@^1.0.0, fault@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.4.tgz#eafcfc0a6d214fc94601e170df29954a4f842f13" + integrity sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA== + dependencies: + format "^0.2.0" + +faye-websocket@^0.11.3: + version "0.11.4" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== + dependencies: + websocket-driver ">=0.5.1" + +fb-watchman@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + dependencies: + bser "2.1.1" + +fflate@~0.6.10: + version "0.6.10" + resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.6.10.tgz#5f40f9659205936a2d18abf88b2e7781662b6d43" + integrity sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg== + +figgy-pudding@^3.5.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== + +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +file-entry-cache@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-7.0.2.tgz#2d61bb70ba89b9548e3035b7c9173fe91deafff0" + integrity sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g== + dependencies: + flat-cache "^3.2.0" + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-cache-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-cache-dir@^3.2.0, find-cache-dir@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4, flat-cache@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +flatbuffers@^1.12.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/flatbuffers/-/flatbuffers-1.12.0.tgz#72e87d1726cb1b216e839ef02658aa87dcef68aa" + integrity sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ== + +flatted@^3.2.9: + version "3.3.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== + +follow-redirects@^1.0.0, follow-redirects@^1.15.6: + version "1.15.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +foreground-child@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" + integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^3.0.2" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +format@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" + integrity sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww== + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fraction.js@^4.3.7: + version "4.3.7" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" + integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fromentries@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" + integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-monkey@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.6.tgz#8ead082953e88d992cf3ff844faa907b26756da2" + integrity sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg== + +fs-readdir-recursive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^2.3.2, fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +gauge@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" + integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.2" + console-control-strings "^1.0.0" + has-unicode "^2.0.1" + object-assign "^4.1.1" + signal-exit "^3.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.2" + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.1, get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.0, get-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== + dependencies: + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + +github-slugger@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-2.0.0.tgz#52cf2f9279a21eb6c59dd385b410f0c0adda8f1a" + integrity sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw== + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.1, glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@^7.0.3, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.19.0, globals@^13.20.0: + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== + dependencies: + define-properties "^1.2.1" + gopd "^1.0.1" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +globby@^13.1.1: + version "13.2.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592" + integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w== + dependencies: + dir-glob "^3.0.1" + fast-glob "^3.3.0" + ignore "^5.2.4" + merge2 "^1.4.1" + slash "^4.0.0" + +globjoin@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" + integrity sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg== + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +got@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +guid-typescript@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/guid-typescript/-/guid-typescript-1.0.9.tgz#e35f77003535b0297ea08548f5ace6adb1480ddc" + integrity sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ== + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.0.1, has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + +has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + +hasha@^5.0.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/hasha/-/hasha-5.2.2.tgz#a48477989b3b327aea3c04f53096d816d97522a1" + integrity sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ== + dependencies: + is-stream "^2.0.0" + type-fest "^0.8.0" + +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +hast-util-from-parse5@^7.0.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-7.1.2.tgz#aecfef73e3ceafdfa4550716443e4eb7b02e22b0" + integrity sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw== + dependencies: + "@types/hast" "^2.0.0" + "@types/unist" "^2.0.0" + hastscript "^7.0.0" + property-information "^6.0.0" + vfile "^5.0.0" + vfile-location "^4.0.0" + web-namespaces "^2.0.0" + +hast-util-has-property@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/hast-util-has-property/-/hast-util-has-property-2.0.1.tgz#8ec99c3e8f02626304ee438cdb9f0528b017e083" + integrity sha512-X2+RwZIMTMKpXUzlotatPzWj8bspCymtXH3cfG3iQKV+wPF53Vgaqxi/eLqGck0wKq1kS9nvoB1wchbCPEL8sg== + +hast-util-heading-rank@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/hast-util-heading-rank/-/hast-util-heading-rank-2.1.1.tgz#063b43b9cfb56a1a8ded84dd68d8af69e8864545" + integrity sha512-iAuRp+ESgJoRFJbSyaqsfvJDY6zzmFoEnL1gtz1+U8gKtGGj1p0CVlysuUAUjq95qlZESHINLThwJzNGmgGZxA== + dependencies: + "@types/hast" "^2.0.0" + +hast-util-is-element@^2.0.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-2.1.3.tgz#cd3279cfefb70da6d45496068f020742256fc471" + integrity sha512-O1bKah6mhgEq2WtVMk+Ta5K7pPMqsBBlmzysLdcwKVrqzZQ0CHqUPiIVspNhAG1rvxpvJjtGee17XfauZYKqVA== + dependencies: + "@types/hast" "^2.0.0" + "@types/unist" "^2.0.0" + +hast-util-parse-selector@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz#25ab00ae9e75cbc62cf7a901f68a247eade659e2" + integrity sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA== + dependencies: + "@types/hast" "^2.0.0" + +hast-util-raw@^7.0.0, hast-util-raw@^7.2.0: + version "7.2.3" + resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-7.2.3.tgz#dcb5b22a22073436dbdc4aa09660a644f4991d99" + integrity sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg== + dependencies: + "@types/hast" "^2.0.0" + "@types/parse5" "^6.0.0" + hast-util-from-parse5 "^7.0.0" + hast-util-to-parse5 "^7.0.0" + html-void-elements "^2.0.0" + parse5 "^6.0.0" + unist-util-position "^4.0.0" + unist-util-visit "^4.0.0" + vfile "^5.0.0" + web-namespaces "^2.0.0" + zwitch "^2.0.0" + +hast-util-select@^5.0.5, hast-util-select@~5.0.1: + version "5.0.5" + resolved "https://registry.yarnpkg.com/hast-util-select/-/hast-util-select-5.0.5.tgz#be9ccb71d2278681ca024727f12abd4f93b3e9bc" + integrity sha512-QQhWMhgTFRhCaQdgTKzZ5g31GLQ9qRb1hZtDPMqQaOhpLBziWcshUS0uCR5IJ0U1jrK/mxg35fmcq+Dp/Cy2Aw== + dependencies: + "@types/hast" "^2.0.0" + "@types/unist" "^2.0.0" + bcp-47-match "^2.0.0" + comma-separated-tokens "^2.0.0" + css-selector-parser "^1.0.0" + direction "^2.0.0" + hast-util-has-property "^2.0.0" + hast-util-to-string "^2.0.0" + hast-util-whitespace "^2.0.0" + not "^0.1.0" + nth-check "^2.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + unist-util-visit "^4.0.0" + zwitch "^2.0.0" + +hast-util-to-html@^8.0.0: + version "8.0.4" + resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-8.0.4.tgz#0269ef33fa3f6599b260a8dc94f733b8e39e41fc" + integrity sha512-4tpQTUOr9BMjtYyNlt0P50mH7xj0Ks2xpo8M943Vykljf99HW6EzulIoJP1N3eKOSScEHzyzi9dm7/cn0RfGwA== + dependencies: + "@types/hast" "^2.0.0" + "@types/unist" "^2.0.0" + ccount "^2.0.0" + comma-separated-tokens "^2.0.0" + hast-util-raw "^7.0.0" + hast-util-whitespace "^2.0.0" + html-void-elements "^2.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + stringify-entities "^4.0.0" + zwitch "^2.0.4" + +hast-util-to-parse5@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-7.1.0.tgz#c49391bf8f151973e0c9adcd116b561e8daf29f3" + integrity sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw== + dependencies: + "@types/hast" "^2.0.0" + comma-separated-tokens "^2.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + web-namespaces "^2.0.0" + zwitch "^2.0.0" + +hast-util-to-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hast-util-to-string/-/hast-util-to-string-2.0.0.tgz#b008b0a4ea472bf34dd390b7eea1018726ae152a" + integrity sha512-02AQ3vLhuH3FisaMM+i/9sm4OXGSq1UhOOCpTLLQtHdL3tZt7qil69r8M8iDkZYyC0HCFylcYoP+8IO7ddta1A== + dependencies: + "@types/hast" "^2.0.0" + +hast-util-whitespace@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz#0ec64e257e6fc216c7d14c8a1b74d27d650b4557" + integrity sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng== + +hastscript@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-7.2.0.tgz#0eafb7afb153d047077fa2a833dc9b7ec604d10b" + integrity sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw== + dependencies: + "@types/hast" "^2.0.0" + comma-separated-tokens "^2.0.0" + hast-util-parse-selector "^3.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +history@^4.9.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" + integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== + dependencies: + "@babel/runtime" "^7.1.2" + loose-envify "^1.2.0" + resolve-pathname "^3.0.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + value-equal "^1.0.1" + +hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +hosted-git-info@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== + dependencies: + lru-cache "^6.0.0" + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-encoding-sniffer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" + integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== + dependencies: + whatwg-encoding "^2.0.0" + +html-entities@^2.3.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.5.2.tgz#201a3cf95d3a15be7099521620d19dfb4f65359f" + integrity sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA== + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +html-minifier-terser@^6.0.2: + version "6.1.0" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" + integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== + dependencies: + camel-case "^4.1.2" + clean-css "^5.2.2" + commander "^8.3.0" + he "^1.2.0" + param-case "^3.0.4" + relateurl "^0.2.7" + terser "^5.10.0" + +html-tags@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce" + integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== + +html-void-elements@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-2.0.1.tgz#29459b8b05c200b6c5ee98743c41b979d577549f" + integrity sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A== + +html-webpack-plugin@^5.5.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz#50a8fa6709245608cb00e811eacecb8e0d7b7ea0" + integrity sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw== + dependencies: + "@types/html-minifier-terser" "^6.0.0" + html-minifier-terser "^6.0.2" + lodash "^4.17.21" + pretty-error "^4.0.0" + tapable "^2.0.0" + +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + +http-cache-semantics@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-parser-js@>=0.5.1: + version "0.5.8" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" + integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== + +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + +http-proxy-middleware@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" + integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== + dependencies: + "@types/http-proxy" "^1.17.8" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" + +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +human-signals@^4.3.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" + integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== + +husky@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/husky/-/husky-6.0.0.tgz#810f11869adf51604c32ea577edbc377d7f9319e" + integrity sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ== + +i18next@^23.11.5: + version "23.14.0" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-23.14.0.tgz#d415a858390cc849f3db0df539cb2bbfe24a3cdb" + integrity sha512-Y5GL4OdA8IU2geRrt2+Uc1iIhsjICdHZzT9tNwQ3TVqdNzgxHToGCKf/TPRP80vTCAP6svg2WbbJL+Gx5MFQVA== + dependencies: + "@babel/runtime" "^7.23.2" + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== + +ignore-by-default@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== + +ignore@^5.0.0, ignore@^5.2.0, ignore@^5.2.4: + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== + +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== + +immutable@^4.0.0, immutable@^4.3.6: + version "4.3.7" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.7.tgz#c70145fc90d89fb02021e65c84eb0226e4e5a381" + integrity sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw== + +import-fresh@^3.2.1, import-fresh@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-lazy@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" + integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== + +import-local@^3.0.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" + integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +indent-string@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-5.0.0.tgz#4fd2980fccaf8622d14c64d694f4cf33c81951a5" + integrity sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== + +ini@^1.3.5: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +inline-style-parser@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" + integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== + +internal-slot@^1.0.4, internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.0" + side-channel "^1.0.4" + +interpret@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" + integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== + +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +ip-regex@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" + integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +ipaddr.js@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8" + integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + integrity sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg== + +is-alphabetical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" + integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== + +is-alphabetical@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz#01072053ea7c1036df3c7d19a6daaec7f19e789b" + integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ== + +is-alphanumerical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" + integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + +is-alphanumerical@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz#7c03fbe96e3e931113e57f964b0a368cc2dfd875" + integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw== + dependencies: + is-alphabetical "^2.0.0" + is-decimal "^2.0.0" + +is-arguments@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-async-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" + integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== + dependencies: + has-tostringtag "^1.0.0" + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-buffer@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.13.0, is-core-module@^2.15.1, is-core-module@^2.5.0: + version "2.15.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" + integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== + dependencies: + hasown "^2.0.2" + +is-data-view@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" + integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== + dependencies: + is-typed-array "^1.1.13" + +is-date-object@^1.0.1, is-date-object@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-decimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" + integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== + +is-decimal@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7" + integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-empty@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-empty/-/is-empty-1.2.0.tgz#de9bb5b278738a05a0b09a57e1fb4d4a341a9f6b" + integrity sha512-F2FnH/otLNJv0J6wc73A5Xo7oHLNnqplYqZhUu01tD54DIPvxIRSTSLkrUB/M0nHO4vo1O9PDfN4KoTxCzLh/w== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-finalizationregistry@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" + integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== + dependencies: + call-bind "^1.0.2" + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-fullwidth-code-point@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" + integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-generator-function@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hexadecimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" + integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== + +is-hexadecimal@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027" + integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg== + +is-ip@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-ip/-/is-ip-3.1.0.tgz#2ae5ddfafaf05cb8008a62093cf29734f657c5d8" + integrity sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q== + dependencies: + ip-regex "^4.0.0" + +is-map@^2.0.2, is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== + +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-online@^8.2.1: + version "8.5.1" + resolved "https://registry.yarnpkg.com/is-online/-/is-online-8.5.1.tgz#bcc6970c6a3fad552a41738c0f0d0737b0ce6e63" + integrity sha512-RKyTQx/rJqw2QOXHwy7TmXdlkpe0Hhj7GBsr6TQJaj4ebNOfameZCMspU5vYbwBBzJ2brWArdSvNVox6T6oCTQ== + dependencies: + got "^9.6.0" + p-any "^2.0.0" + p-timeout "^3.0.0" + public-ip "^4.0.1" + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== + +is-plain-obj@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== + +is-plain-obj@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" + integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-relative-url@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-relative-url/-/is-relative-url-2.0.0.tgz#72902d7fe04b3d4792e7db15f9db84b7204c9cef" + integrity sha512-UMyEi3F+Rvjpc29IAQQ5OuMoKylt8npO0eQdXPQ2M3A5iFvh1qG+MtiLQR2tyHcVVsqwWrQiztjPAe9hnSHYeQ== + dependencies: + is-absolute-url "^2.0.0" + +is-retry-allowed@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz#88f34cbd236e043e71b6932d09b0c65fb7b4d71d" + integrity sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg== + +is-set@^2.0.2, is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== + +is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== + dependencies: + call-bind "^1.0.7" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== + dependencies: + which-typed-array "^1.1.14" + +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-weakset@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007" + integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== + +istanbul-lib-hook@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz#8f84c9434888cc6b1d0a9d7092a76d239ebf0cc6" + integrity sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ== + dependencies: + append-transform "^2.0.0" + +istanbul-lib-instrument@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + dependencies: + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" + +istanbul-lib-instrument@^5.0.4: + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-instrument@^6.0.0: + version "6.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz#fa15401df6c15874bcb2105f773325d78c666765" + integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q== + dependencies: + "@babel/core" "^7.23.9" + "@babel/parser" "^7.23.9" + "@istanbuljs/schema" "^0.1.3" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + +istanbul-lib-processinfo@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz#366d454cd0dcb7eb6e0e419378e60072c8626169" + integrity sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg== + dependencies: + archy "^1.0.0" + cross-spawn "^7.0.3" + istanbul-lib-coverage "^3.2.0" + p-map "^3.0.0" + rimraf "^3.0.0" + uuid "^8.3.2" + +istanbul-lib-report@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.0.2, istanbul-reports@^3.1.3: + version "3.1.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +iterator.prototype@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" + integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== + dependencies: + define-properties "^1.2.1" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + reflect.getprototypeof "^1.0.4" + set-function-name "^2.0.1" + +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== + dependencies: + execa "^5.0.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^1.0.0" + is-generator-fn "^2.0.0" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + pretty-format "^29.7.0" + pure-rand "^6.0.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== + dependencies: + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + chalk "^4.0.0" + create-jest "^29.7.0" + exit "^0.1.2" + import-local "^3.0.2" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + yargs "^17.3.1" + +jest-config@^29.5.0, jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^29.7.0" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== + dependencies: + detect-newline "^3.0.0" + +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" + +jest-environment-jsdom@^29.5.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz#d206fa3551933c3fd519e5dfdb58a0f5139a837f" + integrity sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/jsdom" "^20.0.0" + "@types/node" "*" + jest-mock "^29.7.0" + jest-util "^29.7.0" + jsdom "^20.0.0" + +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + jest-util "^29.7.0" + +jest-get-type@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" + integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== + +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== + +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== + dependencies: + "@jest/types" "^29.6.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + +jest-junit@^6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/jest-junit/-/jest-junit-6.4.0.tgz#23e15c979fa6338afde46f2d2ac2a6b7e8cf0d9e" + integrity sha512-GXEZA5WBeUich94BARoEUccJumhCgCerg7mXDFLxWwI2P7wL3Z7sGWk+53x343YdBLjiMR9aD/gYMVKO+0pE4Q== + dependencies: + jest-validate "^24.0.0" + mkdirp "^0.5.1" + strip-ansi "^4.0.0" + xml "^1.0.1" + +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== + dependencies: + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== + dependencies: + chalk "^4.0.0" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.6.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-util "^29.7.0" + +jest-pnp-resolver@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== + +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== + +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== + dependencies: + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" + +jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== + dependencies: + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-pnp-resolver "^1.2.2" + jest-util "^29.7.0" + jest-validate "^29.7.0" + resolve "^1.20.0" + resolve.exports "^2.0.0" + slash "^3.0.0" + +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== + dependencies: + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.13.1" + graceful-fs "^4.2.9" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== + dependencies: + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-jsx" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^29.7.0" + graceful-fs "^4.2.9" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + natural-compare "^1.4.0" + pretty-format "^29.7.0" + semver "^7.5.3" + +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^24.0.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.9.0.tgz#0775c55360d173cd854e40180756d4ff52def8ab" + integrity sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ== + dependencies: + "@jest/types" "^24.9.0" + camelcase "^5.3.1" + chalk "^2.0.1" + jest-get-type "^24.9.0" + leven "^3.1.0" + pretty-format "^24.9.0" + +jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== + dependencies: + "@jest/types" "^29.6.3" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^29.6.3" + leven "^3.1.0" + pretty-format "^29.7.0" + +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== + dependencies: + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.13.1" + jest-util "^29.7.0" + string-length "^4.0.1" + +jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== + dependencies: + "@types/node" "*" + jest-util "^29.7.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^29.5.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== + dependencies: + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" + import-local "^3.0.2" + jest-cli "^29.7.0" + +jiti@^1.20.0: + version "1.21.6" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.6.tgz#6c7f7398dd4b3142767f9a168af2f317a428d268" + integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w== + +js-base64@^3.7.2: + version "3.7.7" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.7.tgz#e51b84bf78fbf5702b9541e2cb7bfcb893b43e79" + integrity sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw== + +js-cookie@^3.0.1: + version "3.0.5" + resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-3.0.5.tgz#0b7e2fd0c01552c58ba86e0841f94dc2557dcdbc" + integrity sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1, js-yaml@^3.6.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsdom@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-19.0.0.tgz#93e67c149fe26816d38a849ea30ac93677e16b6a" + integrity sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A== + dependencies: + abab "^2.0.5" + acorn "^8.5.0" + acorn-globals "^6.0.0" + cssom "^0.5.0" + cssstyle "^2.3.0" + data-urls "^3.0.1" + decimal.js "^10.3.1" + domexception "^4.0.0" + escodegen "^2.0.0" + form-data "^4.0.0" + html-encoding-sniffer "^3.0.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.0" + parse5 "6.0.1" + saxes "^5.0.1" + symbol-tree "^3.2.4" + tough-cookie "^4.0.0" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^3.0.0" + webidl-conversions "^7.0.0" + whatwg-encoding "^2.0.0" + whatwg-mimetype "^3.0.0" + whatwg-url "^10.0.0" + ws "^8.2.3" + xml-name-validator "^4.0.0" + +jsdom@^20.0.0: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.3.tgz#886a41ba1d4726f67a8858028c99489fed6ad4db" + integrity sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ== + dependencies: + abab "^2.0.6" + acorn "^8.8.1" + acorn-globals "^7.0.0" + cssom "^0.5.0" + cssstyle "^2.3.0" + data-urls "^3.0.2" + decimal.js "^10.4.2" + domexception "^4.0.0" + escodegen "^2.0.0" + form-data "^4.0.0" + html-encoding-sniffer "^3.0.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.1" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.2" + parse5 "^7.1.1" + saxes "^6.0.0" + symbol-tree "^3.2.4" + tough-cookie "^4.1.2" + w3c-xmlserializer "^4.0.0" + webidl-conversions "^7.0.0" + whatwg-encoding "^2.0.0" + whatwg-mimetype "^3.0.0" + whatwg-url "^11.0.0" + ws "^8.11.0" + xml-name-validator "^4.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-logic-js@^2.0.1, json-logic-js@^2.0.2: + version "2.0.5" + resolved "https://registry.yarnpkg.com/json-logic-js/-/json-logic-js-2.0.5.tgz#55f0c687dd6f56b02ccdcfdd64171ed998ab5499" + integrity sha512-rTT2+lqcuUmj4DgWfmzupZqQDA64AdmYqizzMPWj3DxGdfFNsxPpcNVSaTj4l8W2tG/+hg7/mQhxjU3aPacO6g== + +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json2mq@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/json2mq/-/json2mq-0.2.0.tgz#b637bd3ba9eabe122c83e9720483aeb10d2c904a" + integrity sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA== + dependencies: + string-convert "^0.2.0" + +json5@^1.0.1, json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +json5@^2.0.0, json5@^2.1.2, json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.5: + version "3.3.5" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" + integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== + dependencies: + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + object.assign "^4.1.4" + object.values "^1.1.6" + +jszip@3.10.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" + integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== + dependencies: + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + setimmediate "^1.0.5" + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +kind-of@^6.0.2, kind-of@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +kleur@^4.0.3: + version "4.1.5" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" + integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== + +klona@^2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" + integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== + +known-css-properties@^0.29.0: + version "0.29.0" + resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.29.0.tgz#e8ba024fb03886f23cb882e806929f32d814158f" + integrity sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ== + +language-subtag-registry@^0.3.20: + version "0.3.23" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz#23529e04d9e3b74679d70142df3fd2eb6ec572e7" + integrity sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ== + +language-tags@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.9.tgz#1ffdcd0ec0fafb4b1be7f8b11f306ad0f9c08777" + integrity sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA== + dependencies: + language-subtag-registry "^0.3.20" + +launch-editor@^2.6.0: + version "2.8.2" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.8.2.tgz#939e1b3469f9d5471e4eaacedd51b3b7c45352cd" + integrity sha512-eF5slEUZXmi6WvFzI3dYcv+hA24/iKnROf24HztcURJpSz9RBmBgz5cNCVOeguouf1llrwy6Yctl4C4HM+xI8g== + dependencies: + picocolors "^1.0.0" + shell-quote "^1.8.1" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +libnpmconfig@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/libnpmconfig/-/libnpmconfig-1.2.1.tgz#c0c2f793a74e67d4825e5039e7a02a0044dfcbc0" + integrity sha512-9esX8rTQAHqarx6qeZqmGQKBNZR5OIbl/Ayr0qQDy3oXja2iFVQQI81R6GZ2a02bSNZ9p3YOGX1O6HHCb1X7kA== + dependencies: + figgy-pudding "^3.5.1" + find-up "^3.0.0" + ini "^1.3.5" + +lie@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== + dependencies: + immediate "~3.0.5" + +lilconfig@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" + integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +lint-staged@^13.0.3: + version "13.3.0" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.3.0.tgz#7965d72a8d6a6c932f85e9c13ccf3596782d28a5" + integrity sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ== + dependencies: + chalk "5.3.0" + commander "11.0.0" + debug "4.3.4" + execa "7.2.0" + lilconfig "2.1.0" + listr2 "6.6.1" + micromatch "4.0.5" + pidtree "0.6.0" + string-argv "0.3.2" + yaml "2.3.1" + +listr2@6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-6.6.1.tgz#08b2329e7e8ba6298481464937099f4a2cd7f95d" + integrity sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg== + dependencies: + cli-truncate "^3.1.0" + colorette "^2.0.20" + eventemitter3 "^5.0.1" + log-update "^5.0.1" + rfdc "^1.3.0" + wrap-ansi "^8.1.0" + +load-plugin@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/load-plugin/-/load-plugin-3.0.0.tgz#8f3ce57cf4e5111639911012487bc1c2ba3d0e6c" + integrity sha512-od7eKCCZ62ITvFf8nHHrIiYmgOHb4xVNDRDqxBWSaao5FZyyZVX8OmRCbwjDGPrSrgIulwPNyBsWCGnhiDC0oQ== + dependencies: + libnpmconfig "^1.0.0" + resolve-from "^5.0.0" + +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +loader-utils@^1.2.3: + version "1.4.2" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.2.tgz#29a957f3a63973883eb684f10ffd3d151fec01a3" + integrity sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +loader-utils@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" + integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash-es@^4.17.15: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash._baseiteratee@~4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash._baseiteratee/-/lodash._baseiteratee-4.7.0.tgz#34a9b5543572727c3db2e78edae3c0e9e66bd102" + integrity sha512-nqB9M+wITz0BX/Q2xg6fQ8mLkyfF7MU7eE+MNBNjTHFKeKaZAPEzEg+E8LWxKWf1DQVflNEn9N49yAuqKh2mWQ== + dependencies: + lodash._stringtopath "~4.8.0" + +lodash._basetostring@~4.12.0: + version "4.12.0" + resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-4.12.0.tgz#9327c9dc5158866b7fa4b9d42f4638e5766dd9df" + integrity sha512-SwcRIbyxnN6CFEEK4K1y+zuApvWdpQdBHM/swxP962s8HIxPO3alBH5t3m/dl+f4CMUug6sJb7Pww8d13/9WSw== + +lodash._baseuniq@~4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" + integrity sha512-Ja1YevpHZctlI5beLA7oc5KNDhGcPixFhcqSiORHNsp/1QTv7amAXzw+gu4YOvErqVlMVyIJGgtzeepCnnur0A== + dependencies: + lodash._createset "~4.0.0" + lodash._root "~3.0.0" + +lodash._createset@~4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" + integrity sha512-GTkC6YMprrJZCYU3zcqZj+jkXkrXzq3IPBcF/fIPpNEAB4hZEtXU8zp/RwKOvZl43NUmwDbyRk3+ZTbeRdEBXA== + +lodash._root@~3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" + integrity sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ== + +lodash._stringtopath@~4.8.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/lodash._stringtopath/-/lodash._stringtopath-4.8.0.tgz#941bcf0e64266e5fc1d66fed0a6959544c576824" + integrity sha512-SXL66C731p0xPDC5LZg4wI5H+dJo/EO4KTqOMwLYCH3+FmmfAKJEZCm6ohGpI+T1xwsDsJCfL4OnhorllvlTPQ== + dependencies: + lodash._basetostring "~4.12.0" + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.flattendeep@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" + integrity sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ== + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.throttle@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" + integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ== + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== + +lodash.uniqby@4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.5.0.tgz#a3a17bbf62eeb6240f491846e97c1c4e2a5e1e21" + integrity sha512-IRt7cfTtHy6f1aRVA5n7kT8rgN3N1nH6MOWLcHfpWG2SH19E3JksLK38MktLxZDhlAjCP9jpIXkOnRXlu6oByQ== + dependencies: + lodash._baseiteratee "~4.7.0" + lodash._baseuniq "~4.6.0" + +lodash.upperfirst@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" + integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== + +lodash@^4.0.1, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-update@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-5.0.1.tgz#9e928bf70cb183c1f0c9e91d9e6b7115d597ce09" + integrity sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw== + dependencies: + ansi-escapes "^5.0.0" + cli-cursor "^4.0.0" + slice-ansi "^5.0.0" + strip-ansi "^7.0.1" + wrap-ansi "^8.0.1" + +long@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" + integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== + +longest-streak@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4" + integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg== + +longest-streak@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" + integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@*: + version "11.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.0.0.tgz#15d93a196f189034d7166caf9fe55e7384c98a21" + integrity sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lru-cache@^9.1.1: + version "9.1.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-9.1.2.tgz#255fdbc14b75589d6d0e73644ca167a8db506835" + integrity sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ== + +make-dir@^2.0.0, make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + +map-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== + +map-obj@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" + integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== + +markdown-extensions@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/markdown-extensions/-/markdown-extensions-1.1.1.tgz#fea03b539faeaee9b4ef02a3769b455b189f7fc3" + integrity sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q== + +markdown-table@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-2.0.0.tgz#194a90ced26d31fe753d8b9434430214c011865b" + integrity sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A== + dependencies: + repeat-string "^1.0.0" + +markdown-table@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-3.0.3.tgz#e6331d30e493127e031dd385488b5bd326e4a6bd" + integrity sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw== + +material-colors@^1.2.1: + version "1.2.6" + resolved "https://registry.yarnpkg.com/material-colors/-/material-colors-1.2.6.tgz#6d1958871126992ceecc72f4bcc4d8f010865f46" + integrity sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg== + +mathml-tag-names@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" + integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== + +mdast-comment-marker@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/mdast-comment-marker/-/mdast-comment-marker-1.1.2.tgz#5ad2e42cfcc41b92a10c1421a98c288d7b447a6d" + integrity sha512-vTFXtmbbF3rgnTh3Zl3irso4LtvwUq/jaDvT2D1JqTGAwaipcS7RpTxzi6KjoRqI9n2yuAhzLDAC8xVTF3XYVQ== + +mdast-util-definitions@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz#9910abb60ac5d7115d6819b57ae0bcef07a3f7a7" + integrity sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + unist-util-visit "^4.0.0" + +mdast-util-find-and-replace@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-1.1.1.tgz#b7db1e873f96f66588c321f1363069abf607d1b5" + integrity sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA== + dependencies: + escape-string-regexp "^4.0.0" + unist-util-is "^4.0.0" + unist-util-visit-parents "^3.0.0" + +mdast-util-find-and-replace@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.2.tgz#cc2b774f7f3630da4bd592f61966fecade8b99b1" + integrity sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw== + dependencies: + "@types/mdast" "^3.0.0" + escape-string-regexp "^5.0.0" + unist-util-is "^5.0.0" + unist-util-visit-parents "^5.0.0" + +mdast-util-from-markdown@^0.8.0: + version "0.8.5" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz#d1ef2ca42bc377ecb0463a987910dae89bd9a28c" + integrity sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ== + dependencies: + "@types/mdast" "^3.0.0" + mdast-util-to-string "^2.0.0" + micromark "~2.11.0" + parse-entities "^2.0.0" + unist-util-stringify-position "^2.0.0" + +mdast-util-from-markdown@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz#9421a5a247f10d31d2faed2a30df5ec89ceafcf0" + integrity sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + decode-named-character-reference "^1.0.0" + mdast-util-to-string "^3.1.0" + micromark "^3.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-decode-string "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + unist-util-stringify-position "^3.0.0" + uvu "^0.5.0" + +mdast-util-frontmatter@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/mdast-util-frontmatter/-/mdast-util-frontmatter-0.2.0.tgz#8bd5cd55e236c03e204a036f7372ebe9e6748240" + integrity sha512-FHKL4w4S5fdt1KjJCwB0178WJ0evnyyQr5kXTM3wrOVpytD0hrkvd+AOOjU9Td8onOejCkmZ+HQRT3CZ3coHHQ== + dependencies: + micromark-extension-frontmatter "^0.2.0" + +mdast-util-gfm-autolink-literal@^0.1.0: + version "0.1.3" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-0.1.3.tgz#9c4ff399c5ddd2ece40bd3b13e5447d84e385fb7" + integrity sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A== + dependencies: + ccount "^1.0.0" + mdast-util-find-and-replace "^1.1.0" + micromark "^2.11.3" + +mdast-util-gfm-autolink-literal@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.3.tgz#67a13abe813d7eba350453a5333ae1bc0ec05c06" + integrity sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA== + dependencies: + "@types/mdast" "^3.0.0" + ccount "^2.0.0" + mdast-util-find-and-replace "^2.0.0" + micromark-util-character "^1.0.0" + +mdast-util-gfm-footnote@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.2.tgz#ce5e49b639c44de68d5bf5399877a14d5020424e" + integrity sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ== + dependencies: + "@types/mdast" "^3.0.0" + mdast-util-to-markdown "^1.3.0" + micromark-util-normalize-identifier "^1.0.0" + +mdast-util-gfm-strikethrough@^0.2.0: + version "0.2.3" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-0.2.3.tgz#45eea337b7fff0755a291844fbea79996c322890" + integrity sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA== + dependencies: + mdast-util-to-markdown "^0.6.0" + +mdast-util-gfm-strikethrough@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.3.tgz#5470eb105b483f7746b8805b9b989342085795b7" + integrity sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ== + dependencies: + "@types/mdast" "^3.0.0" + mdast-util-to-markdown "^1.3.0" + +mdast-util-gfm-table@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.6.tgz#af05aeadc8e5ee004eeddfb324b2ad8c029b6ecf" + integrity sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ== + dependencies: + markdown-table "^2.0.0" + mdast-util-to-markdown "~0.6.0" + +mdast-util-gfm-table@^1.0.0: + version "1.0.7" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.7.tgz#3552153a146379f0f9c4c1101b071d70bbed1a46" + integrity sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg== + dependencies: + "@types/mdast" "^3.0.0" + markdown-table "^3.0.0" + mdast-util-from-markdown "^1.0.0" + mdast-util-to-markdown "^1.3.0" + +mdast-util-gfm-task-list-item@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-0.1.6.tgz#70c885e6b9f543ddd7e6b41f9703ee55b084af10" + integrity sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A== + dependencies: + mdast-util-to-markdown "~0.6.0" + +mdast-util-gfm-task-list-item@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.2.tgz#b280fcf3b7be6fd0cc012bbe67a59831eb34097b" + integrity sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ== + dependencies: + "@types/mdast" "^3.0.0" + mdast-util-to-markdown "^1.3.0" + +mdast-util-gfm@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-0.1.2.tgz#8ecddafe57d266540f6881f5c57ff19725bd351c" + integrity sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ== + dependencies: + mdast-util-gfm-autolink-literal "^0.1.0" + mdast-util-gfm-strikethrough "^0.2.0" + mdast-util-gfm-table "^0.1.0" + mdast-util-gfm-task-list-item "^0.1.0" + mdast-util-to-markdown "^0.6.1" + +mdast-util-gfm@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-2.0.2.tgz#e92f4d8717d74bdba6de57ed21cc8b9552e2d0b6" + integrity sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg== + dependencies: + mdast-util-from-markdown "^1.0.0" + mdast-util-gfm-autolink-literal "^1.0.0" + mdast-util-gfm-footnote "^1.0.0" + mdast-util-gfm-strikethrough "^1.0.0" + mdast-util-gfm-table "^1.0.0" + mdast-util-gfm-task-list-item "^1.0.0" + mdast-util-to-markdown "^1.0.0" + +mdast-util-heading-style@^1.0.2: + version "1.0.6" + resolved "https://registry.yarnpkg.com/mdast-util-heading-style/-/mdast-util-heading-style-1.0.6.tgz#6410418926fd5673d40f519406b35d17da10e3c5" + integrity sha512-8ZuuegRqS0KESgjAGW8zTx4tJ3VNIiIaGFNEzFpRSAQBavVc7AvOo9I4g3crcZBfYisHs4seYh0rAVimO6HyOw== + +mdast-util-phrasing@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz#c7c21d0d435d7fb90956038f02e8702781f95463" + integrity sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg== + dependencies: + "@types/mdast" "^3.0.0" + unist-util-is "^5.0.0" + +mdast-util-to-hast@^12.1.0: + version "12.3.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz#045d2825fb04374e59970f5b3f279b5700f6fb49" + integrity sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw== + dependencies: + "@types/hast" "^2.0.0" + "@types/mdast" "^3.0.0" + mdast-util-definitions "^5.0.0" + micromark-util-sanitize-uri "^1.1.0" + trim-lines "^3.0.0" + unist-util-generated "^2.0.0" + unist-util-position "^4.0.0" + unist-util-visit "^4.0.0" + +mdast-util-to-markdown@^0.6.0, mdast-util-to-markdown@^0.6.1, mdast-util-to-markdown@~0.6.0: + version "0.6.5" + resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz#b33f67ca820d69e6cc527a93d4039249b504bebe" + integrity sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ== + dependencies: + "@types/unist" "^2.0.0" + longest-streak "^2.0.0" + mdast-util-to-string "^2.0.0" + parse-entities "^2.0.0" + repeat-string "^1.0.0" + zwitch "^1.0.0" + +mdast-util-to-markdown@^1.0.0, mdast-util-to-markdown@^1.3.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz#c13343cb3fc98621911d33b5cd42e7d0731171c6" + integrity sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + longest-streak "^3.0.0" + mdast-util-phrasing "^3.0.0" + mdast-util-to-string "^3.0.0" + micromark-util-decode-string "^1.0.0" + unist-util-visit "^4.0.0" + zwitch "^2.0.0" + +mdast-util-to-string@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz#27055500103f51637bd07d01da01eb1967a43527" + integrity sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A== + +mdast-util-to-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" + integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== + +mdast-util-to-string@^3.0.0, mdast-util-to-string@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz#66f7bb6324756741c5f47a53557f0cbf16b6f789" + integrity sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg== + dependencies: + "@types/mdast" "^3.0.0" + +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + +mdn-data@2.0.30: + version "2.0.30" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" + integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== + +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" + integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + +memfs@^3.4.3: + version "3.6.0" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6" + integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== + dependencies: + fs-monkey "^1.0.4" + +meow@^10.1.5: + version "10.1.5" + resolved "https://registry.yarnpkg.com/meow/-/meow-10.1.5.tgz#be52a1d87b5f5698602b0f32875ee5940904aa7f" + integrity sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw== + dependencies: + "@types/minimist" "^1.2.2" + camelcase-keys "^7.0.0" + decamelize "^5.0.0" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.2" + read-pkg-up "^8.0.0" + redent "^4.0.0" + trim-newlines "^4.0.2" + type-fest "^1.2.2" + yargs-parser "^20.2.9" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +meshoptimizer@~0.18.1: + version "0.18.1" + resolved "https://registry.yarnpkg.com/meshoptimizer/-/meshoptimizer-0.18.1.tgz#cdb90907f30a7b5b1190facd3b7ee6b7087797d8" + integrity sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromark-core-commonmark@^1.0.0, micromark-core-commonmark@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz#1386628df59946b2d39fb2edfd10f3e8e0a75bb8" + integrity sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw== + dependencies: + decode-named-character-reference "^1.0.0" + micromark-factory-destination "^1.0.0" + micromark-factory-label "^1.0.0" + micromark-factory-space "^1.0.0" + micromark-factory-title "^1.0.0" + micromark-factory-whitespace "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-chunked "^1.0.0" + micromark-util-classify-character "^1.0.0" + micromark-util-html-tag-name "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-resolve-all "^1.0.0" + micromark-util-subtokenize "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.1" + uvu "^0.5.0" + +micromark-extension-frontmatter@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/micromark-extension-frontmatter/-/micromark-extension-frontmatter-0.2.2.tgz#61b8e92e9213e1d3c13f5a59e7862f5ca98dfa53" + integrity sha512-q6nPLFCMTLtfsctAuS0Xh4vaolxSFUWUWR6PZSrXXiRy+SANGllpcqdXFv2z07l0Xz/6Hl40hK0ffNCJPH2n1A== + dependencies: + fault "^1.0.0" + +micromark-extension-gfm-autolink-literal@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.5.tgz#5853f0e579bbd8ef9e39a7c0f0f27c5a063a66e7" + integrity sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-sanitize-uri "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-extension-gfm-autolink-literal@~0.5.0: + version "0.5.7" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-0.5.7.tgz#53866c1f0c7ef940ae7ca1f72c6faef8fed9f204" + integrity sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw== + dependencies: + micromark "~2.11.3" + +micromark-extension-gfm-footnote@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.1.2.tgz#05e13034d68f95ca53c99679040bc88a6f92fe2e" + integrity sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q== + dependencies: + micromark-core-commonmark "^1.0.0" + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-sanitize-uri "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-extension-gfm-strikethrough@^1.0.0: + version "1.0.7" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.7.tgz#c8212c9a616fa3bf47cb5c711da77f4fdc2f80af" + integrity sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw== + dependencies: + micromark-util-chunked "^1.0.0" + micromark-util-classify-character "^1.0.0" + micromark-util-resolve-all "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-extension-gfm-strikethrough@~0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-0.6.5.tgz#96cb83356ff87bf31670eefb7ad7bba73e6514d1" + integrity sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw== + dependencies: + micromark "~2.11.0" + +micromark-extension-gfm-table@^1.0.0: + version "1.0.7" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.7.tgz#dcb46074b0c6254c3fc9cc1f6f5002c162968008" + integrity sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw== + dependencies: + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-extension-gfm-table@~0.4.0: + version "0.4.3" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-0.4.3.tgz#4d49f1ce0ca84996c853880b9446698947f1802b" + integrity sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA== + dependencies: + micromark "~2.11.0" + +micromark-extension-gfm-tagfilter@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.2.tgz#aa7c4dd92dabbcb80f313ebaaa8eb3dac05f13a7" + integrity sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g== + dependencies: + micromark-util-types "^1.0.0" + +micromark-extension-gfm-tagfilter@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-0.3.0.tgz#d9f26a65adee984c9ccdd7e182220493562841ad" + integrity sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q== + +micromark-extension-gfm-task-list-item@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.5.tgz#b52ce498dc4c69b6a9975abafc18f275b9dde9f4" + integrity sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ== + dependencies: + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-extension-gfm-task-list-item@~0.3.0: + version "0.3.3" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-0.3.3.tgz#d90c755f2533ed55a718129cee11257f136283b8" + integrity sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ== + dependencies: + micromark "~2.11.0" + +micromark-extension-gfm@^0.3.0: + version "0.3.3" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm/-/micromark-extension-gfm-0.3.3.tgz#36d1a4c089ca8bdfd978c9bd2bf1a0cb24e2acfe" + integrity sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A== + dependencies: + micromark "~2.11.0" + micromark-extension-gfm-autolink-literal "~0.5.0" + micromark-extension-gfm-strikethrough "~0.6.5" + micromark-extension-gfm-table "~0.4.0" + micromark-extension-gfm-tagfilter "~0.3.0" + micromark-extension-gfm-task-list-item "~0.3.0" + +micromark-extension-gfm@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm/-/micromark-extension-gfm-2.0.3.tgz#e517e8579949a5024a493e49204e884aa74f5acf" + integrity sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ== + dependencies: + micromark-extension-gfm-autolink-literal "^1.0.0" + micromark-extension-gfm-footnote "^1.0.0" + micromark-extension-gfm-strikethrough "^1.0.0" + micromark-extension-gfm-table "^1.0.0" + micromark-extension-gfm-tagfilter "^1.0.0" + micromark-extension-gfm-task-list-item "^1.0.0" + micromark-util-combine-extensions "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-destination@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz#eb815957d83e6d44479b3df640f010edad667b9f" + integrity sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-label@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz#cc95d5478269085cfa2a7282b3de26eb2e2dec68" + integrity sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-factory-space@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz#c8f40b0640a0150751d3345ed885a080b0d15faf" + integrity sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-title@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz#dd0fe951d7a0ac71bdc5ee13e5d1465ad7f50ea1" + integrity sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ== + dependencies: + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-whitespace@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz#798fb7489f4c8abafa7ca77eed6b5745853c9705" + integrity sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ== + dependencies: + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-character@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-1.2.0.tgz#4fedaa3646db249bc58caeb000eb3549a8ca5dcc" + integrity sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg== + dependencies: + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-chunked@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz#37a24d33333c8c69a74ba12a14651fd9ea8a368b" + integrity sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ== + dependencies: + micromark-util-symbol "^1.0.0" + +micromark-util-classify-character@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz#6a7f8c8838e8a120c8e3c4f2ae97a2bff9190e9d" + integrity sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-combine-extensions@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz#192e2b3d6567660a85f735e54d8ea6e3952dbe84" + integrity sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA== + dependencies: + micromark-util-chunked "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-decode-numeric-character-reference@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz#b1e6e17009b1f20bc652a521309c5f22c85eb1c6" + integrity sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw== + dependencies: + micromark-util-symbol "^1.0.0" + +micromark-util-decode-string@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz#dc12b078cba7a3ff690d0203f95b5d5537f2809c" + integrity sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ== + dependencies: + decode-named-character-reference "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-symbol "^1.0.0" + +micromark-util-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz#92e4f565fd4ccb19e0dcae1afab9a173bbeb19a5" + integrity sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw== + +micromark-util-html-tag-name@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz#48fd7a25826f29d2f71479d3b4e83e94829b3588" + integrity sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q== + +micromark-util-normalize-identifier@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz#7a73f824eb9f10d442b4d7f120fecb9b38ebf8b7" + integrity sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q== + dependencies: + micromark-util-symbol "^1.0.0" + +micromark-util-resolve-all@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz#4652a591ee8c8fa06714c9b54cd6c8e693671188" + integrity sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA== + dependencies: + micromark-util-types "^1.0.0" + +micromark-util-sanitize-uri@^1.0.0, micromark-util-sanitize-uri@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz#613f738e4400c6eedbc53590c67b197e30d7f90d" + integrity sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-encode "^1.0.0" + micromark-util-symbol "^1.0.0" + +micromark-util-subtokenize@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz#941c74f93a93eaf687b9054aeb94642b0e92edb1" + integrity sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A== + dependencies: + micromark-util-chunked "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-util-symbol@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz#813cd17837bdb912d069a12ebe3a44b6f7063142" + integrity sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag== + +micromark-util-types@^1.0.0, micromark-util-types@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-1.1.0.tgz#e6676a8cae0bb86a2171c498167971886cb7e283" + integrity sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg== + +micromark@^2.11.3, micromark@~2.11.0, micromark@~2.11.3: + version "2.11.4" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-2.11.4.tgz#d13436138eea826383e822449c9a5c50ee44665a" + integrity sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA== + dependencies: + debug "^4.0.0" + parse-entities "^2.0.0" + +micromark@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-3.2.0.tgz#1af9fef3f995ea1ea4ac9c7e2f19c48fd5c006e9" + integrity sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA== + dependencies: + "@types/debug" "^4.0.0" + debug "^4.0.0" + decode-named-character-reference "^1.0.0" + micromark-core-commonmark "^1.0.1" + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-chunked "^1.0.0" + micromark-util-combine-extensions "^1.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-encode "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-resolve-all "^1.0.0" + micromark-util-sanitize-uri "^1.0.0" + micromark-util-subtokenize "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.1" + uvu "^0.5.0" + +micromatch@4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +"mime-db@>= 1.43.0 < 2": + version "1.53.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.53.0.tgz#3cb63cd820fc29896d9d4e8c32ab4fcd74ccb447" + integrity sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg== + +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-fn@^2.0.0, mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" + integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== + +min-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +minimalistic-assert@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimatch@9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist-options@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass@^3.0.0: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp@^0.5.1, mkdirp@~0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mkdirp@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +moment@^2.29.2, moment@^2.30.1: + version "2.30.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" + integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== + +mousetrap@^1.6.5: + version "1.6.5" + resolved "https://registry.yarnpkg.com/mousetrap/-/mousetrap-1.6.5.tgz#8a766d8c272b08393d5f56074e0b5ec183485bf9" + integrity sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA== + +mri@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" + integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multicast-dns@^7.2.5: + version "7.2.5" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" + integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== + dependencies: + dns-packet "^5.2.2" + thunky "^1.0.2" + +nan@^2.17.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.20.0.tgz#08c5ea813dd54ed16e5bd6505bf42af4f7838ca3" + integrity sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw== + +nanoid@^3.3.7: + version "3.3.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-fetch@^2.6.7: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-forge@^1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-preload@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/node-preload/-/node-preload-0.2.1.tgz#c03043bb327f417a18fee7ab7ee57b408a144301" + integrity sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ== + dependencies: + process-on-spawn "^1.0.0" + +node-releases@^2.0.18: + version "2.0.18" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" + integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== + +nodemon@^3.0.1: + version "3.1.4" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.4.tgz#c34dcd8eb46a05723ccde60cbdd25addcc8725e4" + integrity sha512-wjPBbFhtpJwmIeY2yP7QF+UKzPfltVGtfce1g/bB15/8vCGZj8uxD62b/b9M9/WVgme0NZudpownKN+c0plXlQ== + dependencies: + chokidar "^3.5.2" + debug "^4" + ignore-by-default "^1.0.1" + minimatch "^3.1.2" + pstree.remy "^1.1.8" + semver "^7.5.3" + simple-update-notifier "^2.0.0" + supports-color "^5.5.0" + touch "^3.1.0" + undefsafe "^2.0.5" + +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + +normalize-package-data@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" + integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== + dependencies: + hosted-git-info "^4.0.1" + is-core-module "^2.5.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== + +normalize-url@^4.1.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" + integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== + +not@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/not/-/not-0.1.0.tgz#c9691c1746c55dcfbe54cbd8bd4ff041bc2b519d" + integrity sha512-5PDmaAsVfnWUgTUbJ3ERwn7u79Z0dYxN9ErxCpVJJqe2RK0PJ3z+iFUxuqjwtlDDegXvtWoxD/3Fzxox7tFGWA== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npm-run-path@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" + integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== + dependencies: + path-key "^4.0.0" + +npmlog@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" + integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== + dependencies: + are-we-there-yet "^2.0.0" + console-control-strings "^1.1.0" + gauge "^3.0.0" + set-blocking "^2.0.0" + +nth-check@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +nth-check@^2.0.0, nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +nwsapi@^2.2.0, nwsapi@^2.2.2: + version "2.2.12" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.12.tgz#fb6af5c0ec35b27b4581eb3bbad34ec9e5c696f8" + integrity sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w== + +nyc@^15.1.0: + version "15.1.0" + resolved "https://registry.yarnpkg.com/nyc/-/nyc-15.1.0.tgz#1335dae12ddc87b6e249d5a1994ca4bdaea75f02" + integrity sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A== + dependencies: + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + caching-transform "^4.0.0" + convert-source-map "^1.7.0" + decamelize "^1.2.0" + find-cache-dir "^3.2.0" + find-up "^4.1.0" + foreground-child "^2.0.0" + get-package-type "^0.1.0" + glob "^7.1.6" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-hook "^3.0.0" + istanbul-lib-instrument "^4.0.0" + istanbul-lib-processinfo "^2.0.2" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + make-dir "^3.0.0" + node-preload "^0.2.1" + p-map "^3.0.0" + process-on-spawn "^1.0.0" + resolve-from "^5.0.0" + rimraf "^3.0.0" + signal-exit "^3.0.2" + spawn-wrap "^2.0.0" + test-exclude "^6.0.0" + yargs "^15.0.2" + +object-assign@4.x, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.13.1: + version "1.13.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" + integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== + +object-is@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" + integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.2, object.assign@^4.1.4, object.assign@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.entries@^1.1.2, object.entries@^1.1.5, object.entries@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" + integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +object.fromentries@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + +object.getownpropertydescriptors@^2.1.0: + version "2.1.8" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz#2f1fe0606ec1a7658154ccd4f728504f69667923" + integrity sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A== + dependencies: + array.prototype.reduce "^1.0.6" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + gopd "^1.0.1" + safe-array-concat "^1.1.2" + +object.groupby@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" + integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + +object.values@^1.1.0, object.values@^1.1.6, object.values@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" + integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + +onnx-proto@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/onnx-proto/-/onnx-proto-4.0.4.tgz#2431a25bee25148e915906dda0687aafe3b9e044" + integrity sha512-aldMOB3HRoo6q/phyB6QRQxSt895HNNw82BNyZ2CMh4bjeKv7g/c+VpAFtJuEMVfYLMbRx61hbuqnKceLeDcDA== + dependencies: + protobufjs "^6.8.8" + +onnxruntime-common@~1.14.0: + version "1.14.0" + resolved "https://registry.yarnpkg.com/onnxruntime-common/-/onnxruntime-common-1.14.0.tgz#2bb5dac5261269779aa5fb6536ca379657de8bf6" + integrity sha512-3LJpegM2iMNRX2wUmtYfeX/ytfOzNwAWKSq1HbRrKc9+uqG/FsEA0bbKZl1btQeZaXhC26l44NWpNUeXPII7Ew== + +onnxruntime-web@1.14.0: + version "1.14.0" + resolved "https://registry.yarnpkg.com/onnxruntime-web/-/onnxruntime-web-1.14.0.tgz#c8cee538781b1d4c1c6b043934f4a3e6ddf1466e" + integrity sha512-Kcqf43UMfW8mCydVGcX9OMXI2VN17c0p6XvR7IPSZzBf/6lteBzXHvcEVWDPmCKuGombl997HgLqj91F11DzXw== + dependencies: + flatbuffers "^1.12.0" + guid-typescript "^1.0.9" + long "^4.0.0" + onnx-proto "^4.0.4" + onnxruntime-common "~1.14.0" + platform "^1.3.6" + +open@^8.0.9: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.5" + +p-any@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-any/-/p-any-2.1.0.tgz#719489408e14f5f941a748f1e817f5c71cab35cb" + integrity sha512-JAERcaMBLYKMq+voYw36+x5Dgh47+/o7yuv2oQYuSSUml4YeqJEFznBrY2UeEkoSHqBua6hz518n/PsowTYLLg== + dependencies: + p-cancelable "^2.0.0" + p-some "^4.0.0" + type-fest "^0.3.0" + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2, p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + +p-memoize@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-memoize/-/p-memoize-2.1.0.tgz#9ac80c8cf9373c52dfece6aae1fd2e300602898a" + integrity sha512-c6+a2iV4JyX0r4+i2IBJYO0r6LZAT2fg/tcB6GQbv1uzZsfsmKT7Ej5DRT1G6Wi7XUJSV2ZiP9+YEtluvhCmkg== + dependencies: + mem "^4.0.0" + mimic-fn "^1.0.0" + +p-retry@^4.5.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" + integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== + dependencies: + "@types/retry" "0.12.0" + retry "^0.13.1" + +p-some@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-some/-/p-some-4.1.0.tgz#28e73bc1e0d62db54c2ed513acd03acba30d5c04" + integrity sha512-MF/HIbq6GeBqTrTIl5OJubzkGU+qfFhAFi0gnTAK6rgEIJIknEiABHOTtQu4e6JiXjIwuMPMUFQzyHh5QjCl1g== + dependencies: + aggregate-error "^3.0.0" + p-cancelable "^2.0.0" + +p-timeout@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== + dependencies: + p-finally "^1.0.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +package-hash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-4.0.0.tgz#3537f654665ec3cc38827387fc904c163c54f506" + integrity sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ== + dependencies: + graceful-fs "^4.1.15" + hasha "^5.0.0" + lodash.flattendeep "^4.4.0" + release-zalgo "^1.0.0" + +pako@~1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +param-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" + integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + +parse-entities@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-4.0.1.tgz#4e2a01111fb1c986549b944af39eeda258fc9e4e" + integrity sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w== + dependencies: + "@types/unist" "^2.0.0" + character-entities "^2.0.0" + character-entities-legacy "^3.0.0" + character-reference-invalid "^2.0.0" + decode-named-character-reference "^1.0.0" + is-alphanumerical "^2.0.0" + is-decimal "^2.0.0" + is-hexadecimal "^2.0.0" + +parse-json@^5.0.0, parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-numeric-range@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz#7c63b61190d61e4d53a1197f0c83c47bb670ffa3" + integrity sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ== + +parse5@6.0.1, parse5@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parse5@^7.0.0, parse5@^7.1.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + dependencies: + entities "^4.4.0" + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +path-to-regexp@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + dependencies: + isarray "0.0.1" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + +picocolors@^1.0.0, picocolors@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.0.tgz#5358b76a78cde483ba5cef6a9dc9671440b27d59" + integrity sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pidtree@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" + integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pirates@^4.0.4, pirates@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.1.0, pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +platform@^1.3.5, platform@^1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7" + integrity sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg== + +pluralize@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" + integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== + +polylabel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/polylabel/-/polylabel-1.1.0.tgz#9483e64fc7a12a49f43e07e7a06752214ed2a8e7" + integrity sha512-bxaGcA40sL3d6M4hH72Z4NdLqxpXRsCFk8AITYg6x1rn1Ei3izf00UMLklerBZTO49aPA3CYrIwVulx2Bce2pA== + dependencies: + tinyqueue "^2.0.3" + +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + +postcss-attribute-case-insensitive@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-6.0.3.tgz#d118023911a768dfccfc0b0147f5ff06d8485806" + integrity sha512-KHkmCILThWBRtg+Jn1owTnHPnFit4OkqS+eKiGEOPIGke54DCeYGJ6r0Fx/HjfE9M9kznApCLcU0DvnPchazMQ== + dependencies: + postcss-selector-parser "^6.0.13" + +postcss-clamp@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-clamp/-/postcss-clamp-4.1.0.tgz#7263e95abadd8c2ba1bd911b0b5a5c9c93e02363" + integrity sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-color-functional-notation@^6.0.14: + version "6.0.14" + resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.14.tgz#958d8fc434fafbb15ebc7964053f19d366773078" + integrity sha512-dNUX+UH4dAozZ8uMHZ3CtCNYw8fyFAmqqdcyxMr7PEdM9jLXV19YscoYO0F25KqZYhmtWKQ+4tKrIZQrwzwg7A== + dependencies: + "@csstools/css-color-parser" "^2.0.4" + "@csstools/css-parser-algorithms" "^2.7.1" + "@csstools/css-tokenizer" "^2.4.1" + "@csstools/postcss-progressive-custom-properties" "^3.3.0" + "@csstools/utilities" "^1.0.0" + +postcss-color-hex-alpha@^9.0.4: + version "9.0.4" + resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-9.0.4.tgz#f455902fb222453b2eb9699dfa9fc17a9c056f1e" + integrity sha512-XQZm4q4fNFqVCYMGPiBjcqDhuG7Ey2xrl99AnDJMyr5eDASsAGalndVgHZF8i97VFNy1GQeZc4q2ydagGmhelQ== + dependencies: + "@csstools/utilities" "^1.0.0" + postcss-value-parser "^4.2.0" + +postcss-color-rebeccapurple@^9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-9.0.3.tgz#63e14d9b9ab196e62e3491606a2b77a9531a6825" + integrity sha512-ruBqzEFDYHrcVq3FnW3XHgwRqVMrtEPLBtD7K2YmsLKVc2jbkxzzNEctJKsPCpDZ+LeMHLKRDoSShVefGc+CkQ== + dependencies: + "@csstools/utilities" "^1.0.0" + postcss-value-parser "^4.2.0" + +postcss-custom-media@^10.0.8: + version "10.0.8" + resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-10.0.8.tgz#0b84916522eb1e8a4b9e3ecd2bce292844cd7323" + integrity sha512-V1KgPcmvlGdxTel4/CyQtBJEFhMVpEmRGFrnVtgfGIHj5PJX9vO36eFBxKBeJn+aCDTed70cc+98Mz3J/uVdGQ== + dependencies: + "@csstools/cascade-layer-name-parser" "^1.0.13" + "@csstools/css-parser-algorithms" "^2.7.1" + "@csstools/css-tokenizer" "^2.4.1" + "@csstools/media-query-list-parser" "^2.1.13" + +postcss-custom-properties@^13.3.12: + version "13.3.12" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-13.3.12.tgz#e21960c7d13aed960b28236412d4da67f75317b0" + integrity sha512-oPn/OVqONB2ZLNqN185LDyaVByELAA/u3l2CS2TS16x2j2XsmV4kd8U49+TMxmUsEU9d8fB/I10E6U7kB0L1BA== + dependencies: + "@csstools/cascade-layer-name-parser" "^1.0.13" + "@csstools/css-parser-algorithms" "^2.7.1" + "@csstools/css-tokenizer" "^2.4.1" + "@csstools/utilities" "^1.0.0" + postcss-value-parser "^4.2.0" + +postcss-custom-selectors@^7.1.12: + version "7.1.12" + resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-7.1.12.tgz#4d1bac2469003aad3aa3d73481a1b7a45290852b" + integrity sha512-ctIoprBMJwByYMGjXG0F7IT2iMF2hnamQ+aWZETyBM0aAlyaYdVZTeUkk8RB+9h9wP+NdN3f01lfvKl2ZSqC0g== + dependencies: + "@csstools/cascade-layer-name-parser" "^1.0.13" + "@csstools/css-parser-algorithms" "^2.7.1" + "@csstools/css-tokenizer" "^2.4.1" + postcss-selector-parser "^6.1.0" + +postcss-dir-pseudo-class@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-8.0.1.tgz#b93755f52fb90215301b1d3ecb7c5e6416930a1e" + integrity sha512-uULohfWBBVoFiZXgsQA24JV6FdKIidQ+ZqxOouhWwdE+qJlALbkS5ScB43ZTjPK+xUZZhlaO/NjfCt5h4IKUfw== + dependencies: + postcss-selector-parser "^6.0.13" + +postcss-double-position-gradients@^5.0.7: + version "5.0.7" + resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.7.tgz#1a4841daf7ac04e94de4672282e8d02d1b3dd274" + integrity sha512-1xEhjV9u1s4l3iP5lRt1zvMjI/ya8492o9l/ivcxHhkO3nOz16moC4JpMxDUGrOs4R3hX+KWT7gKoV842cwRgg== + dependencies: + "@csstools/postcss-progressive-custom-properties" "^3.3.0" + "@csstools/utilities" "^1.0.0" + postcss-value-parser "^4.2.0" + +postcss-focus-visible@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-9.0.1.tgz#eede1032ce86b3bb2556d93ca5df63c68dfc2559" + integrity sha512-N2VQ5uPz3Z9ZcqI5tmeholn4d+1H14fKXszpjogZIrFbhaq0zNAtq8sAnw6VLiqGbL8YBzsnu7K9bBkTqaRimQ== + dependencies: + postcss-selector-parser "^6.0.13" + +postcss-focus-within@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-8.0.1.tgz#524af4c7eabae35cb1efa220a7903016fcc897fa" + integrity sha512-NFU3xcY/xwNaapVb+1uJ4n23XImoC86JNwkY/uduytSl2s9Ekc2EpzmRR63+ExitnW3Mab3Fba/wRPCT5oDILA== + dependencies: + postcss-selector-parser "^6.0.13" + +postcss-font-variant@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66" + integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA== + +postcss-gap-properties@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-5.0.1.tgz#887b64655f42370b43f0ab266cc6dbabf504d276" + integrity sha512-k2z9Cnngc24c0KF4MtMuDdToROYqGMMUQGcE6V0odwjHyOHtaDBlLeRBV70y9/vF7KIbShrTRZ70JjsI1BZyWw== + +postcss-image-set-function@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-6.0.3.tgz#84c5e32cc1085198f2cf4a786028dae8a2632bb2" + integrity sha512-i2bXrBYzfbRzFnm+pVuxVePSTCRiNmlfssGI4H0tJQvDue+yywXwUxe68VyzXs7cGtMaH6MCLY6IbCShrSroCw== + dependencies: + "@csstools/utilities" "^1.0.0" + postcss-value-parser "^4.2.0" + +postcss-lab-function@^6.0.19: + version "6.0.19" + resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-6.0.19.tgz#09b04c016bfbacd8576988a73dc19c0fdbeae2c4" + integrity sha512-vwln/mgvFrotJuGV8GFhpAOu9iGf3pvTBr6dLPDmUcqVD5OsQpEFyQMAFTxSxWXGEzBj6ld4pZ/9GDfEpXvo0g== + dependencies: + "@csstools/css-color-parser" "^2.0.4" + "@csstools/css-parser-algorithms" "^2.7.1" + "@csstools/css-tokenizer" "^2.4.1" + "@csstools/postcss-progressive-custom-properties" "^3.3.0" + "@csstools/utilities" "^1.0.0" + +postcss-loader@^7.3.3: + version "7.3.4" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.3.4.tgz#aed9b79ce4ed7e9e89e56199d25ad1ec8f606209" + integrity sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A== + dependencies: + cosmiconfig "^8.3.5" + jiti "^1.20.0" + semver "^7.5.4" + +postcss-logical@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-7.0.1.tgz#a3121f6510591b195321b16e65fbe13b1cfd3115" + integrity sha512-8GwUQZE0ri0K0HJHkDv87XOLC8DE0msc+HoWLeKdtjDZEwpZ5xuK3QdV6FhmHSQW40LPkg43QzvATRAI3LsRkg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-media-query-parser@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" + integrity sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig== + +postcss-modules-extract-imports@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz#b4497cb85a9c0c4b5aabeb759bb25e8d89f15002" + integrity sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q== + +postcss-modules-local-by-default@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz#f1b9bd757a8edf4d8556e8d0f4f894260e3df78f" + integrity sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz#a43d28289a169ce2c15c00c4e64c0858e43457d5" + integrity sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ== + dependencies: + postcss-selector-parser "^6.0.4" + +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== + dependencies: + icss-utils "^5.0.0" + +postcss-nesting@^12.1.5: + version "12.1.5" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-12.1.5.tgz#e5e2dc1d63e6166c194da45aa28c04d4024db98f" + integrity sha512-N1NgI1PDCiAGWPTYrwqm8wpjv0bgDmkYHH72pNsqTCv9CObxjxftdYu6AKtGN+pnJa7FQjMm3v4sp8QJbFsYdQ== + dependencies: + "@csstools/selector-resolve-nested" "^1.1.0" + "@csstools/selector-specificity" "^3.1.1" + postcss-selector-parser "^6.1.0" + +postcss-opacity-percentage@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-2.0.0.tgz#c0a56060cd4586e3f954dbde1efffc2deed53002" + integrity sha512-lyDrCOtntq5Y1JZpBFzIWm2wG9kbEdujpNt4NLannF+J9c8CgFIzPa80YQfdza+Y+yFfzbYj/rfoOsYsooUWTQ== + +postcss-overflow-shorthand@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-5.0.1.tgz#c0a124edad4f7ad88109275a60510e1fb07ab833" + integrity sha512-XzjBYKLd1t6vHsaokMV9URBt2EwC9a7nDhpQpjoPk2HRTSQfokPfyAS/Q7AOrzUu6q+vp/GnrDBGuj/FCaRqrQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-page-break@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f" + integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ== + +postcss-place@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-9.0.1.tgz#c08c46a94e639c1ee3457ac96d50c50a89bd6ac3" + integrity sha512-JfL+paQOgRQRMoYFc2f73pGuG/Aw3tt4vYMR6UA3cWVMxivviPTnMFnFTczUJOA4K2Zga6xgQVE+PcLs64WC8Q== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-preset-env@^9.0.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-9.6.0.tgz#da5fc8606f95092b2788c3bdf6d4fc053e50075b" + integrity sha512-Lxfk4RYjUdwPCYkc321QMdgtdCP34AeI94z+/8kVmqnTIlD4bMRQeGcMZgwz8BxHrzQiFXYIR5d7k/9JMs2MEA== + dependencies: + "@csstools/postcss-cascade-layers" "^4.0.6" + "@csstools/postcss-color-function" "^3.0.19" + "@csstools/postcss-color-mix-function" "^2.0.19" + "@csstools/postcss-content-alt-text" "^1.0.0" + "@csstools/postcss-exponential-functions" "^1.0.9" + "@csstools/postcss-font-format-keywords" "^3.0.2" + "@csstools/postcss-gamut-mapping" "^1.0.11" + "@csstools/postcss-gradients-interpolation-method" "^4.0.20" + "@csstools/postcss-hwb-function" "^3.0.18" + "@csstools/postcss-ic-unit" "^3.0.7" + "@csstools/postcss-initial" "^1.0.1" + "@csstools/postcss-is-pseudo-class" "^4.0.8" + "@csstools/postcss-light-dark-function" "^1.0.8" + "@csstools/postcss-logical-float-and-clear" "^2.0.1" + "@csstools/postcss-logical-overflow" "^1.0.1" + "@csstools/postcss-logical-overscroll-behavior" "^1.0.1" + "@csstools/postcss-logical-resize" "^2.0.1" + "@csstools/postcss-logical-viewport-units" "^2.0.11" + "@csstools/postcss-media-minmax" "^1.1.8" + "@csstools/postcss-media-queries-aspect-ratio-number-values" "^2.0.11" + "@csstools/postcss-nested-calc" "^3.0.2" + "@csstools/postcss-normalize-display-values" "^3.0.2" + "@csstools/postcss-oklab-function" "^3.0.19" + "@csstools/postcss-progressive-custom-properties" "^3.3.0" + "@csstools/postcss-relative-color-syntax" "^2.0.19" + "@csstools/postcss-scope-pseudo-class" "^3.0.1" + "@csstools/postcss-stepped-value-functions" "^3.0.10" + "@csstools/postcss-text-decoration-shorthand" "^3.0.7" + "@csstools/postcss-trigonometric-functions" "^3.0.10" + "@csstools/postcss-unset-value" "^3.0.1" + autoprefixer "^10.4.19" + browserslist "^4.23.1" + css-blank-pseudo "^6.0.2" + css-has-pseudo "^6.0.5" + css-prefers-color-scheme "^9.0.1" + cssdb "^8.1.0" + postcss-attribute-case-insensitive "^6.0.3" + postcss-clamp "^4.1.0" + postcss-color-functional-notation "^6.0.14" + postcss-color-hex-alpha "^9.0.4" + postcss-color-rebeccapurple "^9.0.3" + postcss-custom-media "^10.0.8" + postcss-custom-properties "^13.3.12" + postcss-custom-selectors "^7.1.12" + postcss-dir-pseudo-class "^8.0.1" + postcss-double-position-gradients "^5.0.7" + postcss-focus-visible "^9.0.1" + postcss-focus-within "^8.0.1" + postcss-font-variant "^5.0.0" + postcss-gap-properties "^5.0.1" + postcss-image-set-function "^6.0.3" + postcss-lab-function "^6.0.19" + postcss-logical "^7.0.1" + postcss-nesting "^12.1.5" + postcss-opacity-percentage "^2.0.0" + postcss-overflow-shorthand "^5.0.1" + postcss-page-break "^3.0.4" + postcss-place "^9.0.1" + postcss-pseudo-class-any-link "^9.0.2" + postcss-replace-overflow-wrap "^4.0.0" + postcss-selector-not "^7.0.2" + +postcss-pseudo-class-any-link@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-9.0.2.tgz#e436a7db1421f8a347fff3f19951a27d4e791987" + integrity sha512-HFSsxIqQ9nA27ahyfH37cRWGk3SYyQLpk0LiWw/UGMV4VKT5YG2ONee4Pz/oFesnK0dn2AjcyequDbIjKJgB0g== + dependencies: + postcss-selector-parser "^6.0.13" + +postcss-replace-overflow-wrap@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319" + integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== + +postcss-resolve-nested-selector@^0.1.1: + version "0.1.6" + resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz#3d84dec809f34de020372c41b039956966896686" + integrity sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw== + +postcss-safe-parser@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz#bb4c29894171a94bc5c996b9a30317ef402adaa1" + integrity sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ== + +postcss-scss@^4.0.9: + version "4.0.9" + resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-4.0.9.tgz#a03c773cd4c9623cb04ce142a52afcec74806685" + integrity sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A== + +postcss-selector-not@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-7.0.2.tgz#f9184c7770be5dcb4abd7efa3610a15fbd2f0b31" + integrity sha512-/SSxf/90Obye49VZIfc0ls4H0P6i6V1iHv0pzZH8SdgvZOPFkF37ef1r5cyWcMflJSFJ5bfuoluTnFnBBFiuSA== + dependencies: + postcss-selector-parser "^6.0.13" + +postcss-selector-parser@^6.0.13, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.1.0: + version "6.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" + integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@8, postcss@^8.4.28, postcss@^8.4.33: + version "8.4.44" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.44.tgz#d56834ef6508610ba224bb22b2457b2169ed0480" + integrity sha512-Aweb9unOEpQ3ezu4Q00DPvvM2ZTUitJdNKeP/+uQgr1IBIqu574IaZoURId7BKtWMREwzKa9OgzPzezWGPWFQw== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.1" + source-map-js "^1.2.0" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== + +pretty-error@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" + integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== + dependencies: + lodash "^4.17.20" + renderkid "^3.0.0" + +pretty-format@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" + integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA== + dependencies: + "@jest/types" "^24.9.0" + ansi-regex "^4.0.0" + ansi-styles "^3.2.0" + react-is "^16.8.4" + +pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process-on-spawn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/process-on-spawn/-/process-on-spawn-1.0.0.tgz#95b05a23073d30a17acfdc92a440efd2baefdc93" + integrity sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg== + dependencies: + fromentries "^1.2.0" + +prompts@^2.0.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +prop-types@15.x, prop-types@^15.0.0, prop-types@^15.5.10, prop-types@^15.5.7, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +proper-lockfile@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-4.1.2.tgz#c8b9de2af6b2f1601067f98e01ac66baa223141f" + integrity sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA== + dependencies: + graceful-fs "^4.2.4" + retry "^0.12.0" + signal-exit "^3.0.2" + +property-information@^6.0.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.5.0.tgz#6212fbb52ba757e92ef4fb9d657563b933b7ffec" + integrity sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig== + +protobufjs@^6.8.8: + version "6.11.4" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.4.tgz#29a412c38bf70d89e537b6d02d904a6f448173aa" + integrity sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/long" "^4.0.1" + "@types/node" ">=13.7.0" + long "^4.0.0" + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +psl@^1.1.33: + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + +pstree.remy@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" + integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== + +public-ip@^4.0.1: + version "4.0.4" + resolved "https://registry.yarnpkg.com/public-ip/-/public-ip-4.0.4.tgz#b3784a5a1ff1b81d015b9a18450be65ffd929eb3" + integrity sha512-EJ0VMV2vF6Cu7BIPo3IMW1Maq6ME+fbR0NcPmqDfpfNGIRPue1X8QrGjrg/rfjDkOsIkKHIf2S5FlEa48hFMTA== + dependencies: + dns-socket "^4.2.2" + got "^9.6.0" + is-ip "^3.1.0" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0, punycode@^2.1.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +pure-rand@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" + integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== + +qrcode.react@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/qrcode.react/-/qrcode.react-3.2.0.tgz#97daabd4ff641a3f3c678f87be106ebc55f9cd07" + integrity sha512-YietHHltOHA4+l5na1srdaMx4sVSOjV9tamHs+mwiLWAMr6QVACRUw1Neax5CptFILcNoITctJY0Ipyn5enQ8g== + +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +quickhull@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/quickhull/-/quickhull-1.0.3.tgz#f9560bc72b6e16254f870bbd4dffa91e8968879a" + integrity sha512-AQbLaXdzGDJdO9Mu3qY/NY5JWlDqIutCLW8vJbsQTq+/bydIZeltnMVRKCElp81Y5/uRm4Yw/RsMdcltFYsS6w== + +raf@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" + integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== + dependencies: + performance-now "^2.1.0" + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +rc-animate@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/rc-animate/-/rc-animate-3.1.1.tgz#defdd863f56816c222534e4dc68feddecd081386" + integrity sha512-8wg2Zg3EETy0k/9kYuis30NJNQg1D6/WSQwnCiz6SvyxQXNet/rVraRz3bPngwY6rcU2nlRvoShiYOorXyF7Sg== + dependencies: + "@ant-design/css-animation" "^1.7.2" + classnames "^2.2.6" + raf "^3.4.0" + rc-util "^4.15.3" + +rc-cascader@~3.25.0: + version "3.25.0" + resolved "https://registry.yarnpkg.com/rc-cascader/-/rc-cascader-3.25.0.tgz#0967b75f2ea0d5bed41dce4505c3531ec7bb949d" + integrity sha512-mBY6/CykOvzAYnIye0rpt5JkMAXJaX8zZawOwSndbKuFakYE+leqBQWIZoN9HIgAptPpTi2Aty3RvbaBmk8SKQ== + dependencies: + "@babel/runtime" "^7.12.5" + array-tree-filter "^2.1.0" + classnames "^2.3.1" + rc-select "~14.13.0" + rc-tree "~5.8.1" + rc-util "^5.37.0" + +rc-checkbox@~3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/rc-checkbox/-/rc-checkbox-3.2.0.tgz#04f83b7f2bf63eaf0e2da25e947b88a0a6321b5a" + integrity sha512-8inzw4y9dAhZmv/Ydl59Qdy5tdp9CKg4oPVcRigi+ga/yKPZS5m5SyyQPtYSgbcqHRYOdUhiPSeKfktc76du1A== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.3.2" + rc-util "^5.25.2" + +rc-collapse@~3.7.3: + version "3.7.3" + resolved "https://registry.yarnpkg.com/rc-collapse/-/rc-collapse-3.7.3.tgz#68161683d8fd1004bef4eb281fc106f3c8dc16eb" + integrity sha512-60FJcdTRn0X5sELF18TANwtVi7FtModq649H11mYF1jh83DniMoM4MqY627sEKRCTm4+WXfGDcB7hY5oW6xhyw== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "2.x" + rc-motion "^2.3.4" + rc-util "^5.27.0" + +rc-dialog@~9.4.0: + version "9.4.0" + resolved "https://registry.yarnpkg.com/rc-dialog/-/rc-dialog-9.4.0.tgz#194c107d34cb36a56f1db4a49dc73f6d59eeae85" + integrity sha512-AScCexaLACvf8KZRqCPz12BJ8olszXOS4lKlkMyzDQHS1m0zj1KZMYgmMCh39ee0Dcv8kyrj8mTqxuLyhH+QuQ== + dependencies: + "@babel/runtime" "^7.10.1" + "@rc-component/portal" "^1.0.0-8" + classnames "^2.2.6" + rc-motion "^2.3.0" + rc-util "^5.21.0" + +rc-drawer@~7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/rc-drawer/-/rc-drawer-7.1.0.tgz#2beabb8bab1784aea255d0d850bc206c3dc715da" + integrity sha512-nBE1rF5iZvpavoyqhSSz2mk/yANltA7g3aF0U45xkx381n3we/RKs9cJfNKp9mSWCedOKWt9FLEwZDaAaOGn2w== + dependencies: + "@babel/runtime" "^7.23.9" + "@rc-component/portal" "^1.1.1" + classnames "^2.2.6" + rc-motion "^2.6.1" + rc-util "^5.38.1" + +rc-dropdown@~4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/rc-dropdown/-/rc-dropdown-4.2.0.tgz#c6052fcfe9c701487b141e411cdc277dc7c6f061" + integrity sha512-odM8Ove+gSh0zU27DUj5cG1gNKg7mLWBYzB5E4nNLrLwBmYEgYP43vHKDGOVZcJSVElQBI0+jTQgjnq0NfLjng== + dependencies: + "@babel/runtime" "^7.18.3" + "@rc-component/trigger" "^2.0.0" + classnames "^2.2.6" + rc-util "^5.17.0" + +rc-field-form@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/rc-field-form/-/rc-field-form-2.0.1.tgz#97dc352f3899e9617f2abfd0c09bf0fcd17409e2" + integrity sha512-3WK/POHBcfMFKrzScrkmgMIXqoVQ0KgVwcVnej/ukwuQG4ZHCJaTi2KhM+tWTK4WODBXbmjKg5pKHj2IVmSg4A== + dependencies: + "@babel/runtime" "^7.18.0" + "@rc-component/async-validator" "^5.0.3" + rc-util "^5.32.2" + +rc-form@^2.4.12: + version "2.4.12" + resolved "https://registry.yarnpkg.com/rc-form/-/rc-form-2.4.12.tgz#4ee8711e90a2584baa7ac276de96bee0d9b0f5f1" + integrity sha512-sHfyWRrnjCHkeCYfYAGop2GQBUC6CKMPcJF9h/gL/vTmZB/RN6fNOGKjXrXjFbwFwKXUWBoPtIDDDmXQW9xNdw== + dependencies: + async-validator "~1.11.3" + babel-runtime "6.x" + create-react-class "^15.5.3" + dom-scroll-into-view "1.x" + hoist-non-react-statics "^3.3.0" + lodash "^4.17.4" + rc-util "^4.15.3" + react-is "^16.13.1" + warning "^4.0.3" + +rc-image@~7.6.0: + version "7.6.0" + resolved "https://registry.yarnpkg.com/rc-image/-/rc-image-7.6.0.tgz#2867087b77c8595ea9eb37d18ca863e47904b191" + integrity sha512-tL3Rvd1sS+frZQ01i+tkeUPaOeFz2iG9/scAt/Cfs0hyCRVA/w0Pu1J/JxIX8blalvmHE0bZQRYdOmRAzWu4Hg== + dependencies: + "@babel/runtime" "^7.11.2" + "@rc-component/portal" "^1.0.2" + classnames "^2.2.6" + rc-dialog "~9.4.0" + rc-motion "^2.6.2" + rc-util "^5.34.1" + +rc-input-number@~9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/rc-input-number/-/rc-input-number-9.0.0.tgz#47da6eaf95b0cf566fcdf68196c4dc82b8c8f166" + integrity sha512-RfcDBDdWFFetouWFXBA+WPEC8LzBXyngr9b+yTLVIygfFu7HiLRGn/s/v9wwno94X7KFvnb28FNynMGj9XJlDQ== + dependencies: + "@babel/runtime" "^7.10.1" + "@rc-component/mini-decimal" "^1.0.1" + classnames "^2.2.5" + rc-input "~1.4.0" + rc-util "^5.28.0" + +rc-input@~1.4.0, rc-input@~1.4.5: + version "1.4.5" + resolved "https://registry.yarnpkg.com/rc-input/-/rc-input-1.4.5.tgz#1f2f13fb1adb15fce5936aebcfab354f41b4f348" + integrity sha512-AjzykhwnwYTRSwwgCu70CGKBIAv6bP2nqnFptnNTprph/TF1BAs0Qxl91mie/BR6n827WIJB6ZjaRf9iiMwAfw== + dependencies: + "@babel/runtime" "^7.11.1" + classnames "^2.2.1" + rc-util "^5.18.1" + +rc-mentions@~2.11.1: + version "2.11.1" + resolved "https://registry.yarnpkg.com/rc-mentions/-/rc-mentions-2.11.1.tgz#3e742d4b558965701021cff75b84af6cd4744ed3" + integrity sha512-upb4AK1SRFql7qGnbLEvJqLMugVVIyjmwBJW9L0eLoN9po4JmJZaBzmKA4089fNtsU8k6l/tdZiVafyooeKnLw== + dependencies: + "@babel/runtime" "^7.22.5" + "@rc-component/trigger" "^2.0.0" + classnames "^2.2.6" + rc-input "~1.4.0" + rc-menu "~9.13.0" + rc-textarea "~1.6.1" + rc-util "^5.34.1" + +rc-menu@~9.13.0: + version "9.13.0" + resolved "https://registry.yarnpkg.com/rc-menu/-/rc-menu-9.13.0.tgz#55426531af5fd0a2a0e0a50020cbd002b231edf9" + integrity sha512-1l8ooCB3HcYJKCltC/s7OxRKRjgymdl9htrCeGZcXNaMct0RxZRK6OPV3lPhVksIvAGMgzPd54ClpZ5J4b8cZA== + dependencies: + "@babel/runtime" "^7.10.1" + "@rc-component/trigger" "^2.0.0" + classnames "2.x" + rc-motion "^2.4.3" + rc-overflow "^1.3.1" + rc-util "^5.27.0" + +rc-motion@^2.0.0, rc-motion@^2.0.1, rc-motion@^2.3.0, rc-motion@^2.3.4, rc-motion@^2.4.3, rc-motion@^2.4.4, rc-motion@^2.6.1, rc-motion@^2.6.2, rc-motion@^2.9.0: + version "2.9.2" + resolved "https://registry.yarnpkg.com/rc-motion/-/rc-motion-2.9.2.tgz#f7c6d480250df8a512d0cfdce07ff3da906958cf" + integrity sha512-fUAhHKLDdkAXIDLH0GYwof3raS58dtNUmzLF2MeiR8o6n4thNpSDQhOqQzWE4WfFZDCi9VEN8n7tiB7czREcyw== + dependencies: + "@babel/runtime" "^7.11.1" + classnames "^2.2.1" + rc-util "^5.43.0" + +rc-notification@~5.4.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/rc-notification/-/rc-notification-5.4.0.tgz#c5ea20bfe4ed2dbacc7ef945777626c050945db8" + integrity sha512-li19y9RoYJciF3WRFvD+DvWS70jdL8Fr+Gfb/OshK+iY6iTkwzoigmSIp76/kWh5tF5i/i9im12X3nsF85GYdA== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "2.x" + rc-motion "^2.9.0" + rc-util "^5.20.1" + +rc-overflow@^1.3.1, rc-overflow@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/rc-overflow/-/rc-overflow-1.3.2.tgz#72ee49e85a1308d8d4e3bd53285dc1f3e0bcce2c" + integrity sha512-nsUm78jkYAoPygDAcGZeC2VwIg/IBGSodtOY3pMof4W3M9qRJgqaDYm03ZayHlde3I6ipliAxbN0RUcGf5KOzw== + dependencies: + "@babel/runtime" "^7.11.1" + classnames "^2.2.1" + rc-resize-observer "^1.0.0" + rc-util "^5.37.0" + +rc-pagination@~4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/rc-pagination/-/rc-pagination-4.0.4.tgz#ea401388ae86eac17ed5b41212d487f12b65b773" + integrity sha512-GGrLT4NgG6wgJpT/hHIpL9nELv27A1XbSZzECIuQBQTVSf4xGKxWr6I/jhpRPauYEWEbWVw22ObG6tJQqwJqWQ== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.3.2" + rc-util "^5.38.0" + +rc-picker@^4.5.0: + version "4.6.14" + resolved "https://registry.yarnpkg.com/rc-picker/-/rc-picker-4.6.14.tgz#86f6836794a593a54b929cfde201f42f02ef85b0" + integrity sha512-7DuTfUFdkxmsNpWQ0TWv6FPGna5e6KKC4nxtx3x9xhumLz7jb3fhlDdWQvqEL6tpt9DOb1+N5j+wB+lDOSS9kg== + dependencies: + "@babel/runtime" "^7.24.7" + "@rc-component/trigger" "^2.0.0" + classnames "^2.2.1" + rc-overflow "^1.3.2" + rc-resize-observer "^1.4.0" + rc-util "^5.43.0" + +rc-picker@~4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/rc-picker/-/rc-picker-4.5.0.tgz#ae7a028ed6184e0ef40a2c8aaeb9d5dbef89d4b8" + integrity sha512-suqz9bzuhBQlf7u+bZd1bJLPzhXpk12w6AjQ9BTPTiFwexVZgUKViG1KNLyfFvW6tCUZZK0HmCCX7JAyM+JnCg== + dependencies: + "@babel/runtime" "^7.10.1" + "@rc-component/trigger" "^2.0.0" + classnames "^2.2.1" + rc-overflow "^1.3.2" + rc-resize-observer "^1.4.0" + rc-util "^5.38.1" + +rc-progress@~4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/rc-progress/-/rc-progress-4.0.0.tgz#5382147d9add33d3a5fbd264001373df6440e126" + integrity sha512-oofVMMafOCokIUIBnZLNcOZFsABaUw8PPrf1/y0ZBvKZNpOiu5h4AO9vv11Sw0p4Hb3D0yGWuEattcQGtNJ/aw== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.6" + rc-util "^5.16.1" + +rc-rate@~2.12.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/rc-rate/-/rc-rate-2.12.0.tgz#0182deffed3b009cdcc61660da8746c39ed91ed5" + integrity sha512-g092v5iZCdVzbjdn28FzvWebK2IutoVoiTeqoLTj9WM7SjA/gOJIw5/JFZMRyJYYVe1jLAU2UhAfstIpCNRozg== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.5" + rc-util "^5.0.1" + +rc-resize-observer@^1.0.0, rc-resize-observer@^1.1.0, rc-resize-observer@^1.3.1, rc-resize-observer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/rc-resize-observer/-/rc-resize-observer-1.4.0.tgz#7bba61e6b3c604834980647cce6451914750d0cc" + integrity sha512-PnMVyRid9JLxFavTjeDXEXo65HCRqbmLBw9xX9gfC4BZiSzbLXKzW3jPz+J0P71pLbD5tBMTT+mkstV5gD0c9Q== + dependencies: + "@babel/runtime" "^7.20.7" + classnames "^2.2.1" + rc-util "^5.38.0" + resize-observer-polyfill "^1.5.1" + +rc-segmented@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/rc-segmented/-/rc-segmented-2.3.0.tgz#b3fe080fb434a266c02e30bb62a47d2c6e094341" + integrity sha512-I3FtM5Smua/ESXutFfb8gJ8ZPcvFR+qUgeeGFQHBOvRiRKyAk4aBE5nfqrxXx+h8/vn60DQjOt6i4RNtrbOobg== + dependencies: + "@babel/runtime" "^7.11.1" + classnames "^2.2.1" + rc-motion "^2.4.4" + rc-util "^5.17.0" + +rc-select@~14.13.0, rc-select@~14.13.3: + version "14.13.4" + resolved "https://registry.yarnpkg.com/rc-select/-/rc-select-14.13.4.tgz#b9fcc54c125bef968cf4428d6f7d7b4483f2e87d" + integrity sha512-nXFsS53RxCP6ePeKhOj3gvgdNpTqdQnNKhipGrV/z+pB3Md5heGfV72YX5Wfb1A7Ca1QkbVTPFLJh+A8WYFOSA== + dependencies: + "@babel/runtime" "^7.10.1" + "@rc-component/trigger" "^2.1.1" + classnames "2.x" + rc-motion "^2.0.1" + rc-overflow "^1.3.1" + rc-util "^5.16.1" + rc-virtual-list "^3.5.2" + +rc-slider@~10.6.2: + version "10.6.2" + resolved "https://registry.yarnpkg.com/rc-slider/-/rc-slider-10.6.2.tgz#8bd3b63b24f2f3682ea1bf86d021073189cf33eb" + integrity sha512-FjkoFjyvUQWcBo1F3RgSglky3ar0+qHLM41PlFVYB4Bj3RD8E/Mv7kqMouLFBU+3aFglMzzctAIWRwajEuueSw== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.5" + rc-util "^5.36.0" + +rc-steps@~6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/rc-steps/-/rc-steps-6.0.1.tgz#c2136cd0087733f6d509209a84a5c80dc29a274d" + integrity sha512-lKHL+Sny0SeHkQKKDJlAjV5oZ8DwCdS2hFhAkIjuQt1/pB81M0cA0ErVFdHq9+jmPmFw1vJB2F5NBzFXLJxV+g== + dependencies: + "@babel/runtime" "^7.16.7" + classnames "^2.2.3" + rc-util "^5.16.1" + +rc-switch@~4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/rc-switch/-/rc-switch-4.1.0.tgz#f37d81b4e0c5afd1274fd85367b17306bf25e7d7" + integrity sha512-TI8ufP2Az9oEbvyCeVE4+90PDSljGyuwix3fV58p7HV2o4wBnVToEyomJRVyTaZeqNPAp+vqeo4Wnj5u0ZZQBg== + dependencies: + "@babel/runtime" "^7.21.0" + classnames "^2.2.1" + rc-util "^5.30.0" + +rc-table@~7.45.5: + version "7.45.7" + resolved "https://registry.yarnpkg.com/rc-table/-/rc-table-7.45.7.tgz#f7c509e05c677a30ad5b212750122da6f5318004" + integrity sha512-wi9LetBL1t1csxyGkMB2p3mCiMt+NDexMlPbXHvQFmBBAsMxrgNSAPwUci2zDLUq9m8QdWc1Nh8suvrpy9mXrg== + dependencies: + "@babel/runtime" "^7.10.1" + "@rc-component/context" "^1.4.0" + classnames "^2.2.5" + rc-resize-observer "^1.1.0" + rc-util "^5.37.0" + rc-virtual-list "^3.14.2" + +"rc-tabs@~15.0.0 ": + version "15.0.0" + resolved "https://registry.yarnpkg.com/rc-tabs/-/rc-tabs-15.0.0.tgz#6d46f2ed7587a6d72f2c8e7ce371e7d4e0f4ef4a" + integrity sha512-7m541VcEiJSpHZmosMZNMIhemxtIN+f0WDhZNyXQ1/cZ40aaWsknlbj0FH6HryLoKEQvBnCI89hgQuT7MBSOBA== + dependencies: + "@babel/runtime" "^7.11.2" + classnames "2.x" + rc-dropdown "~4.2.0" + rc-menu "~9.13.0" + rc-motion "^2.6.2" + rc-resize-observer "^1.0.0" + rc-util "^5.34.1" + +rc-textarea@~1.6.1, rc-textarea@~1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/rc-textarea/-/rc-textarea-1.6.3.tgz#3f294fdf5dfadbe9d0e7b695cea4da557728a9be" + integrity sha512-8k7+8Y2GJ/cQLiClFMg8kUXOOdvcFQrnGeSchOvI2ZMIVvX5a3zQpLxoODL0HTrvU63fPkRmMuqaEcOF9dQemA== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.1" + rc-input "~1.4.0" + rc-resize-observer "^1.0.0" + rc-util "^5.27.0" + +rc-tooltip@~6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/rc-tooltip/-/rc-tooltip-6.2.0.tgz#4dd7575674137a5b14f118a5c16435d3f5e4a9c9" + integrity sha512-iS/3iOAvtDh9GIx1ulY7EFUXUtktFccNLsARo3NPgLf0QW9oT0w3dA9cYWlhqAKmD+uriEwdWz1kH0Qs4zk2Aw== + dependencies: + "@babel/runtime" "^7.11.2" + "@rc-component/trigger" "^2.0.0" + classnames "^2.3.1" + +rc-tree-select@~5.20.0: + version "5.20.0" + resolved "https://registry.yarnpkg.com/rc-tree-select/-/rc-tree-select-5.20.0.tgz#b8f9f5ea08c673c77131a514e1f7d2b2e516449d" + integrity sha512-zFtkHx5/6PnXSi3oSbBSFbIPiJJQdpSU3qz/joLe75URgvxmTHi989O8MtMgpwyZwrCMOJpGi6L1uy+13uzZPw== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "2.x" + rc-select "~14.13.0" + rc-tree "~5.8.1" + rc-util "^5.16.1" + +rc-tree@~5.8.1, rc-tree@~5.8.7: + version "5.8.8" + resolved "https://registry.yarnpkg.com/rc-tree/-/rc-tree-5.8.8.tgz#650a13ec825a5a4feec6bbaf6a380465986ee0db" + integrity sha512-S+mCMWo91m5AJqjz3PdzKilGgbFm7fFJRFiTDOcoRbD7UfMOPnerXwMworiga0O2XIo383UoWuEfeHs1WOltag== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "2.x" + rc-motion "^2.0.1" + rc-util "^5.16.1" + rc-virtual-list "^3.5.1" + +rc-upload@~4.5.2: + version "4.5.2" + resolved "https://registry.yarnpkg.com/rc-upload/-/rc-upload-4.5.2.tgz#ea493fbaaf57d9369ee954b20e1d8bc35c818a1a" + integrity sha512-QO3ne77DwnAPKFn0bA5qJM81QBjQi0e0NHdkvpFyY73Bea2NfITiotqJqVjHgeYPOJu5lLVR32TNGP084aSoXA== + dependencies: + "@babel/runtime" "^7.18.3" + classnames "^2.2.5" + rc-util "^5.2.0" + +rc-util@^4.15.3: + version "4.21.1" + resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-4.21.1.tgz#88602d0c3185020aa1053d9a1e70eac161becb05" + integrity sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg== + dependencies: + add-dom-event-listener "^1.1.0" + prop-types "^15.5.10" + react-is "^16.12.0" + react-lifecycles-compat "^3.0.4" + shallowequal "^1.1.0" + +rc-util@^5.0.1, rc-util@^5.16.1, rc-util@^5.17.0, rc-util@^5.18.1, rc-util@^5.2.0, rc-util@^5.20.1, rc-util@^5.21.0, rc-util@^5.24.4, rc-util@^5.24.5, rc-util@^5.25.2, rc-util@^5.27.0, rc-util@^5.28.0, rc-util@^5.30.0, rc-util@^5.31.1, rc-util@^5.32.2, rc-util@^5.34.1, rc-util@^5.35.0, rc-util@^5.36.0, rc-util@^5.37.0, rc-util@^5.38.0, rc-util@^5.38.1, rc-util@^5.39.3, rc-util@^5.43.0, rc-util@^5.9.4: + version "5.43.0" + resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-5.43.0.tgz#bba91fbef2c3e30ea2c236893746f3e9b05ecc4c" + integrity sha512-AzC7KKOXFqAdIBqdGWepL9Xn7cm3vnAmjlHqUnoQaTMZYhM4VlXGLkkHHxj/BZ7Td0+SOPKB4RGPboBVKT9htw== + dependencies: + "@babel/runtime" "^7.18.3" + react-is "^18.2.0" + +rc-virtual-list@^3.14.2, rc-virtual-list@^3.5.1, rc-virtual-list@^3.5.2: + version "3.14.5" + resolved "https://registry.yarnpkg.com/rc-virtual-list/-/rc-virtual-list-3.14.5.tgz#593cd13fe05eabf4ad098329704a30c77701869e" + integrity sha512-ZMOnkCLv2wUN8Jz7yI4XiSLa9THlYvf00LuMhb1JlsQCewuU7ydPuHw1rGVPhe9VZYl/5UqODtNd7QKJ2DMGfg== + dependencies: + "@babel/runtime" "^7.20.0" + classnames "^2.2.6" + rc-resize-observer "^1.0.0" + rc-util "^5.36.0" + +react-chartjs-2@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/react-chartjs-2/-/react-chartjs-2-5.2.0.tgz#43c1e3549071c00a1a083ecbd26c1ad34d385f5d" + integrity sha512-98iN5aguJyVSxp5U3CblRLH67J8gkfyGNbiK3c+l1QI/G4irHMPQw44aEPmjVag+YKTyQ260NcF82GTQ3bdscA== + +react-color@^2.19.3: + version "2.19.3" + resolved "https://registry.yarnpkg.com/react-color/-/react-color-2.19.3.tgz#ec6c6b4568312a3c6a18420ab0472e146aa5683d" + integrity sha512-LEeGE/ZzNLIsFWa1TMe8y5VYqr7bibneWmvJwm1pCn/eNmrabWDh659JSPn9BuaMpEfU83WTOJfnCcjDZwNQTA== + dependencies: + "@icons/material" "^0.2.4" + lodash "^4.17.15" + lodash-es "^4.17.15" + material-colors "^1.2.1" + prop-types "^15.5.10" + reactcss "^1.2.0" + tinycolor2 "^1.4.1" + +react-cookie@^4.0.3: + version "4.1.1" + resolved "https://registry.yarnpkg.com/react-cookie/-/react-cookie-4.1.1.tgz#832e134ad720e0de3e03deaceaab179c4061a19d" + integrity sha512-ffn7Y7G4bXiFbnE+dKhHhbP+b8I34mH9jqnm8Llhj89zF4nPxPutxHT1suUqMeCEhLDBI7InYwf1tpaSoK5w8A== + dependencies: + "@types/hoist-non-react-statics" "^3.0.1" + hoist-non-react-statics "^3.0.0" + universal-cookie "^4.0.0" + +react-dom@18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.0" + +react-draggable@^4.0.3, react-draggable@^4.4.5: + version "4.4.6" + resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.4.6.tgz#63343ee945770881ca1256a5b6fa5c9f5983fe1e" + integrity sha512-LtY5Xw1zTPqHkVmtM3X8MUOxNDOUhv/khTgBgrUvwaS064bwVvxT+q5El0uUFNx5IEPKXuRejr7UqLwBIg5pdw== + dependencies: + clsx "^1.1.1" + prop-types "^15.8.1" + +react-grid-layout@^1.3.4: + version "1.4.4" + resolved "https://registry.yarnpkg.com/react-grid-layout/-/react-grid-layout-1.4.4.tgz#0bdb19d6db061556868fef1f430cc8c14d21f131" + integrity sha512-7+Lg8E8O8HfOH5FrY80GCIR1SHTn2QnAYKh27/5spoz+OHhMmEhU/14gIkRzJOtympDPaXcVRX/nT1FjmeOUmQ== + dependencies: + clsx "^2.0.0" + fast-equals "^4.0.3" + prop-types "^15.8.1" + react-draggable "^4.4.5" + react-resizable "^3.0.5" + resize-observer-polyfill "^1.5.1" + +react-is@^16.12.0, react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.4: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-is@^18.0.0, react-is@^18.2.0: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" + integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== + +react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-markdown@^8.0.4, react-markdown@~8.0.0: + version "8.0.7" + resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-8.0.7.tgz#c8dbd1b9ba5f1c5e7e5f2a44de465a3caafdf89b" + integrity sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ== + dependencies: + "@types/hast" "^2.0.0" + "@types/prop-types" "^15.0.0" + "@types/unist" "^2.0.0" + comma-separated-tokens "^2.0.0" + hast-util-whitespace "^2.0.0" + prop-types "^15.0.0" + property-information "^6.0.0" + react-is "^18.0.0" + remark-parse "^10.0.0" + remark-rehype "^10.0.0" + space-separated-tokens "^2.0.0" + style-to-object "^0.4.0" + unified "^10.0.0" + unist-util-visit "^4.0.0" + vfile "^5.0.0" + +react-moment@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/react-moment/-/react-moment-1.1.3.tgz#829b21dfb279aa6db47ce4f1ac2555af17a1bcdc" + integrity sha512-8EPvlUL8u6EknPp1ISF5MQ3wx2OHJVXIP/iZc4wRh3iV3XozftZERDv9ANZeAtMlhNNQHdFoqcZHFUkBSTONfA== + +react-redux@^8.0.2, react-redux@^8.1.3: + version "8.1.3" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-8.1.3.tgz#4fdc0462d0acb59af29a13c27ffef6f49ab4df46" + integrity sha512-n0ZrutD7DaX/j9VscF+uTALI3oUPa/pO4Z3soOBIjuRn/FzVu6aehhysxZCLi6y7duMf52WNZGMl7CtuK5EnRw== + dependencies: + "@babel/runtime" "^7.12.1" + "@types/hoist-non-react-statics" "^3.3.1" + "@types/use-sync-external-store" "^0.0.3" + hoist-non-react-statics "^3.3.2" + react-is "^18.0.0" + use-sync-external-store "^1.0.0" + +react-resizable@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/react-resizable/-/react-resizable-3.0.5.tgz#362721f2efbd094976f1780ae13f1ad7739786c1" + integrity sha512-vKpeHhI5OZvYn82kXOs1bC8aOXktGU5AmKAgaZS4F5JPburCtbmDPqE7Pzp+1kN4+Wb81LlF33VpGwWwtXem+w== + dependencies: + prop-types "15.x" + react-draggable "^4.0.3" + +react-router-dom@^5.1.0: + version "5.3.4" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.4.tgz#2ed62ffd88cae6db134445f4a0c0ae8b91d2e5e6" + integrity sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ== + dependencies: + "@babel/runtime" "^7.12.13" + history "^4.9.0" + loose-envify "^1.3.1" + prop-types "^15.6.2" + react-router "5.3.4" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-router@5.3.4, react-router@^5.1.0: + version "5.3.4" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.4.tgz#8ca252d70fcc37841e31473c7a151cf777887bb5" + integrity sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA== + dependencies: + "@babel/runtime" "^7.12.13" + history "^4.9.0" + hoist-non-react-statics "^3.1.0" + loose-envify "^1.3.1" + path-to-regexp "^1.7.0" + prop-types "^15.6.2" + react-is "^16.6.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-sortable-hoc@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/react-sortable-hoc/-/react-sortable-hoc-2.0.0.tgz#f6780d8aa4b922a21f3e754af542f032677078b7" + integrity sha512-JZUw7hBsAHXK7PTyErJyI7SopSBFRcFHDjWW5SWjcugY0i6iH7f+eJkY8cJmGMlZ1C9xz1J3Vjz0plFpavVeRg== + dependencies: + "@babel/runtime" "^7.2.0" + invariant "^2.2.4" + prop-types "^15.5.7" + +react-svg-core@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/react-svg-core/-/react-svg-core-3.0.3.tgz#5d856efeaa4d089b0afeebe885b20b8c9500d162" + integrity sha512-Ws3eM3xCAwcaYeqm4Ajcz3zxBYNI6BeTWWhFR0cpOT+pWuVtozgHYK9xUM0S/ilapZgYMQDe49XgOxpvooFq4w== + dependencies: + "@babel/core" "^7.4.5" + "@babel/plugin-syntax-jsx" "^7.2.0" + "@babel/preset-react" "^7.0.0" + babel-plugin-react-svg "^3.0.3" + lodash.clonedeep "^4.5.0" + lodash.isplainobject "^4.0.6" + svgo "^1.2.2" + +react-svg-loader@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/react-svg-loader/-/react-svg-loader-3.0.3.tgz#8baa2d5daa32523dfd0745425ac65e0a90edae15" + integrity sha512-V1KnIUtvWVvc4xCig34n+f+/74ylMMugB2FbuAF/yq+QRi+WLi2hUYp9Ze3VylhA1D7ZgRygBh3Ojj8S3TPhJA== + dependencies: + loader-utils "^1.2.3" + react-svg-core "^3.0.3" + +react@18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== + dependencies: + loose-envify "^1.1.0" + +reactcss@^1.2.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/reactcss/-/reactcss-1.2.3.tgz#c00013875e557b1cf0dfd9a368a1c3dab3b548dd" + integrity sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A== + dependencies: + lodash "^4.0.1" + +read-pkg-up@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-8.0.0.tgz#72f595b65e66110f43b052dd9af4de6b10534670" + integrity sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ== + dependencies: + find-up "^5.0.0" + read-pkg "^6.0.0" + type-fest "^1.0.1" + +read-pkg@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-6.0.0.tgz#a67a7d6a1c2b0c3cd6aa2ea521f40c458a4a504c" + integrity sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^3.0.2" + parse-json "^5.2.0" + type-fest "^1.0.1" + +readable-stream@^2.0.1, readable-stream@~2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +rechoir@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" + integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== + dependencies: + resolve "^1.20.0" + +redent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-4.0.0.tgz#0c0ba7caabb24257ab3bb7a4fd95dd1d5c5681f9" + integrity sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag== + dependencies: + indent-string "^5.0.0" + strip-indent "^4.0.0" + +redux-devtools-extension@^2.13.9: + version "2.13.9" + resolved "https://registry.yarnpkg.com/redux-devtools-extension/-/redux-devtools-extension-2.13.9.tgz#6b764e8028b507adcb75a1cae790f71e6be08ae7" + integrity sha512-cNJ8Q/EtjhQaZ71c8I9+BPySIBVEKssbPpskBfsXqb8HJ002A3KRVHfeRzwRo6mGPqsm7XuHTqNSNeS1Khig0A== + +redux-logger@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/redux-logger/-/redux-logger-4.0.0.tgz#83e7f97008c8425c73f8a06269109ea6d67a5bc1" + integrity sha512-dl+5mQjk70HIlrgOgPMAL0d0hOhBTPQcG5zPPlPZKa/Yf4lU6A37mv3Xqn3lFp0eUguSApIa2GD/YJVOIQQi5A== + dependencies: + deep-diff "^0.3.5" + +redux-thunk@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.2.tgz#b9d05d11994b99f7a91ea223e8b04cf0afa5ef3b" + integrity sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q== + +redux@^4.0.0, redux@^4.1.1, redux@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.1.tgz#c08f4306826c49b5e9dc901dee0452ea8fce6197" + integrity sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w== + dependencies: + "@babel/runtime" "^7.9.2" + +redux@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/redux/-/redux-5.0.1.tgz#97fa26881ce5746500125585d5642c77b6e9447b" + integrity sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w== + +reflect.getprototypeof@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz#3ab04c32a8390b770712b7a8633972702d278859" + integrity sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.1" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + globalthis "^1.0.3" + which-builtin-type "^1.1.3" + +refractor@^4.8.0: + version "4.8.1" + resolved "https://registry.yarnpkg.com/refractor/-/refractor-4.8.1.tgz#fbdd889333a3d86c9c864479622855c9b38e9d42" + integrity sha512-/fk5sI0iTgFYlmVGYVew90AoYnNMP6pooClx/XKqyeeCQXrL0Kvgn8V0VEht5ccdljbzzF1i3Q213gcntkRExg== + dependencies: + "@types/hast" "^2.0.0" + "@types/prismjs" "^1.0.0" + hastscript "^7.0.0" + parse-entities "^4.0.0" + +regenerate-unicode-properties@^10.1.0: + version "10.1.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" + integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + +regenerator-transform@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" + integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== + dependencies: + "@babel/runtime" "^7.8.4" + +regexp-tree@~0.1.1: + version "0.1.27" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd" + integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== + +regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" + integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== + dependencies: + call-bind "^1.0.6" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.1" + +regexpu-core@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== + dependencies: + "@babel/regjsgen" "^0.8.0" + regenerate "^1.4.2" + regenerate-unicode-properties "^10.1.0" + regjsparser "^0.9.1" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== + dependencies: + jsesc "~0.5.0" + +rehype-attr@~2.1.0: + version "2.1.4" + resolved "https://registry.yarnpkg.com/rehype-attr/-/rehype-attr-2.1.4.tgz#ea3cde2af6e392d3b3c2a3625417823af5e1ed1c" + integrity sha512-iAeaL5JyF4XxkcvWzpi/0SAF7iV7qOTaHS56tJuEsXziQc3+PEmMn65kV8OFgbO9mRVY7J1fRC/aLvot1PsNkg== + dependencies: + unified "~10.1.1" + unist-util-visit "~4.1.0" + +rehype-autolink-headings@~6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/rehype-autolink-headings/-/rehype-autolink-headings-6.1.1.tgz#0cb874a56f3de6ead1c2268d7f0fc5006f244db5" + integrity sha512-NMYzZIsHM3sA14nC5rAFuUPIOfg+DFmf9EY1YMhaNlB7+3kK/ZlE6kqPfuxr1tsJ1XWkTrMtMoyHosU70d35mA== + dependencies: + "@types/hast" "^2.0.0" + extend "^3.0.0" + hast-util-has-property "^2.0.0" + hast-util-heading-rank "^2.0.0" + hast-util-is-element "^2.0.0" + unified "^10.0.0" + unist-util-visit "^4.0.0" + +rehype-ignore@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/rehype-ignore/-/rehype-ignore-1.0.5.tgz#8f74b291d29c3daf1ea3031dd57d9e59ef3da08c" + integrity sha512-JQXS5eDwXaYKwB8JEYFJJA/YvGi0sSNUOYuiURMtuPTg8tuWHFB91JMYLbImH1FyvyGQM4fIBqNMAPB50WR2Bw== + dependencies: + hast-util-select "^5.0.5" + unified "^10.1.2" + unist-util-visit "^4.1.2" + +rehype-parse@^8.0.0, rehype-parse@^8.0.2: + version "8.0.5" + resolved "https://registry.yarnpkg.com/rehype-parse/-/rehype-parse-8.0.5.tgz#ccffc21e08e288c7846614f8dc1dc23d603a4a80" + integrity sha512-Ds3RglaY/+clEX2U2mHflt7NlMA72KspZ0JLUJgBBLpRddBcEw3H8uYZQliQriku22NZpYMfjDdSgHcjxue24A== + dependencies: + "@types/hast" "^2.0.0" + hast-util-from-parse5 "^7.0.0" + parse5 "^6.0.0" + unified "^10.0.0" + +rehype-prism-plus@1.6.3, rehype-prism-plus@~1.6.1: + version "1.6.3" + resolved "https://registry.yarnpkg.com/rehype-prism-plus/-/rehype-prism-plus-1.6.3.tgz#8bf23a4cfc3419349770bb9064a91bdab04fae86" + integrity sha512-F6tn376zimnvy+xW0bSnryul+rvVL7NhDIkavc9kAuzDx5zIZW04A6jdXPkcFBhojcqZB8b6pHt6CLqiUx+Tbw== + dependencies: + hast-util-to-string "^2.0.0" + parse-numeric-range "^1.3.0" + refractor "^4.8.0" + rehype-parse "^8.0.2" + unist-util-filter "^4.0.0" + unist-util-visit "^4.0.0" + +rehype-raw@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/rehype-raw/-/rehype-raw-6.1.1.tgz#81bbef3793bd7abacc6bf8335879d1b6c868c9d4" + integrity sha512-d6AKtisSRtDRX4aSPsJGTfnzrX2ZkHQLE5kiUuGOeEoLpbEulFF4hj0mLPbsa+7vmguDKOVVEQdHKDSwoaIDsQ== + dependencies: + "@types/hast" "^2.0.0" + hast-util-raw "^7.2.0" + unified "^10.0.0" + +rehype-rewrite@~3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/rehype-rewrite/-/rehype-rewrite-3.0.6.tgz#21e86982c7f2c169121bf10dd191f3768c6a6b29" + integrity sha512-REDTNCvsKcAazy8IQWzKp66AhSUDSOIKssSCqNqCcT9sN7JCwAAm3mWGTUdUzq80ABuy8d0D6RBwbnewu1aY1g== + dependencies: + hast-util-select "~5.0.1" + unified "~10.1.1" + unist-util-visit "~4.1.0" + +rehype-slug@~5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/rehype-slug/-/rehype-slug-5.1.0.tgz#1f7e69be7ea1a2067bcc4cfe58e74c881d5c047e" + integrity sha512-Gf91dJoXneiorNEnn+Phx97CO7oRMrpi+6r155tTxzGuLtm+QrI4cTwCa9e1rtePdL4i9tSO58PeSS6HWfgsiw== + dependencies: + "@types/hast" "^2.0.0" + github-slugger "^2.0.0" + hast-util-has-property "^2.0.0" + hast-util-heading-rank "^2.0.0" + hast-util-to-string "^2.0.0" + unified "^10.0.0" + unist-util-visit "^4.0.0" + +rehype-stringify@^9.0.0: + version "9.0.4" + resolved "https://registry.yarnpkg.com/rehype-stringify/-/rehype-stringify-9.0.4.tgz#31dbb9de6f5034c6964760a1b1083218059c4343" + integrity sha512-Uk5xu1YKdqobe5XpSskwPvo1XeHUUucWEQSl8hTrXt5selvca1e8K1EZ37E6YoZ4BT8BCqCdVfQW7OfHfthtVQ== + dependencies: + "@types/hast" "^2.0.0" + hast-util-to-html "^8.0.0" + unified "^10.0.0" + +rehype@~12.0.1: + version "12.0.1" + resolved "https://registry.yarnpkg.com/rehype/-/rehype-12.0.1.tgz#68a317662576dcaa2565a3952e149d6900096bf6" + integrity sha512-ey6kAqwLM3X6QnMDILJthGvG1m1ULROS9NT4uG9IDCuv08SFyLlreSuvOa//DgEvbXx62DS6elGVqusWhRUbgw== + dependencies: + "@types/hast" "^2.0.0" + rehype-parse "^8.0.0" + rehype-stringify "^9.0.0" + unified "^10.0.0" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== + +release-zalgo@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730" + integrity sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA== + dependencies: + es6-error "^4.0.1" + +remark-cli@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/remark-cli/-/remark-cli-9.0.0.tgz#6f7951e7a72217535f2e32b7a6d3f638fe182f86" + integrity sha512-y6kCXdwZoMoh0Wo4Och1tDW50PmMc86gW6GpF08v9d+xUCEJE2wwXdQ+TnTaUamRnfFdU+fE+eNf2PJ53cyq8g== + dependencies: + markdown-extensions "^1.1.0" + remark "^13.0.0" + unified-args "^8.0.0" + +remark-frontmatter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/remark-frontmatter/-/remark-frontmatter-3.0.0.tgz#ca5d996361765c859bd944505f377d6b186a6ec6" + integrity sha512-mSuDd3svCHs+2PyO29h7iijIZx4plX0fheacJcAoYAASfgzgVIcXGYSq9GFyYocFLftQs8IOmmkgtOovs6d4oA== + dependencies: + mdast-util-frontmatter "^0.2.0" + micromark-extension-frontmatter "^0.2.0" + +remark-gfm@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-1.0.0.tgz#9213643001be3f277da6256464d56fd28c3b3c0d" + integrity sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA== + dependencies: + mdast-util-gfm "^0.1.0" + micromark-extension-gfm "^0.3.0" + +remark-gfm@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-3.0.1.tgz#0b180f095e3036545e9dddac0e8df3fa5cfee54f" + integrity sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig== + dependencies: + "@types/mdast" "^3.0.0" + mdast-util-gfm "^2.0.0" + micromark-extension-gfm "^2.0.0" + unified "^10.0.0" + +remark-lint-blockquote-indentation@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-2.0.1.tgz#27347959acf42a6c3e401488d8210e973576b254" + integrity sha512-uJ9az/Ms9AapnkWpLSCJfawBfnBI2Tn1yUsPNqIFv6YM98ymetItUMyP6ng9NFPqDvTQBbiarulkgoEo0wcafQ== + dependencies: + mdast-util-to-string "^1.0.2" + pluralize "^8.0.0" + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +remark-lint-checkbox-character-style@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/remark-lint-checkbox-character-style/-/remark-lint-checkbox-character-style-3.0.0.tgz#3a982c7318ea86f80fe5ee5d6d8711b5b3cad0a2" + integrity sha512-691OJ5RdBRXVpvnOEiBhMB4uhHJSHVttw83O4qyAkNBiqxa1Axqhsz8FgmzYgRLQbOGd2ncVUcXG1LOJt6C0DQ== + dependencies: + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +remark-lint-code-block-style@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remark-lint-code-block-style/-/remark-lint-code-block-style-2.0.1.tgz#448b0f2660acfcdfff2138d125ff5b1c1279c0cb" + integrity sha512-eRhmnColmSxJhO61GHZkvO67SpHDshVxs2j3+Zoc5Y1a4zQT2133ZAij04XKaBFfsVLjhbY/+YOWxgvtjx2nmA== + dependencies: + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +remark-lint-definition-case@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remark-lint-definition-case/-/remark-lint-definition-case-2.0.1.tgz#10340eb2f87acff41140d52ad7e5b40b47e6690a" + integrity sha512-M+XlThtQwEJLQnQb5Gi6xZdkw92rGp7m2ux58WMw/Qlcg02WgHR/O0OcHPe5VO5hMJrtI+cGG5T0svsCgRZd3w== + dependencies: + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +remark-lint-definition-spacing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remark-lint-definition-spacing/-/remark-lint-definition-spacing-2.0.1.tgz#97f01bf9bf77a7bdf8013b124b7157dd90b07c64" + integrity sha512-xK9DOQO5MudITD189VyUiMHBIKltW1oc55L7Fti3i9DedXoBG7Phm+V9Mm7IdWzCVkquZVgVk63xQdqzSQRrSQ== + dependencies: + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +remark-lint-emphasis-marker@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remark-lint-emphasis-marker/-/remark-lint-emphasis-marker-2.0.1.tgz#1d5ca2070d4798d16c23120726158157796dc317" + integrity sha512-7mpbAUrSnHiWRyGkbXRL5kfSKY9Cs8cdob7Fw+Z02/pufXMF4yRWaegJ5NTUu1RE+SKlF44wtWWjvcIoyY6/aw== + dependencies: + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +remark-lint-fenced-code-flag@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-2.0.1.tgz#2cb3ddb1157082c45760c7d01ca08e13376aaf62" + integrity sha512-+COnWHlS/h02FMxoZWxNlZW3Y8M0cQQpmx3aNCbG7xkyMyCKsMLg9EmRvYHHIbxQCuF3JT0WWx5AySqlc7d+NA== + dependencies: + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +remark-lint-fenced-code-marker@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-2.0.1.tgz#7bbeb0fb45b0818a3c8a2d232cf0c723ade58ecf" + integrity sha512-lujpjm04enn3ma6lITlttadld6eQ1OWAEcT3qZzvFHp+zPraC0yr0eXlvtDN/0UH8mrln/QmGiZp3i8IdbucZg== + dependencies: + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +remark-lint-file-extension@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/remark-lint-file-extension/-/remark-lint-file-extension-1.0.5.tgz#7e2feec02919aa3db5c71fda19d726a9e24a4c6c" + integrity sha512-oVQdf5vEomwHkfQ7R/mgmsWW2H/t9kSvnrxtVoNOHr+qnOEafKKDn+AFhioN2kqtjCZBAjSSrePs6xGKmXKDTw== + dependencies: + unified-lint-rule "^1.0.0" + +remark-lint-final-definition@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/remark-lint-final-definition/-/remark-lint-final-definition-2.1.0.tgz#b6e654c01ebcb1afc936d7b9cd74db8ec273e0bb" + integrity sha512-83K7n2icOHPfBzbR5Mr1o7cu8gOjD8FwJkFx/ly+rW+8SHfjCj4D3WOFGQ1xVdmHjfomBDXXDSNo2oiacADVXQ== + dependencies: + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +remark-lint-final-newline@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/remark-lint-final-newline/-/remark-lint-final-newline-1.0.5.tgz#666f609a91f97c44f5ab7facf1fb3c5b3ffe398f" + integrity sha512-rfLlW8+Fz2dqnaEgU4JwLA55CQF1T4mfSs/GwkkeUCGPenvEYwSkCN2KO2Gr1dy8qPoOdTFE1rSufLjmeTW5HA== + dependencies: + unified-lint-rule "^1.0.0" + +remark-lint-hard-break-spaces@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-2.0.1.tgz#2149b55cda17604562d040c525a2a0d26aeb0f0f" + integrity sha512-Qfn/BMQFamHhtbfLrL8Co/dbYJFLRL4PGVXZ5wumkUO5f9FkZC2RsV+MD9lisvGTkJK0ZEJrVVeaPbUIFM0OAw== + dependencies: + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +remark-lint-heading-increment@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remark-lint-heading-increment/-/remark-lint-heading-increment-2.0.1.tgz#b578f251508a05d79bc2d1ae941e0620e23bf1d3" + integrity sha512-bYDRmv/lk3nuWXs2VSD1B4FneGT6v7a74FuVmb305hyEMmFSnneJvVgnOJxyKlbNlz12pq1IQ6MhlJBda/SFtQ== + dependencies: + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-visit "^2.0.0" + +remark-lint-heading-style@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remark-lint-heading-style/-/remark-lint-heading-style-2.0.1.tgz#8216fca67d97bbbeec8a19b6c71bfefc16549f72" + integrity sha512-IrFLNs0M5Vbn9qg51AYhGUfzgLAcDOjh2hFGMz3mx664dV6zLcNZOPSdJBBJq3JQR4gKpoXcNwN1+FFaIATj+A== + dependencies: + mdast-util-heading-style "^1.0.2" + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-visit "^2.0.0" + +remark-lint-link-title-style@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remark-lint-link-title-style/-/remark-lint-link-title-style-2.0.1.tgz#51a595c69fcfa73a245a030dfaa3504938a1173a" + integrity sha512-+Q7Ew8qpOQzjqbDF6sUHmn9mKgje+m2Ho8Xz7cEnGIRaKJgtJzkn/dZqQM/az0gn3zaN6rOuwTwqw4EsT5EsIg== + dependencies: + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + vfile-location "^3.0.0" + +remark-lint-list-item-bullet-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/remark-lint-list-item-bullet-indent/-/remark-lint-list-item-bullet-indent-3.0.0.tgz#3c902e75e841850da8b37126da45fc1fe850d7d6" + integrity sha512-X2rleWP8XReC4LXKF7Qi5vYiPJkA4Grx5zxsjHofFrVRz6j0PYOCuz7vsO+ZzMunFMfom6FODnscSWz4zouDVw== + dependencies: + pluralize "^8.0.0" + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-visit "^2.0.0" + +remark-lint-list-item-content-indent@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remark-lint-list-item-content-indent/-/remark-lint-list-item-content-indent-2.0.1.tgz#96387459440dcd61e522ab02bff138b32bfaa63a" + integrity sha512-OzUMqavxyptAdG7vWvBSMc9mLW9ZlTjbW4XGayzczd3KIr6Uwp3NEFXKx6MLtYIM/vwBqMrPQUrObOC7A2uBpQ== + dependencies: + pluralize "^8.0.0" + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +remark-lint-list-item-indent@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remark-lint-list-item-indent/-/remark-lint-list-item-indent-2.0.1.tgz#c6472514e17bc02136ca87936260407ada90bf8d" + integrity sha512-4IKbA9GA14Q9PzKSQI6KEHU/UGO36CSQEjaDIhmb9UOhyhuzz4vWhnSIsxyI73n9nl9GGRAMNUSGzr4pQUFwTA== + dependencies: + pluralize "^8.0.0" + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +remark-lint-list-item-spacing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remark-lint-list-item-spacing/-/remark-lint-list-item-spacing-2.0.1.tgz#864ddda464d5cd11f725c83f00bb240538661d50" + integrity sha512-T/aRHRNxiLC0v8gsb5ljFpjm/j/nHvlbCcmE5q7+LCiKLWsv7JoERrmMyx89KaBudLRPhaFHqt6u+dfWYmj6LA== + dependencies: + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +remark-lint-list-item-spacing@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/remark-lint-list-item-spacing/-/remark-lint-list-item-spacing-3.0.0.tgz#14c18fe8c0f19231edb5cf94abda748bb773110b" + integrity sha512-SRUVonwdN3GOSFb6oIYs4IfJxIVR+rD0nynkX66qEO49/qDDT1PPvkndis6Nyew5+t+2V/Db9vqllL6SWbnEtw== + dependencies: + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +remark-lint-maximum-heading-length@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remark-lint-maximum-heading-length/-/remark-lint-maximum-heading-length-2.0.1.tgz#56f240707a75b59bce3384ccc9da94548affa98f" + integrity sha512-1CjJ71YDqEpoOjUnc4wrwZV8ZGXWUIYRYeGoarAy3QKHepJL9M+zkdbOxZDfhc3tjVoDW/LWcgsW+DEpczgiMA== + dependencies: + mdast-util-to-string "^1.0.2" + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-visit "^2.0.0" + +remark-lint-maximum-line-length@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-2.0.3.tgz#d0d15410637d61b031a83d7c78022ec46d6c858a" + integrity sha512-zyWHBFh1oPAy+gkaVFXiTHYP2WwriIeBtaarDqkweytw0+qmuikjVMJTWbQ3+XfYBreD7KKDM9SI79nkp0/IZQ== + dependencies: + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +remark-lint-no-auto-link-without-protocol@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remark-lint-no-auto-link-without-protocol/-/remark-lint-no-auto-link-without-protocol-2.0.1.tgz#f75e5c24adb42385593e0d75ca39987edb70b6c4" + integrity sha512-TFcXxzucsfBb/5uMqGF1rQA+WJJqm1ZlYQXyvJEXigEZ8EAxsxZGPb/gOQARHl/y0vymAuYxMTaChavPKaBqpQ== + dependencies: + mdast-util-to-string "^1.0.2" + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +remark-lint-no-blockquote-without-marker@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-4.0.0.tgz#856fb64dd038fa8fc27928163caa24a30ff4d790" + integrity sha512-Y59fMqdygRVFLk1gpx2Qhhaw5IKOR9T38Wf7pjR07bEFBGUNfcoNVIFMd1TCJfCPQxUyJzzSqfZz/KT7KdUuiQ== + dependencies: + unified-lint-rule "^1.0.0" + unist-util-generated "^1.0.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + vfile-location "^3.0.0" + +remark-lint-no-consecutive-blank-lines@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-3.0.0.tgz#c8fe11095b8f031a1406da273722bd4a9174bf41" + integrity sha512-kmzLlOLrapBKEngwYFTdCZDmeOaze6adFPB7G0EdymD9V1mpAlnneINuOshRLEDKK5fAhXKiZXxdGIaMPkiXrA== + dependencies: + pluralize "^8.0.0" + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +remark-lint-no-dead-urls@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remark-lint-no-dead-urls/-/remark-lint-no-dead-urls-1.1.0.tgz#c3ba46ba0bf5f28e3789446295e27bcab68d4349" + integrity sha512-it3EZmMQ+hwGhUf60NkXN0mMIFuFkS0cxdbgEbhZ/Fj1PlUBpe3gDBtWJ/sqNwSNvQlNSzpvMQkNHSoAhlsVjA== + dependencies: + check-links "^1.1.8" + is-online "^8.2.1" + unified-lint-rule "^1.0.4" + unist-util-visit "^2.0.1" + +remark-lint-no-duplicate-definitions@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remark-lint-no-duplicate-definitions/-/remark-lint-no-duplicate-definitions-2.0.1.tgz#588039881f63fe01df69d3b64265760b3e83b477" + integrity sha512-XL22benJZB01m+aOse91nsu1IMFqeWJWme9QvoJuxIcBROO1BG1VoqLOkwNcawE/M/0CkvTo5rfx0eMlcnXOIw== + dependencies: + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-stringify-position "^2.0.0" + unist-util-visit "^2.0.0" + +remark-lint-no-duplicate-headings@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remark-lint-no-duplicate-headings/-/remark-lint-no-duplicate-headings-2.0.1.tgz#4a4b70e029155ebcfc03d8b2358c427b69a87576" + integrity sha512-F6AP0FJcHIlkmq0pHX0J5EGvLA9LfhuYTvnNO8y3kvflHeRjFkDyt2foz/taXR8OcLQR51n/jIJiwrrSMbiauw== + dependencies: + mdast-util-to-string "^1.0.2" + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-stringify-position "^2.0.0" + unist-util-visit "^2.0.0" + +remark-lint-no-emphasis-as-heading@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remark-lint-no-emphasis-as-heading/-/remark-lint-no-emphasis-as-heading-2.0.1.tgz#fcc064133fe00745943c334080fed822f72711ea" + integrity sha512-z86+yWtVivtuGIxIC4g9RuATbgZgOgyLcnaleonJ7/HdGTYssjJNyqCJweaWSLoaI0akBQdDwmtJahW5iuX3/g== + dependencies: + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-visit "^2.0.0" + +remark-lint-no-file-name-articles@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/remark-lint-no-file-name-articles/-/remark-lint-no-file-name-articles-1.0.5.tgz#4ca3425f6613f94feaef6941028583299727c339" + integrity sha512-AQk5eTb3s3TAPPjiglZgqlQj4ycao+gPs8/XkdN1VCPUtewW0GgwoQe7YEuBKayJ6ioN8dGP37Kg/P/PlKaRQA== + dependencies: + unified-lint-rule "^1.0.0" + +remark-lint-no-file-name-consecutive-dashes@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/remark-lint-no-file-name-consecutive-dashes/-/remark-lint-no-file-name-consecutive-dashes-1.0.5.tgz#e9a6f2aeab948aa249c8a8356359e3d8843a4c5c" + integrity sha512-Mg2IDsi790/dSdAzwnBnsMYdZm3qC2QgGwqOWcr0TPABJhhjC3p8r5fX4MNMTXI5It7B7bW9+ImmCeLOZiXkLg== + dependencies: + unified-lint-rule "^1.0.0" + +remark-lint-no-file-name-irregular-characters@^1.0.0, remark-lint-no-file-name-irregular-characters@^1.0.3: + version "1.0.5" + resolved "https://registry.yarnpkg.com/remark-lint-no-file-name-irregular-characters/-/remark-lint-no-file-name-irregular-characters-1.0.5.tgz#6866f5b8370cdc916d55e7cf87bb6a55f9b6e0c6" + integrity sha512-Oe5i99qNUKc2bxmiH421o5B/kqlf1dfjAxpHNLhi2X2dXE91zRGavrlRM/4f4oR0N9Bqb3qB9JZPyMPWrzu9XA== + dependencies: + unified-lint-rule "^1.0.0" + +remark-lint-no-file-name-mixed-case@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/remark-lint-no-file-name-mixed-case/-/remark-lint-no-file-name-mixed-case-1.0.5.tgz#3e37bfef74bbdd4b07aa9ef9dd452758f8b46731" + integrity sha512-ilrUCbHZin/ENwr8c3SC2chgkFsizXjBQIB/oZ7gnm1IkCkZPiMyXZAHdpwC/DjbrpGxfMYh9JmIHao4giS5+A== + dependencies: + unified-lint-rule "^1.0.0" + +remark-lint-no-file-name-outer-dashes@^1.0.0: + version "1.0.6" + resolved "https://registry.yarnpkg.com/remark-lint-no-file-name-outer-dashes/-/remark-lint-no-file-name-outer-dashes-1.0.6.tgz#4e0e4d42a63f0fdfb856bb5d8d8112725656e700" + integrity sha512-rT8CmcIlenegS0Yst4maYXdZfqIjBOiRUY8j/KJkORF5tKH+3O1/S07025qPGmcRihzK3w4yO0K8rgkKQw0b9w== + dependencies: + unified-lint-rule "^1.0.0" + +remark-lint-no-heading-content-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/remark-lint-no-heading-content-indent/-/remark-lint-no-heading-content-indent-3.0.0.tgz#faa323a52fcb5db9b3ce16cb8e417e43ab433af1" + integrity sha512-yULDoVSIqKylLDfW6mVUbrHlyEWUSFtVFiKc+/BA412xDIhm8HZLUnP+FsuBC0OzbIZ+bO9Txy52WtO3LGnK1A== + dependencies: + mdast-util-heading-style "^1.0.2" + pluralize "^8.0.0" + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +remark-lint-no-heading-punctuation@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remark-lint-no-heading-punctuation/-/remark-lint-no-heading-punctuation-2.0.1.tgz#face59f9a95c8aa278a8ee0c728bc44cd53ea9ed" + integrity sha512-lY/eF6GbMeGu4cSuxfGHyvaQQBIq/6T/o+HvAR5UfxSTxmxZFwbZneAI2lbeR1zPcqOU87NsZ5ZZzWVwdLpPBw== + dependencies: + mdast-util-to-string "^1.0.2" + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-visit "^2.0.0" + +remark-lint-no-inline-padding@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-3.0.0.tgz#14c2722bcddc648297a54298107a922171faf6eb" + integrity sha512-3s9uW3Yux9RFC0xV81MQX3bsYs+UY7nPnRuMxeIxgcVwxQ4E/mTJd9QjXUwBhU9kdPtJ5AalngdmOW2Tgar8Cg== + dependencies: + mdast-util-to-string "^1.0.2" + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-visit "^2.0.0" + +remark-lint-no-literal-urls@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-2.0.1.tgz#731908f9866c1880e6024dcee1269fb0f40335d6" + integrity sha512-IDdKtWOMuKVQIlb1CnsgBoyoTcXU3LppelDFAIZePbRPySVHklTtuK57kacgU5grc7gPM04bZV96eliGrRU7Iw== + dependencies: + mdast-util-to-string "^1.0.2" + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +remark-lint-no-multiple-toplevel-headings@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remark-lint-no-multiple-toplevel-headings/-/remark-lint-no-multiple-toplevel-headings-2.0.1.tgz#3ff2b505adf720f4ff2ad2b1021f8cfd50ad8635" + integrity sha512-VKSItR6c+u3OsE5pUiSmNusERNyQS9Nnji26ezoQ1uvy06k3RypIjmzQqJ/hCkSiF+hoyC3ibtrrGT8gorzCmQ== + dependencies: + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-stringify-position "^2.0.0" + unist-util-visit "^2.0.0" + +remark-lint-no-shell-dollars@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-2.0.2.tgz#b2c6c3ed95e5615f8e5f031c7d271a18dc17618e" + integrity sha512-zhkHZOuyaD3r/TUUkkVqW0OxsR9fnSrAnHIF63nfJoAAUezPOu8D1NBsni6rX8H2DqGbPYkoeWrNsTwiKP0yow== + dependencies: + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-visit "^2.0.0" + +remark-lint-no-shortcut-reference-image@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-2.0.1.tgz#d174d12a57e8307caf6232f61a795bc1d64afeaa" + integrity sha512-2jcZBdnN6ecP7u87gkOVFrvICLXIU5OsdWbo160FvS/2v3qqqwF2e/n/e7D9Jd+KTq1mR1gEVVuTqkWWuh3cig== + dependencies: + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-visit "^2.0.0" + +remark-lint-no-shortcut-reference-link@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-2.0.1.tgz#8f963f81036e45cfb7061b3639e9c6952308bc94" + integrity sha512-pTZbslG412rrwwGQkIboA8wpBvcjmGFmvugIA+UQR+GfFysKtJ5OZMPGJ98/9CYWjw9Z5m0/EktplZ5TjFjqwA== + dependencies: + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-visit "^2.0.0" + +remark-lint-no-table-indentation@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-3.0.0.tgz#f3c3fc24375069ec8e510f43050600fb22436731" + integrity sha512-+l7GovI6T+3LhnTtz/SmSRyOb6Fxy6tmaObKHrwb/GAebI/4MhFS1LVo3vbiP/RpPYtyQoFbbuXI55hqBG4ibQ== + dependencies: + unified-lint-rule "^1.0.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + vfile-location "^3.0.0" + +remark-lint-no-undefined-references@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-3.0.0.tgz#59dab8f815f8de9f1dcbd69e7cc705978e931cb0" + integrity sha512-0hzaJS9GuzSQVOeeNdJr/s66LRQOzp618xuOQPYWHcJdd+SCaRTyWbjMrTM/cCI5L1sYjgurp410NkIBQ32Vqg== + dependencies: + collapse-white-space "^1.0.4" + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.1.0" + unist-util-visit "^2.0.0" + vfile-location "^3.1.0" + +remark-lint-no-unused-definitions@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remark-lint-no-unused-definitions/-/remark-lint-no-unused-definitions-2.0.1.tgz#ba45d9105b61b77ae02b92d3d339a638ab4ed59a" + integrity sha512-+BMc0BOjc364SvKYLkspmxDch8OaKPbnUGgQBvK0Bmlwy42baR4C9zhwAWBxm0SBy5Z4AyM4G4jKpLXPH40Oxg== + dependencies: + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-visit "^2.0.0" + +remark-lint-ordered-list-marker-style@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-2.0.1.tgz#183c31967e6f2ae8ef00effad03633f7fd00ffaa" + integrity sha512-Cnpw1Dn9CHn+wBjlyf4qhPciiJroFOEGmyfX008sQ8uGoPZsoBVIJx76usnHklojSONbpjEDcJCjnOvfAcWW1A== + dependencies: + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +remark-lint-ordered-list-marker-value@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remark-lint-ordered-list-marker-value/-/remark-lint-ordered-list-marker-value-2.0.1.tgz#0de343de2efb41f01eae9f0f7e7d30fe43db5595" + integrity sha512-blt9rS7OKxZ2NW8tqojELeyNEwPhhTJGVa+YpUkdEH+KnrdcD7Nzhnj6zfLWOx6jFNZk3jpq5nvLFAPteHaNKg== + dependencies: + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +remark-lint-rule-style@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remark-lint-rule-style/-/remark-lint-rule-style-2.0.1.tgz#f59bd82e75d3eaabd0eee1c8c0f5513372eb553c" + integrity sha512-hz4Ff9UdlYmtO6Czz99WJavCjqCer7Cav4VopXt+yVIikObw96G5bAuLYcVS7hvMUGqC9ZuM02/Y/iq9n8pkAg== + dependencies: + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +remark-lint-strong-marker@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remark-lint-strong-marker/-/remark-lint-strong-marker-2.0.1.tgz#1ad8f190c6ac0f8138b638965ccf3bcd18f6d4e4" + integrity sha512-8X2IsW1jZ5FmW9PLfQjkL0OVy/J3xdXLcZrG1GTeQKQ91BrPFyEZqUM2oM6Y4S6LGtxWer+neZkPZNroZoRPBQ== + dependencies: + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +remark-lint-table-cell-padding@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-3.0.0.tgz#a769ba1999984ff5f90294fb6ccb8aead7e8a12f" + integrity sha512-sEKrbyFZPZpxI39R8/r+CwUrin9YtyRwVn0SQkNQEZWZcIpylK+bvoKIldvLIXQPob+ZxklL0GPVRzotQMwuWQ== + dependencies: + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +remark-lint-table-pipe-alignment@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remark-lint-table-pipe-alignment/-/remark-lint-table-pipe-alignment-2.0.1.tgz#12b7e4c54473d69c9866cb33439c718d09cffcc5" + integrity sha512-O89U7bp0ja6uQkT2uQrNB76GaPvFabrHiUGhqEUnld21yEdyj7rgS57kn84lZNSuuvN1Oor6bDyCwWQGzzpoOQ== + dependencies: + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +remark-lint-table-pipes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/remark-lint-table-pipes/-/remark-lint-table-pipes-3.0.0.tgz#b30b055d594cae782667eec91c6c5b35928ab259" + integrity sha512-QPokSazEdl0Y8ayUV9UB0Ggn3Jos/RAQwIo0z1KDGnJlGDiF80Jc6iU9RgDNUOjlpQffSLIfSVxH5VVYF/K3uQ== + dependencies: + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +remark-lint-unordered-list-marker-style@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-2.0.1.tgz#e64692aa9594dbe7e945ae76ab2218949cd92477" + integrity sha512-8KIDJNDtgbymEvl3LkrXgdxPMTOndcux3BHhNGB2lU4UnxSpYeHsxcDgirbgU6dqCAfQfvMjPvfYk19QTF9WZA== + dependencies: + unified-lint-rule "^1.0.0" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +remark-lint@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/remark-lint/-/remark-lint-8.0.0.tgz#6e40894f4a39eaea31fc4dd45abfaba948bf9a09" + integrity sha512-ESI8qJQ/TIRjABDnqoFsTiZntu+FRifZ5fJ77yX63eIDijl/arvmDvT+tAf75/Nm5BFL4R2JFUtkHRGVjzYUsg== + dependencies: + remark-message-control "^6.0.0" + +remark-message-control@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/remark-message-control/-/remark-message-control-6.0.0.tgz#955b054b38c197c9f2e35b1d88a4912949db7fc5" + integrity sha512-k9bt7BYc3G7YBdmeAhvd3VavrPa/XlKWR3CyHjr4sLO9xJyly8WHHT3Sp+8HPR8lEUv+/sZaffL7IjMLV0f6BA== + dependencies: + mdast-comment-marker "^1.0.0" + unified-message-control "^3.0.0" + +remark-parse@^10.0.0: + version "10.0.2" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-10.0.2.tgz#ca241fde8751c2158933f031a4e3efbaeb8bc262" + integrity sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw== + dependencies: + "@types/mdast" "^3.0.0" + mdast-util-from-markdown "^1.0.0" + unified "^10.0.0" + +remark-parse@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-9.0.0.tgz#4d20a299665880e4f4af5d90b7c7b8a935853640" + integrity sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw== + dependencies: + mdast-util-from-markdown "^0.8.0" + +remark-preset-lint-consistent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/remark-preset-lint-consistent/-/remark-preset-lint-consistent-4.0.0.tgz#5686ac8477988834f40b514d9d805392eca6a103" + integrity sha512-1euNZfRanM3wysHAR0vYX6uMbbKTlmTc+QvrymgRayKV8uhslQBISa+XduWk7mSz68ylS8CRR7JGvBfi6kDQjg== + dependencies: + remark-lint "^8.0.0" + remark-lint-blockquote-indentation "^2.0.0" + remark-lint-checkbox-character-style "^3.0.0" + remark-lint-code-block-style "^2.0.0" + remark-lint-emphasis-marker "^2.0.0" + remark-lint-fenced-code-marker "^2.0.0" + remark-lint-heading-style "^2.0.0" + remark-lint-link-title-style "^2.0.0" + remark-lint-list-item-content-indent "^2.0.0" + remark-lint-ordered-list-marker-style "^2.0.0" + remark-lint-rule-style "^2.0.0" + remark-lint-strong-marker "^2.0.0" + remark-lint-table-cell-padding "^3.0.0" + +remark-preset-lint-markdown-style-guide@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/remark-preset-lint-markdown-style-guide/-/remark-preset-lint-markdown-style-guide-4.0.0.tgz#976b6ffd7f37aa90868e081a69241fcde3a297d4" + integrity sha512-gczDlfZ28Fz0IN/oddy0AH4CiTu9S8d3pJWUsrnwFiafjhJjPGobGE1OD3bksi53md1Bp4K0fzo99YYfvB4Sjw== + dependencies: + remark-lint "^8.0.0" + remark-lint-blockquote-indentation "^2.0.0" + remark-lint-code-block-style "^2.0.0" + remark-lint-definition-case "^2.0.0" + remark-lint-definition-spacing "^2.0.0" + remark-lint-emphasis-marker "^2.0.0" + remark-lint-fenced-code-flag "^2.0.0" + remark-lint-fenced-code-marker "^2.0.0" + remark-lint-file-extension "^1.0.0" + remark-lint-final-definition "^2.0.0" + remark-lint-hard-break-spaces "^2.0.0" + remark-lint-heading-increment "^2.0.0" + remark-lint-heading-style "^2.0.0" + remark-lint-link-title-style "^2.0.0" + remark-lint-list-item-content-indent "^2.0.0" + remark-lint-list-item-indent "^2.0.0" + remark-lint-list-item-spacing "^3.0.0" + remark-lint-maximum-heading-length "^2.0.0" + remark-lint-maximum-line-length "^2.0.0" + remark-lint-no-auto-link-without-protocol "^2.0.0" + remark-lint-no-blockquote-without-marker "^4.0.0" + remark-lint-no-consecutive-blank-lines "^3.0.0" + remark-lint-no-duplicate-headings "^2.0.0" + remark-lint-no-emphasis-as-heading "^2.0.0" + remark-lint-no-file-name-articles "^1.0.0" + remark-lint-no-file-name-consecutive-dashes "^1.0.0" + remark-lint-no-file-name-irregular-characters "^1.0.0" + remark-lint-no-file-name-mixed-case "^1.0.0" + remark-lint-no-file-name-outer-dashes "^1.0.0" + remark-lint-no-heading-punctuation "^2.0.0" + remark-lint-no-inline-padding "^3.0.0" + remark-lint-no-literal-urls "^2.0.0" + remark-lint-no-multiple-toplevel-headings "^2.0.0" + remark-lint-no-shell-dollars "^2.0.0" + remark-lint-no-shortcut-reference-image "^2.0.0" + remark-lint-no-shortcut-reference-link "^2.0.0" + remark-lint-no-table-indentation "^3.0.0" + remark-lint-ordered-list-marker-style "^2.0.0" + remark-lint-ordered-list-marker-value "^2.0.0" + remark-lint-rule-style "^2.0.0" + remark-lint-strong-marker "^2.0.0" + remark-lint-table-cell-padding "^3.0.0" + remark-lint-table-pipe-alignment "^2.0.0" + remark-lint-table-pipes "^3.0.0" + remark-lint-unordered-list-marker-style "^2.0.0" + +remark-preset-lint-recommended@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/remark-preset-lint-recommended/-/remark-preset-lint-recommended-5.0.0.tgz#cc0da5bf532a47392e01ad2ee34c8076edad1207" + integrity sha512-uu+Ab8JCwMMaKvvB0LOWTWtM3uAvJbKQM/oyWCEJqj7lUVNTKZS575Ro5rKM3Dx7kQjjR1iw0e99bpAYTc5xNA== + dependencies: + remark-lint "^8.0.0" + remark-lint-final-newline "^1.0.0" + remark-lint-hard-break-spaces "^2.0.0" + remark-lint-list-item-bullet-indent "^3.0.0" + remark-lint-list-item-indent "^2.0.0" + remark-lint-no-auto-link-without-protocol "^2.0.0" + remark-lint-no-blockquote-without-marker "^4.0.0" + remark-lint-no-duplicate-definitions "^2.0.0" + remark-lint-no-heading-content-indent "^3.0.0" + remark-lint-no-inline-padding "^3.0.0" + remark-lint-no-literal-urls "^2.0.0" + remark-lint-no-shortcut-reference-image "^2.0.0" + remark-lint-no-shortcut-reference-link "^2.0.0" + remark-lint-no-undefined-references "^3.0.0" + remark-lint-no-unused-definitions "^2.0.0" + remark-lint-ordered-list-marker-style "^2.0.0" + +remark-rehype@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-10.1.0.tgz#32dc99d2034c27ecaf2e0150d22a6dcccd9a6279" + integrity sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw== + dependencies: + "@types/hast" "^2.0.0" + "@types/mdast" "^3.0.0" + mdast-util-to-hast "^12.1.0" + unified "^10.0.0" + +remark-stringify@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-9.0.1.tgz#576d06e910548b0a7191a71f27b33f1218862894" + integrity sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg== + dependencies: + mdast-util-to-markdown "^0.6.0" + +remark@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/remark/-/remark-13.0.0.tgz#d15d9bf71a402f40287ebe36067b66d54868e425" + integrity sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA== + dependencies: + remark-parse "^9.0.0" + remark-stringify "^9.0.0" + unified "^9.1.0" + +renderkid@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" + integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== + dependencies: + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^6.0.1" + +repeat-string@^1.0.0, repeat-string@^1.5.0: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +resize-observer-polyfill@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" + integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-pathname@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" + integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== + +resolve.exports@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" + integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== + +resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.4: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +resolve@^2.0.0-next.5: + version "2.0.0-next.5" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" + integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== + dependencies: + lowercase-keys "^1.0.0" + +restore-cursor@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" + integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +retry@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rfdc@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" + integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== + +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +sade@^1.7.3: + version "1.8.1" + resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" + integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== + dependencies: + mri "^1.1.0" + +safe-array-concat@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" + integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + has-symbols "^1.0.3" + isarray "^2.0.5" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-regex "^1.1.4" + +safe-regex@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-2.1.1.tgz#f7128f00d056e2fe5c11e81a1324dd974aadced2" + integrity sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A== + dependencies: + regexp-tree "~0.1.1" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sass-loader@^10.0.0: + version "10.5.2" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.5.2.tgz#1ca30534fff296417b853c7597ca3b0bbe8c37d0" + integrity sha512-vMUoSNOUKJILHpcNCCyD23X34gve1TS7Rjd9uXHeKqhvBG39x6XbswFDtpbTElj6XdMFezoWhkh5vtKudf2cgQ== + dependencies: + klona "^2.0.4" + loader-utils "^2.0.0" + neo-async "^2.6.2" + schema-utils "^3.0.0" + semver "^7.3.2" + +sass@^1.42.1: + version "1.77.8" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.77.8.tgz#9f18b449ea401759ef7ec1752a16373e296b52bd" + integrity sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ== + dependencies: + chokidar ">=3.0.0 <4.0.0" + immutable "^4.0.0" + source-map-js ">=0.6.2 <2.0.0" + +sax@~1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + +saxes@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" + integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== + dependencies: + xmlchars "^2.2.0" + +scheduler@^0.23.0: + version "0.23.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" + integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== + dependencies: + loose-envify "^1.1.0" + +schema-utils@^2.6.5, schema-utils@^2.7.0: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" + integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" + integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.9.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.1.0" + +scroll-into-view-if-needed@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-3.1.0.tgz#fa9524518c799b45a2ef6bbffb92bcad0296d01f" + integrity sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ== + dependencies: + compute-scroll-into-view "^3.0.2" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== + +selfsigned@^2.1.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.4.1.tgz#560d90565442a3ed35b674034cec4e95dceb4ae0" + integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q== + dependencies: + "@types/node-forge" "^1.3.0" + node-forge "^1" + +semver@^5.6.0: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== + dependencies: + randombytes "^2.1.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.1, set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shallowequal@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== + +side-channel@^1.0.4, side-channel@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" + +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.1.tgz#cc7ba77cfbe761036fbfce3d021af25fc5584d55" + integrity sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA== + dependencies: + decompress-response "^4.2.0" + once "^1.3.1" + simple-concat "^1.0.0" + +simple-update-notifier@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb" + integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w== + dependencies: + semver "^7.5.3" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" + integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== + dependencies: + ansi-styles "^6.0.0" + is-fullwidth-code-point "^4.0.0" + +sliced@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41" + integrity sha512-VZBmZP8WU3sMOZm1bdgTadsQbcscK0UM8oKxKVBs4XAhUo2Xxzm/OFMGBkPusxw9xL3Uy8LrzEqGqJhclsr0yA== + +sockjs@^0.3.24: + version "0.3.24" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" + integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== + dependencies: + faye-websocket "^0.11.3" + uuid "^8.3.2" + websocket-driver "^0.7.4" + +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" + integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== + +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@^0.5.16, source-map-support@^0.5.19, source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +space-separated-tokens@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" + integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== + +spawn-wrap@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-2.0.0.tgz#103685b8b8f9b79771318827aa78650a610d457e" + integrity sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg== + dependencies: + foreground-child "^2.0.0" + is-windows "^1.0.2" + make-dir "^3.0.0" + rimraf "^3.0.0" + signal-exit "^3.0.2" + which "^2.0.1" + +spdx-correct@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.20" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz#e44ed19ed318dd1e5888f93325cee800f0f51b89" + integrity sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +spel2js@^0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/spel2js/-/spel2js-0.2.8.tgz#3ba3b291e5c6bae5c9f703e839294969b61fc691" + integrity sha512-dzYq+v4YV7SPIdNrmvFAUjc0HcgI7b0yoMw7kzOBmlj/GjdOb/+8dVn1I7nLuOS5X2SW+LK3tf2SVkXRjCkWBA== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +sqlstring@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.3.tgz#2ddc21f03bce2c387ed60680e739922c65751d0c" + integrity sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg== + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +stack-utils@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== + dependencies: + escape-string-regexp "^2.0.0" + +stackframe@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" + integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +stop-iteration-iterator@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" + integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== + dependencies: + internal-slot "^1.0.4" + +store@^2.0.12: + version "2.0.12" + resolved "https://registry.yarnpkg.com/store/-/store-2.0.12.tgz#8c534e2a0b831f72b75fc5f1119857c44ef5d593" + integrity sha512-eO9xlzDpXLiMr9W1nQ3Nfp9EzZieIQc10zPPMP5jsVV7bLOziSFFBP0XoDXACEIFtdI+rIz0NwWVA/QVJ8zJtw== + +string-argv@0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" + integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== + +string-convert@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/string-convert/-/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97" + integrity sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A== + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.0, string-width@^5.0.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string.prototype.includes@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.includes/-/string.prototype.includes-2.0.0.tgz#8986d57aee66d5460c144620a6d873778ad7289f" + integrity sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.matchall@^4.0.11: + version "4.0.11" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz#1092a72c59268d2abaad76582dccc687c0297e0a" + integrity sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.7" + regexp.prototype.flags "^1.5.2" + set-function-name "^2.0.2" + side-channel "^1.0.6" + +string.prototype.repeat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz#e90872ee0308b29435aa26275f6e1b762daee01a" + integrity sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trim@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" + integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-object-atoms "^1.0.0" + +string.prototype.trimend@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" + integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +stringify-entities@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3" + integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== + dependencies: + character-entities-html4 "^2.0.0" + character-entities-legacy "^3.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + +strip-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-4.0.0.tgz#b41379433dd06f5eae805e21d631e07ee670d853" + integrity sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA== + dependencies: + min-indent "^1.0.1" + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +style-loader@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.3.0.tgz#828b4a3b3b7e7aa5847ce7bae9e874512114249e" + integrity sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q== + dependencies: + loader-utils "^2.0.0" + schema-utils "^2.7.0" + +style-search@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" + integrity sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg== + +style-to-object@^0.4.0: + version "0.4.4" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.4.4.tgz#266e3dfd56391a7eefb7770423612d043c3f33ec" + integrity sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg== + dependencies: + inline-style-parser "0.1.1" + +stylelint-config-recommended-scss@^13.1.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-13.1.0.tgz#04e529ae0e9c1abb1e04de79258461c07811876f" + integrity sha512-8L5nDfd+YH6AOoBGKmhH8pLWF1dpfY816JtGMePcBqqSsLU+Ysawx44fQSlMOJ2xTfI9yTGpup5JU77c17w1Ww== + dependencies: + postcss-scss "^4.0.9" + stylelint-config-recommended "^13.0.0" + stylelint-scss "^5.3.0" + +stylelint-config-recommended@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz#c48a358cc46b629ea01f22db60b351f703e00597" + integrity sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ== + +stylelint-config-standard-scss@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/stylelint-config-standard-scss/-/stylelint-config-standard-scss-11.1.0.tgz#53c2fb9423ed89c0921aa83479892a912cc1ca15" + integrity sha512-5gnBgeNTgRVdchMwiFQPuBOtj9QefYtfXiddrOMJA2pI22zxt6ddI2s+e5Oh7/6QYl7QLJujGnaUR5YyGq72ow== + dependencies: + stylelint-config-recommended-scss "^13.1.0" + stylelint-config-standard "^34.0.0" + +stylelint-config-standard@^34.0.0: + version "34.0.0" + resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-34.0.0.tgz#309f3c48118a02aae262230c174282e40e766cf4" + integrity sha512-u0VSZnVyW9VSryBG2LSO+OQTjN7zF9XJaAJRX/4EwkmU0R2jYwmBSN10acqZisDitS0CLiEiGjX7+Hrq8TAhfQ== + dependencies: + stylelint-config-recommended "^13.0.0" + +stylelint-scss@^5.3.0: + version "5.3.2" + resolved "https://registry.yarnpkg.com/stylelint-scss/-/stylelint-scss-5.3.2.tgz#c54564dfbd98de0c08742b9c43025cda91acf940" + integrity sha512-4LzLaayFhFyneJwLo0IUa8knuIvj+zF0vBFueQs4e3tEaAMIQX8q5th8ziKkgOavr6y/y9yoBe+RXN/edwLzsQ== + dependencies: + known-css-properties "^0.29.0" + postcss-media-query-parser "^0.2.3" + postcss-resolve-nested-selector "^0.1.1" + postcss-selector-parser "^6.0.13" + postcss-value-parser "^4.2.0" + +stylelint@^15.10.2: + version "15.11.0" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-15.11.0.tgz#3ff8466f5f5c47362bc7c8c9d382741c58bc3292" + integrity sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw== + dependencies: + "@csstools/css-parser-algorithms" "^2.3.1" + "@csstools/css-tokenizer" "^2.2.0" + "@csstools/media-query-list-parser" "^2.1.4" + "@csstools/selector-specificity" "^3.0.0" + balanced-match "^2.0.0" + colord "^2.9.3" + cosmiconfig "^8.2.0" + css-functions-list "^3.2.1" + css-tree "^2.3.1" + debug "^4.3.4" + fast-glob "^3.3.1" + fastest-levenshtein "^1.0.16" + file-entry-cache "^7.0.0" + global-modules "^2.0.0" + globby "^11.1.0" + globjoin "^0.1.4" + html-tags "^3.3.1" + ignore "^5.2.4" + import-lazy "^4.0.0" + imurmurhash "^0.1.4" + is-plain-object "^5.0.0" + known-css-properties "^0.29.0" + mathml-tag-names "^2.1.3" + meow "^10.1.5" + micromatch "^4.0.5" + normalize-path "^3.0.0" + picocolors "^1.0.0" + postcss "^8.4.28" + postcss-resolve-nested-selector "^0.1.1" + postcss-safe-parser "^6.0.0" + postcss-selector-parser "^6.0.13" + postcss-value-parser "^4.2.0" + resolve-from "^5.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + style-search "^0.1.0" + supports-hyperlinks "^3.0.0" + svg-tags "^1.0.0" + table "^6.8.1" + write-file-atomic "^5.0.1" + +stylis@^4.3.3: + version "4.3.4" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.3.4.tgz#ca5c6c4a35c4784e4e93a2a24dc4e9fa075250a4" + integrity sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now== + +supports-color@^5.3.0, supports-color@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-3.1.0.tgz#b56150ff0173baacc15f21956450b61f2b18d3ac" + integrity sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +svg-tags@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" + integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA== + +svg.draggable.js@2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz#c514a2f1405efb6f0263e7958f5b68fce50603ba" + integrity sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw== + dependencies: + svg.js "^2.0.1" + +svg.draw.js@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/svg.draw.js/-/svg.draw.js-2.0.4.tgz#47b7799f3615e157c5c90d4dd366275475c47029" + integrity sha512-NMbecB0vg11AP76B0aLfI2cX7g9WurPM8x3yKxuJ9feM1vkI1GVjWZZjWpo3mkEzB1UJ8pKngaPaUCIOGi8uUA== + dependencies: + svg.js "2.x.x" + +svg.js@2.7.1, svg.js@2.x.x, svg.js@^2.0.1, svg.js@^2.2.5, svg.js@^2.6.5: + version "2.7.1" + resolved "https://registry.yarnpkg.com/svg.js/-/svg.js-2.7.1.tgz#eb977ed4737001eab859949b4a398ee1bb79948d" + integrity sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA== + +svg.resize.js@1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/svg.resize.js/-/svg.resize.js-1.4.3.tgz#885abd248e0cd205b36b973c4b578b9a36f23332" + integrity sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw== + dependencies: + svg.js "^2.6.5" + svg.select.js "^2.1.2" + +svg.select.js@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/svg.select.js/-/svg.select.js-3.0.1.tgz#a4198e359f3825739226415f82176a90ea5cc917" + integrity sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw== + dependencies: + svg.js "^2.6.5" + +svg.select.js@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/svg.select.js/-/svg.select.js-2.1.2.tgz#e41ce13b1acff43a7441f9f8be87a2319c87be73" + integrity sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ== + dependencies: + svg.js "^2.2.5" + +svgo@^1.2.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== + dependencies: + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.37" + csso "^4.0.2" + js-yaml "^3.13.1" + mkdirp "~0.5.1" + object.values "^1.1.0" + sax "~1.2.4" + stable "^0.1.8" + unquote "~1.1.1" + util.promisify "~1.0.0" + +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +table@^6.8.1: + version "6.8.2" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.2.tgz#c5504ccf201213fa227248bdc8c5569716ac6c58" + integrity sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA== + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +tar@^6.1.11: + version "6.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" + integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^5.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +terser-webpack-plugin@^5.3.10: + version "5.3.10" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" + integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== + dependencies: + "@jridgewell/trace-mapping" "^0.3.20" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.1" + terser "^5.26.0" + +terser@^5.10.0, terser@^5.26.0: + version "5.31.6" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.6.tgz#c63858a0f0703988d0266a82fcbf2d7ba76422b1" + integrity sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" + commander "^2.20.0" + source-map-support "~0.5.20" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +three@^0.156.1: + version "0.156.1" + resolved "https://registry.yarnpkg.com/three/-/three-0.156.1.tgz#bab4fec121a5b3975eb4f4d227d9c912171eb399" + integrity sha512-kP7H0FK9d/k6t/XvQ9FO6i+QrePoDcNhwl0I02+wmUJRNSLCUIDMcfObnzQvxb37/0Uc9TDT0T1HgsRRrO6SYQ== + +throttle-debounce@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-5.0.2.tgz#ec5549d84e053f043c9fd0f2a6dd892ff84456b1" + integrity sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A== + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +tiny-invariant@^1.0.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" + integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== + +tiny-warning@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + +tinycolor2@^1.4.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.6.0.tgz#f98007460169b0263b97072c5ae92484ce02d09e" + integrity sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw== + +tinyqueue@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/tinyqueue/-/tinyqueue-2.0.3.tgz#64d8492ebf39e7801d7bd34062e29b45b2035f08" + integrity sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA== + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-vfile@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/to-vfile/-/to-vfile-6.1.0.tgz#5f7a3f65813c2c4e34ee1f7643a5646344627699" + integrity sha512-BxX8EkCxOAZe+D/ToHdDsJcVI4HqQfmw0tCkp31zf3dNP/XWIAjU4CmeuSwsSoOzOTqHPOL0KUzyZqJplkD0Qw== + dependencies: + is-buffer "^2.0.0" + vfile "^4.0.0" + +toggle-selection@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" + integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +touch@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.1.tgz#097a23d7b161476435e5c1344a95c0f75b4a5694" + integrity sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA== + +tough-cookie@^4.0.0, tough-cookie@^4.1.2: + version "4.1.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" + integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.2.0" + url-parse "^1.5.3" + +tr46@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" + integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== + dependencies: + punycode "^2.1.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +trim-lines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" + integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== + +trim-newlines@^4.0.2: + version "4.1.1" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-4.1.1.tgz#28c88deb50ed10c7ba6dc2474421904a00139125" + integrity sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ== + +trough@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" + integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== + +trough@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" + integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== + +ts-api-utils@^1.0.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" + integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== + +tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.3, tslib@^2.4.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +tus-js-client@^3.0.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/tus-js-client/-/tus-js-client-3.1.3.tgz#bac62c14c770ba71492072179b55292baa19a074" + integrity sha512-n9k6rI/nPOuP2TaqPG6Ogz3a3V1cSH9en7N0VH4gh95jmG8JA58TJzLms2lBfb7aKVb3fdUunqYEG3WnQnZRvQ== + dependencies: + buffer-from "^1.1.2" + combine-errors "^3.0.3" + is-stream "^2.0.0" + js-base64 "^3.7.2" + lodash.throttle "^4.1.1" + proper-lockfile "^4.1.2" + url-parse "^1.5.7" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" + integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== + +type-fest@^0.8.0: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-fest@^1.0.1, type-fest@^1.0.2, type-fest@^1.2.1, type-fest@^1.2.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" + integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typed-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" + +typed-array-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-byte-offset@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" + integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-length@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" + integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + +typescript@5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.2.tgz#891e1a90c5189d8506af64b9ef929fca99ba1ee5" + integrity sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw== + +typescript@>=3.0.1: + version "5.5.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" + integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +undefsafe@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" + integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +undici-types@~6.19.2: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== + +unified-args@^8.0.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/unified-args/-/unified-args-8.1.0.tgz#a27dbe996a49fbbf3d9f5c6a98008ab9b0ee6ae5" + integrity sha512-t1HPS1cQPsVvt/6EtyWIbQGurza5684WGRigNghZRvzIdHm3LPgMdXPyGx0npORKzdiy5+urkF0rF5SXM8lBuQ== + dependencies: + camelcase "^5.0.0" + chalk "^3.0.0" + chokidar "^3.0.0" + fault "^1.0.2" + json5 "^2.0.0" + minimist "^1.2.0" + text-table "^0.2.0" + unified-engine "^8.0.0" + +unified-engine@^8.0.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/unified-engine/-/unified-engine-8.2.0.tgz#217ee94ebaa709395531b9896d0c71e3c3d51350" + integrity sha512-ZlMm62ejrf+tJHdyOjQfljszngQjRor95q2XZMGk6rpJUYi7ZIHY/EXEhOcj9PZkMKKdLIM+dqL4s0ceyk9wbA== + dependencies: + concat-stream "^2.0.0" + debug "^4.0.0" + fault "^1.0.0" + figures "^3.0.0" + glob "^7.0.3" + ignore "^5.0.0" + is-buffer "^2.0.0" + is-empty "^1.0.0" + is-plain-obj "^2.0.0" + js-yaml "^3.6.1" + load-plugin "^3.0.0" + parse-json "^5.0.0" + to-vfile "^6.0.0" + trough "^1.0.0" + unist-util-inspect "^5.0.0" + vfile-reporter "^6.0.0" + vfile-statistics "^1.1.0" + +unified-lint-rule@^1.0.0, unified-lint-rule@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz#b4ab801ff93c251faa917a8d1c10241af030de84" + integrity sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg== + dependencies: + wrapped "^1.0.1" + +unified-message-control@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/unified-message-control/-/unified-message-control-3.0.3.tgz#d08c4564092a507668de71451a33c0d80e734bbd" + integrity sha512-oY5z2n8ugjpNHXOmcgrw0pQeJzavHS0VjPBP21tOcm7rc2C+5Q+kW9j5+gqtf8vfW/8sabbsK5+P+9QPwwEHDA== + dependencies: + unist-util-visit "^2.0.0" + vfile-location "^3.0.0" + +unified@^10.0.0, unified@^10.1.2, unified@~10.1.1: + version "10.1.2" + resolved "https://registry.yarnpkg.com/unified/-/unified-10.1.2.tgz#b1d64e55dafe1f0b98bb6c719881103ecf6c86df" + integrity sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q== + dependencies: + "@types/unist" "^2.0.0" + bail "^2.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^4.0.0" + trough "^2.0.0" + vfile "^5.0.0" + +unified@^9.1.0: + version "9.2.2" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.2.tgz#67649a1abfc3ab85d2969502902775eb03146975" + integrity sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + +unist-util-filter@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/unist-util-filter/-/unist-util-filter-4.0.1.tgz#fd885dd48adaad345de5f5dc706ec4ff44a8d074" + integrity sha512-RynicUM/vbOSTSiUK+BnaK9XMfmQUh6gyi7L6taNgc7FIf84GukXVV3ucGzEN/PhUUkdP5hb1MmXc+3cvPUm5Q== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^5.0.0" + unist-util-visit-parents "^5.0.0" + +unist-util-generated@^1.0.0, unist-util-generated@^1.1.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.6.tgz#5ab51f689e2992a472beb1b35f2ce7ff2f324d4b" + integrity sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg== + +unist-util-generated@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-2.0.1.tgz#e37c50af35d3ed185ac6ceacb6ca0afb28a85cae" + integrity sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A== + +unist-util-inspect@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/unist-util-inspect/-/unist-util-inspect-5.0.1.tgz#168c8770a99902318ca268f8c391e294bcf44540" + integrity sha512-fPNWewS593JSmg49HbnE86BJKuBi1/nMWhDSccBvbARfxezEuJV85EaARR9/VplveiwCoLm2kWq+DhP8TBaDpw== + dependencies: + is-empty "^1.0.0" + +unist-util-is@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797" + integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== + +unist-util-is@^5.0.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-5.2.1.tgz#b74960e145c18dcb6226bc57933597f5486deae9" + integrity sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw== + dependencies: + "@types/unist" "^2.0.0" + +unist-util-position@^3.0.0, unist-util-position@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47" + integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA== + +unist-util-position@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-4.0.4.tgz#93f6d8c7d6b373d9b825844645877c127455f037" + integrity sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg== + dependencies: + "@types/unist" "^2.0.0" + +unist-util-stringify-position@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" + integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== + dependencies: + "@types/unist" "^2.0.2" + +unist-util-stringify-position@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz#03ad3348210c2d930772d64b489580c13a7db39d" + integrity sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg== + dependencies: + "@types/unist" "^2.0.0" + +unist-util-visit-parents@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6" + integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + +unist-util-visit-parents@^5.0.0, unist-util-visit-parents@^5.1.1: + version "5.1.3" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz#b4520811b0ca34285633785045df7a8d6776cfeb" + integrity sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^5.0.0" + +unist-util-visit@^2.0.0, unist-util-visit@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" + integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + unist-util-visit-parents "^3.0.0" + +unist-util-visit@^4.0.0, unist-util-visit@^4.1.0, unist-util-visit@^4.1.2, unist-util-visit@~4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-4.1.2.tgz#125a42d1eb876283715a3cb5cceaa531828c72e2" + integrity sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^5.0.0" + unist-util-visit-parents "^5.1.1" + +universal-cookie@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/universal-cookie/-/universal-cookie-4.0.4.tgz#06e8b3625bf9af049569ef97109b4bb226ad798d" + integrity sha512-lbRVHoOMtItjWbM7TwDLdl8wug7izB0tq3/YVKhT/ahB4VDvWMyvnADfnJI8y6fSvsjh51Ix7lTGC6Tn4rMPhw== + dependencies: + "@types/cookie" "^0.3.3" + cookie "^0.4.0" + +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg== + +update-browserslist-db@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" + integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ== + dependencies: + escalade "^3.1.2" + picocolors "^1.0.1" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== + dependencies: + prepend-http "^2.0.0" + +url-parse@^1.5.3, url-parse@^1.5.7: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +use-sync-external-store@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz#c3b6390f3a30eba13200d2302dcdf1e7b57b2ef9" + integrity sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw== + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +util.promisify@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +uvu@^0.5.0: + version "0.5.6" + resolved "https://registry.yarnpkg.com/uvu/-/uvu-0.5.6.tgz#2754ca20bcb0bb59b64e9985e84d2e81058502df" + integrity sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA== + dependencies: + dequal "^2.0.0" + diff "^5.0.0" + kleur "^4.0.3" + sade "^1.7.3" + +v8-to-istanbul@^9.0.1: + version "9.3.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175" + integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^2.0.0" + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +value-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" + integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +vfile-location@^3.0.0, vfile-location@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.2.0.tgz#d8e41fbcbd406063669ebf6c33d56ae8721d0f3c" + integrity sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA== + +vfile-location@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-4.1.0.tgz#69df82fb9ef0a38d0d02b90dd84620e120050dd0" + integrity sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw== + dependencies: + "@types/unist" "^2.0.0" + vfile "^5.0.0" + +vfile-message@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" + integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== + dependencies: + "@types/unist" "^2.0.0" + unist-util-stringify-position "^2.0.0" + +vfile-message@^3.0.0: + version "3.1.4" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-3.1.4.tgz#15a50816ae7d7c2d1fa87090a7f9f96612b59dea" + integrity sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw== + dependencies: + "@types/unist" "^2.0.0" + unist-util-stringify-position "^3.0.0" + +vfile-reporter-json@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/vfile-reporter-json/-/vfile-reporter-json-2.0.2.tgz#c2e4e5b92bcb70f65c5a93f1ad3a08ef60b94606" + integrity sha512-L9s5WLxOFCygydfGAaItZtgd2eQi/HVgo0ChYVbm02EnFMzybr3PZYUCmSqcCWMKWCX5FLjvSwjkSVS47Eph6g== + +vfile-reporter@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/vfile-reporter/-/vfile-reporter-6.0.2.tgz#cbddaea2eec560f27574ce7b7b269822c191a676" + integrity sha512-GN2bH2gs4eLnw/4jPSgfBjo+XCuvnX9elHICJZjVD4+NM0nsUrMTvdjGY5Sc/XG69XVTgLwj7hknQVc6M9FukA== + dependencies: + repeat-string "^1.5.0" + string-width "^4.0.0" + supports-color "^6.0.0" + unist-util-stringify-position "^2.0.0" + vfile-sort "^2.1.2" + vfile-statistics "^1.1.0" + +vfile-sort@^2.1.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/vfile-sort/-/vfile-sort-2.2.2.tgz#720fe067ce156aba0b411a01bb0dc65596aa1190" + integrity sha512-tAyUqD2R1l/7Rn7ixdGkhXLD3zsg+XLAeUDUhXearjfIcpL1Hcsj5hHpCoy/gvfK/Ws61+e972fm0F7up7hfYA== + +vfile-statistics@^1.1.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/vfile-statistics/-/vfile-statistics-1.1.4.tgz#b99fd15ecf0f44ba088cc973425d666cb7a9f245" + integrity sha512-lXhElVO0Rq3frgPvFBwahmed3X03vjPF8OcjKMy8+F1xU/3Q3QU3tKEDp743SFtb74PdF0UWpxPvtOP0GCLheA== + +vfile@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624" + integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA== + dependencies: + "@types/unist" "^2.0.0" + is-buffer "^2.0.0" + unist-util-stringify-position "^2.0.0" + vfile-message "^2.0.0" + +vfile@^5.0.0: + version "5.3.7" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-5.3.7.tgz#de0677e6683e3380fafc46544cfe603118826ab7" + integrity sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g== + dependencies: + "@types/unist" "^2.0.0" + is-buffer "^2.0.0" + unist-util-stringify-position "^3.0.0" + vfile-message "^3.0.0" + +w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz#06cdc3eefb7e4d0b20a560a5a3aeb0d2d9a65923" + integrity sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg== + dependencies: + xml-name-validator "^4.0.0" + +w3c-xmlserializer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" + integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw== + dependencies: + xml-name-validator "^4.0.0" + +walker@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +warning@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== + dependencies: + loose-envify "^1.0.0" + +watchpack@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.2.tgz#2feeaed67412e7c33184e5a79ca738fbd38564da" + integrity sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +web-namespaces@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692" + integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +webidl-conversions@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== + +webpack-cli@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.4.tgz#c8e046ba7eaae4911d7e71e2b25b776fcc35759b" + integrity sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg== + dependencies: + "@discoveryjs/json-ext" "^0.5.0" + "@webpack-cli/configtest" "^2.1.1" + "@webpack-cli/info" "^2.0.2" + "@webpack-cli/serve" "^2.0.5" + colorette "^2.0.14" + commander "^10.0.1" + cross-spawn "^7.0.3" + envinfo "^7.7.3" + fastest-levenshtein "^1.0.12" + import-local "^3.0.2" + interpret "^3.1.1" + rechoir "^0.8.0" + webpack-merge "^5.7.3" + +webpack-dev-middleware@^5.3.1: + version "5.3.4" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz#eb7b39281cbce10e104eb2b8bf2b63fce49a3517" + integrity sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q== + dependencies: + colorette "^2.0.10" + memfs "^3.4.3" + mime-types "^2.1.31" + range-parser "^1.2.1" + schema-utils "^4.0.0" + +webpack-dev-server@4.15.1: + version "4.15.1" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz#8944b29c12760b3a45bdaa70799b17cb91b03df7" + integrity sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA== + dependencies: + "@types/bonjour" "^3.5.9" + "@types/connect-history-api-fallback" "^1.3.5" + "@types/express" "^4.17.13" + "@types/serve-index" "^1.9.1" + "@types/serve-static" "^1.13.10" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.5.5" + ansi-html-community "^0.0.8" + bonjour-service "^1.0.11" + chokidar "^3.5.3" + colorette "^2.0.10" + compression "^1.7.4" + connect-history-api-fallback "^2.0.0" + default-gateway "^6.0.3" + express "^4.17.3" + graceful-fs "^4.2.6" + html-entities "^2.3.2" + http-proxy-middleware "^2.0.3" + ipaddr.js "^2.0.1" + launch-editor "^2.6.0" + open "^8.0.9" + p-retry "^4.5.0" + rimraf "^3.0.2" + schema-utils "^4.0.0" + selfsigned "^2.1.1" + serve-index "^1.9.1" + sockjs "^0.3.24" + spdy "^4.0.2" + webpack-dev-middleware "^5.3.1" + ws "^8.13.0" + +webpack-merge@^5.7.3: + version "5.10.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.10.0.tgz#a3ad5d773241e9c682803abf628d4cd62b8a4177" + integrity sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA== + dependencies: + clone-deep "^4.0.1" + flat "^5.0.2" + wildcard "^2.0.0" + +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack@^5.94.0: + version "5.94.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.94.0.tgz#77a6089c716e7ab90c1c67574a28da518a20970f" + integrity sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg== + dependencies: + "@types/estree" "^1.0.5" + "@webassemblyjs/ast" "^1.12.1" + "@webassemblyjs/wasm-edit" "^1.12.1" + "@webassemblyjs/wasm-parser" "^1.12.1" + acorn "^8.7.1" + acorn-import-attributes "^1.9.5" + browserslist "^4.21.10" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.17.1" + es-module-lexer "^1.2.1" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.11" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.2.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.3.10" + watchpack "^2.4.1" + webpack-sources "^3.2.3" + +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +whatwg-encoding@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" + integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== + dependencies: + iconv-lite "0.6.3" + +whatwg-mimetype@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" + integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== + +whatwg-url@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-10.0.0.tgz#37264f720b575b4a311bd4094ed8c760caaa05da" + integrity sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w== + dependencies: + tr46 "^3.0.0" + webidl-conversions "^7.0.0" + +whatwg-url@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" + integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== + dependencies: + tr46 "^3.0.0" + webidl-conversions "^7.0.0" + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-builtin-type@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.4.tgz#592796260602fc3514a1b5ee7fa29319b72380c3" + integrity sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w== + dependencies: + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" + is-async-function "^2.0.0" + is-date-object "^1.0.5" + is-finalizationregistry "^1.0.2" + is-generator-function "^1.0.10" + is-regex "^1.1.4" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.2" + which-typed-array "^1.1.15" + +which-collection@^1.0.1, which-collection@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== + dependencies: + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" + +which-module@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" + integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== + +which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.15: + version "1.1.15" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" + integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.2" + +which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +wildcard@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" + integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== + +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrapped@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wrapped/-/wrapped-1.0.1.tgz#c783d9d807b273e9b01e851680a938c87c907242" + integrity sha512-ZTKuqiTu3WXtL72UKCCnQLRax2IScKH7oQ+mvjbpvNE+NJxIWIemDqqM2GxNr4N16NCjOYpIgpin5pStM7kM5g== + dependencies: + co "3.1.0" + sliced "^1.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + +write-file-atomic@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" + integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^4.0.1" + +ws@^8.11.0, ws@^8.13.0, ws@^8.2.3: + version "8.18.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== + +xml-name-validator@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" + integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== + +xml@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5" + integrity sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" + integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== + +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^20.2.9: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^15.0.2: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + +yargs@^17.2.1, yargs@^17.3.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zwitch@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920" + integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw== + +zwitch@^2.0.0, zwitch@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" + integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A== From 2c3e30127d4207e1d35f97b013f525b80d35e800 Mon Sep 17 00:00:00 2001 From: Boris Sekachev Date: Tue, 3 Sep 2024 13:13:57 +0300 Subject: [PATCH 56/79] Updated yarn --- yarn.lock | 2832 ++++++++++++++++++++++++++--------------------------- 1 file changed, 1387 insertions(+), 1445 deletions(-) diff --git a/yarn.lock b/yarn.lock index 884ddbadde6..d27570bfa21 100644 --- a/yarn.lock +++ b/yarn.lock @@ -18,16 +18,16 @@ "@ctrl/tinycolor" "^3.4.0" "@ant-design/colors@^7.0.0", "@ant-design/colors@^7.0.2": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@ant-design/colors/-/colors-7.1.0.tgz#60eadfa2e21871d8948dac5d50b9f056062f8af3" - integrity sha512-MMoDGWn1y9LdQJQSHiCC20x3uZ3CwQnv9QMz6pCmJOrqdgM9YxsoVVY0wtrdXbmfSgnV0KNk6zi09NAhMR2jvg== + version "7.0.2" + resolved "https://registry.yarnpkg.com/@ant-design/colors/-/colors-7.0.2.tgz#c5c753a467ce8d86ba7ca4736d2c01f599bb5492" + integrity sha512-7KJkhTiPiLHSu+LmMJnehfJ6242OCxSlR3xHVBecYxnMW8MS/878NXct1GqYARyL59fyeFdKRxXTfvR9SnDgJg== dependencies: "@ctrl/tinycolor" "^3.6.1" "@ant-design/compatible@^5.1.2": - version "5.1.3" - resolved "https://registry.yarnpkg.com/@ant-design/compatible/-/compatible-5.1.3.tgz#5ede26392defae43f54e19f604fdb44eb9859816" - integrity sha512-uLvjwENnpY/1gxYb5m8L2k+WmBpBHqH45fO76+4J+WUDKTUKpmwbEW3OG/in2mSO2HI6h3Mcp57+tAMr18ZkgQ== + version "5.1.2" + resolved "https://registry.yarnpkg.com/@ant-design/compatible/-/compatible-5.1.2.tgz#af6ae0a32466440e3719bb8c1118ae14f5950044" + integrity sha512-PcNV6hCrlx1JnKBjC148BjJNM3XLVSEER422SOk/HRVD8rm8ZovItlZrQOoO3WH5L4jqwj5gxQap2cqSnmQaTg== dependencies: classnames "^2.2.6" dayjs "^1.11.4" @@ -43,9 +43,9 @@ integrity sha512-LrX0OGZtW+W6iLnTAqnTaoIsRelYeuLZWsrmBJFUXDALQphPsN8cE5DCsmoSlL0QYb94BQxINiuS70Ar/8BNgA== "@ant-design/cssinjs@^1.19.1": - version "1.21.1" - resolved "https://registry.yarnpkg.com/@ant-design/cssinjs/-/cssinjs-1.21.1.tgz#7320813c5f747e0cde52c388eff5198d78d57230" - integrity sha512-tyWnlK+XH7Bumd0byfbCiZNK43HEubMoCcu9VxwsAwiHdHTgWa+tMN0/yvxa+e8EzuFP1WdUNNPclRpVtD33lg== + version "1.20.0" + resolved "https://registry.yarnpkg.com/@ant-design/cssinjs/-/cssinjs-1.20.0.tgz#878bc6c5b08f73db76da54c347a7ebb3fa4858bb" + integrity sha512-uG3iWzJxgNkADdZmc6W0Ci3iQAUOvLMcM8SnnmWq3r6JeocACft4ChnY/YWvI2Y+rG/68QBla/O+udke1yH3vg== dependencies: "@babel/runtime" "^7.11.1" "@emotion/hash" "^0.8.0" @@ -53,7 +53,7 @@ classnames "^2.3.1" csstype "^3.1.3" rc-util "^5.35.0" - stylis "^4.3.3" + stylis "^4.0.13" "@ant-design/icons-svg@^4.3.0", "@ant-design/icons-svg@^4.4.0": version "4.4.2" @@ -73,13 +73,13 @@ rc-util "^5.9.4" "@ant-design/icons@^5.3.7": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ant-design/icons/-/icons-5.4.0.tgz#4bd8f335c68207cc06fe9943d164a81cdfcfbeac" - integrity sha512-QZbWC5xQYexCI5q4/fehSEkchJr5UGtvAJweT743qKUQQGs9IH2DehNLP49DJ3Ii9m9CijD2HN6fNy3WKhIFdA== + version "5.3.7" + resolved "https://registry.yarnpkg.com/@ant-design/icons/-/icons-5.3.7.tgz#d9f3654bf7934ee5faba43f91b5a187f5309ec68" + integrity sha512-bCPXTAg66f5bdccM4TT21SQBDO1Ek2gho9h3nO9DAKXJP4sq+5VBjrQMSxMVXSB3HyEz+cUbHQ5+6ogxCOpaew== dependencies: "@ant-design/colors" "^7.0.0" "@ant-design/icons-svg" "^4.4.0" - "@babel/runtime" "^7.24.8" + "@babel/runtime" "^7.11.2" classnames "^2.2.6" rc-util "^5.31.1" @@ -95,12 +95,12 @@ throttle-debounce "^5.0.0" "@babel/cli@^7.13.16": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.25.6.tgz#bc35561adc78ade43ac9c09a690768493ab9ed95" - integrity sha512-Z+Doemr4VtvSD2SNHTrkiFZ1LX+JI6tyRXAAOb4N9khIuPyoEPmTPJarPm8ljJV1D6bnMQjyHMWTT9NeKbQuXA== + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.24.5.tgz#9eba21699f289c32e63a28aedf82f888dc134b30" + integrity sha512-2qg1mYtJRsOOWF6IUwLP5jI42P8Cc0hQ5TmnjLrik/4DKouO8dFJN80HEz81VmVeUs97yuuf3vQ/9j7Elrcjlg== dependencies: "@jridgewell/trace-mapping" "^0.3.25" - commander "^6.2.0" + commander "^4.0.1" convert-source-map "^2.0.0" fs-readdir-recursive "^1.1.0" glob "^7.2.0" @@ -108,36 +108,36 @@ slash "^2.0.0" optionalDependencies: "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.3" - chokidar "^3.6.0" + chokidar "^3.4.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" - integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.2": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" + integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== dependencies: - "@babel/highlight" "^7.24.7" + "@babel/highlight" "^7.24.2" picocolors "^1.0.0" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.2", "@babel/compat-data@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.4.tgz#7d2a80ce229890edcf4cc259d4d696cb4dae2fcb" - integrity sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.5", "@babel/compat-data@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.4.tgz#6f102372e9094f25d908ca0d34fc74c74606059a" + integrity sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ== "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9", "@babel/core@^7.4.5", "@babel/core@^7.6.0", "@babel/core@^7.7.5": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.25.2.tgz#ed8eec275118d7613e77a352894cd12ded8eba77" - integrity sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA== + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.5.tgz#15ab5b98e101972d171aeef92ac70d8d6718f06a" + integrity sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.25.0" - "@babel/helper-compilation-targets" "^7.25.2" - "@babel/helper-module-transforms" "^7.25.2" - "@babel/helpers" "^7.25.0" - "@babel/parser" "^7.25.0" - "@babel/template" "^7.25.0" - "@babel/traverse" "^7.25.2" - "@babel/types" "^7.25.2" + "@babel/code-frame" "^7.24.2" + "@babel/generator" "^7.24.5" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.24.5" + "@babel/helpers" "^7.24.5" + "@babel/parser" "^7.24.5" + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.5" + "@babel/types" "^7.24.5" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -145,73 +145,74 @@ semver "^6.3.1" "@babel/eslint-parser@^7.23.3": - version "7.25.1" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.25.1.tgz#469cee4bd18a88ff3edbdfbd227bd20e82aa9b82" - integrity sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg== + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.24.5.tgz#3b0f7d383a540329a30a6a9937cfc89461d26217" + integrity sha512-gsUcqS/fPlgAw1kOtpss7uhY6E9SFFANQ6EFX5GTvzUwaV0+sGaZWk6xq22MOdeT9wfxyokW3ceCUvOiRtZciQ== dependencies: "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" eslint-visitor-keys "^2.1.0" semver "^6.3.1" -"@babel/generator@^7.25.0", "@babel/generator@^7.25.6", "@babel/generator@^7.7.2": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.6.tgz#0df1ad8cb32fe4d2b01d8bf437f153d19342a87c" - integrity sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw== +"@babel/generator@^7.24.5", "@babel/generator@^7.7.2": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.5.tgz#e5afc068f932f05616b66713e28d0f04e99daeb3" + integrity sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA== dependencies: - "@babel/types" "^7.25.6" + "@babel/types" "^7.24.5" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz#5373c7bc8366b12a033b4be1ac13a206c6656aab" - integrity sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg== +"@babel/helper-annotate-as-pure@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" + integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== dependencies: - "@babel/types" "^7.24.7" + "@babel/types" "^7.22.5" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz#37d66feb012024f2422b762b9b2a7cfe27c7fba3" - integrity sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" + integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" + "@babel/types" "^7.22.15" -"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.24.7", "@babel/helper-compilation-targets@^7.24.8", "@babel/helper-compilation-targets@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz#e1d9410a90974a3a5a66e84ff55ef62e3c02d06c" - integrity sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw== +"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== dependencies: - "@babel/compat-data" "^7.25.2" - "@babel/helper-validator-option" "^7.24.8" - browserslist "^4.23.1" + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.24.7", "@babel/helper-create-class-features-plugin@^7.25.0", "@babel/helper-create-class-features-plugin@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz#57eaf1af38be4224a9d9dd01ddde05b741f50e14" - integrity sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-member-expression-to-functions" "^7.24.8" - "@babel/helper-optimise-call-expression" "^7.24.7" - "@babel/helper-replace-supers" "^7.25.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/traverse" "^7.25.4" +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.24.1", "@babel/helper-create-class-features-plugin@^7.24.4", "@babel/helper-create-class-features-plugin@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.5.tgz#7d19da92c7e0cd8d11c09af2ce1b8e7512a6e723" + integrity sha512-uRc4Cv8UQWnE4NXlYTIIdM7wfFkOqlFztcC/gVXDKohKoVB3OyonfelUBaJzSwpBntZ2KYGF/9S7asCHsXwW6g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-member-expression-to-functions" "^7.24.5" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-replace-supers" "^7.24.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.24.5" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.24.7", "@babel/helper-create-regexp-features-plugin@^7.25.0", "@babel/helper-create-regexp-features-plugin@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz#24c75974ed74183797ffd5f134169316cd1808d9" - integrity sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g== +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" + integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-annotate-as-pure" "^7.22.5" regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.6.2": +"@babel/helper-define-polyfill-provider@^0.6.1", "@babel/helper-define-polyfill-provider@^0.6.2": version "0.6.2" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== @@ -222,165 +223,181 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-member-expression-to-functions@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz#6155e079c913357d24a4c20480db7c712a5c3fb6" - integrity sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA== - dependencies: - "@babel/traverse" "^7.24.8" - "@babel/types" "^7.24.8" +"@babel/helper-environment-visitor@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b" - integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-module-transforms@^7.24.7", "@babel/helper-module-transforms@^7.24.8", "@babel/helper-module-transforms@^7.25.0", "@babel/helper-module-transforms@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz#ee713c29768100f2776edf04d4eb23b8d27a66e6" - integrity sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ== - dependencies: - "@babel/helper-module-imports" "^7.24.7" - "@babel/helper-simple-access" "^7.24.7" - "@babel/helper-validator-identifier" "^7.24.7" - "@babel/traverse" "^7.25.2" - -"@babel/helper-optimise-call-expression@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz#8b0a0456c92f6b323d27cfd00d1d664e76692a0f" - integrity sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A== +"@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== dependencies: - "@babel/types" "^7.24.7" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.24.8", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz#94ee67e8ec0e5d44ea7baeb51e571bd26af07878" - integrity sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg== + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" -"@babel/helper-remap-async-to-generator@^7.24.7", "@babel/helper-remap-async-to-generator@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz#d2f0fbba059a42d68e5e378feaf181ef6055365e" - integrity sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw== +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-wrap-function" "^7.25.0" - "@babel/traverse" "^7.25.0" + "@babel/types" "^7.22.5" -"@babel/helper-replace-supers@^7.24.7", "@babel/helper-replace-supers@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz#ff44deac1c9f619523fe2ca1fd650773792000a9" - integrity sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg== +"@babel/helper-member-expression-to-functions@^7.23.0", "@babel/helper-member-expression-to-functions@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.5.tgz#5981e131d5c7003c7d1fa1ad49e86c9b097ec475" + integrity sha512-4owRteeihKWKamtqg4JmWSsEZU445xpFRXPEwp44HbgbxdWlUV1b4Agg4lkA806Lil5XM/e+FJyS0vj5T6vmcA== dependencies: - "@babel/helper-member-expression-to-functions" "^7.24.8" - "@babel/helper-optimise-call-expression" "^7.24.7" - "@babel/traverse" "^7.25.0" + "@babel/types" "^7.24.5" + +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.24.1", "@babel/helper-module-imports@^7.24.3": + version "7.24.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz#6ac476e6d168c7c23ff3ba3cf4f7841d46ac8128" + integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg== + dependencies: + "@babel/types" "^7.24.0" -"@babel/helper-simple-access@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz#bcade8da3aec8ed16b9c4953b74e506b51b5edb3" - integrity sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg== +"@babel/helper-module-transforms@^7.23.3", "@babel/helper-module-transforms@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz#ea6c5e33f7b262a0ae762fd5986355c45f54a545" + integrity sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.24.3" + "@babel/helper-simple-access" "^7.24.5" + "@babel/helper-split-export-declaration" "^7.24.5" + "@babel/helper-validator-identifier" "^7.24.5" + +"@babel/helper-optimise-call-expression@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" + integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.24.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz#a924607dd254a65695e5bd209b98b902b3b2f11a" + integrity sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ== + +"@babel/helper-remap-async-to-generator@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" + integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-wrap-function" "^7.22.20" + +"@babel/helper-replace-supers@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz#7085bd19d4a0b7ed8f405c1ed73ccb70f323abc1" + integrity sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-member-expression-to-functions" "^7.23.0" + "@babel/helper-optimise-call-expression" "^7.22.5" + +"@babel/helper-simple-access@^7.22.5", "@babel/helper-simple-access@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz#50da5b72f58c16b07fbd992810be6049478e85ba" + integrity sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ== + dependencies: + "@babel/types" "^7.24.5" + +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" + integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-split-export-declaration@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz#b9a67f06a46b0b339323617c8c6213b9055a78b6" + integrity sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q== + dependencies: + "@babel/types" "^7.24.5" + +"@babel/helper-string-parser@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e" + integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== + +"@babel/helper-validator-identifier@^7.22.20", "@babel/helper-validator-identifier@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz#918b1a7fa23056603506370089bd990d8720db62" + integrity sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA== + +"@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== + +"@babel/helper-wrap-function@^7.22.20": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.24.5.tgz#335f934c0962e2c1ed1fb9d79e06a56115067c09" + integrity sha512-/xxzuNvgRl4/HLNKvnFwdhdgN3cpLxgLROeLDl83Yx0AJ1SGvq1ak0OszTOjDfiB8Vx03eJbeDWh9r+jCCWttw== + dependencies: + "@babel/helper-function-name" "^7.23.0" + "@babel/template" "^7.24.0" + "@babel/types" "^7.24.5" + +"@babel/helpers@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.5.tgz#fedeb87eeafa62b621160402181ad8585a22a40a" + integrity sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q== dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz#5f8fa83b69ed5c27adc56044f8be2b3ea96669d9" - integrity sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-string-parser@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" - integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ== - -"@babel/helper-validator-identifier@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" - integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== - -"@babel/helper-validator-option@^7.24.7", "@babel/helper-validator-option@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz#3725cdeea8b480e86d34df15304806a06975e33d" - integrity sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q== - -"@babel/helper-wrap-function@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz#dab12f0f593d6ca48c0062c28bcfb14ebe812f81" - integrity sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ== - dependencies: - "@babel/template" "^7.25.0" - "@babel/traverse" "^7.25.0" - "@babel/types" "^7.25.0" - -"@babel/helpers@^7.25.0": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.25.6.tgz#57ee60141829ba2e102f30711ffe3afab357cc60" - integrity sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q== - dependencies: - "@babel/template" "^7.25.0" - "@babel/types" "^7.25.6" - -"@babel/highlight@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" - integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== - dependencies: - "@babel/helper-validator-identifier" "^7.24.7" + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.5" + "@babel/types" "^7.24.5" + +"@babel/highlight@^7.24.2": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.5.tgz#bc0613f98e1dd0720e99b2a9ee3760194a704b6e" + integrity sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw== + dependencies: + "@babel/helper-validator-identifier" "^7.24.5" chalk "^2.4.2" js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.25.0", "@babel/parser@^7.25.6": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.6.tgz#85660c5ef388cbbf6e3d2a694ee97a38f18afe2f" - integrity sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q== - dependencies: - "@babel/types" "^7.25.6" - -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.3": - version "7.25.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz#dca427b45a6c0f5c095a1c639dfe2476a3daba7f" - integrity sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/traverse" "^7.25.3" +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.24.0", "@babel/parser@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.5.tgz#4a4d5ab4315579e5398a82dcf636ca80c3392790" + integrity sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg== -"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz#cd0c583e01369ef51676bdb3d7b603e17d2b3f73" - integrity sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA== +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.5.tgz#4c3685eb9cd790bcad2843900fe0250c91ccf895" + integrity sha512-LdXRi1wEMTrHVR4Zc9F8OewC3vdm5h4QB6L71zy6StmYeqGi1b3ttIO8UC+BfZKcH9jdr4aI249rBkm+3+YvHw== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.24.5" -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz#749bde80356b295390954643de7635e0dffabe73" - integrity sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz#b645d9ba8c2bc5b7af50f0fe949f9edbeb07c8cf" + integrity sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz#e4eabdd5109acc399b38d7999b2ef66fc2022f89" - integrity sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz#da8261f2697f0f41b0855b91d3a20a1fbfd271d3" + integrity sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/plugin-transform-optional-chaining" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.24.1" -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz#3a82a70e7cb7294ad2559465ebcb871dfbf078fb" - integrity sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz#1181d9685984c91d657b8ddf14f0487a6bab2988" + integrity sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/traverse" "^7.25.0" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-proposal-class-properties@^7.8.3": version "7.18.6" @@ -418,7 +435,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-class-properties@^7.12.13": +"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== @@ -446,21 +463,21 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-import-assertions@^7.24.7": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.6.tgz#bb918905c58711b86f9710d74a3744b6c56573b5" - integrity sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ== +"@babel/plugin-syntax-import-assertions@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz#db3aad724153a00eaac115a3fb898de544e34971" + integrity sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-syntax-import-attributes@^7.24.7": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz#6d4c78f042db0e82fd6436cd65fec5dc78ad2bde" - integrity sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ== +"@babel/plugin-syntax-import-attributes@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz#c66b966c63b714c4eec508fcf5763b1f2d381093" + integrity sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-syntax-import-meta@^7.10.4": +"@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== @@ -474,14 +491,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.2.0", "@babel/plugin-syntax-jsx@^7.24.7", "@babel/plugin-syntax-jsx@^7.7.2": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz#39a1fa4a7e3d3d7f34e2acc6be585b718d30e02d" - integrity sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ== +"@babel/plugin-syntax-jsx@^7.2.0", "@babel/plugin-syntax-jsx@^7.23.3", "@babel/plugin-syntax-jsx@^7.24.1", "@babel/plugin-syntax-jsx@^7.7.2": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz#3f6ca04b8c841811dbc3c5c5f837934e0d626c10" + integrity sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== @@ -495,7 +512,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.10.4": +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== @@ -530,19 +547,19 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-top-level-await@^7.14.5": +"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.24.7", "@babel/plugin-syntax-typescript@^7.7.2": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz#04db9ce5a9043d9c635e75ae7969a2cd50ca97ff" - integrity sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg== +"@babel/plugin-syntax-typescript@^7.24.1", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz#b3bcc51f396d15f3591683f90239de143c076844" + integrity sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" @@ -552,465 +569,457 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz#4f6886c11e423bd69f3ce51dbf42424a5f275514" - integrity sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ== +"@babel/plugin-transform-arrow-functions@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz#2bf263617060c9cc45bcdbf492b8cc805082bf27" + integrity sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-async-generator-functions@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz#2afd4e639e2d055776c9f091b6c0c180ed8cf083" - integrity sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg== +"@babel/plugin-transform-async-generator-functions@^7.24.3": + version "7.24.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz#8fa7ae481b100768cc9842c8617808c5352b8b89" + integrity sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-remap-async-to-generator" "^7.25.0" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-remap-async-to-generator" "^7.22.20" "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/traverse" "^7.25.4" -"@babel/plugin-transform-async-to-generator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz#72a3af6c451d575842a7e9b5a02863414355bdcc" - integrity sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA== +"@babel/plugin-transform-async-to-generator@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz#0e220703b89f2216800ce7b1c53cb0cf521c37f4" + integrity sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw== dependencies: - "@babel/helper-module-imports" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-remap-async-to-generator" "^7.24.7" + "@babel/helper-module-imports" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-remap-async-to-generator" "^7.22.20" -"@babel/plugin-transform-block-scoped-functions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz#a4251d98ea0c0f399dafe1a35801eaba455bbf1f" - integrity sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ== +"@babel/plugin-transform-block-scoped-functions@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz#1c94799e20fcd5c4d4589523bbc57b7692979380" + integrity sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-block-scoping@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz#23a6ed92e6b006d26b1869b1c91d1b917c2ea2ac" - integrity sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ== +"@babel/plugin-transform-block-scoping@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.5.tgz#89574191397f85661d6f748d4b89ee4d9ee69a2a" + integrity sha512-sMfBc3OxghjC95BkYrYocHL3NaOplrcaunblzwXhGmlPwpmfsxr4vK+mBBt49r+S240vahmv+kUxkeKgs+haCw== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.5" -"@babel/plugin-transform-class-properties@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz#bae7dbfcdcc2e8667355cd1fb5eda298f05189fd" - integrity sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g== +"@babel/plugin-transform-class-properties@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz#bcbf1aef6ba6085cfddec9fc8d58871cf011fc29" + integrity sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g== dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.4" - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-create-class-features-plugin" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-class-static-block@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz#c82027ebb7010bc33c116d4b5044fbbf8c05484d" - integrity sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ== +"@babel/plugin-transform-class-static-block@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz#1a4653c0cf8ac46441ec406dece6e9bc590356a4" + integrity sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-create-class-features-plugin" "^7.24.4" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz#d29dbb6a72d79f359952ad0b66d88518d65ef89a" - integrity sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-compilation-targets" "^7.25.2" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-replace-supers" "^7.25.0" - "@babel/traverse" "^7.25.4" +"@babel/plugin-transform-classes@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.5.tgz#05e04a09df49a46348299a0e24bfd7e901129339" + integrity sha512-gWkLP25DFj2dwe9Ck8uwMOpko4YsqyfZJrOmqqcegeDYEbp7rmn4U6UQZNj08UF6MaX39XenSpKRCvpDRBtZ7Q== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-plugin-utils" "^7.24.5" + "@babel/helper-replace-supers" "^7.24.1" + "@babel/helper-split-export-declaration" "^7.24.5" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz#4cab3214e80bc71fae3853238d13d097b004c707" - integrity sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ== +"@babel/plugin-transform-computed-properties@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz#bc7e787f8e021eccfb677af5f13c29a9934ed8a7" + integrity sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/template" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/template" "^7.24.0" -"@babel/plugin-transform-destructuring@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz#c828e814dbe42a2718a838c2a2e16a408e055550" - integrity sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ== +"@babel/plugin-transform-destructuring@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.5.tgz#80843ee6a520f7362686d1a97a7b53544ede453c" + integrity sha512-SZuuLyfxvsm+Ah57I/i1HVjveBENYK9ue8MJ7qkc7ndoNjqquJiElzA7f5yaAXjyW2hKojosOTAQQRX50bPSVg== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.5" -"@babel/plugin-transform-dotall-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz#5f8bf8a680f2116a7207e16288a5f974ad47a7a0" - integrity sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw== +"@babel/plugin-transform-dotall-regex@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz#d56913d2f12795cc9930801b84c6f8c47513ac13" + integrity sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-duplicate-keys@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz#dd20102897c9a2324e5adfffb67ff3610359a8ee" - integrity sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw== +"@babel/plugin-transform-duplicate-keys@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz#5347a797fe82b8d09749d10e9f5b83665adbca88" + integrity sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz#809af7e3339466b49c034c683964ee8afb3e2604" - integrity sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g== +"@babel/plugin-transform-dynamic-import@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz#2a5a49959201970dd09a5fca856cb651e44439dd" + integrity sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.0" - "@babel/helper-plugin-utils" "^7.24.8" - -"@babel/plugin-transform-dynamic-import@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz#4d8b95e3bae2b037673091aa09cd33fecd6419f4" - integrity sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-exponentiation-operator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz#b629ee22645f412024297d5245bce425c31f9b0d" - integrity sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ== +"@babel/plugin-transform-exponentiation-operator@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz#6650ebeb5bd5c012d5f5f90a26613a08162e8ba4" + integrity sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-export-namespace-from@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz#176d52d8d8ed516aeae7013ee9556d540c53f197" - integrity sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA== +"@babel/plugin-transform-export-namespace-from@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz#f033541fc036e3efb2dcb58eedafd4f6b8078acd" + integrity sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-for-of@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz#f25b33f72df1d8be76399e1b8f3f9d366eb5bc70" - integrity sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g== +"@babel/plugin-transform-for-of@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz#67448446b67ab6c091360ce3717e7d3a59e202fd" + integrity sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-function-name@^7.25.1": - version "7.25.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz#b85e773097526c1a4fc4ba27322748643f26fc37" - integrity sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA== +"@babel/plugin-transform-function-name@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz#8cba6f7730626cc4dfe4ca2fa516215a0592b361" + integrity sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA== dependencies: - "@babel/helper-compilation-targets" "^7.24.8" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/traverse" "^7.25.1" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-json-strings@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz#f3e9c37c0a373fee86e36880d45b3664cedaf73a" - integrity sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw== +"@babel/plugin-transform-json-strings@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz#08e6369b62ab3e8a7b61089151b161180c8299f7" + integrity sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-literals@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz#deb1ad14fc5490b9a65ed830e025bca849d8b5f3" - integrity sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw== +"@babel/plugin-transform-literals@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz#0a1982297af83e6b3c94972686067df588c5c096" + integrity sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-logical-assignment-operators@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz#a58fb6eda16c9dc8f9ff1c7b1ba6deb7f4694cb0" - integrity sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw== +"@babel/plugin-transform-logical-assignment-operators@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz#719d8aded1aa94b8fb34e3a785ae8518e24cfa40" + integrity sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz#3b4454fb0e302e18ba4945ba3246acb1248315df" - integrity sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw== +"@babel/plugin-transform-member-expression-literals@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz#896d23601c92f437af8b01371ad34beb75df4489" + integrity sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-modules-amd@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz#65090ed493c4a834976a3ca1cde776e6ccff32d7" - integrity sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg== +"@babel/plugin-transform-modules-amd@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz#b6d829ed15258536977e9c7cc6437814871ffa39" + integrity sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ== dependencies: - "@babel/helper-module-transforms" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-modules-commonjs@^7.24.7", "@babel/plugin-transform-modules-commonjs@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz#ab6421e564b717cb475d6fff70ae7f103536ea3c" - integrity sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA== +"@babel/plugin-transform-modules-commonjs@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz#e71ba1d0d69e049a22bf90b3867e263823d3f1b9" + integrity sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw== dependencies: - "@babel/helper-module-transforms" "^7.24.8" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-simple-access" "^7.24.7" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-modules-systemjs@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz#8f46cdc5f9e5af74f3bd019485a6cbe59685ea33" - integrity sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw== +"@babel/plugin-transform-modules-systemjs@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz#2b9625a3d4e445babac9788daec39094e6b11e3e" + integrity sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA== dependencies: - "@babel/helper-module-transforms" "^7.25.0" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-validator-identifier" "^7.24.7" - "@babel/traverse" "^7.25.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-validator-identifier" "^7.22.20" -"@babel/plugin-transform-modules-umd@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz#edd9f43ec549099620df7df24e7ba13b5c76efc8" - integrity sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A== +"@babel/plugin-transform-modules-umd@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz#69220c66653a19cf2c0872b9c762b9a48b8bebef" + integrity sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg== dependencies: - "@babel/helper-module-transforms" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-named-capturing-groups-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz#9042e9b856bc6b3688c0c2e4060e9e10b1460923" - integrity sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g== +"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" + integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-new-target@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz#31ff54c4e0555cc549d5816e4ab39241dfb6ab00" - integrity sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA== +"@babel/plugin-transform-new-target@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz#29c59988fa3d0157de1c871a28cd83096363cc34" + integrity sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-nullish-coalescing-operator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz#1de4534c590af9596f53d67f52a92f12db984120" - integrity sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ== +"@babel/plugin-transform-nullish-coalescing-operator@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz#0cd494bb97cb07d428bd651632cb9d4140513988" + integrity sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-numeric-separator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz#bea62b538c80605d8a0fac9b40f48e97efa7de63" - integrity sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA== +"@babel/plugin-transform-numeric-separator@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz#5bc019ce5b3435c1cadf37215e55e433d674d4e8" + integrity sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz#d13a2b93435aeb8a197e115221cab266ba6e55d6" - integrity sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q== +"@babel/plugin-transform-object-rest-spread@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.5.tgz#f91bbcb092ff957c54b4091c86bda8372f0b10ef" + integrity sha512-7EauQHszLGM3ay7a161tTQH7fj+3vVM/gThlz5HpFtnygTxjrlvoeq7MPVA1Vy9Q555OB8SnAOsMkLShNkkrHA== dependencies: - "@babel/helper-compilation-targets" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-plugin-utils" "^7.24.5" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.24.7" + "@babel/plugin-transform-parameters" "^7.24.5" -"@babel/plugin-transform-object-super@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz#66eeaff7830bba945dd8989b632a40c04ed625be" - integrity sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg== +"@babel/plugin-transform-object-super@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz#e71d6ab13483cca89ed95a474f542bbfc20a0520" + integrity sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-replace-supers" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-replace-supers" "^7.24.1" -"@babel/plugin-transform-optional-catch-binding@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz#00eabd883d0dd6a60c1c557548785919b6e717b4" - integrity sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA== +"@babel/plugin-transform-optional-catch-binding@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz#92a3d0efe847ba722f1a4508669b23134669e2da" + integrity sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.24.7", "@babel/plugin-transform-optional-chaining@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz#bb02a67b60ff0406085c13d104c99a835cdf365d" - integrity sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw== +"@babel/plugin-transform-optional-chaining@^7.24.1", "@babel/plugin-transform-optional-chaining@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.5.tgz#a6334bebd7f9dd3df37447880d0bd64b778e600f" + integrity sha512-xWCkmwKT+ihmA6l7SSTpk8e4qQl/274iNbSKRRS8mpqFR32ksy36+a+LWY8OXCCEefF8WFlnOHVsaDI2231wBg== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-parameters@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz#5881f0ae21018400e320fc7eb817e529d1254b68" - integrity sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA== +"@babel/plugin-transform-parameters@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.5.tgz#5c3b23f3a6b8fed090f9b98f2926896d3153cc62" + integrity sha512-9Co00MqZ2aoky+4j2jhofErthm6QVLKbpQrvz20c3CH9KQCLHyNB+t2ya4/UrRpQGR+Wrwjg9foopoeSdnHOkA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.5" -"@babel/plugin-transform-private-methods@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz#9bbefbe3649f470d681997e0b64a4b254d877242" - integrity sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw== +"@babel/plugin-transform-private-methods@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz#a0faa1ae87eff077e1e47a5ec81c3aef383dc15a" + integrity sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.4" - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-create-class-features-plugin" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-private-property-in-object@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz#4eec6bc701288c1fab5f72e6a4bbc9d67faca061" - integrity sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA== +"@babel/plugin-transform-private-property-in-object@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.5.tgz#f5d1fcad36e30c960134cb479f1ca98a5b06eda5" + integrity sha512-JM4MHZqnWR04jPMujQDTBVRnqxpLLpx2tkn7iPn+Hmsc0Gnb79yvRWOkvqFOx3Z7P7VxiRIR22c4eGSNj87OBQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.24.5" + "@babel/helper-plugin-utils" "^7.24.5" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz#f0d2ed8380dfbed949c42d4d790266525d63bbdc" - integrity sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA== +"@babel/plugin-transform-property-literals@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz#d6a9aeab96f03749f4eebeb0b6ea8e90ec958825" + integrity sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-react-display-name@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz#9caff79836803bc666bcfe210aeb6626230c293b" - integrity sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg== +"@babel/plugin-transform-react-display-name@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.1.tgz#554e3e1a25d181f040cf698b93fd289a03bfdcdb" + integrity sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-react-jsx-development@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz#eaee12f15a93f6496d852509a850085e6361470b" - integrity sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ== +"@babel/plugin-transform-react-jsx-development@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87" + integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== dependencies: - "@babel/plugin-transform-react-jsx" "^7.24.7" + "@babel/plugin-transform-react-jsx" "^7.22.5" -"@babel/plugin-transform-react-jsx@^7.24.7": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.2.tgz#e37e8ebfa77e9f0b16ba07fadcb6adb47412227a" - integrity sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA== +"@babel/plugin-transform-react-jsx@^7.22.5", "@babel/plugin-transform-react-jsx@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz#393f99185110cea87184ea47bcb4a7b0c2e39312" + integrity sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA== dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-module-imports" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/plugin-syntax-jsx" "^7.24.7" - "@babel/types" "^7.25.2" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-jsx" "^7.23.3" + "@babel/types" "^7.23.4" -"@babel/plugin-transform-react-pure-annotations@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz#bdd9d140d1c318b4f28b29a00fb94f97ecab1595" - integrity sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA== +"@babel/plugin-transform-react-pure-annotations@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.1.tgz#c86bce22a53956331210d268e49a0ff06e392470" + integrity sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA== dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-regenerator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz#021562de4534d8b4b1851759fd7af4e05d2c47f8" - integrity sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA== +"@babel/plugin-transform-regenerator@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz#625b7545bae52363bdc1fbbdc7252b5046409c8c" + integrity sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.0" regenerator-transform "^0.15.2" -"@babel/plugin-transform-reserved-words@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz#80037fe4fbf031fc1125022178ff3938bb3743a4" - integrity sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ== +"@babel/plugin-transform-reserved-words@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz#8de729f5ecbaaf5cf83b67de13bad38a21be57c1" + integrity sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-shorthand-properties@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz#85448c6b996e122fa9e289746140aaa99da64e73" - integrity sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA== +"@babel/plugin-transform-shorthand-properties@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz#ba9a09144cf55d35ec6b93a32253becad8ee5b55" + integrity sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-spread@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz#e8a38c0fde7882e0fb8f160378f74bd885cc7bb3" - integrity sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng== +"@babel/plugin-transform-spread@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz#a1acf9152cbf690e4da0ba10790b3ac7d2b2b391" + integrity sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-sticky-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz#96ae80d7a7e5251f657b5cf18f1ea6bf926f5feb" - integrity sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g== +"@babel/plugin-transform-sticky-regex@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz#f03e672912c6e203ed8d6e0271d9c2113dc031b9" + integrity sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-template-literals@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz#a05debb4a9072ae8f985bcf77f3f215434c8f8c8" - integrity sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw== +"@babel/plugin-transform-template-literals@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz#15e2166873a30d8617e3e2ccadb86643d327aab7" + integrity sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-typeof-symbol@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz#383dab37fb073f5bfe6e60c654caac309f92ba1c" - integrity sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw== +"@babel/plugin-transform-typeof-symbol@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.5.tgz#703cace5ef74155fb5eecab63cbfc39bdd25fe12" + integrity sha512-UTGnhYVZtTAjdwOTzT+sCyXmTn8AhaxOS/MjG9REclZ6ULHWF9KoCZur0HSGU7hk8PdBFKKbYe6+gqdXWz84Jg== dependencies: - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.5" -"@babel/plugin-transform-typescript@^7.24.7": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz#237c5d10de6d493be31637c6b9fa30b6c5461add" - integrity sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A== +"@babel/plugin-transform-typescript@^7.24.1": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.5.tgz#bcba979e462120dc06a75bd34c473a04781931b8" + integrity sha512-E0VWu/hk83BIFUWnsKZ4D81KXjN5L3MobvevOHErASk9IPwKHOkTgvqzvNo1yP/ePJWqqK2SpUR5z+KQbl6NVw== dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-create-class-features-plugin" "^7.25.0" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/plugin-syntax-typescript" "^7.24.7" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.24.5" + "@babel/helper-plugin-utils" "^7.24.5" + "@babel/plugin-syntax-typescript" "^7.24.1" -"@babel/plugin-transform-unicode-escapes@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz#2023a82ced1fb4971630a2e079764502c4148e0e" - integrity sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw== +"@babel/plugin-transform-unicode-escapes@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz#fb3fa16676549ac7c7449db9b342614985c2a3a4" + integrity sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-unicode-property-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz#9073a4cd13b86ea71c3264659590ac086605bbcd" - integrity sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w== +"@babel/plugin-transform-unicode-property-regex@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz#56704fd4d99da81e5e9f0c0c93cabd91dbc4889e" + integrity sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-unicode-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz#dfc3d4a51127108099b19817c0963be6a2adf19f" - integrity sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg== +"@babel/plugin-transform-unicode-regex@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz#57c3c191d68f998ac46b708380c1ce4d13536385" + integrity sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-unicode-sets-regex@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz#be664c2a0697ffacd3423595d5edef6049e8946c" - integrity sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA== +"@babel/plugin-transform-unicode-sets-regex@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz#c1ea175b02afcffc9cf57a9c4658326625165b7f" + integrity sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.2" - "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/preset-env@^7.6.0": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.25.4.tgz#be23043d43a34a2721cd0f676c7ba6f1481f6af6" - integrity sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw== - dependencies: - "@babel/compat-data" "^7.25.4" - "@babel/helper-compilation-targets" "^7.25.2" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-validator-option" "^7.24.8" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.3" - "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.0" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.0" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.7" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.0" + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.5.tgz#6a9ac90bd5a5a9dae502af60dfc58c190551bbcd" + integrity sha512-UGK2ifKtcC8i5AI4cH+sbLLuLc2ktYSFJgBAXorKAsHUZmrQ1q6aQ6i3BvU24wWs2AAKqQB6kq3N9V9Gw1HiMQ== + dependencies: + "@babel/compat-data" "^7.24.4" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-plugin-utils" "^7.24.5" + "@babel/helper-validator-option" "^7.23.5" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.24.5" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.24.1" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.1" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.24.1" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.24.7" - "@babel/plugin-syntax-import-attributes" "^7.24.7" + "@babel/plugin-syntax-import-assertions" "^7.24.1" + "@babel/plugin-syntax-import-attributes" "^7.24.1" "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" @@ -1022,60 +1031,59 @@ "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.24.7" - "@babel/plugin-transform-async-generator-functions" "^7.25.4" - "@babel/plugin-transform-async-to-generator" "^7.24.7" - "@babel/plugin-transform-block-scoped-functions" "^7.24.7" - "@babel/plugin-transform-block-scoping" "^7.25.0" - "@babel/plugin-transform-class-properties" "^7.25.4" - "@babel/plugin-transform-class-static-block" "^7.24.7" - "@babel/plugin-transform-classes" "^7.25.4" - "@babel/plugin-transform-computed-properties" "^7.24.7" - "@babel/plugin-transform-destructuring" "^7.24.8" - "@babel/plugin-transform-dotall-regex" "^7.24.7" - "@babel/plugin-transform-duplicate-keys" "^7.24.7" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.0" - "@babel/plugin-transform-dynamic-import" "^7.24.7" - "@babel/plugin-transform-exponentiation-operator" "^7.24.7" - "@babel/plugin-transform-export-namespace-from" "^7.24.7" - "@babel/plugin-transform-for-of" "^7.24.7" - "@babel/plugin-transform-function-name" "^7.25.1" - "@babel/plugin-transform-json-strings" "^7.24.7" - "@babel/plugin-transform-literals" "^7.25.2" - "@babel/plugin-transform-logical-assignment-operators" "^7.24.7" - "@babel/plugin-transform-member-expression-literals" "^7.24.7" - "@babel/plugin-transform-modules-amd" "^7.24.7" - "@babel/plugin-transform-modules-commonjs" "^7.24.8" - "@babel/plugin-transform-modules-systemjs" "^7.25.0" - "@babel/plugin-transform-modules-umd" "^7.24.7" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.24.7" - "@babel/plugin-transform-new-target" "^7.24.7" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.7" - "@babel/plugin-transform-numeric-separator" "^7.24.7" - "@babel/plugin-transform-object-rest-spread" "^7.24.7" - "@babel/plugin-transform-object-super" "^7.24.7" - "@babel/plugin-transform-optional-catch-binding" "^7.24.7" - "@babel/plugin-transform-optional-chaining" "^7.24.8" - "@babel/plugin-transform-parameters" "^7.24.7" - "@babel/plugin-transform-private-methods" "^7.25.4" - "@babel/plugin-transform-private-property-in-object" "^7.24.7" - "@babel/plugin-transform-property-literals" "^7.24.7" - "@babel/plugin-transform-regenerator" "^7.24.7" - "@babel/plugin-transform-reserved-words" "^7.24.7" - "@babel/plugin-transform-shorthand-properties" "^7.24.7" - "@babel/plugin-transform-spread" "^7.24.7" - "@babel/plugin-transform-sticky-regex" "^7.24.7" - "@babel/plugin-transform-template-literals" "^7.24.7" - "@babel/plugin-transform-typeof-symbol" "^7.24.8" - "@babel/plugin-transform-unicode-escapes" "^7.24.7" - "@babel/plugin-transform-unicode-property-regex" "^7.24.7" - "@babel/plugin-transform-unicode-regex" "^7.24.7" - "@babel/plugin-transform-unicode-sets-regex" "^7.25.4" + "@babel/plugin-transform-arrow-functions" "^7.24.1" + "@babel/plugin-transform-async-generator-functions" "^7.24.3" + "@babel/plugin-transform-async-to-generator" "^7.24.1" + "@babel/plugin-transform-block-scoped-functions" "^7.24.1" + "@babel/plugin-transform-block-scoping" "^7.24.5" + "@babel/plugin-transform-class-properties" "^7.24.1" + "@babel/plugin-transform-class-static-block" "^7.24.4" + "@babel/plugin-transform-classes" "^7.24.5" + "@babel/plugin-transform-computed-properties" "^7.24.1" + "@babel/plugin-transform-destructuring" "^7.24.5" + "@babel/plugin-transform-dotall-regex" "^7.24.1" + "@babel/plugin-transform-duplicate-keys" "^7.24.1" + "@babel/plugin-transform-dynamic-import" "^7.24.1" + "@babel/plugin-transform-exponentiation-operator" "^7.24.1" + "@babel/plugin-transform-export-namespace-from" "^7.24.1" + "@babel/plugin-transform-for-of" "^7.24.1" + "@babel/plugin-transform-function-name" "^7.24.1" + "@babel/plugin-transform-json-strings" "^7.24.1" + "@babel/plugin-transform-literals" "^7.24.1" + "@babel/plugin-transform-logical-assignment-operators" "^7.24.1" + "@babel/plugin-transform-member-expression-literals" "^7.24.1" + "@babel/plugin-transform-modules-amd" "^7.24.1" + "@babel/plugin-transform-modules-commonjs" "^7.24.1" + "@babel/plugin-transform-modules-systemjs" "^7.24.1" + "@babel/plugin-transform-modules-umd" "^7.24.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" + "@babel/plugin-transform-new-target" "^7.24.1" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.1" + "@babel/plugin-transform-numeric-separator" "^7.24.1" + "@babel/plugin-transform-object-rest-spread" "^7.24.5" + "@babel/plugin-transform-object-super" "^7.24.1" + "@babel/plugin-transform-optional-catch-binding" "^7.24.1" + "@babel/plugin-transform-optional-chaining" "^7.24.5" + "@babel/plugin-transform-parameters" "^7.24.5" + "@babel/plugin-transform-private-methods" "^7.24.1" + "@babel/plugin-transform-private-property-in-object" "^7.24.5" + "@babel/plugin-transform-property-literals" "^7.24.1" + "@babel/plugin-transform-regenerator" "^7.24.1" + "@babel/plugin-transform-reserved-words" "^7.24.1" + "@babel/plugin-transform-shorthand-properties" "^7.24.1" + "@babel/plugin-transform-spread" "^7.24.1" + "@babel/plugin-transform-sticky-regex" "^7.24.1" + "@babel/plugin-transform-template-literals" "^7.24.1" + "@babel/plugin-transform-typeof-symbol" "^7.24.5" + "@babel/plugin-transform-unicode-escapes" "^7.24.1" + "@babel/plugin-transform-unicode-property-regex" "^7.24.1" + "@babel/plugin-transform-unicode-regex" "^7.24.1" + "@babel/plugin-transform-unicode-sets-regex" "^7.24.1" "@babel/preset-modules" "0.1.6-no-external-plugins" babel-plugin-polyfill-corejs2 "^0.4.10" - babel-plugin-polyfill-corejs3 "^0.10.6" + babel-plugin-polyfill-corejs3 "^0.10.4" babel-plugin-polyfill-regenerator "^0.6.1" - core-js-compat "^3.37.1" + core-js-compat "^3.31.0" semver "^6.3.1" "@babel/preset-modules@0.1.6-no-external-plugins": @@ -1088,32 +1096,32 @@ esutils "^2.0.2" "@babel/preset-react@^7.0.0": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.24.7.tgz#480aeb389b2a798880bf1f889199e3641cbb22dc" - integrity sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.24.1.tgz#2450c2ac5cc498ef6101a6ca5474de251e33aa95" + integrity sha512-eFa8up2/8cZXLIpkafhaADTXSnl7IsUFCYenRWrARBz0/qZwcT0RBXpys0LJU4+WfPoF2ZG6ew6s2V6izMCwRA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-validator-option" "^7.24.7" - "@babel/plugin-transform-react-display-name" "^7.24.7" - "@babel/plugin-transform-react-jsx" "^7.24.7" - "@babel/plugin-transform-react-jsx-development" "^7.24.7" - "@babel/plugin-transform-react-pure-annotations" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-validator-option" "^7.23.5" + "@babel/plugin-transform-react-display-name" "^7.24.1" + "@babel/plugin-transform-react-jsx" "^7.23.4" + "@babel/plugin-transform-react-jsx-development" "^7.22.5" + "@babel/plugin-transform-react-pure-annotations" "^7.24.1" "@babel/preset-typescript@^7.23.3", "@babel/preset-typescript@^7.6.0": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz#66cd86ea8f8c014855671d5ea9a737139cbbfef1" - integrity sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.1.tgz#89bdf13a3149a17b3b2a2c9c62547f06db8845ec" + integrity sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-validator-option" "^7.24.7" - "@babel/plugin-syntax-jsx" "^7.24.7" - "@babel/plugin-transform-modules-commonjs" "^7.24.7" - "@babel/plugin-transform-typescript" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-validator-option" "^7.23.5" + "@babel/plugin-syntax-jsx" "^7.24.1" + "@babel/plugin-transform-modules-commonjs" "^7.24.1" + "@babel/plugin-transform-typescript" "^7.24.1" "@babel/register@^7.22.5": - version "7.24.6" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.24.6.tgz#59e21dcc79e1d04eed5377633b0f88029a6bef9e" - integrity sha512-WSuFCc2wCqMeXkz/i3yfAAsxwWflEgbVkZzivgAmXl/MxrXeoYFZOOPllbC8R8WTF7u61wSRQtDVZ1879cdu6w== + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.23.7.tgz#485a5e7951939d21304cae4af1719fdb887bc038" + integrity sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ== dependencies: clone-deep "^4.0.1" find-cache-dir "^2.0.0" @@ -1126,42 +1134,52 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.4", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.6", "@babel/runtime@^7.16.7", "@babel/runtime@^7.17.2", "@babel/runtime@^7.18.0", "@babel/runtime@^7.18.3", "@babel/runtime@^7.2.0", "@babel/runtime@^7.20.0", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.6", "@babel/runtime@^7.23.9", "@babel/runtime@^7.24.4", "@babel/runtime@^7.24.5", "@babel/runtime@^7.24.7", "@babel/runtime@^7.24.8", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.6.tgz#9afc3289f7184d8d7f98b099884c26317b9264d2" - integrity sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ== +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.4", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.6", "@babel/runtime@^7.16.7", "@babel/runtime@^7.17.2", "@babel/runtime@^7.18.0", "@babel/runtime@^7.18.3", "@babel/runtime@^7.2.0", "@babel/runtime@^7.20.0", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.6", "@babel/runtime@^7.23.9", "@babel/runtime@^7.24.4", "@babel/runtime@^7.24.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.5.tgz#230946857c053a36ccc66e1dd03b17dd0c4ed02c" + integrity sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/runtime@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.7.tgz#f4f0d5530e8dbdf59b3451b9b3e594b6ba082e12" + integrity sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.24.7", "@babel/template@^7.25.0", "@babel/template@^7.3.3", "@babel/template@^7.4.4": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a" - integrity sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q== - dependencies: - "@babel/code-frame" "^7.24.7" - "@babel/parser" "^7.25.0" - "@babel/types" "^7.25.0" - -"@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8", "@babel/traverse@^7.25.0", "@babel/traverse@^7.25.1", "@babel/traverse@^7.25.2", "@babel/traverse@^7.25.3", "@babel/traverse@^7.25.4": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.6.tgz#04fad980e444f182ecf1520504941940a90fea41" - integrity sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ== - dependencies: - "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.25.6" - "@babel/parser" "^7.25.6" - "@babel/template" "^7.25.0" - "@babel/types" "^7.25.6" +"@babel/template@^7.22.15", "@babel/template@^7.24.0", "@babel/template@^7.3.3", "@babel/template@^7.4.4": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50" + integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== + dependencies: + "@babel/code-frame" "^7.23.5" + "@babel/parser" "^7.24.0" + "@babel/types" "^7.24.0" + +"@babel/traverse@^7.24.5": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.5.tgz#972aa0bc45f16983bf64aa1f877b2dd0eea7e6f8" + integrity sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA== + dependencies: + "@babel/code-frame" "^7.24.2" + "@babel/generator" "^7.24.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.24.5" + "@babel/parser" "^7.24.5" + "@babel/types" "^7.24.5" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.25.6", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.6.tgz#893942ddb858f32ae7a004ec9d3a76b3463ef8e6" - integrity sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.24.0", "@babel/types@^7.24.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.24.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.5.tgz#7661930afc638a5383eb0c4aee59b74f38db84d7" + integrity sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ== dependencies: - "@babel/helper-string-parser" "^7.24.8" - "@babel/helper-validator-identifier" "^7.24.7" + "@babel/helper-string-parser" "^7.24.1" + "@babel/helper-validator-identifier" "^7.24.5" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -1169,92 +1187,82 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@csstools/cascade-layer-name-parser@^1.0.13": - version "1.0.13" - resolved "https://registry.yarnpkg.com/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.13.tgz#6900157489bc53da1f6a66eaccd432025f6cd6fb" - integrity sha512-MX0yLTwtZzr82sQ0zOjqimpZbzjMaK/h2pmlrLK7DCzlmiZLYFpoO94WmN1akRVo6ll/TdpHb53vihHLUMyvng== +"@csstools/cascade-layer-name-parser@^1.0.11": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.11.tgz#c9b85dc38240c0269385f557149f714e7875fda0" + integrity sha512-yhsonEAhaWRQvHFYhSzOUobH2Ev++fMci+ppFRagw0qVSPlcPV4FnNmlwpM/b2BM10ZeMRkVV4So6YRswD0O0w== -"@csstools/color-helpers@^4.2.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-4.2.1.tgz#da573554220ccb59757f12de62bf70c6b15645d4" - integrity sha512-CEypeeykO9AN7JWkr1OEOQb0HRzZlPWGwV0Ya6DuVgFdDi6g3ma/cPZ5ZPZM4AWQikDpq/0llnGGlIL+j8afzw== +"@csstools/color-helpers@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-4.2.0.tgz#e8629ca9dce03a3a309506e7892b7f862673cf85" + integrity sha512-hJJrSBzbfGxUsaR6X4Bzd/FLx0F1ulKnR5ljY9AiXCtsR+H+zSWQDFWlKES1BRaVZTDHLpIIHS9K2o0h+JLlrg== -"@csstools/css-calc@^1.2.4": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-1.2.4.tgz#9d9fb0dca33666cf97659f8f2c343ed0210e0e73" - integrity sha512-tfOuvUQeo7Hz+FcuOd3LfXVp+342pnWUJ7D2y8NUpu1Ww6xnTbHLpz018/y6rtbHifJ3iIEf9ttxXd8KG7nL0Q== +"@csstools/css-calc@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-1.2.2.tgz#bcb856e63ecc16a7508f43e77ea43ac5daaf2833" + integrity sha512-0owrl7AruDRKAxoSIW8XzJdz7GnuW3AOj4rYLfmXsoKIX2ZZzttzGXoiC8n8V08X7wIBlEWWVB4C8fAN18+I6Q== -"@csstools/css-color-parser@^2.0.4": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-2.0.5.tgz#ce1fe52f23f35f37bea2cf61ac865115aa17880a" - integrity sha512-lRZSmtl+DSjok3u9hTWpmkxFZnz7stkbZxzKc08aDUsdrWwhSgWo8yq9rq9DaFUtbAyAq2xnH92fj01S+pwIww== +"@csstools/css-color-parser@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-2.0.2.tgz#bf60de403889a2726f964a1c9b1ea5593e889f5b" + integrity sha512-Agx2YmxTcZ7TfB7KNZQ+iekaxbWSdblvtA35aTwE3KfuYyjOlCg3P4KGGdQF/cjm1pHWVSBo5duF/BRfZ8s07A== dependencies: - "@csstools/color-helpers" "^4.2.1" - "@csstools/css-calc" "^1.2.4" + "@csstools/color-helpers" "^4.2.0" + "@csstools/css-calc" "^1.2.2" -"@csstools/css-parser-algorithms@^2.3.1", "@csstools/css-parser-algorithms@^2.7.1": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz#6d93a8f7d8aeb7cd9ed0868f946e46f021b6aa70" - integrity sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw== +"@csstools/css-parser-algorithms@^2.3.1", "@csstools/css-parser-algorithms@^2.6.3": + version "2.6.3" + resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.3.tgz#b5e7eb2bd2a42e968ef61484f1490a8a4148a8eb" + integrity sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA== -"@csstools/css-tokenizer@^2.2.0", "@csstools/css-tokenizer@^2.4.1": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.4.1.tgz#1d8b2e200197cf5f35ceb07ca2dade31f3a00ae8" - integrity sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg== +"@csstools/css-tokenizer@^2.2.0", "@csstools/css-tokenizer@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.3.1.tgz#3d47e101ad48d815a4bdce8159fb5764f087f17a" + integrity sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g== -"@csstools/media-query-list-parser@^2.1.13", "@csstools/media-query-list-parser@^2.1.4": - version "2.1.13" - resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.13.tgz#f00be93f6bede07c14ddf51a168ad2748e4fe9e5" - integrity sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA== +"@csstools/media-query-list-parser@^2.1.11", "@csstools/media-query-list-parser@^2.1.4": + version "2.1.11" + resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.11.tgz#465aa42f268599729350e305e1ae14a30c1daf51" + integrity sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA== -"@csstools/postcss-cascade-layers@^4.0.6": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.6.tgz#5a421cd2d5792d1eb8c28e682dc5f2c3b85cb045" - integrity sha512-Xt00qGAQyqAODFiFEJNkTpSUz5VfYqnDLECdlA/Vv17nl/OIV5QfTRHGAXrBGG5YcJyHpJ+GF9gF/RZvOQz4oA== +"@csstools/postcss-cascade-layers@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.4.tgz#0f20882d4f528a8128b0855ce63c3e6eee6d1b44" + integrity sha512-MKErv8lpEwVmAcAwidY1Kfd3oWrh2Q14kxHs9xn26XzjP/PrcdngWq63lJsZeMlBY7o+WlEOeE+FP6zPzeY2uw== dependencies: - "@csstools/selector-specificity" "^3.1.1" + "@csstools/selector-specificity" "^3.0.3" postcss-selector-parser "^6.0.13" -"@csstools/postcss-color-function@^3.0.19": - version "3.0.19" - resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-3.0.19.tgz#8db83be25bb590a29549b0305bdaa74e76366c62" - integrity sha512-d1OHEXyYGe21G3q88LezWWx31ImEDdmINNDy0LyLNN9ChgN2bPxoubUPiHf9KmwypBMaHmNcMuA/WZOKdZk/Lg== +"@csstools/postcss-color-function@^3.0.16": + version "3.0.16" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-3.0.16.tgz#d4f0b45a7425d437f267d99dcb94d3961a151b52" + integrity sha512-KtmXfckANSKsLBoTQCzggvKft1cmmmDKYjFO4yVlB23nWUgGInVBTE9T5JLmH29NNdTWSEPLWPUxoQ6XiIEn2Q== dependencies: - "@csstools/css-color-parser" "^2.0.4" - "@csstools/css-parser-algorithms" "^2.7.1" - "@csstools/css-tokenizer" "^2.4.1" - "@csstools/postcss-progressive-custom-properties" "^3.3.0" + "@csstools/css-color-parser" "^2.0.2" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" + "@csstools/postcss-progressive-custom-properties" "^3.2.0" "@csstools/utilities" "^1.0.0" -"@csstools/postcss-color-mix-function@^2.0.19": - version "2.0.19" - resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.19.tgz#dd5c8cccd95613d11d8a8f96a57c148daa0e6306" - integrity sha512-mLvQlMX+keRYr16AuvuV8WYKUwF+D0DiCqlBdvhQ0KYEtcQl9/is9Ssg7RcIys8x0jIn2h1zstS4izckdZj9wg== - dependencies: - "@csstools/css-color-parser" "^2.0.4" - "@csstools/css-parser-algorithms" "^2.7.1" - "@csstools/css-tokenizer" "^2.4.1" - "@csstools/postcss-progressive-custom-properties" "^3.3.0" - "@csstools/utilities" "^1.0.0" - -"@csstools/postcss-content-alt-text@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-1.0.0.tgz#f69f74cd7ff679a912a444a274f67b9e0ce67127" - integrity sha512-SkHdj7EMM/57GVvSxSELpUg7zb5eAndBeuvGwFzYtU06/QXJ/h9fuK7wO5suteJzGhm3GDF/EWPCdWV2h1IGHQ== +"@csstools/postcss-color-mix-function@^2.0.16": + version "2.0.16" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.16.tgz#40b95ade50f5b19320bb342db4557bb61a8eefd6" + integrity sha512-BJnD1M5Pdypl1cJuwGuzVC52PqgzaObsDLu34jgf+QU7daVFqz432PvpqvXTmfTSNt4OckOT1QIzWexEFlDNXw== dependencies: - "@csstools/css-parser-algorithms" "^2.7.1" - "@csstools/css-tokenizer" "^2.4.1" - "@csstools/postcss-progressive-custom-properties" "^3.3.0" + "@csstools/css-color-parser" "^2.0.2" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" + "@csstools/postcss-progressive-custom-properties" "^3.2.0" "@csstools/utilities" "^1.0.0" -"@csstools/postcss-exponential-functions@^1.0.9": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.9.tgz#443b42c26c65b57a84a21d81075dacd93eeb7fd8" - integrity sha512-x1Avr15mMeuX7Z5RJUl7DmjhUtg+Amn5DZRD0fQ2TlTFTcJS8U1oxXQ9e5mA62S2RJgUU6db20CRoJyDvae2EQ== +"@csstools/postcss-exponential-functions@^1.0.7": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.7.tgz#1ce6402fb40c97448cd465e3682844c401942700" + integrity sha512-9usBPQX74OhiF/VuaVrp44UAPzqbKNyoaxEa6tbEXiFp+OAm3yB/TLRKyPUWg5tvvHGCduGJVdJJB3w8c8NBtA== dependencies: - "@csstools/css-calc" "^1.2.4" - "@csstools/css-parser-algorithms" "^2.7.1" - "@csstools/css-tokenizer" "^2.4.1" + "@csstools/css-calc" "^1.2.2" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" "@csstools/postcss-font-format-keywords@^3.0.2": version "3.0.2" @@ -1264,43 +1272,43 @@ "@csstools/utilities" "^1.0.0" postcss-value-parser "^4.2.0" -"@csstools/postcss-gamut-mapping@^1.0.11": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.11.tgz#7f5b0457fc16df8e0f9dd2fbe86b7e5a0240592c" - integrity sha512-KrHGsUPXRYxboXmJ9wiU/RzDM7y/5uIefLWKFSc36Pok7fxiPyvkSHO51kh+RLZS1W5hbqw9qaa6+tKpTSxa5g== - dependencies: - "@csstools/css-color-parser" "^2.0.4" - "@csstools/css-parser-algorithms" "^2.7.1" - "@csstools/css-tokenizer" "^2.4.1" - -"@csstools/postcss-gradients-interpolation-method@^4.0.20": - version "4.0.20" - resolved "https://registry.yarnpkg.com/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.20.tgz#e2a165719798cd8b503865297d8095c857eba77f" - integrity sha512-ZFl2JBHano6R20KB5ZrB8KdPM2pVK0u+/3cGQ2T8VubJq982I2LSOvQ4/VtxkAXjkPkk1rXt4AD1ni7UjTZ1Og== - dependencies: - "@csstools/css-color-parser" "^2.0.4" - "@csstools/css-parser-algorithms" "^2.7.1" - "@csstools/css-tokenizer" "^2.4.1" - "@csstools/postcss-progressive-custom-properties" "^3.3.0" +"@csstools/postcss-gamut-mapping@^1.0.9": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.9.tgz#40358dff1e9be784a99a0925c3062c841fc1b001" + integrity sha512-JmOeiBJj1RJriAkr+aLBaiYUpEqdNOIo3ERQ5a4uNzy18upzrQ6tz7m2Vt1GQpJ62zQj7rC5PjAhCoZCoyE31g== + dependencies: + "@csstools/css-color-parser" "^2.0.2" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" + +"@csstools/postcss-gradients-interpolation-method@^4.0.17": + version "4.0.17" + resolved "https://registry.yarnpkg.com/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.17.tgz#905bc1c8ae2b5fca1f38f191d67c56c102eba208" + integrity sha512-qSNIqzLPKd2SadfWwHZv42lDRyYlLaM+Vx5rRIsnYCZbQxzFfe1XAwssrcCsHgba5bA6bi5oDoFCx0W+PRCpfw== + dependencies: + "@csstools/css-color-parser" "^2.0.2" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" + "@csstools/postcss-progressive-custom-properties" "^3.2.0" "@csstools/utilities" "^1.0.0" -"@csstools/postcss-hwb-function@^3.0.18": - version "3.0.18" - resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.18.tgz#267dc59c97033b1108e377c98c45c35b713ea66b" - integrity sha512-3ifnLltR5C7zrJ+g18caxkvSRnu9jBBXCYgnBznRjxm6gQJGnnCO9H6toHfywNdNr/qkiVf2dymERPQLDnjLRQ== +"@csstools/postcss-hwb-function@^3.0.15": + version "3.0.15" + resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.15.tgz#c7ad67e697dc41eddd30551edcb92c45fa1ef289" + integrity sha512-l34fRiZ7o5+pULv7OplXniBTU4TuKYNNOv0abuvUanddWGSy3+YHlMKUSgcVFo0d1DorxPAhJSTCrugl+4OmMQ== dependencies: - "@csstools/css-color-parser" "^2.0.4" - "@csstools/css-parser-algorithms" "^2.7.1" - "@csstools/css-tokenizer" "^2.4.1" - "@csstools/postcss-progressive-custom-properties" "^3.3.0" + "@csstools/css-color-parser" "^2.0.2" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" + "@csstools/postcss-progressive-custom-properties" "^3.2.0" "@csstools/utilities" "^1.0.0" -"@csstools/postcss-ic-unit@^3.0.7": - version "3.0.7" - resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.7.tgz#2a4428c0d19bd456b4bfd60dcbe9e7c4974dfcef" - integrity sha512-YoaNHH2wNZD+c+rHV02l4xQuDpfR8MaL7hD45iJyr+USwvr0LOheeytJ6rq8FN6hXBmEeoJBeXXgGmM8fkhH4g== +"@csstools/postcss-ic-unit@^3.0.6": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.6.tgz#441f18a9064884e1e6ab77169413e0e6184f5c1d" + integrity sha512-fHaU9C/sZPauXMrzPitZ/xbACbvxbkPpHoUgB9Kw5evtsBWdVkVrajOyiT9qX7/c+G1yjApoQjP1fQatldsy9w== dependencies: - "@csstools/postcss-progressive-custom-properties" "^3.3.0" + "@csstools/postcss-progressive-custom-properties" "^3.2.0" "@csstools/utilities" "^1.0.0" postcss-value-parser "^4.2.0" @@ -1309,22 +1317,22 @@ resolved "https://registry.yarnpkg.com/@csstools/postcss-initial/-/postcss-initial-1.0.1.tgz#5aa378de9bfd0e6e377433f8986bdecf579e1268" integrity sha512-wtb+IbUIrIf8CrN6MLQuFR7nlU5C7PwuebfeEXfjthUha1+XZj2RVi+5k/lukToA24sZkYAiSJfHM8uG/UZIdg== -"@csstools/postcss-is-pseudo-class@^4.0.8": - version "4.0.8" - resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.8.tgz#d2bcc6c2d86d9653c333926a9ea488c2fc221a7f" - integrity sha512-0aj591yGlq5Qac+plaWCbn5cpjs5Sh0daovYUKJUOMjIp70prGH/XPLp7QjxtbFXz3CTvb0H9a35dpEuIuUi3Q== +"@csstools/postcss-is-pseudo-class@^4.0.6": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.6.tgz#149b3bf9dde739932a545079da917ca25464cba0" + integrity sha512-HilOhAsMpFheMYkuaREZx+CGa4hsG6kQdzwXSsuqKDFzYz2eIMP213+3dH/vUbPXaWrzqLKr8m3i0dgYPoh7vg== dependencies: - "@csstools/selector-specificity" "^3.1.1" + "@csstools/selector-specificity" "^3.0.3" postcss-selector-parser "^6.0.13" -"@csstools/postcss-light-dark-function@^1.0.8": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-1.0.8.tgz#4d4cdad50a9b54b6b3a79cf32bf1cd956e82b0d7" - integrity sha512-x0UtpCyVnERsplUeoaY6nEtp1HxTf4lJjoK/ULEm40DraqFfUdUSt76yoOyX5rGY6eeOUOkurHyYlFHVKv/pew== +"@csstools/postcss-light-dark-function@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-1.0.5.tgz#5a9a15b1b7e79b3d7c8020a6a133f796ce4dfda7" + integrity sha512-kKM9dtEaVmSTb3scL2pgef62KyWv6SK19JiAnCCuiDhlRE6PADKzaPPBXmP3qj4IEgIH+cQhdEosB0eroU6Fnw== dependencies: - "@csstools/css-parser-algorithms" "^2.7.1" - "@csstools/css-tokenizer" "^2.4.1" - "@csstools/postcss-progressive-custom-properties" "^3.3.0" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" + "@csstools/postcss-progressive-custom-properties" "^3.2.0" "@csstools/utilities" "^1.0.0" "@csstools/postcss-logical-float-and-clear@^2.0.1": @@ -1349,32 +1357,32 @@ dependencies: postcss-value-parser "^4.2.0" -"@csstools/postcss-logical-viewport-units@^2.0.11": - version "2.0.11" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.11.tgz#f87fcaecd33403e19cb4d77a19e62ede8ed4ec13" - integrity sha512-ElITMOGcjQtvouxjd90WmJRIw1J7KMP+M+O87HaVtlgOOlDt1uEPeTeii8qKGe2AiedEp0XOGIo9lidbiU2Ogg== +"@csstools/postcss-logical-viewport-units@^2.0.9": + version "2.0.9" + resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.9.tgz#8575b832faac9c9118b2228eb65ab622c91fdddf" + integrity sha512-iBBJuExgHwedFH9AqNOHWzZFgYnt17zhu1qWjmSihu1P5pw0lIG9q5t3uIgJJFDNmYoOGfBKan66z9u1QH8yBQ== dependencies: - "@csstools/css-tokenizer" "^2.4.1" + "@csstools/css-tokenizer" "^2.3.1" "@csstools/utilities" "^1.0.0" -"@csstools/postcss-media-minmax@^1.1.8": - version "1.1.8" - resolved "https://registry.yarnpkg.com/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.8.tgz#a90b576805312b1bea7bda7d1726402b7f5ef430" - integrity sha512-KYQCal2i7XPNtHAUxCECdrC7tuxIWQCW+s8eMYs5r5PaAiVTeKwlrkRS096PFgojdNCmHeG0Cb7njtuNswNf+w== +"@csstools/postcss-media-minmax@^1.1.6": + version "1.1.6" + resolved "https://registry.yarnpkg.com/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.6.tgz#300581d39cfade44fd9ac2b777c5abb1d088aaa8" + integrity sha512-bc0frf2Lod53j6wEHVsaVElfvCf6uhc96v99M/wUfer4MmNYfO3YLx1kFuB8xXvb0AXiWx4fohCJqemHV3bfRg== dependencies: - "@csstools/css-calc" "^1.2.4" - "@csstools/css-parser-algorithms" "^2.7.1" - "@csstools/css-tokenizer" "^2.4.1" - "@csstools/media-query-list-parser" "^2.1.13" + "@csstools/css-calc" "^1.2.2" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" + "@csstools/media-query-list-parser" "^2.1.11" -"@csstools/postcss-media-queries-aspect-ratio-number-values@^2.0.11": - version "2.0.11" - resolved "https://registry.yarnpkg.com/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.11.tgz#bb93203839521e99101b6adbab72dc9d9b57c9bc" - integrity sha512-YD6jrib20GRGQcnOu49VJjoAnQ/4249liuz7vTpy/JfgqQ1Dlc5eD4HPUMNLOw9CWey9E6Etxwf/xc/ZF8fECA== +"@csstools/postcss-media-queries-aspect-ratio-number-values@^2.0.9": + version "2.0.9" + resolved "https://registry.yarnpkg.com/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.9.tgz#764657111d378d73cb66b9110c9e73283116f350" + integrity sha512-PR0s3tFSxPoKoPLoKuiZuYhwQC5bQxq/gFfywX2u/kh8rMzesARPZYKxE71I3jHWi6KDHGZl9Xb5xcFPwtvLiQ== dependencies: - "@csstools/css-parser-algorithms" "^2.7.1" - "@csstools/css-tokenizer" "^2.4.1" - "@csstools/media-query-list-parser" "^2.1.13" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" + "@csstools/media-query-list-parser" "^2.1.11" "@csstools/postcss-nested-calc@^3.0.2": version "3.0.2" @@ -1391,33 +1399,33 @@ dependencies: postcss-value-parser "^4.2.0" -"@csstools/postcss-oklab-function@^3.0.19": - version "3.0.19" - resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.19.tgz#3bd0719914780fb53558af11958d0f4e6d2f952e" - integrity sha512-e3JxXmxjU3jpU7TzZrsNqSX4OHByRC3XjItV3Ieo/JEQmLg5rdOL4lkv/1vp27gXemzfNt44F42k/pn0FpE21Q== +"@csstools/postcss-oklab-function@^3.0.16": + version "3.0.16" + resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.16.tgz#c7ae792fb831c935aca3e7aec7c61ff357814995" + integrity sha512-zm8nND+EraZrmbO4mgcT8FrJrAQUfWNfMmbV5uTCpWtAcO5ycX3E3bO8T1TjczKYRxC5QMM/91n9YExYCF4Mvw== dependencies: - "@csstools/css-color-parser" "^2.0.4" - "@csstools/css-parser-algorithms" "^2.7.1" - "@csstools/css-tokenizer" "^2.4.1" - "@csstools/postcss-progressive-custom-properties" "^3.3.0" + "@csstools/css-color-parser" "^2.0.2" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" + "@csstools/postcss-progressive-custom-properties" "^3.2.0" "@csstools/utilities" "^1.0.0" -"@csstools/postcss-progressive-custom-properties@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.3.0.tgz#20177d3fc61d8f170c4ee1686f3d2ab6eec27bbb" - integrity sha512-W2oV01phnILaRGYPmGFlL2MT/OgYjQDrL9sFlbdikMFi6oQkFki9B86XqEWR7HCsTZFVq7dbzr/o71B75TKkGg== +"@csstools/postcss-progressive-custom-properties@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.2.0.tgz#811da8616938e8148a7c4fb40c26e30bf94d4ceb" + integrity sha512-BZlirVxCRgKlE7yVme+Xvif72eTn1MYXj8oZ4Knb+jwaH4u3AN1DjbhM7j86RP5vvuAOexJ4JwfifYYKWMN/QQ== dependencies: postcss-value-parser "^4.2.0" -"@csstools/postcss-relative-color-syntax@^2.0.19": - version "2.0.19" - resolved "https://registry.yarnpkg.com/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.19.tgz#246b3a782e88df58184943c2471209c3d2085d65" - integrity sha512-MxUMSNvio1WwuS6WRLlQuv6nNPXwIWUFzBBAvL/tBdWfiKjiJnAa6eSSN5gtaacSqUkQ/Ce5Z1OzLRfeaWhADA== +"@csstools/postcss-relative-color-syntax@^2.0.16": + version "2.0.16" + resolved "https://registry.yarnpkg.com/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.16.tgz#9ace14c5bb1e70ec4e7f8bba0cc98acc5fc9d6e1" + integrity sha512-TSM8fVqJkT8JZDranZPnkpxjU/Q1sNR192lXMND+EcKOUjYa6uYpGSfHgjnWjCRiBSciettS+sL7y9wmnas7qQ== dependencies: - "@csstools/css-color-parser" "^2.0.4" - "@csstools/css-parser-algorithms" "^2.7.1" - "@csstools/css-tokenizer" "^2.4.1" - "@csstools/postcss-progressive-custom-properties" "^3.3.0" + "@csstools/css-color-parser" "^2.0.2" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" + "@csstools/postcss-progressive-custom-properties" "^3.2.0" "@csstools/utilities" "^1.0.0" "@csstools/postcss-scope-pseudo-class@^3.0.1": @@ -1427,31 +1435,31 @@ dependencies: postcss-selector-parser "^6.0.13" -"@csstools/postcss-stepped-value-functions@^3.0.10": - version "3.0.10" - resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.10.tgz#41cf7b2fc6abc9216b453137a35aeeeb056d70d9" - integrity sha512-MZwo0D0TYrQhT5FQzMqfy/nGZ28D1iFtpN7Su1ck5BPHS95+/Y5O9S4kEvo76f2YOsqwYcT8ZGehSI1TnzuX2g== +"@csstools/postcss-stepped-value-functions@^3.0.8": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.8.tgz#696aaa0eb9ea651097d7b1a376c36a9ca925908f" + integrity sha512-X76+thsvsmH/SkqVbN+vjeFKe1ABGLRx8/Wl68QTb/zvJWdzgx5S/nbszZP5O3nTRc5eI8NxIOrQUiy30fR+0g== dependencies: - "@csstools/css-calc" "^1.2.4" - "@csstools/css-parser-algorithms" "^2.7.1" - "@csstools/css-tokenizer" "^2.4.1" + "@csstools/css-calc" "^1.2.2" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" -"@csstools/postcss-text-decoration-shorthand@^3.0.7": - version "3.0.7" - resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.7.tgz#58dc60bb0718f6ec7d0a41d4124cf45a6813aeaa" - integrity sha512-+cptcsM5r45jntU6VjotnkC9GteFR7BQBfZ5oW7inLCxj7AfLGAzMbZ60hKTP13AULVZBdxky0P8um0IBfLHVA== +"@csstools/postcss-text-decoration-shorthand@^3.0.6": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.6.tgz#108afc5a66b96db3d0cca4f5d9414559c6b7a0bf" + integrity sha512-Q8HEu4AEiwNVZBD6+DpQ8M9SajpMow4+WtmndWIAv8qxDtDYL4JK1xXWkhOGk28PrcJawOvkrEZ8Ri59UN1TJw== dependencies: - "@csstools/color-helpers" "^4.2.1" + "@csstools/color-helpers" "^4.2.0" postcss-value-parser "^4.2.0" -"@csstools/postcss-trigonometric-functions@^3.0.10": - version "3.0.10" - resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.10.tgz#0ad99b0a2a77cdd9c957b6e6e83221acf9b6afd8" - integrity sha512-G9G8moTc2wiad61nY5HfvxLiM/myX0aYK4s1x8MQlPH29WDPxHQM7ghGgvv2qf2xH+rrXhztOmjGHJj4jsEqXw== +"@csstools/postcss-trigonometric-functions@^3.0.8": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.8.tgz#8ba2206d27481e922bb29c1eeae834928be0abae" + integrity sha512-zEzyGriPqoIYFgHJqWNy8bmoxjM4+ONyTap1ZzQK/Lll/VsCYvx0IckB33W/u89uLSVeeB8xC7uTrkoQ7ogKyQ== dependencies: - "@csstools/css-calc" "^1.2.4" - "@csstools/css-parser-algorithms" "^2.7.1" - "@csstools/css-tokenizer" "^2.4.1" + "@csstools/css-calc" "^1.2.2" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" "@csstools/postcss-unset-value@^3.0.1": version "3.0.1" @@ -1463,10 +1471,10 @@ resolved "https://registry.yarnpkg.com/@csstools/selector-resolve-nested/-/selector-resolve-nested-1.1.0.tgz#d872f2da402d3ce8bd0cf16ea5f9fba76b18e430" integrity sha512-uWvSaeRcHyeNenKg8tp17EVDRkpflmdyvbE0DHo6D/GdBb6PDnCYYU6gRpXhtICMGMcahQmj2zGxwFM/WC8hCg== -"@csstools/selector-specificity@^3.0.0", "@csstools/selector-specificity@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz#63085d2995ca0f0e55aa8b8a07d69bfd48b844fe" - integrity sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA== +"@csstools/selector-specificity@^3.0.0", "@csstools/selector-specificity@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.0.3.tgz#208a3929ee614967a1fc8cd6cb758d9fcbf0caae" + integrity sha512-KEPNw4+WW5AVEIyzC80rTbWEUatTW2lXpN8+8ILC8PiPeWPjwUzrPZDIOZ2wwqDmeqOYTdSGyL3+vE5GC3FB3Q== "@csstools/utilities@^1.0.0": version "1.0.0" @@ -1501,9 +1509,9 @@ eslint-visitor-keys "^3.3.0" "@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": - version "4.11.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae" - integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A== + version "4.10.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== "@eslint/eslintrc@^2.1.4": version "2.1.4" @@ -1799,9 +1807,9 @@ "@jridgewell/trace-mapping" "^0.3.25" "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" - integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" @@ -1923,9 +1931,9 @@ integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== "@rc-component/async-validator@^5.0.3": - version "5.0.4" - resolved "https://registry.yarnpkg.com/@rc-component/async-validator/-/async-validator-5.0.4.tgz#5291ad92f00a14b6766fc81735c234277f83e948" - integrity sha512-qgGdcVIF604M9EqjNF0hbUTz42bz/RDtxWdWuU5EQe3hi7M8ob54B6B35rOsvX5eSvIHIzT9iH1R3n+hk3CGfg== + version "5.0.3" + resolved "https://registry.yarnpkg.com/@rc-component/async-validator/-/async-validator-5.0.3.tgz#4a31e02171e30a9f4f60cf95d9fa8c4c26bf8b59" + integrity sha512-eN5chKrc0ANerXjLJuoqh/YJpor0u4T1bgaph5BPh42cJ2afDihaHJ2Mh3Up3XIFk05EfKG4nIQxbqC6y2eM4Q== dependencies: "@babel/runtime" "^7.24.4" @@ -1984,9 +1992,9 @@ rc-util "^5.24.4" "@rc-component/trigger@^2.0.0", "@rc-component/trigger@^2.1.1": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@rc-component/trigger/-/trigger-2.2.2.tgz#7c8c27ce92cacbb32b1cda70f0533fe52202c41d" - integrity sha512-xDyi0fJ3IV6XJEReMOewS9PEnnuLHKz4rjbgIniDsJFHjL5nROuUlu64mfo90jglLDkQUxRwK7aTtumA65/zYQ== + version "2.1.1" + resolved "https://registry.yarnpkg.com/@rc-component/trigger/-/trigger-2.1.1.tgz#47973f1156ba63810c913eb46cbaedeba913874b" + integrity sha512-UjHkedkgtEcgQu87w1VuWug1idoDJV7VUt0swxHXRcmei2uu1AuUzGBPEUlmOmXGJ+YtTgZfVLi7kuAUKoZTMA== dependencies: "@babel/runtime" "^7.23.2" "@rc-component/portal" "^1.1.0" @@ -1996,19 +2004,19 @@ rc-util "^5.38.0" "@react-awesome-query-builder/antd@^6.5.2": - version "6.6.3" - resolved "https://registry.yarnpkg.com/@react-awesome-query-builder/antd/-/antd-6.6.3.tgz#f0361ba6ba42ae1559daa66d30acc53dd012fdf4" - integrity sha512-aLBPwfbuE5F8oON02e305daZvj49QEbYy3MNuBc6NvxTSCyBI1scCm2YQmuXQlhnSeOvD6ZXRuELvw4L7/dEmw== + version "6.5.2" + resolved "https://registry.yarnpkg.com/@react-awesome-query-builder/antd/-/antd-6.5.2.tgz#f1e96beaa7aa6531ec2a5a2193c83e06928f0243" + integrity sha512-mQ7fhVF7hYOAFNzr6acSMf+vJF3CpWrnJ3UGoMXtsHbsC5+ILDOUoE7qnW7zYIoWLFk7zdURpAJpA+5ufwSY1A== dependencies: - "@react-awesome-query-builder/ui" "^6.6.3" + "@react-awesome-query-builder/ui" "^6.5.2" lodash "^4.17.21" prop-types "^15.8.1" rc-picker "^4.5.0" -"@react-awesome-query-builder/core@^6.6.3": - version "6.6.3" - resolved "https://registry.yarnpkg.com/@react-awesome-query-builder/core/-/core-6.6.3.tgz#d9d56cad5f5570e9e102846232e8a7ded7bb5da9" - integrity sha512-+631G0kojyUfJYNiMU/Su/bJPiwFA9o5XEQXr5VGxIJDnfs+zU+iqg2CeUlqknRKOdRgqylJbi5ZXKVqRLDsxA== +"@react-awesome-query-builder/core@^6.5.2": + version "6.5.2" + resolved "https://registry.yarnpkg.com/@react-awesome-query-builder/core/-/core-6.5.2.tgz#004f9ddca017a83343f88e7673cebabeba01a22f" + integrity sha512-Ijpo/uO6upsclgIRLI8YLf+coFWkfjAS/WRB7+qeXmMX9MsaqKlYa8tk9dzYtGKK3msr6bdwCiMPlsd9CNDhrg== dependencies: "@babel/runtime" "^7.24.5" clone "^2.1.2" @@ -2020,23 +2028,18 @@ spel2js "^0.2.8" sqlstring "^2.3.3" -"@react-awesome-query-builder/ui@^6.6.3": - version "6.6.3" - resolved "https://registry.yarnpkg.com/@react-awesome-query-builder/ui/-/ui-6.6.3.tgz#51b24d17a9dd2668211e9dac64fe02bb85e086c0" - integrity sha512-cuCKn8Mto5vTjfmvJrFiM/ETopLXcPnyQ2PKc8gt+dpfLs7UzYLWBF+V72aYMiPfAMA27Jf2+aPNEGD2x0LemA== +"@react-awesome-query-builder/ui@^6.5.2": + version "6.5.2" + resolved "https://registry.yarnpkg.com/@react-awesome-query-builder/ui/-/ui-6.5.2.tgz#3c19e1de5b686786aa454037100f0d8f5e7cc370" + integrity sha512-onex0K8Ji/nZC+LrR2z7WwuUvo/selzb9aphFBRgGbzrdjkavag68h6sf1tMdaNv1Fki2fuvQcl8q4glCkVOeg== dependencies: - "@react-awesome-query-builder/core" "^6.6.3" + "@react-awesome-query-builder/core" "^6.5.2" classnames "^2.5.1" lodash "^4.17.21" prop-types "^15.8.1" react-redux "^8.1.3" redux "^4.2.1" -"@rtsao/scc@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" - integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== - "@sinclair/typebox@^0.27.8": version "0.27.8" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" @@ -2100,9 +2103,9 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.20.6" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" - integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd" + integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== dependencies: "@babel/types" "^7.20.7" @@ -2154,9 +2157,9 @@ integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": - version "4.19.5" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz#218064e321126fcf9048d1ca25dd2465da55d9c6" - integrity sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg== + version "4.19.0" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz#3ae8ab3767d98d0b682cda063c3339e1e86ccfaa" + integrity sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ== dependencies: "@types/node" "*" "@types/qs" "*" @@ -2216,9 +2219,9 @@ integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== "@types/http-proxy@^1.17.8": - version "1.17.15" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.15.tgz#12118141ce9775a6499ecb4c01d02f90fc839d36" - integrity sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ== + version "1.17.14" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.14.tgz#57f8ccaa1c1c3780644f8a94f9c6b5000b5e2eec" + integrity sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w== dependencies: "@types/node" "*" @@ -2274,9 +2277,9 @@ integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/lodash@^4.14.191": - version "4.17.7" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.7.tgz#2f776bcb53adc9e13b2c0dfd493dfcbd7de43612" - integrity sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA== + version "4.17.1" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.1.tgz#0fabfcf2f2127ef73b119d98452bd317c4a17eb8" + integrity sha512-X+2qazGS3jxLAIz5JDXDzglAF3KpijdhFxlf/V1+hEsOUc+HnWi81L/uv/EvGuV90WY+7mPGFCUDGfQC3Gj95Q== "@types/long@^4.0.1": version "4.0.2" @@ -2325,16 +2328,16 @@ "@types/node" "*" "@types/node@*", "@types/node@>=13.7.0": - version "22.5.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.5.2.tgz#e42344429702e69e28c839a7e16a8262a8086793" - integrity sha512-acJsPTEqYqulZS/Yp/S3GgeE6GZ0qYODUR8aVr/DkhHQ8l9nd4j5x1/ZJy9/gHrRlFMqkO6i0I3E27Alu4jjPg== + version "20.12.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.11.tgz#c4ef00d3507000d17690643278a60dc55a9dc9be" + integrity sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw== dependencies: - undici-types "~6.19.2" + undici-types "~5.26.4" "@types/node@^18.0.3": - version "18.19.48" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.48.tgz#3a1696f4a7298d8831ed9ce47db62bf4c62c8880" - integrity sha512-7WevbG4ekUcRQSZzOwxWgi5dZmTak7FaxXDoW7xVxPBmKx1rTzfmRLkeCgJzcbBnOV2dkhAPc8cCeT6agocpjg== + version "18.19.33" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.33.tgz#98cd286a1b8a5e11aa06623210240bcc28e95c48" + integrity sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A== dependencies: undici-types "~5.26.4" @@ -2539,9 +2542,9 @@ integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== "@types/unist@^2", "@types/unist@^2.0.0", "@types/unist@^2.0.2": - version "2.0.11" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.11.tgz#11af57b127e32487774841f7a4e54eab166d03c4" - integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA== + version "2.0.10" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.10.tgz#04ffa7f406ab628f7f7e97ca23e290cd8ab15efc" + integrity sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA== "@types/use-sync-external-store@^0.0.3": version "0.0.3" @@ -2549,14 +2552,14 @@ integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA== "@types/webxr@*": - version "0.5.20" - resolved "https://registry.yarnpkg.com/@types/webxr/-/webxr-0.5.20.tgz#b16b681af314ec011b2e8221b0a072d691c04953" - integrity sha512-JGpU6qiIJQKUuVSKx1GtQnHJGxRjtfGIhzO2ilq43VZZS//f1h1Sgexbdk+Lq+7569a6EYhOWrUpIruR/1Enmg== + version "0.5.16" + resolved "https://registry.yarnpkg.com/@types/webxr/-/webxr-0.5.16.tgz#28955aa2d1197d1ef0b9826ae0f7e68f7eca0601" + integrity sha512-0E0Cl84FECtzrB4qG19TNTqpunw0F1YF0QZZnFMF6pDw1kNKJtrlTKlVB34stGIsHbZsYQ7H0tNjPfZftkHHoA== "@types/ws@^8.5.5": - version "8.5.12" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.12.tgz#619475fe98f35ccca2a2f6c137702d85ec247b7e" - integrity sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ== + version "8.5.10" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787" + integrity sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== dependencies: "@types/node" "*" @@ -2573,9 +2576,9 @@ "@types/yargs-parser" "*" "@types/yargs@^17.0.8": - version "17.0.33" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" - integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== + version "17.0.32" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" + integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== dependencies: "@types/yargs-parser" "*" @@ -2947,21 +2950,19 @@ acorn-walk@^7.1.1: integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== acorn-walk@^8.0.2: - version "8.3.3" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.3.tgz#9caeac29eefaa0c41e3d4c65137de4d6f34df43e" - integrity sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw== - dependencies: - acorn "^8.11.0" + version "8.3.2" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== acorn@^7.1.1: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.1.0, acorn@^8.11.0, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.1, acorn@^8.8.2, acorn@^8.9.0: - version "8.12.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" - integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== +acorn@^8.1.0, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.1, acorn@^8.8.2, acorn@^8.9.0: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== add-dom-event-listener@^1.1.0: version "1.1.0" @@ -3022,14 +3023,14 @@ ajv@^6.12.4, ajv@^6.12.5: uri-js "^4.2.2" ajv@^8.0.0, ajv@^8.0.1, ajv@^8.9.0: - version "8.17.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" - integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + version "8.13.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.13.0.tgz#a3939eaec9fb80d217ddf0c3376948c023f28c91" + integrity sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA== dependencies: fast-deep-equal "^3.1.3" - fast-uri "^3.0.1" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" + uri-js "^4.4.1" ansi-escapes@^4.2.1: version "4.3.2" @@ -3193,14 +3194,14 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -aria-query@~5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" - integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== +aria-query@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" + integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== dependencies: - deep-equal "^2.0.5" + dequal "^2.0.3" -array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: +array-buffer-byte-length@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== @@ -3213,7 +3214,7 @@ array-flatten@1.1.1: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -array-includes@^3.1.6, array-includes@^3.1.8: +array-includes@^3.1.6, array-includes@^3.1.7: version "3.1.8" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== @@ -3235,7 +3236,7 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.findlast@^1.2.5: +array.prototype.findlast@^1.2.4: version "1.2.5" resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== @@ -3247,7 +3248,7 @@ array.prototype.findlast@^1.2.5: es-object-atoms "^1.0.0" es-shim-unscopables "^1.0.2" -array.prototype.findlastindex@^1.2.5: +array.prototype.findlastindex@^1.2.3: version "1.2.5" resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== @@ -3292,15 +3293,25 @@ array.prototype.reduce@^1.0.6: es-object-atoms "^1.0.0" is-string "^1.0.7" -array.prototype.tosorted@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" - integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== +array.prototype.toreversed@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz#b989a6bf35c4c5051e1dc0325151bf8088954eba" + integrity sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA== dependencies: - call-bind "^1.0.7" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.tosorted@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz#c8c89348337e51b8a3c48a9227f9ce93ceedcba8" + integrity sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg== + dependencies: + call-bind "^1.0.5" define-properties "^1.2.1" - es-abstract "^1.23.3" - es-errors "^1.3.0" + es-abstract "^1.22.3" + es-errors "^1.1.0" es-shim-unscopables "^1.0.2" arraybuffer.prototype.slice@^1.0.3: @@ -3350,15 +3361,15 @@ asynckit@^0.4.0: integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== autoprefixer@^10.4.19: - version "10.4.20" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.20.tgz#5caec14d43976ef42e32dcb4bd62878e96be5b3b" - integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g== + version "10.4.19" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.19.tgz#ad25a856e82ee9d7898c59583c1afeb3fa65f89f" + integrity sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew== dependencies: - browserslist "^4.23.3" - caniuse-lite "^1.0.30001646" + browserslist "^4.23.0" + caniuse-lite "^1.0.30001599" fraction.js "^4.3.7" normalize-range "^0.1.2" - picocolors "^1.0.1" + picocolors "^1.0.0" postcss-value-parser "^4.2.0" available-typed-arrays@^1.0.7: @@ -3368,33 +3379,33 @@ available-typed-arrays@^1.0.7: dependencies: possible-typed-array-names "^1.0.0" -axe-core@^4.9.1: - version "4.10.0" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.10.0.tgz#d9e56ab0147278272739a000880196cdfe113b59" - integrity sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g== +axe-core@=4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.0.tgz#34ba5a48a8b564f67e103f0aa5768d76e15bbbbf" + integrity sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ== axios-retry@^4.0.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/axios-retry/-/axios-retry-4.5.0.tgz#441fdc32cedf63d6abd5de5d53db3667afd4c39b" - integrity sha512-aR99oXhpEDGo0UuAlYcn2iGRds30k366Zfa05XWScR9QaQD4JYiP3/1Qt1u7YlefUOK+cn0CcwoL1oefavQUlQ== + version "4.1.0" + resolved "https://registry.yarnpkg.com/axios-retry/-/axios-retry-4.1.0.tgz#aac5a9657213913048201152ef14090f7111608f" + integrity sha512-svdth4H00yhlsjBbjfLQ/sMLkXqeLxhiFC1nE1JtkN/CIssGxqk0UwTEdrVjwA2gr3yJkAulwvDSIm4z4HyPvg== dependencies: is-retry-allowed "^2.2.0" axios@^1.6.0: - version "1.7.7" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.7.tgz#2f554296f9892a72ac8d8e4c5b79c14a91d0a47f" - integrity sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q== + version "1.6.8" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" + integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== dependencies: follow-redirects "^1.15.6" form-data "^4.0.0" proxy-from-env "^1.1.0" -axobject-query@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.1.1.tgz#3b6e5c6d4e43ca7ba51c5babf99d22a9c68485e1" - integrity sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg== +axobject-query@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" + integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== dependencies: - deep-equal "^2.0.5" + dequal "^2.0.3" babel-jest@^29.7.0: version "29.7.0" @@ -3456,13 +3467,13 @@ babel-plugin-polyfill-corejs2@^0.4.10: "@babel/helper-define-polyfill-provider" "^0.6.2" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.10.6: - version "0.10.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz#2deda57caef50f59c525aeb4964d3b2f867710c7" - integrity sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA== +babel-plugin-polyfill-corejs3@^0.10.4: + version "0.10.4" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz#789ac82405ad664c20476d0233b485281deb9c77" + integrity sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.2" - core-js-compat "^3.38.0" + "@babel/helper-define-polyfill-provider" "^0.6.1" + core-js-compat "^3.36.1" babel-plugin-polyfill-regenerator@^0.6.1: version "0.6.2" @@ -3485,25 +3496,22 @@ babel-plugin-transform-import-meta@^2.2.1: tslib "^2.4.0" babel-preset-current-node-syntax@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz#9a929eafece419612ef4ae4f60b1862ebad8ef30" - integrity sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw== + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-import-attributes" "^7.24.7" - "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.8.3" babel-preset-jest@^29.6.3: version "29.6.3" @@ -3607,7 +3615,7 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.2, braces@^3.0.3, braces@~3.0.2: +braces@^3.0.2, braces@~3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== @@ -3619,15 +3627,15 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browserslist@^4.21.10, browserslist@^4.23.1, browserslist@^4.23.3: - version "4.23.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800" - integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA== +browserslist@^4.21.10, browserslist@^4.22.2, browserslist@^4.22.3, browserslist@^4.23.0: + version "4.23.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== dependencies: - caniuse-lite "^1.0.30001646" - electron-to-chromium "^1.5.4" - node-releases "^2.0.18" - update-browserslist-db "^1.1.0" + caniuse-lite "^1.0.30001587" + electron-to-chromium "^1.4.668" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" bser@2.1.1: version "2.1.1" @@ -3730,10 +3738,10 @@ camera-controls@^1.25.3: resolved "https://registry.yarnpkg.com/camera-controls/-/camera-controls-1.38.2.tgz#3289013e6de05cee51dc98af87d3fc7c1a7df585" integrity sha512-EfzbovxLssyWpJVG9uKcazSDDIEcd1hUsPhPF/OWWnICsKY9WbLY/2S4UPW73HHbvnVeR/Z9wsWaQKtANy/2Yg== -caniuse-lite@^1.0.30001646: - version "1.0.30001655" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz#0ce881f5a19a2dcfda2ecd927df4d5c1684b982f" - integrity sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg== +caniuse-lite@^1.0.30001587, caniuse-lite@^1.0.30001599: + version "1.0.30001617" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001617.tgz#809bc25f3f5027ceb33142a7d6c40759d7a901eb" + integrity sha512-mLyjzNI9I+Pix8zwcrpxEbGlfqOkF9kM3ptzmKNw5tizSyYwMe+nGLTqMK9cO+0E+Bh6TsBxNAaHWEM8xwSsmA== canvas@^2.8.0: version "2.11.2" @@ -3825,9 +3833,9 @@ character-reference-invalid@^2.0.0: integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw== chart.js@^4.3.0: - version "4.4.4" - resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-4.4.4.tgz#b682d2e7249f7a0cbb1b1d31c840266ae9db64b7" - integrity sha512-emICKGBABnxhMjUjlYRR12PmOXhJ2eJjEHL2/dZlWjxRAZT1D8xplLFq5M0tMQK8ja+wBS/tuVEJB5C6r7VxJA== + version "4.4.2" + resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-4.4.2.tgz#95962fa6430828ed325a480cc2d5f2b4e385ac31" + integrity sha512-6GD7iKwFpP5kbSD4MeRRRlTnQvxfQREy36uEtm1hzHzcOqwWx0YEHuspuoNlslu+nciLIB7fjjsHkUv/FzFcOg== dependencies: "@kurkle/color" "^0.3.0" @@ -3841,7 +3849,7 @@ check-links@^1.1.8: p-map "^2.0.0" p-memoize "^2.1.0" -"chokidar@>=3.0.0 <4.0.0", chokidar@^3.0.0, chokidar@^3.5.2, chokidar@^3.5.3, chokidar@^3.6.0: +"chokidar@>=3.0.0 <4.0.0", chokidar@^3.0.0, chokidar@^3.4.0, chokidar@^3.5.2, chokidar@^3.5.3: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== @@ -3862,9 +3870,9 @@ chownr@^2.0.0: integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== chrome-trace-event@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" - integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== ci-info@^3.2.0: version "3.9.0" @@ -3872,9 +3880,9 @@ ci-info@^3.2.0: integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== cjs-module-lexer@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.0.tgz#677de7ed7efff67cc40c9bf1897fea79d41b5215" - integrity sha512-N1NGmowPlGBLsOZLPvm48StN04V4YvQRL0i6b7ctrVY3epjP/ct7hFLOItz6pDIvRjwpfPxi52a2UWV2ziir8g== + version "1.3.1" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz#c485341ae8fd999ca4ee5af2d7a1c9ae01e0099c" + integrity sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q== classnames@2.x, classnames@^2.2.1, classnames@^2.2.3, classnames@^2.2.5, classnames@^2.2.6, classnames@^2.3.1, classnames@^2.3.2, classnames@^2.5.1: version "2.5.1" @@ -4060,10 +4068,10 @@ commander@^2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" - integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== +commander@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== commander@^8.3.0: version "8.3.0" @@ -4186,12 +4194,12 @@ copy-webpack-plugin@^11.0.0: schema-utils "^4.0.0" serialize-javascript "^6.0.0" -core-js-compat@^3.37.1, core-js-compat@^3.38.0: - version "3.38.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.38.1.tgz#2bc7a298746ca5a7bcb9c164bcb120f2ebc09a09" - integrity sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw== +core-js-compat@^3.31.0, core-js-compat@^3.36.1: + version "3.37.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.37.0.tgz#d9570e544163779bb4dff1031c7972f44918dc73" + integrity sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA== dependencies: - browserslist "^4.23.3" + browserslist "^4.23.0" core-js@^2.4.0: version "2.6.12" @@ -4255,12 +4263,12 @@ css-functions-list@^3.2.1: resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.2.2.tgz#9a54c6dd8416ed25c1079cd88234e927526c1922" integrity sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ== -css-has-pseudo@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-6.0.5.tgz#372e7293ef9bb901ec0bdce85a6fc1365012fa2c" - integrity sha512-ZTv6RlvJJZKp32jPYnAJVhowDCrRrHUTAxsYSuUPBEDJjzws6neMnzkRblxtgmv1RgcV5dhH2gn7E3wA9Wt6lw== +css-has-pseudo@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-6.0.3.tgz#babd8f208507d553b3986ee803b3adf4dd09c00e" + integrity sha512-qIsDxK/z0byH/mpNsv5hzQ5NOl8m1FRmOLgZpx4bG5uYHnOlO2XafeMI4mFIgNSViHwoUWcxSJZyyijaAmbs+A== dependencies: - "@csstools/selector-specificity" "^3.1.1" + "@csstools/selector-specificity" "^3.0.3" postcss-selector-parser "^6.0.13" postcss-value-parser "^4.2.0" @@ -4348,10 +4356,10 @@ css-what@^6.0.1: resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== -cssdb@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-8.1.0.tgz#ad25cac6ac0dbc4f23693e09baa65cdd3ef7160a" - integrity sha512-BQN57lfS4dYt2iL0LgyrlDbefZKEtUyrO8rbzrbGrqBk6OoyNTQLF+porY9DrpDBjLo4NEvj2IJttC7vf3x+Ew== +cssdb@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-8.0.0.tgz#7fdaea83364f6c9edc364e7681ebef644a327d3d" + integrity sha512-hfpm8VXc7/dhcEWpLvKDLwImOSk1sa2DxL36OEiY/4h2MGfKjPYIMZo4hnEEl+TCJr2GwcX46jF5TafRASDe9w== cssesc@^3.0.0: version "3.0.0" @@ -4475,9 +4483,9 @@ data-view-byte-offset@^1.0.0: is-data-view "^1.0.1" dayjs@^1.11.10, dayjs@^1.11.4: - version "1.11.13" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c" - integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg== + version "1.11.11" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.11.tgz#dfe0e9d54c5f8b68ccf8ca5f72ac603e7e5ed59e" + integrity sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg== debug@2.6.9: version "2.6.9" @@ -4486,14 +4494,7 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4, debug@^4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" - integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== - dependencies: - ms "2.1.2" - -debug@4.3.4: +debug@4, debug@4.3.4, debug@^4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -4561,30 +4562,6 @@ deep-diff@^0.3.5: resolved "https://registry.yarnpkg.com/deep-diff/-/deep-diff-0.3.8.tgz#c01de63efb0eec9798801d40c7e0dae25b582c84" integrity sha512-yVn6RZmHiGnxRKR9sJb3iVV2XTF1Ghh2DiWRZ3dMnGc43yUdWWF/kX6lQyk3+P84iprfWKU/8zFTrlkvtFm1ug== -deep-equal@^2.0.5: - version "2.2.3" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.3.tgz#af89dafb23a396c7da3e862abc0be27cf51d56e1" - integrity sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.5" - es-get-iterator "^1.1.3" - get-intrinsic "^1.2.2" - is-arguments "^1.1.1" - is-array-buffer "^3.0.2" - is-date-object "^1.0.5" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - isarray "^2.0.5" - object-is "^1.1.5" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - side-channel "^1.0.4" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.13" - deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -4657,7 +4634,7 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== -dequal@^2.0.0: +dequal@^2.0.0, dequal@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== @@ -4857,10 +4834,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.5.4: - version "1.5.13" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz#1abf0410c5344b2b829b7247e031f02810d442e6" - integrity sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q== +electron-to-chromium@^1.4.668: + version "1.4.761" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.761.tgz#d1bdf8c50a254f8a756641bb1ac48bb52e4d0ec3" + integrity sha512-PIbxpiJGx6Bb8dQaonNc6CGTRlVntdLg/2nMa1YhnrwYOORY9a3ZgGN0UQYE6lAcj/lkyduJN7BPt/JiY+jAQQ== emittery@^0.13.1: version "0.13.1" @@ -4931,7 +4908,7 @@ error-stack-parser@^2.0.2, error-stack-parser@^2.0.6: dependencies: stackframe "^1.3.4" -es-abstract@^1.17.2, es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: +es-abstract@^1.17.2, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: version "1.23.3" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== @@ -4995,27 +4972,12 @@ es-define-property@^1.0.0: dependencies: get-intrinsic "^1.2.4" -es-errors@^1.2.1, es-errors@^1.3.0: +es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-get-iterator@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" - integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - has-symbols "^1.0.3" - is-arguments "^1.1.1" - is-map "^2.0.2" - is-set "^2.0.2" - is-string "^1.0.7" - isarray "^2.0.5" - stop-iteration-iterator "^1.0.0" - -es-iterator-helpers@^1.0.19: +es-iterator-helpers@^1.0.15, es-iterator-helpers@^1.0.17: version "1.0.19" resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz#117003d0e5fec237b4b5c08aded722e0c6d50ca8" integrity sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw== @@ -5036,9 +4998,9 @@ es-iterator-helpers@^1.0.19: safe-array-concat "^1.1.2" es-module-lexer@^1.2.1: - version "1.5.4" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.4.tgz#a8efec3a3da991e60efa6b633a7cad6ab8d26b78" - integrity sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw== + version "1.5.2" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.2.tgz#00b423304f2500ac59359cc9b6844951f372d497" + integrity sha512-l60ETUTmLqbVbVHv1J4/qj+M8nq7AwMzEcg3kmJDt9dCNrTk+yHcYFf/Kw75pMDwd9mPcIGCG5LcS20SxYRzFA== es-object-atoms@^1.0.0: version "1.0.0" @@ -5078,9 +5040,9 @@ es6-error@^4.0.1: integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== escalade@^3.1.1, escalade@^3.1.2: - version "3.2.0" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" - integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== escape-html@~1.0.3: version "1.0.3" @@ -5162,10 +5124,10 @@ eslint-import-resolver-node@^0.3.9: is-core-module "^2.13.0" resolve "^1.22.4" -eslint-module-utils@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.9.0.tgz#95d4ac038a68cd3f63482659dffe0883900eb342" - integrity sha512-McVbYmwA3NEKwRQY5g4aWMdcZE5xZxV8i8l7CqJSrameuGSQJtSWaL/LxTEzSKKaCcOhlpDR8XEfYXWPrdo/ZQ== +eslint-module-utils@^2.8.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz#52f2404300c3bd33deece9d7372fb337cc1d7c34" + integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q== dependencies: debug "^3.2.7" @@ -5177,26 +5139,25 @@ eslint-plugin-cypress@^2.11.2: globals "^13.20.0" eslint-plugin-import@^2.22.1: - version "2.30.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz#21ceea0fc462657195989dd780e50c92fe95f449" - integrity sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw== + version "2.29.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" + integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== dependencies: - "@rtsao/scc" "^1.1.0" - array-includes "^3.1.8" - array.prototype.findlastindex "^1.2.5" + array-includes "^3.1.7" + array.prototype.findlastindex "^1.2.3" array.prototype.flat "^1.3.2" array.prototype.flatmap "^1.3.2" debug "^3.2.7" doctrine "^2.1.0" eslint-import-resolver-node "^0.3.9" - eslint-module-utils "^2.9.0" - hasown "^2.0.2" - is-core-module "^2.15.1" + eslint-module-utils "^2.8.0" + hasown "^2.0.0" + is-core-module "^2.13.1" is-glob "^4.0.3" minimatch "^3.1.2" - object.fromentries "^2.0.8" - object.groupby "^1.0.3" - object.values "^1.2.0" + object.fromentries "^2.0.7" + object.groupby "^1.0.1" + object.values "^1.1.7" semver "^6.3.1" tsconfig-paths "^3.15.0" @@ -5208,26 +5169,26 @@ eslint-plugin-jest@^26.5.3: "@typescript-eslint/utils" "^5.10.0" eslint-plugin-jsx-a11y@^6.3.1: - version "6.9.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.9.0.tgz#67ab8ff460d4d3d6a0b4a570e9c1670a0a8245c8" - integrity sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g== + version "6.8.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz#2fa9c701d44fcd722b7c771ec322432857fcbad2" + integrity sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA== dependencies: - aria-query "~5.1.3" - array-includes "^3.1.8" + "@babel/runtime" "^7.23.2" + aria-query "^5.3.0" + array-includes "^3.1.7" array.prototype.flatmap "^1.3.2" ast-types-flow "^0.0.8" - axe-core "^4.9.1" - axobject-query "~3.1.1" + axe-core "=4.7.0" + axobject-query "^3.2.1" damerau-levenshtein "^1.0.8" emoji-regex "^9.2.2" - es-iterator-helpers "^1.0.19" - hasown "^2.0.2" + es-iterator-helpers "^1.0.15" + hasown "^2.0.0" jsx-ast-utils "^3.3.5" language-tags "^1.0.9" minimatch "^3.1.2" - object.fromentries "^2.0.8" - safe-regex-test "^1.0.3" - string.prototype.includes "^2.0.0" + object.entries "^1.1.7" + object.fromentries "^2.0.7" eslint-plugin-no-unsanitized@^3.0.2: version "3.2.0" @@ -5240,28 +5201,28 @@ eslint-plugin-react-hooks@^4.6.0: integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== eslint-plugin-react@^7.33.2: - version "7.35.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.35.1.tgz#afc80387031aa99dd6e0a14437c77d02e5700b47" - integrity sha512-B5ok2JgbaaWn/zXbKCGgKDNL2tsID3Pd/c/yvjcpsd9HQDwyYc/TQv3AZMmOvrJgCs3AnYNUHRCQEMMQAYJ7Yg== + version "7.34.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz#6806b70c97796f5bbfb235a5d3379ece5f4da997" + integrity sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw== dependencies: - array-includes "^3.1.8" - array.prototype.findlast "^1.2.5" + array-includes "^3.1.7" + array.prototype.findlast "^1.2.4" array.prototype.flatmap "^1.3.2" - array.prototype.tosorted "^1.1.4" + array.prototype.toreversed "^1.1.2" + array.prototype.tosorted "^1.1.3" doctrine "^2.1.0" - es-iterator-helpers "^1.0.19" + es-iterator-helpers "^1.0.17" estraverse "^5.3.0" - hasown "^2.0.2" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.1.2" - object.entries "^1.1.8" - object.fromentries "^2.0.8" - object.values "^1.2.0" + object.entries "^1.1.7" + object.fromentries "^2.0.7" + object.hasown "^1.1.3" + object.values "^1.1.7" prop-types "^15.8.1" resolve "^2.0.0-next.5" semver "^6.3.1" - string.prototype.matchall "^4.0.11" - string.prototype.repeat "^1.0.0" + string.prototype.matchall "^4.0.10" eslint-plugin-security@^1.4.0: version "1.7.1" @@ -5355,9 +5316,9 @@ esprima@^4.0.0, esprima@^4.0.1: integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.4.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" - integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== dependencies: estraverse "^5.1.0" @@ -5492,9 +5453,9 @@ extend@^3.0.0: integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== fabric@^5.2.1: - version "5.4.0" - resolved "https://registry.yarnpkg.com/fabric/-/fabric-5.4.0.tgz#314d0b31e6ae0c4b2b097dc5ed7fb0bd57cc79e5" - integrity sha512-jI2W6GBt6iUp9oZBswYfYPqDGiT/Xg8uw0Wr9+9zx5cyXTB5Xz1C600LFTi9pfHPwuD10+ChkYMI9pXQN/HkTA== + version "5.3.0" + resolved "https://registry.yarnpkg.com/fabric/-/fabric-5.3.0.tgz#199297b6409e3a6279c16c1166da2b2a9e3e8b9b" + integrity sha512-AVayKuzWoXM5cTn7iD3yNWBlfEa8r1tHaOe2g8NsZrmWKAHjryTxT/j6f9ncRfOWOF0I1Ci1AId3y78cC+GExQ== optionalDependencies: canvas "^2.8.0" jsdom "^19.0.0" @@ -5530,11 +5491,6 @@ fast-levenshtein@^2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== -fast-uri@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.1.tgz#cddd2eecfc83a71c1be2cc2ef2061331be8a7134" - integrity sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw== - fastest-levenshtein@^1.0.12, fastest-levenshtein@^1.0.16: version "1.0.16" resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" @@ -5770,7 +5726,7 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.6: +function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== @@ -5810,7 +5766,7 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== @@ -6383,9 +6339,9 @@ husky@^6.0.0: integrity sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ== i18next@^23.11.5: - version "23.14.0" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-23.14.0.tgz#d415a858390cc849f3db0df539cb2bbfe24a3cdb" - integrity sha512-Y5GL4OdA8IU2geRrt2+Uc1iIhsjICdHZzT9tNwQ3TVqdNzgxHToGCKf/TPRP80vTCAP6svg2WbbJL+Gx5MFQVA== + version "23.11.5" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-23.11.5.tgz#d71eb717a7e65498d87d0594f2664237f9e361ef" + integrity sha512-41pvpVbW9rhZPk5xjCX2TPJi2861LEig/YRhUkY+1FQ2IQPS0bKUDYnEqY8XPPbB48h1uIwLnP9iiEfuSl20CA== dependencies: "@babel/runtime" "^7.23.2" @@ -6414,19 +6370,24 @@ ignore-by-default@^1.0.1: integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== ignore@^5.0.0, ignore@^5.2.0, ignore@^5.2.4: - version "5.3.2" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" - integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== immediate@~3.0.5: version "3.0.6" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== -immutable@^4.0.0, immutable@^4.3.6: - version "4.3.7" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.7.tgz#c70145fc90d89fb02021e65c84eb0226e4e5a381" - integrity sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw== +immutable@^4.0.0: + version "4.3.5" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.5.tgz#f8b436e66d59f99760dc577f5c99a4fd2a5cc5a0" + integrity sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw== + +immutable@^4.3.6: + version "4.3.6" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.6.tgz#6a05f7858213238e587fb83586ffa3b4b27f0447" + integrity sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ== import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" @@ -6442,9 +6403,9 @@ import-lazy@^4.0.0: integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== import-local@^3.0.2: - version "3.2.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" - integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== dependencies: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" @@ -6492,7 +6453,7 @@ inline-style-parser@0.1.1: resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== -internal-slot@^1.0.4, internal-slot@^1.0.7: +internal-slot@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== @@ -6559,15 +6520,7 @@ is-alphanumerical@^2.0.0: is-alphabetical "^2.0.0" is-decimal "^2.0.0" -is-arguments@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: +is-array-buffer@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== @@ -6619,12 +6572,12 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.13.0, is-core-module@^2.15.1, is-core-module@^2.5.0: - version "2.15.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" - integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== +is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.5.0: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: - hasown "^2.0.2" + hasown "^2.0.0" is-data-view@^1.0.1: version "1.0.1" @@ -6718,7 +6671,7 @@ is-ip@^3.1.0: dependencies: ip-regex "^4.0.0" -is-map@^2.0.2, is-map@^2.0.3: +is-map@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== @@ -6812,7 +6765,7 @@ is-retry-allowed@^2.2.0: resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz#88f34cbd236e043e71b6932d09b0c65fb7b4d71d" integrity sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg== -is-set@^2.0.2, is-set@^2.0.3: +is-set@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== @@ -6951,9 +6904,9 @@ istanbul-lib-instrument@^5.0.4: semver "^6.3.0" istanbul-lib-instrument@^6.0.0: - version "6.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz#fa15401df6c15874bcb2105f773325d78c666765" - integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q== + version "6.0.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz#91655936cf7380e4e473383081e38478b69993b1" + integrity sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw== dependencies: "@babel/core" "^7.23.9" "@babel/parser" "^7.23.9" @@ -7419,9 +7372,9 @@ jest@^29.5.0: jest-cli "^29.7.0" jiti@^1.20.0: - version "1.21.6" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.6.tgz#6c7f7398dd4b3142767f9a168af2f317a428d268" - integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w== + version "1.21.0" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" + integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== js-base64@^3.7.2: version "3.7.7" @@ -7539,9 +7492,9 @@ json-buffer@3.0.1: integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== json-logic-js@^2.0.1, json-logic-js@^2.0.2: - version "2.0.5" - resolved "https://registry.yarnpkg.com/json-logic-js/-/json-logic-js-2.0.5.tgz#55f0c687dd6f56b02ccdcfdd64171ed998ab5499" - integrity sha512-rTT2+lqcuUmj4DgWfmzupZqQDA64AdmYqizzMPWj3DxGdfFNsxPpcNVSaTj4l8W2tG/+hg7/mQhxjU3aPacO6g== + version "2.0.2" + resolved "https://registry.yarnpkg.com/json-logic-js/-/json-logic-js-2.0.2.tgz#b613e095f5e598cb78f7b9a2bbf638e74cf98158" + integrity sha512-ZBtBdMJieqQcH7IX/LaBsr5pX+Y5JIW+EhejtM3Ffg2jdN9Iwf+Ht6TbHnvAZ/YtwyuhPaCBlnvzrwVeWdvGDQ== json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" @@ -7642,9 +7595,9 @@ known-css-properties@^0.29.0: integrity sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ== language-subtag-registry@^0.3.20: - version "0.3.23" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz#23529e04d9e3b74679d70142df3fd2eb6ec572e7" - integrity sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ== + version "0.3.22" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" + integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== language-tags@^1.0.9: version "1.0.9" @@ -7654,9 +7607,9 @@ language-tags@^1.0.9: language-subtag-registry "^0.3.20" launch-editor@^2.6.0: - version "2.8.2" - resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.8.2.tgz#939e1b3469f9d5471e4eaacedd51b3b7c45352cd" - integrity sha512-eF5slEUZXmi6WvFzI3dYcv+hA24/iKnROf24HztcURJpSz9RBmBgz5cNCVOeguouf1llrwy6Yctl4C4HM+xI8g== + version "2.6.1" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.1.tgz#f259c9ef95cbc9425620bbbd14b468fcdb4ffe3c" + integrity sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw== dependencies: picocolors "^1.0.0" shell-quote "^1.8.1" @@ -7932,9 +7885,9 @@ lowercase-keys@^2.0.0: integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== lru-cache@*: - version "11.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.0.0.tgz#15d93a196f189034d7166caf9fe55e7384c98a21" - integrity sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA== + version "10.2.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" + integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== lru-cache@^5.1.1: version "5.1.1" @@ -8679,7 +8632,7 @@ micromark@^3.0.0: micromark-util-types "^1.0.1" uvu "^0.5.0" -micromatch@4.0.5: +micromatch@4.0.5, micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -8687,24 +8640,11 @@ micromatch@4.0.5: braces "^3.0.2" picomatch "^2.3.1" -micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.8" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" - integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== - dependencies: - braces "^3.0.3" - picomatch "^2.3.1" - -mime-db@1.52.0: +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -"mime-db@>= 1.43.0 < 2": - version "1.53.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.53.0.tgz#3cb63cd820fc29896d9d4e8c32ab4fcd74ccb447" - integrity sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg== - mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" @@ -8851,9 +8791,9 @@ multicast-dns@^7.2.5: thunky "^1.0.2" nan@^2.17.0: - version "2.20.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.20.0.tgz#08c5ea813dd54ed16e5bd6505bf42af4f7838ca3" - integrity sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw== + version "2.19.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.19.0.tgz#bb58122ad55a6c5bc973303908d5b16cfdd5a8c0" + integrity sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw== nanoid@^3.3.7: version "3.3.7" @@ -8907,15 +8847,15 @@ node-preload@^0.2.1: dependencies: process-on-spawn "^1.0.0" -node-releases@^2.0.18: - version "2.0.18" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" - integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== nodemon@^3.0.1: - version "3.1.4" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.4.tgz#c34dcd8eb46a05723ccde60cbdd25addcc8725e4" - integrity sha512-wjPBbFhtpJwmIeY2yP7QF+UKzPfltVGtfce1g/bB15/8vCGZj8uxD62b/b9M9/WVgme0NZudpownKN+c0plXlQ== + version "3.1.0" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.0.tgz#ff7394f2450eb6a5e96fe4180acd5176b29799c9" + integrity sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA== dependencies: chokidar "^3.5.2" debug "^4" @@ -8935,6 +8875,13 @@ nopt@^5.0.0: dependencies: abbrev "1" +nopt@~1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== + dependencies: + abbrev "1" + normalize-package-data@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" @@ -9004,9 +8951,9 @@ nth-check@^2.0.0, nth-check@^2.0.1: boolbase "^1.0.0" nwsapi@^2.2.0, nwsapi@^2.2.2: - version "2.2.12" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.12.tgz#fb6af5c0ec35b27b4581eb3bbad34ec9e5c696f8" - integrity sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w== + version "2.2.9" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.9.tgz#7f3303218372db2e9f27c27766bcfc59ae7e61c6" + integrity sha512-2f3F0SEEer8bBu0dsNCFF50N0cTThV1nWFYcEYFZttdW0lDAoybv9cQoK7X7/68Z89S7FoRrVjP1LPX4XRf9vg== nyc@^15.1.0: version "15.1.0" @@ -9047,17 +8994,9 @@ object-assign@4.x, object-assign@^4.1.1: integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-inspect@^1.13.1: - version "1.13.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" - integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== - -object-is@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" - integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== object-keys@^1.1.1: version "1.1.1" @@ -9074,7 +9013,7 @@ object.assign@^4.1.2, object.assign@^4.1.4, object.assign@^4.1.5: has-symbols "^1.0.3" object-keys "^1.1.1" -object.entries@^1.1.2, object.entries@^1.1.5, object.entries@^1.1.8: +object.entries@^1.1.2, object.entries@^1.1.5, object.entries@^1.1.7: version "1.1.8" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== @@ -9083,7 +9022,7 @@ object.entries@^1.1.2, object.entries@^1.1.5, object.entries@^1.1.8: define-properties "^1.2.1" es-object-atoms "^1.0.0" -object.fromentries@^2.0.8: +object.fromentries@^2.0.7: version "2.0.8" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== @@ -9106,7 +9045,7 @@ object.getownpropertydescriptors@^2.1.0: gopd "^1.0.1" safe-array-concat "^1.1.2" -object.groupby@^1.0.3: +object.groupby@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== @@ -9115,7 +9054,16 @@ object.groupby@^1.0.3: define-properties "^1.2.1" es-abstract "^1.23.2" -object.values@^1.1.0, object.values@^1.1.6, object.values@^1.2.0: +object.hasown@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.4.tgz#e270ae377e4c120cdcb7656ce66884a6218283dc" + integrity sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg== + dependencies: + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + +object.values@^1.1.0, object.values@^1.1.6, object.values@^1.1.7: version "1.2.0" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== @@ -9472,10 +9420,10 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== -picocolors@^1.0.0, picocolors@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.0.tgz#5358b76a78cde483ba5cef6a9dc9671440b27d59" - integrity sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw== +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" @@ -9547,15 +9495,15 @@ postcss-clamp@^4.1.0: dependencies: postcss-value-parser "^4.2.0" -postcss-color-functional-notation@^6.0.14: - version "6.0.14" - resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.14.tgz#958d8fc434fafbb15ebc7964053f19d366773078" - integrity sha512-dNUX+UH4dAozZ8uMHZ3CtCNYw8fyFAmqqdcyxMr7PEdM9jLXV19YscoYO0F25KqZYhmtWKQ+4tKrIZQrwzwg7A== +postcss-color-functional-notation@^6.0.11: + version "6.0.11" + resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.11.tgz#6219b4762519115a397b870707c1a9926ecb52f6" + integrity sha512-gJ+hAtAsgBF4w7eh28Pg7EA60lx7vE5xO/B/yZawaI6FYHky+5avA9YSe73nJHnAMEVFpCMeJc6Wts5g+niksg== dependencies: - "@csstools/css-color-parser" "^2.0.4" - "@csstools/css-parser-algorithms" "^2.7.1" - "@csstools/css-tokenizer" "^2.4.1" - "@csstools/postcss-progressive-custom-properties" "^3.3.0" + "@csstools/css-color-parser" "^2.0.2" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" + "@csstools/postcss-progressive-custom-properties" "^3.2.0" "@csstools/utilities" "^1.0.0" postcss-color-hex-alpha@^9.0.4: @@ -9574,36 +9522,36 @@ postcss-color-rebeccapurple@^9.0.3: "@csstools/utilities" "^1.0.0" postcss-value-parser "^4.2.0" -postcss-custom-media@^10.0.8: - version "10.0.8" - resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-10.0.8.tgz#0b84916522eb1e8a4b9e3ecd2bce292844cd7323" - integrity sha512-V1KgPcmvlGdxTel4/CyQtBJEFhMVpEmRGFrnVtgfGIHj5PJX9vO36eFBxKBeJn+aCDTed70cc+98Mz3J/uVdGQ== +postcss-custom-media@^10.0.6: + version "10.0.6" + resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-10.0.6.tgz#e194ad7c9190390c20515d45661e9dcaaf031e84" + integrity sha512-BjihQoIO4Wjqv9fQNExSJIim8UAmkhLxuJnhJsLTRFSba1y1MhxkJK5awsM//6JJ+/Tu5QUxf624RQAvKHv6SA== dependencies: - "@csstools/cascade-layer-name-parser" "^1.0.13" - "@csstools/css-parser-algorithms" "^2.7.1" - "@csstools/css-tokenizer" "^2.4.1" - "@csstools/media-query-list-parser" "^2.1.13" + "@csstools/cascade-layer-name-parser" "^1.0.11" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" + "@csstools/media-query-list-parser" "^2.1.11" -postcss-custom-properties@^13.3.12: - version "13.3.12" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-13.3.12.tgz#e21960c7d13aed960b28236412d4da67f75317b0" - integrity sha512-oPn/OVqONB2ZLNqN185LDyaVByELAA/u3l2CS2TS16x2j2XsmV4kd8U49+TMxmUsEU9d8fB/I10E6U7kB0L1BA== +postcss-custom-properties@^13.3.10: + version "13.3.10" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-13.3.10.tgz#72a47708e6123f7757e419ad6f0bccb5f7a7ea6d" + integrity sha512-ejaalIpl7p0k0L5ngIZ86AZGmp3m1KdeOCbSQTK4gQcB1ncaoPTHorw206+tsZRIhIDYvh5ZButEje6740YDXw== dependencies: - "@csstools/cascade-layer-name-parser" "^1.0.13" - "@csstools/css-parser-algorithms" "^2.7.1" - "@csstools/css-tokenizer" "^2.4.1" + "@csstools/cascade-layer-name-parser" "^1.0.11" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" "@csstools/utilities" "^1.0.0" postcss-value-parser "^4.2.0" -postcss-custom-selectors@^7.1.12: - version "7.1.12" - resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-7.1.12.tgz#4d1bac2469003aad3aa3d73481a1b7a45290852b" - integrity sha512-ctIoprBMJwByYMGjXG0F7IT2iMF2hnamQ+aWZETyBM0aAlyaYdVZTeUkk8RB+9h9wP+NdN3f01lfvKl2ZSqC0g== +postcss-custom-selectors@^7.1.10: + version "7.1.10" + resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-7.1.10.tgz#caf0b4f2bccdfe9b106b000a56a1b50b8e48df92" + integrity sha512-bV/6+IExyT2J4kMzX6c+ZMlN1xDfjcC4ePr1ywKezcTgwgUn11qQN3jdzFBpo8Dk1K7vO/OYOwMb5AtJP4JZcg== dependencies: - "@csstools/cascade-layer-name-parser" "^1.0.13" - "@csstools/css-parser-algorithms" "^2.7.1" - "@csstools/css-tokenizer" "^2.4.1" - postcss-selector-parser "^6.1.0" + "@csstools/cascade-layer-name-parser" "^1.0.11" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" + postcss-selector-parser "^6.0.13" postcss-dir-pseudo-class@^8.0.1: version "8.0.1" @@ -9612,12 +9560,12 @@ postcss-dir-pseudo-class@^8.0.1: dependencies: postcss-selector-parser "^6.0.13" -postcss-double-position-gradients@^5.0.7: - version "5.0.7" - resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.7.tgz#1a4841daf7ac04e94de4672282e8d02d1b3dd274" - integrity sha512-1xEhjV9u1s4l3iP5lRt1zvMjI/ya8492o9l/ivcxHhkO3nOz16moC4JpMxDUGrOs4R3hX+KWT7gKoV842cwRgg== +postcss-double-position-gradients@^5.0.6: + version "5.0.6" + resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.6.tgz#fec69371a131b67ec92740bcf8c9ad6ce7f168d3" + integrity sha512-QJ+089FKMaqDxOhhIHsJrh4IP7h4PIHNC5jZP5PMmnfUScNu8Hji2lskqpFWCvu+5sj+2EJFyzKd13sLEWOZmQ== dependencies: - "@csstools/postcss-progressive-custom-properties" "^3.3.0" + "@csstools/postcss-progressive-custom-properties" "^3.2.0" "@csstools/utilities" "^1.0.0" postcss-value-parser "^4.2.0" @@ -9653,15 +9601,15 @@ postcss-image-set-function@^6.0.3: "@csstools/utilities" "^1.0.0" postcss-value-parser "^4.2.0" -postcss-lab-function@^6.0.19: - version "6.0.19" - resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-6.0.19.tgz#09b04c016bfbacd8576988a73dc19c0fdbeae2c4" - integrity sha512-vwln/mgvFrotJuGV8GFhpAOu9iGf3pvTBr6dLPDmUcqVD5OsQpEFyQMAFTxSxWXGEzBj6ld4pZ/9GDfEpXvo0g== +postcss-lab-function@^6.0.16: + version "6.0.16" + resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-6.0.16.tgz#08f5939ffc74803fcb20b7553d4eb3b3b873786c" + integrity sha512-QWv0VxfjgIl8jBR/wuQcm/o31jn4P/LwzYuVKzNQoO5t7HPcU0d3RfWUiDrHN3frmSv+YYZppr3P81tKFTDyqg== dependencies: - "@csstools/css-color-parser" "^2.0.4" - "@csstools/css-parser-algorithms" "^2.7.1" - "@csstools/css-tokenizer" "^2.4.1" - "@csstools/postcss-progressive-custom-properties" "^3.3.0" + "@csstools/css-color-parser" "^2.0.2" + "@csstools/css-parser-algorithms" "^2.6.3" + "@csstools/css-tokenizer" "^2.3.1" + "@csstools/postcss-progressive-custom-properties" "^3.2.0" "@csstools/utilities" "^1.0.0" postcss-loader@^7.3.3: @@ -9713,14 +9661,14 @@ postcss-modules-values@^4.0.0: dependencies: icss-utils "^5.0.0" -postcss-nesting@^12.1.5: - version "12.1.5" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-12.1.5.tgz#e5e2dc1d63e6166c194da45aa28c04d4024db98f" - integrity sha512-N1NgI1PDCiAGWPTYrwqm8wpjv0bgDmkYHH72pNsqTCv9CObxjxftdYu6AKtGN+pnJa7FQjMm3v4sp8QJbFsYdQ== +postcss-nesting@^12.1.2: + version "12.1.2" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-12.1.2.tgz#e7aba3f73b86a0e944e84798d481b54dcfce802e" + integrity sha512-FUmTHGDNundodutB4PUBxt/EPuhgtpk8FJGRsBhOuy+6FnkR2A8RZWIsyyy6XmhvX2DZQQWIkvu+HB4IbJm+Ew== dependencies: "@csstools/selector-resolve-nested" "^1.1.0" - "@csstools/selector-specificity" "^3.1.1" - postcss-selector-parser "^6.1.0" + "@csstools/selector-specificity" "^3.0.3" + postcss-selector-parser "^6.0.13" postcss-opacity-percentage@^2.0.0: version "2.0.0" @@ -9747,64 +9695,63 @@ postcss-place@^9.0.1: postcss-value-parser "^4.2.0" postcss-preset-env@^9.0.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-9.6.0.tgz#da5fc8606f95092b2788c3bdf6d4fc053e50075b" - integrity sha512-Lxfk4RYjUdwPCYkc321QMdgtdCP34AeI94z+/8kVmqnTIlD4bMRQeGcMZgwz8BxHrzQiFXYIR5d7k/9JMs2MEA== - dependencies: - "@csstools/postcss-cascade-layers" "^4.0.6" - "@csstools/postcss-color-function" "^3.0.19" - "@csstools/postcss-color-mix-function" "^2.0.19" - "@csstools/postcss-content-alt-text" "^1.0.0" - "@csstools/postcss-exponential-functions" "^1.0.9" + version "9.5.11" + resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-9.5.11.tgz#ffb824b75987bbab647a8e1e3590c9ea904fb35c" + integrity sha512-rPFnftk1vQAaR45UmsuXhKd/IZrTj39dIc4usu8qbfxyNevHnG+FB8E50U7vs0v2OxBqBt5u0J5+cwb4newzGA== + dependencies: + "@csstools/postcss-cascade-layers" "^4.0.4" + "@csstools/postcss-color-function" "^3.0.16" + "@csstools/postcss-color-mix-function" "^2.0.16" + "@csstools/postcss-exponential-functions" "^1.0.7" "@csstools/postcss-font-format-keywords" "^3.0.2" - "@csstools/postcss-gamut-mapping" "^1.0.11" - "@csstools/postcss-gradients-interpolation-method" "^4.0.20" - "@csstools/postcss-hwb-function" "^3.0.18" - "@csstools/postcss-ic-unit" "^3.0.7" + "@csstools/postcss-gamut-mapping" "^1.0.9" + "@csstools/postcss-gradients-interpolation-method" "^4.0.17" + "@csstools/postcss-hwb-function" "^3.0.15" + "@csstools/postcss-ic-unit" "^3.0.6" "@csstools/postcss-initial" "^1.0.1" - "@csstools/postcss-is-pseudo-class" "^4.0.8" - "@csstools/postcss-light-dark-function" "^1.0.8" + "@csstools/postcss-is-pseudo-class" "^4.0.6" + "@csstools/postcss-light-dark-function" "^1.0.5" "@csstools/postcss-logical-float-and-clear" "^2.0.1" "@csstools/postcss-logical-overflow" "^1.0.1" "@csstools/postcss-logical-overscroll-behavior" "^1.0.1" "@csstools/postcss-logical-resize" "^2.0.1" - "@csstools/postcss-logical-viewport-units" "^2.0.11" - "@csstools/postcss-media-minmax" "^1.1.8" - "@csstools/postcss-media-queries-aspect-ratio-number-values" "^2.0.11" + "@csstools/postcss-logical-viewport-units" "^2.0.9" + "@csstools/postcss-media-minmax" "^1.1.6" + "@csstools/postcss-media-queries-aspect-ratio-number-values" "^2.0.9" "@csstools/postcss-nested-calc" "^3.0.2" "@csstools/postcss-normalize-display-values" "^3.0.2" - "@csstools/postcss-oklab-function" "^3.0.19" - "@csstools/postcss-progressive-custom-properties" "^3.3.0" - "@csstools/postcss-relative-color-syntax" "^2.0.19" + "@csstools/postcss-oklab-function" "^3.0.16" + "@csstools/postcss-progressive-custom-properties" "^3.2.0" + "@csstools/postcss-relative-color-syntax" "^2.0.16" "@csstools/postcss-scope-pseudo-class" "^3.0.1" - "@csstools/postcss-stepped-value-functions" "^3.0.10" - "@csstools/postcss-text-decoration-shorthand" "^3.0.7" - "@csstools/postcss-trigonometric-functions" "^3.0.10" + "@csstools/postcss-stepped-value-functions" "^3.0.8" + "@csstools/postcss-text-decoration-shorthand" "^3.0.6" + "@csstools/postcss-trigonometric-functions" "^3.0.8" "@csstools/postcss-unset-value" "^3.0.1" autoprefixer "^10.4.19" - browserslist "^4.23.1" + browserslist "^4.22.3" css-blank-pseudo "^6.0.2" - css-has-pseudo "^6.0.5" + css-has-pseudo "^6.0.3" css-prefers-color-scheme "^9.0.1" - cssdb "^8.1.0" + cssdb "^8.0.0" postcss-attribute-case-insensitive "^6.0.3" postcss-clamp "^4.1.0" - postcss-color-functional-notation "^6.0.14" + postcss-color-functional-notation "^6.0.11" postcss-color-hex-alpha "^9.0.4" postcss-color-rebeccapurple "^9.0.3" - postcss-custom-media "^10.0.8" - postcss-custom-properties "^13.3.12" - postcss-custom-selectors "^7.1.12" + postcss-custom-media "^10.0.6" + postcss-custom-properties "^13.3.10" + postcss-custom-selectors "^7.1.10" postcss-dir-pseudo-class "^8.0.1" - postcss-double-position-gradients "^5.0.7" + postcss-double-position-gradients "^5.0.6" postcss-focus-visible "^9.0.1" postcss-focus-within "^8.0.1" postcss-font-variant "^5.0.0" postcss-gap-properties "^5.0.1" postcss-image-set-function "^6.0.3" - postcss-lab-function "^6.0.19" + postcss-lab-function "^6.0.16" postcss-logical "^7.0.1" - postcss-nesting "^12.1.5" + postcss-nesting "^12.1.2" postcss-opacity-percentage "^2.0.0" postcss-overflow-shorthand "^5.0.1" postcss-page-break "^3.0.4" @@ -9826,9 +9773,9 @@ postcss-replace-overflow-wrap@^4.0.0: integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== postcss-resolve-nested-selector@^0.1.1: - version "0.1.6" - resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz#3d84dec809f34de020372c41b039956966896686" - integrity sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw== + version "0.1.1" + resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" + integrity sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw== postcss-safe-parser@^6.0.0: version "6.0.0" @@ -9847,10 +9794,10 @@ postcss-selector-not@^7.0.2: dependencies: postcss-selector-parser "^6.0.13" -postcss-selector-parser@^6.0.13, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.1.0: - version "6.1.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" - integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== +postcss-selector-parser@^6.0.13, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: + version "6.0.16" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz#3b88b9f5c5abd989ef4e2fc9ec8eedd34b20fb04" + integrity sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" @@ -9861,12 +9808,12 @@ postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== postcss@8, postcss@^8.4.28, postcss@^8.4.33: - version "8.4.44" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.44.tgz#d56834ef6508610ba224bb22b2457b2169ed0480" - integrity sha512-Aweb9unOEpQ3ezu4Q00DPvvM2ZTUitJdNKeP/+uQgr1IBIqu574IaZoURId7BKtWMREwzKa9OgzPzezWGPWFQw== + version "8.4.38" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" + integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== dependencies: nanoid "^3.3.7" - picocolors "^1.0.1" + picocolors "^1.0.0" source-map-js "^1.2.0" prelude-ls@^1.2.1: @@ -10024,9 +9971,9 @@ q@^1.1.2: integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== qrcode.react@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/qrcode.react/-/qrcode.react-3.2.0.tgz#97daabd4ff641a3f3c678f87be106ebc55f9cd07" - integrity sha512-YietHHltOHA4+l5na1srdaMx4sVSOjV9tamHs+mwiLWAMr6QVACRUw1Neax5CptFILcNoITctJY0Ipyn5enQ8g== + version "3.1.0" + resolved "https://registry.yarnpkg.com/qrcode.react/-/qrcode.react-3.1.0.tgz#5c91ddc0340f768316fbdb8fff2765134c2aecd8" + integrity sha512-oyF+Urr3oAMUG/OiOuONL3HXM+53wvuH3mtIWQrYmsXoAq0DkvZp2RYUWFSMFtbdOpuS++9v+WAkzNVkMlNW6Q== qs@6.11.0: version "6.11.0" @@ -10239,13 +10186,13 @@ rc-menu@~9.13.0: rc-util "^5.27.0" rc-motion@^2.0.0, rc-motion@^2.0.1, rc-motion@^2.3.0, rc-motion@^2.3.4, rc-motion@^2.4.3, rc-motion@^2.4.4, rc-motion@^2.6.1, rc-motion@^2.6.2, rc-motion@^2.9.0: - version "2.9.2" - resolved "https://registry.yarnpkg.com/rc-motion/-/rc-motion-2.9.2.tgz#f7c6d480250df8a512d0cfdce07ff3da906958cf" - integrity sha512-fUAhHKLDdkAXIDLH0GYwof3raS58dtNUmzLF2MeiR8o6n4thNpSDQhOqQzWE4WfFZDCi9VEN8n7tiB7czREcyw== + version "2.9.0" + resolved "https://registry.yarnpkg.com/rc-motion/-/rc-motion-2.9.0.tgz#9e18a1b8d61e528a97369cf9a7601e9b29205710" + integrity sha512-XIU2+xLkdIr1/h6ohPZXyPBMvOmuyFZQ/T0xnawz+Rh+gh4FINcnZmMT5UTIj6hgI0VLDjTaPeRd+smJeSPqiQ== dependencies: "@babel/runtime" "^7.11.1" classnames "^2.2.1" - rc-util "^5.43.0" + rc-util "^5.21.0" rc-notification@~5.4.0: version "5.4.0" @@ -10277,9 +10224,9 @@ rc-pagination@~4.0.4: rc-util "^5.38.0" rc-picker@^4.5.0: - version "4.6.14" - resolved "https://registry.yarnpkg.com/rc-picker/-/rc-picker-4.6.14.tgz#86f6836794a593a54b929cfde201f42f02ef85b0" - integrity sha512-7DuTfUFdkxmsNpWQ0TWv6FPGna5e6KKC4nxtx3x9xhumLz7jb3fhlDdWQvqEL6tpt9DOb1+N5j+wB+lDOSS9kg== + version "4.6.5" + resolved "https://registry.yarnpkg.com/rc-picker/-/rc-picker-4.6.5.tgz#f9155c8eb3fef6a08157541199ead5fb6b54409b" + integrity sha512-kxei2AgsK+kimg+pO12dDeBk3q31cZxGpkzo+O2pv2dXpPze8AI76fyR2PsilrTx8EvIwjZ66q3azkZOrjib8A== dependencies: "@babel/runtime" "^7.24.7" "@rc-component/trigger" "^2.0.0" @@ -10338,10 +10285,23 @@ rc-segmented@~2.3.0: rc-motion "^2.4.4" rc-util "^5.17.0" -rc-select@~14.13.0, rc-select@~14.13.3: - version "14.13.4" - resolved "https://registry.yarnpkg.com/rc-select/-/rc-select-14.13.4.tgz#b9fcc54c125bef968cf4428d6f7d7b4483f2e87d" - integrity sha512-nXFsS53RxCP6ePeKhOj3gvgdNpTqdQnNKhipGrV/z+pB3Md5heGfV72YX5Wfb1A7Ca1QkbVTPFLJh+A8WYFOSA== +rc-select@~14.13.0: + version "14.13.2" + resolved "https://registry.yarnpkg.com/rc-select/-/rc-select-14.13.2.tgz#f44149439cf8e048e41d67955b8ad65809ed3c4d" + integrity sha512-Xwt5ZcS5PKGR6bJL/dBRH6AFtC8FgVu2a+2T8NuyldhppKZlmZREK3nc5gONf+VlN+IbCxbr6vivgkbdPZJYng== + dependencies: + "@babel/runtime" "^7.10.1" + "@rc-component/trigger" "^2.1.1" + classnames "2.x" + rc-motion "^2.0.1" + rc-overflow "^1.3.1" + rc-util "^5.16.1" + rc-virtual-list "^3.5.2" + +rc-select@~14.13.3: + version "14.13.3" + resolved "https://registry.yarnpkg.com/rc-select/-/rc-select-14.13.3.tgz#51d62d68464874fdbbb976fb0462b81ab8043817" + integrity sha512-AMEfdE40RhlqahMGN3Q7OKVd1txNph0zIn2Xpvn0ZJiUYafCsqoGv+Rj6v1umgm8ZOEAJ3LefnkznAYNMMzACg== dependencies: "@babel/runtime" "^7.10.1" "@rc-component/trigger" "^2.1.1" @@ -10379,16 +10339,16 @@ rc-switch@~4.1.0: rc-util "^5.30.0" rc-table@~7.45.5: - version "7.45.7" - resolved "https://registry.yarnpkg.com/rc-table/-/rc-table-7.45.7.tgz#f7c509e05c677a30ad5b212750122da6f5318004" - integrity sha512-wi9LetBL1t1csxyGkMB2p3mCiMt+NDexMlPbXHvQFmBBAsMxrgNSAPwUci2zDLUq9m8QdWc1Nh8suvrpy9mXrg== + version "7.45.5" + resolved "https://registry.yarnpkg.com/rc-table/-/rc-table-7.45.5.tgz#677e82e311486ba770e5c40673521156f0c1a372" + integrity sha512-R5sOfToOk7CalSkebZpqM8lkKWOJR7uXPGEhjjTSoj5egyHBwMxaACoPj2oI+6qLSll9yZrG5K+8HTN57b2Ahg== dependencies: "@babel/runtime" "^7.10.1" "@rc-component/context" "^1.4.0" classnames "^2.2.5" rc-resize-observer "^1.1.0" rc-util "^5.37.0" - rc-virtual-list "^3.14.2" + rc-virtual-list "^3.11.1" "rc-tabs@~15.0.0 ": version "15.0.0" @@ -10435,9 +10395,9 @@ rc-tree-select@~5.20.0: rc-util "^5.16.1" rc-tree@~5.8.1, rc-tree@~5.8.7: - version "5.8.8" - resolved "https://registry.yarnpkg.com/rc-tree/-/rc-tree-5.8.8.tgz#650a13ec825a5a4feec6bbaf6a380465986ee0db" - integrity sha512-S+mCMWo91m5AJqjz3PdzKilGgbFm7fFJRFiTDOcoRbD7UfMOPnerXwMworiga0O2XIo383UoWuEfeHs1WOltag== + version "5.8.7" + resolved "https://registry.yarnpkg.com/rc-tree/-/rc-tree-5.8.7.tgz#79fe560eca8a998a5cd866cdf374ffc3643754f1" + integrity sha512-cpsIQZ4nNYwpj6cqPRt52e/69URuNdgQF9wZ10InmEf8W3+i0A41OVmZWwHuX9gegQSqj+DPmaDkZFKQZ+ZV1w== dependencies: "@babel/runtime" "^7.10.1" classnames "2.x" @@ -10465,7 +10425,15 @@ rc-util@^4.15.3: react-lifecycles-compat "^3.0.4" shallowequal "^1.1.0" -rc-util@^5.0.1, rc-util@^5.16.1, rc-util@^5.17.0, rc-util@^5.18.1, rc-util@^5.2.0, rc-util@^5.20.1, rc-util@^5.21.0, rc-util@^5.24.4, rc-util@^5.24.5, rc-util@^5.25.2, rc-util@^5.27.0, rc-util@^5.28.0, rc-util@^5.30.0, rc-util@^5.31.1, rc-util@^5.32.2, rc-util@^5.34.1, rc-util@^5.35.0, rc-util@^5.36.0, rc-util@^5.37.0, rc-util@^5.38.0, rc-util@^5.38.1, rc-util@^5.39.3, rc-util@^5.43.0, rc-util@^5.9.4: +rc-util@^5.0.1, rc-util@^5.16.1, rc-util@^5.17.0, rc-util@^5.18.1, rc-util@^5.2.0, rc-util@^5.20.1, rc-util@^5.21.0, rc-util@^5.24.4, rc-util@^5.24.5, rc-util@^5.25.2, rc-util@^5.27.0, rc-util@^5.28.0, rc-util@^5.30.0, rc-util@^5.31.1, rc-util@^5.32.2, rc-util@^5.34.1, rc-util@^5.35.0, rc-util@^5.36.0, rc-util@^5.37.0, rc-util@^5.38.0, rc-util@^5.38.1, rc-util@^5.39.3, rc-util@^5.9.4: + version "5.39.3" + resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-5.39.3.tgz#79c7253cff7c71175b772e8242ca66459c1512eb" + integrity sha512-j9wOELkLQ8gC/NkUg3qg9mHZcJf+5mYYv40JrDHqnaf8VSycji4pCf7kJ5fdTXQPDIF0vr5zpb/T2HdrMs9rWA== + dependencies: + "@babel/runtime" "^7.18.3" + react-is "^18.2.0" + +rc-util@^5.43.0: version "5.43.0" resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-5.43.0.tgz#bba91fbef2c3e30ea2c236893746f3e9b05ecc4c" integrity sha512-AzC7KKOXFqAdIBqdGWepL9Xn7cm3vnAmjlHqUnoQaTMZYhM4VlXGLkkHHxj/BZ7Td0+SOPKB4RGPboBVKT9htw== @@ -10473,10 +10441,10 @@ rc-util@^5.0.1, rc-util@^5.16.1, rc-util@^5.17.0, rc-util@^5.18.1, rc-util@^5.2. "@babel/runtime" "^7.18.3" react-is "^18.2.0" -rc-virtual-list@^3.14.2, rc-virtual-list@^3.5.1, rc-virtual-list@^3.5.2: - version "3.14.5" - resolved "https://registry.yarnpkg.com/rc-virtual-list/-/rc-virtual-list-3.14.5.tgz#593cd13fe05eabf4ad098329704a30c77701869e" - integrity sha512-ZMOnkCLv2wUN8Jz7yI4XiSLa9THlYvf00LuMhb1JlsQCewuU7ydPuHw1rGVPhe9VZYl/5UqODtNd7QKJ2DMGfg== +rc-virtual-list@^3.11.1, rc-virtual-list@^3.5.1, rc-virtual-list@^3.5.2: + version "3.11.5" + resolved "https://registry.yarnpkg.com/rc-virtual-list/-/rc-virtual-list-3.11.5.tgz#d4ba3bbd8e7ceae846f575a7d982d061ace1e76e" + integrity sha512-iZRW99m5jAxtwKNPLwUrPryurcnKpXBdTyhuBp6ythf7kg/otKO5cCiIvL55GQwU0QGSlouQS0tnkciRMJUwRQ== dependencies: "@babel/runtime" "^7.20.0" classnames "^2.2.6" @@ -10820,7 +10788,7 @@ regexp-tree@~0.1.1: resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd" integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== -regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.2: +regexp.prototype.flags@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== @@ -11784,9 +11752,9 @@ reusify@^1.0.4: integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rfdc@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" - integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== + version "1.3.1" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.1.tgz#2b6d4df52dffe8bb346992a10ea9451f24373a8f" + integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg== rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" @@ -11862,9 +11830,9 @@ sass-loader@^10.0.0: semver "^7.3.2" sass@^1.42.1: - version "1.77.8" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.77.8.tgz#9f18b449ea401759ef7ec1752a16373e296b52bd" - integrity sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ== + version "1.77.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.77.0.tgz#e736c69aff9fae4a4e6dae60a979eee9c942f321" + integrity sha512-eGj4HNfXqBWtSnvItNkn7B6icqH14i3CiCGbzMKs3BAPTq62pp9NBYsBgyN4cA+qssqo9r26lW4JSvlaUUWbgw== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" @@ -11955,9 +11923,9 @@ semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4: - version "7.6.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + version "7.6.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.1.tgz#60bfe090bf907a25aa8119a72b9f90ef7ca281b2" + integrity sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA== send@0.18.0: version "0.18.0" @@ -12236,9 +12204,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.20" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz#e44ed19ed318dd1e5888f93325cee800f0f51b89" - integrity sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw== + version "3.0.17" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz#887da8aa73218e51a1d917502d79863161a93f9c" + integrity sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg== spdy-transport@^3.0.0: version "3.0.0" @@ -12305,13 +12273,6 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== -stop-iteration-iterator@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" - integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== - dependencies: - internal-slot "^1.0.4" - store@^2.0.12: version "2.0.12" resolved "https://registry.yarnpkg.com/store/-/store-2.0.12.tgz#8c534e2a0b831f72b75fc5f1119857c44ef5d593" @@ -12353,15 +12314,7 @@ string-width@^5.0.0, string-width@^5.0.1: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string.prototype.includes@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.includes/-/string.prototype.includes-2.0.0.tgz#8986d57aee66d5460c144620a6d873778ad7289f" - integrity sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - -string.prototype.matchall@^4.0.11: +string.prototype.matchall@^4.0.10: version "4.0.11" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz#1092a72c59268d2abaad76582dccc687c0297e0a" integrity sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg== @@ -12379,14 +12332,6 @@ string.prototype.matchall@^4.0.11: set-function-name "^2.0.2" side-channel "^1.0.6" -string.prototype.repeat@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz#e90872ee0308b29435aa26275f6e1b762daee01a" - integrity sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - string.prototype.trim@^1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" @@ -12596,10 +12541,10 @@ stylelint@^15.10.2: table "^6.8.1" write-file-atomic "^5.0.1" -stylis@^4.3.3: - version "4.3.4" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.3.4.tgz#ca5c6c4a35c4784e4e93a2a24dc4e9fa075250a4" - integrity sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now== +stylis@^4.0.13: + version "4.3.2" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.3.2.tgz#8f76b70777dd53eb669c6f58c997bf0a9972e444" + integrity sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg== supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" @@ -12630,9 +12575,9 @@ supports-color@^8.0.0: has-flag "^4.0.0" supports-hyperlinks@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-3.1.0.tgz#b56150ff0173baacc15f21956450b61f2b18d3ac" - integrity sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A== + version "3.0.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz#c711352a5c89070779b4dad54c05a2f14b15c94b" + integrity sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA== dependencies: has-flag "^4.0.0" supports-color "^7.0.0" @@ -12752,9 +12697,9 @@ terser-webpack-plugin@^5.3.10: terser "^5.26.0" terser@^5.10.0, terser@^5.26.0: - version "5.31.6" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.6.tgz#c63858a0f0703988d0266a82fcbf2d7ba76422b1" - integrity sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg== + version "5.31.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.0.tgz#06eef86f17007dbad4593f11a574c7f5eb02c6a1" + integrity sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -12781,9 +12726,9 @@ three@^0.156.1: integrity sha512-kP7H0FK9d/k6t/XvQ9FO6i+QrePoDcNhwl0I02+wmUJRNSLCUIDMcfObnzQvxb37/0Uc9TDT0T1HgsRRrO6SYQ== throttle-debounce@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-5.0.2.tgz#ec5549d84e053f043c9fd0f2a6dd892ff84456b1" - integrity sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A== + version "5.0.0" + resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-5.0.0.tgz#a17a4039e82a2ed38a5e7268e4132d6960d41933" + integrity sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg== thunky@^1.0.2: version "1.1.0" @@ -12851,9 +12796,11 @@ toidentifier@1.0.1: integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== touch@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.1.tgz#097a23d7b161476435e5c1344a95c0f75b4a5694" - integrity sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" + integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== + dependencies: + nopt "~1.0.10" tough-cookie@^4.0.0, tough-cookie@^4.1.2: version "4.1.4" @@ -12918,9 +12865,9 @@ tslib@^1.8.1: integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.0.3, tslib@^2.4.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" - integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== tsutils@^3.21.0: version "3.21.0" @@ -13049,9 +12996,9 @@ typescript@5.0.2: integrity sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw== typescript@>=3.0.1: - version "5.5.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" - integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== + version "5.4.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" + integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== unbox-primitive@^1.0.2: version "1.0.2" @@ -13073,11 +13020,6 @@ undici-types@~5.26.4: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== -undici-types@~6.19.2: - version "6.19.8" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" - integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== - unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" @@ -13299,15 +13241,15 @@ unquote@~1.1.1: resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" integrity sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg== -update-browserslist-db@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" - integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ== +update-browserslist-db@^1.0.13: + version "1.0.15" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.15.tgz#60ed9f8cba4a728b7ecf7356f641a31e3a691d97" + integrity sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA== dependencies: escalade "^3.1.2" - picocolors "^1.0.1" + picocolors "^1.0.0" -uri-js@^4.2.2: +uri-js@^4.2.2, uri-js@^4.4.1: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== @@ -13375,9 +13317,9 @@ uvu@^0.5.0: sade "^1.7.3" v8-to-istanbul@^9.0.1: - version "9.3.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175" - integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA== + version "9.2.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" + integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== dependencies: "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" @@ -13513,9 +13455,9 @@ warning@^4.0.3: loose-envify "^1.0.0" watchpack@^2.4.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.2.tgz#2feeaed67412e7c33184e5a79ca738fbd38564da" - integrity sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw== + version "2.4.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.1.tgz#29308f2cac150fa8e4c92f90e0ec954a9fed7fff" + integrity sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" @@ -13713,12 +13655,12 @@ which-boxed-primitive@^1.0.2: is-symbol "^1.0.3" which-builtin-type@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.4.tgz#592796260602fc3514a1b5ee7fa29319b72380c3" - integrity sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w== + version "1.1.3" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" + integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== dependencies: - function.prototype.name "^1.1.6" - has-tostringtag "^1.0.2" + function.prototype.name "^1.1.5" + has-tostringtag "^1.0.0" is-async-function "^2.0.0" is-date-object "^1.0.5" is-finalizationregistry "^1.0.2" @@ -13727,10 +13669,10 @@ which-builtin-type@^1.1.3: is-weakref "^1.0.2" isarray "^2.0.5" which-boxed-primitive "^1.0.2" - which-collection "^1.0.2" - which-typed-array "^1.1.15" + which-collection "^1.0.1" + which-typed-array "^1.1.9" -which-collection@^1.0.1, which-collection@^1.0.2: +which-collection@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== @@ -13745,7 +13687,7 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== -which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.15: +which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.9: version "1.1.15" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== @@ -13854,9 +13796,9 @@ write-file-atomic@^5.0.1: signal-exit "^4.0.1" ws@^8.11.0, ws@^8.13.0, ws@^8.2.3: - version "8.18.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" - integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== + version "8.17.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" + integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== xml-name-validator@^4.0.0: version "4.0.0" From 9d989642a60f6e707b3bde2875748a08c221c03a Mon Sep 17 00:00:00 2001 From: Boris Sekachev Date: Tue, 3 Sep 2024 13:35:46 +0300 Subject: [PATCH 57/79] Minor updates --- .../20240826_093730_klakhov_support_quality_plugin.md | 2 +- cvat-core/src/api-implementation.ts | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/changelog.d/20240826_093730_klakhov_support_quality_plugin.md b/changelog.d/20240826_093730_klakhov_support_quality_plugin.md index 69d5e326e7c..2b9324c2deb 100644 --- a/changelog.d/20240826_093730_klakhov_support_quality_plugin.md +++ b/changelog.d/20240826_093730_klakhov_support_quality_plugin.md @@ -10,5 +10,5 @@ ### Added -- Quality management tab on `quality control` allowing to enable/disable GT frames +- Quality management tab on `quality control` allows to enabling/disabling GT frames () diff --git a/cvat-core/src/api-implementation.ts b/cvat-core/src/api-implementation.ts index 449e55b6080..88a14dc99e3 100644 --- a/cvat-core/src/api-implementation.ts +++ b/cvat-core/src/api-implementation.ts @@ -520,9 +520,8 @@ export default function implementAPI(cvat: CVATCore): CVATCore { const settings = await serverProxy.analytics.quality.settings.get(params); const schema = await getServerAPISchema(); const descriptions = convertDescriptions(schema.components.schemas.QualitySettings.properties); - return new QualitySettings({ - ...settings, descriptions, - }); + + return new QualitySettings({ ...settings, descriptions }); }); implementationMixin(cvat.analytics.performance.reports, async (filter: AnalyticsReportFilter) => { checkFilter(filter, { From b66971e73beb1eea3e9fcd7bd59e8c9b257d53b7 Mon Sep 17 00:00:00 2001 From: Boris Sekachev Date: Wed, 4 Sep 2024 12:21:21 +0300 Subject: [PATCH 58/79] cvat-core refactoring --- cvat-core/src/annotations.ts | 83 +++++++++++++++++-------- cvat-core/src/api-implementation.ts | 14 +---- cvat-core/src/frames.ts | 22 ++++--- cvat-core/src/session-implementation.ts | 16 ++--- 4 files changed, 80 insertions(+), 55 deletions(-) diff --git a/cvat-core/src/annotations.ts b/cvat-core/src/annotations.ts index f9b51139d0e..db596444af1 100644 --- a/cvat-core/src/annotations.ts +++ b/cvat-core/src/annotations.ts @@ -11,34 +11,42 @@ import AnnotationsHistory from './annotations-history'; import { checkObjectType } from './common'; import Project from './project'; import { Task, Job } from './session'; -import { ScriptingError, ArgumentError } from './exceptions'; +import { ArgumentError } from './exceptions'; import { getDeletedFrames } from './frames'; import { JobType } from './enums'; -type WeakMapItem = { collection: AnnotationsCollection, saver: AnnotationsSaver, history: AnnotationsHistory }; -const jobCache = new WeakMap(); -const taskCache = new WeakMap(); +const jobCollectionCache = new WeakMap(); +const taskCollectionCache = new WeakMap(); -function getCache(sessionType): WeakMap { - if (sessionType === 'task') { - return taskCache; - } +// save history separately as not all history actions are related to annotations (e.g. delete, restore frame are not) +const jobHistoryCache = new WeakMap(); +const taskHistoryCache = new WeakMap(); - if (sessionType === 'job') { - return jobCache; +function getCache(sessionType: 'task' | 'job'): { + collection: typeof jobCollectionCache & typeof taskCollectionCache, + history: typeof jobHistoryCache & typeof jobHistoryCache +} { + if (sessionType === 'task') { + return { + collection: taskCollectionCache, + history: taskHistoryCache, + }; } - throw new ScriptingError(`Unknown session type was received ${sessionType}`); + return { + collection: jobCollectionCache, + history: jobHistoryCache, + }; } class InstanceNotInitializedError extends Error {} -function getSession(session): WeakMapItem { +export function getCollection(session): AnnotationsCollection { const sessionType = session instanceof Task ? 'task' : 'job'; - const cache = getCache(sessionType); + const { collection } = getCache(sessionType); - if (cache.has(session)) { - return cache.get(session); + if (collection.has(session)) { + return collection.get(session).collection; } throw new InstanceNotInitializedError( @@ -46,23 +54,37 @@ function getSession(session): WeakMapItem { ); } -export function getCollection(session): AnnotationsCollection { - return getSession(session).collection; -} - export function getSaver(session): AnnotationsSaver { - return getSession(session).saver; + const sessionType = session instanceof Task ? 'task' : 'job'; + const { collection } = getCache(sessionType); + + if (collection.has(session)) { + return collection.get(session).saver; + } + + throw new InstanceNotInitializedError( + 'Session has not been initialized yet. Call annotations.get() or annotations.clear({ reload: true }) before', + ); } export function getHistory(session): AnnotationsHistory { - return getSession(session).history; + const sessionType = session instanceof Task ? 'task' : 'job'; + const { history } = getCache(sessionType); + + if (history.has(session)) { + return history.get(session); + } + + const initiatedHistory = new AnnotationsHistory(); + history.set(session, initiatedHistory); + return initiatedHistory; } async function getAnnotationsFromServer(session: Job | Task): Promise { const sessionType = session instanceof Task ? 'task' : 'job'; const cache = getCache(sessionType); - if (!cache.has(session)) { + if (!cache.collection.has(session)) { const serializedAnnotations = await serverProxy.annotations.getAnnotations(sessionType, session.id); // Get meta information about frames @@ -74,7 +96,7 @@ async function getAnnotationsFromServer(session: Job | Task): Promise { } frameMeta.deleted_frames = await getDeletedFrames(sessionType, session.id); - const history = new AnnotationsHistory(); + const history = cache.history.has(session) ? cache.history.get(session) : new AnnotationsHistory(); const collection = new AnnotationsCollection({ labels: session.labels, history, @@ -87,7 +109,8 @@ async function getAnnotationsFromServer(session: Job | Task): Promise { // eslint-disable-next-line no-unsanitized/method collection.import(serializedAnnotations); const saver = new AnnotationsSaver(serializedAnnotations.version, collection, session); - cache.set(session, { collection, saver, history }); + cache.collection.set(session, { collection, saver }); + cache.history.set(session, history); } } @@ -95,8 +118,12 @@ export function clearCache(session): void { const sessionType = session instanceof Task ? 'task' : 'job'; const cache = getCache(sessionType); - if (cache.has(session)) { - cache.delete(session); + if (cache.collection.has(session)) { + cache.collection.delete(session); + } + + if (cache.history.has(session)) { + cache.history.delete(session); } } @@ -125,7 +152,9 @@ export async function clearAnnotations( checkObjectType('reload', reload, 'boolean', null); if (reload) { - cache.delete(session); + cache.collection.delete(session); + // delete history as it may relate to objects from collection we deleted above + cache.history.delete(session); return getAnnotationsFromServer(session); } } diff --git a/cvat-core/src/api-implementation.ts b/cvat-core/src/api-implementation.ts index 88a14dc99e3..0e9f400ad49 100644 --- a/cvat-core/src/api-implementation.ts +++ b/cvat-core/src/api-implementation.ts @@ -37,7 +37,7 @@ import { import QualityReport from './quality-report'; import QualityConflict, { ConflictSeverity } from './quality-conflict'; import QualitySettings from './quality-settings'; -import { FramesMetaData, getJobMeta } from './frames'; +import { getFramesMeta } from './frames'; import AnalyticsReport from './analytics-report'; import { listActions, registerAction, runActions } from './annotations-actions'; import { convertDescriptions, getServerAPISchema } from './server-schema'; @@ -556,16 +556,8 @@ export default function implementAPI(cvat: CVATCore): CVATCore { const params = fieldsToSnakeCase(body); await serverProxy.analytics.performance.calculate(params, onUpdate); }); - implementationMixin(cvat.frames.getMeta, async (type, id) => { - if (type === 'task') { - const result = await serverProxy.frames.getMeta(type, id); - return new FramesMetaData({ - ...result, - deleted_frames: Object.fromEntries(result.deleted_frames.map((_frame) => [_frame, true])), - }); - } - - const result = await getJobMeta(id, { reload: true }); + implementationMixin(cvat.frames.getMeta, async (type: 'job' | 'task', id: number) => { + const result = await getFramesMeta(type, id); return result; }); diff --git a/cvat-core/src/frames.ts b/cvat-core/src/frames.ts index e955d54f6d7..cf03d25f18c 100644 --- a/cvat-core/src/frames.ts +++ b/cvat-core/src/frames.ts @@ -435,19 +435,27 @@ Object.defineProperty(FrameData.prototype.data, 'implementation', { writable: false, }); -export async function getJobMeta(jobID: number, { reload } = { reload: false }): Promise { - if (!frameMetaCache[jobID] || reload) { - frameMetaCache[jobID] = serverProxy.frames.getMeta('job', jobID) +export async function getFramesMeta(type: 'job' | 'task', id: number, forceReload = false): Promise { + if (type === 'task') { + // we do not cache task meta currently. So, each new call will results to the server request + const result = await serverProxy.frames.getMeta('task', id); + return new FramesMetaData({ + ...result, + deleted_frames: Object.fromEntries(result.deleted_frames.map((_frame) => [_frame, true])), + }); + } + if (!frameMetaCache[id] || forceReload) { + frameMetaCache[id] = serverProxy.frames.getMeta('job', id) .then((serverMeta) => new FramesMetaData({ ...serverMeta, deleted_frames: Object.fromEntries(serverMeta.deleted_frames.map((_frame) => [_frame, true])), })) .catch((error) => { - delete frameMetaCache[jobID]; + delete frameMetaCache[id]; throw error; }); } - return frameMetaCache[jobID]; + return frameMetaCache[id]; } async function saveJobMeta(meta: FramesMetaData, jobID: number): Promise { @@ -588,7 +596,7 @@ export async function getFrame( ): Promise { if (!(jobID in frameDataCache)) { const blockType = chunkType === 'video' ? BlockType.MP4VIDEO : BlockType.ARCHIVE; - const meta = await getJobMeta(jobID); + const meta = await getFramesMeta('job', jobID); const mean = meta.frames.reduce((a, b) => a + b.width * b.height, 0) / meta.frames.length; const stdDev = Math.sqrt( @@ -680,7 +688,7 @@ export async function findFrame( jobID: number, frameFrom: number, frameTo: number, filters: { offset?: number, notDeleted: boolean }, ): Promise { const offset = filters.offset || 1; - const meta = await getJobMeta(jobID); + const meta = await getFramesMeta('job', jobID); const sign = Math.sign(frameTo - frameFrom); const predicate = sign > 0 ? (frame) => frame <= frameTo : (frame) => frame >= frameTo; diff --git a/cvat-core/src/session-implementation.ts b/cvat-core/src/session-implementation.ts index 224a9ef0fd2..96c8bb02be6 100644 --- a/cvat-core/src/session-implementation.ts +++ b/cvat-core/src/session-implementation.ts @@ -44,11 +44,9 @@ async function deleteFrameWrapper(jobID, frame): Promise { }; await redo(); - try { - getHistory(this).do(HistoryActions.REMOVED_FRAME, async () => { - restoreFrame(jobID, frame); - }, redo, [], frame); - } catch (error) { /* empty */ } + getHistory(this).do(HistoryActions.REMOVED_FRAME, async () => { + restoreFrame(jobID, frame); + }, redo, [], frame); } async function restoreFrameWrapper(jobID, frame): Promise { @@ -57,11 +55,9 @@ async function restoreFrameWrapper(jobID, frame): Promise { }; await redo(); - try { - getHistory(this).do(HistoryActions.RESTORED_FRAME, async () => { - deleteFrame(jobID, frame); - }, redo, [], frame); - } catch (error) { /* empty */ } + getHistory(this).do(HistoryActions.RESTORED_FRAME, async () => { + deleteFrame(jobID, frame); + }, redo, [], frame); } export function implementJob(Job: typeof JobClass): typeof JobClass { From 54d7601a89d2737598e6bfad4e5089870955e32a Mon Sep 17 00:00:00 2001 From: Boris Sekachev Date: Wed, 4 Sep 2024 12:48:29 +0300 Subject: [PATCH 59/79] Refactoring adding a gt task --- cvat-core/src/session-implementation.ts | 31 +++++++++---------------- cvat-core/src/session.ts | 28 ++++++---------------- cvat-ui/src/actions/tasks-actions.ts | 20 ++++++++-------- 3 files changed, 28 insertions(+), 51 deletions(-) diff --git a/cvat-core/src/session-implementation.ts b/cvat-core/src/session-implementation.ts index 96c8bb02be6..d94b4269687 100644 --- a/cvat-core/src/session-implementation.ts +++ b/cvat-core/src/session-implementation.ts @@ -64,7 +64,7 @@ export function implementJob(Job: typeof JobClass): typeof JobClass { Object.defineProperty(Job.prototype.save, 'implementation', { value: async function saveImplementation( this: JobClass, - fields: any, + fields: Parameters[0], ): ReturnType { if (this.id) { const jobData = { @@ -618,15 +618,19 @@ export function implementTask(Task: typeof TaskClass): typeof TaskClass { Object.defineProperty(Task.prototype.save, 'implementation', { value: async function saveImplementation( this: TaskClass, - options: Parameters[0], + fields: Parameters[0], + options: Parameters[1], ): ReturnType { if (typeof this.id !== 'undefined') { // If the task has been already created, we update it - const taskData = this._updateTrigger.getUpdated(this, { - bugTracker: 'bug_tracker', - projectId: 'project_id', - assignee: 'assignee_id', - }); + const taskData = { + ...fields, + ...this._updateTrigger.getUpdated(this, { + bugTracker: 'bug_tracker', + projectId: 'project_id', + assignee: 'assignee_id', + }), + }; if (taskData.assignee_id) { taskData.assignee_id = taskData.assignee_id.id; @@ -695,19 +699,6 @@ export function implementTask(Task: typeof TaskClass): typeof TaskClass { taskSpec.source_storage = this.sourceStorage.toJSON(); } - if (this.validationMethod !== 'undefined') { - taskSpec.validation_method = this.validationMethod; - } - if (typeof this.validationFramesPercent !== 'undefined') { - taskSpec.validation_frames_percent = this.validationFramesPercent; - } - if (typeof this.validationFramesPerJob !== 'undefined') { - taskSpec.validation_frames_per_job = this.validationFramesPerJob; - } - if (typeof this.frameSelectionMethod !== 'undefined') { - taskSpec.frame_selection_method = this.frameSelectionMethod; - } - const taskDataSpec = { client_files: this.clientFiles, server_files: this.serverFiles, diff --git a/cvat-core/src/session.ts b/cvat-core/src/session.ts index 3940bc5db7d..63174cd4098 100644 --- a/cvat-core/src/session.ts +++ b/cvat-core/src/session.ts @@ -664,7 +664,7 @@ export class Job extends Session { return this.#data.target_storage; } - async save(fields: any): Promise { + async save(fields: Record = {}): Promise { const result = await PluginRegistry.apiWrapper.call(this, Job.prototype.save, fields); return result; } @@ -728,7 +728,7 @@ export class Task extends Session { public readonly useZipChunks: boolean; public readonly useCache: boolean; public readonly copyData: boolean; - public readonly cloudStorageID: number; + public readonly cloudStorageId: number; public readonly sortingMethod: string; public readonly validationMethod: string; @@ -780,11 +780,6 @@ export class Task extends Session { cloud_storage_id: undefined, sorting_method: undefined, files: undefined, - - validation_method: undefined, - validation_frames_percent: undefined, - validation_frames_per_job: undefined, - frame_selection_method: undefined, }; const updateTrigger = new FieldUpdateTrigger(); @@ -1112,18 +1107,6 @@ export class Task extends Session { progress: { get: () => data.progress, }, - validationFramesPercent: { - get: () => data.validation_frames_percent, - }, - validationFramesPerJob: { - get: () => data.validation_frames_per_job, - }, - frameSelectionMethod: { - get: () => data.frame_selection_method, - }, - validationMethod: { - get: () => data.validation_method, - }, _internalData: { get: () => data, }, @@ -1139,8 +1122,11 @@ export class Task extends Session { return result; } - async save(options?: { requestStatusCallback?: (request: Request) => void }): Promise { - const result = await PluginRegistry.apiWrapper.call(this, Task.prototype.save, options); + async save( + fields: Record = {}, + options?: { requestStatusCallback?: (request: Request) => void }, + ): Promise { + const result = await PluginRegistry.apiWrapper.call(this, fields, Task.prototype.save, options); return result; } diff --git a/cvat-ui/src/actions/tasks-actions.ts b/cvat-ui/src/actions/tasks-actions.ts index 77c6aad2303..4d25aca7e6e 100644 --- a/cvat-ui/src/actions/tasks-actions.ts +++ b/cvat-ui/src/actions/tasks-actions.ts @@ -255,22 +255,22 @@ ThunkAction { description.cloud_storage_id = data.cloudStorageId; } - if (data.quality.validationMethod === ValidationMethod.GT) { - description.validation_method = ValidationMethod.GT; - description.validation_frames_percent = data.quality.validationFramesPercent; - description.frame_selection_method = data.quality.frameSelectionMethod; - } else if (data.quality.validationMethod === ValidationMethod.HONEYPOTS) { - description.validation_method = ValidationMethod.HONEYPOTS; - description.validation_frames_percent = data.quality.validationFramesPercent; - description.validation_frames_per_job = data.quality.validationFramesPerJob; - } + const extras = data.quality.validationMethod === ValidationMethod.GT ? { + validation_method: ValidationMethod.GT, + validation_frames_percent: data.quality.validationFramesPercent, + frame_selection_method: data.quality.frameSelectionMethod, + } : { + validation_method: ValidationMethod.HONEYPOTS, + validation_frames_percent: data.quality.validationFramesPercent, + validation_frames_per_job: data.quality.validationFramesPerJob, + }; const taskInstance = new cvat.classes.Task(description); taskInstance.clientFiles = data.files.local; taskInstance.serverFiles = data.files.share.concat(data.files.cloudStorage); taskInstance.remoteFiles = data.files.remote; try { - const savedTask = await taskInstance.save({ + const savedTask = await taskInstance.save(extras, { requestStatusCallback(request) { let { message } = request; let helperMessage = ''; From d7a8c7b743c14affcf0676dbf64adaa94f023d5b Mon Sep 17 00:00:00 2001 From: Boris Sekachev Date: Wed, 4 Sep 2024 12:55:17 +0300 Subject: [PATCH 60/79] Fixed condition --- cvat-ui/src/actions/tasks-actions.ts | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/cvat-ui/src/actions/tasks-actions.ts b/cvat-ui/src/actions/tasks-actions.ts index 4d25aca7e6e..2042b685d57 100644 --- a/cvat-ui/src/actions/tasks-actions.ts +++ b/cvat-ui/src/actions/tasks-actions.ts @@ -255,15 +255,23 @@ ThunkAction { description.cloud_storage_id = data.cloudStorageId; } - const extras = data.quality.validationMethod === ValidationMethod.GT ? { - validation_method: ValidationMethod.GT, - validation_frames_percent: data.quality.validationFramesPercent, - frame_selection_method: data.quality.frameSelectionMethod, - } : { - validation_method: ValidationMethod.HONEYPOTS, - validation_frames_percent: data.quality.validationFramesPercent, - validation_frames_per_job: data.quality.validationFramesPerJob, - }; + let extras = {}; + + if (data.quality.validationMethod === ValidationMethod.GT) { + extras = { + validation_method: ValidationMethod.GT, + validation_frames_percent: data.quality.validationFramesPercent, + frame_selection_method: data.quality.frameSelectionMethod, + }; + } + + if (data.quality.validationMethod === ValidationMethod.HONEYPOTS) { + extras = { + validation_method: ValidationMethod.HONEYPOTS, + validation_frames_percent: data.quality.validationFramesPercent, + validation_frames_per_job: data.quality.validationFramesPerJob, + }; + } const taskInstance = new cvat.classes.Task(description); taskInstance.clientFiles = data.files.local; From 28f0a048cc623f837642c1903d01eef5c465a40c Mon Sep 17 00:00:00 2001 From: Boris Sekachev Date: Wed, 4 Sep 2024 13:00:39 +0300 Subject: [PATCH 61/79] Do not store placeholder image in the bundle --- cvat-ui/src/assets/index.d.ts | 1 - .../paid-feature-placeholder/paid-feature-placeholder.tsx | 3 +-- cvat-ui/webpack.config.js | 4 ++++ 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/cvat-ui/src/assets/index.d.ts b/cvat-ui/src/assets/index.d.ts index 94a4c109f09..82255972f22 100644 --- a/cvat-ui/src/assets/index.d.ts +++ b/cvat-ui/src/assets/index.d.ts @@ -3,4 +3,3 @@ // SPDX-License-Identifier: MIT declare module '*.svg'; -declare module '*.png'; diff --git a/cvat-ui/src/components/paid-feature-placeholder/paid-feature-placeholder.tsx b/cvat-ui/src/components/paid-feature-placeholder/paid-feature-placeholder.tsx index d89b6e3a0da..b6dc86071c9 100644 --- a/cvat-ui/src/components/paid-feature-placeholder/paid-feature-placeholder.tsx +++ b/cvat-ui/src/components/paid-feature-placeholder/paid-feature-placeholder.tsx @@ -5,7 +5,6 @@ import React from 'react'; import Text from 'antd/lib/typography/Text'; import Card from 'antd/es/card/Card'; -import PaidFeaturePlaceholderImg from 'assets/paid-feature.png'; import { Row, Col } from 'antd/es/grid'; import './styles.scss'; @@ -29,7 +28,7 @@ export default function PaidFeaturePlaceholder(props: Props): JSX.Element | null
} + cover={some text} >
diff --git a/cvat-ui/webpack.config.js b/cvat-ui/webpack.config.js index c5850cea0df..db82ec975fa 100644 --- a/cvat-ui/webpack.config.js +++ b/cvat-ui/webpack.config.js @@ -189,6 +189,10 @@ module.exports = (env) => { from: 'src/assets/opencv_4.8.0.js', to : 'assets/opencv_4.8.0.js', }, + { + from: 'src/assets/*.png', + to : 'assets/[name][ext]', + }, { from: 'plugins/**/assets/*.(onnx|js)', to : 'assets/[name][ext]', From 696082db841963e023e3dca93866bff2887d9128 Mon Sep 17 00:00:00 2001 From: Boris Sekachev Date: Thu, 5 Sep 2024 11:11:37 +0300 Subject: [PATCH 62/79] Fixed different issues found in task creation form --- cvat-core/src/session.ts | 2 +- .../components/create-job-page/job-form.tsx | 40 ++++++-------- .../advanced-configuration-form.tsx | 2 +- .../create-task-page/create-task-content.tsx | 53 ++++++++++--------- .../quality-configuration-form.tsx | 36 +++++++++++-- 5 files changed, 80 insertions(+), 53 deletions(-) diff --git a/cvat-core/src/session.ts b/cvat-core/src/session.ts index 63174cd4098..1985a72b268 100644 --- a/cvat-core/src/session.ts +++ b/cvat-core/src/session.ts @@ -1126,7 +1126,7 @@ export class Task extends Session { fields: Record = {}, options?: { requestStatusCallback?: (request: Request) => void }, ): Promise { - const result = await PluginRegistry.apiWrapper.call(this, fields, Task.prototype.save, options); + const result = await PluginRegistry.apiWrapper.call(this, Task.prototype.save, fields, options); return result; } diff --git a/cvat-ui/src/components/create-job-page/job-form.tsx b/cvat-ui/src/components/create-job-page/job-form.tsx index dc07af1127f..b94d8a5f3fa 100644 --- a/cvat-ui/src/components/create-job-page/job-form.tsx +++ b/cvat-ui/src/components/create-job-page/job-form.tsx @@ -47,28 +47,6 @@ interface Props { const defaultQuantity = 5; -export function groundTruthFrameSelect(): JSX.Element { - return ( - - - - ); -} - function JobForm(props: Props): JSX.Element { const { task } = props; const { size: taskSize } = task; @@ -155,7 +133,23 @@ function JobForm(props: Props): JSX.Element { - {groundTruthFrameSelect()} + + + diff --git a/cvat-ui/src/components/create-task-page/advanced-configuration-form.tsx b/cvat-ui/src/components/create-task-page/advanced-configuration-form.tsx index f39afbe367f..7a3f6acf7fd 100644 --- a/cvat-ui/src/components/create-task-page/advanced-configuration-form.tsx +++ b/cvat-ui/src/components/create-task-page/advanced-configuration-form.tsx @@ -92,7 +92,7 @@ function validateURL(_: RuleObject, value: string): Promise { return Promise.resolve(); } -const isInteger = ({ min, max }: { min?: number; max?: number }) => ( +export const isInteger = ({ min, max }: { min?: number; max?: number }) => ( _: RuleObject, value?: number | string, ): Promise => { diff --git a/cvat-ui/src/components/create-task-page/create-task-content.tsx b/cvat-ui/src/components/create-task-page/create-task-content.tsx index db4d460694c..e5a63fb7cab 100644 --- a/cvat-ui/src/components/create-task-page/create-task-content.tsx +++ b/cvat-ui/src/components/create-task-page/create-task-content.tsx @@ -304,9 +304,10 @@ class CreateTaskContent extends React.PureComponent { - this.setState((state) => ({ + this.qualityConfigurationComponent.current?.resetFields(); + this.setState(() => ({ quality: { - ...state.quality, + ...defaultState.quality, validationMethod: value, }, })); @@ -459,34 +460,38 @@ class CreateTaskContent extends React.PureComponent { - if (this.qualityConfigurationComponent.current) { - this.qualityConfigurationComponent.current.submit(); - } + const promises = []; + if (this.advancedConfigurationComponent.current) { - return this.advancedConfigurationComponent.current.submit(); + promises.push(this.advancedConfigurationComponent.current.submit()); + } + + if (this.qualityConfigurationComponent.current) { + promises.push(this.qualityConfigurationComponent.current.submit()); } + + return Promise.all(promises); + }).then(() => { if (projectId) { - return core.projects.get({ id: projectId }) - .then((response: any) => { - const [project] = response; - const { advanced } = this.state; - return this.handleSubmitAdvancedConfiguration({ - ...advanced, - sourceStorage: new Storage( - project.sourceStorage || { location: StorageLocation.LOCAL }, - ), - targetStorage: new Storage( - project.targetStorage || { location: StorageLocation.LOCAL }, - ), - }); - }) - .catch((error: Error): void => { - throw new Error(`Couldn't fetch the project ${projectId} ${error.toString()}`); + return core.projects.get({ id: projectId }).then((response) => { + const [project] = response; + const { advanced } = this.state; + return this.handleSubmitAdvancedConfiguration({ + ...advanced, + sourceStorage: new Storage( + project.sourceStorage || { location: StorageLocation.LOCAL }, + ), + targetStorage: new Storage( + project.targetStorage || { location: StorageLocation.LOCAL }, + ), }); + }).catch((error: Error): void => { + throw new Error(`Couldn't fetch the project ${projectId} ${error.toString()}`); + }); } + return Promise.resolve(); - }) - .then(resolve) + }).then(resolve) .catch((error: Error | ValidateErrorEntity): void => { notification.error({ message: 'Could not create a task', diff --git a/cvat-ui/src/components/create-task-page/quality-configuration-form.tsx b/cvat-ui/src/components/create-task-page/quality-configuration-form.tsx index 46541e82aec..bc6f8888cfa 100644 --- a/cvat-ui/src/components/create-task-page/quality-configuration-form.tsx +++ b/cvat-ui/src/components/create-task-page/quality-configuration-form.tsx @@ -50,6 +50,10 @@ export default class QualityConfigurationForm extends React.PureComponent return Promise.reject(new Error('Quality form ref is empty')); } + public resetFields(): void { + this.formRef.current?.resetFields(['validationFramesPercent', 'validationFramesPerJob', 'frameSelectionMethod']); + } + private gtParamsBlock(): JSX.Element { return ( <> @@ -69,9 +73,21 @@ export default class QualityConfigurationForm extends React.PureComponent +value} + rules={[ + { required: true, message: 'The field is required' }, + { + type: 'number', min: 0, max: 100, message: 'Value is not valid', + }, + ]} > - } /> + } + /> @@ -85,7 +101,13 @@ export default class QualityConfigurationForm extends React.PureComponent +value} + rules={[ + { required: true, message: 'The field is required' }, + { + type: 'number', min: 0, max: 100, message: 'Value is not valid', + }, + ]} > } /> @@ -94,7 +116,13 @@ export default class QualityConfigurationForm extends React.PureComponent +value} + rules={[ + { required: true, message: 'The field is required' }, + { + type: 'number', min: 0, max: 100, message: 'Value is not valid', + }, + ]} > } /> From 86480eeef49b2b135a5f3e4bf2bef6193919ede8 Mon Sep 17 00:00:00 2001 From: Boris Sekachev Date: Thu, 5 Sep 2024 11:20:38 +0300 Subject: [PATCH 63/79] Added missed field --- cvat-core/src/session-implementation.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/cvat-core/src/session-implementation.ts b/cvat-core/src/session-implementation.ts index d94b4269687..fa77c934abd 100644 --- a/cvat-core/src/session-implementation.ts +++ b/cvat-core/src/session-implementation.ts @@ -671,6 +671,7 @@ export function implementTask(Task: typeof TaskClass): typeof TaskClass { } const taskSpec: any = { + ...fields, name: this.name, labels: this.labels.map((el) => el.toJSON()), }; From 456062eb803a926a50688a843f3d12c8af25e307 Mon Sep 17 00:00:00 2001 From: Boris Sekachev Date: Thu, 5 Sep 2024 11:47:44 +0300 Subject: [PATCH 64/79] Aborted unnecessary changes --- .../advanced-configuration-form.tsx | 2 +- .../components/job-item/job-actions-menu.tsx | 19 +++++++++--------- cvat-ui/src/components/job-item/job-item.tsx | 14 ++----------- cvat-ui/src/components/jobs-page/job-card.tsx | 16 ++------------- .../src/components/jobs-page/jobs-content.tsx | 19 ++---------------- .../src/components/jobs-page/jobs-page.tsx | 20 ++----------------- 6 files changed, 19 insertions(+), 71 deletions(-) diff --git a/cvat-ui/src/components/create-task-page/advanced-configuration-form.tsx b/cvat-ui/src/components/create-task-page/advanced-configuration-form.tsx index 7a3f6acf7fd..f39afbe367f 100644 --- a/cvat-ui/src/components/create-task-page/advanced-configuration-form.tsx +++ b/cvat-ui/src/components/create-task-page/advanced-configuration-form.tsx @@ -92,7 +92,7 @@ function validateURL(_: RuleObject, value: string): Promise { return Promise.resolve(); } -export const isInteger = ({ min, max }: { min?: number; max?: number }) => ( +const isInteger = ({ min, max }: { min?: number; max?: number }) => ( _: RuleObject, value?: number | string, ): Promise => { diff --git a/cvat-ui/src/components/job-item/job-actions-menu.tsx b/cvat-ui/src/components/job-item/job-actions-menu.tsx index e92ffc16108..0a3ac6c1900 100644 --- a/cvat-ui/src/components/job-item/job-actions-menu.tsx +++ b/cvat-ui/src/components/job-item/job-actions-menu.tsx @@ -3,23 +3,24 @@ // SPDX-License-Identifier: MIT import React, { useCallback } from 'react'; +import { useDispatch } from 'react-redux'; import { useHistory } from 'react-router'; import Modal from 'antd/lib/modal'; +import { exportActions } from 'actions/export-actions'; +import { deleteJobAsync } from 'actions/jobs-actions'; +import { importActions } from 'actions/import-actions'; import { Job, JobType } from 'cvat-core-wrapper'; import Menu, { MenuInfo } from 'components/dropdown-menu'; interface Props { job: Job; - onJobDelete: (job: Job) => void; - onJobExport: (job: Job) => void; - onJobImport: (job: Job) => void; } function JobActionsMenu(props: Props): JSX.Element { - const { - job, onJobDelete, onJobImport, onJobExport, - } = props; + const { job } = props; + + const dispatch = useDispatch(); const history = useHistory(); const onDelete = useCallback(() => { @@ -28,7 +29,7 @@ function JobActionsMenu(props: Props): JSX.Element { content: 'All related data (annotations) will be lost. Continue?', className: 'cvat-modal-confirm-delete-job', onOk: () => { - onJobDelete(job); + dispatch(deleteJobAsync(job)); }, okButtonProps: { type: 'primary', @@ -51,9 +52,9 @@ function JobActionsMenu(props: Props): JSX.Element { window.open(job.bugTracker, '_blank', 'noopener noreferrer'); } } else if (action.key === 'import_job') { - onJobImport(job); + dispatch(importActions.openImportDatasetModal(job)); } else if (action.key === 'export_job') { - onJobExport(job); + dispatch(exportActions.openExportDatasetModal(job)); } else if (action.key === 'view_analytics') { history.push(`/tasks/${job.taskId}/jobs/${job.id}/analytics`); } diff --git a/cvat-ui/src/components/job-item/job-item.tsx b/cvat-ui/src/components/job-item/job-item.tsx index d3f79f46fd9..c5a4b64a3f3 100644 --- a/cvat-ui/src/components/job-item/job-item.tsx +++ b/cvat-ui/src/components/job-item/job-item.tsx @@ -32,9 +32,6 @@ interface Props { task: Task; deleted: boolean; onJobUpdate: (job: Job, fields: Parameters[0]) => void; - onJobDelete: (job: Job) => void; - onJobExport: (job: Job) => void; - onJobImport: (job: Job) => void; } function ReviewSummaryComponent({ jobInstance }: { jobInstance: any }): JSX.Element { @@ -102,7 +99,7 @@ function ReviewSummaryComponent({ jobInstance }: { jobInstance: any }): JSX.Elem function JobItem(props: Props): JSX.Element { const { - job, task, deleted, onJobUpdate, onJobDelete, onJobExport, onJobImport, + job, task, deleted, onJobUpdate, } = props; const { stage } = job; const created = moment(job.createdDate); @@ -265,14 +262,7 @@ function JobItem(props: Props): JSX.Element { - )} + overlay={} > diff --git a/cvat-ui/src/components/jobs-page/job-card.tsx b/cvat-ui/src/components/jobs-page/job-card.tsx index 7c65c0c4256..046b4c2a71e 100644 --- a/cvat-ui/src/components/jobs-page/job-card.tsx +++ b/cvat-ui/src/components/jobs-page/job-card.tsx @@ -25,15 +25,10 @@ const useCardHeight = useCardHeightHOC({ interface Props { job: Job; - onJobDelete: (job: Job) => void; - onJobExport: (job: Job) => void; - onJobImport: (job: Job) => void; } function JobCardComponent(props: Props): JSX.Element { - const { - job, onJobDelete, onJobExport, onJobImport, - } = props; + const { job } = props; const history = useHistory(); const height = useCardHeight(); const onClick = (event: React.MouseEvent): void => { @@ -78,14 +73,7 @@ function JobCardComponent(props: Props): JSX.Element { - )} + overlay={()} > diff --git a/cvat-ui/src/components/jobs-page/jobs-content.tsx b/cvat-ui/src/components/jobs-page/jobs-content.tsx index 7c48e4ad047..ec19cfc3ed5 100644 --- a/cvat-ui/src/components/jobs-page/jobs-content.tsx +++ b/cvat-ui/src/components/jobs-page/jobs-content.tsx @@ -11,16 +11,7 @@ import { Job, JobType } from 'cvat-core-wrapper'; import dimensions from 'utils/dimensions'; import JobCard from './job-card'; -interface Props { - onJobDelete: (job: Job) => void; - onJobExport: (job: Job) => void; - onJobImport: (job: Job) => void; -} - -function JobsContentComponent(props: Props): JSX.Element { - const { - onJobDelete, onJobExport, onJobImport, - } = props; +function JobsContentComponent(): JSX.Element { const jobs = useSelector((state: CombinedState) => state.jobs.current); const groupedJobs = jobs.filter((job: Job) => job.type === JobType.ANNOTATION).reduce( @@ -43,13 +34,7 @@ function JobsContentComponent(props: Props): JSX.Element { {jobInstances.map((job: Job) => ( - + ))} diff --git a/cvat-ui/src/components/jobs-page/jobs-page.tsx b/cvat-ui/src/components/jobs-page/jobs-page.tsx index 6204980bfb0..450ade6fc6c 100644 --- a/cvat-ui/src/components/jobs-page/jobs-page.tsx +++ b/cvat-ui/src/components/jobs-page/jobs-page.tsx @@ -11,14 +11,11 @@ import Spin from 'antd/lib/spin'; import { Col, Row } from 'antd/lib/grid'; import Pagination from 'antd/lib/pagination'; -import { Job } from 'cvat-core-wrapper'; import { updateHistoryFromQuery } from 'components/resource-sorting-filtering'; import { CombinedState, Indexable, JobsQuery } from 'reducers'; -import { deleteJobAsync, getJobsAsync } from 'actions/jobs-actions'; +import { getJobsAsync } from 'actions/jobs-actions'; import { anySearch } from 'utils/any-search'; -import { exportActions } from 'actions/export-actions'; -import { importActions } from 'actions/import-actions'; import TopBarComponent from './top-bar'; import JobsContentComponent from './jobs-content'; import EmptyListComponent from './empty-list'; @@ -30,15 +27,6 @@ function JobsPageComponent(): JSX.Element { const query = useSelector((state: CombinedState) => state.jobs.query); const fetching = useSelector((state: CombinedState) => state.jobs.fetching); const count = useSelector((state: CombinedState) => state.jobs.count); - const onJobDelete = (job: Job): void => { - dispatch(deleteJobAsync(job)); - }; - const onJobExport = (job: Job): void => { - dispatch(exportActions.openExportDatasetModal(job)); - }; - const onJobImport = (job: Job): void => { - dispatch(importActions.openImportDatasetModal(job)); - }; const queryParams = new URLSearchParams(history.location.search); const updatedQuery = { ...query }; @@ -66,11 +54,7 @@ function JobsPageComponent(): JSX.Element { const content = count ? ( <> - + Date: Thu, 5 Sep 2024 11:59:50 +0300 Subject: [PATCH 65/79] Aborted extra changes --- cvat-ui/src/components/job-item/job-item.tsx | 11 +++++---- cvat-ui/src/components/jobs-page/job-card.tsx | 14 ++++++++++- .../src/components/jobs-page/jobs-content.tsx | 4 ++-- cvat-ui/src/components/task-page/job-list.tsx | 16 ++----------- .../src/components/task-page/task-page.tsx | 24 ++----------------- 5 files changed, 26 insertions(+), 43 deletions(-) diff --git a/cvat-ui/src/components/job-item/job-item.tsx b/cvat-ui/src/components/job-item/job-item.tsx index c5a4b64a3f3..3fe5267f9ef 100644 --- a/cvat-ui/src/components/job-item/job-item.tsx +++ b/cvat-ui/src/components/job-item/job-item.tsx @@ -25,12 +25,13 @@ import { import { useIsMounted } from 'utils/hooks'; import UserSelector from 'components/task-page/user-selector'; import CVATTooltip from 'components/common/cvat-tooltip'; +import { useSelector } from 'react-redux'; +import { CombinedState } from 'reducers'; import JobActionsMenu from './job-actions-menu'; interface Props { job: Job; task: Task; - deleted: boolean; onJobUpdate: (job: Job, fields: Parameters[0]) => void; } @@ -98,9 +99,11 @@ function ReviewSummaryComponent({ jobInstance }: { jobInstance: any }): JSX.Elem } function JobItem(props: Props): JSX.Element { - const { - job, task, deleted, onJobUpdate, - } = props; + const { job, task, onJobUpdate } = props; + + const deletes = useSelector((state: CombinedState) => state.jobs.activities.deletes); + const deleted = job.id in deletes ? deletes[job.id] === true : false; + const { stage } = job; const created = moment(job.createdDate); const updated = moment(job.updatedDate); diff --git a/cvat-ui/src/components/jobs-page/job-card.tsx b/cvat-ui/src/components/jobs-page/job-card.tsx index 046b4c2a71e..a76ed0c3814 100644 --- a/cvat-ui/src/components/jobs-page/job-card.tsx +++ b/cvat-ui/src/components/jobs-page/job-card.tsx @@ -4,6 +4,7 @@ // SPDX-License-Identifier: MIT import React from 'react'; +import { useSelector } from 'react-redux'; import { useHistory } from 'react-router'; import Card from 'antd/lib/card'; import Descriptions from 'antd/lib/descriptions'; @@ -14,6 +15,7 @@ import { Job } from 'cvat-core-wrapper'; import { useCardHeightHOC } from 'utils/hooks'; import Preview from 'components/common/preview'; import JobActionsMenu from 'components/job-item/job-actions-menu'; +import { CombinedState } from 'reducers'; const useCardHeight = useCardHeightHOC({ containerClassName: 'cvat-jobs-page', @@ -29,6 +31,10 @@ interface Props { function JobCardComponent(props: Props): JSX.Element { const { job } = props; + + const deletes = useSelector((state: CombinedState) => state.jobs.activities.deletes); + const deleted = job.id in deletes ? deletes[job.id] === true : false; + const history = useHistory(); const height = useCardHeight(); const onClick = (event: React.MouseEvent): void => { @@ -40,9 +46,15 @@ function JobCardComponent(props: Props): JSX.Element { } }; + const style = {}; + if (deleted) { + (style as any).pointerEvents = 'none'; + (style as any).opacity = 0.5; + } + return ( diff --git a/cvat-ui/src/components/jobs-page/jobs-content.tsx b/cvat-ui/src/components/jobs-page/jobs-content.tsx index ec19cfc3ed5..706fab72702 100644 --- a/cvat-ui/src/components/jobs-page/jobs-content.tsx +++ b/cvat-ui/src/components/jobs-page/jobs-content.tsx @@ -7,14 +7,14 @@ import React from 'react'; import { useSelector } from 'react-redux'; import { Col, Row } from 'antd/lib/grid'; import { CombinedState } from 'reducers'; -import { Job, JobType } from 'cvat-core-wrapper'; +import { Job } from 'cvat-core-wrapper'; import dimensions from 'utils/dimensions'; import JobCard from './job-card'; function JobsContentComponent(): JSX.Element { const jobs = useSelector((state: CombinedState) => state.jobs.current); - const groupedJobs = jobs.filter((job: Job) => job.type === JobType.ANNOTATION).reduce( + const groupedJobs = jobs.reduce( (acc: Job[][], storage: Job, index: number): Job[][] => { if (index && index % 4) { acc[acc.length - 1].push(storage); diff --git a/cvat-ui/src/components/task-page/job-list.tsx b/cvat-ui/src/components/task-page/job-list.tsx index 4b111b45b77..bbd59652da2 100644 --- a/cvat-ui/src/components/task-page/job-list.tsx +++ b/cvat-ui/src/components/task-page/job-list.tsx @@ -6,7 +6,7 @@ import React, { useCallback, useEffect, useState } from 'react'; import jsonLogic from 'json-logic-js'; import _ from 'lodash'; -import { CombinedState, Indexable, JobsQuery } from 'reducers'; +import { Indexable, JobsQuery } from 'reducers'; import { useHistory } from 'react-router'; import { Row, Col } from 'antd/lib/grid'; import Text from 'antd/lib/typography/Text'; @@ -19,7 +19,6 @@ import JobItem from 'components/job-item/job-item'; import { SortingComponent, ResourceFilterHOC, defaultVisibility, updateHistoryFromQuery, } from 'components/resource-sorting-filtering'; -import { useSelector } from 'react-redux'; import { localStorageRecentKeyword, localStorageRecentCapacity, predefinedFilterValues, config, } from './jobs-filter-configuration'; @@ -31,9 +30,6 @@ const FilteringComponent = ResourceFilterHOC( interface Props { task: Task; onJobUpdate(job: Job, data: Parameters[0]): void; - onJobDelete: (job: Job) => void; - onJobExport: (job: Job) => void; - onJobImport: (job: Job) => void; } const PAGE_SIZE = 10; @@ -67,13 +63,9 @@ function setUpJobsList(jobs: Job[], query: JobsQuery): Job[] { } function JobListComponent(props: Props): JSX.Element { - const { - task: taskInstance, onJobUpdate, onJobDelete, onJobExport, onJobImport, - } = props; + const { task: taskInstance, onJobUpdate } = props; const [visibility, setVisibility] = useState(defaultVisibility); - const deletedJobs = useSelector((state: CombinedState) => state.jobs.activities.deletes); - const history = useHistory(); const { id: taskId } = taskInstance; const { jobs } = taskInstance; @@ -100,11 +92,7 @@ function JobListComponent(props: Props): JSX.Element { key={job.id} job={job} task={taskInstance} - deleted={job.id in deletedJobs} onJobUpdate={onJobUpdate} - onJobDelete={onJobDelete} - onJobExport={onJobExport} - onJobImport={onJobImport} /> )); useEffect(() => { diff --git a/cvat-ui/src/components/task-page/task-page.tsx b/cvat-ui/src/components/task-page/task-page.tsx index 3730a10301a..1d92a5e4eb5 100644 --- a/cvat-ui/src/components/task-page/task-page.tsx +++ b/cvat-ui/src/components/task-page/task-page.tsx @@ -13,15 +13,13 @@ import Result from 'antd/lib/result'; import notification from 'antd/lib/notification'; import { getInferenceStatusAsync } from 'actions/models-actions'; -import { deleteJobAsync, updateJobAsync } from 'actions/jobs-actions'; +import { updateJobAsync } from 'actions/jobs-actions'; import { getCore, Task, Job } from 'cvat-core-wrapper'; import JobListComponent from 'components/task-page/job-list'; import ModelRunnerModal from 'components/model-runner-modal/model-runner-dialog'; import CVATLoadingSpinner from 'components/common/loading-spinner'; import MoveTaskModal from 'components/move-task-modal/move-task-modal'; import { CombinedState } from 'reducers'; -import { exportActions } from 'actions/export-actions'; -import { importActions } from 'actions/import-actions'; import TopBarComponent from './top-bar'; import DetailsComponent from './details'; @@ -125,18 +123,6 @@ function TaskPageComponent(): JSX.Element { }); }; - const onJobDelete = (job: Job): void => { - dispatch(deleteJobAsync(job)); - }; - - const onJobExport = (job: Job): void => { - dispatch(exportActions.openExportDatasetModal(job)); - }; - - const onJobImport = (job: Job): void => { - dispatch(importActions.openImportDatasetModal(job)); - }; - return (
{ updatingTask ? : null } @@ -148,13 +134,7 @@ function TaskPageComponent(): JSX.Element {
- + From e84b6b86a86218365edfa1383e35b3ff91b7e86e Mon Sep 17 00:00:00 2001 From: Boris Sekachev Date: Thu, 5 Sep 2024 12:04:23 +0300 Subject: [PATCH 66/79] Fixed imports --- .../annotations-actions/annotations-actions-modal.tsx | 3 ++- .../create-cloud-storage-page/manifests-manager.tsx | 2 +- .../components/header/settings-modal/shortcut-settings.tsx | 3 ++- cvat-ui/src/components/models-page/top-bar.tsx | 2 +- .../paid-feature-placeholder/paid-feature-placeholder.tsx | 2 +- cvat-ui/src/components/signing-common/cvat-signing-input.tsx | 4 ++-- 6 files changed, 9 insertions(+), 7 deletions(-) diff --git a/cvat-ui/src/components/annotation-page/annotations-actions/annotations-actions-modal.tsx b/cvat-ui/src/components/annotation-page/annotations-actions/annotations-actions-modal.tsx index d3069c62dd5..27898da9fa2 100644 --- a/cvat-ui/src/components/annotation-page/annotations-actions/annotations-actions-modal.tsx +++ b/cvat-ui/src/components/annotation-page/annotations-actions/annotations-actions-modal.tsx @@ -14,6 +14,8 @@ import Select from 'antd/lib/select'; import notification from 'antd/lib/notification'; import Text from 'antd/lib/typography/Text'; import Modal from 'antd/lib/modal'; +import Alert from 'antd/lib/alert'; +import InputNumber from 'antd/lib/input-number'; import config from 'config'; import { useIsMounted } from 'utils/hooks'; @@ -25,7 +27,6 @@ import { import { Canvas } from 'cvat-canvas-wrapper'; import { fetchAnnotationsAsync, saveAnnotationsAsync } from 'actions/annotation-actions'; import { switchAutoSave } from 'actions/settings-actions'; -import { Alert, InputNumber } from 'antd'; import { clamp } from 'utils/math'; const core = getCore(); diff --git a/cvat-ui/src/components/create-cloud-storage-page/manifests-manager.tsx b/cvat-ui/src/components/create-cloud-storage-page/manifests-manager.tsx index 1dbd43c3e46..f8834828770 100644 --- a/cvat-ui/src/components/create-cloud-storage-page/manifests-manager.tsx +++ b/cvat-ui/src/components/create-cloud-storage-page/manifests-manager.tsx @@ -11,9 +11,9 @@ import Form from 'antd/lib/form'; import { FormListFieldData, FormListOperation } from 'antd/lib/form/FormList'; import Input from 'antd/lib/input'; import Row from 'antd/lib/row'; +import Alert from 'antd/lib/alert'; import Tooltip from 'antd/lib/tooltip'; import config from 'config'; -import { Alert } from 'antd'; interface Props { form: any; diff --git a/cvat-ui/src/components/header/settings-modal/shortcut-settings.tsx b/cvat-ui/src/components/header/settings-modal/shortcut-settings.tsx index 0736e851844..f65e8eb5c8a 100644 --- a/cvat-ui/src/components/header/settings-modal/shortcut-settings.tsx +++ b/cvat-ui/src/components/header/settings-modal/shortcut-settings.tsx @@ -12,13 +12,14 @@ import { Alert, } from 'antd/lib'; import Search from 'antd/lib/input/Search'; +import Empty from 'antd/lib/empty'; +import Modal from 'antd/lib/modal'; import React, { useState, useMemo, useCallback, } from 'react'; import { ShortcutScope } from 'utils/enums'; import { KeyMap } from 'utils/mousetrap-react'; -import { Empty, Modal } from 'antd'; import { shortcutsActions } from 'actions/shortcuts-actions'; import { useDispatch, useSelector } from 'react-redux'; import { CombinedState } from 'reducers'; diff --git a/cvat-ui/src/components/models-page/top-bar.tsx b/cvat-ui/src/components/models-page/top-bar.tsx index ede7ab22b8a..0a3f4c8d571 100644 --- a/cvat-ui/src/components/models-page/top-bar.tsx +++ b/cvat-ui/src/components/models-page/top-bar.tsx @@ -4,7 +4,7 @@ import React, { useState } from 'react'; import { Row, Col } from 'antd/lib/grid'; -import { Input } from 'antd'; +import Input from 'antd/lib/input'; import { SortingComponent, ResourceFilterHOC, defaultVisibility } from 'components/resource-sorting-filtering'; import { CombinedState, ModelsQuery } from 'reducers'; import { usePlugins } from 'utils/hooks'; diff --git a/cvat-ui/src/components/paid-feature-placeholder/paid-feature-placeholder.tsx b/cvat-ui/src/components/paid-feature-placeholder/paid-feature-placeholder.tsx index b6dc86071c9..e29a577f546 100644 --- a/cvat-ui/src/components/paid-feature-placeholder/paid-feature-placeholder.tsx +++ b/cvat-ui/src/components/paid-feature-placeholder/paid-feature-placeholder.tsx @@ -5,10 +5,10 @@ import React from 'react'; import Text from 'antd/lib/typography/Text'; import Card from 'antd/es/card/Card'; +import Button from 'antd/lib/button'; import { Row, Col } from 'antd/es/grid'; import './styles.scss'; -import { Button } from 'antd'; import CVATMarkdown from 'components/common/cvat-markdown'; import config from 'config'; diff --git a/cvat-ui/src/components/signing-common/cvat-signing-input.tsx b/cvat-ui/src/components/signing-common/cvat-signing-input.tsx index 2187d083dd2..70a46e716cd 100644 --- a/cvat-ui/src/components/signing-common/cvat-signing-input.tsx +++ b/cvat-ui/src/components/signing-common/cvat-signing-input.tsx @@ -1,10 +1,10 @@ -// Copyright (C) 2022 CVAT.ai Corporation +// Copyright (C) 2022-2024 CVAT.ai Corporation // // SPDX-License-Identifier: MIT import React, { useEffect, useState } from 'react'; import Icon from '@ant-design/icons'; import { ClearIcon } from 'icons'; -import { Input } from 'antd'; +import Input from 'antd/lib/input'; import Text from 'antd/lib/typography/Text'; interface SocialAccountLinkProps { From 5ea5a0a883a79f6ad8dfc8183cb64356e21427e5 Mon Sep 17 00:00:00 2001 From: Boris Sekachev Date: Thu, 5 Sep 2024 12:37:07 +0300 Subject: [PATCH 67/79] Reduced code duplication --- .../src/components/analytics-page/styles.scss | 4 +- .../paid-feature-placeholder.tsx | 4 +- .../task-quality/quality-settings-form.tsx | 132 ++++++------------ .../task-quality-magement-component.tsx | 58 ++++---- 4 files changed, 76 insertions(+), 122 deletions(-) diff --git a/cvat-ui/src/components/analytics-page/styles.scss b/cvat-ui/src/components/analytics-page/styles.scss index 1f202bf6ce4..f9639e2966a 100644 --- a/cvat-ui/src/components/analytics-page/styles.scss +++ b/cvat-ui/src/components/analytics-page/styles.scss @@ -55,8 +55,8 @@ .cvat-analytics-settings-tooltip-inner { @extend .cvat-analytics-tooltip-inner; - span:not(:last-child) { - margin-bottom: $grid-unit-size; + div:not(:last-child) { + margin-bottom: $grid-unit-size * 2; } } diff --git a/cvat-ui/src/components/paid-feature-placeholder/paid-feature-placeholder.tsx b/cvat-ui/src/components/paid-feature-placeholder/paid-feature-placeholder.tsx index e29a577f546..eaa59acc9fc 100644 --- a/cvat-ui/src/components/paid-feature-placeholder/paid-feature-placeholder.tsx +++ b/cvat-ui/src/components/paid-feature-placeholder/paid-feature-placeholder.tsx @@ -17,9 +17,7 @@ interface Props { } export default function PaidFeaturePlaceholder(props: Props): JSX.Element | null { - const { - featureDescription, - } = props; + const { featureDescription } = props; const { PAID_PLACEHOLDER_CONFIG } = config; const { url } = PAID_PLACEHOLDER_CONFIG; diff --git a/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx b/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx index 3d3b801f8b1..1bc8b63b9f3 100644 --- a/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx @@ -47,115 +47,69 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul objectVisibilityThreshold: settings.objectVisibilityThreshold * 100, panopticComparison: settings.panopticComparison, }; + const targetMetricDescription = `${settings.descriptions.targetMetric .replaceAll(/\* [a-z` -]+[A-Z]+/g, '') .replaceAll(/\n/g, '')}.`; - const generalTooltip = ( -
- - Target metric - - {' '} - {targetMetricDescription} - This parameter affects display of the quality computed. - + const makeTooltipFragment = (metric: string, description: string): JSX.Element => ( +
+ {`${metric}:`} - Target metric threshold - - {' '} - {settings.descriptions.targetMetricThreshold} - This parameter affects display of the quality numbers. + {description}
); - const jobValidationTooltip = ( + const makeTooltip = (jsx: JSX.Element): JSX.Element => (
- - Max validations per job - - {' '} - {settings.descriptions.maxValidationsPerJob} - + {jsx}
); - const shapeComparisonTooltip = ( -
- - Min overlap threshold(IoU) - - {' '} - {settings.descriptions.iouThreshold} - - - Low overlap threshold - - {' '} - {settings.descriptions.lowOverlapThreshold} - -
+ const generalTooltip = makeTooltip( + <> + {makeTooltipFragment('Target metric', targetMetricDescription)} + {makeTooltipFragment('Target metric threshold', settings.descriptions.targetMetricThreshold)} + , ); - const keypointTooltip = ( -
- - Object Keypoint Similarity (OKS) - - {' '} - {settings.descriptions.oksSigma} - -
+ const jobValidationTooltip = makeTooltip( + makeTooltipFragment('Max validations per job', settings.descriptions.maxValidationsPerJob), ); - const linesTooltip = ( -
- - Line thickness - - {' '} - {settings.descriptions.lineThickness} - - - Check orientation - - {' '} - {settings.descriptions.compareLineOrientation} - - - Min similarity gain - - {' '} - {settings.descriptions.lineOrientationThreshold} - -
+ const shapeComparisonTooltip = makeTooltip( + <> + {makeTooltipFragment('Min overlap threshold (IoU)', settings.descriptions.iouThreshold)} + {makeTooltipFragment('Low overlap threshold', settings.descriptions.lowOverlapThreshold)} + , ); - const groupTooltip = ( -
- - Compare groups - - {' '} - {settings.descriptions.compareGroups} - - - Min group match threshold - - {' '} - {settings.descriptions.groupMatchThreshold} - -
+ const keypointTooltip = makeTooltip( + makeTooltipFragment('Object Keypoint Similarity (OKS)', settings.descriptions.oksSigma), ); - const segmentationTooltip = ( -
- - Check object visibility - - {' '} - {settings.descriptions.checkCoveredAnnotations} - - - Min visibility threshold - - {' '} - {settings.descriptions.objectVisibilityThreshold} - - - Match only visible parts - - {' '} - {settings.descriptions.panopticComparison} - -
+ const linesTooltip = makeTooltip( + <> + {makeTooltipFragment('Line thickness', settings.descriptions.lineThickness)} + {makeTooltipFragment('Check orientation', settings.descriptions.compareLineOrientation)} + {makeTooltipFragment('Min similarity gain', settings.descriptions.lineOrientationThreshold)} + , + ); + + const groupTooltip = makeTooltip( + <> + {makeTooltipFragment('Compare groups', settings.descriptions.compareGroups)} + {makeTooltipFragment('Min group match threshold', settings.descriptions.groupMatchThreshold)} + , + ); + + const segmentationTooltip = makeTooltip( + <> + {makeTooltipFragment('Check object visibility', settings.descriptions.checkCoveredAnnotations)} + {makeTooltipFragment('Min visibility threshold', settings.descriptions.objectVisibilityThreshold)} + {makeTooltipFragment('Match only visible parts', settings.descriptions.panopticComparison)} + , ); return ( @@ -176,7 +130,7 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul General - + diff --git a/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx b/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx index 6e590fb5cc6..f66e3edd34b 100644 --- a/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx @@ -2,14 +2,10 @@ // // SPDX-License-Identifier: MIT -import { - FramesMetaData, - Job, - Task, -} from 'cvat-core-wrapper'; +import { FramesMetaData, Job, Task } from 'cvat-core-wrapper'; import React from 'react'; import { QualityColors } from 'utils/quality'; -import { Row } from 'antd/es/grid'; +import { Row, Col } from 'antd/es/grid'; import Spin from 'antd/lib/spin'; import { usePlugins } from 'utils/hooks'; import { CombinedState } from 'reducers'; @@ -32,40 +28,46 @@ function TaskQualityManagementComponent(props: Props): JSX.Element { onDeleteFrames, onRestoreFrames, fetching, } = props; - const activeCount = gtJobMeta.includedFrames.filter((frameID: number) => ( - !(frameID in gtJobMeta.deletedFrames) - )).length; - const excludedCount = Object.keys(gtJobMeta.deletedFrames).filter((frameID: string) => ( - gtJobMeta.includedFrames.includes(+frameID) - )).length; - const managementPagePlugins = usePlugins( (state: CombinedState) => ( state.plugins.components.qualityControlPage.tabs.management.page ), props, ); + + const activeCount = gtJobMeta.includedFrames + .filter((frameID: number) => !(frameID in gtJobMeta.deletedFrames)).length; + + const excludedCount = Object.keys(gtJobMeta.deletedFrames) + .filter((frameID: string) => gtJobMeta.includedFrames.includes(+frameID)).length; + const managementPageItems: [JSX.Element, number][] = []; managementPageItems.push([( - - + +
+ + ), 10]); + managementPageItems.push([( - - + + + + ), 20]); + managementPageItems.push( ...managementPagePlugins.map(({ component: Component, weight }, index) => { const component = ; From 7a22d16db04b1e39a89e7d50f48c0fc9b0763977 Mon Sep 17 00:00:00 2001 From: Boris Sekachev Date: Thu, 5 Sep 2024 12:40:07 +0300 Subject: [PATCH 68/79] Do not render quality block --- cvat-ui/src/components/create-task-page/create-task-content.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cvat-ui/src/components/create-task-page/create-task-content.tsx b/cvat-ui/src/components/create-task-page/create-task-content.tsx index e5a63fb7cab..fe9be32fa2c 100644 --- a/cvat-ui/src/components/create-task-page/create-task-content.tsx +++ b/cvat-ui/src/components/create-task-page/create-task-content.tsx @@ -1030,7 +1030,7 @@ class CreateTaskContent extends React.PureComponent {many ? this.renderFooterMultiTasks() : this.renderFooterSingleTask() } From a9d701074aafc78085ba82a6d3010e6c05e70b42 Mon Sep 17 00:00:00 2001 From: Boris Sekachev Date: Thu, 5 Sep 2024 12:48:40 +0300 Subject: [PATCH 69/79] Removed duplicated elements --- .../task-quality/quality-settings-form.tsx | 94 +++---------------- 1 file changed, 12 insertions(+), 82 deletions(-) diff --git a/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx b/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx index 1bc8b63b9f3..2eca4e4168b 100644 --- a/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/quality-settings-form.tsx @@ -130,84 +130,14 @@ export default function QualitySettingsForm(props: FormProps): JSX.Element | nul General - + - - - - - - - - - - - - - - - Job validation - - - - - - - - - - - - - - - - Shape comparison - - - - - - - + - + - + - + - + - + - + - + - + - + - + Date: Thu, 5 Sep 2024 13:03:53 +0300 Subject: [PATCH 70/79] Fixed classes --- .../quality-control/quality-control-page.tsx | 8 ++++---- .../src/components/quality-control/styles.scss | 17 +++++++++++++++-- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/cvat-ui/src/components/quality-control/quality-control-page.tsx b/cvat-ui/src/components/quality-control/quality-control-page.tsx index d723ad2cff0..5aee3ecbedb 100644 --- a/cvat-ui/src/components/quality-control/quality-control-page.tsx +++ b/cvat-ui/src/components/quality-control/quality-control-page.tsx @@ -430,17 +430,17 @@ function QualityControlPage(): JSX.Element { } return ( -
+
{fetching && qualitySettingsFetching ? ( -
+
) : ( - +
{backNavigation} - + {title} {tabs} diff --git a/cvat-ui/src/components/quality-control/styles.scss b/cvat-ui/src/components/quality-control/styles.scss index 54c705f6099..ef8bdc36538 100644 --- a/cvat-ui/src/components/quality-control/styles.scss +++ b/cvat-ui/src/components/quality-control/styles.scss @@ -4,6 +4,19 @@ @import 'base'; +.cvat-quality-control-inner { + background: $background-color-1; + min-height: $grid-unit-size * 95; + padding: $grid-unit-size * 4; + padding-bottom: $grid-unit-size; + padding-top: 0; + border-radius: $border-radius-base; + + .ant-tabs { + height: 100%; + } +} + .cvat-quality-settings-title { margin-bottom: $grid-unit-size * 2; align-items: center; @@ -12,8 +25,8 @@ .cvat-quality-settings-form { display: block; position: relative; - max-height: $grid-unit-size * 80; - overflow-y: scroll; + height: $grid-unit-size * 90; + overflow-y: auto; &::-webkit-scrollbar { background-color: #fff; From 59bdcde218360023d8e6da5e0c410ee93150fce9 Mon Sep 17 00:00:00 2001 From: Boris Sekachev Date: Thu, 5 Sep 2024 13:09:45 +0300 Subject: [PATCH 71/79] Renamed classes --- .../src/components/quality-control/quality-control-page.tsx | 4 ++-- cvat-ui/src/components/quality-control/quality-settings.tsx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cvat-ui/src/components/quality-control/quality-control-page.tsx b/cvat-ui/src/components/quality-control/quality-control-page.tsx index 5aee3ecbedb..0fbad9a31ec 100644 --- a/cvat-ui/src/components/quality-control/quality-control-page.tsx +++ b/cvat-ui/src/components/quality-control/quality-control-page.tsx @@ -212,7 +212,7 @@ function QualityControlPage(): JSX.Element { if (isMounted()) { notification.error({ description: error.toString(), - message: 'Could not initialize quality analytics page', + message: 'Could not initialize quality control page', }); } } @@ -422,7 +422,7 @@ function QualityControlPage(): JSX.Element { activeKey={activeTab} defaultActiveKey='Overview' onChange={onTabKeyChange} - className='cvat-task-analytics-tabs' + className='cvat-task-control-tabs' items={tabsItems.sort((item1, item2) => item1[1] - item2[1]) .map((item) => item[0])} /> diff --git a/cvat-ui/src/components/quality-control/quality-settings.tsx b/cvat-ui/src/components/quality-control/quality-settings.tsx index ba759ede9d6..8c8135df840 100644 --- a/cvat-ui/src/components/quality-control/quality-settings.tsx +++ b/cvat-ui/src/components/quality-control/quality-settings.tsx @@ -30,7 +30,7 @@ export default function QualitySettingsComponent(props: Props): JSX.Element | nu if (fetching) { return ( -
+
); From 1020819b89b8c944eae39c40c4c4906f468a860e Mon Sep 17 00:00:00 2001 From: Boris Sekachev Date: Thu, 5 Sep 2024 13:11:03 +0300 Subject: [PATCH 72/79] minor fix --- cvat-core/src/frames.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cvat-core/src/frames.ts b/cvat-core/src/frames.ts index cf03d25f18c..96295af7d57 100644 --- a/cvat-core/src/frames.ts +++ b/cvat-core/src/frames.ts @@ -444,7 +444,7 @@ export async function getFramesMeta(type: 'job' | 'task', id: number, forceReloa deleted_frames: Object.fromEntries(result.deleted_frames.map((_frame) => [_frame, true])), }); } - if (!frameMetaCache[id] || forceReload) { + if (!(id in frameMetaCache) || forceReload) { frameMetaCache[id] = serverProxy.frames.getMeta('job', id) .then((serverMeta) => new FramesMetaData({ ...serverMeta, From 31cbd5a85a9a516a4e095d4cb442d3f42ce09871 Mon Sep 17 00:00:00 2001 From: Boris Sekachev Date: Thu, 5 Sep 2024 16:05:58 +0300 Subject: [PATCH 73/79] Minor codestyle fixes --- cvat-core/src/annotations.ts | 4 ++-- cvat-ui/.eslintrc.cjs | 1 + cvat-ui/src/actions/tasks-actions.ts | 4 ++-- .../paid-feature-placeholder.tsx | 2 +- .../quality-control/quality-control-page.tsx | 9 +++++---- .../quality-control/quality-settings.tsx | 2 +- .../components/quality-control/styles.scss | 2 +- .../task-quality/allocation-table.tsx | 19 +++++++++---------- .../task-quality/empty-job.tsx | 4 ++-- .../task-quality/quality-settings-form.tsx | 4 ++-- .../quality-control/task-quality/summary.tsx | 2 +- .../task-quality/task-quality-component.tsx | 10 ++++------ .../task-quality-magement-component.tsx | 2 +- 13 files changed, 32 insertions(+), 33 deletions(-) diff --git a/cvat-core/src/annotations.ts b/cvat-core/src/annotations.ts index db596444af1..706cbc853ed 100644 --- a/cvat-core/src/annotations.ts +++ b/cvat-core/src/annotations.ts @@ -23,8 +23,8 @@ const jobHistoryCache = new WeakMap(); const taskHistoryCache = new WeakMap(); function getCache(sessionType: 'task' | 'job'): { - collection: typeof jobCollectionCache & typeof taskCollectionCache, - history: typeof jobHistoryCache & typeof jobHistoryCache + collection: typeof jobCollectionCache; + history: typeof jobHistoryCache; } { if (sessionType === 'task') { return { diff --git a/cvat-ui/.eslintrc.cjs b/cvat-ui/.eslintrc.cjs index 047353d3299..74f616efcc5 100644 --- a/cvat-ui/.eslintrc.cjs +++ b/cvat-ui/.eslintrc.cjs @@ -29,6 +29,7 @@ module.exports = { 'react/require-default-props': 'off', 'react/no-unused-prop-types': 'off', 'react/no-array-index-key': 'off', + 'react/prop-types': 'off', 'react/jsx-props-no-spreading': 0, 'jsx-quotes': ['error', 'prefer-single'], 'react/static-property-placement': ['warn', 'static public field'], diff --git a/cvat-ui/src/actions/tasks-actions.ts b/cvat-ui/src/actions/tasks-actions.ts index 2042b685d57..70eb56d4c1e 100644 --- a/cvat-ui/src/actions/tasks-actions.ts +++ b/cvat-ui/src/actions/tasks-actions.ts @@ -214,8 +214,8 @@ ThunkAction { use_zip_chunks: data.advanced.useZipChunks, use_cache: data.advanced.useCache, sorting_method: data.advanced.sortingMethod, - source_storage: new Storage(data.advanced.sourceStorage || { location: StorageLocation.LOCAL }).toJSON(), - target_storage: new Storage(data.advanced.targetStorage || { location: StorageLocation.LOCAL }).toJSON(), + source_storage: new Storage(data.advanced.sourceStorage ?? { location: StorageLocation.LOCAL }).toJSON(), + target_storage: new Storage(data.advanced.targetStorage ?? { location: StorageLocation.LOCAL }).toJSON(), }; if (data.projectId) { diff --git a/cvat-ui/src/components/paid-feature-placeholder/paid-feature-placeholder.tsx b/cvat-ui/src/components/paid-feature-placeholder/paid-feature-placeholder.tsx index eaa59acc9fc..4e2ecb186f5 100644 --- a/cvat-ui/src/components/paid-feature-placeholder/paid-feature-placeholder.tsx +++ b/cvat-ui/src/components/paid-feature-placeholder/paid-feature-placeholder.tsx @@ -16,7 +16,7 @@ interface Props { featureDescription: string; } -export default function PaidFeaturePlaceholder(props: Props): JSX.Element | null { +export default function PaidFeaturePlaceholder(props: Readonly): JSX.Element | null { const { featureDescription } = props; const { PAID_PLACEHOLDER_CONFIG } = config; diff --git a/cvat-ui/src/components/quality-control/quality-control-page.tsx b/cvat-ui/src/components/quality-control/quality-control-page.tsx index 0fbad9a31ec..74231a17c82 100644 --- a/cvat-ui/src/components/quality-control/quality-control-page.tsx +++ b/cvat-ui/src/components/quality-control/quality-control-page.tsx @@ -10,7 +10,7 @@ import React, { import { useParams } from 'react-router'; import { Link } from 'react-router-dom'; import { Row, Col } from 'antd/lib/grid'; -import Tabs from 'antd/lib/tabs'; +import Tabs, { TabsProps } from 'antd/lib/tabs'; import Title from 'antd/lib/typography/Title'; import notification from 'antd/lib/notification'; import { useIsMounted } from 'utils/hooks'; @@ -373,7 +373,7 @@ function QualityControlPage(): JSX.Element { ); - const tabsItems = []; + const tabsItems: [NonNullable[0], number][] = []; tabsItems.push([{ key: 'overview', label: 'Overview', @@ -416,6 +416,8 @@ function QualityControlPage(): JSX.Element { }, 30]); } + tabsItems.sort((item1, item2) => item1[1] - item2[1]); + tabs = ( item1[1] - item2[1]) - .map((item) => item[0])} + items={tabsItems.map((item) => item[0])} /> ); } diff --git a/cvat-ui/src/components/quality-control/quality-settings.tsx b/cvat-ui/src/components/quality-control/quality-settings.tsx index 8c8135df840..adf7574d94f 100644 --- a/cvat-ui/src/components/quality-control/quality-settings.tsx +++ b/cvat-ui/src/components/quality-control/quality-settings.tsx @@ -15,7 +15,7 @@ interface Props { setQualitySettings: (settings: QualitySettings) => void; } -export default function QualitySettingsComponent(props: Props): JSX.Element | null { +export default function QualitySettingsComponent(props: Readonly): JSX.Element | null { const { fetching, qualitySettings: settings, diff --git a/cvat-ui/src/components/quality-control/styles.scss b/cvat-ui/src/components/quality-control/styles.scss index ef8bdc36538..3e1ef7c3e7c 100644 --- a/cvat-ui/src/components/quality-control/styles.scss +++ b/cvat-ui/src/components/quality-control/styles.scss @@ -113,7 +113,7 @@ $excluded-background: #d9d9d973; } } -.cvat-open-fame-button { +.cvat-open-frame-button { span { text-overflow: ellipsis; overflow: hidden; diff --git a/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx index 14d674edca0..3468340b7b5 100644 --- a/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx @@ -41,7 +41,7 @@ interface RowData { actions: { frameID: number, active: boolean }, } -function ResizableTitle(props: Partial) { +function ResizableTitle(props: Partial): JSX.Element { const { children, onResize } = props; return ( ) { ); } -export default function AllocationTableComponent(props: Props): JSX.Element { +export default function AllocationTableComponent(props: Readonly): JSX.Element { const { task, gtJob, @@ -126,11 +126,11 @@ export default function AllocationTableComponent(props: Props): JSX.Element { }, }; - function nameRenderFunc(width: number) { - const component = ({ index, name }: { index: number, name: string }): JSX.Element => ( + const nameRenderFunc = (width: number) => ({ index, name }: { index: number, name: string }): JSX.Element => { + return ( ); - return component; - } + }; const [columns, setColumns] = useState[]>([]); - const handleResize = - (key: string) => (e: React.SyntheticEvent, data: ResizeCallbackData) => { + const handleResize = (key: string) => (_: React.SyntheticEvent, data: ResizeCallbackData) => { const { size: { width } } = data; setColumns((prevColumns) => { const index = prevColumns.findIndex((col) => col.key === key); @@ -158,6 +156,7 @@ export default function AllocationTableComponent(props: Props): JSX.Element { return nextColumns; }); }; + useEffect(() => { setColumns([ { @@ -172,7 +171,7 @@ export default function AllocationTableComponent(props: Props): JSX.Element { render: (index: number): JSX.Element => (
); } + +export default React.memo(PaidFeaturePlaceholder); diff --git a/cvat-ui/src/components/paid-feature-placeholder/styles.scss b/cvat-ui/src/components/customizable-components/paid-feature-placeholder/styles.scss similarity index 100% rename from cvat-ui/src/components/paid-feature-placeholder/styles.scss rename to cvat-ui/src/components/customizable-components/paid-feature-placeholder/styles.scss diff --git a/cvat-ui/src/components/quality-control/quality-control-page.tsx b/cvat-ui/src/components/quality-control/quality-control-page.tsx index 74231a17c82..59aee2ec60f 100644 --- a/cvat-ui/src/components/quality-control/quality-control-page.tsx +++ b/cvat-ui/src/components/quality-control/quality-control-page.tsx @@ -261,6 +261,7 @@ function QualityControlPage(): JSX.Element { dispatch(reducerActions.setQualitySettingsFetching(true)); const responseSettings = await settings.save(); dispatch(reducerActions.setQualitySettings(responseSettings)); + notification.info({ message: 'Settings have been updated' }); } catch (error: unknown) { notification.error({ message: 'Could not save quality settings', diff --git a/cvat-ui/src/components/quality-control/quality-settings.tsx b/cvat-ui/src/components/quality-control/quality-settings.tsx index adf7574d94f..eebc616a7b0 100644 --- a/cvat-ui/src/components/quality-control/quality-settings.tsx +++ b/cvat-ui/src/components/quality-control/quality-settings.tsx @@ -30,7 +30,7 @@ export default function QualitySettingsComponent(props: Readonly): JSX.El if (fetching) { return ( -
+
); diff --git a/cvat-ui/src/components/quality-control/styles.scss b/cvat-ui/src/components/quality-control/styles.scss index 3e1ef7c3e7c..3da3397c1cc 100644 --- a/cvat-ui/src/components/quality-control/styles.scss +++ b/cvat-ui/src/components/quality-control/styles.scss @@ -119,3 +119,9 @@ $excluded-background: #d9d9d973; overflow: hidden; } } + +.cvat-quality-control-loading { + position: absolute; + right: 50%; + margin-top: 20%; +} \ No newline at end of file diff --git a/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx index 3468340b7b5..530a3761cd3 100644 --- a/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx @@ -2,27 +2,23 @@ // // SPDX-License-Identifier: MIT -import React, { useEffect, useState } from 'react'; +import React, { useState } from 'react'; import { useSelector } from 'react-redux'; import { useHistory } from 'react-router'; -import { ResizableBox, ResizableProps, ResizeCallbackData } from 'react-resizable'; import { Row, Col } from 'antd/lib/grid'; import Table from 'antd/lib/table'; import Button from 'antd/lib/button'; import Text from 'antd/lib/typography/Text'; +import { Key } from 'antd/lib/table/interface'; import Icon, { DeleteOutlined } from '@ant-design/icons'; -import { Task, Job, FramesMetaData } from 'cvat-core-wrapper'; + import { RestoreIcon } from 'icons'; +import { Task, Job, FramesMetaData } from 'cvat-core-wrapper'; import { sorter, QualityColors } from 'utils/quality'; import CVATTooltip from 'components/common/cvat-tooltip'; -import { Key, ColumnType } from 'antd/lib/table/interface'; import { usePlugins } from 'utils/hooks'; import { CombinedState } from 'reducers'; -const DEFAULT_TITLE_HEIGHT = 20; -const DEFAULT_TITLE_WIDTH = 100; -const RESIZE_HANDLE_OFFSET = 30; - interface Props { task: Task; gtJob: Job; @@ -41,23 +37,6 @@ interface RowData { actions: { frameID: number, active: boolean }, } -function ResizableTitle(props: Partial): JSX.Element { - const { children, onResize } = props; - return ( - - {children} - - ); -} - export default function AllocationTableComponent(props: Readonly): JSX.Element { const { task, @@ -69,16 +48,8 @@ export default function AllocationTableComponent(props: Readonly): JSX.El } = props; const history = useHistory(); + const notAvailableComponent = Unknown; - const notAvailableComponent = ( - - N/A - - ); const qualityColumnPlugins = usePlugins( (state: CombinedState) => ( state.plugins.components.qualityControlPage.tabs.management.allocationTable.columns.quality @@ -102,6 +73,7 @@ export default function AllocationTableComponent(props: Readonly): JSX.El state.plugins.components.qualityControlPage.tabs.management.allocationTable.actions ), props, ); + const allocationTableActionsItems: [JSX.Element, number][] = []; allocationTableActionsItems.push( ...allocationTableActionsPlugins.map(({ component: Component, weight }, index) => { @@ -126,153 +98,117 @@ export default function AllocationTableComponent(props: Readonly): JSX.El }, }; - const nameRenderFunc = (width: number) => ({ index, name }: { index: number, name: string }): JSX.Element => { - return ( - - - - ); - }; - - const [columns, setColumns] = useState[]>([]); - const handleResize = (key: string) => (_: React.SyntheticEvent, data: ResizeCallbackData) => { - const { size: { width } } = data; - setColumns((prevColumns) => { - const index = prevColumns.findIndex((col) => col.key === key); - const nextColumns = [...prevColumns]; - nextColumns[index] = { ...nextColumns[index], width: width + RESIZE_HANDLE_OFFSET }; - if (key === 'name') { - nextColumns[index].render = nameRenderFunc(width + RESIZE_HANDLE_OFFSET); - } - return nextColumns; - }); - }; - - useEffect(() => { - setColumns([ - { - title: ( - - Frame - - ), - dataIndex: 'frame', - key: 'frame', - sorter: sorter('frame'), - render: (index: number): JSX.Element => ( -
- -
- ), - }, - { - title: ( - - Name - - ), - dataIndex: 'name', - key: 'name', - width: DEFAULT_TITLE_WIDTH, - sorter: sorter('name.name'), - render: nameRenderFunc(DEFAULT_TITLE_WIDTH), - }, - { - title: ( - - Use count - - ), - dataIndex: 'useCount', - key: 'useCount', - align: 'center' as const, - sorter: useCountSorter, - render: (frameID): JSX.Element => { - const useCountColumnItems: [JSX.Element, number][] = [[notAvailableComponent, 10]]; - useCountColumnItems.push( - ...useCountColumnPlugins.map(({ component: Component, weight }, index) => { - const component = ; - return [component, weight] as [JSX.Element, number]; - }), - ); - const renderedComponent = useCountColumnItems.sort((a, b) => b[1] - a[1])[0][0]; + const columns = [ + { + title: 'Frame', + dataIndex: 'frame', + key: 'frame', + width: 50, + sorter: sorter('frame'), + render: (frame: number): JSX.Element => ( +
+ +
+ ), + }, + { + title: 'Name', + dataIndex: 'name', + key: 'name', + width: 300, + sorter: sorter('name.name'), + render: ({ name, index }: { name: string, index: number }) => ( + + + + ), + }, + { + title: 'Use count', + dataIndex: 'useCount', + key: 'useCount', + align: 'center' as const, + width: 100, + sorter: useCountSorter, + render: (frameID: number): JSX.Element => { + const useCountColumnItems: [JSX.Element, number][] = [[notAvailableComponent, 10]]; + useCountColumnItems.push( + ...useCountColumnPlugins.map(({ component: Component, weight }, index) => { + const component = ; + return [component, weight] as [JSX.Element, number]; + }), + ); + const renderedComponent = useCountColumnItems.sort((a, b) => b[1] - a[1])[0][0]; - return renderedComponent; - }, + return renderedComponent; }, - { - title: ( - - Quality - - ), - dataIndex: 'quality', - key: 'quality', - align: 'center' as const, - className: 'cvat-job-item-quality', - sorter: qualitySorter, - render: (frameID): JSX.Element => { - const qualityColumnItems: [JSX.Element, number][] = [[notAvailableComponent, 10]]; - qualityColumnItems.push( - ...qualityColumnPlugins.map(({ component: Component, weight }, index) => { - const component = ; - return [component, weight] as [JSX.Element, number]; - }), - ); - const renderedComponent = qualityColumnItems.sort((a, b) => b[1] - a[1])[0][0]; + }, + { + title: 'Quality', + dataIndex: 'quality', + key: 'quality', + align: 'center' as const, + className: 'cvat-job-item-quality', + width: 50, + sorter: qualitySorter, + render: (frameID: number): JSX.Element => { + const qualityColumnItems: [JSX.Element, number][] = [[notAvailableComponent, 10]]; + qualityColumnItems.push( + ...qualityColumnPlugins.map(({ component: Component, weight }, index) => { + const component = ; + return [component, weight] as [JSX.Element, number]; + }), + ); + const renderedComponent = qualityColumnItems.sort((a, b) => b[1] - a[1])[0][0]; - return renderedComponent; - }, - }, - { - title: ( - - Actions - - ), - dataIndex: 'actions', - key: 'actions', - align: 'center' as const, - className: 'cvat-job-item-quality', - sorter: sorter('active'), - filters: [ - { text: 'Active', value: true }, - { text: 'Excluded', value: false }, - ], - onFilter: (value: boolean | Key, record: RowData) => record.actions.active === value, - render: ({ frameID, active }: { frameID: number, active: boolean }): JSX.Element => ( - active ? ( - { onDeleteFrames([frameID]); }} - /> - ) : ( - { onRestoreFrames([frameID]); }} - component={RestoreIcon} - /> - ) - ), + return renderedComponent; }, - ]); - }, []); + }, + { + title: 'Actions', + dataIndex: 'actions', + key: 'actions', + align: 'center' as const, + className: 'cvat-job-item-quality', + width: 20, + filters: [ + { text: 'Active', value: true }, + { text: 'Excluded', value: false }, + ], + sorter: sorter('active'), + onFilter: (value: boolean | Key, record: RowData) => record.actions.active === value, + render: ({ frameID, active }: { frameID: number, active: boolean }): JSX.Element => ( + active ? ( + { onDeleteFrames([frameID]); }} + /> + ) : ( + { onRestoreFrames([frameID]); }} + component={RestoreIcon} + /> + ) + ), + }, + ]; const data = gtJobMeta.includedFrames.map((frameID: number) => ({ key: frameID, diff --git a/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx b/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx index e8e929516ff..641115b42ec 100644 --- a/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx @@ -2,15 +2,11 @@ // // SPDX-License-Identifier: MIT -import { - TargetMetric, - Task, -} from 'cvat-core-wrapper'; import React from 'react'; + +import { TargetMetric, Task } from 'cvat-core-wrapper'; import { QualityColors } from 'utils/quality'; -import PaidFeaturePlaceholder from 'components/paid-feature-placeholder/paid-feature-placeholder'; -import { usePlugins } from 'utils/hooks'; -import config from 'config'; +import CustomizableComponents from 'components/customizable-components'; interface Props { task: Task; @@ -19,38 +15,13 @@ interface Props { } function TaskQualityComponent(props: Readonly): JSX.Element { - const { - task, getQualityColor, targetMetric, - } = props; - - const { PAID_PLACEHOLDER_CONFIG: { features: { qualityControl: featureDescription } } } = config; - - const plugins = usePlugins((state) => state.plugins.components.qualityControlPage.tabs.overview, props, { - task, - getQualityColor, - targetMetric, - }); - - const items: [JSX.Element, number][] = []; - - items.push(...plugins.map(({ component: Component, weight }, index: number) => ( - [, weight] as [JSX.Element, number] - ))); + const { task, getQualityColor, targetMetric } = props; - const renderedComponent = items.sort((a, b) => b[1] - a[1])[0][0]; + const Component = CustomizableComponents.QUALITY_CONTROL_OVERVIEW; return (
- - {renderedComponent} +
); } diff --git a/yarn.lock b/yarn.lock index d27570bfa21..f88cb75b249 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2418,13 +2418,6 @@ hoist-non-react-statics "^3.3.0" redux "^4.0.0" -"@types/react-resizable@^3.0.8": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@types/react-resizable/-/react-resizable-3.0.8.tgz#b27001b4d262c82cc076272df4b8ef91d9487918" - integrity sha512-Pcvt2eGA7KNXldt1hkhVhAgZ8hK41m0mp89mFgQi7LAAEZiaLgm4fHJ5zbJZ/4m2LVaAyYrrRRv1LHDcrGQanA== - dependencies: - "@types/react" "*" - "@types/react-router-dom@^5.1.9": version "5.3.3" resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83" From 29ce9a6f6256db0077386708d4bfc24cac70534d Mon Sep 17 00:00:00 2001 From: Boris Sekachev Date: Sun, 8 Sep 2024 17:18:15 +0300 Subject: [PATCH 75/79] Updated for plugin --- cvat-core/src/api.ts | 12 +- cvat-core/src/index.ts | 8 +- .../customizable-components/index.tsx | 5 +- cvat-ui/src/components/plugins-entrypoint.tsx | 38 ++-- .../quality-control/quality-control-page.tsx | 15 +- .../components/quality-control/styles.scss | 17 +- .../task-quality/allocation-table.tsx | 179 ++++-------------- .../task-quality/empty-job.tsx | 39 ---- .../quality-control/task-quality/summary.tsx | 2 +- .../task-quality/task-quality-component.tsx | 7 +- .../task-quality-magement-component.tsx | 73 +++---- cvat-ui/src/reducers/index.ts | 31 --- cvat-ui/src/reducers/plugins-reducer.ts | 31 --- cvat-ui/src/utils/quality.ts | 85 --------- 14 files changed, 120 insertions(+), 422 deletions(-) delete mode 100644 cvat-ui/src/components/quality-control/task-quality/empty-job.tsx diff --git a/cvat-core/src/api.ts b/cvat-core/src/api.ts index ba7191bbc05..fe3975217ce 100644 --- a/cvat-core/src/api.ts +++ b/cvat-core/src/api.ts @@ -16,12 +16,16 @@ import Project from './project'; import implementProject from './project-implementation'; import { Attribute, Label } from './labels'; import MLModel from './ml-model'; -import { FrameData } from './frames'; +import { FrameData, FramesMetaData } from './frames'; import CloudStorage from './cloud-storage'; import Organization from './organization'; import Webhook from './webhook'; import AnnotationGuide from './guide'; import BaseSingleFrameAction from './annotations-actions'; +import QualityReport from './quality-report'; +import QualityConflict from './quality-conflict'; +import QualitySettings from './quality-settings'; +import AnalyticsReport from './analytics-report'; import { Request } from './request'; import * as enums from './enums'; @@ -416,6 +420,12 @@ function build(): CVATCore { Webhook, AnnotationGuide, BaseSingleFrameAction, + QualitySettings, + AnalyticsReport, + QualityConflict, + QualityReport, + Request, + FramesMetaData, }, utils: { mask2Rle, diff --git a/cvat-core/src/index.ts b/cvat-core/src/index.ts index 89f5d98f4b9..4c68e2b2358 100644 --- a/cvat-core/src/index.ts +++ b/cvat-core/src/index.ts @@ -23,7 +23,7 @@ import ObjectState from './object-state'; import MLModel from './ml-model'; import Issue from './issue'; import Comment from './comment'; -import { FrameData } from './frames'; +import { FrameData, FramesMetaData } from './frames'; import CloudStorage from './cloud-storage'; import Organization, { Invitation } from './organization'; import Webhook from './webhook'; @@ -209,6 +209,12 @@ export default interface CVATCore { Webhook: typeof Webhook; AnnotationGuide: typeof AnnotationGuide; BaseSingleFrameAction: typeof BaseSingleFrameAction; + QualityReport: typeof QualityReport; + QualityConflict: typeof QualityConflict; + QualitySettings: typeof QualitySettings; + AnalyticsReport: typeof AnalyticsReport; + Request: typeof Request; + FramesMetaData: typeof FramesMetaData; }; utils: { mask2Rle: typeof mask2Rle; diff --git a/cvat-ui/src/components/customizable-components/index.tsx b/cvat-ui/src/components/customizable-components/index.tsx index 0221f9a508e..bcfa50b40a3 100644 --- a/cvat-ui/src/components/customizable-components/index.tsx +++ b/cvat-ui/src/components/customizable-components/index.tsx @@ -1,4 +1,4 @@ -// Copyright (C) 2023 CVAT.ai Corporation +// Copyright (C) 2023-2024 CVAT.ai Corporation // // SPDX-License-Identifier: MIT @@ -10,6 +10,7 @@ import { SaveIcon } from 'icons'; import GlobalHotKeys from 'utils/mousetrap-react'; import CVATTooltip from 'components/common/cvat-tooltip'; import PaidFeaturePlaceholder from 'components/customizable-components/paid-feature-placeholder/paid-feature-placeholder'; +import AllocationTable from 'components/quality-control/task-quality/allocation-table'; import config from 'config'; import { CombinedState } from 'reducers'; import { ShortcutScope } from 'utils/enums'; @@ -61,6 +62,8 @@ const storage = { QUALITY_CONTROL_OVERVIEW: (_: any) => ( ), + + QUALITY_CONTROL_ALLOCATION_TABLE: AllocationTable, }; export default storage; diff --git a/cvat-ui/src/components/plugins-entrypoint.tsx b/cvat-ui/src/components/plugins-entrypoint.tsx index 882d1a2d646..26c56edc6a8 100644 --- a/cvat-ui/src/components/plugins-entrypoint.tsx +++ b/cvat-ui/src/components/plugins-entrypoint.tsx @@ -6,14 +6,13 @@ import React, { useEffect } from 'react'; import { Dispatch, AnyAction } from 'redux'; import { useDispatch } from 'react-redux'; +import CustomizableComponents from 'components/customizable-components'; import { PluginsActionTypes, pluginActions } from 'actions/plugins-actions'; import { getCore, CVATCore, APIWrapperEnterOptions } from 'cvat-core-wrapper'; import { modelsActions } from 'actions/models-actions'; import { changeFrameAsync, updateCurrentJobAsync } from 'actions/annotation-actions'; -import { updateJobAsync, deleteJobAsync } from 'actions/jobs-actions'; +import { updateJobAsync } from 'actions/jobs-actions'; import { getCVATStore } from 'cvat-store'; -import { importActions } from 'actions/import-actions'; -import { exportActions } from 'actions/export-actions'; const core = getCore(); @@ -26,32 +25,27 @@ export type PluginActionCreators = { removeUICallback: typeof pluginActions['removeUICallback'], updateCurrentJobAsync: typeof updateCurrentJobAsync, updateJobAsync: typeof updateJobAsync, - deleteJobAsync: typeof deleteJobAsync, - openExportDatasetModal: typeof exportActions.openExportDatasetModal, - openImportDatasetModal: typeof importActions.openImportDatasetModal, }; +export interface ComponentBuilderArgs { + dispatch: Dispatch; + REGISTER_ACTION: PluginsActionTypes.ADD_UI_COMPONENT; + REMOVE_ACTION: PluginsActionTypes.REMOVE_UI_COMPONENT; + customizableComponents: typeof CustomizableComponents; + actionCreators: PluginActionCreators; + core: CVATCore; + store: ReturnType; +} + export type ComponentBuilder = ({ dispatch, REGISTER_ACTION, REMOVE_ACTION, + customizableComponents, actionCreators, core, store, -}: { - dispatch: Dispatch, - /** - * @deprecated Please, use actionCreators.addUIComponent instead - */ - REGISTER_ACTION: PluginsActionTypes.ADD_UI_COMPONENT, - /** - * @deprecated Please, use actionCreators.removeUIComponent instead - */ - REMOVE_ACTION: PluginsActionTypes.REMOVE_UI_COMPONENT, - actionCreators: PluginActionCreators, - core: CVATCore, - store: ReturnType -}) => { +}: ComponentBuilderArgs) => { name: string; destructor: CallableFunction; globalStateDidUpdate?: CallableFunction; @@ -73,13 +67,11 @@ function PluginEntrypoint(): null { dispatch, REGISTER_ACTION: PluginsActionTypes.ADD_UI_COMPONENT, REMOVE_ACTION: PluginsActionTypes.REMOVE_UI_COMPONENT, + customizableComponents: CustomizableComponents, actionCreators: { changeFrameAsync, updateCurrentJobAsync, updateJobAsync, - deleteJobAsync, - openExportDatasetModal: exportActions.openExportDatasetModal, - openImportDatasetModal: importActions.openImportDatasetModal, getModelsSuccess: modelsActions.getModelsSuccess, addUICallback: pluginActions.addUICallback, removeUICallback: pluginActions.removeUICallback, diff --git a/cvat-ui/src/components/quality-control/quality-control-page.tsx b/cvat-ui/src/components/quality-control/quality-control-page.tsx index 59aee2ec60f..7451b365f42 100644 --- a/cvat-ui/src/components/quality-control/quality-control-page.tsx +++ b/cvat-ui/src/components/quality-control/quality-control-page.tsx @@ -21,7 +21,6 @@ import { import CVATLoadingSpinner from 'components/common/loading-spinner'; import GoBackButton from 'components/common/go-back-button'; import { ActionUnion, createAction } from 'utils/redux'; -import { qualityColorGenerator, QualityColors } from 'utils/quality'; import TaskQualityComponent from './task-quality/task-quality-component'; import TaskQualityManagementComponent from './task-quality/task-quality-magement-component'; import QualitySettingsComponent from './quality-settings'; @@ -45,7 +44,6 @@ interface State { qualitySettings: { settings: QualitySettings | null; fetching: boolean; - getQualityColor: ((value?: number) => QualityColors) | null; targetMetric: TargetMetric | null; }, } @@ -102,7 +100,6 @@ const reducer = (state: State, action: ActionUnion): Stat qualitySettings: { ...state.qualitySettings, settings: action.payload.qualitySettings, - getQualityColor: qualityColorGenerator(action.payload.qualitySettings.targetMetricThreshold), targetMetric: action.payload.qualitySettings.targetMetric, }, }; @@ -159,7 +156,6 @@ function QualityControlPage(): JSX.Element { qualitySettings: { settings: null, fetching: true, - getQualityColor: null, targetMetric: null, }, }); @@ -349,11 +345,11 @@ function QualityControlPage(): JSX.Element { qualitySettings: { settings: qualitySettings, fetching: qualitySettingsFetching, - getQualityColor, targetMetric, + targetMetric, }, } = state; - const settingsInitialized = qualitySettings && getQualityColor && targetMetric; + const settingsInitialized = qualitySettings && targetMetric; if (instanceType && instance && settingsInitialized) { backNavigation = ( @@ -379,11 +375,7 @@ function QualityControlPage(): JSX.Element { key: 'overview', label: 'Overview', children: ( - + ), }, 10]); @@ -398,7 +390,6 @@ function QualityControlPage(): JSX.Element { gtJobMeta={gtJobMeta} onDeleteFrames={onDeleteFrames} onRestoreFrames={onRestoreFrames} - getQualityColor={getQualityColor} fetching={fetching} /> ), diff --git a/cvat-ui/src/components/quality-control/styles.scss b/cvat-ui/src/components/quality-control/styles.scss index 3da3397c1cc..27e82efbaba 100644 --- a/cvat-ui/src/components/quality-control/styles.scss +++ b/cvat-ui/src/components/quality-control/styles.scss @@ -124,4 +124,19 @@ $excluded-background: #d9d9d973; position: absolute; right: 50%; margin-top: 20%; -} \ No newline at end of file +} + +.cvat-annotations-quality-allocation-table-summary { + margin-bottom: $grid-unit-size * 2; + + .ant-statistic { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + } + + .ant-card-body { + padding: $grid-unit-size * 2 $grid-unit-size * 3; + } +} diff --git a/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx index 530a3761cd3..d09333c7797 100644 --- a/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/allocation-table.tsx @@ -3,7 +3,6 @@ // SPDX-License-Identifier: MIT import React, { useState } from 'react'; -import { useSelector } from 'react-redux'; import { useHistory } from 'react-router'; import { Row, Col } from 'antd/lib/grid'; import Table from 'antd/lib/table'; @@ -14,89 +13,41 @@ import Icon, { DeleteOutlined } from '@ant-design/icons'; import { RestoreIcon } from 'icons'; import { Task, Job, FramesMetaData } from 'cvat-core-wrapper'; -import { sorter, QualityColors } from 'utils/quality'; import CVATTooltip from 'components/common/cvat-tooltip'; -import { usePlugins } from 'utils/hooks'; -import { CombinedState } from 'reducers'; +import { sorter } from 'utils/quality'; interface Props { task: Task; gtJob: Job; gtJobMeta: FramesMetaData; - getQualityColor: (value?: number) => QualityColors; onDeleteFrames: (frames: number[]) => void; onRestoreFrames: (frames: number[]) => void; } interface RowData { frame: number; - name: { name: string, index: number }, - useCount: number, - quality: number, - active: boolean, - actions: { frameID: number, active: boolean }, + name: string; + active: boolean; } -export default function AllocationTableComponent(props: Readonly): JSX.Element { +function AllocationTableComponent(props: Readonly): JSX.Element { const { - task, - gtJob, - gtJobMeta, - getQualityColor, - onDeleteFrames, - onRestoreFrames, + task, gtJob, gtJobMeta, + onDeleteFrames, onRestoreFrames, } = props; const history = useHistory(); - const notAvailableComponent = Unknown; - - const qualityColumnPlugins = usePlugins( - (state: CombinedState) => ( - state.plugins.components.qualityControlPage.tabs.management.allocationTable.columns.quality - ), props, { frameID: null }, - ); - const qualitySorter = useSelector((state: CombinedState) => ( - state.plugins.callbacks.qualityControlPage.tabs.management.allocationTable.columns.quality.sorter - ))[0] ?? sorter('quality'); - - const useCountColumnPlugins = usePlugins( - (state: CombinedState) => ( - state.plugins.components.qualityControlPage.tabs.management.allocationTable.columns.useCount - ), props, { frameID: null }, - ); - const useCountSorter = useSelector((state: CombinedState) => ( - state.plugins.callbacks.qualityControlPage.tabs.management.allocationTable.columns.useCount.sorter - ))[0] ?? sorter('useCount'); - - const allocationTableActionsPlugins = usePlugins( - (state: CombinedState) => ( - state.plugins.components.qualityControlPage.tabs.management.allocationTable.actions - ), props, - ); - - const allocationTableActionsItems: [JSX.Element, number][] = []; - allocationTableActionsItems.push( - ...allocationTableActionsPlugins.map(({ component: Component, weight }, index) => { - const component = ; - return [component, weight] as [JSX.Element, number]; - }), - ); - - const [select, setSelect] = useState<{ selectedRowKeys: Key[], selectedRows: RowData[] }>({ + const [selection, setSelection] = useState<{ selectedRowKeys: Key[], selectedRows: RowData[] }>({ selectedRowKeys: [], selectedRows: [], }); - const rowSelection = { - selectedRowKeys: select.selectedRowKeys, - onChange: (selectedRowKeys: Key[], selectedRows: RowData[]) => { - setSelect({ - ...select, - selectedRowKeys: [...selectedRowKeys], - selectedRows: [...selectedRows], - }); - }, - }; + const data = gtJobMeta.includedFrames.map((frameID: number) => ({ + key: frameID, + frame: frameID, + name: gtJobMeta.frames[frameID]?.name ?? gtJobMeta.frames[0].name, + active: !(frameID in gtJobMeta.deletedFrames), + })); const columns = [ { @@ -125,15 +76,15 @@ export default function AllocationTableComponent(props: Readonly): JSX.El dataIndex: 'name', key: 'name', width: 300, - sorter: sorter('name.name'), - render: ({ name, index }: { name: string, index: number }) => ( + sorter: sorter('name'), + render: (name: string, record: RowData) => (
{ - const framesToUpdate = select.selectedRows + const framesToUpdate = selection.selectedRows .filter((frameData) => frameData.active) .map((frameData) => frameData.frame); onDeleteFrames(framesToUpdate); - setSelect({ - ...select, - selectedRowKeys: [], - selectedRows: [], - }); + setSelection({ selectedRowKeys: [], selectedRows: [] }); }} /> { - const framesToUpdate = select.selectedRows + const framesToUpdate = selection.selectedRows .filter((frameData) => !frameData.active) .map((frameData) => frameData.frame); onRestoreFrames(framesToUpdate); - setSelect({ - ...select, - selectedRowKeys: [], - selectedRows: [], - }); + setSelection({ selectedRowKeys: [], selectedRows: [] }); }} component={RestoreIcon} /> @@ -279,10 +165,21 @@ export default function AllocationTableComponent(props: Readonly): JSX.El }} columns={columns} dataSource={data} - rowSelection={rowSelection} + rowSelection={{ + selectedRowKeys: selection.selectedRowKeys, + onChange: (selectedRowKeys: Key[], selectedRows: RowData[]) => { + setSelection({ + ...selection, + selectedRowKeys, + selectedRows, + }); + }, + }} size='small' pagination={{ showSizeChanger: true }} /> ); } + +export default React.memo(AllocationTableComponent); diff --git a/cvat-ui/src/components/quality-control/task-quality/empty-job.tsx b/cvat-ui/src/components/quality-control/task-quality/empty-job.tsx deleted file mode 100644 index 51ccedb270e..00000000000 --- a/cvat-ui/src/components/quality-control/task-quality/empty-job.tsx +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (C) 2023 CVAT.ai Corporation -// -// SPDX-License-Identifier: MIT - -import '../styles.scss'; - -import React from 'react'; -import { Link } from 'react-router-dom'; -import { Col, Row } from 'antd/lib/grid'; -import Card from 'antd/lib/card'; -import Button from 'antd/lib/button'; -import Text from 'antd/lib/typography/Text'; - -interface Props { - taskID: number; -} - -function EmptyJobComponent(props: Readonly): JSX.Element { - const { taskID } = props; - - return ( - - - - - A ground truth job for the task was not created - - - - - - - - ); -} - -export default React.memo(EmptyJobComponent); diff --git a/cvat-ui/src/components/quality-control/task-quality/summary.tsx b/cvat-ui/src/components/quality-control/task-quality/summary.tsx index e32f040c94b..e91828909a1 100644 --- a/cvat-ui/src/components/quality-control/task-quality/summary.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/summary.tsx @@ -51,7 +51,7 @@ export function SummaryComponent(props: Readonly): JSX.Element { return ( diff --git a/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx b/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx index 641115b42ec..0cfcf8a4b31 100644 --- a/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx @@ -5,23 +5,20 @@ import React from 'react'; import { TargetMetric, Task } from 'cvat-core-wrapper'; -import { QualityColors } from 'utils/quality'; import CustomizableComponents from 'components/customizable-components'; interface Props { task: Task; - getQualityColor: (value?: number) => QualityColors; targetMetric: TargetMetric; } function TaskQualityComponent(props: Readonly): JSX.Element { - const { task, getQualityColor, targetMetric } = props; - + const { task, targetMetric } = props; const Component = CustomizableComponents.QUALITY_CONTROL_OVERVIEW; return (
- +
); } diff --git a/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx b/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx index be9d9fc52c6..ac4ecc42139 100644 --- a/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx @@ -4,76 +4,33 @@ import { FramesMetaData, Job, Task } from 'cvat-core-wrapper'; import React from 'react'; -import { QualityColors } from 'utils/quality'; import { Row, Col } from 'antd/es/grid'; import Spin from 'antd/lib/spin'; -import { usePlugins } from 'utils/hooks'; -import { CombinedState } from 'reducers'; +import CustomizableComponents from 'components/customizable-components'; import { SummaryComponent } from './summary'; -import AllocationTableComponent from './allocation-table'; interface Props { task: Task; gtJob: Job; gtJobMeta: FramesMetaData; fetching: boolean; - getQualityColor: (value?: number) => QualityColors; onDeleteFrames: (frames: number[]) => void; onRestoreFrames: (frames: number[]) => void; } function TaskQualityManagementComponent(props: Readonly): JSX.Element { const { - task, gtJob, gtJobMeta, getQualityColor, + task, gtJob, gtJobMeta, onDeleteFrames, onRestoreFrames, fetching, } = props; - const managementPagePlugins = usePlugins( - (state: CombinedState) => ( - state.plugins.components.qualityControlPage.tabs.management.page - ), props, - ); - const activeCount = gtJobMeta.includedFrames .filter((frameID: number) => !(frameID in gtJobMeta.deletedFrames)).length; const excludedCount = Object.keys(gtJobMeta.deletedFrames) .filter((frameID: string) => gtJobMeta.includedFrames.includes(+frameID)).length; - const managementPageItems: [JSX.Element, number][] = []; - managementPageItems.push([( - -
- - - - ), 10]); - - managementPageItems.push([( - - - - - - ), 20]); - - managementPageItems.push( - ...managementPagePlugins.map(({ component: Component, weight }, index) => { - const component = ; - return [component, weight] as [JSX.Element, number]; - }), - ); + const AllocationTableComponent = CustomizableComponents.QUALITY_CONTROL_ALLOCATION_TABLE; return (
@@ -84,10 +41,26 @@ function TaskQualityManagementComponent(props: Readonly): JSX.Element {
) } - { - managementPageItems.sort((item1, item2) => item1[1] - item2[1]) - .map((item) => item[0]) - } + +
+ + + + + + + + ); } diff --git a/cvat-ui/src/reducers/index.ts b/cvat-ui/src/reducers/index.ts index d0e6d920a1c..7c7184ef87b 100644 --- a/cvat-ui/src/reducers/index.ts +++ b/cvat-ui/src/reducers/index.ts @@ -259,22 +259,6 @@ export interface PluginsState { }; }; }; - qualityControlPage:{ - tabs: { - management: { - allocationTable: { - columns: { - quality: { - sorter: ((row1: any, row2: any) => number)[]; - }; - useCount: { - sorter: ((row1: any, row2: any) => number)[]; - }; - } - } - }, - }, - }; }; components: { header: { @@ -300,21 +284,6 @@ export interface PluginsState { }; }; }; - qualityControlPage:{ - tabs: { - overview: PluginComponent[]; - management: { - page: PluginComponent[]; - allocationTable: { - columns: { - quality: PluginComponent[]; - useCount: PluginComponent[]; - }, - actions: PluginComponent[]; - } - }, - }, - }; projectActions: { items: PluginComponent[]; }; diff --git a/cvat-ui/src/reducers/plugins-reducer.ts b/cvat-ui/src/reducers/plugins-reducer.ts index 67c4e882fd5..1ad69517ef9 100644 --- a/cvat-ui/src/reducers/plugins-reducer.ts +++ b/cvat-ui/src/reducers/plugins-reducer.ts @@ -22,22 +22,6 @@ const defaultState: PluginsState = { }, }, }, - qualityControlPage: { - tabs: { - management: { - allocationTable: { - columns: { - quality: { - sorter: [], - }, - useCount: { - sorter: [], - }, - }, - }, - }, - }, - }, }, components: { header: { @@ -63,21 +47,6 @@ const defaultState: PluginsState = { }, }, }, - qualityControlPage: { - tabs: { - overview: [], - management: { - page: [], - allocationTable: { - columns: { - quality: [], - useCount: [], - }, - actions: [], - }, - }, - }, - }, projectActions: { items: [], }, diff --git a/cvat-ui/src/utils/quality.ts b/cvat-ui/src/utils/quality.ts index 6910ce6adb0..a7042cddfe9 100644 --- a/cvat-ui/src/utils/quality.ts +++ b/cvat-ui/src/utils/quality.ts @@ -2,49 +2,6 @@ // // SPDX-License-Identifier: MIT -import { ColumnFilterItem } from 'antd/lib/table/interface'; -import { QualityReport } from 'cvat-core-wrapper'; -import config from 'config'; - -export enum QualityColors { - GREEN = '#237804', - YELLOW = '#ed9c00', - RED = '#ff4d4f', - GRAY = '#8c8c8c', -} - -const ratios = { - low: 0.82, - middle: 0.9, - high: 1, -}; - -export const qualityColorGenerator = (targetMetric: number) => (value?: number) => { - const baseValue = targetMetric * 100; - - const thresholds = { - low: baseValue * ratios.low, - middle: baseValue * ratios.middle, - high: baseValue * ratios.high, - }; - - if (!value) { - return QualityColors.GRAY; - } - - if (value >= thresholds.high) { - return QualityColors.GREEN; - } - if (value >= thresholds.middle) { - return QualityColors.YELLOW; - } - if (value >= thresholds.low) { - return QualityColors.RED; - } - - return QualityColors.GRAY; -}; - export function sorter(path: string) { return (obj1: any, obj2: any): number => { let currentObj1 = obj1; @@ -79,45 +36,3 @@ export function sorter(path: string) { return 1; }; } - -export function collectAssignees(reports: QualityReport[]): ColumnFilterItem[] { - return Array.from( - new Set( - reports.map((report: QualityReport) => report.assignee?.username ?? null), - ), - ).map((value: string | null) => ({ text: value ?? 'Is Empty', value: value ?? false })); -} - -export function toRepresentation(val?: number, isPercent = true, decimals = 1): string { - if (!Number.isFinite(val)) { - return 'N/A'; - } - - let repr = ''; - if (!val || (isPercent && (val === 100))) { - repr = `${val}`; // remove noise in the fractional part - } else { - repr = `${val?.toFixed(decimals)}`; - } - - if (isPercent) { - repr += `${isPercent ? '%' : ''}`; - } - - return repr; -} - -export function percent(a?: number, b?: number, decimals = 1): string | number { - if (typeof a !== 'undefined' && Number.isFinite(a) && b) { - return toRepresentation(Number(a / b) * 100, true, decimals); - } - return 'N/A'; -} - -export function clampValue(a?: number): string | number { - if (typeof a !== 'undefined' && Number.isFinite(a)) { - if (a <= config.NUMERIC_VALUE_CLAMP_THRESHOLD) return a; - return `> ${config.NUMERIC_VALUE_CLAMP_THRESHOLD}`; - } - return 'N/A'; -} From 40a80d78bcb128e3112f4cf9db689ee6278572cb Mon Sep 17 00:00:00 2001 From: Boris Sekachev Date: Sun, 8 Sep 2024 21:07:19 +0300 Subject: [PATCH 76/79] Handle useProjectCloudStorage switch --- .../components/create-task-page/create-task-content.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cvat-ui/src/components/create-task-page/create-task-content.tsx b/cvat-ui/src/components/create-task-page/create-task-content.tsx index fe9be32fa2c..655d732c343 100644 --- a/cvat-ui/src/components/create-task-page/create-task-content.tsx +++ b/cvat-ui/src/components/create-task-page/create-task-content.tsx @@ -478,12 +478,12 @@ class CreateTaskContent extends React.PureComponent { throw new Error(`Couldn't fetch the project ${projectId} ${error.toString()}`); From 953e3d4d3d99da7ff2ba9303793b4baa5756d1b1 Mon Sep 17 00:00:00 2001 From: Boris Sekachev Date: Mon, 9 Sep 2024 20:42:23 +0300 Subject: [PATCH 77/79] Updated styles on long tables --- cvat-ui/src/components/quality-control/styles.scss | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/cvat-ui/src/components/quality-control/styles.scss b/cvat-ui/src/components/quality-control/styles.scss index 27e82efbaba..f2f687020ca 100644 --- a/cvat-ui/src/components/quality-control/styles.scss +++ b/cvat-ui/src/components/quality-control/styles.scss @@ -6,15 +6,10 @@ .cvat-quality-control-inner { background: $background-color-1; - min-height: $grid-unit-size * 95; padding: $grid-unit-size * 4; padding-bottom: $grid-unit-size; padding-top: 0; border-radius: $border-radius-base; - - .ant-tabs { - height: 100%; - } } .cvat-quality-settings-title { @@ -25,7 +20,7 @@ .cvat-quality-settings-form { display: block; position: relative; - height: $grid-unit-size * 90; + height: calc(100vh - $grid-unit-size * 32); overflow-y: auto; &::-webkit-scrollbar { @@ -140,3 +135,8 @@ $excluded-background: #d9d9d973; padding: $grid-unit-size * 2 $grid-unit-size * 3; } } + +.cvat-frame-allocation-table .ant-table-container { + max-height: calc(100vh - $grid-unit-size * 60); + overflow: auto; +} From a41db37f0b2ec6adc59e8e0f3d833fd46c453151 Mon Sep 17 00:00:00 2001 From: Boris Sekachev Date: Tue, 10 Sep 2024 12:40:39 +0300 Subject: [PATCH 78/79] Some code refactoring --- .../quality-control/quality-control-page.tsx | 12 ++++---- ...-settings.tsx => quality-settings-tab.tsx} | 28 +++++++++++-------- .../components/quality-control/styles.scss | 2 +- ...component.tsx => quality-magement-tab.tsx} | 11 ++++---- ...component.tsx => quality-overview-tab.tsx} | 6 ++-- cvat-ui/src/components/task-page/styles.scss | 9 ------ .../support/commands_review_pipeline.js | 19 +------------ 7 files changed, 33 insertions(+), 54 deletions(-) rename cvat-ui/src/components/quality-control/{quality-settings.tsx => quality-settings-tab.tsx} (59%) rename cvat-ui/src/components/quality-control/task-quality/{task-quality-magement-component.tsx => quality-magement-tab.tsx} (91%) rename cvat-ui/src/components/quality-control/task-quality/{task-quality-component.tsx => quality-overview-tab.tsx} (75%) diff --git a/cvat-ui/src/components/quality-control/quality-control-page.tsx b/cvat-ui/src/components/quality-control/quality-control-page.tsx index 7451b365f42..64e475321cf 100644 --- a/cvat-ui/src/components/quality-control/quality-control-page.tsx +++ b/cvat-ui/src/components/quality-control/quality-control-page.tsx @@ -21,9 +21,9 @@ import { import CVATLoadingSpinner from 'components/common/loading-spinner'; import GoBackButton from 'components/common/go-back-button'; import { ActionUnion, createAction } from 'utils/redux'; -import TaskQualityComponent from './task-quality/task-quality-component'; -import TaskQualityManagementComponent from './task-quality/task-quality-magement-component'; -import QualitySettingsComponent from './quality-settings'; +import QualityOverviewTab from './task-quality/quality-overview-tab'; +import QualityManagementTab from './task-quality/quality-magement-tab'; +import QualitySettingsTab from './quality-settings-tab'; const core = getCore(); @@ -375,7 +375,7 @@ function QualityControlPage(): JSX.Element { key: 'overview', label: 'Overview', children: ( - + ), }, 10]); @@ -384,7 +384,7 @@ function QualityControlPage(): JSX.Element { key: 'management', label: 'Management', children: ( - void; } -export default function QualitySettingsComponent(props: Readonly): JSX.Element | null { +function QualitySettingsTab(props: Readonly): JSX.Element | null { const { fetching, qualitySettings: settings, @@ -30,19 +30,25 @@ export default function QualitySettingsComponent(props: Readonly): JSX.El if (fetching) { return ( -
- +
+
+ +
); } - return settings ? ( - - ) : ( - No quality settings + return ( +
+ { settings ? ( + + ) : No quality settings found } +
); } + +export default React.memo(QualitySettingsTab); diff --git a/cvat-ui/src/components/quality-control/styles.scss b/cvat-ui/src/components/quality-control/styles.scss index f2f687020ca..22aca8fae25 100644 --- a/cvat-ui/src/components/quality-control/styles.scss +++ b/cvat-ui/src/components/quality-control/styles.scss @@ -138,5 +138,5 @@ $excluded-background: #d9d9d973; .cvat-frame-allocation-table .ant-table-container { max-height: calc(100vh - $grid-unit-size * 60); - overflow: auto; + overflow-y: auto; } diff --git a/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx b/cvat-ui/src/components/quality-control/task-quality/quality-magement-tab.tsx similarity index 91% rename from cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx rename to cvat-ui/src/components/quality-control/task-quality/quality-magement-tab.tsx index ac4ecc42139..c8723f21571 100644 --- a/cvat-ui/src/components/quality-control/task-quality/task-quality-magement-component.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/quality-magement-tab.tsx @@ -2,11 +2,12 @@ // // SPDX-License-Identifier: MIT -import { FramesMetaData, Job, Task } from 'cvat-core-wrapper'; import React from 'react'; import { Row, Col } from 'antd/es/grid'; import Spin from 'antd/lib/spin'; + import CustomizableComponents from 'components/customizable-components'; +import { FramesMetaData, Job, Task } from 'cvat-core-wrapper'; import { SummaryComponent } from './summary'; interface Props { @@ -18,7 +19,7 @@ interface Props { onRestoreFrames: (frames: number[]) => void; } -function TaskQualityManagementComponent(props: Readonly): JSX.Element { +function QualityManagementTab(props: Readonly): JSX.Element { const { task, gtJob, gtJobMeta, onDeleteFrames, onRestoreFrames, fetching, @@ -26,14 +27,12 @@ function TaskQualityManagementComponent(props: Readonly): JSX.Element { const activeCount = gtJobMeta.includedFrames .filter((frameID: number) => !(frameID in gtJobMeta.deletedFrames)).length; - const excludedCount = Object.keys(gtJobMeta.deletedFrames) .filter((frameID: string) => gtJobMeta.includedFrames.includes(+frameID)).length; - const AllocationTableComponent = CustomizableComponents.QUALITY_CONTROL_ALLOCATION_TABLE; return ( -
+
{ fetching && (
@@ -65,4 +64,4 @@ function TaskQualityManagementComponent(props: Readonly): JSX.Element { ); } -export default React.memo(TaskQualityManagementComponent); +export default React.memo(QualityManagementTab); diff --git a/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx b/cvat-ui/src/components/quality-control/task-quality/quality-overview-tab.tsx similarity index 75% rename from cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx rename to cvat-ui/src/components/quality-control/task-quality/quality-overview-tab.tsx index 0cfcf8a4b31..276b4bd62fe 100644 --- a/cvat-ui/src/components/quality-control/task-quality/task-quality-component.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/quality-overview-tab.tsx @@ -12,15 +12,15 @@ interface Props { targetMetric: TargetMetric; } -function TaskQualityComponent(props: Readonly): JSX.Element { +function QualityOverviewTab(props: Readonly): JSX.Element { const { task, targetMetric } = props; const Component = CustomizableComponents.QUALITY_CONTROL_OVERVIEW; return ( -
+
); } -export default React.memo(TaskQualityComponent); +export default React.memo(QualityOverviewTab); diff --git a/cvat-ui/src/components/task-page/styles.scss b/cvat-ui/src/components/task-page/styles.scss index 02e7bc11680..ba2a9e00441 100644 --- a/cvat-ui/src/components/task-page/styles.scss +++ b/cvat-ui/src/components/task-page/styles.scss @@ -120,15 +120,6 @@ font-weight: bold; } -/* Pagination in center */ -.cvat-task-jobs-table > div > div { - text-align: center; - - > .ant-table-pagination.ant-pagination { - float: none; - } -} - .cvat-job-item-stage { .ant-select { margin-right: $grid-unit-size; diff --git a/tests/cypress/support/commands_review_pipeline.js b/tests/cypress/support/commands_review_pipeline.js index 974d61e6ee8..e399b22dbc3 100644 --- a/tests/cypress/support/commands_review_pipeline.js +++ b/tests/cypress/support/commands_review_pipeline.js @@ -1,5 +1,5 @@ // Copyright (C) 2020-2022 Intel Corporation -// Copyright (C) 2023 CVAT.ai Corporation +// Copyright (C) 2023-2024 CVAT.ai Corporation // // SPDX-License-Identifier: MIT @@ -42,23 +42,6 @@ Cypress.Commands.add('assignJobToUser', (jobID, user) => { cy.get('.cvat-spinner').should('not.exist'); }); -Cypress.Commands.add('checkJobStatus', (jobIdx, status, assignee, reviewer) => { - cy.getJobIDFromIdx(jobIdx).then((jobID) => { - cy.get('.cvat-task-jobs-table') - .contains('a', `Job #${jobID}`) - .parents('.cvat-task-jobs-table-row') - .within(() => { - cy.get('.cvat-job-item-status').should('have.text', status); - cy.get('.cvat-job-assignee-selector').within(() => { - cy.get('input[type="search"]').should('have.value', assignee); - }); - cy.get('.cvat-job-reviewer-selector').within(() => { - cy.get('input[type="search"]').should('have.value', reviewer); - }); - }); - }); -}); - Cypress.Commands.add('collectIssueLabel', () => { cy.document().then((doc) => Array.from(doc.querySelectorAll('.cvat-hidden-issue-label'))); }); From 4f207292f4bad158b91719eabff960f52c8f0234 Mon Sep 17 00:00:00 2001 From: Boris Sekachev Date: Wed, 11 Sep 2024 11:41:08 +0300 Subject: [PATCH 79/79] Adjusted for plugin --- cvat-ui/src/components/customizable-components/index.tsx | 7 ++++--- cvat-ui/src/components/quality-control/styles.scss | 4 ++++ .../quality-control/task-quality/quality-magement-tab.tsx | 2 +- .../quality-control/task-quality/quality-overview-tab.tsx | 2 +- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/cvat-ui/src/components/customizable-components/index.tsx b/cvat-ui/src/components/customizable-components/index.tsx index bcfa50b40a3..e44cfa3cc24 100644 --- a/cvat-ui/src/components/customizable-components/index.tsx +++ b/cvat-ui/src/components/customizable-components/index.tsx @@ -58,12 +58,13 @@ const storage = { ); }, + // eslint-disable-next-line @typescript-eslint/no-unused-vars - QUALITY_CONTROL_OVERVIEW: (_: any) => ( + QUALITY_CONTROL_OVERVIEW: [(_: any) => ( - ), + )], - QUALITY_CONTROL_ALLOCATION_TABLE: AllocationTable, + QUALITY_CONTROL_ALLOCATION_TABLE: [AllocationTable], }; export default storage; diff --git a/cvat-ui/src/components/quality-control/styles.scss b/cvat-ui/src/components/quality-control/styles.scss index 22aca8fae25..6149d317d10 100644 --- a/cvat-ui/src/components/quality-control/styles.scss +++ b/cvat-ui/src/components/quality-control/styles.scss @@ -121,6 +121,10 @@ $excluded-background: #d9d9d973; margin-top: 20%; } +.cvat-quality-control-overview-tab { + min-height: 50vh; +} + .cvat-annotations-quality-allocation-table-summary { margin-bottom: $grid-unit-size * 2; diff --git a/cvat-ui/src/components/quality-control/task-quality/quality-magement-tab.tsx b/cvat-ui/src/components/quality-control/task-quality/quality-magement-tab.tsx index c8723f21571..e7bcddc2fbd 100644 --- a/cvat-ui/src/components/quality-control/task-quality/quality-magement-tab.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/quality-magement-tab.tsx @@ -29,7 +29,7 @@ function QualityManagementTab(props: Readonly): JSX.Element { .filter((frameID: number) => !(frameID in gtJobMeta.deletedFrames)).length; const excludedCount = Object.keys(gtJobMeta.deletedFrames) .filter((frameID: string) => gtJobMeta.includedFrames.includes(+frameID)).length; - const AllocationTableComponent = CustomizableComponents.QUALITY_CONTROL_ALLOCATION_TABLE; + const [AllocationTableComponent] = CustomizableComponents.QUALITY_CONTROL_ALLOCATION_TABLE.slice(-1); return (
diff --git a/cvat-ui/src/components/quality-control/task-quality/quality-overview-tab.tsx b/cvat-ui/src/components/quality-control/task-quality/quality-overview-tab.tsx index 276b4bd62fe..032753f5125 100644 --- a/cvat-ui/src/components/quality-control/task-quality/quality-overview-tab.tsx +++ b/cvat-ui/src/components/quality-control/task-quality/quality-overview-tab.tsx @@ -14,7 +14,7 @@ interface Props { function QualityOverviewTab(props: Readonly): JSX.Element { const { task, targetMetric } = props; - const Component = CustomizableComponents.QUALITY_CONTROL_OVERVIEW; + const [Component] = CustomizableComponents.QUALITY_CONTROL_OVERVIEW.slice(-1); return (