From 944f8cb1f9911053793fbc494f8f04f2bcd3ca83 Mon Sep 17 00:00:00 2001 From: Omri Levy Date: Wed, 4 Dec 2024 16:53:43 +0200 Subject: [PATCH 1/4] feat(*) added a cell that can render and edit context dynamically --- apps/backoffice-v2/package.json | 2 + .../public/locales/en/toast.json | 4 + .../EditableDetailsV2/EditableDetailsV2.tsx | 101 + .../components/EditableDetailV2.tsx | 186 ++ .../components/EditableDetailsV2Options.tsx | 34 + .../components/ReadOnlyDetailV2.tsx | 24 + .../organisms/EditableDetailsV2/constants.ts | 1 + .../useEditableDetailsV2Logic.tsx | 135 ++ .../organisms/EditableDetailsV2/types.ts | 50 + .../generate-editable-details-v2-fields.ts | 35 + .../utils/get-display-value.ts | 21 + .../EditableDetailsV2/utils/get-input-type.ts | 39 + .../utils/get-property-path.ts | 38 + .../EditableDetailsV2/utils/is-path-match.ts | 47 + .../src/domains/workflows/fetchers.ts | 17 + .../useUpdateContextAndSyncEntity.tsx | 26 + .../EditableDetailsV2Cell.tsx | 10 + .../hooks/useKycBlock/useKycBlock.tsx | 55 +- .../create-blocks-typed.ts | 2 + .../lib/blocks/create-blocks-typed/types.ts | 10 +- .../src/pages/Root/Root.page.tsx | 6 +- .../documents/schemas/entity-schema.ts | 144 +- packages/common/src/schemas/index.ts | 1 + pnpm-lock.yaml | 2016 ++++++++++++++++- .../workflows-service/prisma/data-migrations | 2 +- .../workflow/workflow.controller.external.ts | 46 +- .../src/workflow/workflow.service.ts | 61 + 27 files changed, 2897 insertions(+), 216 deletions(-) create mode 100644 apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/EditableDetailsV2.tsx create mode 100644 apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/components/EditableDetailV2.tsx create mode 100644 apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/components/EditableDetailsV2Options.tsx create mode 100644 apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/components/ReadOnlyDetailV2.tsx create mode 100644 apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/constants.ts create mode 100644 apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/hooks/useEditableDetailsV2Logic/useEditableDetailsV2Logic.tsx create mode 100644 apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/types.ts create mode 100644 apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/utils/generate-editable-details-v2-fields.ts create mode 100644 apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/utils/get-display-value.ts create mode 100644 apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/utils/get-input-type.ts create mode 100644 apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/utils/get-property-path.ts create mode 100644 apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/utils/is-path-match.ts create mode 100644 apps/backoffice-v2/src/domains/workflows/hooks/mutations/useUpdateContextAndSyncEntity/useUpdateContextAndSyncEntity.tsx create mode 100644 apps/backoffice-v2/src/lib/blocks/components/EditableDetailsV2Cell/EditableDetailsV2Cell.tsx diff --git a/apps/backoffice-v2/package.json b/apps/backoffice-v2/package.json index 435e0352d0..8b270c0c14 100644 --- a/apps/backoffice-v2/package.json +++ b/apps/backoffice-v2/package.json @@ -117,6 +117,7 @@ "i18next-http-backend": "^2.1.1", "leaflet": "^1.9.4", "libphonenumber-js": "^1.10.49", + "lodash-es": "^4.17.21", "lowlight": "^3.1.0", "lucide-react": "0.445.0", "match-sorter": "^6.3.1", @@ -167,6 +168,7 @@ "@types/d3-hierarchy": "^3.1.7", "@types/dompurify": "^3.0.5", "@types/leaflet": "^1.9.3", + "@types/lodash-es": "^4.17.12", "@types/node": "^18.11.13", "@types/qs": "^6.9.7", "@types/react": "^18.0.14", diff --git a/apps/backoffice-v2/public/locales/en/toast.json b/apps/backoffice-v2/public/locales/en/toast.json index 7c6a044557..e7aa7685c7 100644 --- a/apps/backoffice-v2/public/locales/en/toast.json +++ b/apps/backoffice-v2/public/locales/en/toast.json @@ -100,5 +100,9 @@ "note_created": { "success": "Note added successfully.", "error": "Error occurred while adding note." + }, + "update_details": { + "success": "Details updated successfully.", + "error": "Error occurred while updating details." } } diff --git a/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/EditableDetailsV2.tsx b/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/EditableDetailsV2.tsx new file mode 100644 index 0000000000..12ced79e13 --- /dev/null +++ b/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/EditableDetailsV2.tsx @@ -0,0 +1,101 @@ +import { Button, TextWithNAFallback } from '@ballerine/ui'; + +import { FormField } from '../Form/Form.Field'; +import { titleCase } from 'string-ts'; +import { Form } from '../Form/Form'; +import { FunctionComponent } from 'react'; +import { FormItem } from '../Form/Form.Item'; +import { FormLabel } from '../Form/Form.Label'; +import { FormMessage } from '../Form/Form.Message'; +import { TEditableDetailsV2Props } from './types'; +import { useNewEditableDetailsLogic } from './hooks/useEditableDetailsV2Logic/useEditableDetailsV2Logic'; +import { EditableDetailsV2Options } from './components/EditableDetailsV2Options'; +import { EditableDetailV2 } from './components/EditableDetailV2'; + +export const EditableDetailsV2: FunctionComponent = ({ + title, + fields, + onSubmit, + onEnableIsEditable, + onCancel, + blacklist, + whitelist, + isEditable, + isSaveDisabled, + parse, +}) => { + if (blacklist && whitelist) { + throw new Error('Cannot provide both blacklist and whitelist'); + } + + const { form, handleSubmit, filteredFields } = useNewEditableDetailsLogic({ + fields, + blacklist, + whitelist, + onSubmit, + }); + + return ( +
+
+

{title}

+ +
+
+ +
+ {title} + {filteredFields.map(({ title, path, props }) => { + const originalValue = form.watch(path); + + return ( + ( + + + {titleCase(title ?? '')} + + + + + )} + /> + ); + })} +
+
+ {isEditable && filteredFields?.some(({ props }) => props.isEditable) && ( + + )} + {isEditable && filteredFields?.some(({ props }) => props.isEditable) && ( + + )} +
+
+ +
+ ); +}; diff --git a/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/components/EditableDetailV2.tsx b/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/components/EditableDetailV2.tsx new file mode 100644 index 0000000000..9817e56bfc --- /dev/null +++ b/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/components/EditableDetailV2.tsx @@ -0,0 +1,186 @@ +import { FunctionComponent, ComponentProps, useCallback, ChangeEvent } from 'react'; +import { FieldValues, UseFormReturn } from 'react-hook-form'; +import { ExtendedJson } from '@/common/types'; +import { isValidDatetime } from '@/common/utils/is-valid-datetime'; +import { FileJson2 } from 'lucide-react'; +import { JsonDialog, ctw, BallerineLink, checkIsDate } from '@ballerine/ui'; +import { isObject, isNullish, checkIsIsoDate, checkIsUrl } from '@ballerine/common'; +import { Input } from '@ballerine/ui'; +import { Select } from '../../../atoms/Select/Select'; +import { SelectTrigger } from '../../../atoms/Select/Select.Trigger'; +import { SelectValue } from '../../../atoms/Select/Select.Value'; +import { SelectContent } from '../../../atoms/Select/Select.Content'; +import { SelectItem } from '../../../atoms/Select/Select.Item'; +import { keyFactory } from '@/common/utils/key-factory/key-factory'; +import { Checkbox_ } from '../../../atoms/Checkbox_/Checkbox_'; +import dayjs from 'dayjs'; +import { ReadOnlyDetailV2 } from './ReadOnlyDetailV2'; +import { getDisplayValue } from '../utils/get-display-value'; +import { FormField } from '../../Form/Form.Field'; +import { FormControl } from '../../Form/Form.Control'; +import { getInputType } from '../utils/get-input-type'; + +export const EditableDetailV2: FunctionComponent<{ + isEditable: boolean; + className?: string; + options?: Array<{ + label: string; + value: string; + }>; + form: UseFormReturn; + field: Parameters['render']>[0]['field']; + originalValue: ExtendedJson; + type: string | undefined; + format: string | undefined; + minimum?: number; + maximum?: number; + pattern?: string; + parse?: { + date?: boolean; + isoDate?: boolean; + datetime?: boolean; + boolean?: boolean; + url?: boolean; + nullish?: boolean; + }; +}> = ({ + isEditable, + className, + options, + originalValue, + form, + field, + type, + format, + minimum, + maximum, + pattern, + parse, +}) => { + const displayValue = getDisplayValue({ value: field.value, originalValue, isEditable }); + const onInputChange = useCallback( + (event: ChangeEvent) => { + const value = event.target.value === 'N/A' ? '' : event.target.value; + + form.setValue(field.name, value); + }, + [field.name, form], + ); + + if (Array.isArray(field.value) || isObject(field.value)) { + return ( +
+ } + dialogButtonText={`View Information`} + json={JSON.stringify(field.value)} + /> +
+ ); + } + + if (isEditable && options) { + return ( + + ); + } + + if (parse?.boolean && (typeof field.value === 'boolean' || type === 'boolean')) { + return ( + + + + ); + } + + if (isEditable) { + const inputType = getInputType({ format, type, value: originalValue }); + + return ( + + + + ); + } + + if (typeof field.value === 'boolean' || type === 'boolean') { + return {`${field.value}`}; + } + + if (parse?.url && checkIsUrl(field.value)) { + return ( + + {field.value} + + ); + } + + if (parse?.datetime && (isValidDatetime(field.value) || type === 'date-time')) { + const value = field.value.endsWith(':00') ? field.value : `${field.value}:00`; + + return ( + + {dayjs(value).utc().format('DD/MM/YYYY HH:mm')} + + ); + } + + if ( + (parse?.date && checkIsDate(field.value, { isStrict: false })) || + (parse?.isoDate && checkIsIsoDate(field.value)) || + (type === 'date' && (parse?.date || parse?.isoDate)) + ) { + return ( + + {dayjs(field.value).format('DD/MM/YYYY')} + + ); + } + + if (parse?.nullish && isNullish(field.value)) { + return {field.value}; + } + + if (isNullish(field.value)) { + return {`${field.value}`}; + } + + return {field.value}; +}; diff --git a/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/components/EditableDetailsV2Options.tsx b/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/components/EditableDetailsV2Options.tsx new file mode 100644 index 0000000000..cdf61de6f2 --- /dev/null +++ b/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/components/EditableDetailsV2Options.tsx @@ -0,0 +1,34 @@ +import { + DropdownMenuContent, + Button, + DropdownMenu, + DropdownMenuTrigger, + DropdownMenuItem, +} from '@ballerine/ui'; +import { Edit } from 'lucide-react'; +import { FunctionComponent } from 'react'; + +export const EditableDetailsV2Options: FunctionComponent<{ + onEnableIsEditable: () => void; +}> = ({ onEnableIsEditable }) => { + return ( + + + + + + + + + + + ); +}; diff --git a/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/components/ReadOnlyDetailV2.tsx b/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/components/ReadOnlyDetailV2.tsx new file mode 100644 index 0000000000..001c54efeb --- /dev/null +++ b/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/components/ReadOnlyDetailV2.tsx @@ -0,0 +1,24 @@ +import { TextWithNAFallback, ctw } from '@ballerine/ui'; +import { FunctionComponent, ComponentProps } from 'react'; + +export const ReadOnlyDetailV2: FunctionComponent> = ({ + children, + className, + ...props +}) => { + return ( + + {children} + + ); +}; diff --git a/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/constants.ts b/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/constants.ts new file mode 100644 index 0000000000..5c1dcc1062 --- /dev/null +++ b/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/constants.ts @@ -0,0 +1 @@ +export const __ROOT__ = '__ROOT__'; diff --git a/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/hooks/useEditableDetailsV2Logic/useEditableDetailsV2Logic.tsx b/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/hooks/useEditableDetailsV2Logic/useEditableDetailsV2Logic.tsx new file mode 100644 index 0000000000..a729361edd --- /dev/null +++ b/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/hooks/useEditableDetailsV2Logic/useEditableDetailsV2Logic.tsx @@ -0,0 +1,135 @@ +import { ComponentProps, useCallback, useMemo } from 'react'; +import { useForm, SubmitHandler } from 'react-hook-form'; +import { EditableDetailsV2 } from '../../EditableDetailsV2'; +import { isPathMatch } from '../../utils/is-path-match'; +import { isObject } from '@ballerine/common'; +import { set, get } from 'lodash-es'; + +export const useNewEditableDetailsLogic = ({ + fields, + blacklist, + whitelist, + onSubmit, +}: Pick< + ComponentProps, + 'fields' | 'blacklist' | 'whitelist' | 'onSubmit' +>) => { + // Should support multiple levels of nesting, arrays, objects, and multiple path syntaxes + const filterValue = useCallback( + ({ path, root }: { path: string; root: string }) => + (value: any): any => { + if (!blacklist && !whitelist) { + return value; + } + + if (isObject(value)) { + return Object.entries(value).reduce((acc, [key, value]) => { + const fullPath = `${path}.${key}`; + const isBlacklisted = blacklist?.some(pattern => + isPathMatch({ + pattern, + path: fullPath, + root, + }), + ); + const isWhitelisted = + !whitelist || + whitelist?.some(pattern => + isPathMatch({ + pattern, + path: fullPath, + root, + }), + ); + + if (isBlacklisted) { + return acc; + } + + if (isWhitelisted) { + acc[key] = filterValue({ path: fullPath, root })(value); + } + + return acc; + }, {} as Record); + } + + if (Array.isArray(value)) { + return value.map((item, index) => filterValue({ path: `${path}.${index}`, root })(item)); + } + + return value; + }, + [blacklist, whitelist], + ); + + const filteredFields = useMemo(() => { + return fields.filter(field => { + if (blacklist) { + return !blacklist.some(pattern => + isPathMatch({ + pattern, + path: field.path, + root: field.root, + }), + ); + } + + if (whitelist) { + return whitelist.some(pattern => + isPathMatch({ + pattern, + path: field.path, + root: field.root, + }), + ); + } + + return true; + }); + }, [fields, blacklist, whitelist]); + const defaultValues = useMemo( + () => + filteredFields.reduce((acc, curr) => { + set(acc, curr.path, curr.value); + + return acc; + }, {} as Record), + [filteredFields], + ); + const form = useForm({ + defaultValues, + }); + + const handleSubmit: SubmitHandler> = useCallback( + values => { + const updatedData = fields.reduce((acc, curr) => { + const value = get(values, curr.path); + const defaultValue = get(defaultValues, curr.path); + + if (value === defaultValue) { + return acc; + } + + if (curr.id) { + const pathToObject = curr.path.split('.').slice(0, -1).join('.'); + + set(acc, `${pathToObject}.id`, curr.id); + } + + set(acc, curr.path, value); + + return acc; + }, {} as Record); + + onSubmit(updatedData); + }, + [fields, defaultValues, onSubmit], + ); + + return { + form, + handleSubmit, + filteredFields, + }; +}; diff --git a/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/types.ts b/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/types.ts new file mode 100644 index 0000000000..7b190b3550 --- /dev/null +++ b/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/types.ts @@ -0,0 +1,50 @@ +export interface IBaseEditableDetailsV2Props { + title: string; + fields: Array<{ + id?: string; + title: string; + value: any; + props: { + valueAlias?: any; + type: string | undefined; + format: string | undefined; + isEditable: boolean; + pattern?: string; + minimum?: number; + maximum?: number; + options?: Array<{ + label: string; + value: string; + }>; + }; + path: string; + root: string; + }>; + parse?: { + date?: boolean; + isoDate?: boolean; + datetime?: boolean; + boolean?: boolean; + url?: boolean; + nullish?: boolean; + }; + onSubmit: (values: Record) => void; + onEnableIsEditable: () => void; + onCancel: () => void; + isEditable: boolean; + isSaveDisabled: boolean; +} + +export interface IEditableDetailsV2PropsWithBlacklist extends IBaseEditableDetailsV2Props { + blacklist: string[]; + whitelist?: never; +} + +export interface IEditableDetailsV2PropsWithWhitelist extends IBaseEditableDetailsV2Props { + blacklist?: never; + whitelist: string[]; +} + +export type TEditableDetailsV2Props = + | IEditableDetailsV2PropsWithBlacklist + | IEditableDetailsV2PropsWithWhitelist; diff --git a/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/utils/generate-editable-details-v2-fields.ts b/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/utils/generate-editable-details-v2-fields.ts new file mode 100644 index 0000000000..c99185d233 --- /dev/null +++ b/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/utils/generate-editable-details-v2-fields.ts @@ -0,0 +1,35 @@ +import { __ROOT__ } from '../constants'; +import { get } from 'lodash-es'; +import { getPropertyPath } from './get-property-path'; + +export const generateEditableDetailsV2Fields = + (obj: Record) => + ({ path, id }: { path: string; id?: string }) => { + const isWildcardPath = path === '*'; + const objectAtPath = isWildcardPath ? obj : get(obj, path); + const fields = Object.keys(objectAtPath).map(key => { + const pathToValue = isWildcardPath ? key : `${path}.${key}`; + const propertyPath = getPropertyPath({ + obj, + accessor: proxy => get(proxy, pathToValue), + propertyId: id, + }); + const root = isWildcardPath ? __ROOT__ : path; + + if (!root) { + throw new Error('Root is undefined'); + } + + return { + ...propertyPath, + root, + props: { + type: undefined, + format: undefined, + isEditable: true, + }, + }; + }); + + return fields; + }; diff --git a/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/utils/get-display-value.ts b/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/utils/get-display-value.ts new file mode 100644 index 0000000000..8bef9ebaf3 --- /dev/null +++ b/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/utils/get-display-value.ts @@ -0,0 +1,21 @@ +import { isNullish } from '@ballerine/common'; + +export const getDisplayValue = ({ + value, + originalValue, + isEditable, +}: { + value: TValue; + originalValue: TOriginalValue; + isEditable: boolean; +}) => { + if (isEditable) { + return originalValue; + } + + if (isNullish(value) || value === '') { + return 'N/A'; + } + + return value; +}; diff --git a/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/utils/get-input-type.ts b/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/utils/get-input-type.ts new file mode 100644 index 0000000000..1157e3f4bb --- /dev/null +++ b/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/utils/get-input-type.ts @@ -0,0 +1,39 @@ +import { isValidDatetime } from '@/common/utils/is-valid-datetime'; +import { checkIsIsoDate } from '@ballerine/common'; +import { checkIsDate } from '@ballerine/ui'; + +export const getInputType = ({ + format, + type, + value, +}: { + format: string | undefined; + type: string | undefined; + value: unknown; +}) => { + if (format === 'date-time' || isValidDatetime(value)) { + return 'datetime-local'; + } + + if (format) { + return format; + } + + if (type === 'string') { + return 'text'; + } + + if (type === 'number' || (typeof value === 'number' && Number.isFinite(value))) { + return 'number'; + } + + if (checkIsDate(value, { isStrict: false }) || checkIsIsoDate(value) || type === 'date') { + return 'date'; + } + + if (!type) { + return 'text'; + } + + return type; +}; diff --git a/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/utils/get-property-path.ts b/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/utils/get-property-path.ts new file mode 100644 index 0000000000..6b400e1fca --- /dev/null +++ b/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/utils/get-property-path.ts @@ -0,0 +1,38 @@ +import { get } from 'lodash-es'; + +export const getPropertyPath = >({ + obj, + accessor, + propertyId, +}: { + obj: TObj; + accessor: (proxy: TObj) => any; + propertyId?: string; +}) => { + const path: string[] = []; + + const proxy = new Proxy(obj, { + get(target: TObj, prop: PropertyKey) { + path.push(String(prop)); + + return new Proxy({}, this); + }, + }); + + // Invoke the accessor function to trigger the proxy + accessor(proxy); + + const fullPath = path.join('.'); + const prop = path.at(-1); + + if (!prop) { + throw new Error('Property path is empty'); + } + + return { + id: propertyId, + title: prop, + value: get(obj, path.join('.')), + path: fullPath, + }; +}; diff --git a/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/utils/is-path-match.ts b/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/utils/is-path-match.ts new file mode 100644 index 0000000000..f9edbb51fc --- /dev/null +++ b/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/utils/is-path-match.ts @@ -0,0 +1,47 @@ +import { __ROOT__ } from '../constants'; + +export const isPathMatch = ({ + pattern, + path, + root, +}: { + pattern: string; + path: string; + root: string; +}) => { + const patternParts = pattern.split('.'); + + // Exact matches, no wildcards. + if (!pattern.includes('*') && patternParts.length > 1) { + return pattern === path; + } + + /** + * @example pattern: 'id', path: 'entity.id' where root is 'entity' + * */ + if (patternParts.length === 1 && path === `${root}.${pattern}`) { + return true; + } + + // Match any path not at the root level. + if (pattern.startsWith('*.')) { + const parts = path.split('.'); + const suffix = pattern.slice(2); + + // parts.length > 2 ensures we have at least one level between root and the target field + return (parts.length > 2 || root === __ROOT__) && path.endsWith(suffix); + } + + const regexPattern = + pattern + // Escape dots for the regex + .replace(/\./g, '\\.') + // Replace * with regex pattern that matches any characters except dots + .replace(/\*/g, '[^.]+') + + // Make the pattern match both exact and partial paths + '(?:\\.[^.]+)*'; + + const regex = new RegExp(`^${regexPattern}$`); + + return regex.test(path); +}; diff --git a/apps/backoffice-v2/src/domains/workflows/fetchers.ts b/apps/backoffice-v2/src/domains/workflows/fetchers.ts index ac1f9ab036..6557a3b603 100644 --- a/apps/backoffice-v2/src/domains/workflows/fetchers.ts +++ b/apps/backoffice-v2/src/domains/workflows/fetchers.ts @@ -13,6 +13,23 @@ import { z } from 'zod'; import { IWorkflowId } from './interfaces'; import { zPropertyKey } from '@/lib/zod/utils/z-property-key/z-property-key'; +export const updateContextAndSyncEntity = async ({ + workflowId, + data, +}: { + workflowId: string; + data: Partial; +}) => { + const [workflow, error] = await apiClient({ + endpoint: `../external/workflows/${workflowId}/sync-entity`, + method: Method.PATCH, + body: data, + schema: WorkflowByIdSchema, + }); + + return handleZodError(error, workflow); +}; + export const fetchWorkflows = async (params: { filterId: string; orderBy: string; diff --git a/apps/backoffice-v2/src/domains/workflows/hooks/mutations/useUpdateContextAndSyncEntity/useUpdateContextAndSyncEntity.tsx b/apps/backoffice-v2/src/domains/workflows/hooks/mutations/useUpdateContextAndSyncEntity/useUpdateContextAndSyncEntity.tsx new file mode 100644 index 0000000000..5f77b20742 --- /dev/null +++ b/apps/backoffice-v2/src/domains/workflows/hooks/mutations/useUpdateContextAndSyncEntity/useUpdateContextAndSyncEntity.tsx @@ -0,0 +1,26 @@ +import { TWorkflowById, updateContextAndSyncEntity } from '@/domains/workflows/fetchers'; + +import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { toast } from 'sonner'; +import { t } from 'i18next'; +import { workflowsQueryKeys } from '../../../query-keys'; + +export const useUpdateContextAndSyncEntityMutation = ({ workflowId }: { workflowId: string }) => { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: async (data: Partial) => + await updateContextAndSyncEntity({ + workflowId, + data, + }), + onSuccess: () => { + void queryClient.invalidateQueries(workflowsQueryKeys._def); + + toast.success(t('toast:update_details.success')); + }, + onError: () => { + toast.error(t('toast:update_details.error')); + }, + }); +}; diff --git a/apps/backoffice-v2/src/lib/blocks/components/EditableDetailsV2Cell/EditableDetailsV2Cell.tsx b/apps/backoffice-v2/src/lib/blocks/components/EditableDetailsV2Cell/EditableDetailsV2Cell.tsx new file mode 100644 index 0000000000..6021a618d5 --- /dev/null +++ b/apps/backoffice-v2/src/lib/blocks/components/EditableDetailsV2Cell/EditableDetailsV2Cell.tsx @@ -0,0 +1,10 @@ +import { FunctionComponent } from 'react'; +import { ExtractCellProps } from '@ballerine/blocks'; +import { EditableDetailsV2 } from '@/common/components/organisms/EditableDetailsV2/EditableDetailsV2'; + +export const EditableDetailsV2Cell: FunctionComponent> = ({ + value, + props, +}) => { + return ; +}; diff --git a/apps/backoffice-v2/src/lib/blocks/components/KycBlock/hooks/useKycBlock/useKycBlock.tsx b/apps/backoffice-v2/src/lib/blocks/components/KycBlock/hooks/useKycBlock/useKycBlock.tsx index 8e99a22f9b..0c1db3fd68 100644 --- a/apps/backoffice-v2/src/lib/blocks/components/KycBlock/hooks/useKycBlock/useKycBlock.tsx +++ b/apps/backoffice-v2/src/lib/blocks/components/KycBlock/hooks/useKycBlock/useKycBlock.tsx @@ -20,7 +20,16 @@ import { toTitleCase } from 'string-ts'; import { MotionBadge } from '../../../../../../common/components/molecules/MotionBadge/MotionBadge'; import { capitalize } from '../../../../../../common/utils/capitalize/capitalize'; import { useStorageFilesQuery } from '../../../../../../domains/storage/hooks/queries/useStorageFilesQuery/useStorageFilesQuery'; -import { TWorkflowById } from '../../../../../../domains/workflows/fetchers'; +import { TWorkflowById, WorkflowByIdSchema } from '../../../../../../domains/workflows/fetchers'; +import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { handleZodError } from '@/common/utils/handle-zod-error/handle-zod-error'; +import { apiClient } from '@/common/api-client/api-client'; +import { Method } from '@/common/enums'; +import { workflowsQueryKeys } from '@/domains/workflows/query-keys'; +import { toast } from 'sonner'; +import { t } from 'i18next'; +import { useToggle } from '@/common/hooks/useToggle/useToggle'; +import { generateEditableDetailsV2Fields } from '@/common/components/organisms/EditableDetailsV2/utils/generate-editable-details-v2-fields'; const motionBadgeProps = { exit: { opacity: 0, transition: { duration: 0.2 } }, @@ -362,6 +371,22 @@ export const useKycBlock = ({ }) .cellAt(0, 0); + const fields = generateEditableDetailsV2Fields(childWorkflow?.context)({ + path: 'entity.data', + }); + + const { mutate: mutateUpdateContextAndSyncEntity } = useUpdateContextAndSyncEntityMutation({ + workflowId: childWorkflow?.id, + }); + const [isEditable, _toggleIsEditable, toggleOnIsEditable, toggleOffIsEditable] = useToggle(); + + const onSubmit = useCallback( + (values: Record) => { + mutateUpdateContextAndSyncEntity(values); + }, + [mutateUpdateContextAndSyncEntity], + ); + return createBlocksTyped() .addBlock() .addCell({ @@ -412,20 +437,24 @@ export const useKycBlock = ({ value: createBlocksTyped() .addBlock() .addCell({ - id: 'header', - type: 'heading', - value: 'Details', - }) - .addCell({ - id: 'decision', - type: 'details', - value: { - id: 1, + type: 'editableDetails', + value: fields, + props: { title: 'Details', - data: details, + onSubmit, + isEditable: isEditable, + onEnableIsEditable: toggleOnIsEditable, + onCancel: toggleOffIsEditable, + isSaveDisabled: false, + parse: { + date: true, + isoDate: true, + datetime: true, + boolean: true, + url: true, + nullish: true, + }, }, - workflowId: childWorkflow?.id, - documents: childWorkflow?.context?.documents, }) .build() .flat(1), diff --git a/apps/backoffice-v2/src/lib/blocks/create-blocks-typed/create-blocks-typed.ts b/apps/backoffice-v2/src/lib/blocks/create-blocks-typed/create-blocks-typed.ts index 25c2ca55d3..412444db6b 100644 --- a/apps/backoffice-v2/src/lib/blocks/create-blocks-typed/create-blocks-typed.ts +++ b/apps/backoffice-v2/src/lib/blocks/create-blocks-typed/create-blocks-typed.ts @@ -22,6 +22,7 @@ import { CellsMap, createBlocks } from '@ballerine/blocks'; import { DataTableCell } from '@/lib/blocks/components/DataTableCell/DataTableCell'; import { ReadOnlyDetailsCell } from '@/lib/blocks/components/ReadOnlyDetailsCell/ReadOnlyDetailsCell'; import { ImageCell } from '@/lib/blocks/components/ImageCell/ImageCell'; +import { EditableDetailsV2Cell } from '../components/EditableDetailsV2Cell/EditableDetailsV2Cell'; export const createBlocksTyped = () => createBlocks(); @@ -56,4 +57,5 @@ export const cells: CellsMap = { pdfViewer: PDFViewerCell, readOnlyDetails: ReadOnlyDetailsCell, image: ImageCell, + editableDetails: EditableDetailsV2Cell, }; diff --git a/apps/backoffice-v2/src/lib/blocks/create-blocks-typed/types.ts b/apps/backoffice-v2/src/lib/blocks/create-blocks-typed/types.ts index a94904702d..79d3b6adfd 100644 --- a/apps/backoffice-v2/src/lib/blocks/create-blocks-typed/types.ts +++ b/apps/backoffice-v2/src/lib/blocks/create-blocks-typed/types.ts @@ -24,6 +24,7 @@ import { ComponentProps, ReactNode } from 'react'; import { ReadOnlyDetail } from '@/common/components/atoms/ReadOnlyDetail/ReadOnlyDetail'; import { DataTable } from '@ballerine/ui/dist/components/organisms/DataTable/DataTable'; +import { EditableDetailsV2 } from '@/common/components/organisms/EditableDetailsV2/EditableDetailsV2'; export type TBlockCell = { type: 'block'; @@ -248,6 +249,12 @@ export type TImageCell = { props: Omit, 'src'>; }; +export type TEditableDetailsV2Cell = { + type: 'editableDetails'; + value: ComponentProps['fields']; + props: Omit, 'fields'>; +}; + export type TCell = | TBlockCell | TContainerCell @@ -271,4 +278,5 @@ export type TCell = | TNodeCell | TPDFViewerCell | TReadOnlyDetailsCell - | TImageCell; + | TImageCell + | TEditableDetailsV2Cell; diff --git a/apps/backoffice-v2/src/pages/Root/Root.page.tsx b/apps/backoffice-v2/src/pages/Root/Root.page.tsx index 4655a1ab77..8cc09bf85c 100644 --- a/apps/backoffice-v2/src/pages/Root/Root.page.tsx +++ b/apps/backoffice-v2/src/pages/Root/Root.page.tsx @@ -1,10 +1,10 @@ -import React, { FunctionComponent, lazy, useState } from 'react'; -import { Outlet } from 'react-router-dom'; +import { FunctionComponent, lazy, useState } from 'react'; import { Providers } from '../../common/components/templates/Providers/Providers'; -import { ServerDownLayout } from './ServerDown.layout'; import { useCustomerQuery } from '@/domains/customer/hooks/queries/useCustomerQuery/useCustomerQuery'; import { FullScreenLoader } from '@/common/components/molecules/FullScreenLoader/FullScreenLoader'; import Chatbot from '@/domains/chat/chatbot-opengpt'; +import { Outlet } from 'react-router-dom'; +import { ServerDownLayout } from './ServerDown.layout'; const ReactQueryDevtools = lazy(() => process.env.NODE_ENV !== 'production' diff --git a/packages/common/src/schemas/documents/schemas/entity-schema.ts b/packages/common/src/schemas/documents/schemas/entity-schema.ts index d5b8692fec..14e9150b0f 100644 --- a/packages/common/src/schemas/documents/schemas/entity-schema.ts +++ b/packages/common/src/schemas/documents/schemas/entity-schema.ts @@ -1,84 +1,76 @@ import { Type } from '@sinclair/typebox'; +export const IndividualDataSchema = Type.Object({ + isContactPerson: Type.Optional(Type.Boolean()), + correlationId: Type.Optional(Type.Union([Type.String(), Type.Null()])), + endUserType: Type.Optional(Type.Union([Type.String(), Type.Null()])), + firstName: Type.Optional(Type.String()), + lastName: Type.Optional(Type.String()), + email: Type.Optional(Type.Union([Type.String(), Type.Null()])), + phone: Type.Optional(Type.Union([Type.String(), Type.Null()])), + country: Type.Optional( + Type.Union([Type.String({ description: 'ISO 3166-1 alpha-2 country code' }), Type.Null()]), + ), + dateOfBirth: Type.Optional( + Type.Union([Type.String({ format: 'date' }), Type.String(), Type.Null()]), + ), + avatarUrl: Type.Optional(Type.Union([Type.String(), Type.Null()])), + nationalId: Type.Optional(Type.Union([Type.String(), Type.Null()])), + additionalInfo: Type.Optional(Type.Union([Type.Object({}), Type.Null()])), +}); + +export const BusinessDataSchema = Type.Object({ + correlationId: Type.Optional(Type.Union([Type.String(), Type.Null()])), + businessType: Type.Optional(Type.Union([Type.String(), Type.Null()])), + companyName: Type.String(), + registrationNumber: Type.Optional(Type.Union([Type.String(), Type.Null()])), + legalForm: Type.Optional(Type.Union([Type.String(), Type.Null()])), + country: Type.Optional( + Type.Union([Type.String({ description: 'ISO 3166-1 alpha-2 country code' }), Type.Null()]), + ), + countryOfIncorporation: Type.Optional( + Type.Union([Type.String({ description: 'ISO 3166-1 alpha-2 country code' }), Type.Null()]), + ), + dateOfIncorporation: Type.Optional( + Type.Union([Type.String({ format: 'date' }), Type.String(), Type.Null()]), + ), + address: Type.Optional(Type.Union([Type.Object({}), Type.Null()])), + phoneNumber: Type.Optional(Type.Union([Type.String(), Type.Null()])), + email: Type.Optional(Type.Union([Type.String(), Type.Null()])), + website: Type.Optional(Type.Union([Type.String(), Type.Null()])), + industry: Type.Optional(Type.Union([Type.String(), Type.Null()])), + taxIdentificationNumber: Type.Optional(Type.Union([Type.String(), Type.Null()])), + vatNumber: Type.Optional(Type.Union([Type.String(), Type.Null()])), + shareholderStructure: Type.Optional(Type.Union([Type.Object({}), Type.Null()])), + numberOfEmployees: Type.Optional(Type.Number()), + businessPurpose: Type.Optional(Type.Union([Type.String(), Type.Null()])), + avatarUrl: Type.Optional(Type.Union([Type.String(), Type.Null()])), + additionalInfo: Type.Optional( + Type.Union([ + Type.Object( + { + mainRepresentative: Type.Optional( + Type.Object({ + email: Type.Optional(Type.String()), + lastName: Type.Optional(Type.String()), + firstName: Type.Optional(Type.String()), + }), + ), + }, + { additionalProperties: true }, + ), + Type.Null(), + ]), + ), + bankInformation: Type.Optional(Type.Union([Type.Object({}), Type.Null()])), + mccCode: Type.Optional(Type.Number()), + metadata: Type.Optional(Type.Union([Type.Object({}), Type.Null()])), +}); + export const EntitySchema = Type.Object( { type: Type.String({ enum: ['individual', 'business'] }), - data: Type.Union([ - Type.Object({ - isContactPerson: Type.Optional(Type.Boolean()), - correlationId: Type.Optional(Type.Union([Type.String(), Type.Null()])), - endUserType: Type.Optional(Type.Union([Type.String(), Type.Null()])), - firstName: Type.Optional(Type.String()), - lastName: Type.Optional(Type.String()), - email: Type.Optional(Type.Union([Type.String(), Type.Null()])), - phone: Type.Optional(Type.Union([Type.String(), Type.Null()])), - country: Type.Optional( - Type.Union([ - Type.String({ description: 'ISO 3166-1 alpha-2 country code' }), - Type.Null(), - ]), - ), - dateOfBirth: Type.Optional( - Type.Union([Type.String({ format: 'date' }), Type.String(), Type.Null()]), - ), - avatarUrl: Type.Optional(Type.Union([Type.String(), Type.Null()])), - nationalId: Type.Optional(Type.Union([Type.String(), Type.Null()])), - additionalInfo: Type.Optional(Type.Union([Type.Object({}), Type.Null()])), - }), - Type.Object({ - correlationId: Type.Optional(Type.Union([Type.String(), Type.Null()])), - businessType: Type.Optional(Type.Union([Type.String(), Type.Null()])), - companyName: Type.String(), - registrationNumber: Type.Optional(Type.Union([Type.String(), Type.Null()])), - legalForm: Type.Optional(Type.Union([Type.String(), Type.Null()])), - country: Type.Optional( - Type.Union([ - Type.String({ description: 'ISO 3166-1 alpha-2 country code' }), - Type.Null(), - ]), - ), - countryOfIncorporation: Type.Optional( - Type.Union([ - Type.String({ description: 'ISO 3166-1 alpha-2 country code' }), - Type.Null(), - ]), - ), - dateOfIncorporation: Type.Optional( - Type.Union([Type.String({ format: 'date' }), Type.String(), Type.Null()]), - ), - address: Type.Optional(Type.Union([Type.Object({}), Type.Null()])), - phoneNumber: Type.Optional(Type.Union([Type.String(), Type.Null()])), - email: Type.Optional(Type.Union([Type.String(), Type.Null()])), - website: Type.Optional(Type.Union([Type.String(), Type.Null()])), - industry: Type.Optional(Type.Union([Type.String(), Type.Null()])), - taxIdentificationNumber: Type.Optional(Type.Union([Type.String(), Type.Null()])), - vatNumber: Type.Optional(Type.Union([Type.String(), Type.Null()])), - shareholderStructure: Type.Optional(Type.Union([Type.Object({}), Type.Null()])), - numberOfEmployees: Type.Optional(Type.Number()), - businessPurpose: Type.Optional(Type.Union([Type.String(), Type.Null()])), - avatarUrl: Type.Optional(Type.Union([Type.String(), Type.Null()])), - additionalInfo: Type.Optional( - Type.Union([ - Type.Object( - { - mainRepresentative: Type.Optional( - Type.Object({ - email: Type.Optional(Type.String()), - lastName: Type.Optional(Type.String()), - firstName: Type.Optional(Type.String()), - }), - ), - }, - { additionalProperties: true }, - ), - Type.Null(), - ]), - ), - bankInformation: Type.Optional(Type.Union([Type.Object({}), Type.Null()])), - mccCode: Type.Optional(Type.Number()), - metadata: Type.Optional(Type.Union([Type.Object({}), Type.Null()])), - }), - ]), + data: Type.Union([IndividualDataSchema, BusinessDataSchema]), }, { additionalProperties: false }, ); diff --git a/packages/common/src/schemas/index.ts b/packages/common/src/schemas/index.ts index b440e9ceae..324ccf3fac 100644 --- a/packages/common/src/schemas/index.ts +++ b/packages/common/src/schemas/index.ts @@ -19,3 +19,4 @@ export { export { type TAvailableDocuments, type TDocument } from './documents/workflow/documents/types'; export * from './workflow/end-user.schema'; export { WorkflowDefinitionConfigThemeSchema } from './workflow/workflow-config-theme'; +export { BusinessDataSchema, IndividualDataSchema } from './documents/schemas/entity-schema'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6a05947e0a..997b1d18c3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -80,7 +80,7 @@ importers: version: link:../../packages/common '@ballerine/react-pdf-toolkit': specifier: ^1.2.47 - version: link:../../packages/react-pdf-toolkit + version: 1.2.49(@babel/runtime@7.23.8)(@mui/system@5.15.6)(@types/react-dom@18.2.15)(@types/react@18.2.37)(date-fns@3.6.0)(react-dom@18.2.0)(react-pdf-tailwind@2.2.1)(react@18.2.0) '@ballerine/ui': specifier: ^0.5.47 version: link:../../packages/ui @@ -270,6 +270,9 @@ importers: libphonenumber-js: specifier: ^1.10.49 version: 1.10.49 + lodash-es: + specifier: ^4.17.21 + version: 4.17.21 lowlight: specifier: ^3.1.0 version: 3.1.0 @@ -360,7 +363,7 @@ importers: version: link:../../packages/config '@ballerine/eslint-config-react': specifier: ^2.0.25 - version: link:../../packages/eslint-config-react + version: 2.0.26(@ballerine/eslint-config@1.1.26)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.33.2) '@cspell/cspell-types': specifier: ^6.31.1 version: 6.31.3 @@ -415,6 +418,9 @@ importers: '@types/leaflet': specifier: ^1.9.3 version: 1.9.8 + '@types/lodash-es': + specifier: ^4.17.12 + version: 4.17.12 '@types/node': specifier: ^18.11.13 version: 18.17.19 @@ -658,7 +664,7 @@ importers: version: link:../../packages/config '@ballerine/eslint-config-react': specifier: ^2.0.25 - version: link:../../packages/eslint-config-react + version: 2.0.26(@ballerine/eslint-config@1.1.26)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.33.2) '@jest/globals': specifier: ^29.7.0 version: 29.7.0 @@ -905,7 +911,7 @@ importers: version: link:../../packages/config '@ballerine/eslint-config-react': specifier: ^2.0.25 - version: link:../../packages/eslint-config-react + version: 2.0.26(@ballerine/eslint-config@1.1.26)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.33.2) '@cspell/cspell-types': specifier: ^6.31.1 version: 6.31.3 @@ -1092,7 +1098,7 @@ importers: dependencies: '@ballerine/react-pdf-toolkit': specifier: ^1.2.45 - version: link:../../packages/react-pdf-toolkit + version: 1.2.49(@babel/runtime@7.23.8)(@mui/system@5.15.6)(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react-pdf-tailwind@2.2.1)(react@18.2.0) react: specifier: ^18.2.0 version: 18.2.0 @@ -1154,7 +1160,7 @@ importers: version: link:../config '@ballerine/eslint-config': specifier: ^1.1.25 - version: link:../eslint-config + version: 1.1.26(@stylistic/eslint-plugin-ts@1.6.2)(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint-config-prettier@6.15.0)(eslint-plugin-prefer-arrow@1.2.3)(eslint-plugin-unused-imports@2.0.0)(eslint@8.54.0) '@rollup/plugin-babel': specifier: 5.3.1 version: 5.3.1(@babel/core@7.17.9)(@types/babel__core@7.20.4)(rollup@2.70.2) @@ -1335,7 +1341,7 @@ importers: version: link:../config '@ballerine/eslint-config': specifier: ^1.1.25 - version: link:../eslint-config + version: 1.1.26(@stylistic/eslint-plugin-ts@1.6.2)(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint-config-prettier@6.15.0)(eslint-plugin-prefer-arrow@1.2.3)(eslint-plugin-unused-imports@2.0.0)(eslint@8.54.0) '@cspell/cspell-types': specifier: ^6.31.1 version: 6.31.3 @@ -1484,7 +1490,7 @@ importers: dependencies: '@ballerine/eslint-config': specifier: ^1.1.25 - version: link:../eslint-config + version: 1.1.26(@stylistic/eslint-plugin-ts@1.6.2)(@typescript-eslint/eslint-plugin@6.14.0)(@typescript-eslint/parser@6.14.0)(eslint-config-prettier@9.0.0)(eslint-plugin-prefer-arrow@1.2.3)(eslint-plugin-unused-imports@3.0.0)(eslint@8.56.0) eslint-plugin-react: specifier: ^7.33.2 version: 7.33.2(eslint@8.56.0) @@ -1621,7 +1627,7 @@ importers: version: link:../config '@ballerine/eslint-config': specifier: ^1.1.25 - version: link:../eslint-config + version: 1.1.26(@stylistic/eslint-plugin-ts@1.6.2)(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint-config-prettier@6.15.0)(eslint-plugin-prefer-arrow@1.2.3)(eslint-plugin-unused-imports@2.0.0)(eslint@8.54.0) '@cspell/cspell-types': specifier: ^6.31.1 version: 6.31.3 @@ -1838,7 +1844,7 @@ importers: version: link:../config '@ballerine/eslint-config-react': specifier: ^2.0.25 - version: link:../eslint-config-react + version: 2.0.26(@ballerine/eslint-config@1.1.26)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.33.2) '@cspell/cspell-types': specifier: ^6.31.1 version: 6.31.3 @@ -1995,7 +2001,7 @@ importers: version: link:../config '@ballerine/eslint-config': specifier: ^1.1.25 - version: link:../eslint-config + version: 1.1.26(@stylistic/eslint-plugin-ts@1.6.2)(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint-config-prettier@6.15.0)(eslint-plugin-prefer-arrow@1.2.3)(eslint-plugin-unused-imports@2.0.0)(eslint@8.54.0) '@cspell/cspell-types': specifier: ^6.31.1 version: 6.31.3 @@ -2285,7 +2291,7 @@ importers: version: link:../../packages/config '@ballerine/eslint-config': specifier: ^1.1.25 - version: link:../../packages/eslint-config + version: 1.1.26(@stylistic/eslint-plugin-ts@1.6.2)(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint-config-prettier@6.15.0)(eslint-plugin-prefer-arrow@1.2.3)(eslint-plugin-unused-imports@2.0.0)(eslint@8.54.0) '@cspell/cspell-types': specifier: ^6.31.1 version: 6.31.3 @@ -2427,7 +2433,7 @@ importers: version: link:../../packages/config '@ballerine/eslint-config': specifier: ^1.1.25 - version: link:../../packages/eslint-config + version: 1.1.26(@stylistic/eslint-plugin-ts@1.6.2)(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint-config-prettier@6.15.0)(eslint-plugin-prefer-arrow@1.2.3)(eslint-plugin-unused-imports@2.0.0)(eslint@8.54.0) '@cspell/cspell-types': specifier: ^6.31.1 version: 6.31.3 @@ -2834,7 +2840,7 @@ importers: version: link:../../packages/config '@ballerine/eslint-config': specifier: ^1.1.25 - version: link:../../packages/eslint-config + version: 1.1.26(@stylistic/eslint-plugin-ts@1.6.2)(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint-config-prettier@8.10.0)(eslint-plugin-prefer-arrow@1.2.3)(eslint-plugin-unused-imports@3.0.0)(eslint@8.54.0) '@cspell/cspell-types': specifier: ^6.31.1 version: 6.31.3 @@ -3012,7 +3018,7 @@ importers: version: link:../../packages/config '@ballerine/eslint-config': specifier: ^1.1.25 - version: link:../../packages/eslint-config + version: 1.1.26(@stylistic/eslint-plugin-ts@1.6.2)(@typescript-eslint/parser@6.14.0)(eslint-config-prettier@9.0.0)(eslint-plugin-prefer-arrow@1.2.3)(eslint-plugin-unused-imports@3.0.0)(eslint@8.54.0) eslint: specifier: ^8.46.0 version: 8.54.0 @@ -3021,7 +3027,7 @@ importers: version: 9.0.0(eslint@8.54.0) eslint-config-standard-with-typescript: specifier: ^37.0.0 - version: 37.0.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.6.2)(eslint-plugin-promise@6.1.1)(eslint@8.54.0)(typescript@5.5.4) + version: 37.0.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.6.2)(eslint-plugin-promise@6.1.1)(eslint@8.54.0)(typescript@5.5.4) eslint-plugin-astro: specifier: ^0.28.0 version: 0.28.0(eslint@8.54.0) @@ -4836,7 +4842,6 @@ packages: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 - dev: true /@babel/helper-annotate-as-pure@7.22.5: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} @@ -5012,7 +5017,6 @@ packages: '@babel/types': 7.25.6 transitivePeerDependencies: - supports-color - dev: true /@babel/helper-module-transforms@7.23.3(@babel/core@7.17.9): resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} @@ -5169,7 +5173,6 @@ packages: /@babel/helper-string-parser@7.24.8: resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-validator-identifier@7.22.20: resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} @@ -5284,7 +5287,6 @@ packages: hasBin: true dependencies: '@babel/types': 7.25.6 - dev: true /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.17.9): resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} @@ -7273,7 +7275,6 @@ packages: '@babel/code-frame': 7.24.7 '@babel/parser': 7.25.6 '@babel/types': 7.25.6 - dev: true /@babel/traverse@7.23.3: resolution: {integrity: sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==} @@ -7323,7 +7324,6 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color - dev: true /@babel/types@7.23.3: resolution: {integrity: sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==} @@ -7357,12 +7357,319 @@ packages: '@babel/helper-string-parser': 7.24.8 '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 - dev: true /@balena/dockerignore@1.0.2: resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==} dev: true + /@ballerine/common@0.9.56: + resolution: {integrity: sha512-D/Wt/hUQDlU5yoA1QhFX71u5dVKjLiGyJMNAaxi7B3sCMJ/4nMC2E7R5IZYbqpSg5wrhi0xWDGJQbAF4qGHvOA==} + engines: {node: '>=12'} + dependencies: + '@sinclair/typebox': 0.32.15 + ajv: 8.13.0 + crypto-js: 4.2.0 + dayjs: 1.11.10 + json-schema-to-zod: 0.6.3 + lodash.get: 4.4.2 + lodash.isempty: 4.4.0 + xstate: 5.18.2 + zod: 3.23.4 + dev: false + + /@ballerine/config@1.1.26: + resolution: {integrity: sha512-iHOwUJApE55iwX3m8as6KqKtzqf4kaNq/xM3bKb05YoQzccrubgVYNmwjRIZuWdM/EnuoCFHlbtwRm9rNL8CIw==} + dev: false + + /@ballerine/eslint-config-react@2.0.26(@ballerine/eslint-config@1.1.26)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.33.2): + resolution: {integrity: sha512-HvvTET3b7v6FoesLhpUVb/ClSDPBRqUsPEmD/xZxSs3IWpCYL3nCnsmhz0yDtBCb4MZs18rTeumZEEF0/wJMQw==} + peerDependencies: + '@ballerine/eslint-config': ^1.1.26 + eslint-plugin-react: ^7.33.2 + eslint-plugin-react-hooks: ^4.6.0 + dependencies: + '@ballerine/eslint-config': 1.1.26(@stylistic/eslint-plugin-ts@1.6.2)(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint-config-prettier@9.0.0)(eslint-plugin-prefer-arrow@1.2.3)(eslint-plugin-unused-imports@3.0.0)(eslint@8.54.0) + eslint-plugin-react: 7.33.2(eslint@8.54.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.54.0) + dev: true + + /@ballerine/eslint-config@1.1.26(@stylistic/eslint-plugin-ts@1.6.2)(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint-config-prettier@6.15.0)(eslint-plugin-prefer-arrow@1.2.3)(eslint-plugin-unused-imports@2.0.0)(eslint@8.54.0): + resolution: {integrity: sha512-Z3+vqCyWTB4wWki8s+uNiJVSECHqDVQSSHP6WHiM0uNL42IKnGAr1VifvzNQowRL4TtaxXGoqNXhJqizKQ8SPQ==} + peerDependencies: + '@stylistic/eslint-plugin-ts': ^1.6.2 + '@typescript-eslint/eslint-plugin': ^6.11.0 + '@typescript-eslint/parser': ^6.11.0 + eslint: ^8.53.0 + eslint-config-prettier: ^9.0.0 + eslint-plugin-prefer-arrow: ^1.2.3 + eslint-plugin-unused-imports: ^3.0.0 + dependencies: + '@stylistic/eslint-plugin-ts': 1.6.2(eslint@8.54.0)(typescript@4.9.5) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@4.9.5) + eslint: 8.54.0 + eslint-config-prettier: 6.15.0(eslint@8.54.0) + eslint-plugin-prefer-arrow: 1.2.3(eslint@8.54.0) + eslint-plugin-unused-imports: 2.0.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.54.0) + dev: true + + /@ballerine/eslint-config@1.1.26(@stylistic/eslint-plugin-ts@1.6.2)(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint-config-prettier@8.10.0)(eslint-plugin-prefer-arrow@1.2.3)(eslint-plugin-unused-imports@3.0.0)(eslint@8.54.0): + resolution: {integrity: sha512-Z3+vqCyWTB4wWki8s+uNiJVSECHqDVQSSHP6WHiM0uNL42IKnGAr1VifvzNQowRL4TtaxXGoqNXhJqizKQ8SPQ==} + peerDependencies: + '@stylistic/eslint-plugin-ts': ^1.6.2 + '@typescript-eslint/eslint-plugin': ^6.11.0 + '@typescript-eslint/parser': ^6.11.0 + eslint: ^8.53.0 + eslint-config-prettier: ^9.0.0 + eslint-plugin-prefer-arrow: ^1.2.3 + eslint-plugin-unused-imports: ^3.0.0 + dependencies: + '@stylistic/eslint-plugin-ts': 1.6.2(eslint@8.54.0)(typescript@4.9.3) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0)(typescript@4.9.3) + '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@4.9.3) + eslint: 8.54.0 + eslint-config-prettier: 8.10.0(eslint@8.54.0) + eslint-plugin-prefer-arrow: 1.2.3(eslint@8.54.0) + eslint-plugin-unused-imports: 3.0.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.54.0) + dev: true + + /@ballerine/eslint-config@1.1.26(@stylistic/eslint-plugin-ts@1.6.2)(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint-config-prettier@9.0.0)(eslint-plugin-prefer-arrow@1.2.3)(eslint-plugin-unused-imports@3.0.0)(eslint@8.54.0): + resolution: {integrity: sha512-Z3+vqCyWTB4wWki8s+uNiJVSECHqDVQSSHP6WHiM0uNL42IKnGAr1VifvzNQowRL4TtaxXGoqNXhJqizKQ8SPQ==} + peerDependencies: + '@stylistic/eslint-plugin-ts': ^1.6.2 + '@typescript-eslint/eslint-plugin': ^6.11.0 + '@typescript-eslint/parser': ^6.11.0 + eslint: ^8.53.0 + eslint-config-prettier: ^9.0.0 + eslint-plugin-prefer-arrow: ^1.2.3 + eslint-plugin-unused-imports: ^3.0.0 + dependencies: + '@stylistic/eslint-plugin-ts': 1.6.2(eslint@8.54.0)(typescript@5.1.6) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0)(typescript@5.1.6) + '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@5.1.6) + eslint: 8.54.0 + eslint-config-prettier: 9.0.0(eslint@8.54.0) + eslint-plugin-prefer-arrow: 1.2.3(eslint@8.54.0) + eslint-plugin-unused-imports: 3.0.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.54.0) + dev: true + + /@ballerine/eslint-config@1.1.26(@stylistic/eslint-plugin-ts@1.6.2)(@typescript-eslint/eslint-plugin@6.14.0)(@typescript-eslint/parser@6.14.0)(eslint-config-prettier@9.0.0)(eslint-plugin-prefer-arrow@1.2.3)(eslint-plugin-unused-imports@3.0.0)(eslint@8.56.0): + resolution: {integrity: sha512-Z3+vqCyWTB4wWki8s+uNiJVSECHqDVQSSHP6WHiM0uNL42IKnGAr1VifvzNQowRL4TtaxXGoqNXhJqizKQ8SPQ==} + peerDependencies: + '@stylistic/eslint-plugin-ts': ^1.6.2 + '@typescript-eslint/eslint-plugin': ^6.11.0 + '@typescript-eslint/parser': ^6.11.0 + eslint: ^8.53.0 + eslint-config-prettier: ^9.0.0 + eslint-plugin-prefer-arrow: ^1.2.3 + eslint-plugin-unused-imports: ^3.0.0 + dependencies: + '@stylistic/eslint-plugin-ts': 1.6.2(eslint@8.56.0)(typescript@5.5.4) + '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.5.4) + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.5.4) + eslint: 8.56.0 + eslint-config-prettier: 9.0.0(eslint@8.56.0) + eslint-plugin-prefer-arrow: 1.2.3(eslint@8.56.0) + eslint-plugin-unused-imports: 3.0.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0) + dev: false + + /@ballerine/eslint-config@1.1.26(@stylistic/eslint-plugin-ts@1.6.2)(@typescript-eslint/parser@6.14.0)(eslint-config-prettier@9.0.0)(eslint-plugin-prefer-arrow@1.2.3)(eslint-plugin-unused-imports@3.0.0)(eslint@8.54.0): + resolution: {integrity: sha512-Z3+vqCyWTB4wWki8s+uNiJVSECHqDVQSSHP6WHiM0uNL42IKnGAr1VifvzNQowRL4TtaxXGoqNXhJqizKQ8SPQ==} + peerDependencies: + '@stylistic/eslint-plugin-ts': ^1.6.2 + '@typescript-eslint/eslint-plugin': ^6.11.0 + '@typescript-eslint/parser': ^6.11.0 + eslint: ^8.53.0 + eslint-config-prettier: ^9.0.0 + eslint-plugin-prefer-arrow: ^1.2.3 + eslint-plugin-unused-imports: ^3.0.0 + dependencies: + '@stylistic/eslint-plugin-ts': 1.6.2(eslint@8.54.0)(typescript@5.5.4) + '@typescript-eslint/parser': 6.14.0(eslint@8.54.0)(typescript@5.5.4) + eslint: 8.54.0 + eslint-config-prettier: 9.0.0(eslint@8.54.0) + eslint-plugin-prefer-arrow: 1.2.3(eslint@8.54.0) + eslint-plugin-unused-imports: 3.0.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.54.0) + dev: true + + /@ballerine/react-pdf-toolkit@1.2.49(@babel/runtime@7.23.8)(@mui/system@5.15.6)(@types/react-dom@18.2.15)(@types/react@18.2.37)(date-fns@3.6.0)(react-dom@18.2.0)(react-pdf-tailwind@2.2.1)(react@18.2.0): + resolution: {integrity: sha512-O4fUVeywDxUjbAlCK0tqjeRZk9vJfRJKHM8tDI9M97Dz8EAGVjCfnEMf2+ymdOyprd/cQIfXgZ6ZtVcLKnolyw==} + peerDependencies: + react: ^18.2.0 + react-dom: ^18.2.0 + react-pdf-tailwind: ^2.2.1 + dependencies: + '@ballerine/config': 1.1.26 + '@ballerine/ui': 0.5.49(@babel/runtime@7.23.8)(@mui/system@5.15.6)(@types/react-dom@18.2.15)(@types/react@18.2.37)(date-fns@3.6.0) + '@react-pdf/renderer': 3.1.14(react@18.2.0) + '@sinclair/typebox': 0.31.26 + ajv: 8.13.0 + ajv-formats: 2.1.1(ajv@8.13.0) + class-variance-authority: 0.7.1 + dayjs: 1.11.10 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-pdf-tailwind: 2.2.1(react@18.2.0)(ts-node@10.9.1) + string-ts: 1.3.3 + transitivePeerDependencies: + - '@babel/runtime' + - '@mui/system' + - '@types/react' + - '@types/react-dom' + - date-fns + - date-fns-jalali + - encoding + - luxon + - moment + - moment-hijri + - moment-jalaali + - supports-color + dev: false + + /@ballerine/react-pdf-toolkit@1.2.49(@babel/runtime@7.23.8)(@mui/system@5.15.6)(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react-pdf-tailwind@2.2.1)(react@18.2.0): + resolution: {integrity: sha512-O4fUVeywDxUjbAlCK0tqjeRZk9vJfRJKHM8tDI9M97Dz8EAGVjCfnEMf2+ymdOyprd/cQIfXgZ6ZtVcLKnolyw==} + peerDependencies: + react: ^18.2.0 + react-dom: ^18.2.0 + react-pdf-tailwind: ^2.2.1 + dependencies: + '@ballerine/config': 1.1.26 + '@ballerine/ui': 0.5.49(@babel/runtime@7.23.8)(@mui/system@5.15.6)(@types/react-dom@18.2.17)(@types/react@18.2.43) + '@react-pdf/renderer': 3.1.14(react@18.2.0) + '@sinclair/typebox': 0.31.26 + ajv: 8.13.0 + ajv-formats: 2.1.1(ajv@8.13.0) + class-variance-authority: 0.7.0 + dayjs: 1.11.10 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-pdf-tailwind: 2.2.1(react@18.2.0)(ts-node@10.9.1) + string-ts: 1.3.3 + transitivePeerDependencies: + - '@babel/runtime' + - '@mui/system' + - '@types/react' + - '@types/react-dom' + - date-fns + - date-fns-jalali + - encoding + - luxon + - moment + - moment-hijri + - moment-jalaali + - supports-color + dev: false + + /@ballerine/ui@0.5.49(@babel/runtime@7.23.8)(@mui/system@5.15.6)(@types/react-dom@18.2.15)(@types/react@18.2.37)(date-fns@3.6.0): + resolution: {integrity: sha512-BqUub6zIED4TMXs16PPH1nyR2FRzFTfI28urN7Ft6d2NIugEjXXAuBcqHz+oJ5AGf681szUqGrosKrkRcA4jWg==} + dependencies: + '@ballerine/common': 0.9.56 + '@emotion/react': 11.11.1(@types/react@18.2.37)(react@18.2.0) + '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.37)(react@18.2.0) + '@mui/material': 5.14.18(@emotion/react@11.11.1)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0) + '@mui/x-date-pickers': 6.18.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@mui/material@5.14.18)(@mui/system@5.15.6)(@types/react@18.2.37)(date-fns@3.6.0)(dayjs@1.11.10)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-accordion': 1.1.2(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-checkbox': 1.0.4(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-collapsible': 1.0.3(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-dialog': 1.0.4(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-dropdown-menu': 2.0.6(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-hover-card': 1.0.7(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-icons': 1.3.0(react@18.2.0) + '@radix-ui/react-label': 2.0.2(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-popover': 1.0.7(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-radio-group': 1.1.3(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-scroll-area': 1.0.5(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.1.0(@types/react@18.2.37)(react@18.2.0) + '@rjsf/core': 5.14.2(@rjsf/utils@5.14.2)(react@18.2.0) + '@rjsf/utils': 5.14.2(react@18.2.0) + '@rjsf/validator-ajv8': 5.14.2(@rjsf/utils@5.14.2) + '@tanstack/react-table': 8.10.7(react-dom@18.2.0)(react@18.2.0) + class-variance-authority: 0.6.1 + clsx: 1.2.1 + cmdk: 0.2.0(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0) + dayjs: 1.11.10 + i18n-iso-countries: 7.7.0 + lodash: 4.17.21 + lucide-react: 0.144.0(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-error-boundary: 4.0.13(react@18.2.0) + react-image: 4.1.0(@babel/runtime@7.23.8)(react-dom@18.2.0)(react@18.2.0) + react-json-view: 1.21.3(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0) + react-phone-input-2: 2.15.1(react-dom@18.2.0)(react@18.2.0) + string-ts: 1.3.3 + tailwind-merge: 1.14.0 + zod: 3.23.4 + transitivePeerDependencies: + - '@babel/runtime' + - '@mui/system' + - '@types/react' + - '@types/react-dom' + - date-fns + - date-fns-jalali + - encoding + - luxon + - moment + - moment-hijri + - moment-jalaali + - supports-color + dev: false + + /@ballerine/ui@0.5.49(@babel/runtime@7.23.8)(@mui/system@5.15.6)(@types/react-dom@18.2.17)(@types/react@18.2.43): + resolution: {integrity: sha512-BqUub6zIED4TMXs16PPH1nyR2FRzFTfI28urN7Ft6d2NIugEjXXAuBcqHz+oJ5AGf681szUqGrosKrkRcA4jWg==} + dependencies: + '@ballerine/common': 0.9.56 + '@emotion/react': 11.11.1(@types/react@18.2.43)(react@18.2.0) + '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.43)(react@18.2.0) + '@mui/material': 5.14.18(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@mui/x-date-pickers': 6.18.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@mui/material@5.14.18)(@mui/system@5.15.6)(@types/react@18.2.43)(dayjs@1.11.10)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-accordion': 1.1.2(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-checkbox': 1.0.4(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-collapsible': 1.0.3(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-dialog': 1.0.4(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-dropdown-menu': 2.0.6(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-hover-card': 1.0.7(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-icons': 1.3.0(react@18.2.0) + '@radix-ui/react-label': 2.0.2(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-popover': 1.0.7(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-radio-group': 1.1.3(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-scroll-area': 1.0.5(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.1.0(@types/react@18.2.43)(react@18.2.0) + '@rjsf/core': 5.14.2(@rjsf/utils@5.14.2)(react@18.2.0) + '@rjsf/utils': 5.14.2(react@18.2.0) + '@rjsf/validator-ajv8': 5.14.2(@rjsf/utils@5.14.2) + '@tanstack/react-table': 8.10.7(react-dom@18.2.0)(react@18.2.0) + class-variance-authority: 0.6.1 + clsx: 1.2.1 + cmdk: 0.2.0(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + dayjs: 1.11.10 + i18n-iso-countries: 7.7.0 + lodash: 4.17.21 + lucide-react: 0.144.0(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-error-boundary: 4.0.13(react@18.2.0) + react-image: 4.1.0(@babel/runtime@7.23.8)(react-dom@18.2.0)(react@18.2.0) + react-json-view: 1.21.3(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + react-phone-input-2: 2.15.1(react-dom@18.2.0)(react@18.2.0) + string-ts: 1.3.3 + tailwind-merge: 1.14.0 + zod: 3.23.4 + transitivePeerDependencies: + - '@babel/runtime' + - '@mui/system' + - '@types/react' + - '@types/react-dom' + - date-fns + - date-fns-jalali + - encoding + - luxon + - moment + - moment-hijri + - moment-jalaali + - supports-color + dev: false + /@base2/pretty-print-object@1.0.1: resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} dev: true @@ -8252,7 +8559,7 @@ packages: /@emotion/babel-plugin@11.11.0: resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} dependencies: - '@babel/helper-module-imports': 7.22.15 + '@babel/helper-module-imports': 7.24.7 '@babel/runtime': 7.23.8 '@emotion/hash': 0.9.1 '@emotion/memoize': 0.8.1 @@ -8263,6 +8570,8 @@ packages: find-root: 1.1.0 source-map: 0.5.7 stylis: 4.2.0 + transitivePeerDependencies: + - supports-color dev: false /@emotion/cache@11.11.0: @@ -8322,6 +8631,31 @@ packages: '@types/react': 18.2.37 hoist-non-react-statics: 3.3.2 react: 18.2.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@emotion/react@11.11.1(@types/react@18.2.43)(react@18.2.0): + resolution: {integrity: sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==} + peerDependencies: + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.8 + '@emotion/babel-plugin': 11.11.0 + '@emotion/cache': 11.11.0 + '@emotion/serialize': 1.1.2 + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) + '@emotion/utils': 1.2.1 + '@emotion/weak-memoize': 0.3.1 + '@types/react': 18.2.43 + hoist-non-react-statics: 3.3.2 + react: 18.2.0 + transitivePeerDependencies: + - supports-color dev: false /@emotion/serialize@1.1.2: @@ -8357,6 +8691,31 @@ packages: '@emotion/utils': 1.2.1 '@types/react': 18.2.37 react: 18.2.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@emotion/styled@11.11.0(@emotion/react@11.11.1)(@types/react@18.2.43)(react@18.2.0): + resolution: {integrity: sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==} + peerDependencies: + '@emotion/react': ^11.0.0-rc.0 + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.8 + '@emotion/babel-plugin': 11.11.0 + '@emotion/is-prop-valid': 1.2.1 + '@emotion/react': 11.11.1(@types/react@18.2.43)(react@18.2.0) + '@emotion/serialize': 1.1.2 + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) + '@emotion/utils': 1.2.1 + '@types/react': 18.2.43 + react: 18.2.0 + transitivePeerDependencies: + - supports-color dev: false /@emotion/unitless@0.8.1: @@ -10158,7 +10517,6 @@ packages: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 - dev: true /@jridgewell/resolve-uri@3.1.1: resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} @@ -10171,7 +10529,6 @@ packages: /@jridgewell/set-array@1.2.1: resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/source-map@0.3.5: resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} @@ -10204,7 +10561,6 @@ packages: dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.5.0 - dev: true /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} @@ -10523,6 +10879,29 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@mui/base@5.0.0-beta.24(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-bKt2pUADHGQtqWDZ8nvL2Lvg2GNJyd/ZUgZAJoYzRgmnxBL9j36MSlS3+exEdYkikcnvVafcBtD904RypFKb0w==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.8 + '@floating-ui/react-dom': 2.1.0(react-dom@18.2.0)(react@18.2.0) + '@mui/types': 7.2.13(@types/react@18.2.43) + '@mui/utils': 5.15.6(@types/react@18.2.43)(react@18.2.0) + '@popperjs/core': 2.11.8 + '@types/react': 18.2.43 + clsx: 2.1.1 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@mui/core-downloads-tracker@5.14.18: resolution: {integrity: sha512-yFpF35fEVDV81nVktu0BE9qn2dD/chs7PsQhlyaV3EnTeZi9RZBuvoEfRym1/jmhJ2tcfeWXiRuHG942mQXJJQ==} dev: false @@ -10554,7 +10933,78 @@ packages: '@mui/utils': 5.15.6(@types/react@18.2.37)(react@18.2.0) '@types/react': 18.2.37 '@types/react-transition-group': 4.4.9 - clsx: 2.1.0 + clsx: 2.1.1 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-is: 18.2.0 + react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) + dev: false + + /@mui/material@5.14.18(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-y3UiR/JqrkF5xZR0sIKj6y7xwuEiweh9peiN3Zfjy1gXWXhz5wjlaLdoxFfKIEBUFfeQALxr/Y8avlHH+B9lpQ==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@types/react': ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.8 + '@emotion/react': 11.11.1(@types/react@18.2.43)(react@18.2.0) + '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.43)(react@18.2.0) + '@mui/base': 5.0.0-beta.24(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@mui/core-downloads-tracker': 5.14.18 + '@mui/system': 5.15.6(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.43)(react@18.2.0) + '@mui/types': 7.2.13(@types/react@18.2.43) + '@mui/utils': 5.15.6(@types/react@18.2.43)(react@18.2.0) + '@types/react': 18.2.43 + '@types/react-transition-group': 4.4.9 + clsx: 2.1.1 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-is: 18.2.0 + react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) + dev: false + + /@mui/material@5.14.18(@emotion/react@11.11.1)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-y3UiR/JqrkF5xZR0sIKj6y7xwuEiweh9peiN3Zfjy1gXWXhz5wjlaLdoxFfKIEBUFfeQALxr/Y8avlHH+B9lpQ==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@types/react': ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.8 + '@emotion/react': 11.11.1(@types/react@18.2.37)(react@18.2.0) + '@mui/base': 5.0.0-beta.24(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0) + '@mui/core-downloads-tracker': 5.14.18 + '@mui/system': 5.15.6(@emotion/react@11.11.1)(@types/react@18.2.37)(react@18.2.0) + '@mui/types': 7.2.13(@types/react@18.2.37) + '@mui/utils': 5.15.6(@types/react@18.2.37)(react@18.2.0) + '@types/react': 18.2.37 + '@types/react-transition-group': 4.4.9 + clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 react: 18.2.0 @@ -10580,6 +11030,23 @@ packages: react: 18.2.0 dev: false + /@mui/private-theming@5.15.6(@types/react@18.2.43)(react@18.2.0): + resolution: {integrity: sha512-ZBX9E6VNUSscUOtU8uU462VvpvBS7eFl5VfxAzTRVQBHflzL+5KtnGrebgf6Nd6cdvxa1o0OomiaxSKoN2XDmg==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.8 + '@mui/utils': 5.15.6(@types/react@18.2.43)(react@18.2.0) + '@types/react': 18.2.43 + prop-types: 15.8.1 + react: 18.2.0 + dev: false + /@mui/styled-engine@5.15.6(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0): resolution: {integrity: sha512-KAn8P8xP/WigFKMlEYUpU9z2o7jJnv0BG28Qu1dhNQVutsLVIFdRf5Nb+0ijp2qgtcmygQ0FtfRuXv5LYetZTg==} engines: {node: '>=12.0.0'} @@ -10602,6 +11069,27 @@ packages: react: 18.2.0 dev: false + /@mui/styled-engine@5.15.6(@emotion/react@11.11.1)(react@18.2.0): + resolution: {integrity: sha512-KAn8P8xP/WigFKMlEYUpU9z2o7jJnv0BG28Qu1dhNQVutsLVIFdRf5Nb+0ijp2qgtcmygQ0FtfRuXv5LYetZTg==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@emotion/react': ^11.4.1 + '@emotion/styled': ^11.3.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + dependencies: + '@babel/runtime': 7.23.8 + '@emotion/cache': 11.11.0 + '@emotion/react': 11.11.1(@types/react@18.2.43)(react@18.2.0) + csstype: 3.1.3 + prop-types: 15.8.1 + react: 18.2.0 + dev: false + /@mui/system@5.15.6(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.37)(react@18.2.0): resolution: {integrity: sha512-J01D//u8IfXvaEHMBQX5aO2l7Q+P15nt96c4NskX7yp5/+UuZP8XCQJhtBtLuj+M2LLyXHYGmCPeblsmmscP2Q==} engines: {node: '>=12.0.0'} @@ -10632,6 +11120,65 @@ packages: react: 18.2.0 dev: false + /@mui/system@5.15.6(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.43)(react@18.2.0): + resolution: {integrity: sha512-J01D//u8IfXvaEHMBQX5aO2l7Q+P15nt96c4NskX7yp5/+UuZP8XCQJhtBtLuj+M2LLyXHYGmCPeblsmmscP2Q==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@types/react': ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.8 + '@emotion/react': 11.11.1(@types/react@18.2.43)(react@18.2.0) + '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.43)(react@18.2.0) + '@mui/private-theming': 5.15.6(@types/react@18.2.43)(react@18.2.0) + '@mui/styled-engine': 5.15.6(@emotion/react@11.11.1)(react@18.2.0) + '@mui/types': 7.2.13(@types/react@18.2.43) + '@mui/utils': 5.15.6(@types/react@18.2.43)(react@18.2.0) + '@types/react': 18.2.43 + clsx: 2.1.1 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 18.2.0 + dev: false + + /@mui/system@5.15.6(@emotion/react@11.11.1)(@types/react@18.2.37)(react@18.2.0): + resolution: {integrity: sha512-J01D//u8IfXvaEHMBQX5aO2l7Q+P15nt96c4NskX7yp5/+UuZP8XCQJhtBtLuj+M2LLyXHYGmCPeblsmmscP2Q==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@types/react': ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.8 + '@emotion/react': 11.11.1(@types/react@18.2.37)(react@18.2.0) + '@mui/private-theming': 5.15.6(@types/react@18.2.37)(react@18.2.0) + '@mui/styled-engine': 5.15.6(@emotion/react@11.11.1)(react@18.2.0) + '@mui/types': 7.2.13(@types/react@18.2.37) + '@mui/utils': 5.15.6(@types/react@18.2.37)(react@18.2.0) + '@types/react': 18.2.37 + clsx: 2.1.1 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 18.2.0 + dev: false + /@mui/types@7.2.13(@types/react@18.2.37): resolution: {integrity: sha512-qP9OgacN62s+l8rdDhSFRe05HWtLLJ5TGclC9I1+tQngbssu0m2dmFZs+Px53AcOs9fD7TbYd4gc9AXzVqO/+g==} peerDependencies: @@ -10643,6 +11190,17 @@ packages: '@types/react': 18.2.37 dev: false + /@mui/types@7.2.13(@types/react@18.2.43): + resolution: {integrity: sha512-qP9OgacN62s+l8rdDhSFRe05HWtLLJ5TGclC9I1+tQngbssu0m2dmFZs+Px53AcOs9fD7TbYd4gc9AXzVqO/+g==} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.43 + dev: false + /@mui/utils@5.15.6(@types/react@18.2.37)(react@18.2.0): resolution: {integrity: sha512-qfEhf+zfU9aQdbzo1qrSWlbPQhH1nCgeYgwhOVnj9Bn39shJQitEnXpSQpSNag8+uty5Od6PxmlNKPTnPySRKA==} engines: {node: '>=12.0.0'} @@ -10661,6 +11219,80 @@ packages: react-is: 18.2.0 dev: false + /@mui/utils@5.15.6(@types/react@18.2.43)(react@18.2.0): + resolution: {integrity: sha512-qfEhf+zfU9aQdbzo1qrSWlbPQhH1nCgeYgwhOVnj9Bn39shJQitEnXpSQpSNag8+uty5Od6PxmlNKPTnPySRKA==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.23.8 + '@types/prop-types': 15.7.11 + '@types/react': 18.2.43 + prop-types: 15.8.1 + react: 18.2.0 + react-is: 18.2.0 + dev: false + + /@mui/x-date-pickers@6.18.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@mui/material@5.14.18)(@mui/system@5.15.6)(@types/react@18.2.37)(date-fns@3.6.0)(dayjs@1.11.10)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-22gWCzejBGG4Kycpk/yYhzV6Pj/xVBvaz5A1rQmCD/0DCXTDJvXPG8qvzrNlp1wj8q+rAQO82e/+conUGgYgYg==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@emotion/react': ^11.9.0 + '@emotion/styled': ^11.8.1 + '@mui/material': ^5.8.6 + '@mui/system': ^5.8.0 + date-fns: ^2.25.0 + date-fns-jalali: ^2.13.0-0 + dayjs: ^1.10.7 + luxon: ^3.0.2 + moment: ^2.29.4 + moment-hijri: ^2.1.2 + moment-jalaali: ^0.7.4 || ^0.8.0 || ^0.9.0 || ^0.10.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + date-fns: + optional: true + date-fns-jalali: + optional: true + dayjs: + optional: true + luxon: + optional: true + moment: + optional: true + moment-hijri: + optional: true + moment-jalaali: + optional: true + dependencies: + '@babel/runtime': 7.23.8 + '@emotion/react': 11.11.1(@types/react@18.2.37)(react@18.2.0) + '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.37)(react@18.2.0) + '@mui/base': 5.0.0-beta.24(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0) + '@mui/material': 5.14.18(@emotion/react@11.11.1)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0) + '@mui/system': 5.15.6(@emotion/react@11.11.1)(@types/react@18.2.37)(react@18.2.0) + '@mui/utils': 5.15.6(@types/react@18.2.37)(react@18.2.0) + '@types/react-transition-group': 4.4.9 + clsx: 2.1.1 + date-fns: 3.6.0 + dayjs: 1.11.10 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + dev: false + /@mui/x-date-pickers@6.18.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@mui/material@5.14.18)(@mui/system@5.15.6)(@types/react@18.2.37)(dayjs@1.11.10)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-22gWCzejBGG4Kycpk/yYhzV6Pj/xVBvaz5A1rQmCD/0DCXTDJvXPG8qvzrNlp1wj8q+rAQO82e/+conUGgYgYg==} engines: {node: '>=14.0.0'} @@ -10716,6 +11348,61 @@ packages: - '@types/react' dev: false + /@mui/x-date-pickers@6.18.1(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@mui/material@5.14.18)(@mui/system@5.15.6)(@types/react@18.2.43)(dayjs@1.11.10)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-22gWCzejBGG4Kycpk/yYhzV6Pj/xVBvaz5A1rQmCD/0DCXTDJvXPG8qvzrNlp1wj8q+rAQO82e/+conUGgYgYg==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@emotion/react': ^11.9.0 + '@emotion/styled': ^11.8.1 + '@mui/material': ^5.8.6 + '@mui/system': ^5.8.0 + date-fns: ^2.25.0 + date-fns-jalali: ^2.13.0-0 + dayjs: ^1.10.7 + luxon: ^3.0.2 + moment: ^2.29.4 + moment-hijri: ^2.1.2 + moment-jalaali: ^0.7.4 || ^0.8.0 || ^0.9.0 || ^0.10.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + date-fns: + optional: true + date-fns-jalali: + optional: true + dayjs: + optional: true + luxon: + optional: true + moment: + optional: true + moment-hijri: + optional: true + moment-jalaali: + optional: true + dependencies: + '@babel/runtime': 7.23.8 + '@emotion/react': 11.11.1(@types/react@18.2.43)(react@18.2.0) + '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.43)(react@18.2.0) + '@mui/base': 5.0.0-beta.24(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@mui/material': 5.14.18(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@mui/system': 5.15.6(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.43)(react@18.2.0) + '@mui/utils': 5.15.6(@types/react@18.2.43)(react@18.2.0) + '@types/react-transition-group': 4.4.9 + clsx: 2.1.1 + dayjs: 1.11.10 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + dev: false + /@ndelangen/get-tarball@3.0.9: resolution: {integrity: sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA==} dependencies: @@ -11396,6 +12083,35 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-accordion@1.1.2(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-fDG7jcoNKVjSK6yfmuAs0EnPDro0WMXIhMtXdTBWqEioVW206ku+4Lw07e+13lUkFkpoEQ2PdeMIAGpdqEAmDg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.8 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collapsible': 1.0.3(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@types/react': 18.2.43 + '@types/react-dom': 18.2.17 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-arrow@1.0.1(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-1yientwXqXcErDHEv8av9ZVNEBldH8L9scVR3is20lL+jOCfcJyMFZFEY5cgIrgexsq1qggSXqiEL/d/4f+QXA==} peerDependencies: @@ -11447,7 +12163,6 @@ packages: '@types/react-dom': 18.2.17 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true /@radix-ui/react-aspect-ratio@1.0.3(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-fXR5kbMan9oQqMuacfzlGG/SQMcmMlZ4wrvpckv8SgUulD0MMpspxJrxg/Gp/ISV3JfV1AeSWTYK9GvxA4ySwA==} @@ -11522,6 +12237,34 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-checkbox@1.0.4(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-CBuGQa52aAYnADZVt/KBQzXrwx6TqnlwtcIPGtVt5JkkzQwMOLJjPukimhfKEr4GQNd43C+djUh5Ikopj8pSLg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.8 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@types/react': 18.2.43 + '@types/react-dom': 18.2.17 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-collapsible@1.0.3(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg==} peerDependencies: @@ -11550,6 +12293,34 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-collapsible@1.0.3(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.8 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@types/react': 18.2.43 + '@types/react-dom': 18.2.17 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} peerDependencies: @@ -11595,7 +12366,6 @@ packages: '@types/react-dom': 18.2.17 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true /@radix-ui/react-collection@1.1.0(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==} @@ -11654,7 +12424,6 @@ packages: '@babel/runtime': 7.23.8 '@types/react': 18.2.43 react: 18.2.0 - dev: true /@radix-ui/react-compose-refs@1.1.0(@types/react@18.2.37)(react@18.2.0): resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==} @@ -11669,6 +12438,19 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-compose-refs@1.1.0(@types/react@18.2.43)(react@18.2.0): + resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.43 + react: 18.2.0 + dev: false + /@radix-ui/react-context@1.0.0(react@18.2.0): resolution: {integrity: sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==} peerDependencies: @@ -11703,7 +12485,6 @@ packages: '@babel/runtime': 7.23.8 '@types/react': 18.2.43 react: 18.2.0 - dev: true /@radix-ui/react-context@1.1.0(@types/react@18.2.37)(react@18.2.0): resolution: {integrity: sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==} @@ -11745,6 +12526,33 @@ packages: - '@types/react' dev: false + /@radix-ui/react-dialog@1.0.0(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Yn9YU+QlHYLWwV1XfKiqnGVpWYWk6MeBVM6x/bcoyPvxgjQGoeT35482viLPctTMWoMw0PoHgqfSox7Ig+957Q==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.23.8 + '@radix-ui/primitive': 1.0.0 + '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0) + '@radix-ui/react-context': 1.0.0(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.0(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.0(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.0(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.0(react@18.2.0) + '@radix-ui/react-portal': 1.0.0(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.0(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.0(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.0(react@18.2.0) + aria-hidden: 1.2.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.4(@types/react@18.2.43)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + dev: false + /@radix-ui/react-dialog@1.0.4(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-hJtRy/jPULGQZceSAP2Re6/4NpKo8im6V8P2hUqZsdFiSL8l35kYsw3qbRI6Ay5mQd2+wlLqje770eq+RJ3yZg==} peerDependencies: @@ -11779,6 +12587,40 @@ packages: react-remove-scroll: 2.5.5(@types/react@18.2.37)(react@18.2.0) dev: false + /@radix-ui/react-dialog@1.0.4(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-hJtRy/jPULGQZceSAP2Re6/4NpKo8im6V8P2hUqZsdFiSL8l35kYsw3qbRI6Ay5mQd2+wlLqje770eq+RJ3yZg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.8 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@types/react': 18.2.43 + '@types/react-dom': 18.2.17 + aria-hidden: 1.2.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.2.43)(react@18.2.0) + dev: false + /@radix-ui/react-direction@1.0.1(@types/react@18.2.37)(react@18.2.0): resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} peerDependencies: @@ -11804,7 +12646,6 @@ packages: '@babel/runtime': 7.23.8 '@types/react': 18.2.43 react: 18.2.0 - dev: true /@radix-ui/react-direction@1.1.0(@types/react@18.2.37)(react@18.2.0): resolution: {integrity: sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==} @@ -11898,7 +12739,6 @@ packages: '@types/react-dom': 18.2.17 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true /@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==} @@ -11925,6 +12765,31 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.8 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.43)(react@18.2.0) + '@types/react': 18.2.43 + '@types/react-dom': 18.2.17 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-dropdown-menu@2.0.6(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA==} peerDependencies: @@ -11952,6 +12817,33 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-dropdown-menu@2.0.6(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.2 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-menu': 2.0.6(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@types/react': 18.2.43 + '@types/react-dom': 18.2.17 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-focus-guards@1.0.0(react@18.2.0): resolution: {integrity: sha512-UagjDk4ijOAnGu4WMUPj9ahi7/zJJqNZ9ZAiGPp7waUWJO0O1aWXi/udPphI0IUjvrhBsZJGSN66dR2dsueLWQ==} peerDependencies: @@ -11986,7 +12878,6 @@ packages: '@babel/runtime': 7.23.8 '@types/react': 18.2.43 react: 18.2.0 - dev: true /@radix-ui/react-focus-scope@1.0.0(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-C4SWtsULLGf/2L4oGeIHlvWQx7Rf+7cX/vKOAD2dXW0A1b5QXwi3wWeaEgW+wn+SEVrraMUk05vLU9fZZz5HbQ==} @@ -12045,7 +12936,6 @@ packages: '@types/react-dom': 18.2.17 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true /@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==} @@ -12070,6 +12960,29 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.8 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@types/react': 18.2.43 + '@types/react-dom': 18.2.17 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-hover-card@1.0.2(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-LOqJAHdjjLoIhOCHdFO5ASkNACG/wwPQljzrm4U53n1Uxa1Crheazs82dST1946zgu4p0U4IrFmuQ6PTODIlkw==} peerDependencies: @@ -12121,6 +13034,35 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-hover-card@1.0.7(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-OcUN2FU0YpmajD/qkph3XzMcK/NmSk9hGWnjV68p6QiZMgILugusgQwnLSDs3oFSJYGKf3Y49zgFedhGh04k9A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.8 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@types/react': 18.2.43 + '@types/react-dom': 18.2.17 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-icons@1.3.0(react@18.2.0): resolution: {integrity: sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==} peerDependencies: @@ -12166,7 +13108,6 @@ packages: '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.43)(react@18.2.0) '@types/react': 18.2.43 react: 18.2.0 - dev: true /@radix-ui/react-id@1.1.0(@types/react@18.2.37)(react@18.2.0): resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==} @@ -12195,7 +13136,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.2 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0) '@types/react': 18.2.37 '@types/react-dom': 18.2.15 @@ -12203,6 +13144,27 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-label@2.0.2(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.8 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.43 + '@types/react-dom': 18.2.17 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-menu@2.0.6(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-BVkFLS+bUC8HcImkRKPSiVumA1VPOOEC5WBMiT+QAVsPzW1FJzI9KnqgGxVDPBcql5xXrHkD3JOVoXWEXD8SYA==} peerDependencies: @@ -12241,6 +13203,44 @@ packages: react-remove-scroll: 2.5.5(@types/react@18.2.37)(react@18.2.0) dev: false + /@radix-ui/react-menu@2.0.6(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-BVkFLS+bUC8HcImkRKPSiVumA1VPOOEC5WBMiT+QAVsPzW1FJzI9KnqgGxVDPBcql5xXrHkD3JOVoXWEXD8SYA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.8 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@types/react': 18.2.43 + '@types/react-dom': 18.2.17 + aria-hidden: 1.2.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.2.43)(react@18.2.0) + dev: false + /@radix-ui/react-popover@1.0.7(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-shtvVnlsxT6faMnK/a7n0wptwBD23xc1Z5mdrtKLwVEfsEMXodS0r5s0/g5P0hX//EKYZS2sxUjqfzlg52ZSnQ==} peerDependencies: @@ -12276,6 +13276,41 @@ packages: react-remove-scroll: 2.5.5(@types/react@18.2.37)(react@18.2.0) dev: false + /@radix-ui/react-popover@1.0.7(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-shtvVnlsxT6faMnK/a7n0wptwBD23xc1Z5mdrtKLwVEfsEMXodS0r5s0/g5P0hX//EKYZS2sxUjqfzlg52ZSnQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.8 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@types/react': 18.2.43 + '@types/react-dom': 18.2.17 + aria-hidden: 1.2.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.2.43)(react@18.2.0) + dev: false + /@radix-ui/react-popper@1.0.1(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-J4Vj7k3k+EHNWgcKrE+BLlQfpewxA7Zd76h5I0bIa+/EqaIZ3DuwrbPj49O3wqN+STnXsBuxiHLiF0iU3yfovw==} peerDependencies: @@ -12387,6 +13422,36 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-popper@1.1.3(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.8 + '@floating-ui/react-dom': 2.1.0(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/rect': 1.0.1 + '@types/react': 18.2.43 + '@types/react-dom': 18.2.17 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-portal@1.0.0(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-a8qyFO/Xb99d8wQdu4o7qnigNjTPG123uADNecz0eX4usnQEj7o+cG4ZX4zkqq98NYekT7UoEQIjxBNWIFuqTA==} peerDependencies: @@ -12450,7 +13515,6 @@ packages: '@types/react-dom': 18.2.17 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true /@radix-ui/react-portal@1.0.4(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==} @@ -12473,6 +13537,27 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-portal@1.0.4(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.8 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.43 + '@types/react-dom': 18.2.17 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-presence@1.0.0(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==} peerDependencies: @@ -12508,6 +13593,28 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.8 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@types/react': 18.2.43 + '@types/react-dom': 18.2.17 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-primitive@1.0.0(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==} peerDependencies: @@ -12571,7 +13678,6 @@ packages: '@types/react-dom': 18.2.17 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true /@radix-ui/react-primitive@2.0.0(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==} @@ -12623,6 +13729,36 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-radio-group@1.1.3(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-x+yELayyefNeKeTx4fjK6j99Fs6c4qKm3aY38G3swQVTN6xMpsrbigC0uHs2L//g8q4qR7qOcww8430jJmi2ag==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.8 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@types/react': 18.2.43 + '@types/react-dom': 18.2.17 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} peerDependencies: @@ -12678,7 +13814,6 @@ packages: '@types/react-dom': 18.2.17 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true /@radix-ui/react-roving-focus@1.1.0(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==} @@ -12737,6 +13872,35 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-scroll-area@1.0.5(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-b6PAgH4GQf9QEn8zbT2XUHpW5z8BzqEc7Kl11TwDrvuTrxlkcjTD5qa/bxgKr+nmuXKu4L/W5UZ4mlP/VG/5Gw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.8 + '@radix-ui/number': 1.0.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.17)(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.43)(react@18.2.0) + '@types/react': 18.2.43 + '@types/react-dom': 18.2.17 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-select@1.2.2(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw==} peerDependencies: @@ -12946,7 +14110,6 @@ packages: '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.43)(react@18.2.0) '@types/react': 18.2.43 react: 18.2.0 - dev: true /@radix-ui/react-slot@1.1.0(@types/react@18.2.37)(react@18.2.0): resolution: {integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==} @@ -12962,6 +14125,20 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-slot@1.1.0(@types/react@18.2.43)(react@18.2.0): + resolution: {integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.2.43)(react@18.2.0) + '@types/react': 18.2.43 + react: 18.2.0 + dev: false + /@radix-ui/react-switch@1.0.3(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-mxm87F88HyHztsI7N+ZUmEoARGkC22YVW5CaC+Byc+HRpuvCrOBPTAnXgf+tZ/7i0Sg/eOePGdMhUKhPaQEqow==} peerDependencies: @@ -13337,7 +14514,6 @@ packages: '@babel/runtime': 7.23.8 '@types/react': 18.2.43 react: 18.2.0 - dev: true /@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.2.37)(react@18.2.0): resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} @@ -13389,7 +14565,6 @@ packages: '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.43)(react@18.2.0) '@types/react': 18.2.43 react: 18.2.0 - dev: true /@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.2.37)(react@18.2.0): resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==} @@ -13452,7 +14627,6 @@ packages: '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.43)(react@18.2.0) '@types/react': 18.2.43 react: 18.2.0 - dev: true /@radix-ui/react-use-layout-effect@1.0.0(react@18.2.0): resolution: {integrity: sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==} @@ -13488,7 +14662,6 @@ packages: '@babel/runtime': 7.23.8 '@types/react': 18.2.43 react: 18.2.0 - dev: true /@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.2.37)(react@18.2.0): resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==} @@ -13528,7 +14701,6 @@ packages: '@babel/runtime': 7.23.8 '@types/react': 18.2.43 react: 18.2.0 - dev: true /@radix-ui/react-use-rect@1.0.0(react@18.2.0): resolution: {integrity: sha512-TB7pID8NRMEHxb/qQJpvSt3hQU4sqNPM1VCTjTRjEOa7cEop/QMuq8S6fb/5Tsz64kqSvB9WnwsDHtjnrM9qew==} @@ -13567,7 +14739,6 @@ packages: '@radix-ui/rect': 1.0.1 '@types/react': 18.2.43 react: 18.2.0 - dev: true /@radix-ui/react-use-size@1.0.0(react@18.2.0): resolution: {integrity: sha512-imZ3aYcoYCKhhgNpkNDh/aTiU05qw9hX+HHI1QDBTyIlcFjgeFlKKySNGMwTp7nYFLQg/j0VA2FmCY4WPDDHMg==} @@ -13606,7 +14777,6 @@ packages: '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.43)(react@18.2.0) '@types/react': 18.2.43 react: 18.2.0 - dev: true /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.15)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} @@ -13855,8 +15025,8 @@ packages: '@rjsf/utils': ^5.12.x dependencies: '@rjsf/utils': 5.14.2(react@18.2.0) - ajv: 8.12.0 - ajv-formats: 2.1.1(ajv@8.12.0) + ajv: 8.13.0 + ajv-formats: 2.1.1(ajv@8.13.0) lodash: 4.17.21 lodash-es: 4.17.21 dev: false @@ -17068,6 +18238,34 @@ packages: espree: 9.6.1 dev: false + /@stylistic/eslint-plugin-js@1.6.2(eslint@8.54.0): + resolution: {integrity: sha512-ndT6X2KgWGxv8101pdMOxL8pihlYIHcOv3ICd70cgaJ9exwkPn8hJj4YQwslxoAlre1TFHnXd/G1/hYXgDrjIA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: '>=8.40.0' + dependencies: + '@types/eslint': 8.56.5 + acorn: 8.11.3 + escape-string-regexp: 4.0.0 + eslint: 8.54.0 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + dev: true + + /@stylistic/eslint-plugin-js@1.6.2(eslint@8.56.0): + resolution: {integrity: sha512-ndT6X2KgWGxv8101pdMOxL8pihlYIHcOv3ICd70cgaJ9exwkPn8hJj4YQwslxoAlre1TFHnXd/G1/hYXgDrjIA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: '>=8.40.0' + dependencies: + '@types/eslint': 8.56.5 + acorn: 8.11.3 + escape-string-regexp: 4.0.0 + eslint: 8.56.0 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + dev: false + /@stylistic/eslint-plugin-ts@1.6.2(eslint@8.53.0)(typescript@5.5.4): resolution: {integrity: sha512-FizV58em0OjO/xFHRIy/LJJVqzxCNmYC/xVtKDf8aGDRgZpLo+lkaBKfBrbMkAGzhBKbYj+iLEFI4WEl6aVZGQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -17083,6 +18281,81 @@ packages: - typescript dev: false + /@stylistic/eslint-plugin-ts@1.6.2(eslint@8.54.0)(typescript@4.9.3): + resolution: {integrity: sha512-FizV58em0OjO/xFHRIy/LJJVqzxCNmYC/xVtKDf8aGDRgZpLo+lkaBKfBrbMkAGzhBKbYj+iLEFI4WEl6aVZGQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: '>=8.40.0' + dependencies: + '@stylistic/eslint-plugin-js': 1.6.2(eslint@8.54.0) + '@types/eslint': 8.56.5 + '@typescript-eslint/utils': 6.21.0(eslint@8.54.0)(typescript@4.9.3) + eslint: 8.54.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@stylistic/eslint-plugin-ts@1.6.2(eslint@8.54.0)(typescript@4.9.5): + resolution: {integrity: sha512-FizV58em0OjO/xFHRIy/LJJVqzxCNmYC/xVtKDf8aGDRgZpLo+lkaBKfBrbMkAGzhBKbYj+iLEFI4WEl6aVZGQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: '>=8.40.0' + dependencies: + '@stylistic/eslint-plugin-js': 1.6.2(eslint@8.54.0) + '@types/eslint': 8.56.5 + '@typescript-eslint/utils': 6.21.0(eslint@8.54.0)(typescript@4.9.5) + eslint: 8.54.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@stylistic/eslint-plugin-ts@1.6.2(eslint@8.54.0)(typescript@5.1.6): + resolution: {integrity: sha512-FizV58em0OjO/xFHRIy/LJJVqzxCNmYC/xVtKDf8aGDRgZpLo+lkaBKfBrbMkAGzhBKbYj+iLEFI4WEl6aVZGQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: '>=8.40.0' + dependencies: + '@stylistic/eslint-plugin-js': 1.6.2(eslint@8.54.0) + '@types/eslint': 8.56.5 + '@typescript-eslint/utils': 6.21.0(eslint@8.54.0)(typescript@5.1.6) + eslint: 8.54.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@stylistic/eslint-plugin-ts@1.6.2(eslint@8.54.0)(typescript@5.5.4): + resolution: {integrity: sha512-FizV58em0OjO/xFHRIy/LJJVqzxCNmYC/xVtKDf8aGDRgZpLo+lkaBKfBrbMkAGzhBKbYj+iLEFI4WEl6aVZGQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: '>=8.40.0' + dependencies: + '@stylistic/eslint-plugin-js': 1.6.2(eslint@8.54.0) + '@types/eslint': 8.56.5 + '@typescript-eslint/utils': 6.21.0(eslint@8.54.0)(typescript@5.5.4) + eslint: 8.54.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@stylistic/eslint-plugin-ts@1.6.2(eslint@8.56.0)(typescript@5.5.4): + resolution: {integrity: sha512-FizV58em0OjO/xFHRIy/LJJVqzxCNmYC/xVtKDf8aGDRgZpLo+lkaBKfBrbMkAGzhBKbYj+iLEFI4WEl6aVZGQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: '>=8.40.0' + dependencies: + '@stylistic/eslint-plugin-js': 1.6.2(eslint@8.56.0) + '@types/eslint': 8.56.5 + '@typescript-eslint/utils': 6.21.0(eslint@8.56.0)(typescript@5.5.4) + eslint: 8.56.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: false + /@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.5.2)(svelte@3.59.2)(vite@4.5.3): resolution: {integrity: sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==} engines: {node: ^14.18.0 || >= 16} @@ -17151,8 +18424,8 @@ packages: dev: true optional: true - /@swc/core-darwin-arm64@1.9.3: - resolution: {integrity: sha512-hGfl/KTic/QY4tB9DkTbNuxy5cV4IeejpPD4zo+Lzt4iLlDWIeANL4Fkg67FiVceNJboqg48CUX+APhDHO5G1w==} + /@swc/core-darwin-arm64@1.9.2: + resolution: {integrity: sha512-nETmsCoY29krTF2PtspEgicb3tqw7Ci5sInTI03EU5zpqYbPjoPH99BVTjj0OsF53jP5MxwnLI5Hm21lUn1d6A==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] @@ -17169,8 +18442,8 @@ packages: dev: true optional: true - /@swc/core-darwin-x64@1.9.3: - resolution: {integrity: sha512-IaRq05ZLdtgF5h9CzlcgaNHyg4VXuiStnOFpfNEMuI5fm5afP2S0FHq8WdakUz5WppsbddTdplL+vpeApt/WCQ==} + /@swc/core-darwin-x64@1.9.2: + resolution: {integrity: sha512-9gD+bwBz8ZByjP6nZTXe/hzd0tySIAjpDHgkFiUrc+5zGF+rdTwhcNrzxNHJmy6mw+PW38jqII4uspFHUqqxuQ==} engines: {node: '>=10'} cpu: [x64] os: [darwin] @@ -17187,8 +18460,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm-gnueabihf@1.9.3: - resolution: {integrity: sha512-Pbwe7xYprj/nEnZrNBvZfjnTxlBIcfApAGdz2EROhjpPj+FBqBa3wOogqbsuGGBdCphf8S+KPprL1z+oDWkmSQ==} + /@swc/core-linux-arm-gnueabihf@1.9.2: + resolution: {integrity: sha512-kYq8ief1Qrn+WmsTWAYo4r+Coul4dXN6cLFjiPZ29Cv5pyU+GFvSPAB4bEdMzwy99rCR0u2P10UExaeCjurjvg==} engines: {node: '>=10'} cpu: [arm] os: [linux] @@ -17205,8 +18478,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-gnu@1.9.3: - resolution: {integrity: sha512-AQ5JZiwNGVV/2K2TVulg0mw/3LYfqpjZO6jDPtR2evNbk9Yt57YsVzS+3vHSlUBQDRV9/jqMuZYVU3P13xrk+g==} + /@swc/core-linux-arm64-gnu@1.9.2: + resolution: {integrity: sha512-n0W4XiXlmEIVqxt+rD3ZpkogsEWUk1jJ+i5bQNgB+1JuWh0fBE8c/blDgTQXa0GB5lTPVDZQussgdNOCnAZwiA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -17223,8 +18496,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-musl@1.9.3: - resolution: {integrity: sha512-tzVH480RY6RbMl/QRgh5HK3zn1ZTFsThuxDGo6Iuk1MdwIbdFYUY034heWUTI4u3Db97ArKh0hNL0xhO3+PZdg==} + /@swc/core-linux-arm64-musl@1.9.2: + resolution: {integrity: sha512-8xzrOmsyCC1zrx2Wzx/h8dVsdewO1oMCwBTLc1gSJ/YllZYTb04pNm6NsVbzUX2tKddJVRgSJXV10j/NECLwpA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -17241,8 +18514,8 @@ packages: dev: true optional: true - /@swc/core-linux-x64-gnu@1.9.3: - resolution: {integrity: sha512-ivXXBRDXDc9k4cdv10R21ccBmGebVOwKXT/UdH1PhxUn9m/h8erAWjz5pcELwjiMf27WokqPgaWVfaclDbgE+w==} + /@swc/core-linux-x64-gnu@1.9.2: + resolution: {integrity: sha512-kZrNz/PjRQKcchWF6W292jk3K44EoVu1ad5w+zbS4jekIAxsM8WwQ1kd+yjUlN9jFcF8XBat5NKIs9WphJCVXg==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -17259,8 +18532,8 @@ packages: dev: true optional: true - /@swc/core-linux-x64-musl@1.9.3: - resolution: {integrity: sha512-ILsGMgfnOz1HwdDz+ZgEuomIwkP1PHT6maigZxaCIuC6OPEhKE8uYna22uU63XvYcLQvZYDzpR3ms47WQPuNEg==} + /@swc/core-linux-x64-musl@1.9.2: + resolution: {integrity: sha512-TTIpR4rjMkhX1lnFR+PSXpaL83TrQzp9znRdp2TzYrODlUd/R20zOwSo9vFLCyH6ZoD47bccY7QeGZDYT3nlRg==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -17277,8 +18550,8 @@ packages: dev: true optional: true - /@swc/core-win32-arm64-msvc@1.9.3: - resolution: {integrity: sha512-e+XmltDVIHieUnNJHtspn6B+PCcFOMYXNJB1GqoCcyinkEIQNwC8KtWgMqUucUbEWJkPc35NHy9k8aCXRmw9Kg==} + /@swc/core-win32-arm64-msvc@1.9.2: + resolution: {integrity: sha512-+Eg2d4icItKC0PMjZxH7cSYFLWk0aIp94LNmOw6tPq0e69ax6oh10upeq0D1fjWsKLmOJAWEvnXlayZcijEXDw==} engines: {node: '>=10'} cpu: [arm64] os: [win32] @@ -17295,8 +18568,8 @@ packages: dev: true optional: true - /@swc/core-win32-ia32-msvc@1.9.3: - resolution: {integrity: sha512-rqpzNfpAooSL4UfQnHhkW8aL+oyjqJniDP0qwZfGnjDoJSbtPysHg2LpcOBEdSnEH+uIZq6J96qf0ZFD8AGfXA==} + /@swc/core-win32-ia32-msvc@1.9.2: + resolution: {integrity: sha512-nLWBi4vZDdM/LkiQmPCakof8Dh1/t5EM7eudue04V1lIcqx9YHVRS3KMwEaCoHLGg0c312Wm4YgrWQd9vwZ5zQ==} engines: {node: '>=10'} cpu: [ia32] os: [win32] @@ -17313,8 +18586,8 @@ packages: dev: true optional: true - /@swc/core-win32-x64-msvc@1.9.3: - resolution: {integrity: sha512-3YJJLQ5suIEHEKc1GHtqVq475guiyqisKSoUnoaRtxkDaW5g1yvPt9IoSLOe2mRs7+FFhGGU693RsBUSwOXSdQ==} + /@swc/core-win32-x64-msvc@1.9.2: + resolution: {integrity: sha512-ik/k+JjRJBFkXARukdU82tSVx0CbExFQoQ78qTO682esbYXzjdB5eLVkoUbwen299pnfr88Kn4kyIqFPTje8Xw==} engines: {node: '>=10'} cpu: [x64] os: [win32] @@ -17347,8 +18620,8 @@ packages: '@swc/core-win32-x64-msvc': 1.3.96 dev: true - /@swc/core@1.9.3: - resolution: {integrity: sha512-oRj0AFePUhtatX+BscVhnzaAmWjpfAeySpM1TCbxA1rtBDeH/JDhi5yYzAKneDYtVtBvA7ApfeuzhMC9ye4xSg==} + /@swc/core@1.9.2: + resolution: {integrity: sha512-dYyEkO6mRYtZFpnOsnYzv9rY69fHAHoawYOjGOEcxk9WYtaJhowMdP/w6NcOKnz2G7GlZaenjkzkMa6ZeQeMsg==} engines: {node: '>=10'} requiresBuild: true peerDependencies: @@ -17358,18 +18631,18 @@ packages: optional: true dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.17 + '@swc/types': 0.1.15 optionalDependencies: - '@swc/core-darwin-arm64': 1.9.3 - '@swc/core-darwin-x64': 1.9.3 - '@swc/core-linux-arm-gnueabihf': 1.9.3 - '@swc/core-linux-arm64-gnu': 1.9.3 - '@swc/core-linux-arm64-musl': 1.9.3 - '@swc/core-linux-x64-gnu': 1.9.3 - '@swc/core-linux-x64-musl': 1.9.3 - '@swc/core-win32-arm64-msvc': 1.9.3 - '@swc/core-win32-ia32-msvc': 1.9.3 - '@swc/core-win32-x64-msvc': 1.9.3 + '@swc/core-darwin-arm64': 1.9.2 + '@swc/core-darwin-x64': 1.9.2 + '@swc/core-linux-arm-gnueabihf': 1.9.2 + '@swc/core-linux-arm64-gnu': 1.9.2 + '@swc/core-linux-arm64-musl': 1.9.2 + '@swc/core-linux-x64-gnu': 1.9.2 + '@swc/core-linux-x64-musl': 1.9.2 + '@swc/core-win32-arm64-msvc': 1.9.2 + '@swc/core-win32-ia32-msvc': 1.9.2 + '@swc/core-win32-x64-msvc': 1.9.2 dev: true /@swc/counter@0.1.2: @@ -17391,8 +18664,8 @@ packages: legacy-swc-helpers: /@swc/helpers@0.4.14 tslib: 2.6.2 - /@swc/types@0.1.17: - resolution: {integrity: sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ==} + /@swc/types@0.1.15: + resolution: {integrity: sha512-XKaZ+dzDIQ9Ot9o89oJQ/aluI17+VvUnIpYJTcZtvv1iYX6MzHh3Ik2CSR7MdPKpPwfZXHBeCingb2b4PoDVdw==} dependencies: '@swc/counter': 0.1.3 dev: true @@ -18134,8 +19407,8 @@ packages: /@types/babel__core@7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 '@types/babel__generator': 7.6.7 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.4 @@ -18393,7 +19666,6 @@ packages: dependencies: '@types/estree': 1.0.5 '@types/json-schema': 7.0.15 - dev: false /@types/estree-jsx@1.0.3: resolution: {integrity: sha512-pvQ+TKeRHeiUGRhvYwRrQ/ISnohKkSJR14fT2yqyZ4e9K5vqc7hrtY2Y1Dw0ZwAzQ6DQsxsaCUuSIIi8v0Cq6w==} @@ -18605,6 +19877,12 @@ packages: resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} dev: false + /@types/lodash-es@4.17.12: + resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} + dependencies: + '@types/lodash': 4.14.201 + dev: true + /@types/lodash.get@4.4.9: resolution: {integrity: sha512-J5dvW98sxmGnamqf+/aLP87PYXyrha9xIgc2ZlHl6OHMFR2Ejdxep50QfU0abO1+CH6+ugx+8wEUN1toImAinA==} dependencies: @@ -18854,7 +20132,6 @@ packages: resolution: {integrity: sha512-rvrT/M7Df5eykWFxn6MYt5Pem/Dbyc1N8Y0S9Mrkw2WFCRiqUgw9P7ul2NpwsXCSM1DVdENzdG9J5SreqfAIWg==} dependencies: '@types/react': 18.2.43 - dev: true /@types/react-helmet@6.1.9: resolution: {integrity: sha512-nuOeTefP4yPTWHvjGksCBKb/4hsgJxSX7aSTjTIDFXJIkZ6Wo2Y4/cmE1FO9OlYBrHjKOer/0zLwY7s4qiQBtw==} @@ -18881,7 +20158,6 @@ packages: '@types/prop-types': 15.7.10 '@types/scheduler': 0.16.6 csstype: 3.1.2 - dev: true /@types/react@18.2.46: resolution: {integrity: sha512-nNCvVBcZlvX4NU1nRRNV/mFl1nNRuTuslAJglQsq+8ldXe5Xv0Wd2f7WTE3jOxhLH2BFfiZGC6GCp+kHQbgG+w==} @@ -19322,6 +20598,35 @@ packages: - supports-color dev: true + /@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.5.4): + resolution: {integrity: sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 6.14.0(eslint@8.56.0)(typescript@5.5.4) + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/type-utils': 6.14.0(eslint@8.56.0)(typescript@5.5.4) + '@typescript-eslint/utils': 6.14.0(eslint@8.56.0)(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 6.14.0 + debug: 4.3.4(supports-color@8.1.1) + eslint: 8.56.0 + graphemer: 1.4.0 + ignore: 5.3.0 + natural-compare: 1.4.0 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.5.4) + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + dev: false + /@typescript-eslint/experimental-utils@4.33.0(eslint@8.54.0)(typescript@4.9.5): resolution: {integrity: sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==} engines: {node: ^10.12.0 || >=12.0.0} @@ -19499,6 +20804,27 @@ packages: - supports-color dev: false + /@typescript-eslint/parser@6.14.0(eslint@8.54.0)(typescript@5.5.4): + resolution: {integrity: sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 6.14.0 + debug: 4.3.4(supports-color@8.1.1) + eslint: 8.54.0 + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/parser@6.14.0(eslint@8.55.0)(typescript@5.2.2): resolution: {integrity: sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==} engines: {node: ^16.0.0 || >=18.0.0} @@ -19520,6 +20846,27 @@ packages: - supports-color dev: true + /@typescript-eslint/parser@6.14.0(eslint@8.56.0)(typescript@5.5.4): + resolution: {integrity: sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 6.14.0 + debug: 4.3.4(supports-color@8.1.1) + eslint: 8.56.0 + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + dev: false + /@typescript-eslint/scope-manager@4.33.0: resolution: {integrity: sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} @@ -19550,7 +20897,6 @@ packages: dependencies: '@typescript-eslint/types': 6.14.0 '@typescript-eslint/visitor-keys': 6.14.0 - dev: true /@typescript-eslint/scope-manager@6.21.0: resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} @@ -19558,7 +20904,6 @@ packages: dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - dev: false /@typescript-eslint/type-utils@5.62.0(eslint@8.22.0)(typescript@4.9.5): resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} @@ -19720,6 +21065,26 @@ packages: - supports-color dev: true + /@typescript-eslint/type-utils@6.14.0(eslint@8.56.0)(typescript@5.5.4): + resolution: {integrity: sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.5.4) + '@typescript-eslint/utils': 6.14.0(eslint@8.56.0)(typescript@5.5.4) + debug: 4.3.6 + eslint: 8.56.0 + ts-api-utils: 1.0.3(typescript@5.5.4) + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + dev: false + /@typescript-eslint/types@4.33.0: resolution: {integrity: sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} @@ -19738,12 +21103,10 @@ packages: /@typescript-eslint/types@6.14.0: resolution: {integrity: sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==} engines: {node: ^16.0.0 || >=18.0.0} - dev: true /@typescript-eslint/types@6.21.0: resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} engines: {node: ^16.0.0 || >=18.0.0} - dev: false /@typescript-eslint/typescript-estree@4.33.0(typescript@4.9.5): resolution: {integrity: sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==} @@ -19913,6 +21276,92 @@ packages: - supports-color dev: true + /@typescript-eslint/typescript-estree@6.14.0(typescript@5.5.4): + resolution: {integrity: sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/visitor-keys': 6.14.0 + debug: 4.3.6 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.5.4) + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + + /@typescript-eslint/typescript-estree@6.21.0(typescript@4.9.3): + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.6 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@4.9.3) + typescript: 4.9.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/typescript-estree@6.21.0(typescript@4.9.5): + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.6 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.1.6): + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.6 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.1.6) + typescript: 5.1.6 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.5.4): resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -19933,7 +21382,6 @@ packages: typescript: 5.5.4 transitivePeerDependencies: - supports-color - dev: false /@typescript-eslint/utils@5.62.0(eslint@8.22.0)(typescript@4.9.5): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} @@ -20093,6 +21541,25 @@ packages: - typescript dev: true + /@typescript-eslint/utils@6.14.0(eslint@8.56.0)(typescript@5.5.4): + resolution: {integrity: sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.5 + '@typescript-eslint/scope-manager': 6.14.0 + '@typescript-eslint/types': 6.14.0 + '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.5.4) + eslint: 8.56.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: false + /@typescript-eslint/utils@6.21.0(eslint@8.53.0)(typescript@5.5.4): resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -20112,6 +21579,101 @@ packages: - typescript dev: false + /@typescript-eslint/utils@6.21.0(eslint@8.54.0)(typescript@4.9.3): + resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.5 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@4.9.3) + eslint: 8.54.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/utils@6.21.0(eslint@8.54.0)(typescript@4.9.5): + resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.5 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@4.9.5) + eslint: 8.54.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/utils@6.21.0(eslint@8.54.0)(typescript@5.1.6): + resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.5 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.1.6) + eslint: 8.54.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/utils@6.21.0(eslint@8.54.0)(typescript@5.5.4): + resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.5 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) + eslint: 8.54.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/utils@6.21.0(eslint@8.56.0)(typescript@5.5.4): + resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.5 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) + eslint: 8.56.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: false + /@typescript-eslint/visitor-keys@4.33.0: resolution: {integrity: sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} @@ -20142,7 +21704,6 @@ packages: dependencies: '@typescript-eslint/types': 6.14.0 eslint-visitor-keys: 3.4.3 - dev: true /@typescript-eslint/visitor-keys@6.21.0: resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} @@ -20150,7 +21711,6 @@ packages: dependencies: '@typescript-eslint/types': 6.21.0 eslint-visitor-keys: 3.4.3 - dev: false /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} @@ -21071,6 +22631,17 @@ packages: dependencies: ajv: 8.12.0 + /ajv-formats@2.1.1(ajv@8.13.0): + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + dependencies: + ajv: 8.13.0 + dev: false + /ajv-formats@3.0.1(ajv@8.13.0): resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} peerDependencies: @@ -21122,7 +22693,6 @@ packages: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 uri-js: 4.4.1 - dev: true /ansi-align@3.0.1: resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} @@ -22660,6 +24230,20 @@ packages: - '@types/react' dev: false + /cmdk@0.2.0(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-JQpKvEOb86SnvMZbYaFKYhvzFntWBeSZdyii0rZPhKJj9uwJBxu4DaVYDrRN7r3mPop56oPhRw+JYWTKs66TYw==} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + '@radix-ui/react-dialog': 1.0.0(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0) + command-score: 0.1.2 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + dev: false + /co@4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} @@ -25142,7 +26726,16 @@ packages: eslint: 8.54.0 dev: true - /eslint-config-standard-with-typescript@37.0.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.6.2)(eslint-plugin-promise@6.1.1)(eslint@8.54.0)(typescript@5.5.4): + /eslint-config-prettier@9.0.0(eslint@8.56.0): + resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.56.0 + dev: false + + /eslint-config-standard-with-typescript@37.0.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.6.2)(eslint-plugin-promise@6.1.1)(eslint@8.54.0)(typescript@5.5.4): resolution: {integrity: sha512-V8I/Q1eFf9tiOuFHkbksUdWO3p1crFmewecfBtRxXdnvb71BCJx+1xAknlIRZMwZioMX3/bPtMVCZsf1+AjjOw==} peerDependencies: '@typescript-eslint/eslint-plugin': ^5.52.0 @@ -25152,11 +26745,10 @@ packages: eslint-plugin-promise: ^6.0.0 typescript: '*' dependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0)(typescript@5.5.4) '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@5.5.4) eslint: 8.54.0 eslint-config-standard: 17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.6.2)(eslint-plugin-promise@6.1.1)(eslint@8.54.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.54.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.54.0) eslint-plugin-n: 16.6.2(eslint@8.54.0) eslint-plugin-promise: 6.1.1(eslint@8.54.0) typescript: 5.5.4 @@ -25174,7 +26766,7 @@ packages: eslint-plugin-promise: ^6.0.0 dependencies: eslint: 8.54.0 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.54.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.54.0) eslint-plugin-n: 16.6.2(eslint@8.54.0) eslint-plugin-promise: 6.1.1(eslint@8.54.0) dev: true @@ -25233,7 +26825,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@4.9.3) debug: 3.2.7 eslint: 8.54.0 eslint-import-resolver-node: 0.3.9 @@ -25292,7 +26884,36 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@5.1.6) + '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@4.9.5) + debug: 3.2.7 + eslint: 8.54.0 + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.54.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 6.14.0(eslint@8.54.0)(typescript@5.5.4) debug: 3.2.7 eslint: 8.54.0 eslint-import-resolver-node: 0.3.9 @@ -25398,7 +27019,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@4.9.3) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -25468,7 +27089,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@5.1.6) + '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@4.9.5) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -25493,7 +27114,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.54.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.14.0)(eslint@8.54.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -25503,7 +27124,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@5.5.4) + '@typescript-eslint/parser': 6.14.0(eslint@8.54.0)(typescript@5.5.4) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -25512,7 +27133,7 @@ packages: doctrine: 2.1.0 eslint: 8.54.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.54.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.14.0)(eslint-import-resolver-node@0.3.9)(eslint@8.54.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -25556,6 +27177,22 @@ packages: eslint: 8.53.0 dev: false + /eslint-plugin-prefer-arrow@1.2.3(eslint@8.54.0): + resolution: {integrity: sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ==} + peerDependencies: + eslint: '>=2.0.0' + dependencies: + eslint: 8.54.0 + dev: true + + /eslint-plugin-prefer-arrow@1.2.3(eslint@8.56.0): + resolution: {integrity: sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ==} + peerDependencies: + eslint: '>=2.0.0' + dependencies: + eslint: 8.56.0 + dev: false + /eslint-plugin-promise@6.1.1(eslint@8.54.0): resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -25650,6 +27287,31 @@ packages: string.prototype.matchall: 4.0.10 dev: true + /eslint-plugin-react@7.33.2(eslint@8.54.0): + resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + array-includes: 3.1.7 + array.prototype.flatmap: 1.3.2 + array.prototype.tosorted: 1.1.2 + doctrine: 2.1.0 + es-iterator-helpers: 1.0.15 + eslint: 8.54.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.7 + object.fromentries: 2.0.7 + object.hasown: 1.1.3 + object.values: 1.1.7 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.10 + dev: true + /eslint-plugin-react@7.33.2(eslint@8.56.0): resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} engines: {node: '>=4'} @@ -25785,7 +27447,7 @@ packages: '@typescript-eslint/eslint-plugin': optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0)(typescript@5.1.6) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0)(typescript@4.9.5) eslint: 8.54.0 eslint-rule-composer: 0.3.0 dev: true @@ -25800,7 +27462,7 @@ packages: '@typescript-eslint/eslint-plugin': optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0)(typescript@5.5.4) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0)(typescript@5.1.6) eslint: 8.54.0 eslint-rule-composer: 0.3.0 dev: true @@ -25820,6 +27482,21 @@ packages: eslint-rule-composer: 0.3.0 dev: false + /eslint-plugin-unused-imports@3.0.0(@typescript-eslint/eslint-plugin@6.14.0)(eslint@8.56.0): + resolution: {integrity: sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^6.0.0 + eslint: ^8.0.0 + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + dependencies: + '@typescript-eslint/eslint-plugin': 6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.56.0)(typescript@5.5.4) + eslint: 8.56.0 + eslint-rule-composer: 0.3.0 + dev: false + /eslint-rule-composer@0.3.0: resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==} engines: {node: '>=4.0.0'} @@ -33773,6 +35450,23 @@ packages: - encoding dev: false + /react-json-view@1.21.3(@types/react@18.2.43)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==} + peerDependencies: + react: ^17.0.0 || ^16.3.0 || ^15.5.4 + react-dom: ^17.0.0 || ^16.3.0 || ^15.5.4 + dependencies: + flux: 4.0.4(react@18.2.0) + react: 18.2.0 + react-base16-styling: 0.6.0 + react-dom: 18.2.0(react@18.2.0) + react-lifecycles-compat: 3.0.4 + react-textarea-autosize: 8.5.3(@types/react@18.2.43)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - encoding + dev: false + /react-leaflet@4.2.1(leaflet@1.9.4)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-p9chkvhcKrWn/H/1FFeVSqLdReGwn2qmiobOQGO3BifX+/vV/39qhY8dGqbdcPh1e6jxh/QHriLXr7a4eLFK4Q==} peerDependencies: @@ -33831,7 +35525,6 @@ packages: - encoding - react - ts-node - dev: true /react-phone-input-2@2.15.1(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-W03abwhXcwUoq+vUFvC6ch2+LJYMN8qSOiO889UH6S7SyMCQvox/LF3QWt+cZagZrRdi5z2ON3omnjoCUmlaYw==} @@ -33883,7 +35576,6 @@ packages: react: 18.2.0 react-style-singleton: 2.2.1(@types/react@18.2.43)(react@18.2.0) tslib: 2.6.2 - dev: true /react-remove-scroll@2.5.4(@types/react@18.2.37)(react@18.2.0): resolution: {integrity: sha512-xGVKJJr0SJGQVirVFAUZ2k1QLyO6m+2fy0l8Qawbp5Jgrv3DeLalrfMNBFSlmz5kriGGzsVBtGVnf4pTKIhhWA==} @@ -33904,6 +35596,25 @@ packages: use-sidecar: 1.1.2(@types/react@18.2.37)(react@18.2.0) dev: false + /react-remove-scroll@2.5.4(@types/react@18.2.43)(react@18.2.0): + resolution: {integrity: sha512-xGVKJJr0SJGQVirVFAUZ2k1QLyO6m+2fy0l8Qawbp5Jgrv3DeLalrfMNBFSlmz5kriGGzsVBtGVnf4pTKIhhWA==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.43 + react: 18.2.0 + react-remove-scroll-bar: 2.3.4(@types/react@18.2.43)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.2.43)(react@18.2.0) + tslib: 2.6.2 + use-callback-ref: 1.3.0(@types/react@18.2.43)(react@18.2.0) + use-sidecar: 1.1.2(@types/react@18.2.43)(react@18.2.0) + dev: false + /react-remove-scroll@2.5.5(@types/react@18.2.37)(react@18.2.0): resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} engines: {node: '>=10'} @@ -33939,7 +35650,6 @@ packages: tslib: 2.6.2 use-callback-ref: 1.3.0(@types/react@18.2.43)(react@18.2.0) use-sidecar: 1.1.2(@types/react@18.2.43)(react@18.2.0) - dev: true /react-resize-detector@7.1.2(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-zXnPJ2m8+6oq9Nn8zsep/orts9vQv3elrpA+R8XTcW7DVVUJ9vwDwMXaBtykAYjMnkCIaOoK9vObyR7ZgFNlOw==} @@ -34048,7 +35758,6 @@ packages: invariant: 2.2.4 react: 18.2.0 tslib: 2.6.2 - dev: true /react-textarea-autosize@8.5.3(@types/react@18.2.37)(react@18.2.0): resolution: {integrity: sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==} @@ -34064,6 +35773,20 @@ packages: - '@types/react' dev: false + /react-textarea-autosize@8.5.3(@types/react@18.2.43)(react@18.2.0): + resolution: {integrity: sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==} + engines: {node: '>=10'} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@babel/runtime': 7.23.8 + react: 18.2.0 + use-composed-ref: 1.3.0(react@18.2.0) + use-latest: 1.2.1(@types/react@18.2.43)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + dev: false + /react-transition-group@2.9.0(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==} peerDependencies: @@ -36702,6 +38425,33 @@ packages: resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} dev: false + /ts-api-utils@1.0.3(typescript@4.9.3): + resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 4.9.3 + dev: true + + /ts-api-utils@1.0.3(typescript@4.9.5): + resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 4.9.5 + dev: true + + /ts-api-utils@1.0.3(typescript@5.1.6): + resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.1.6 + dev: true + /ts-api-utils@1.0.3(typescript@5.2.2): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} @@ -36718,7 +38468,6 @@ packages: typescript: '>=4.2.0' dependencies: typescript: 5.5.4 - dev: false /ts-dedent@2.2.0: resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} @@ -37728,7 +39477,6 @@ packages: '@types/react': 18.2.43 react: 18.2.0 tslib: 2.6.2 - dev: true /use-composed-ref@1.3.0(react@18.2.0): resolution: {integrity: sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==} @@ -37760,6 +39508,19 @@ packages: react: 18.2.0 dev: false + /use-isomorphic-layout-effect@1.1.2(@types/react@18.2.43)(react@18.2.0): + resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.43 + react: 18.2.0 + dev: false + /use-latest@1.2.1(@types/react@18.2.37)(react@18.2.0): resolution: {integrity: sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==} peerDependencies: @@ -37774,6 +39535,20 @@ packages: use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.37)(react@18.2.0) dev: false + /use-latest@1.2.1(@types/react@18.2.43)(react@18.2.0): + resolution: {integrity: sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.43 + react: 18.2.0 + use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.43)(react@18.2.0) + dev: false + /use-query-params@2.2.1(react-dom@18.2.0)(react-router-dom@6.19.0)(react@18.2.0): resolution: {integrity: sha512-i6alcyLB8w9i3ZK3caNftdb+UnbfBRNPDnc89CNQWkGRmDrm/gfydHvMBfVsQJRq3NoHOM2dt/ceBWG2397v1Q==} peerDependencies: @@ -37833,7 +39608,6 @@ packages: detect-node-es: 1.1.0 react: 18.2.0 tslib: 2.6.2 - dev: true /use-sync-external-store@1.2.0(react@18.2.0): resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} @@ -38346,7 +40120,7 @@ packages: vite: '>=2.8' dependencies: '@rollup/plugin-virtual': 3.0.2 - '@swc/core': 1.9.3 + '@swc/core': 1.9.2 uuid: 10.0.0 vite: 4.5.3(@types/node@18.17.19) transitivePeerDependencies: @@ -38360,7 +40134,7 @@ packages: vite: '>=2.8' dependencies: '@rollup/plugin-virtual': 3.0.2 - '@swc/core': 1.9.3 + '@swc/core': 1.9.2 uuid: 10.0.0 vite: 5.3.5(@types/node@18.17.19) transitivePeerDependencies: diff --git a/services/workflows-service/prisma/data-migrations b/services/workflows-service/prisma/data-migrations index 85f04730f6..1241260246 160000 --- a/services/workflows-service/prisma/data-migrations +++ b/services/workflows-service/prisma/data-migrations @@ -1 +1 @@ -Subproject commit 85f04730f6760748e7162b9346db90e2e9841e8d +Subproject commit 1241260246dfe9b71ffcefe8670bd5ea77e6768f diff --git a/services/workflows-service/src/workflow/workflow.controller.external.ts b/services/workflows-service/src/workflow/workflow.controller.external.ts index 313e3ba4ec..4495574358 100644 --- a/services/workflows-service/src/workflow/workflow.controller.external.ts +++ b/services/workflows-service/src/workflow/workflow.controller.external.ts @@ -40,11 +40,12 @@ import { WorkflowService } from './workflow.service'; import { Validate } from 'ballerine-nestjs-typebox'; import { PutWorkflowExtensionSchema, WorkflowExtensionSchema } from './schemas/extensions.schemas'; import { type Static, Type } from '@sinclair/typebox'; -import { defaultContextSchema } from '@ballerine/common'; +import { DefaultContextSchema, defaultContextSchema } from '@ballerine/common'; import { WorkflowRunSchema } from './schemas/workflow-run'; import { ValidationError } from '@/errors'; import { WorkflowRuntimeListItemModel } from '@/workflow/workflow-runtime-list-item.model'; import { CreateTokenDto } from '@/workflow/dtos/create-token.dto'; +import { type PartialDeep } from 'type-fest'; export const WORKFLOW_TAG = 'Workflows'; @swagger.ApiBearerAuth() @@ -554,4 +555,47 @@ export class WorkflowControllerExternal { return; } + + @common.Patch('/:workflowRuntimeDataId/sync-entity') + @ApiResponse({ + status: 400, + description: 'Validation error', + schema: Type.Object({ + message: Type.String(), + statusCode: Type.Literal(400), + timestamp: Type.String({ + format: 'date-time', + }), + path: Type.String(), + errors: Type.Array(Type.Object({ message: Type.String(), path: Type.String() })), + }), + }) + @Validate({ + request: [ + { + type: 'param', + name: 'workflowRuntimeDataId', + description: `The id of the workflow runtime data to update`, + schema: Type.String(), + example: '123e4567-e89b-12d3-a456-426614174000', + }, + { + type: 'body', + schema: Type.Any(), + }, + ], + response: Type.Any(), + }) + async updateContextAndSyncEntity( + @common.Param('workflowRuntimeDataId') + workflowRuntimeDataId: string, + @common.Body() body: PartialDeep, + @CurrentProject() projectId: TProjectId, + ) { + return await this.service.updateContextAndSyncEntity({ + workflowRuntimeDataId, + context: body, + projectId, + }); + } } diff --git a/services/workflows-service/src/workflow/workflow.service.ts b/services/workflows-service/src/workflow/workflow.service.ts index 10b0ec69ca..046f375ae1 100644 --- a/services/workflows-service/src/workflow/workflow.service.ts +++ b/services/workflows-service/src/workflow/workflow.service.ts @@ -53,10 +53,12 @@ import { import { AnyRecord, buildCollectionFlowState, + BusinessDataSchema, CollectionFlowStatusesEnum, DefaultContextSchema, getDocumentId, getOrderedSteps, + IndividualDataSchema, isErrorWithMessage, isObject, ProcessStatus, @@ -116,6 +118,7 @@ import { addPropertiesSchemaToDocument } from './utils/add-properties-schema-to- import { entitiesUpdate } from './utils/entities-update'; import { WorkflowEventEmitterService } from './workflow-event-emitter.service'; import { WorkflowRuntimeDataRepository } from './workflow-runtime-data.repository'; +import { PartialDeep } from 'type-fest'; type TEntityId = string; @@ -2648,4 +2651,62 @@ export class WorkflowService { }, ); } + + async updateContextAndSyncEntity({ + workflowRuntimeDataId, + context, + projectId, + }: { + workflowRuntimeDataId: string; + context: PartialDeep; + projectId: string; + }) { + await this.prismaService.$transaction(async transaction => { + await this.event( + { + id: workflowRuntimeDataId, + name: BUILT_IN_EVENT.DEEP_MERGE_CONTEXT, + payload: { + newContext: context, + arrayMergeOption: ARRAY_MERGE_OPTION.REPLACE, + }, + }, + [projectId], + projectId, + transaction, + ); + + const workflowRuntimeData = await this.workflowRuntimeDataRepository.findById( + workflowRuntimeDataId, + {}, + [projectId], + transaction, + ); + + const endUserContextToEntityAdapter = (data: Static) => + ({ + firstName: data.firstName, + lastName: data.lastName, + } satisfies Parameters[1]['data']); + + const businessContextToEntityAdapter = (data: Static) => + ({ + companyName: data.companyName, + } satisfies Parameters[1]['data']); + + if (workflowRuntimeData.businessId && context.entity?.data) { + await this.entityRepository.business.updateById(workflowRuntimeData.businessId, { + data: businessContextToEntityAdapter( + context.entity.data as Static, + ), + }); + } + + if (workflowRuntimeData.endUserId && context.entity?.data) { + await this.entityRepository.endUser.updateById(workflowRuntimeData.endUserId, { + data: endUserContextToEntityAdapter(context.entity.data), + }); + } + }); + } } From 753648e052330ae2db476d4eb9457d4ec3ffad1a Mon Sep 17 00:00:00 2001 From: Omri Levy Date: Wed, 4 Dec 2024 22:14:22 +0200 Subject: [PATCH 2/4] refactor(*) updated editable details v2 api, added disabled states, added sorting --- .../EditableDetailsV2/EditableDetailsV2.tsx | 67 ++++++---- .../components/EditableDetailV2.tsx | 4 +- .../components/EditableDetailsV2Options.tsx | 19 ++- .../useEditableDetailsV2Logic.tsx | 35 +++-- .../organisms/EditableDetailsV2/types.ts | 77 +++++++---- .../domains/workflow-definitions/fetchers.ts | 8 ++ .../hooks/useKycBlock/useKycBlock.tsx | 120 ++++++++++++------ .../src/lib/blocks/utils/sort-data.ts | 9 +- .../src/workflow/schemas/zod-schemas.ts | 8 ++ 9 files changed, 230 insertions(+), 117 deletions(-) diff --git a/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/EditableDetailsV2.tsx b/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/EditableDetailsV2.tsx index 12ced79e13..286298bf75 100644 --- a/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/EditableDetailsV2.tsx +++ b/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/EditableDetailsV2.tsx @@ -7,39 +7,44 @@ import { FunctionComponent } from 'react'; import { FormItem } from '../Form/Form.Item'; import { FormLabel } from '../Form/Form.Label'; import { FormMessage } from '../Form/Form.Message'; -import { TEditableDetailsV2Props } from './types'; import { useNewEditableDetailsLogic } from './hooks/useEditableDetailsV2Logic/useEditableDetailsV2Logic'; import { EditableDetailsV2Options } from './components/EditableDetailsV2Options'; import { EditableDetailV2 } from './components/EditableDetailV2'; +import { IEditableDetailsV2Props } from './types'; -export const EditableDetailsV2: FunctionComponent = ({ +export const EditableDetailsV2: FunctionComponent = ({ title, fields, onSubmit, onEnableIsEditable, onCancel, - blacklist, - whitelist, - isEditable, - isSaveDisabled, - parse, + config, }) => { - if (blacklist && whitelist) { + if (config.blacklist && config.whitelist) { throw new Error('Cannot provide both blacklist and whitelist'); } const { form, handleSubmit, filteredFields } = useNewEditableDetailsLogic({ fields, - blacklist, - whitelist, onSubmit, + config, }); return (

{title}

- +
@@ -65,11 +70,12 @@ export const EditableDetailsV2: FunctionComponent = ({ maximum={props.maximum} pattern={props.pattern} options={props.options} - isEditable={isEditable && props.isEditable} + isEditable={!config.actions.editing.disabled && props.isEditable} + valueAlias={props.valueAlias} originalValue={originalValue} form={form} field={field} - parse={parse} + parse={config.parse} /> @@ -79,20 +85,27 @@ export const EditableDetailsV2: FunctionComponent = ({ })}
- {isEditable && filteredFields?.some(({ props }) => props.isEditable) && ( - - )} - {isEditable && filteredFields?.some(({ props }) => props.isEditable) && ( - - )} + {!config.actions.editing.disabled && + filteredFields?.some(({ props }) => props.isEditable) && ( + + )} + {!config.actions.editing.disabled && + filteredFields?.some(({ props }) => props.isEditable) && ( + + )}
diff --git a/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/components/EditableDetailV2.tsx b/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/components/EditableDetailV2.tsx index 9817e56bfc..2db981898a 100644 --- a/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/components/EditableDetailV2.tsx +++ b/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/components/EditableDetailV2.tsx @@ -29,6 +29,7 @@ export const EditableDetailV2: FunctionComponent<{ }>; form: UseFormReturn; field: Parameters['render']>[0]['field']; + valueAlias?: string; originalValue: ExtendedJson; type: string | undefined; format: string | undefined; @@ -50,6 +51,7 @@ export const EditableDetailV2: FunctionComponent<{ originalValue, form, field, + valueAlias, type, format, minimum, @@ -147,7 +149,7 @@ export const EditableDetailV2: FunctionComponent<{ if (parse?.url && checkIsUrl(field.value)) { return ( - {field.value} + {valueAlias ?? field.value} ); } diff --git a/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/components/EditableDetailsV2Options.tsx b/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/components/EditableDetailsV2Options.tsx index cdf61de6f2..990cc260d9 100644 --- a/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/components/EditableDetailsV2Options.tsx +++ b/apps/backoffice-v2/src/common/components/organisms/EditableDetailsV2/components/EditableDetailsV2Options.tsx @@ -9,12 +9,24 @@ import { Edit } from 'lucide-react'; import { FunctionComponent } from 'react'; export const EditableDetailsV2Options: FunctionComponent<{ + actions: { + options: { + disabled: boolean; + }; + enableEditing: { + disabled: boolean; + }; + }; onEnableIsEditable: () => void; -}> = ({ onEnableIsEditable }) => { +}> = ({ actions, onEnableIsEditable }) => { return ( - @@ -22,7 +34,8 @@ export const EditableDetailsV2Options: FunctionComponent<{