From 78b3403629693a6f405c988f6fc03386b290691f Mon Sep 17 00:00:00 2001 From: Mathias Oppedal Heggelund <98742460+mheggelund@users.noreply.github.com> Date: Fri, 31 May 2024 08:53:33 +0200 Subject: [PATCH] Feat/strat column modal (#275) * chore: update generated files. * chore: update eds version to 0.37.0 * feat: Add Stratigraphic column dialog. * chore: Fix page layout styling of hight, width and scroll. * fix: Bug in variogram result table. * chore: Update generated api files. * fix: Adapt components to new analogueModel data. * feat: Fetch stratigraphic column metadata and display in tabel. * fix: Add and view model page, handle metadata flow. * refactor: seperate add-model sidePane into own component. * chore: Add navigation to "view model" button. Add info text to add metadata. Styling fixes. * feat: Delete StratColumn row. * chore: Removed components no longer in use. --- package.json | 2 +- src/api/generated/index.ts | 17 + .../AddGeologicalGroupCommandResponse.ts | 15 + .../models/AddGeologicalGroupForm.ts | 12 + .../models/AddStatigraphicGroupForm.ts | 12 + .../AddStratigraphicGroupCommandResponse.ts | 15 + .../generated/models/AnalogueModelDetail.ts | 4 + src/api/generated/models/AnalogueModelList.ts | 4 + src/api/generated/models/CountryDto.ts | 10 + src/api/generated/models/FieldDto.ts | 11 + .../generated/models/GeologicalGroupDto.ts | 15 + .../generated/models/GeologicalStandardDto.ts | 13 + .../generated/models/ListAllQueryResponse.ts | 19 + .../models/ListCountriesQueryResponse.ts | 15 + .../models/ListFieldsQueryResponse.ts | 15 + .../models/ListGeoStandardsQueryResponse.ts | 15 + .../models/ListStratColumnQueryResponse.ts | 15 + .../models/ListStratUnitsQueryResponse.ts | 15 + src/api/generated/models/StratColumnDto.ts | 13 + src/api/generated/models/StratUnitDto.ts | 14 + .../generated/models/StratigraphicGroupDto.ts | 18 + .../services/AnalogueModelsService.ts | 96 ++ src/api/generated/services/MetadataService.ts | 99 ++ .../ConfirmDialog/ConfirmDialog.styled.ts | 3 - .../StratigrapicGroups.styled.ts | 9 + .../StratigrapicGroups/StratigrapicGroups.tsx | 81 ++ .../HandleModelComponent.styled.ts | 10 +- .../HandleModelComponent.tsx | 127 +- .../AnalogueSelect/AnalogueSelect.tsx | 65 - .../MetadataSelect/MetadataSelect.tsx | 61 - .../ModelMetadata/ModelMetadata.styled.ts | 25 +- .../ModelMetadata/ModelMetadata.tsx | 101 +- .../ModelMetadataComponent.test.tsx | 84 +- .../ModelMetadata/ModelMetadataHooks.test.tsx | 33 +- .../HandleModel/SidePane/SidePane.styled.ts | 37 + .../HandleModel/SidePane/SidePane.tsx | 40 + .../StratigraphicColumnSelect.styled.tsx | 9 + .../StratigraphicColumnSelect.tsx | 186 +++ .../ModelMetadataView.styled.tsx | 31 +- .../ModelMetadataView/ModelMetadataView.tsx | 250 +++- .../ModelView/TableDataCell/TableDataCell.tsx | 32 - .../VariogramResultTable.tsx | 4 +- src/hooks/useFetchStratColData.ts | 58 + src/hooks/useFethcMetadata.ts | 17 - src/pages/AddModel/AddModel.styled.tsx | 37 +- src/pages/AddModel/AddModel.tsx | 92 +- yarn.lock | 1263 ++++++++++++++++- 47 files changed, 2499 insertions(+), 620 deletions(-) create mode 100644 src/api/generated/models/AddGeologicalGroupCommandResponse.ts create mode 100644 src/api/generated/models/AddGeologicalGroupForm.ts create mode 100644 src/api/generated/models/AddStatigraphicGroupForm.ts create mode 100644 src/api/generated/models/AddStratigraphicGroupCommandResponse.ts create mode 100644 src/api/generated/models/CountryDto.ts create mode 100644 src/api/generated/models/FieldDto.ts create mode 100644 src/api/generated/models/GeologicalGroupDto.ts create mode 100644 src/api/generated/models/GeologicalStandardDto.ts create mode 100644 src/api/generated/models/ListAllQueryResponse.ts create mode 100644 src/api/generated/models/ListCountriesQueryResponse.ts create mode 100644 src/api/generated/models/ListFieldsQueryResponse.ts create mode 100644 src/api/generated/models/ListGeoStandardsQueryResponse.ts create mode 100644 src/api/generated/models/ListStratColumnQueryResponse.ts create mode 100644 src/api/generated/models/ListStratUnitsQueryResponse.ts create mode 100644 src/api/generated/models/StratColumnDto.ts create mode 100644 src/api/generated/models/StratUnitDto.ts create mode 100644 src/api/generated/models/StratigraphicGroupDto.ts create mode 100644 src/components/StratigrapicGroups/StratigrapicGroups.styled.ts create mode 100644 src/components/StratigrapicGroups/StratigrapicGroups.tsx delete mode 100644 src/features/HandleModel/ModelMetadata/AnalogueSelect/AnalogueSelect.tsx delete mode 100644 src/features/HandleModel/ModelMetadata/MetadataSelect/MetadataSelect.tsx create mode 100644 src/features/HandleModel/SidePane/SidePane.styled.ts create mode 100644 src/features/HandleModel/SidePane/SidePane.tsx create mode 100644 src/features/HandleModel/StratigraphicColumnSelect/StratigraphicColumnSelect.styled.tsx create mode 100644 src/features/HandleModel/StratigraphicColumnSelect/StratigraphicColumnSelect.tsx delete mode 100644 src/features/ModelView/TableDataCell/TableDataCell.tsx create mode 100644 src/hooks/useFetchStratColData.ts delete mode 100644 src/hooks/useFethcMetadata.ts diff --git a/package.json b/package.json index dcb0a6d1..1c7f9db9 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "dependencies": { "@azure/msal-browser": "^2.32.2", "@azure/msal-react": "^1.5.2", - "@equinor/eds-core-react": "0.36.0", + "@equinor/eds-core-react": "0.37.0", "@equinor/eds-data-grid-react": "0.3.0", "@equinor/eds-icons": "0.21.0", "@equinor/eds-tokens": "0.9.2", diff --git a/src/api/generated/index.ts b/src/api/generated/index.ts index b6cf06aa..8413ca79 100644 --- a/src/api/generated/index.ts +++ b/src/api/generated/index.ts @@ -20,9 +20,13 @@ export type { AddAnalogueModelParameterCommandForm } from './models/AddAnalogueM export type { AddAnalogueModelParameterCommandResponse } from './models/AddAnalogueModelParameterCommandResponse'; export type { AddAnalogueModelParameterDto } from './models/AddAnalogueModelParameterDto'; export type { AddAnalogueResponseDto } from './models/AddAnalogueResponseDto'; +export type { AddGeologicalGroupCommandResponse } from './models/AddGeologicalGroupCommandResponse'; +export type { AddGeologicalGroupForm } from './models/AddGeologicalGroupForm'; export type { AddMetadataDto } from './models/AddMetadataDto'; export type { AddMetadataResponseDto } from './models/AddMetadataResponseDto'; export type { AddParameterDto } from './models/AddParameterDto'; +export type { AddStatigraphicGroupForm } from './models/AddStatigraphicGroupForm'; +export type { AddStratigraphicGroupCommandResponse } from './models/AddStratigraphicGroupCommandResponse'; export type { AnalogueList } from './models/AnalogueList'; export type { AnalogueModelDetail } from './models/AnalogueModelDetail'; export type { AnalogueModelList } from './models/AnalogueModelList'; @@ -37,6 +41,7 @@ export { ComputeJobStatus } from './models/ComputeJobStatus'; export { ComputeType } from './models/ComputeType'; export type { ConvertAnalogueModelCommand } from './models/ConvertAnalogueModelCommand'; export type { CoordinateDto } from './models/CoordinateDto'; +export type { CountryDto } from './models/CountryDto'; export type { CreateAnalogueCommand } from './models/CreateAnalogueCommand'; export type { CreateAnalogueCommandResponse } from './models/CreateAnalogueCommandResponse'; export type { CreateAnalogueDto } from './models/CreateAnalogueDto'; @@ -51,7 +56,10 @@ export type { CreateParameterCommand } from './models/CreateParameterCommand'; export type { ErrorResponse } from './models/ErrorResponse'; export type { EstimateChannelCommand } from './models/EstimateChannelCommand'; export type { EstimateVariogramCommand } from './models/EstimateVariogramCommand'; +export type { FieldDto } from './models/FieldDto'; export type { File } from './models/File'; +export type { GeologicalGroupDto } from './models/GeologicalGroupDto'; +export type { GeologicalStandardDto } from './models/GeologicalStandardDto'; export type { GetAnalogueListQueryResponse } from './models/GetAnalogueListQueryResponse'; export type { GetAnalogueModelListQueryResponse } from './models/GetAnalogueModelListQueryResponse'; export type { GetAnalogueModelQueryResponse } from './models/GetAnalogueModelQueryResponse'; @@ -75,14 +83,20 @@ export type { JobList } from './models/JobList'; export type { JobListUploadsDto } from './models/JobListUploadsDto'; export { JobStatus } from './models/JobStatus'; export { JobType } from './models/JobType'; +export type { ListAllQueryResponse } from './models/ListAllQueryResponse'; export type { ListComputeCasesByAnalogueModelIdQueryResponse } from './models/ListComputeCasesByAnalogueModelIdQueryResponse'; export type { ListComputeSettingsInputDto } from './models/ListComputeSettingsInputDto'; export type { ListComputeSettingsInputValueDto } from './models/ListComputeSettingsInputValueDto'; export type { ListComputeSettingsMethodDto } from './models/ListComputeSettingsMethodDto'; export type { ListComputeSettingsQueryResponse } from './models/ListComputeSettingsQueryResponse'; +export type { ListCountriesQueryResponse } from './models/ListCountriesQueryResponse'; +export type { ListFieldsQueryResponse } from './models/ListFieldsQueryResponse'; +export type { ListGeoStandardsQueryResponse } from './models/ListGeoStandardsQueryResponse'; export type { ListMetadataQueryResponse } from './models/ListMetadataQueryResponse'; export type { ListMetadataTypesQueryResponse } from './models/ListMetadataTypesQueryResponse'; export type { ListModelAreaTypesQueryResponse } from './models/ListModelAreaTypesQueryResponse'; +export type { ListStratColumnQueryResponse } from './models/ListStratColumnQueryResponse'; +export type { ListStratUnitsQueryResponse } from './models/ListStratUnitsQueryResponse'; export type { MergeModelCommandResponse } from './models/MergeModelCommandResponse'; export type { MergeModelDto } from './models/MergeModelDto'; export type { MetadataDto } from './models/MetadataDto'; @@ -100,6 +114,9 @@ export type { PatchParameterDto } from './models/PatchParameterDto'; export type { PrepareChunkedUploadCommandResponse } from './models/PrepareChunkedUploadCommandResponse'; export type { PrepareChunkedUploadDto } from './models/PrepareChunkedUploadDto'; export type { RadixJobDto } from './models/RadixJobDto'; +export type { StratColumnDto } from './models/StratColumnDto'; +export type { StratigraphicGroupDto } from './models/StratigraphicGroupDto'; +export type { StratUnitDto } from './models/StratUnitDto'; export type { UpdateAnalogueModelAreaCommandForm } from './models/UpdateAnalogueModelAreaCommandForm'; export type { UpdateAnalogueModelCommandBody } from './models/UpdateAnalogueModelCommandBody'; export type { UpdateAnalogueModelCommandResponse } from './models/UpdateAnalogueModelCommandResponse'; diff --git a/src/api/generated/models/AddGeologicalGroupCommandResponse.ts b/src/api/generated/models/AddGeologicalGroupCommandResponse.ts new file mode 100644 index 00000000..355d39e1 --- /dev/null +++ b/src/api/generated/models/AddGeologicalGroupCommandResponse.ts @@ -0,0 +1,15 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { GeologicalGroupDto } from './GeologicalGroupDto'; + +export type AddGeologicalGroupCommandResponse = { + success?: boolean; + count?: number | null; + message?: string | null; + validationErrors?: Array | null; + data: GeologicalGroupDto; +}; + diff --git a/src/api/generated/models/AddGeologicalGroupForm.ts b/src/api/generated/models/AddGeologicalGroupForm.ts new file mode 100644 index 00000000..376794cf --- /dev/null +++ b/src/api/generated/models/AddGeologicalGroupForm.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +export type AddGeologicalGroupForm = { + grossDepEnvId: string; + depEnvId: string; + subEnvId: string; + architecturalElements: Array; +}; + diff --git a/src/api/generated/models/AddStatigraphicGroupForm.ts b/src/api/generated/models/AddStatigraphicGroupForm.ts new file mode 100644 index 00000000..b9684b28 --- /dev/null +++ b/src/api/generated/models/AddStatigraphicGroupForm.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +export type AddStatigraphicGroupForm = { + countryId: string; + fieldId: string; + stratigraphicColumnId: string; + stratigraphicUnitIds: Array; +}; + diff --git a/src/api/generated/models/AddStratigraphicGroupCommandResponse.ts b/src/api/generated/models/AddStratigraphicGroupCommandResponse.ts new file mode 100644 index 00000000..5bdcd8cb --- /dev/null +++ b/src/api/generated/models/AddStratigraphicGroupCommandResponse.ts @@ -0,0 +1,15 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { StratigraphicGroupDto } from './StratigraphicGroupDto'; + +export type AddStratigraphicGroupCommandResponse = { + success?: boolean; + count?: number | null; + message?: string | null; + validationErrors?: Array | null; + data: StratigraphicGroupDto; +}; + diff --git a/src/api/generated/models/AnalogueModelDetail.ts b/src/api/generated/models/AnalogueModelDetail.ts index 70535b15..c5edcadc 100644 --- a/src/api/generated/models/AnalogueModelDetail.ts +++ b/src/api/generated/models/AnalogueModelDetail.ts @@ -5,9 +5,11 @@ import type { AnalogueList } from './AnalogueList'; import type { AnalogueModelSourceType } from './AnalogueModelSourceType'; +import type { GeologicalGroupDto } from './GeologicalGroupDto'; import type { MetadataDto } from './MetadataDto'; import type { ModelAreaDto } from './ModelAreaDto'; import type { ParameterList } from './ParameterList'; +import type { StratigraphicGroupDto } from './StratigraphicGroupDto'; import type { UploadList } from './UploadList'; export type AnalogueModelDetail = { @@ -21,5 +23,7 @@ export type AnalogueModelDetail = { parameters: Array; metadata: Array; modelAreas: Array; + stratigraphicGroups: Array; + geologicalGroups: Array; }; diff --git a/src/api/generated/models/AnalogueModelList.ts b/src/api/generated/models/AnalogueModelList.ts index 196b55ab..acf7aadb 100644 --- a/src/api/generated/models/AnalogueModelList.ts +++ b/src/api/generated/models/AnalogueModelList.ts @@ -5,9 +5,11 @@ import type { AnalogueList } from './AnalogueList'; import type { AnalogueModelSourceType } from './AnalogueModelSourceType'; +import type { GeologicalGroupDto } from './GeologicalGroupDto'; import type { MetadataDto } from './MetadataDto'; import type { ModelAreaDto } from './ModelAreaDto'; import type { ParameterList } from './ParameterList'; +import type { StratigraphicGroupDto } from './StratigraphicGroupDto'; import type { UploadList } from './UploadList'; export type AnalogueModelList = { @@ -16,6 +18,8 @@ export type AnalogueModelList = { parameters: Array; metadata: Array; modelAreas: Array; + stratigraphicGroups: Array; + geologicalGroups: Array; analogueModelId: string; name: string; description: string; diff --git a/src/api/generated/models/CountryDto.ts b/src/api/generated/models/CountryDto.ts new file mode 100644 index 00000000..4cefa821 --- /dev/null +++ b/src/api/generated/models/CountryDto.ts @@ -0,0 +1,10 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +export type CountryDto = { + countryId: string; + identifier: string; +}; + diff --git a/src/api/generated/models/FieldDto.ts b/src/api/generated/models/FieldDto.ts new file mode 100644 index 00000000..797719b4 --- /dev/null +++ b/src/api/generated/models/FieldDto.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +export type FieldDto = { + fieldId: string; + identifier: string; + countryId: string; +}; + diff --git a/src/api/generated/models/GeologicalGroupDto.ts b/src/api/generated/models/GeologicalGroupDto.ts new file mode 100644 index 00000000..cc902c3d --- /dev/null +++ b/src/api/generated/models/GeologicalGroupDto.ts @@ -0,0 +1,15 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { GeologicalStandardDto } from './GeologicalStandardDto'; + +export type GeologicalGroupDto = { + geologicalGroupId: string; + grossDepEnv: GeologicalStandardDto; + depEnv: GeologicalStandardDto; + subenv: GeologicalStandardDto; + architecturalElements: Array; +}; + diff --git a/src/api/generated/models/GeologicalStandardDto.ts b/src/api/generated/models/GeologicalStandardDto.ts new file mode 100644 index 00000000..53d0c8f6 --- /dev/null +++ b/src/api/generated/models/GeologicalStandardDto.ts @@ -0,0 +1,13 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +export type GeologicalStandardDto = { + geologicalStandardId: string; + identifier: string; + geologicalStandardParentId?: string | null; + geologyGroup: string; + equinorCode: number; +}; + diff --git a/src/api/generated/models/ListAllQueryResponse.ts b/src/api/generated/models/ListAllQueryResponse.ts new file mode 100644 index 00000000..41075ad7 --- /dev/null +++ b/src/api/generated/models/ListAllQueryResponse.ts @@ -0,0 +1,19 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { CountryDto } from './CountryDto'; +import type { FieldDto } from './FieldDto'; +import type { GeologicalStandardDto } from './GeologicalStandardDto'; +import type { StratColumnDto } from './StratColumnDto'; +import type { StratUnitDto } from './StratUnitDto'; + +export type ListAllQueryResponse = { + countries: Array; + fields: Array; + stratUnits: Array; + stratColumns: Array; + geologicalStandards: Array; +}; + diff --git a/src/api/generated/models/ListCountriesQueryResponse.ts b/src/api/generated/models/ListCountriesQueryResponse.ts new file mode 100644 index 00000000..5d41b145 --- /dev/null +++ b/src/api/generated/models/ListCountriesQueryResponse.ts @@ -0,0 +1,15 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { CountryDto } from './CountryDto'; + +export type ListCountriesQueryResponse = { + success?: boolean; + count?: number | null; + message?: string | null; + validationErrors?: Array | null; + data: Array; +}; + diff --git a/src/api/generated/models/ListFieldsQueryResponse.ts b/src/api/generated/models/ListFieldsQueryResponse.ts new file mode 100644 index 00000000..62f3043f --- /dev/null +++ b/src/api/generated/models/ListFieldsQueryResponse.ts @@ -0,0 +1,15 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { FieldDto } from './FieldDto'; + +export type ListFieldsQueryResponse = { + success?: boolean; + count?: number | null; + message?: string | null; + validationErrors?: Array | null; + data: Array; +}; + diff --git a/src/api/generated/models/ListGeoStandardsQueryResponse.ts b/src/api/generated/models/ListGeoStandardsQueryResponse.ts new file mode 100644 index 00000000..ad5bfe8e --- /dev/null +++ b/src/api/generated/models/ListGeoStandardsQueryResponse.ts @@ -0,0 +1,15 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { GeologicalStandardDto } from './GeologicalStandardDto'; + +export type ListGeoStandardsQueryResponse = { + success?: boolean; + count?: number | null; + message?: string | null; + validationErrors?: Array | null; + data: Array; +}; + diff --git a/src/api/generated/models/ListStratColumnQueryResponse.ts b/src/api/generated/models/ListStratColumnQueryResponse.ts new file mode 100644 index 00000000..76b4502d --- /dev/null +++ b/src/api/generated/models/ListStratColumnQueryResponse.ts @@ -0,0 +1,15 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { StratColumnDto } from './StratColumnDto'; + +export type ListStratColumnQueryResponse = { + success?: boolean; + count?: number | null; + message?: string | null; + validationErrors?: Array | null; + data: Array; +}; + diff --git a/src/api/generated/models/ListStratUnitsQueryResponse.ts b/src/api/generated/models/ListStratUnitsQueryResponse.ts new file mode 100644 index 00000000..08992510 --- /dev/null +++ b/src/api/generated/models/ListStratUnitsQueryResponse.ts @@ -0,0 +1,15 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { StratUnitDto } from './StratUnitDto'; + +export type ListStratUnitsQueryResponse = { + success?: boolean; + count?: number | null; + message?: string | null; + validationErrors?: Array | null; + data: Array; +}; + diff --git a/src/api/generated/models/StratColumnDto.ts b/src/api/generated/models/StratColumnDto.ts new file mode 100644 index 00000000..75d4c0dc --- /dev/null +++ b/src/api/generated/models/StratColumnDto.ts @@ -0,0 +1,13 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { CountryDto } from './CountryDto'; + +export type StratColumnDto = { + stratColumnId: string; + identifier: string; + countries: Array; +}; + diff --git a/src/api/generated/models/StratUnitDto.ts b/src/api/generated/models/StratUnitDto.ts new file mode 100644 index 00000000..71650d59 --- /dev/null +++ b/src/api/generated/models/StratUnitDto.ts @@ -0,0 +1,14 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +export type StratUnitDto = { + stratUnitId: string; + identifier: string; + stratColumnId: string; + stratUnitParentId?: string | null; + level: number; + stratUnitType: string; +}; + diff --git a/src/api/generated/models/StratigraphicGroupDto.ts b/src/api/generated/models/StratigraphicGroupDto.ts new file mode 100644 index 00000000..145af84f --- /dev/null +++ b/src/api/generated/models/StratigraphicGroupDto.ts @@ -0,0 +1,18 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { CountryDto } from './CountryDto'; +import type { FieldDto } from './FieldDto'; +import type { StratColumnDto } from './StratColumnDto'; +import type { StratUnitDto } from './StratUnitDto'; + +export type StratigraphicGroupDto = { + stratigraphicGroupId: string; + country: CountryDto; + field: FieldDto; + stratColumn: StratColumnDto; + stratUnits: Array; +}; + diff --git a/src/api/generated/services/AnalogueModelsService.ts b/src/api/generated/services/AnalogueModelsService.ts index 8e9045ca..f4f414db 100644 --- a/src/api/generated/services/AnalogueModelsService.ts +++ b/src/api/generated/services/AnalogueModelsService.ts @@ -4,6 +4,10 @@ /* eslint-disable */ import type { AddAnalogueModelAreaCommandForm } from '../models/AddAnalogueModelAreaCommandForm'; import type { AddAnalogueModelAreaCommandResponse } from '../models/AddAnalogueModelAreaCommandResponse'; +import type { AddGeologicalGroupCommandResponse } from '../models/AddGeologicalGroupCommandResponse'; +import type { AddGeologicalGroupForm } from '../models/AddGeologicalGroupForm'; +import type { AddStatigraphicGroupForm } from '../models/AddStatigraphicGroupForm'; +import type { AddStratigraphicGroupCommandResponse } from '../models/AddStratigraphicGroupCommandResponse'; import type { CreateAnalogueModelCommand } from '../models/CreateAnalogueModelCommand'; import type { CreateAnalogueModelCommandResponse } from '../models/CreateAnalogueModelCommandResponse'; import type { GetAnalogueModelListQueryResponse } from '../models/GetAnalogueModelListQueryResponse'; @@ -239,4 +243,96 @@ export class AnalogueModelsService { }); } + /** + * @param id + * @param requestBody + * @returns AddStratigraphicGroupCommandResponse Success + * @throws ApiError + */ + public static postApiAnalogueModelsStratigraphicGroups( + id: string, + requestBody?: AddStatigraphicGroupForm, + ): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/analogue-models/{id}/stratigraphic-groups', + path: { + 'id': id, + }, + body: requestBody, + mediaType: 'application/json-patch+json', + }); + } + + /** + * @param id + * @param requestBody + * @returns AddGeologicalGroupCommandResponse Success + * @throws ApiError + */ + public static postApiAnalogueModelsGeologicalGroups( + id: string, + requestBody?: AddGeologicalGroupForm, + ): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/api/analogue-models/{id}/geological-groups', + path: { + 'id': id, + }, + body: requestBody, + mediaType: 'application/json-patch+json', + }); + } + + /** + * Deletes a geological group + * @param analogueModelId + * @param geologicalGroupId + * @returns void + * @throws ApiError + */ + public static deleteApiAnalogueModelsGeologicalGroups( + analogueModelId: string, + geologicalGroupId: string, + ): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/analogue-models/{analogueModelId}/geological-groups/{geologicalGroupId}', + path: { + 'analogueModelId': analogueModelId, + 'geologicalGroupId': geologicalGroupId, + }, + errors: { + 400: `Bad Request`, + 404: `Not Found`, + }, + }); + } + + /** + * Deletes a stratigraphic group + * @param analogueModelId + * @param stratigraphicGroupId + * @returns void + * @throws ApiError + */ + public static deleteApiAnalogueModelsStratigraphicGroups( + analogueModelId: string, + stratigraphicGroupId: string, + ): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/api/analogue-models/{analogueModelId}/stratigraphic-groups/{stratigraphicGroupId}', + path: { + 'analogueModelId': analogueModelId, + 'stratigraphicGroupId': stratigraphicGroupId, + }, + errors: { + 400: `Bad Request`, + 404: `Not Found`, + }, + }); + } + } diff --git a/src/api/generated/services/MetadataService.ts b/src/api/generated/services/MetadataService.ts index 3ebb5d45..5a7f43b3 100644 --- a/src/api/generated/services/MetadataService.ts +++ b/src/api/generated/services/MetadataService.ts @@ -3,7 +3,13 @@ /* tslint:disable */ /* eslint-disable */ import type { CreateMetadataCommandForm } from '../models/CreateMetadataCommandForm'; +import type { ListAllQueryResponse } from '../models/ListAllQueryResponse'; +import type { ListCountriesQueryResponse } from '../models/ListCountriesQueryResponse'; +import type { ListFieldsQueryResponse } from '../models/ListFieldsQueryResponse'; +import type { ListGeoStandardsQueryResponse } from '../models/ListGeoStandardsQueryResponse'; import type { ListMetadataQueryResponse } from '../models/ListMetadataQueryResponse'; +import type { ListStratColumnQueryResponse } from '../models/ListStratColumnQueryResponse'; +import type { ListStratUnitsQueryResponse } from '../models/ListStratUnitsQueryResponse'; import type { CancelablePromise } from '../core/CancelablePromise'; import { OpenAPI } from '../core/OpenAPI'; @@ -42,4 +48,97 @@ export class MetadataService { }); } + /** + * @returns ListAllQueryResponse Success + * @throws ApiError + */ + public static getApiMetadataSmdaMetadata(): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/metadata/smda-metadata', + }); + } + + /** + * @returns ListCountriesQueryResponse Success + * @throws ApiError + */ + public static getApiMetadataSmdaMetadataCountries(): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/metadata/smda-metadata/countries', + }); + } + + /** + * @param countryId + * @returns ListFieldsQueryResponse Success + * @throws ApiError + */ + public static getApiMetadataSmdaMetadataFields( + countryId?: string, + ): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/metadata/smda-metadata/fields', + query: { + 'countryId': countryId, + }, + }); + } + + /** + * @param countryId + * @returns ListStratColumnQueryResponse Success + * @throws ApiError + */ + public static getApiMetadataSmdaMetadataStratigraphicColumns( + countryId?: string, + ): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/metadata/smda-metadata/stratigraphic-columns', + query: { + 'countryId': countryId, + }, + }); + } + + /** + * @param stratUnitParentId + * @param stratColumnId + * @returns ListStratUnitsQueryResponse Success + * @throws ApiError + */ + public static getApiMetadataSmdaMetadataStratigraphicUnits( + stratUnitParentId?: string, + stratColumnId?: string, + ): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/metadata/smda-metadata/stratigraphic-units', + query: { + 'stratUnitParentId': stratUnitParentId, + 'stratColumnId': stratColumnId, + }, + }); + } + + /** + * @param parentId + * @returns ListGeoStandardsQueryResponse Success + * @throws ApiError + */ + public static getApiMetadataSmdaMetadataGeologyStandards( + parentId?: string, + ): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/api/metadata/smda-metadata/geology-standards', + query: { + 'parentId': parentId, + }, + }); + } + } diff --git a/src/components/ConfirmDialog/ConfirmDialog.styled.ts b/src/components/ConfirmDialog/ConfirmDialog.styled.ts index 59012203..c02bdb8d 100644 --- a/src/components/ConfirmDialog/ConfirmDialog.styled.ts +++ b/src/components/ConfirmDialog/ConfirmDialog.styled.ts @@ -4,8 +4,5 @@ import { spacings } from '../../tokens/spacings'; export const Actions = styled(Dialog.Actions)` display: flex; - flex: row; - flex-direction: row; column-gap: ${spacings.SMALL}; - align-items: start; `; diff --git a/src/components/StratigrapicGroups/StratigrapicGroups.styled.ts b/src/components/StratigrapicGroups/StratigrapicGroups.styled.ts new file mode 100644 index 00000000..5e690069 --- /dev/null +++ b/src/components/StratigrapicGroups/StratigrapicGroups.styled.ts @@ -0,0 +1,9 @@ +import styled from 'styled-components'; +import { spacings } from '../../tokens/spacings'; + +export const Wrapper = styled.div` + display: flex; + flex-direction: column; + + row-gap: ${spacings.MEDIUM}; +`; diff --git a/src/components/StratigrapicGroups/StratigrapicGroups.tsx b/src/components/StratigrapicGroups/StratigrapicGroups.tsx new file mode 100644 index 00000000..4e5b44e7 --- /dev/null +++ b/src/components/StratigrapicGroups/StratigrapicGroups.tsx @@ -0,0 +1,81 @@ +/* eslint-disable max-lines-per-function */ +import { Button, Icon, Table, Typography } from '@equinor/eds-core-react'; +import { delete_to_trash as deleteIcon } from '@equinor/eds-icons'; +import { StratigraphicGroupDto } from '../../api/generated'; +import * as Styled from './StratigrapicGroups.styled'; + +export const StratigrapicGroups = ({ + stratColumnGroups, + handleStratColDialog, + deleteStratColRow, +}: { + stratColumnGroups: StratigraphicGroupDto[]; + handleStratColDialog: () => void; + deleteStratColRow: (stratigraphicGroupId: string) => Promise; +}) => { + const filterUnitLevel = (row: StratigraphicGroupDto, level: number) => { + return row.stratUnits.filter((unit) => unit.level === level); + }; + + const deleteRow = async (id: string) => { + await deleteStratColRow(id); + }; + + return ( + + Stratigraphic column + + + + + + Country + Field + Stratigraphic column + Level 1 (group) + Level 2 (formation) + Level 3 (formation/subzone) + + + + + {stratColumnGroups.map((row) => ( + + + + + {row.country.identifier} + {row.field.identifier} + {row.stratColumn.identifier} + {filterUnitLevel(row, 1).length > 0 ? ( + {filterUnitLevel(row, 1)[0].identifier} + ) : ( + --- + )} + {filterUnitLevel(row, 2).length > 0 ? ( + {filterUnitLevel(row, 2)[0].identifier} + ) : ( + --- + )} + {filterUnitLevel(row, 3).length > 0 ? ( + {filterUnitLevel(row, 3)[0].identifier} + ) : ( + --- + )} + + ))} + +
+
+ +
+
+ ); +}; diff --git a/src/features/HandleModel/HandleModelComponent/HandleModelComponent.styled.ts b/src/features/HandleModel/HandleModelComponent/HandleModelComponent.styled.ts index 08b4a6fe..059c9286 100644 --- a/src/features/HandleModel/HandleModelComponent/HandleModelComponent.styled.ts +++ b/src/features/HandleModel/HandleModelComponent/HandleModelComponent.styled.ts @@ -4,7 +4,8 @@ import { spacings } from '../../../tokens/spacings'; export const Wrapper = styled.div` display: flex; flex-direction: column; - row-gap: ${spacings.X_LARGE}; + + row-gap: ${spacings.LARGE}; `; export const CustomContent = styled.div` @@ -26,3 +27,10 @@ export const ErrorDiv = styled.div` row-gap: ${spacings.SMALL}; `; + +export const InfoNavigation = styled.div` + display: flex; + flex-direction: column; + + row-gap: ${spacings.MEDIUM}; +`; diff --git a/src/features/HandleModel/HandleModelComponent/HandleModelComponent.tsx b/src/features/HandleModel/HandleModelComponent/HandleModelComponent.tsx index 6199cb4e..e417a476 100644 --- a/src/features/HandleModel/HandleModelComponent/HandleModelComponent.tsx +++ b/src/features/HandleModel/HandleModelComponent/HandleModelComponent.tsx @@ -1,8 +1,16 @@ +/* eslint-disable max-lines */ /* eslint-disable max-lines-per-function */ import { Button, LinearProgress, Typography } from '@equinor/eds-core-react'; import _ from 'lodash'; import { useEffect, useState } from 'react'; -import { AnalogueModelDetail } from '../../../api/generated'; +import { generatePath, useNavigate } from 'react-router-dom'; +import { + AnalogueModelDetail, + CountryDto, + FieldDto, + StratColumnDto, + StratUnitDto, +} from '../../../api/generated'; import { ErrorBanner } from '../../../components/ErrorBanner/ErrorBanner'; import { ModelInputFilesTable } from '../ModelInputFilesTable/ModelInputFilesTable'; import { ModelMetadata } from '../ModelMetadata/ModelMetadata'; @@ -19,7 +27,10 @@ interface AddModelDialogProps { uploading?: boolean; defaultMetadata: AnalogueModelDetail; isEdit?: boolean; + isAddUploading?: boolean; existingData?: AnalogueModelDetail; + closeDialog?: () => void; + modelId?: string; } export interface FilesProps { @@ -30,7 +41,13 @@ export interface FilesProps { export type ErrorType = { name?: string; description?: string; + country?: string; field?: string; + stratColumn?: string; + level1?: string; + level2?: string; + level3?: string; + formation?: string; file?: string; analogues?: string; @@ -41,6 +58,14 @@ const defaultFiles = { NC: undefined, INI: undefined, }; +export interface StratColumnType { + country?: CountryDto; + field?: FieldDto; + stratColumn?: StratColumnDto; + level1?: StratUnitDto; + level2?: StratUnitDto; + level3?: StratUnitDto; +} export const HandleModelComponent = ({ confirm, @@ -49,17 +74,22 @@ export const HandleModelComponent = ({ uploading, defaultMetadata, isEdit, + isAddUploading, existingData, + closeDialog, + modelId, }: AddModelDialogProps) => { const [isFileDisplay, setFileDisplay] = useState(false); const [files, setFiles] = useState(defaultFiles); const [metadata, setMetadata] = useState(defaultMetadata); - const [errors, setErrors] = useState({}); const [submitting, setSubmitting] = useState(false); const [fileSize, setFileSize] = useState(0); const [rawFile, setrawFile] = useState(); + const [errors, setErrors] = useState({}); + const navigate = useNavigate(); + useHandleModelComponent( setFileSize, setMetadata, @@ -73,6 +103,11 @@ export const HandleModelComponent = ({ setSubmitting(true); }; + const handleClose = () => { + setMetadata(defaultMetadata); + if (closeDialog) closeDialog(); + }; + const fileAdded = (e: React.ChangeEvent) => { if (!e.target.files) return; const file = e.target.files[0]; @@ -137,11 +172,13 @@ export const HandleModelComponent = ({ return ( - - {isEdit ? 'Edit model details' : 'Add new model'} - + {!isEdit && progress !== undefined && progress <= 0 && ( + + {isEdit ? 'Edit model details' : 'Add new model'} + + )} - {!isEdit && ( + {!isEdit && progress !== undefined && progress <= 0 && ( )} {isFileDisplay && } - - - {!_.isEmpty(errors) && - ErrorList !== undefined && - ErrorList.map((e, i) => { - return ; - })} - + {(isEdit || !isAddUploading) && ( + <> + + {!_.isEmpty(errors) && + ErrorList !== undefined && + ErrorList.map((e, i) => { + return ( + + + + ); + })} + + )} -
- -
+ {!isAddUploading && ( +
+ + {isEdit && ( + + )} +
+ )} + {uploading && ( @@ -184,6 +239,24 @@ export const HandleModelComponent = ({ {} )} + + {progress === 100 && modelId && ( + + Model finish uploaded! +
+ +
+
+ )}
); }; diff --git a/src/features/HandleModel/ModelMetadata/AnalogueSelect/AnalogueSelect.tsx b/src/features/HandleModel/ModelMetadata/AnalogueSelect/AnalogueSelect.tsx deleted file mode 100644 index a2546b77..00000000 --- a/src/features/HandleModel/ModelMetadata/AnalogueSelect/AnalogueSelect.tsx +++ /dev/null @@ -1,65 +0,0 @@ -/* eslint-disable max-lines-per-function */ -/* eslint-disable react/prop-types */ - -import { Autocomplete, AutocompleteChanges } from '@equinor/eds-core-react'; -import { AnalogueList, AnalogueModelDetail } from '../../../../api/generated'; - -export const AnalogueSelect = ({ - errors, - data, - metadata, - setMetadata, -}: { - errors: string | undefined; - data: AnalogueList[]; - metadata: AnalogueModelDetail; - setMetadata: (metadata: AnalogueModelDetail) => void; -}) => { - const emptyOption: AnalogueList[] = [ - { - analogueId: 'Analogue', - name: 'NoRelevant', - description: 'Not relevant', - }, - ]; - - const selectedOptions = - metadata.analogues.length > 0 ? metadata.analogues : emptyOption; - - const optionList: AnalogueList[] = - data.length > 0 ? emptyOption.concat(data) : emptyOption; - - const intersection = optionList.filter( - (a) => - selectedOptions && - selectedOptions.some((b) => JSON.stringify(a) === JSON.stringify(b)), - ); - - function handleAddMetadata(e: AutocompleteChanges) { - const removeNotSelected = e.selectedItems.filter( - (i) => i.analogueId !== 'Analogue', - ); - const newList = [...removeNotSelected]; - - setMetadata({ - ...metadata, - analogues: [...newList], - }); - } - - return ( - option.name} - multiple - initialSelectedOptions={ - intersection.length === 0 ? emptyOption : intersection - } - onOptionsChange={(e: AutocompleteChanges) => - handleAddMetadata(e) - } - /> - ); -}; diff --git a/src/features/HandleModel/ModelMetadata/MetadataSelect/MetadataSelect.tsx b/src/features/HandleModel/ModelMetadata/MetadataSelect/MetadataSelect.tsx deleted file mode 100644 index fc3e2f43..00000000 --- a/src/features/HandleModel/ModelMetadata/MetadataSelect/MetadataSelect.tsx +++ /dev/null @@ -1,61 +0,0 @@ -/* eslint-disable max-lines-per-function */ -/* eslint-disable react/prop-types */ - -import { Autocomplete, AutocompleteChanges } from '@equinor/eds-core-react'; -import { MetadataDto } from '../../../../api/generated'; - -export const MetadataSelect = ({ - type, - errors, - data, - metadata, - isLoading, - handleAddMetadata, -}: { - type: string; - errors: string | undefined; - data: MetadataDto[]; - metadata: MetadataDto[] | undefined; - isLoading: boolean; - handleAddMetadata: ( - e: AutocompleteChanges, - type: string, - ) => void; -}) => { - const emptyOption: MetadataDto[] = [ - { - metadataId: type, - metadataType: 'NoRelevant', - value: 'Not relevant', - }, - ]; - - const selectedOptions = - metadata !== undefined && metadata?.length > 0 - ? metadata.filter((m) => m.metadataType === type) - : emptyOption; - const filteredOptions = data.filter((d) => d.metadataType === type); - const optionList: MetadataDto[] = filteredOptions - ? emptyOption.concat(filteredOptions) - : emptyOption; - - const intersection = optionList.filter((a) => - selectedOptions.some((b) => JSON.stringify(a) === JSON.stringify(b)), - ); - - return ( - option.value} - multiple - initialSelectedOptions={ - intersection.length === 0 ? emptyOption : intersection - } - onOptionsChange={(e: AutocompleteChanges) => { - handleAddMetadata(e, type); - }} - /> - ); -}; diff --git a/src/features/HandleModel/ModelMetadata/ModelMetadata.styled.ts b/src/features/HandleModel/ModelMetadata/ModelMetadata.styled.ts index 0ead148b..dc9f5b40 100644 --- a/src/features/HandleModel/ModelMetadata/ModelMetadata.styled.ts +++ b/src/features/HandleModel/ModelMetadata/ModelMetadata.styled.ts @@ -6,30 +6,15 @@ export const ModelMetadata = styled.div` flex-direction: column; row-gap: ${spacings.MEDIUM}; + min-height: 200px; `; -export const Form = styled.form` +export const Form = styled.div` display: flex; flex-direction: column; row-gap: ${spacings.MEDIUM}; `; -export const AutocompleteWrapper = styled.div` - display: flex; - flex-direction: column; - row-gap: ${spacings.MEDIUM}; -`; -export const AutocompleteRow = styled.div` - display: flex; - flex-direction: row; - flex: end; - column-gap: ${spacings.MEDIUM}; - - > div { - flex-grow: 1; - } -`; - export const TextInput = styled(TextField)` display: flex; flex-direction: column; @@ -39,9 +24,3 @@ export const InputfieldRequired = styled.div` color: red; } `; - -export const Required = styled.div` - > label { - color: red; - } -`; diff --git a/src/features/HandleModel/ModelMetadata/ModelMetadata.tsx b/src/features/HandleModel/ModelMetadata/ModelMetadata.tsx index e1d8891a..fab64e77 100644 --- a/src/features/HandleModel/ModelMetadata/ModelMetadata.tsx +++ b/src/features/HandleModel/ModelMetadata/ModelMetadata.tsx @@ -1,16 +1,8 @@ /* eslint-disable max-lines-per-function */ -import { - AutocompleteChanges, - Label, - Typography, -} from '@equinor/eds-core-react'; +import { Label } from '@equinor/eds-core-react'; import { ErrorType } from '../HandleModelComponent/HandleModelComponent'; -import { AnalogueModelDetail, MetadataDto } from '../../../api/generated'; -import { useFetchAnalogues } from '../../../hooks/useFetchAnalogues'; -import { useFetchMetadata } from '../../../hooks/useFethcMetadata'; -import { AnalogueSelect } from './AnalogueSelect/AnalogueSelect'; -import { MetadataSelect } from './MetadataSelect/MetadataSelect'; +import { AnalogueModelDetail } from '../../../api/generated'; import * as Styled from './ModelMetadata.styled'; export const ModelMetadata = ({ @@ -22,43 +14,9 @@ export const ModelMetadata = ({ metadata: AnalogueModelDetail; setMetadata: (metadata: AnalogueModelDetail) => void; }) => { - const { isLoading, data } = useFetchMetadata(); - const analougeData = useFetchAnalogues(); - - function handleAddMetadata( - e: AutocompleteChanges, - propType: string, - ) { - if (!metadata.metadata) return; - - // Filert out metadata of the same type as dropdown props type - const metadataList: MetadataDto[] = metadata.metadata - .filter((i) => i.metadataType !== propType) - .filter((n) => n.metadataId !== propType); - - const removeNotSelected = e.selectedItems.filter( - (i) => i.metadataType === propType, - ); - - const newList = [...metadataList, ...removeNotSelected]; - - setMetadata({ - ...metadata, - metadata: [...newList], - }); - } - - if ( - isLoading || - !data?.success || - analougeData.isLoading || - !analougeData?.data?.success - ) - return

Loading ...

; - return ( - Description and metadata + {/* Description and metadata */} {errors.description && } - - - - - - {errors.field && } - - - - {errors.formation && ( - - )} - - - - - - {errors.analogues && ( - - )} - - - - {errors.zone && } - - - ); diff --git a/src/features/HandleModel/ModelMetadata/ModelMetadataComponent.test.tsx b/src/features/HandleModel/ModelMetadata/ModelMetadataComponent.test.tsx index a924ecd6..40e22cf2 100644 --- a/src/features/HandleModel/ModelMetadata/ModelMetadataComponent.test.tsx +++ b/src/features/HandleModel/ModelMetadata/ModelMetadataComponent.test.tsx @@ -5,7 +5,6 @@ import { cleanup, render, screen } from '@testing-library/react'; import { MsalReactTester } from 'msal-react-tester'; import { AnalogueModelSourceType } from '../../../api/generated'; import { useFetchAnalogues } from '../../../hooks/useFetchAnalogues'; -import { useFetchMetadata } from '../../../hooks/useFethcMetadata'; import { ModelMetadata } from './ModelMetadata'; let msalTester: MsalReactTester; @@ -20,6 +19,8 @@ const mockMetadata = { metadata: [], analogues: [], modelAreas: [], + stratigraphicGroups: [], + geologicalGroups: [], }; const errors = {}; @@ -36,44 +37,11 @@ afterEach(() => { jest.clearAllMocks(); }); -jest.mock('../../../hooks/useFethcMetadata'); jest.mock('../../../hooks/useFetchAnalogues'); const Render = () => { const testQueryClient = new QueryClient(); - // @ts-ignore because of error - useFetchMetadata.mockReturnValue({ - data: { - data: [ - { - metadataId: 'test1', - metadataType: 'Field', - value: 'string11', - }, - { - metadataId: 'test2', - metadataType: 'Field', - value: 'string12', - }, - { - metadataId: 'test5', - metadataType: 'Formation', - value: 'string55', - }, - { - metadataId: 'test6', - metadataType: 'Zone', - value: 'string66', - }, - ], - success: true, - }, - isLoading: false, - isSuccess: true, - isError: false, - }); - // @ts-ignore because of error useFetchAnalogues.mockReturnValue({ data: { @@ -131,51 +99,3 @@ test('Description field to be present after render', async () => { const descriptionLable = screen.getByLabelText('Model description'); expect(descriptionLable).toBeInTheDocument(); }); - -test('Field dropdown to be present after render', async () => { - render(); - - const labeledNodes = await screen.findAllByLabelText('Field'); - const input = labeledNodes[1]; - const optionsList = labeledNodes[0]; - - expect(input).toBeDefined(); - expect(input).toHaveAccessibleName('Field'); - expect(input.nodeName).toBe('INPUT'); - - expect(optionsList).toBeDefined(); - expect(optionsList.nodeName).toBe('UL'); -}); - -test('Zone dropdown to be present after render', async () => { - render(); - - const labeledNodes = await screen.findAllByLabelText('Zone'); - const input = labeledNodes[1]; - - expect(input).toBeDefined(); - expect(input).toHaveAccessibleName('Zone'); - expect(input.nodeName).toBe('INPUT'); -}); - -test('Formation dropdown to be present after render', async () => { - render(); - - const labeledNodes = await screen.findAllByLabelText('Formation'); - const input = labeledNodes[1]; - - expect(input).toBeDefined(); - expect(input).toHaveAccessibleName('Formation'); - expect(input.nodeName).toBe('INPUT'); -}); - -test('Analogue dropdown to be present after render', async () => { - render(); - - const labeledNodes = await screen.findAllByLabelText('Analogue'); - const input = labeledNodes[1]; - - expect(input).toBeDefined(); - expect(input).toHaveAccessibleName('Analogue'); - expect(input.nodeName).toBe('INPUT'); -}); diff --git a/src/features/HandleModel/ModelMetadata/ModelMetadataHooks.test.tsx b/src/features/HandleModel/ModelMetadata/ModelMetadataHooks.test.tsx index 488de392..8af8db72 100644 --- a/src/features/HandleModel/ModelMetadata/ModelMetadataHooks.test.tsx +++ b/src/features/HandleModel/ModelMetadata/ModelMetadataHooks.test.tsx @@ -3,11 +3,10 @@ import { MsalProvider } from '@azure/msal-react'; import * as ReactQuery from '@tanstack/react-query'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; -import { cleanup, renderHook, screen, waitFor } from '@testing-library/react'; +import { cleanup, renderHook, waitFor } from '@testing-library/react'; import { MsalReactTester } from 'msal-react-tester'; import { AnalogueModelSourceType } from '../../../api/generated'; import { useFetchAnalogues } from '../../../hooks/useFetchAnalogues'; -import { useFetchMetadata } from '../../../hooks/useFethcMetadata'; import { ModelMetadata } from './ModelMetadata'; let msalTester: MsalReactTester; @@ -22,6 +21,8 @@ const mockMetadata = { metadata: [], analogues: [], modelAreas: [], + stratigraphicGroups: [], + geologicalGroups: [], }; const errors = {}; function wrapper(props: { children: React.ReactNode }) { @@ -40,13 +41,6 @@ function wrapper(props: { children: React.ReactNode }) { ); } -const mockMetadataDto = { - metadataId: 'test', - metadataType: 'string', - value: 'string', - success: true, -}; - const mockAnalogueList = { analogueId: 'test2', name: 'string', @@ -86,17 +80,6 @@ afterEach(() => { jest.clearAllMocks(); }); -test('Calls Mocked metadata api with mock data', async () => { - const mock = await mockGetData(mockMetadataDto); - - const { result } = renderHook(() => useFetchMetadata(), { wrapper }); - - const res = await result.current; - - await waitFor(() => expect(mock).toHaveBeenCalled()); - await waitFor(() => expect(res.data).toBe(mockMetadataDto)); -}); - test('Calls Mocked analogue api with mock data', async () => { const mock = await mockGetData(mockAnalogueList); @@ -107,13 +90,3 @@ test('Calls Mocked analogue api with mock data', async () => { await waitFor(() => expect(mock).toHaveBeenCalled()); await waitFor(() => expect(res.data).toBe(mockAnalogueList)); }); - -test('renders ModelMetadata component in loading state', async () => { - await mockGetData(mockMetadataDto); - - const { result } = renderHook(() => useFetchMetadata(), { wrapper }); - await result.current; - - const loading = screen.getByText('Loading ...'); - expect(loading).toBeVisible(); -}); diff --git a/src/features/HandleModel/SidePane/SidePane.styled.ts b/src/features/HandleModel/SidePane/SidePane.styled.ts new file mode 100644 index 00000000..4bf58f4b --- /dev/null +++ b/src/features/HandleModel/SidePane/SidePane.styled.ts @@ -0,0 +1,37 @@ +import { SideBar } from '@equinor/eds-core-react'; +import styled from 'styled-components'; +import { spacings } from '../../../tokens/spacings'; +import { theme } from '../../../tokens/theme'; + +export const SidebarWrapper = styled.div` + heigth: 100%; + max-width: 256px; + > div { + border-color: ${theme.light.ui.background.medium}; + } +`; + +export const StyledSidebarContent = styled(SideBar.Content)` + padding-top: ${spacings.MEDIUM}; + overflow: hidden; + > a { + border-bottom: none; + } +`; + +export const StyledBackButton = styled(SideBar.Link)` + > p { + color: ${theme.light.primary.resting}; + font-weight: bold; + } + > svg { + fill: ${theme.light.primary.resting}; + } + &:hover { + background-color: ${theme.light.ui.background.light}; + } + + padding: 0 0 ${spacings.MEDIUM} ${spacings.SMALL}; +`; + +export { StyledBackButton as Back, StyledSidebarContent as SidebarContent }; diff --git a/src/features/HandleModel/SidePane/SidePane.tsx b/src/features/HandleModel/SidePane/SidePane.tsx new file mode 100644 index 00000000..9ce341ae --- /dev/null +++ b/src/features/HandleModel/SidePane/SidePane.tsx @@ -0,0 +1,40 @@ +import { SideBar, SidebarLinkProps, Tooltip } from '@equinor/eds-core-react'; +import { arrow_back as BACK } from '@equinor/eds-icons'; +import { useNavigate } from 'react-router-dom'; + +import * as Styled from './SidePane.styled'; + +export const SidePane = ({ uploading }: { uploading: boolean }) => { + const navigate = useNavigate(); + + const backItems: SidebarLinkProps = { + label: 'Back to models', + icon: BACK, + href: '/', + active: false, + }; + return ( + + + + {uploading ? ( + + + + ) : ( + { + navigate('/'); + }} + > + )} + + + + ); +}; diff --git a/src/features/HandleModel/StratigraphicColumnSelect/StratigraphicColumnSelect.styled.tsx b/src/features/HandleModel/StratigraphicColumnSelect/StratigraphicColumnSelect.styled.tsx new file mode 100644 index 00000000..d93f62bf --- /dev/null +++ b/src/features/HandleModel/StratigraphicColumnSelect/StratigraphicColumnSelect.styled.tsx @@ -0,0 +1,9 @@ +import styled from 'styled-components'; +import { spacings } from '../../../tokens/spacings'; + +export const AutocompleteList = styled.div` + display: flex; + flex-direction: column; + + row-gap: ${spacings.MEDIUM}; +`; diff --git a/src/features/HandleModel/StratigraphicColumnSelect/StratigraphicColumnSelect.tsx b/src/features/HandleModel/StratigraphicColumnSelect/StratigraphicColumnSelect.tsx new file mode 100644 index 00000000..28a95b5f --- /dev/null +++ b/src/features/HandleModel/StratigraphicColumnSelect/StratigraphicColumnSelect.tsx @@ -0,0 +1,186 @@ +/* eslint-disable max-lines-per-function */ +import { Autocomplete, AutocompleteChanges } from '@equinor/eds-core-react'; +import { + CountryDto, + FieldDto, + StratColumnDto, + StratUnitDto, +} from '../../../api/generated'; +import { + useFetchSmdaCountries, + useFetchSmdaFields, + useFetchSmdaMetadataStratigraphicUnits, + useFetchSmdaStratigraphicColumns, +} from '../../../hooks/useFetchStratColData'; +import { StratColumnType } from '../HandleModelComponent/HandleModelComponent'; +import * as Styled from './StratigraphicColumnSelect.styled'; + +export const StratigraphicColumnSelect = ({ + stratColumnObject, + setStratColumnObject, +}: { + stratColumnObject: StratColumnType; + setStratColumnObject: React.Dispatch>; +}) => { + const countryData = useFetchSmdaCountries(); + const fieldData = useFetchSmdaFields(); + const stratColumnData = useFetchSmdaStratigraphicColumns(); + const stratUnitData = useFetchSmdaMetadataStratigraphicUnits(); + + if ( + countryData.isLoading || + !countryData?.data?.success || + fieldData.isLoading || + !fieldData?.data?.success || + stratColumnData.isLoading || + !stratColumnData?.data?.success || + stratUnitData.isLoading || + !stratUnitData?.data?.success + ) + return

Loading ...

; + + return ( + + option.identifier} + onOptionsChange={(e: AutocompleteChanges) => { + setStratColumnObject({ + ...stratColumnObject, + country: e.selectedItems[0], + field: undefined, + stratColumn: undefined, + level1: undefined, + level2: undefined, + level3: undefined, + }); + }} + noOptionsText="No options" + /> + + field.countryId === stratColumnObject.country?.countryId, + )} + optionLabel={(option) => option.identifier} + onOptionsChange={(e: AutocompleteChanges) => { + setStratColumnObject({ + ...stratColumnObject, + field: e.selectedItems[0], + }); + }} + selectedOptions={ + stratColumnObject.field ? [stratColumnObject.field] : [] + } + noOptionsText="No options" + /> + + + stratColumnObject.country !== undefined && + c.countries.filter( + (country) => + country.countryId === stratColumnObject.country?.countryId, + ).length !== 0, + )} + optionLabel={(option) => option.identifier} + onOptionsChange={(e: AutocompleteChanges) => { + setStratColumnObject({ + ...stratColumnObject, + stratColumn: e.selectedItems[0], + level1: undefined, + level2: undefined, + level3: undefined, + }); + }} + selectedOptions={ + stratColumnObject.stratColumn ? [stratColumnObject.stratColumn] : [] + } + noOptionsText="No options" + /> + + s.level === 1) + .filter( + (c) => + c.stratColumnId === stratColumnObject.stratColumn?.stratColumnId, + )} + optionLabel={(option) => option.identifier} + onOptionsChange={(e: AutocompleteChanges) => + setStratColumnObject({ + ...stratColumnObject, + level1: e.selectedItems[0], + level2: undefined, + level3: undefined, + }) + } + selectedOptions={ + stratColumnObject.level1 ? [stratColumnObject.level1] : [] + } + noOptionsText="No options" + /> + + s.level === 2) + .filter( + (c) => + c.stratColumnId === stratColumnObject.stratColumn?.stratColumnId, + ) + .filter( + (x) => + x.stratUnitParentId === stratColumnObject.level1?.stratUnitId, + )} + optionLabel={(option) => option.identifier} + onOptionsChange={(e: AutocompleteChanges) => + setStratColumnObject({ + ...stratColumnObject, + level2: e.selectedItems[0], + level3: undefined, + }) + } + selectedOptions={ + stratColumnObject.level2 ? [stratColumnObject.level2] : [] + } + noOptionsText="No options" + /> + + s.level === 3) + .filter( + (c) => + c.stratColumnId === stratColumnObject.stratColumn?.stratColumnId, + ) + .filter( + (x) => + x.stratUnitParentId === stratColumnObject.level2?.stratUnitId, + )} + optionLabel={(option) => option.identifier} + onOptionsChange={(e: AutocompleteChanges) => + setStratColumnObject({ + ...stratColumnObject, + level3: e.selectedItems[0], + }) + } + selectedOptions={ + stratColumnObject.level3 ? [stratColumnObject.level3] : [] + } + noOptionsText="No options" + /> + + ); +}; diff --git a/src/features/ModelView/ModelMetadataView/ModelMetadataView.styled.tsx b/src/features/ModelView/ModelMetadataView/ModelMetadataView.styled.tsx index 94e09ab4..461b850a 100644 --- a/src/features/ModelView/ModelMetadataView/ModelMetadataView.styled.tsx +++ b/src/features/ModelView/ModelMetadataView/ModelMetadataView.styled.tsx @@ -1,25 +1,39 @@ -import { Table } from '@equinor/eds-core-react'; +import { Dialog, Table } from '@equinor/eds-core-react'; import styled from 'styled-components'; import { spacings } from '../../../tokens/spacings'; -export const Metadata = styled.div` +export const Wrapper = styled.div` display: flex; flex-direction: column; - row-gap: ${spacings.LARGE}; + + row-gap: ${spacings.XXX_LARGE}; > button { width: fit-content; } `; +export const Metadata = styled.div` + display: flex; + flex-direction: column; + row-gap: ${spacings.LARGE}; +`; + +export const MetadataInfo = styled.div` + display: flex; + flex-direction: column; + row-gap: ${spacings.MEDIUM}; + + max-width: 60%; +`; + const DataTable = styled(Table)` min-width: 256px; width: 85%; `; -export const NameCell = styled(Table.Cell)` - width: 20%; - padding-right: ${spacings.X_LARGE}; +export const DescriptionWrapper = styled.div` + min-height: 200px; `; export const DataCell = styled(Table.Cell)` @@ -32,4 +46,9 @@ export const DataCell = styled(Table.Cell)` } `; +export const Actions = styled(Dialog.Actions)` + display: flex; + column-gap: ${spacings.SMALL}; +`; + export { DataTable as Table }; diff --git a/src/features/ModelView/ModelMetadataView/ModelMetadataView.tsx b/src/features/ModelView/ModelMetadataView/ModelMetadataView.tsx index 121ec552..8440f1cc 100644 --- a/src/features/ModelView/ModelMetadataView/ModelMetadataView.tsx +++ b/src/features/ModelView/ModelMetadataView/ModelMetadataView.tsx @@ -1,12 +1,15 @@ +/* eslint-disable max-lines */ /* eslint-disable max-lines-per-function */ -import { Button, Table, Typography } from '@equinor/eds-core-react'; +import { Button, Dialog, Typography } from '@equinor/eds-core-react'; import { useMutation } from '@tanstack/react-query'; import { useState } from 'react'; +import { useParams } from 'react-router-dom'; import { AddAnalogueDto, AddAnalogueModelAnalogueCommandForm, AddAnalogueModelMetadataCommandForm, AddMetadataDto, + AddStatigraphicGroupForm, AnalogueList, AnalogueModelAnaloguesService, AnalogueModelDetail, @@ -17,14 +20,39 @@ import { } from '../../../api/generated'; import { AnalogueModelsService } from '../../../api/generated/services/AnalogueModelsService'; import { queryClient } from '../../../auth/queryClient'; +import { StratigrapicGroups } from '../../../components/StratigrapicGroups/StratigrapicGroups'; import { useFetchModel } from '../../../hooks/useFetchModel'; -import { HandleModelComponent } from '../../HandleModel/HandleModelComponent/HandleModelComponent'; -import { TableDataCell } from '../TableDataCell/TableDataCell'; +import { + HandleModelComponent, + StratColumnType, +} from '../../HandleModel/HandleModelComponent/HandleModelComponent'; +import { StratigraphicColumnSelect } from '../../HandleModel/StratigraphicColumnSelect/StratigraphicColumnSelect'; import * as Styled from './ModelMetadataView.styled'; -export const ModelMetadataView = () => { +export const defaultStratColumnData: StratColumnType = { + country: undefined, + field: undefined, + stratColumn: undefined, + level1: undefined, + level2: undefined, + level3: undefined, +}; + +export const ModelMetadataView = ({ + modelIdParent, + isAddUploading, +}: { + modelIdParent?: string; + isAddUploading?: boolean; +}) => { + const { isLoading, data } = useFetchModel( + modelIdParent ? modelIdParent : undefined, + ); const [isAddModelDialog, setAddModelDialog] = useState(false); - const { isLoading, data } = useFetchModel(); + const [stratColumnObject, setStratColumnObject] = useState( + defaultStratColumnData, + ); + const [showStratColDialog, setShowStratColDialog] = useState(false); const defaultMetadata: AnalogueModelDetail = { analogueModelId: data?.data.analogueModelId @@ -39,9 +67,12 @@ export const ModelMetadataView = () => { parameters: [], metadata: data?.data.metadata ? data?.data.metadata : [], modelAreas: [], + stratigraphicGroups: [], + geologicalGroups: [], }; + const { modelId } = useParams(); - function toggleDialog() { + function toggleEditMetadata() { setAddModelDialog(!isAddModelDialog); } @@ -143,51 +174,176 @@ export const ModelMetadataView = () => { requestBody: readyAnalogue, }); - toggleDialog(); + toggleEditMetadata(); + }; + + const handleStratColDialog = () => { + setShowStratColDialog(!showStratColDialog); + setStratColumnObject(defaultStratColumnData); + }; + + const postSmdaMetadataRow = useMutation({ + mutationFn: ({ + id, + requestBody, + }: { + id: string; + requestBody: AddStatigraphicGroupForm; + }) => { + return AnalogueModelsService.postApiAnalogueModelsStratigraphicGroups( + id, + requestBody, + ); + }, + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['analogue-model'] }); + }, + }); + + const deleteStratColCase = useMutation({ + mutationFn: ({ + analogueModelId, + stratigraphicGroupId, + }: { + analogueModelId: string; + stratigraphicGroupId: string; + }) => { + return AnalogueModelsService.deleteApiAnalogueModelsStratigraphicGroups( + analogueModelId, + stratigraphicGroupId, + ); + }, + onSuccess: () => { + queryClient.invalidateQueries(['analogue-model']); + }, + }); + + const deleteStratColRow = async (stratigraphicGroupId: string) => { + if (modelId) { + const res = await deleteStratColCase.mutateAsync({ + analogueModelId: modelId, + stratigraphicGroupId: stratigraphicGroupId, + }); + return res; + } else if (modelIdParent) { + const res = await deleteStratColCase.mutateAsync({ + analogueModelId: modelIdParent, + stratigraphicGroupId: stratigraphicGroupId, + }); + return res; + } }; if (isLoading || !data?.success) return

Loading ...

; + const handleAddStratCol = async () => { + const id = modelIdParent ? modelIdParent : defaultMetadata.analogueModelId; + if ( + id && + stratColumnObject.country && + stratColumnObject.field && + stratColumnObject.stratColumn + ) { + const stratUnitList: string[] = []; + if (stratColumnObject.level1 !== undefined) + stratUnitList.push(stratColumnObject.level1.stratUnitId); + if ( + stratColumnObject.level1 !== undefined && + stratColumnObject.level2 !== undefined + ) + stratUnitList.push(stratColumnObject.level2.stratUnitId); + if ( + stratColumnObject.level1 !== undefined && + stratColumnObject.level2 !== undefined && + stratColumnObject.level3 !== undefined + ) + stratUnitList.push(stratColumnObject.level3.stratUnitId); + + const postRequestBody: AddStatigraphicGroupForm = { + countryId: stratColumnObject.country.countryId, + fieldId: stratColumnObject.field.fieldId, + stratigraphicColumnId: stratColumnObject.stratColumn.stratColumnId, + stratigraphicUnitIds: stratUnitList.length > 0 ? stratUnitList : [], + }; + + const rowUpload = await postSmdaMetadataRow.mutateAsync({ + id: id, + requestBody: postRequestBody, + }); + if (rowUpload.success) handleStratColDialog(); + } + }; + return ( - - Description and metadata - {data.data.description &&
{data.data.description}
} - - - - Field - - - - Fomation - - - - Analouge - - - - Zone - - - - - - - {isAddModelDialog && ( - - )} -
+ + + {!isAddUploading && ( + <> + Description and metadata + + {!isAddModelDialog && ( + + {data.data.description &&
{data.data.description}
} +
+ )} + + {isAddModelDialog && ( + + )} +
+ {!isAddModelDialog && ( + + )} +
+ + )} + {isAddUploading && ( + + Add model metadata + + At least one type of metadata (outcrop analogue, stratigraphic + column, or deposition environment) is required when adding a new + model. + + + )} + +
+ +
+
+ + + Add stratigraphic column + + + + + + + + +
); }; diff --git a/src/features/ModelView/TableDataCell/TableDataCell.tsx b/src/features/ModelView/TableDataCell/TableDataCell.tsx deleted file mode 100644 index 0fc31dfc..00000000 --- a/src/features/ModelView/TableDataCell/TableDataCell.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { Typography } from '@equinor/eds-core-react'; -import { AnalogueModelDetail } from '../../../api/generated'; -import * as Styled from '../ModelMetadataView/ModelMetadataView.styled'; -export const TableDataCell = ({ - data, - type, -}: { - data: AnalogueModelDetail; - type: string; -}) => { - return ( - - {type === 'Analouge' ? ( - data.analogues && data.analogues.length > 0 ? ( - data.analogues.map((m) => ( - {m.name} - )) - ) : ( - Not relevant - ) - ) : data.metadata?.filter((m) => m.metadataType === type).length ? ( - data.metadata - ?.filter((m) => m.metadataType === type) - .map((m) => ( - {m.value + ', '} - )) - ) : ( - Not relevant - )} - - ); -}; diff --git a/src/features/Results/CaseResult/CaseResultView/VariogramCaseResult/VariogramResultTable/VariogramResultTable.tsx b/src/features/Results/CaseResult/CaseResultView/VariogramCaseResult/VariogramResultTable/VariogramResultTable.tsx index 337fd7f0..1ec8b921 100644 --- a/src/features/Results/CaseResult/CaseResultView/VariogramCaseResult/VariogramResultTable/VariogramResultTable.tsx +++ b/src/features/Results/CaseResult/CaseResultView/VariogramCaseResult/VariogramResultTable/VariogramResultTable.tsx @@ -49,14 +49,14 @@ export const VariogramResultTable = ({ const modelArea = caseList.data?.data.filter( (c) => c.computeCaseId === e.computeCaseId, - )[0].modelArea.name; + )[0].modelArea; const element: ResultObjectType = { computeCaseId: e.computeCaseId, method: method ? method : '', parameter: parameter, archelFilter: e.archelFilter ? e.archelFilter : '', - modelArea: modelArea ? modelArea : '', + modelArea: modelArea ? modelArea.name : '', variogramModel: e.family ? e.family : '', quality: roundResultString(e.quality) ? roundResultString(e.quality) diff --git a/src/hooks/useFetchStratColData.ts b/src/hooks/useFetchStratColData.ts new file mode 100644 index 00000000..c14dff23 --- /dev/null +++ b/src/hooks/useFetchStratColData.ts @@ -0,0 +1,58 @@ +import { useMsal } from '@azure/msal-react'; +import { useQuery } from '@tanstack/react-query'; +import { MetadataService } from '../api/generated'; +import { useAccessToken } from './useAccessToken'; + +export const useFetchSmdaCountries = () => { + const { instance, accounts } = useMsal(); + const token = useAccessToken(instance, accounts[0]); + + const query = useQuery({ + queryKey: ['smda-countries'], + queryFn: () => MetadataService.getApiMetadataSmdaMetadataCountries(), + enabled: !!token, + }); + + return query; +}; + +export const useFetchSmdaFields = () => { + const { instance, accounts } = useMsal(); + const token = useAccessToken(instance, accounts[0]); + + const query = useQuery({ + queryKey: ['smda-fields'], + queryFn: () => MetadataService.getApiMetadataSmdaMetadataFields(), + enabled: !!token, + }); + + return query; +}; + +export const useFetchSmdaStratigraphicColumns = () => { + const { instance, accounts } = useMsal(); + const token = useAccessToken(instance, accounts[0]); + + const query = useQuery({ + queryKey: ['smda-strat-columns'], + queryFn: () => + MetadataService.getApiMetadataSmdaMetadataStratigraphicColumns(), + enabled: !!token, + }); + + return query; +}; + +export const useFetchSmdaMetadataStratigraphicUnits = () => { + const { instance, accounts } = useMsal(); + const token = useAccessToken(instance, accounts[0]); + + const query = useQuery({ + queryKey: ['smda-strat-units'], + queryFn: () => + MetadataService.getApiMetadataSmdaMetadataStratigraphicUnits(), + enabled: !!token, + }); + + return query; +}; diff --git a/src/hooks/useFethcMetadata.ts b/src/hooks/useFethcMetadata.ts deleted file mode 100644 index 94098cd9..00000000 --- a/src/hooks/useFethcMetadata.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { useMsal } from '@azure/msal-react'; -import { useQuery } from '@tanstack/react-query'; -import { MetadataService } from '../api/generated'; -import { useAccessToken } from './useAccessToken'; - -export const useFetchMetadata = () => { - const { instance, accounts } = useMsal(); - const token = useAccessToken(instance, accounts[0]); - - const query = useQuery({ - queryKey: ['metadata'], - queryFn: () => MetadataService.getApiMetadata(), - enabled: !!token, - }); - - return query; -}; diff --git a/src/pages/AddModel/AddModel.styled.tsx b/src/pages/AddModel/AddModel.styled.tsx index 5650e66c..2173f8eb 100644 --- a/src/pages/AddModel/AddModel.styled.tsx +++ b/src/pages/AddModel/AddModel.styled.tsx @@ -1,42 +1,27 @@ -import { SideBar } from '@equinor/eds-core-react'; import styled from 'styled-components'; import { spacings } from '../../tokens/spacings'; -import { theme } from '../../tokens/theme'; export const PageLayout = styled.div` display: flex; fled-direction: row; + flex: auto; + position: relative; + width: 100%; height: 100%; `; export const Content = styled.div` display: flex; - fled-direction: row; + fled-direction: column; - padding: ${spacings.XX_LARGE} ${spacings.X_LARGE}; -`; + width: 100%; + overflow: scroll; -export const StyledSidebarContent = styled(SideBar.Content)` - padding-top: ${spacings.MEDIUM}; - overflow: hidden; - > a { - border-bottom: none; - } + padding: ${spacings.XX_LARGE} ${spacings.X_LARGE}; `; -export const StyledBackButton = styled(SideBar.Link)` - > p { - color: ${theme.light.primary.resting}; - font-weight: bold; - } - > svg { - fill: ${theme.light.primary.resting}; - } - &:hover { - background-color: ${theme.light.ui.background.light}; - } - - padding: 0 0 ${spacings.MEDIUM} ${spacings.SMALL}; +export const InnerContent = styled.div` + display: flex; + flex-direction: column; + row-gap: ${spacings.X_LARGE}; `; - -export { StyledBackButton as Back, StyledSidebarContent as SidebarContent }; diff --git a/src/pages/AddModel/AddModel.tsx b/src/pages/AddModel/AddModel.tsx index d752f957..01a658ac 100644 --- a/src/pages/AddModel/AddModel.tsx +++ b/src/pages/AddModel/AddModel.tsx @@ -1,15 +1,8 @@ /* eslint-disable max-lines */ /* eslint-disable max-lines-per-function */ -import { - SideBar, - SidebarLinkProps, - Snackbar, - Tooltip, -} from '@equinor/eds-core-react'; -import { arrow_back as BACK } from '@equinor/eds-icons'; +import { Snackbar } from '@equinor/eds-core-react'; import { useMutation } from '@tanstack/react-query'; import { useEffect, useState } from 'react'; -import { useNavigate } from 'react-router-dom'; import { AddAnalogueDto, AddAnalogueModelAnalogueCommandForm, @@ -30,6 +23,8 @@ import { } from '../../api/generated'; import { queryClient } from '../../auth/queryClient'; import { HandleModelComponent } from '../../features/HandleModel/HandleModelComponent/HandleModelComponent'; +import { SidePane } from '../../features/HandleModel/SidePane/SidePane'; +import { ModelMetadataView } from '../../features/ModelView/ModelMetadataView/ModelMetadataView'; import * as Styled from './AddModel.styled'; enum UploadProcess { @@ -42,6 +37,17 @@ const defaultCounterValue = 1; const defaultBeginningOfchunk = 0; export const AddModel = () => { const [progress, setProgress] = useState(0); + const [modelId, setModelId] = useState(''); + const [uploading, setUploading] = useState(false); + + // Hard coded states for ease of development + + // const [progress, setProgress] = useState(12); + // const [modelId, setModelId] = useState( + // 'fa725ca1-ca33-4b7c-e742-08dc7b2938d0', + // ); + // const [uploading, setUploading] = useState(true); + const [counter, setCounter] = useState(defaultCounterValue); const [fileToBeUpload, setFileToBeUpload] = useState(); const [beginingOfTheChunk, setBeginingOfTheChunk] = useState( @@ -51,10 +57,9 @@ export const AddModel = () => { const [fileSize, setFileSize] = useState(0); const [chunkSize, setChunkSize] = useState(0); const [chunkCount, setChunkCount] = useState(0); - const [modelId, setModelId] = useState(''); + const [uploadId, setUploadId] = useState(''); const [uploadStatus, setUploadStatus] = useState(); - const [uploading, setUploading] = useState(false); const defaultMetadata: AnalogueModelDetail = { analogueModelId: '', @@ -62,11 +67,13 @@ export const AddModel = () => { description: '', isProcessed: false, sourceType: AnalogueModelSourceType.DELTARES, + analogues: [], fileUploads: [], parameters: [], metadata: [], - analogues: [], modelAreas: [], + stratigraphicGroups: [], + geologicalGroups: [], }; const createModel = useMutation({ @@ -261,11 +268,10 @@ export const AddModel = () => { // eslint-disable-next-line max-depth if (convertModelFile.error === null && convert.success) { setUploadStatus(UploadProcess.SUCCESS); - setProgress(0); setUploading(false); } else { setUploadStatus(UploadProcess.FAILED); - setProgress(0); + setProgress(-99); setUploading(false); } } @@ -294,13 +300,28 @@ export const AddModel = () => { return ( + - +
+ + 0} + modelId={modelId} + /> + {modelId !== '' && ( + <> + 0} + /> + + )} + +
{
); }; - -const SidePane = ({ uploading }: { uploading: boolean }) => { - const navigate = useNavigate(); - - const backItems: SidebarLinkProps = { - label: 'Back to models', - icon: BACK, - href: '/', - active: false, - }; - return ( - - - {uploading ? ( - - - - ) : ( - { - navigate('/'); - }} - > - )} - - - ); -}; diff --git a/yarn.lock b/yarn.lock index 49f1c172..c2568b4d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1147,6 +1147,13 @@ dependencies: regenerator-runtime "^0.14.0" +"@babel/runtime@^7.24.0": + 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/template@^7.22.15", "@babel/template@^7.22.5", "@babel/template@^7.3.3": version "7.22.15" resolved "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz" @@ -1319,18 +1326,24 @@ resolved "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz" integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== -"@equinor/eds-core-react@0.36.0": - version "0.36.0" - resolved "https://registry.npmjs.org/@equinor/eds-core-react/-/eds-core-react-0.36.0.tgz" - integrity sha512-O/WihrcxM2EjO5b/ZHFKmZ6w6NK0we6H/nvvYvmPu4iXt7Ci7lJrrEqGZfj9KeGfoX7T4wCYFEBP/nBqN7ndpQ== +"@equinor/eds-core-react@0.37.0": + version "0.37.0" + resolved "https://registry.yarnpkg.com/@equinor/eds-core-react/-/eds-core-react-0.37.0.tgz#44f893ff71f3a76f400241d5156ce61cf465df8a" + integrity sha512-0do7Dnb0nkANjEhJvrmpnDWWt3ESpckrQXDr3gJVdZwffkzNj74TgYJ7bGQlQuAs6nFOxDWOnjlar43N5rwtrg== dependencies: - "@babel/runtime" "^7.23.8" + "@babel/runtime" "^7.24.0" "@equinor/eds-icons" "^0.21.0" "@equinor/eds-tokens" "0.9.2" "@equinor/eds-utils" "0.8.4" - "@floating-ui/react" "^0.26.2" - "@tanstack/react-virtual" "3.0.4" - downshift "^8.2.3" + "@floating-ui/react" "^0.26.9" + "@internationalized/date" "^3.5.2" + "@react-aria/utils" "^3.23.2" + "@react-stately/calendar" "^3.4.4" + "@react-stately/datepicker" "^3.9.2" + "@react-types/shared" "^3.22.1" + "@tanstack/react-virtual" "3.2.0" + downshift "9.0.4" + react-aria "^3.32.1" "@equinor/eds-data-grid-react@0.3.0": version "0.3.0" @@ -1393,46 +1406,80 @@ resolved "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz" integrity sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w== -"@floating-ui/core@^1.4.2": - version "1.5.0" - resolved "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.0.tgz" - integrity sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg== +"@floating-ui/core@^1.0.0": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.1.tgz#a4e6fef1b069cda533cbc7a4998c083a37f37573" + integrity sha512-42UH54oPZHPdRHdw6BgoBD6cg/eVTmVrFcgeRDM3jbO7uxSoipVcmcIGFcA5jmOHO5apcyvBhkSKES3fQJnu7A== dependencies: - "@floating-ui/utils" "^0.1.3" + "@floating-ui/utils" "^0.2.0" -"@floating-ui/dom@^1.5.1": - version "1.5.3" - resolved "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz" - integrity sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA== +"@floating-ui/dom@^1.0.0": + version "1.6.4" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.4.tgz#3a9d1f3b7ccdab89a4ca05713acc6204b1f67a29" + integrity sha512-0G8R+zOvQsAG1pg2Q99P21jiqxqGBW1iRe/iXHsBRBxnpXKFI8QwbB4x5KmYLggNO5m34IQgOIu9SCRfR/WWiQ== dependencies: - "@floating-ui/core" "^1.4.2" - "@floating-ui/utils" "^0.1.3" + "@floating-ui/core" "^1.0.0" + "@floating-ui/utils" "^0.2.0" -"@floating-ui/react-dom@^2.0.3": - version "2.0.4" - resolved "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.4.tgz" - integrity sha512-CF8k2rgKeh/49UrnIBs4BdxPUV6vize/Db1d/YbCLyp9GiVZ0BEwf5AiDSxJRCr6yOkGqTFHtmrULxkEfYZ7dQ== +"@floating-ui/react-dom@^2.0.0": + version "2.0.9" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.0.9.tgz#264ba8b061000baa132b5910f0427a6acf7ad7ce" + integrity sha512-q0umO0+LQK4+p6aGyvzASqKbKOJcAHJ7ycE9CuUvfx3s9zTHWmGJTPOIlM/hmSBfUfg/XfY5YhLBLR/LHwShQQ== dependencies: - "@floating-ui/dom" "^1.5.1" + "@floating-ui/dom" "^1.0.0" -"@floating-ui/react@^0.26.2": - version "0.26.3" - resolved "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.3.tgz" - integrity sha512-iKH8WRR0L/nLiM6qavFZxkyegIZRMxGnM9aKEc71M4wRlUNkgTamjPsOQXy11oZbDOH37MiTbk/nAPn9M2+shA== +"@floating-ui/react@^0.26.9": + version "0.26.13" + resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.26.13.tgz#81dc03b08ec8db40c48bf2e1f2a2e1a5e9a1997a" + integrity sha512-kBa9wntpugzrZ8t/4yWelvSmEKZdeTXTJzrxqyrLmcU/n1SM4nvse8yQh2e1b37rJGvtu0EplV9+IkBrCJ1vkw== dependencies: - "@floating-ui/react-dom" "^2.0.3" - "@floating-ui/utils" "^0.1.5" - tabbable "^6.0.1" + "@floating-ui/react-dom" "^2.0.0" + "@floating-ui/utils" "^0.2.0" + tabbable "^6.0.0" -"@floating-ui/utils@^0.1.3": - version "0.1.4" - resolved "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.4.tgz" - integrity sha512-qprfWkn82Iw821mcKofJ5Pk9wgioHicxcQMxx+5zt5GSKoqdWvgG5AxVmpmUUjzTLPVSH5auBrhI93Deayn/DA== +"@floating-ui/utils@^0.2.0": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.2.tgz#d8bae93ac8b815b2bd7a98078cf91e2724ef11e5" + integrity sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw== + +"@formatjs/ecma402-abstract@1.18.2": + version "1.18.2" + resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.18.2.tgz#bf103712a406874eb1e387858d5be2371ab3aa14" + integrity sha512-+QoPW4csYALsQIl8GbN14igZzDbuwzcpWrku9nyMXlaqAlwRBgl5V+p0vWMGFqHOw37czNXaP/lEk4wbLgcmtA== + dependencies: + "@formatjs/intl-localematcher" "0.5.4" + tslib "^2.4.0" + +"@formatjs/fast-memoize@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-2.2.0.tgz#33bd616d2e486c3e8ef4e68c99648c196887802b" + integrity sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA== + dependencies: + tslib "^2.4.0" + +"@formatjs/icu-messageformat-parser@2.7.6": + version "2.7.6" + resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.7.6.tgz#3d69806de056d2919d53dad895a5ff4851e4e9ff" + integrity sha512-etVau26po9+eewJKYoiBKP6743I1br0/Ie00Pb/S/PtmYfmjTcOn2YCh2yNkSZI12h6Rg+BOgQYborXk46BvkA== + dependencies: + "@formatjs/ecma402-abstract" "1.18.2" + "@formatjs/icu-skeleton-parser" "1.8.0" + tslib "^2.4.0" -"@floating-ui/utils@^0.1.5": - version "0.1.6" - resolved "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz" - integrity sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A== +"@formatjs/icu-skeleton-parser@1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.0.tgz#5f3d3a620c687d6f8c180d80d1241e8f213acf79" + integrity sha512-QWLAYvM0n8hv7Nq5BEs4LKIjevpVpbGLAJgOaYzg9wABEoX1j0JO1q2/jVkO6CVlq0dbsxZCngS5aXbysYueqA== + dependencies: + "@formatjs/ecma402-abstract" "1.18.2" + tslib "^2.4.0" + +"@formatjs/intl-localematcher@0.5.4": + version "0.5.4" + resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz#caa71f2e40d93e37d58be35cfffe57865f2b366f" + integrity sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g== + dependencies: + tslib "^2.4.0" "@hookform/resolvers@^3.3.2": version "3.3.2" @@ -1458,6 +1505,35 @@ resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@internationalized/date@^3.5.2", "@internationalized/date@^3.5.3": + version "3.5.3" + resolved "https://registry.yarnpkg.com/@internationalized/date/-/date-3.5.3.tgz#acef6e6f8855a44d685111023aa471f2012643c8" + integrity sha512-X9bi8NAEHAjD8yzmPYT2pdJsbe+tYSEBAfowtlxJVJdZR3aK8Vg7ZUT1Fm5M47KLzp/M1p1VwAaeSma3RT7biw== + dependencies: + "@swc/helpers" "^0.5.0" + +"@internationalized/message@^3.1.3": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@internationalized/message/-/message-3.1.3.tgz#9b6138ce78d8cfb256649c1ce12895214cb538ab" + integrity sha512-jba3kGxnh4hN4zoeJZuMft99Ly1zbmon4fyDz3VAmO39Kb5Aw+usGub7oU/sGoBIcVQ7REEwsvjIWtIO1nitbw== + dependencies: + "@swc/helpers" "^0.5.0" + intl-messageformat "^10.1.0" + +"@internationalized/number@^3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@internationalized/number/-/number-3.5.2.tgz#2edc8e830268dca7283dad6def728f34eb5b7fdc" + integrity sha512-4FGHTi0rOEX1giSkt5MH4/te0eHBq3cvAYsfLlpguV6pzJAReXymiYpE5wPCqKqjkUO3PIsyvk+tBiIV1pZtbA== + dependencies: + "@swc/helpers" "^0.5.0" + +"@internationalized/string@^3.2.2": + version "3.2.2" + resolved "https://registry.yarnpkg.com/@internationalized/string/-/string-3.2.2.tgz#658e34d61ead5fb9b19b2bbdfbb4a8af3e239abe" + integrity sha512-5xy2JfSQyGqL9FDIdJXVjoKSBBDJR4lvwoCbqKhc5hQZ/qSLU/OlONCmrJPcSH0zxh88lXJMzbOAk8gJ48JBFw== + dependencies: + "@swc/helpers" "^0.5.0" + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" @@ -1803,6 +1879,1007 @@ schema-utils "^3.0.0" source-map "^0.7.3" +"@react-aria/breadcrumbs@^3.5.12": + version "3.5.12" + resolved "https://registry.yarnpkg.com/@react-aria/breadcrumbs/-/breadcrumbs-3.5.12.tgz#7bd65e4b3e3479ae016f0cb842e39dfe015eccb1" + integrity sha512-UHTVe6kA73xbE1J6LLVjUooEQvTJ4vWPRyOxu4t3dZ/4dMttvHxpKylvj4z606wioSGVhCDEKC4Vn+RtQLypeA== + dependencies: + "@react-aria/i18n" "^3.11.0" + "@react-aria/link" "^3.7.0" + "@react-aria/utils" "^3.24.0" + "@react-types/breadcrumbs" "^3.7.4" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/button@^3.9.4": + version "3.9.4" + resolved "https://registry.yarnpkg.com/@react-aria/button/-/button-3.9.4.tgz#8667bc518825b54477c1e870d3fbf2142a01bd64" + integrity sha512-YOt4XWtC+0m7LwLQnU1Gl0ENETLEhtM8SyDbwsFR/fIQYX0T0H9D6jMlnKxXDjKgRvHzom9NZ8caTfsEPbgW/g== + dependencies: + "@react-aria/focus" "^3.17.0" + "@react-aria/interactions" "^3.21.2" + "@react-aria/utils" "^3.24.0" + "@react-stately/toggle" "^3.7.3" + "@react-types/button" "^3.9.3" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/calendar@^3.5.7": + version "3.5.7" + resolved "https://registry.yarnpkg.com/@react-aria/calendar/-/calendar-3.5.7.tgz#c4ab8a3149c2ffd1d15fba5434c8b74bf5a5982a" + integrity sha512-HbOxoslIpak1/RKHQ/p4A5roI+RpM6geK68s72D+9n3NMPDw/X95yesc6JD1Sti2KsGl9GHI6Myf9xcNjuAMnw== + dependencies: + "@internationalized/date" "^3.5.3" + "@react-aria/i18n" "^3.11.0" + "@react-aria/interactions" "^3.21.2" + "@react-aria/live-announcer" "^3.3.3" + "@react-aria/utils" "^3.24.0" + "@react-stately/calendar" "^3.5.0" + "@react-types/button" "^3.9.3" + "@react-types/calendar" "^3.4.5" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/checkbox@^3.14.2": + version "3.14.2" + resolved "https://registry.yarnpkg.com/@react-aria/checkbox/-/checkbox-3.14.2.tgz#87f12a8d0b713bbca1a631dd0cefc95515042732" + integrity sha512-PeXTEfURrZZBN80YJUyVPAvkT7gwpPtwBgtKxg1ars+D1iDV4Yp48yh5pKaNSf0/rlLNOgKJSCpcFzY7V3ipFw== + dependencies: + "@react-aria/form" "^3.0.4" + "@react-aria/interactions" "^3.21.2" + "@react-aria/label" "^3.7.7" + "@react-aria/toggle" "^3.10.3" + "@react-aria/utils" "^3.24.0" + "@react-stately/checkbox" "^3.6.4" + "@react-stately/form" "^3.0.2" + "@react-stately/toggle" "^3.7.3" + "@react-types/checkbox" "^3.8.0" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/combobox@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@react-aria/combobox/-/combobox-3.9.0.tgz#4a4115361b407f1da81b2ff53087f8dad4163eb5" + integrity sha512-JRiCoARx95Lu1hENmf4ndHzpJrMeP/2bV96jZbMn4StFUzhACKnUw0rNFpFdONfeoD/MkWO7tsvhxaPGLhpgtQ== + dependencies: + "@react-aria/i18n" "^3.11.0" + "@react-aria/listbox" "^3.12.0" + "@react-aria/live-announcer" "^3.3.3" + "@react-aria/menu" "^3.14.0" + "@react-aria/overlays" "^3.22.0" + "@react-aria/selection" "^3.18.0" + "@react-aria/textfield" "^3.14.4" + "@react-aria/utils" "^3.24.0" + "@react-stately/collections" "^3.10.6" + "@react-stately/combobox" "^3.8.3" + "@react-stately/form" "^3.0.2" + "@react-types/button" "^3.9.3" + "@react-types/combobox" "^3.11.0" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/datepicker@^3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@react-aria/datepicker/-/datepicker-3.10.0.tgz#d472d256d0ef895ed8aaa173a0200a2344662337" + integrity sha512-YiIxY+mRxc2rPN8j9ypdiGspRHSIrsK6TShBgKEk5UoG5EBKEJfNe/FfoXDR2d5xcpWLAHVuRjERi9WkiJNDBw== + dependencies: + "@internationalized/date" "^3.5.3" + "@internationalized/number" "^3.5.2" + "@internationalized/string" "^3.2.2" + "@react-aria/focus" "^3.17.0" + "@react-aria/form" "^3.0.4" + "@react-aria/i18n" "^3.11.0" + "@react-aria/interactions" "^3.21.2" + "@react-aria/label" "^3.7.7" + "@react-aria/spinbutton" "^3.6.4" + "@react-aria/utils" "^3.24.0" + "@react-stately/datepicker" "^3.9.3" + "@react-stately/form" "^3.0.2" + "@react-types/button" "^3.9.3" + "@react-types/calendar" "^3.4.5" + "@react-types/datepicker" "^3.7.3" + "@react-types/dialog" "^3.5.9" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/dialog@^3.5.13": + version "3.5.13" + resolved "https://registry.yarnpkg.com/@react-aria/dialog/-/dialog-3.5.13.tgz#d3ab55b74c519e1d7d1184d895e76a12da0eb216" + integrity sha512-GUwY7sQtPMtO6LFHyoIGFMEv8tEBrNCrSNwEKilFLxvNUCo/1sY3N+7L2TcoeyDkcRWBJ9Uz9iR0iJ6EsCBWng== + dependencies: + "@react-aria/focus" "^3.17.0" + "@react-aria/overlays" "^3.22.0" + "@react-aria/utils" "^3.24.0" + "@react-types/dialog" "^3.5.9" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/dnd@^3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@react-aria/dnd/-/dnd-3.6.0.tgz#b493cbfc4c4f3e58f4fccda26d04c0f4c3ab03c1" + integrity sha512-uIM54sUr4NpSdvxWozNKGqSNSTe9ir/sO+QFGtGAF5dbjMX7FN/7sVVrtmB8UHKC+fwfs+Ml3kjJgHbm10/Qmg== + dependencies: + "@internationalized/string" "^3.2.2" + "@react-aria/i18n" "^3.11.0" + "@react-aria/interactions" "^3.21.2" + "@react-aria/live-announcer" "^3.3.3" + "@react-aria/overlays" "^3.22.0" + "@react-aria/utils" "^3.24.0" + "@react-stately/dnd" "^3.3.0" + "@react-types/button" "^3.9.3" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/focus@^3.17.0": + version "3.17.0" + resolved "https://registry.yarnpkg.com/@react-aria/focus/-/focus-3.17.0.tgz#e20ed64cd9c9f29a31c7d35484e0145d9a0f9f80" + integrity sha512-aRzBw1WTUkcIV3xFrqPA6aB8ZVt3XyGpTaSHAypU0Pgoy2wRq9YeJYpbunsKj9CJmskuffvTqXwAjTcaQish1Q== + dependencies: + "@react-aria/interactions" "^3.21.2" + "@react-aria/utils" "^3.24.0" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + clsx "^2.0.0" + +"@react-aria/form@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@react-aria/form/-/form-3.0.4.tgz#e0ad830046abbbdd19fd968ab8f1d8fabe8f24ef" + integrity sha512-wWfW9Hv+OWIUbJ0QYzJ4EO5Yt7xZD1i+XNZG9pKGBiREi7dYBo7Y7lbqlWc3pJASSE+6aP9HzhK18dMPtGluVA== + dependencies: + "@react-aria/interactions" "^3.21.2" + "@react-aria/utils" "^3.24.0" + "@react-stately/form" "^3.0.2" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/grid@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@react-aria/grid/-/grid-3.9.0.tgz#31cb1837e43950fa6626bc605b7c339a7098fd97" + integrity sha512-jNg7haMptmeTKR7/ZomIjWZMLB6jWalBkl5in2JdU9Hc4pY5EKqD/7PSprr9SjOzCr5O+4MSiRDvw+Tu7xHevQ== + dependencies: + "@react-aria/focus" "^3.17.0" + "@react-aria/i18n" "^3.11.0" + "@react-aria/interactions" "^3.21.2" + "@react-aria/live-announcer" "^3.3.3" + "@react-aria/selection" "^3.18.0" + "@react-aria/utils" "^3.24.0" + "@react-stately/collections" "^3.10.6" + "@react-stately/grid" "^3.8.6" + "@react-stately/selection" "^3.15.0" + "@react-stately/virtualizer" "^3.7.0" + "@react-types/checkbox" "^3.8.0" + "@react-types/grid" "^3.2.5" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/gridlist@^3.8.0": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@react-aria/gridlist/-/gridlist-3.8.0.tgz#f1e38439f1edcfa0eea7e1cebe4ebd601b947f7f" + integrity sha512-2iPBtpYZdTVij6XcqFsRsjzItjgg7FhFRPUEgD62mCyYd6NJIDkCxLuL97hkZ5BbXNxsr2jgVEns5Z4UzW//IQ== + dependencies: + "@react-aria/focus" "^3.17.0" + "@react-aria/grid" "^3.9.0" + "@react-aria/i18n" "^3.11.0" + "@react-aria/interactions" "^3.21.2" + "@react-aria/selection" "^3.18.0" + "@react-aria/utils" "^3.24.0" + "@react-stately/collections" "^3.10.6" + "@react-stately/list" "^3.10.4" + "@react-stately/tree" "^3.8.0" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/i18n@^3.11.0": + version "3.11.0" + resolved "https://registry.yarnpkg.com/@react-aria/i18n/-/i18n-3.11.0.tgz#b6e553037ceb2c69f9690224369aa7f5880f0d8b" + integrity sha512-dnopopsYKy2cd2dB2LdnmdJ58evKKcNCtiscWl624XFSbq2laDrYIQ4umrMhBxaKD7nDQkqydVBe6HoQKPzvJw== + dependencies: + "@internationalized/date" "^3.5.3" + "@internationalized/message" "^3.1.3" + "@internationalized/number" "^3.5.2" + "@internationalized/string" "^3.2.2" + "@react-aria/ssr" "^3.9.3" + "@react-aria/utils" "^3.24.0" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/interactions@^3.21.2": + version "3.21.2" + resolved "https://registry.yarnpkg.com/@react-aria/interactions/-/interactions-3.21.2.tgz#f55d059a876b094787ee53b5a17a4ea2dc34f70f" + integrity sha512-Ju706DtoEmI/2vsfu9DCEIjDqsRBVLm/wmt2fr0xKbBca7PtmK8daajxFWz+eTq+EJakvYfLr7gWgLau9HyWXg== + dependencies: + "@react-aria/ssr" "^3.9.3" + "@react-aria/utils" "^3.24.0" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/label@^3.7.7": + version "3.7.7" + resolved "https://registry.yarnpkg.com/@react-aria/label/-/label-3.7.7.tgz#7d6615cbf6b4062c9680a9306d5839cf40fb901f" + integrity sha512-0MDIu4SbagwsYzkprcCzi1Z0V/t2K/5Dd30eSTL2zanXMa+/85MVGSQjXI0vPrXMOXSNqp0R/aMxcqcgJ59yRA== + dependencies: + "@react-aria/utils" "^3.24.0" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/link@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@react-aria/link/-/link-3.7.0.tgz#c86802a8381813fb1627dacb13b200c0a230fbb2" + integrity sha512-gkF7KpDR+ApcMY5HS3xVKHrxRcwSP9TRPoySWEMBE4GPWvEK1Bk/On9EM1vRzeEibCZ5L6gKuLEEKLVSGbBMWg== + dependencies: + "@react-aria/focus" "^3.17.0" + "@react-aria/interactions" "^3.21.2" + "@react-aria/utils" "^3.24.0" + "@react-types/link" "^3.5.4" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/listbox@^3.12.0": + version "3.12.0" + resolved "https://registry.yarnpkg.com/@react-aria/listbox/-/listbox-3.12.0.tgz#57e7575eda8b7d39d02d28f41d7c652b65a8bc59" + integrity sha512-Cy+UcfXU4MrOBMBnaB+kqG8bajeS3T1ZN8L7PXSTpmFS9jShFMhYkNz5gXpI+0SS4dgbHtkq/YDFJvu+bxFvdg== + dependencies: + "@react-aria/interactions" "^3.21.2" + "@react-aria/label" "^3.7.7" + "@react-aria/selection" "^3.18.0" + "@react-aria/utils" "^3.24.0" + "@react-stately/collections" "^3.10.6" + "@react-stately/list" "^3.10.4" + "@react-types/listbox" "^3.4.8" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/live-announcer@^3.3.3": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@react-aria/live-announcer/-/live-announcer-3.3.3.tgz#7ed90f1e0051ad2fc81c23d40e41e2b7ecb61a1d" + integrity sha512-sMaBzzIgDPBDCeZ/UFbuXR/UnXikcE7t4OJ4cESzmUq6r6LvxzmZnG9ocwpH75n7udmUbINycKD082fneryHlg== + dependencies: + "@swc/helpers" "^0.5.0" + +"@react-aria/menu@^3.14.0": + version "3.14.0" + resolved "https://registry.yarnpkg.com/@react-aria/menu/-/menu-3.14.0.tgz#5437011f8e39d8aef0b5efa01be4bf1dfc76560b" + integrity sha512-veZIpwKPKDIX1xpUzvGnxSVTmMfpRjPQUi1v+hMgqgdjBKedKI2LkprLABo9grggjqV9c2xT4XUXDk6xH3r8eA== + dependencies: + "@react-aria/focus" "^3.17.0" + "@react-aria/i18n" "^3.11.0" + "@react-aria/interactions" "^3.21.2" + "@react-aria/overlays" "^3.22.0" + "@react-aria/selection" "^3.18.0" + "@react-aria/utils" "^3.24.0" + "@react-stately/collections" "^3.10.6" + "@react-stately/menu" "^3.7.0" + "@react-stately/tree" "^3.8.0" + "@react-types/button" "^3.9.3" + "@react-types/menu" "^3.9.8" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/meter@^3.4.12": + version "3.4.12" + resolved "https://registry.yarnpkg.com/@react-aria/meter/-/meter-3.4.12.tgz#d283717c2e4b1f355cac70246107ff948edb3a6c" + integrity sha512-Ofgy3SHBjNLrc0mzuEKfn5ozOyrLudzcpw1cP5BFgtYs8BDdUx2/e33+2sm1+Pm3M/AhBrV/9LGyOE2JCtb8pg== + dependencies: + "@react-aria/progress" "^3.4.12" + "@react-types/meter" "^3.4.0" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/numberfield@^3.11.2": + version "3.11.2" + resolved "https://registry.yarnpkg.com/@react-aria/numberfield/-/numberfield-3.11.2.tgz#a44ba43898761e4009d188b73466f9001c1035a6" + integrity sha512-PPCRLhAnCz3/mbv/EXoG3mY8lUvaOnZdGZf0ufb1VS4K/wKtb8z3sCTDiu1hi7nFo1YYqynb8mKue4Es5jUwSw== + dependencies: + "@react-aria/i18n" "^3.11.0" + "@react-aria/interactions" "^3.21.2" + "@react-aria/spinbutton" "^3.6.4" + "@react-aria/textfield" "^3.14.4" + "@react-aria/utils" "^3.24.0" + "@react-stately/form" "^3.0.2" + "@react-stately/numberfield" "^3.9.2" + "@react-types/button" "^3.9.3" + "@react-types/numberfield" "^3.8.2" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/overlays@^3.22.0": + version "3.22.0" + resolved "https://registry.yarnpkg.com/@react-aria/overlays/-/overlays-3.22.0.tgz#002fb2303debe163e2d51b57d601e08866871eae" + integrity sha512-M3Iayc2Hf9vJ4JJ8K/zh+Ct6aymDLmBbo686ChV3AtGOc254RyyzqnVSNuMs3j5QVBsDUKihHZQfl4E9RCwd+w== + dependencies: + "@react-aria/focus" "^3.17.0" + "@react-aria/i18n" "^3.11.0" + "@react-aria/interactions" "^3.21.2" + "@react-aria/ssr" "^3.9.3" + "@react-aria/utils" "^3.24.0" + "@react-aria/visually-hidden" "^3.8.11" + "@react-stately/overlays" "^3.6.6" + "@react-types/button" "^3.9.3" + "@react-types/overlays" "^3.8.6" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/progress@^3.4.12": + version "3.4.12" + resolved "https://registry.yarnpkg.com/@react-aria/progress/-/progress-3.4.12.tgz#7e21129bc2da719f39d5c2d638b670ddfa0d597d" + integrity sha512-Wlz7VNFEzcLSawhZwWTKgJPM/IUKFiKJJG7KGcsT2biIlu6Yp60xj08hDZkCrLq3XsLLCRmweHlVfLFjG3AK9w== + dependencies: + "@react-aria/i18n" "^3.11.0" + "@react-aria/label" "^3.7.7" + "@react-aria/utils" "^3.24.0" + "@react-types/progress" "^3.5.3" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/radio@^3.10.3": + version "3.10.3" + resolved "https://registry.yarnpkg.com/@react-aria/radio/-/radio-3.10.3.tgz#01811f3072f29837855588b2a55f9b61e9abeed3" + integrity sha512-9noof5jyHE8iiFEUE7xCAHvCjG7EkZ/bZHh2+ZtrLlTFZmjpEbRbpZMw6QMKC8uzREPsmERBXjbd/6NyXH6mEQ== + dependencies: + "@react-aria/focus" "^3.17.0" + "@react-aria/form" "^3.0.4" + "@react-aria/i18n" "^3.11.0" + "@react-aria/interactions" "^3.21.2" + "@react-aria/label" "^3.7.7" + "@react-aria/utils" "^3.24.0" + "@react-stately/radio" "^3.10.3" + "@react-types/radio" "^3.8.0" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/searchfield@^3.7.4": + version "3.7.4" + resolved "https://registry.yarnpkg.com/@react-aria/searchfield/-/searchfield-3.7.4.tgz#a5799d2ec79f2bf782b11553838089af8a30fb21" + integrity sha512-92TR4M6/lBKkIp6l3Fl/Sqjjo++bDceIZEOKC62/cuYjLm9RRWl4tLlKIR1GN3IH1vJJStKj+TB/SjlWbPuwiA== + dependencies: + "@react-aria/i18n" "^3.11.0" + "@react-aria/textfield" "^3.14.4" + "@react-aria/utils" "^3.24.0" + "@react-stately/searchfield" "^3.5.2" + "@react-types/button" "^3.9.3" + "@react-types/searchfield" "^3.5.4" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/select@^3.14.4": + version "3.14.4" + resolved "https://registry.yarnpkg.com/@react-aria/select/-/select-3.14.4.tgz#dc2c8c3e68c01e44a9e91897106086b9b73dfac9" + integrity sha512-MeFN8pw9liXwejkJS+hg0fDqGa3oW/mIwZYx8CrZZLbPnEcjZ9NI4ZXSxJaMOHEIQj/RXQ3Fpu0Sunu9FVpYXQ== + dependencies: + "@react-aria/form" "^3.0.4" + "@react-aria/i18n" "^3.11.0" + "@react-aria/interactions" "^3.21.2" + "@react-aria/label" "^3.7.7" + "@react-aria/listbox" "^3.12.0" + "@react-aria/menu" "^3.14.0" + "@react-aria/selection" "^3.18.0" + "@react-aria/utils" "^3.24.0" + "@react-aria/visually-hidden" "^3.8.11" + "@react-stately/select" "^3.6.3" + "@react-types/button" "^3.9.3" + "@react-types/select" "^3.9.3" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/selection@^3.18.0": + version "3.18.0" + resolved "https://registry.yarnpkg.com/@react-aria/selection/-/selection-3.18.0.tgz#9367c7b66a21f6339eebb601d995a8f65daab4ef" + integrity sha512-6ZvRuS9OHe56UVTb/qnsZ1TOxpZH9gRlX6eGG3Pt4LZK12wcvs13Uz2OvB2aYQHu0KPAua9ACnPh94xvXzQIlQ== + dependencies: + "@react-aria/focus" "^3.17.0" + "@react-aria/i18n" "^3.11.0" + "@react-aria/interactions" "^3.21.2" + "@react-aria/utils" "^3.24.0" + "@react-stately/selection" "^3.15.0" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/separator@^3.3.12": + version "3.3.12" + resolved "https://registry.yarnpkg.com/@react-aria/separator/-/separator-3.3.12.tgz#c547b74eac37016eeaa78bb8415b4b837d564b90" + integrity sha512-KXeHynxek/DlAmjmry+M2KVRq+j75LqWFysX4x7t+OSbGR4t3bu5HRDd9bvDe9lsW8OKxlX3+hWTY7vsOL/HDA== + dependencies: + "@react-aria/utils" "^3.24.0" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/slider@^3.7.7": + version "3.7.7" + resolved "https://registry.yarnpkg.com/@react-aria/slider/-/slider-3.7.7.tgz#728f9168fc91e4d27111624794326c4b716e3aff" + integrity sha512-7tOJyR4ZZoSMKcVomC6DZxyYuXQqQopi9mPW2J1fViD1R5iO8YVmoX/ALXnokzi8GPuMA0c38i2Cmnecm30ZXA== + dependencies: + "@react-aria/focus" "^3.17.0" + "@react-aria/i18n" "^3.11.0" + "@react-aria/interactions" "^3.21.2" + "@react-aria/label" "^3.7.7" + "@react-aria/utils" "^3.24.0" + "@react-stately/slider" "^3.5.3" + "@react-types/shared" "^3.23.0" + "@react-types/slider" "^3.7.2" + "@swc/helpers" "^0.5.0" + +"@react-aria/spinbutton@^3.6.4": + version "3.6.4" + resolved "https://registry.yarnpkg.com/@react-aria/spinbutton/-/spinbutton-3.6.4.tgz#0fe81b6d256d01da8541c80bf85807bb26043c24" + integrity sha512-KMnwm3bEM83g8MILGt6irbvAG7DNphkq6O0ePt7L1m6QZhWK3hbI2RNlxYMF1OKIDTAOhnEjR6IdMCWt9TuXvQ== + dependencies: + "@react-aria/i18n" "^3.11.0" + "@react-aria/live-announcer" "^3.3.3" + "@react-aria/utils" "^3.24.0" + "@react-types/button" "^3.9.3" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/ssr@^3.9.3": + version "3.9.3" + resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.9.3.tgz#9e7d4e019965aaf86cec3da2411a392be49ac2b3" + integrity sha512-5bUZ93dmvHFcmfUcEN7qzYe8yQQ8JY+nHN6m9/iSDCQ/QmCiE0kWXYwhurjw5ch6I8WokQzx66xKIMHBAa4NNA== + dependencies: + "@swc/helpers" "^0.5.0" + +"@react-aria/switch@^3.6.3": + version "3.6.3" + resolved "https://registry.yarnpkg.com/@react-aria/switch/-/switch-3.6.3.tgz#3dcefa882a3f9d5585d1c1fd94673dd2178a87f4" + integrity sha512-UBWbTEnnlTDT/dFOEpGKfX5ngPTIOVDLX1ltUhDHHk6SrgSnvYxTPTZAo+ujHIUSBFHOuxmvVYG7y54rk168mg== + dependencies: + "@react-aria/toggle" "^3.10.3" + "@react-stately/toggle" "^3.7.3" + "@react-types/switch" "^3.5.2" + "@swc/helpers" "^0.5.0" + +"@react-aria/table@^3.14.0": + version "3.14.0" + resolved "https://registry.yarnpkg.com/@react-aria/table/-/table-3.14.0.tgz#25eb5ac30056211416ef468cb05dde0e0d706026" + integrity sha512-IwBmzeIxeZjWlOlmMXVj/L64FbYm3qUh7v3VRgU98BVOdvgUyEKBDIwi6SuOV4FwbXKrCPZbXPU/k+KQU4tUoQ== + dependencies: + "@react-aria/focus" "^3.17.0" + "@react-aria/grid" "^3.9.0" + "@react-aria/i18n" "^3.11.0" + "@react-aria/interactions" "^3.21.2" + "@react-aria/live-announcer" "^3.3.3" + "@react-aria/utils" "^3.24.0" + "@react-aria/visually-hidden" "^3.8.11" + "@react-stately/collections" "^3.10.6" + "@react-stately/flags" "^3.0.2" + "@react-stately/table" "^3.11.7" + "@react-stately/virtualizer" "^3.7.0" + "@react-types/checkbox" "^3.8.0" + "@react-types/grid" "^3.2.5" + "@react-types/shared" "^3.23.0" + "@react-types/table" "^3.9.4" + "@swc/helpers" "^0.5.0" + +"@react-aria/tabs@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@react-aria/tabs/-/tabs-3.9.0.tgz#b72cb13726be6ed09024b3f1a4c4a6a9868e6ac6" + integrity sha512-E4IHOO9ejEXNeSnpeThu79pDpNySHHYz3txr9ngtH6tp097k/I1auSqbGJPy/kwLj6MCPEt86dNJDXE2X0AcFw== + dependencies: + "@react-aria/focus" "^3.17.0" + "@react-aria/i18n" "^3.11.0" + "@react-aria/selection" "^3.18.0" + "@react-aria/utils" "^3.24.0" + "@react-stately/tabs" "^3.6.5" + "@react-types/shared" "^3.23.0" + "@react-types/tabs" "^3.3.6" + "@swc/helpers" "^0.5.0" + +"@react-aria/tag@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@react-aria/tag/-/tag-3.4.0.tgz#eb5ecbc7e63363c007b422791784705aa0aa4f54" + integrity sha512-kTrj0zEIyABgdASZMM7qxe0LAEePAxlg4OmfjZfkiAYYV32liY4EPER7ocE0OhOXo6TeOYYIvpEcr0z/4PjCpw== + dependencies: + "@react-aria/gridlist" "^3.8.0" + "@react-aria/i18n" "^3.11.0" + "@react-aria/interactions" "^3.21.2" + "@react-aria/label" "^3.7.7" + "@react-aria/selection" "^3.18.0" + "@react-aria/utils" "^3.24.0" + "@react-stately/list" "^3.10.4" + "@react-types/button" "^3.9.3" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/textfield@^3.14.4": + version "3.14.4" + resolved "https://registry.yarnpkg.com/@react-aria/textfield/-/textfield-3.14.4.tgz#5972126a2c8905bac0fdb8e81951d98ff772d436" + integrity sha512-fdZChDyTRA4BPqbyDeD9gSw6rVeIAl7eG38osRwr0mzcKTiS/AyV3jiRwnHsBO9brU8RdViJFri4emVDuxSjag== + dependencies: + "@react-aria/focus" "^3.17.0" + "@react-aria/form" "^3.0.4" + "@react-aria/label" "^3.7.7" + "@react-aria/utils" "^3.24.0" + "@react-stately/form" "^3.0.2" + "@react-stately/utils" "^3.10.0" + "@react-types/shared" "^3.23.0" + "@react-types/textfield" "^3.9.2" + "@swc/helpers" "^0.5.0" + +"@react-aria/toggle@^3.10.3": + version "3.10.3" + resolved "https://registry.yarnpkg.com/@react-aria/toggle/-/toggle-3.10.3.tgz#111bb8fb44646700dc29d5d709917c0ac2bdfac8" + integrity sha512-QtufHlWczMcTGmRxF7RCEgfMKpUPivyXJWZsQ1HSlknjRJPzf4uc3mSR62hq2sZ0VN9zXEpUsoixbEDB87TnGg== + dependencies: + "@react-aria/focus" "^3.17.0" + "@react-aria/interactions" "^3.21.2" + "@react-aria/utils" "^3.24.0" + "@react-stately/toggle" "^3.7.3" + "@react-types/checkbox" "^3.8.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/tooltip@^3.7.3": + version "3.7.3" + resolved "https://registry.yarnpkg.com/@react-aria/tooltip/-/tooltip-3.7.3.tgz#7b2a647edadd456b2a848203801f5ab04dd643b4" + integrity sha512-uF2J/GRKTHSeEYMwvXTu7oK710nov/NRbY7db2Hh7yXluGmjJORXb5wxsy+lqHaWqPKBbkhmxBJYeJJpAqlZ5g== + dependencies: + "@react-aria/focus" "^3.17.0" + "@react-aria/interactions" "^3.21.2" + "@react-aria/utils" "^3.24.0" + "@react-stately/tooltip" "^3.4.8" + "@react-types/shared" "^3.23.0" + "@react-types/tooltip" "^3.4.8" + "@swc/helpers" "^0.5.0" + +"@react-aria/utils@^3.23.2", "@react-aria/utils@^3.24.0": + version "3.24.0" + resolved "https://registry.yarnpkg.com/@react-aria/utils/-/utils-3.24.0.tgz#f56ab45fc2dc50938d5857b1f176e81524d651ad" + integrity sha512-JAxkPhK5fCvFVNY2YG3TW3m1nTzwRcbz7iyTSkUzLFat4N4LZ7Kzh7NMHsgeE/oMOxd8zLY+XsUxMu/E/2GujA== + dependencies: + "@react-aria/ssr" "^3.9.3" + "@react-stately/utils" "^3.10.0" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + clsx "^2.0.0" + +"@react-aria/visually-hidden@^3.8.11": + version "3.8.11" + resolved "https://registry.yarnpkg.com/@react-aria/visually-hidden/-/visually-hidden-3.8.11.tgz#a29eda3114629456a700b1d8396e539bb8a37436" + integrity sha512-1JFruyAatoKnC18qrix8Q1gyUNlizWZvYdPADgB5btakMy0PEGTWPmFRK5gFsO+N0CZLCFTCip0dkUv6rrp31w== + dependencies: + "@react-aria/interactions" "^3.21.2" + "@react-aria/utils" "^3.24.0" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/calendar@^3.4.4", "@react-stately/calendar@^3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@react-stately/calendar/-/calendar-3.5.0.tgz#356ea7633e2ae362d3d25871c441a2fbadddac84" + integrity sha512-tINxgGAeZ9KsYNomuR50PljG2mN9C9FWQ8zyvATfFq44EFcjjdXCMNWV+qgIRKGKLwrSJhu3boPaiHVIpUxrXA== + dependencies: + "@internationalized/date" "^3.5.3" + "@react-stately/utils" "^3.10.0" + "@react-types/calendar" "^3.4.5" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/checkbox@^3.6.4": + version "3.6.4" + resolved "https://registry.yarnpkg.com/@react-stately/checkbox/-/checkbox-3.6.4.tgz#1304b1ac378a21f255a50e9eefd30a3eb1f2e874" + integrity sha512-gecaRtWeQNoJuSl3AtfV6z6LjaUV578Kzbag8d3pTPbGXl8komTtTj/26nIEPsmf/L8jZ3kCscDGxGTKr+7sqg== + dependencies: + "@react-stately/form" "^3.0.2" + "@react-stately/utils" "^3.10.0" + "@react-types/checkbox" "^3.8.0" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/collections@^3.10.6": + version "3.10.6" + resolved "https://registry.yarnpkg.com/@react-stately/collections/-/collections-3.10.6.tgz#487a4c4e201e8f0de53725ce650d1e57b820917a" + integrity sha512-hb/yzxQnZaSRu43iR6ftkCJIqD4Qu5WUjl4ASBn2EGb9TmipA7bFnYVqSH4xFPCCTZ68Qxh95dOcxYBHlHeWZQ== + dependencies: + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/combobox@^3.8.3": + version "3.8.3" + resolved "https://registry.yarnpkg.com/@react-stately/combobox/-/combobox-3.8.3.tgz#28cc70009287b673af24ec9ae034428fe610a733" + integrity sha512-lmwt2M39jHQUA9CWKhTc9MVoUBKuJM1Y+9GYPElON8P/guQL6G3bM1u8I4Hxf0zzGzAIW3ymV57bF9mcaA/nzA== + dependencies: + "@react-stately/collections" "^3.10.6" + "@react-stately/form" "^3.0.2" + "@react-stately/list" "^3.10.4" + "@react-stately/overlays" "^3.6.6" + "@react-stately/select" "^3.6.3" + "@react-stately/utils" "^3.10.0" + "@react-types/combobox" "^3.11.0" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/datepicker@^3.9.2", "@react-stately/datepicker@^3.9.3": + version "3.9.3" + resolved "https://registry.yarnpkg.com/@react-stately/datepicker/-/datepicker-3.9.3.tgz#b74d2bcec71dcd944eaba1815dec02f884a2014b" + integrity sha512-NjZ8uqxmKf7mGLNWSZsvm22xX46k+yo0QkPspONuorHFTf8qqCnp4i+bBpEpaVCwX5KVSRdjxJOk7XhvJF8q4w== + dependencies: + "@internationalized/date" "^3.5.3" + "@internationalized/string" "^3.2.2" + "@react-stately/form" "^3.0.2" + "@react-stately/overlays" "^3.6.6" + "@react-stately/utils" "^3.10.0" + "@react-types/datepicker" "^3.7.3" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/dnd@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@react-stately/dnd/-/dnd-3.3.0.tgz#b34319346c5f931dcbb1174553f2bbaf57e1a186" + integrity sha512-bHH3B4wFqfATpyxpP5Wdv/5uQdci4WvStJgeExj7Yy2UwYSsZEnS6Ky0MhLLFdIyUpragjiSCzYcYwwli6oHUQ== + dependencies: + "@react-stately/selection" "^3.15.0" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/flags@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@react-stately/flags/-/flags-3.0.2.tgz#b452765823ce2c2f7d7b344bb6d57b10284fd00e" + integrity sha512-/KyVJMND2WdkgoHpt+m+ash7h5q9pq91DLgyizQWcbf2xphicH9D1HKAB8co3Cfvq6T/QqjQEP8aBkheiPyfEg== + dependencies: + "@swc/helpers" "^0.4.14" + +"@react-stately/form@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@react-stately/form/-/form-3.0.2.tgz#11b4a7475e51f9e516ede205f8f44be7afd59c7f" + integrity sha512-MA4P9lHv770I3DJpJTQlkh5POVuklmeQuixwlbyKzlWT+KqFSOXvqaliszqU7gyDdVGAFksMa6E3mXbGbk1wuA== + dependencies: + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/grid@^3.8.6": + version "3.8.6" + resolved "https://registry.yarnpkg.com/@react-stately/grid/-/grid-3.8.6.tgz#c77fdf2f975fd1d232fdbbda9621f2b090f38e79" + integrity sha512-XkxDfaIAWzbsb5pnL2IE4FqQbqegVzPnU+R2ZvDrJT7514I2usSMoJ2ZUUoy8DIYQomJHB5QKZeyQkGIelHMcg== + dependencies: + "@react-stately/collections" "^3.10.6" + "@react-stately/selection" "^3.15.0" + "@react-types/grid" "^3.2.5" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/list@^3.10.4": + version "3.10.4" + resolved "https://registry.yarnpkg.com/@react-stately/list/-/list-3.10.4.tgz#edb7557e3229220847b7efa8b9be6c02658e574c" + integrity sha512-sj501OKcQr+1Zdo0m6NuvpZDHLE0tUdReSKcWqt35odzC6ic/qr7C7ozZ/5ay+nuHTryUUTC/mDQ0zlBmQX0dA== + dependencies: + "@react-stately/collections" "^3.10.6" + "@react-stately/selection" "^3.15.0" + "@react-stately/utils" "^3.10.0" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/menu@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@react-stately/menu/-/menu-3.7.0.tgz#e438c4076f3d7d8f5dc7e91552a1288874d4da7d" + integrity sha512-8UJhvKEF+zaHXrwv0YhFr73OSEprzIs6xRNoV6F/omd4twy1ngPZrL1X8HNzaXsf5BrHuib2tbh81e/Z95D3nA== + dependencies: + "@react-stately/overlays" "^3.6.6" + "@react-types/menu" "^3.9.8" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/numberfield@^3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@react-stately/numberfield/-/numberfield-3.9.2.tgz#f9e9246d6f20fb897387d262a41b35e51c193091" + integrity sha512-Sp+0MnqaqZ/Tu8qalZXbMIXyvZ7aXIny2PxNIxmnqxVHfxIzQCLJW5Y4bJr1yJIHH3QDZic5OyqS72MBWBXnIA== + dependencies: + "@internationalized/number" "^3.5.2" + "@react-stately/form" "^3.0.2" + "@react-stately/utils" "^3.10.0" + "@react-types/numberfield" "^3.8.2" + "@swc/helpers" "^0.5.0" + +"@react-stately/overlays@^3.6.6": + version "3.6.6" + resolved "https://registry.yarnpkg.com/@react-stately/overlays/-/overlays-3.6.6.tgz#5aedca4c363187ab6197b1c20bb5ad42f08fee29" + integrity sha512-NvzQXh4zYGZuUmZH5d3NmEDNr8r1hfub2s5w7WOeIG35xqIzoKGdFZ7LLWrie+4nxPmM+ckdfqOQ9pBZFNJypQ== + dependencies: + "@react-stately/utils" "^3.10.0" + "@react-types/overlays" "^3.8.6" + "@swc/helpers" "^0.5.0" + +"@react-stately/radio@^3.10.3": + version "3.10.3" + resolved "https://registry.yarnpkg.com/@react-stately/radio/-/radio-3.10.3.tgz#1ad28e9f33b3f9f869c28dc3a1bf690a309df815" + integrity sha512-EWLLRgLQ9orI7G9uPuJv1bdZPu3OoRWy1TGSn+6G8b8rleNx3haI4eZUR+JGB0YNgemotMz/gbNTNG/wEIsRgw== + dependencies: + "@react-stately/form" "^3.0.2" + "@react-stately/utils" "^3.10.0" + "@react-types/radio" "^3.8.0" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/searchfield@^3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@react-stately/searchfield/-/searchfield-3.5.2.tgz#b64a30b660255384af939abf41ad3fd0d93dd1af" + integrity sha512-M73mhUCbY5aJAtVH8BF9TeBwOtEMC7G1N/W6j71V8f3MlN0ppN0n4pZWW3CMd2x0BKuYum8KPvcL1DgiXzoo5A== + dependencies: + "@react-stately/utils" "^3.10.0" + "@react-types/searchfield" "^3.5.4" + "@swc/helpers" "^0.5.0" + +"@react-stately/select@^3.6.3": + version "3.6.3" + resolved "https://registry.yarnpkg.com/@react-stately/select/-/select-3.6.3.tgz#009c1b27fe827a1b2f5fcd1d546d369560b177d7" + integrity sha512-d/ha6j0oiEaw/F5hgPgCZg1e8LObNmvsocEebxXPToVdwHd9H55r2Fogi5nLoiX8geHKiYm0KPfSxs/oXbW/5Q== + dependencies: + "@react-stately/form" "^3.0.2" + "@react-stately/list" "^3.10.4" + "@react-stately/overlays" "^3.6.6" + "@react-types/select" "^3.9.3" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/selection@^3.15.0": + version "3.15.0" + resolved "https://registry.yarnpkg.com/@react-stately/selection/-/selection-3.15.0.tgz#224a7a279236aacbd30063bc9f11dbe196728e8e" + integrity sha512-OtypXNtvRWLmpkaktluzCYEXKXAON16WIJv2mZ4cae3H0UVfWaFL9sD+ST9nj7UqYNTDXECug5ziIY+YKd7zvA== + dependencies: + "@react-stately/collections" "^3.10.6" + "@react-stately/utils" "^3.10.0" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/slider@^3.5.3": + version "3.5.3" + resolved "https://registry.yarnpkg.com/@react-stately/slider/-/slider-3.5.3.tgz#77f92da5514d017342b582f803b7f1973f2e35a2" + integrity sha512-jA0XR7GjtwoucLw8kx/KB50pSGNUbR7xNfM9t5H8D7k3wd+j4yqfarWyNFyPX/X5MJez+/bd+BIDJUl3XGOWkA== + dependencies: + "@react-stately/utils" "^3.10.0" + "@react-types/shared" "^3.23.0" + "@react-types/slider" "^3.7.2" + "@swc/helpers" "^0.5.0" + +"@react-stately/table@^3.11.7": + version "3.11.7" + resolved "https://registry.yarnpkg.com/@react-stately/table/-/table-3.11.7.tgz#b6248e7fb512b4814ddd018622e96d406a1c9a8b" + integrity sha512-VvazamtoXLENeWJAYF1fJzfIAXO2qbiXCfosRLgkEMtoU2kGqV8DHYQhIXuqwMRn8nO8GVw9hgAiQQcKghgCXA== + dependencies: + "@react-stately/collections" "^3.10.6" + "@react-stately/flags" "^3.0.2" + "@react-stately/grid" "^3.8.6" + "@react-stately/selection" "^3.15.0" + "@react-stately/utils" "^3.10.0" + "@react-types/grid" "^3.2.5" + "@react-types/shared" "^3.23.0" + "@react-types/table" "^3.9.4" + "@swc/helpers" "^0.5.0" + +"@react-stately/tabs@^3.6.5": + version "3.6.5" + resolved "https://registry.yarnpkg.com/@react-stately/tabs/-/tabs-3.6.5.tgz#9c13689aa72d8e19ea09dd3b28be593058b81231" + integrity sha512-z1saZgGRqb0AsoRi19iE4JOJaIRV73GjRnzUX9QSl3gpK75XsH31vbmtUYiXOXAd6Dt+1KFLgbyeCzMUlZEnMw== + dependencies: + "@react-stately/list" "^3.10.4" + "@react-types/shared" "^3.23.0" + "@react-types/tabs" "^3.3.6" + "@swc/helpers" "^0.5.0" + +"@react-stately/toggle@^3.7.3": + version "3.7.3" + resolved "https://registry.yarnpkg.com/@react-stately/toggle/-/toggle-3.7.3.tgz#5f22db28773ffa521b9293093205f62938d976eb" + integrity sha512-4jW6wxTu7Gkq6/2mZWqtJoQ6ff27Cl6lnVMEXXM+M8HwK/3zHoMZhVz8EApwgOsRByxDQ76PNSGm3xKZAcqZNw== + dependencies: + "@react-stately/utils" "^3.10.0" + "@react-types/checkbox" "^3.8.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/tooltip@^3.4.8": + version "3.4.8" + resolved "https://registry.yarnpkg.com/@react-stately/tooltip/-/tooltip-3.4.8.tgz#1af311d8389d13252eca17468327c24b2ed27ce5" + integrity sha512-0D3cCeQhX5DjDpeuzFJwfX8SxIOxdL2iWPPjpC3hIxkUKuItavSq2A7G2tO39vpiip3RBOaaQMUpnSmjRK5DAQ== + dependencies: + "@react-stately/overlays" "^3.6.6" + "@react-types/tooltip" "^3.4.8" + "@swc/helpers" "^0.5.0" + +"@react-stately/tree@^3.8.0": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@react-stately/tree/-/tree-3.8.0.tgz#4e5fead882b27ca8e2fe582c3c3caa62a3078d8d" + integrity sha512-7bfbCLjG8BTiWuo9GBE1A375PPI4S9r/rMtKQGLQvYAObgJb7C8P3svA9WKfryvl7M5iqaYrOVA0uzNSmeCNQQ== + dependencies: + "@react-stately/collections" "^3.10.6" + "@react-stately/selection" "^3.15.0" + "@react-stately/utils" "^3.10.0" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/utils@^3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@react-stately/utils/-/utils-3.10.0.tgz#2479c891b9d726cc43e6abcc0cc74498eda8e0fa" + integrity sha512-nji2i9fTYg65ZWx/3r11zR1F2tGya+mBubRCbMTwHyRnsSLFZaeq/W6lmrOyIy1uMJKBNKLJpqfmpT4x7rw6pg== + dependencies: + "@swc/helpers" "^0.5.0" + +"@react-stately/virtualizer@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@react-stately/virtualizer/-/virtualizer-3.7.0.tgz#f45437454d86b96d76c8bbcb323bce618545dc87" + integrity sha512-Wkh502y6mzUvjJJr30p5FLRwBaphnfmnoSnGwidamwo3HuyrDICBSlwFGPl0AmUHo1afSaLXl6j8smU48VcClA== + dependencies: + "@react-aria/utils" "^3.24.0" + "@react-types/shared" "^3.23.0" + "@swc/helpers" "^0.5.0" + +"@react-types/breadcrumbs@^3.7.4": + version "3.7.4" + resolved "https://registry.yarnpkg.com/@react-types/breadcrumbs/-/breadcrumbs-3.7.4.tgz#f19428aeb6e0be80d94f560e9a0ea87d158128b2" + integrity sha512-gQPLi71i+4zE6m5S74v7bpZ/yBERtlUt5qBcvB4C7gJu8aR4cFrv1YFZ//9f8uwlAHjau7XBpVlbBDlhfb2aOQ== + dependencies: + "@react-types/link" "^3.5.4" + "@react-types/shared" "^3.23.0" + +"@react-types/button@^3.9.3": + version "3.9.3" + resolved "https://registry.yarnpkg.com/@react-types/button/-/button-3.9.3.tgz#9698ea30411fcfc02890a067b258d2cec3891fcd" + integrity sha512-YHlSeH85FhasJXOmkY4x+6If74ZpUh88C2fMlw0HUA/Bq/KGckUoriV8cnMqSnB1OwPqi8dpBZGfFVj6f6lh9A== + dependencies: + "@react-types/shared" "^3.23.0" + +"@react-types/calendar@^3.4.5": + version "3.4.5" + resolved "https://registry.yarnpkg.com/@react-types/calendar/-/calendar-3.4.5.tgz#11e87ffacb2d3eadbc3bfb55326faf98f101cf0a" + integrity sha512-FAAUbqe8iPiNf/OtdxnpOuAEJzyeRgfK2QCzfb4BIVnNNaTDkbxGCI5wrqHfBQ4FASECJeNlkjYXtbvijaooyw== + dependencies: + "@internationalized/date" "^3.5.3" + "@react-types/shared" "^3.23.0" + +"@react-types/checkbox@^3.8.0": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@react-types/checkbox/-/checkbox-3.8.0.tgz#78568087e32a0e3542d57b363a872efa2b10ee84" + integrity sha512-IBJ2bAsb3xoXaL+f0pwfRLDvRkhxfcX/q4NRJ2oT9jeHLU+j6svgK1Dqk8IGmY+vw1ltKbbMlIVeVonKQ3fgHw== + dependencies: + "@react-types/shared" "^3.23.0" + +"@react-types/combobox@^3.11.0": + version "3.11.0" + resolved "https://registry.yarnpkg.com/@react-types/combobox/-/combobox-3.11.0.tgz#7c7ebba60e096a73597363cbfd2b5bd7d1c65138" + integrity sha512-L6EEcIUIk7lsVvhO1Z1bklgH5bM84fBht03TC+es9YvS2T1Z9hdtyjBFcH6b3lVW9RwAArdUTL82/RNtvgD0Eg== + dependencies: + "@react-types/shared" "^3.23.0" + +"@react-types/datepicker@^3.7.3": + version "3.7.3" + resolved "https://registry.yarnpkg.com/@react-types/datepicker/-/datepicker-3.7.3.tgz#d916256706550afe0bc247a7f170893c83593ba1" + integrity sha512-SpA91itY03QaBvTAGP4X62SEAOoKJr91Av/U5DgH8gP7Ev4Ui+I3Aqh+w8Qw6nxKX4aAvDUx6wEHwLQLbvJUPA== + dependencies: + "@internationalized/date" "^3.5.3" + "@react-types/calendar" "^3.4.5" + "@react-types/overlays" "^3.8.6" + "@react-types/shared" "^3.23.0" + +"@react-types/dialog@^3.5.9": + version "3.5.9" + resolved "https://registry.yarnpkg.com/@react-types/dialog/-/dialog-3.5.9.tgz#a8a7dda73bf75d2d1b5fb212daec715dbffb1085" + integrity sha512-8r9P1b1gq/cUv2bTPPNL3IFVEj9R5sIPACoSXznXkpXxh5FLU6yUPHDeQjvmM50q7KlEOgrPYhGl5pW525kLww== + dependencies: + "@react-types/overlays" "^3.8.6" + "@react-types/shared" "^3.23.0" + +"@react-types/grid@^3.2.5": + version "3.2.5" + resolved "https://registry.yarnpkg.com/@react-types/grid/-/grid-3.2.5.tgz#93e4dbc7070bfe52d1a4a46a656e3aeafb9a8602" + integrity sha512-kvE3Y+i0/RGLrf8qn/uVK1nVxXygNf5Jm6h9S6UdZkEVsclcqHKIX8UzqQgEUTd99jMHZk7fbKPm/La8uJ9yFQ== + dependencies: + "@react-types/shared" "^3.23.0" + +"@react-types/link@^3.5.4": + version "3.5.4" + resolved "https://registry.yarnpkg.com/@react-types/link/-/link-3.5.4.tgz#26c97945ab4e337e05d8bf0993bb3d8497cd81a3" + integrity sha512-5hVAlKE4wiEVHmkqQG9/G4sdar257CISmLzWh9xf8heq14a93MBIHm7S9mhHULk2a84EC9bNoTi8Hh6P6nnMEw== + dependencies: + "@react-types/shared" "^3.23.0" + +"@react-types/listbox@^3.4.8": + version "3.4.8" + resolved "https://registry.yarnpkg.com/@react-types/listbox/-/listbox-3.4.8.tgz#448d0e1024e9eebc33e52b99e0f182ccbf92018a" + integrity sha512-HNLBvyhR02p8GaZsW8hAu4YwkDjaG/rcuCT/l4Sdxzsm7szPlFMEVBZ9Ji3Ffzj+9P20OgFJ+VylWs7EkUwJAA== + dependencies: + "@react-types/shared" "^3.23.0" + +"@react-types/menu@^3.9.8": + version "3.9.8" + resolved "https://registry.yarnpkg.com/@react-types/menu/-/menu-3.9.8.tgz#fe86b986fa6c0684b8ec8341bd5fb09368921469" + integrity sha512-nkRCsfD3NXsJOv6mAnXCFyH2eGOFsmOOJOBQeOl9dj7BcdX9dcqp2PzUWPl33GrY9rYcXiRx4wsbUoqO1KVU4g== + dependencies: + "@react-types/overlays" "^3.8.6" + "@react-types/shared" "^3.23.0" + +"@react-types/meter@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@react-types/meter/-/meter-3.4.0.tgz#986b577117f9a395435d6ecc78780209c863a1b7" + integrity sha512-1czayiwMcg3QxRxQQSm9hvPbzPk1lyNmP68mDsWdVuY7fUTsUvItF05IkeJCkEB8tIqfBKnJHYAJN1XLY+5bfg== + dependencies: + "@react-types/progress" "^3.5.3" + +"@react-types/numberfield@^3.8.2": + version "3.8.2" + resolved "https://registry.yarnpkg.com/@react-types/numberfield/-/numberfield-3.8.2.tgz#8eb608669ece9be226eddb3b1eef0e2aca5ff559" + integrity sha512-2i7Je7fEYA4ousL9WhKZg+6Hejwgiq1AmoJpan6JfeIMQkvQ92q+klq02cih/lLXY/jvjd/KI3fa1fl3dfnaFw== + dependencies: + "@react-types/shared" "^3.23.0" + +"@react-types/overlays@^3.8.6": + version "3.8.6" + resolved "https://registry.yarnpkg.com/@react-types/overlays/-/overlays-3.8.6.tgz#ea40ede52f4cf8cb78d3db9d69e6cb54b8a5c084" + integrity sha512-7xBuroYqwADppt7IRGfM8lbxVwlZrhMtTzeIdUot595cqFdRlpd/XAo2sRnEeIjYW9OSI8I5v4kt3AG7bdCQlg== + dependencies: + "@react-types/shared" "^3.23.0" + +"@react-types/progress@^3.5.3": + version "3.5.3" + resolved "https://registry.yarnpkg.com/@react-types/progress/-/progress-3.5.3.tgz#91374cab8cc1e5ea28617644a47ec819f149214b" + integrity sha512-IcICNYRPFHQxl6iXi5jDgSZ3I9k2UQ2rIFcnoGo43K0hekv6fRdbbXWJU9ndShs3OfCHTPHEV5ooYB3UujNOAQ== + dependencies: + "@react-types/shared" "^3.23.0" + +"@react-types/radio@^3.8.0": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@react-types/radio/-/radio-3.8.0.tgz#c843a973ce6d5cc63d6f51b7bbb6a170b5e61df6" + integrity sha512-0gvG74lgiaRo0DO46hoB5NxGFXhq5DsHaPZcCcb9VZ8cCzZMrO7U/B3JhF82TI2DndSx/AoiAMOQsc0v4ZwiGg== + dependencies: + "@react-types/shared" "^3.23.0" + +"@react-types/searchfield@^3.5.4": + version "3.5.4" + resolved "https://registry.yarnpkg.com/@react-types/searchfield/-/searchfield-3.5.4.tgz#16b035ee2b7313b6cf306e85de660f9c36094b95" + integrity sha512-D7tUwlbUxyTzxhMYWNMdY9lp/a/kdr9mIGB7K3j/QSQhTI2T9H3VPxEKXmYt33cE3T7Q1DDsII1SrChI/KEdxA== + dependencies: + "@react-types/shared" "^3.23.0" + "@react-types/textfield" "^3.9.2" + +"@react-types/select@^3.9.3": + version "3.9.3" + resolved "https://registry.yarnpkg.com/@react-types/select/-/select-3.9.3.tgz#b92ef523ed74e9896a87b11c02767c2ab64c1d02" + integrity sha512-hK5RvA6frMbLdynRkegNW1lMOD0l9aFsW9X8WuTAg0zV6iZouU0hhSCT6JRDefJrv+m0X3fRdohMuVNZOhlA1g== + dependencies: + "@react-types/shared" "^3.23.0" + +"@react-types/shared@^3.22.1", "@react-types/shared@^3.23.0": + version "3.23.0" + resolved "https://registry.yarnpkg.com/@react-types/shared/-/shared-3.23.0.tgz#59c9d2683d131b81a8f775b56408782fc70bc79b" + integrity sha512-GQm/iPiii3ikcaMNR4WdVkJ4w0mKtV3mLqeSfSqzdqbPr6vONkqXbh3RhPlPmAJs1b4QHnexd/wZQP3U9DHOwQ== + +"@react-types/slider@^3.7.2": + version "3.7.2" + resolved "https://registry.yarnpkg.com/@react-types/slider/-/slider-3.7.2.tgz#4ba02cf626ecbaa077502ce42c9fd675590a877f" + integrity sha512-HvC/Mdt/z741xcU0ymeNxslnowQ5EAHOSzyf2JMgXmle+pEIbbepz5QUVaOmEveQHS3bjxE/+n2yBTKbxP8CJg== + dependencies: + "@react-types/shared" "^3.23.0" + +"@react-types/switch@^3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@react-types/switch/-/switch-3.5.2.tgz#49645a32366c44a02b16b196d31888ce84f7020d" + integrity sha512-4i35eZ5GtVDgu9KFhlyLyXanspcQp5WEnPyaBKn3pDRDcpzAL7yNP/Rwqc/JDdcJWngV080o7loJCgEfJ6UFaQ== + dependencies: + "@react-types/shared" "^3.23.0" + +"@react-types/table@^3.9.4": + version "3.9.4" + resolved "https://registry.yarnpkg.com/@react-types/table/-/table-3.9.4.tgz#a2a35d313a629a5af1a2c294c5414565d202d875" + integrity sha512-31EI0KAHwX7TbgERLBLVuD3nvpZUo0Wie7S7FEARmirIRfzm1fIkdDk5hfIHry2Lp4mq2/aqXLCY+oDR+lC2pw== + dependencies: + "@react-types/grid" "^3.2.5" + "@react-types/shared" "^3.23.0" + +"@react-types/tabs@^3.3.6": + version "3.3.6" + resolved "https://registry.yarnpkg.com/@react-types/tabs/-/tabs-3.3.6.tgz#023e7fa885b5184dd14c1b6301cb5292ab7db8bd" + integrity sha512-ubvB7pB4+e5OpIuYR1CYip53iW9rJRIWvioHTYfcX0DnMabEcVP6Ymdqr5bDh/VsBEhiddsNgMduQwJm6bUTew== + dependencies: + "@react-types/shared" "^3.23.0" + +"@react-types/textfield@^3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@react-types/textfield/-/textfield-3.9.2.tgz#447183f68a07d88b799dd6b0620af13114d59947" + integrity sha512-8UcabahYhKm3KTu9CQBhz745FioUWO6CWgYusBpxMDJ+HnlhCC2JWyQvqg5tT98sr5AeSek4Jt/XS3ovzrhCDg== + dependencies: + "@react-types/shared" "^3.23.0" + +"@react-types/tooltip@^3.4.8": + version "3.4.8" + resolved "https://registry.yarnpkg.com/@react-types/tooltip/-/tooltip-3.4.8.tgz#4dbbe24f0a394e3b04efb77e4ab0f50fa1cbfcdc" + integrity sha512-6XVQ3cMaXVMif+F5PQCaVwxbgAL8HVRqVjt6DkHs8Xbae43hpEIwPrBYlWWMVpuZAcjXZLTGmmyPjYeORZZJ4A== + dependencies: + "@react-types/overlays" "^3.8.6" + "@react-types/shared" "^3.23.0" + "@remix-run/router@1.9.0": version "1.9.0" resolved "https://registry.npmjs.org/@remix-run/router/-/router-1.9.0.tgz" @@ -1987,6 +3064,21 @@ "@svgr/plugin-svgo" "^5.5.0" loader-utils "^2.0.0" +"@swc/helpers@^0.4.14": + version "0.4.36" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.36.tgz#fcfff76ed52c214f357e8e9d3f37b568908072d9" + integrity sha512-5lxnyLEYFskErRPenYItLRSge5DjrJngYKdVjRSrWfza9G6KkgHEXi0vUZiyUeMU5JfXH1YnvXZzSp8ul88o2Q== + dependencies: + legacy-swc-helpers "npm:@swc/helpers@=0.4.14" + tslib "^2.4.0" + +"@swc/helpers@^0.5.0": + version "0.5.11" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.11.tgz#5bab8c660a6e23c13b2d23fcd1ee44a2db1b0cb7" + integrity sha512-YNlnKRWF2sVojTpIyzwou9XoTNbzbzONwRhOoniEioF1AtaitTvVZblaQRrAzChWQ1bLYyYSWzM18y4WwgzJ+A== + dependencies: + tslib "^2.4.0" + "@tanstack/eslint-plugin-query@^4.32.5": version "4.34.1" resolved "https://registry.npmjs.org/@tanstack/eslint-plugin-query/-/eslint-plugin-query-4.34.1.tgz" @@ -2035,7 +3127,14 @@ dependencies: "@tanstack/table-core" "8.9.10" -"@tanstack/react-virtual@3.0.4", "@tanstack/react-virtual@^3.0.4": +"@tanstack/react-virtual@3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@tanstack/react-virtual/-/react-virtual-3.2.0.tgz#fb70f9c6baee753a5a0f7618ac886205d5a02af9" + integrity sha512-OEdMByf2hEfDa6XDbGlZN8qO6bTjlNKqjM3im9JG+u3mCL8jALy0T/67oDI001raUUPh1Bdmfn4ZvPOV5knpcg== + dependencies: + "@tanstack/virtual-core" "3.2.0" + +"@tanstack/react-virtual@^3.0.4": version "3.0.4" resolved "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.0.4.tgz" integrity sha512-tiqKW/e2MJVCr7/pRUXulpkyxllaOclkHNfhKTo4pmHjJIqnhMfwIjc1Q1R0Un3PI3kQywywu/791c8z9u0qeA== @@ -2057,6 +3156,11 @@ resolved "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.0.0.tgz" integrity sha512-SYXOBTjJb05rXa2vl55TTwO40A6wKu0R5i1qQwhJYNDIqaIGF7D0HsLw+pJAyi2OvntlEIVusx3xtbbgSUi6zg== +"@tanstack/virtual-core@3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@tanstack/virtual-core/-/virtual-core-3.2.0.tgz#874d36135e4badce2719e7bdc556ce240cbaff14" + integrity sha512-P5XgYoAw/vfW65byBbJQCw+cagdXDT/qH6wmABiLt4v4YBT2q2vqCOhihe+D1Nt325F/S/0Tkv6C5z0Lv+VBQQ== + "@testing-library/dom@^8.5.0": version "8.20.1" resolved "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.1.tgz" @@ -3542,6 +4646,11 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" +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@^4.6.0: version "4.6.0" resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz" @@ -4276,10 +5385,10 @@ dotenv@^10.0.0: resolved "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz" integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== -downshift@^8.2.3: - version "8.2.3" - resolved "https://registry.npmjs.org/downshift/-/downshift-8.2.3.tgz" - integrity sha512-1HkvqaMTZpk24aqnXaRDnT+N5JCbpFpW+dCogB11+x+FCtfkFX0MbAO4vr/JdXi1VYQF174KjNUveBXqaXTPtg== +downshift@9.0.4: + version "9.0.4" + resolved "https://registry.yarnpkg.com/downshift/-/downshift-9.0.4.tgz#f78559ac4dda8c7a4459951d89b72175d1f6a756" + integrity sha512-6XV/p6+4177d8e8dJ6PoLNSDG1bv52FL18yilKD06oZCb6dFG6f6dXcn3h0B1ggcrOkN3hIvL11Qt15Y5McbXw== dependencies: "@babel/runtime" "^7.22.15" compute-scroll-into-view "^3.0.3" @@ -5687,6 +6796,16 @@ internal-slot@^1.0.4, internal-slot@^1.0.5: has "^1.0.3" side-channel "^1.0.4" +intl-messageformat@^10.1.0: + version "10.5.11" + resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.5.11.tgz#95d6a3b0b303f924d5d8c3f8d3ad057d1dc73c64" + integrity sha512-eYq5fkFBVxc7GIFDzpFQkDOZgNayNTQn4Oufe8jw6YY6OHVw70/4pA3FyCsQ0Gb2DnvEJEMmN2tOaXUGByM+kg== + dependencies: + "@formatjs/ecma402-abstract" "1.18.2" + "@formatjs/fast-memoize" "2.2.0" + "@formatjs/icu-messageformat-parser" "2.7.6" + tslib "^2.4.0" + ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" @@ -6762,6 +7881,13 @@ launch-editor@^2.6.0: picocolors "^1.0.0" shell-quote "^1.7.3" +"legacy-swc-helpers@npm:@swc/helpers@=0.4.14": + version "0.4.14" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74" + integrity sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw== + dependencies: + tslib "^2.4.0" + leven@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" @@ -8327,6 +9453,49 @@ react-app-polyfill@^3.0.0: regenerator-runtime "^0.13.9" whatwg-fetch "^3.6.2" +react-aria@^3.32.1: + version "3.33.0" + resolved "https://registry.yarnpkg.com/react-aria/-/react-aria-3.33.0.tgz#dae56c169faf2b098507f13cbc5f9877016d4c12" + integrity sha512-aKn9SQn5TMlmpUsIjfRMtse2v3okGcSo+gWLGrj9JVjxs4PL4FSU4mclj4Bg2JUXZTGgfLSq6PWUBzQ4gIP2zg== + dependencies: + "@internationalized/string" "^3.2.2" + "@react-aria/breadcrumbs" "^3.5.12" + "@react-aria/button" "^3.9.4" + "@react-aria/calendar" "^3.5.7" + "@react-aria/checkbox" "^3.14.2" + "@react-aria/combobox" "^3.9.0" + "@react-aria/datepicker" "^3.10.0" + "@react-aria/dialog" "^3.5.13" + "@react-aria/dnd" "^3.6.0" + "@react-aria/focus" "^3.17.0" + "@react-aria/gridlist" "^3.8.0" + "@react-aria/i18n" "^3.11.0" + "@react-aria/interactions" "^3.21.2" + "@react-aria/label" "^3.7.7" + "@react-aria/link" "^3.7.0" + "@react-aria/listbox" "^3.12.0" + "@react-aria/menu" "^3.14.0" + "@react-aria/meter" "^3.4.12" + "@react-aria/numberfield" "^3.11.2" + "@react-aria/overlays" "^3.22.0" + "@react-aria/progress" "^3.4.12" + "@react-aria/radio" "^3.10.3" + "@react-aria/searchfield" "^3.7.4" + "@react-aria/select" "^3.14.4" + "@react-aria/selection" "^3.18.0" + "@react-aria/separator" "^3.3.12" + "@react-aria/slider" "^3.7.7" + "@react-aria/ssr" "^3.9.3" + "@react-aria/switch" "^3.6.3" + "@react-aria/table" "^3.14.0" + "@react-aria/tabs" "^3.9.0" + "@react-aria/tag" "^3.4.0" + "@react-aria/textfield" "^3.14.4" + "@react-aria/tooltip" "^3.7.3" + "@react-aria/utils" "^3.24.0" + "@react-aria/visually-hidden" "^3.8.11" + "@react-types/shared" "^3.23.0" + react-dev-utils@^12.0.1: version "12.0.1" resolved "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz" @@ -9421,9 +10590,9 @@ symbol-tree@^3.2.4: resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -tabbable@^6.0.1: +tabbable@^6.0.0: version "6.2.0" - resolved "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz" + resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97" integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew== tailwindcss@^3.0.2: @@ -9617,7 +10786,7 @@ tslib@^1.8.1: resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.3, tslib@^2.6.2: +tslib@^2.0.3, tslib@^2.4.0, tslib@^2.6.2: version "2.6.2" resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==