From 882d0ad4a8623e2030d0c45e15951b17da41fab2 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sun, 31 Mar 2024 15:00:00 -0300 Subject: [PATCH 001/162] feat: add pagination rules to dataTable --- .../components/ui/dataTable/dataTable.tsx | 217 ++++++++++++------ .../components/ui/dataTable/types.ts | 11 +- 2 files changed, 159 insertions(+), 69 deletions(-) diff --git a/src/presentation/components/ui/dataTable/dataTable.tsx b/src/presentation/components/ui/dataTable/dataTable.tsx index ee3300e3..b2d8b64f 100644 --- a/src/presentation/components/ui/dataTable/dataTable.tsx +++ b/src/presentation/components/ui/dataTable/dataTable.tsx @@ -1,3 +1,5 @@ +import { useMemo } from 'react' + import { RowData, flexRender, @@ -9,22 +11,32 @@ import { ArrowDownNarrowWide, ArrowUpNarrowWide } from 'lucide-react' import { Table } from '@/presentation/components/ui/table' import { Tooltip } from '@/presentation/components/ui/tooltip' +import { Pagination } from '../pagination' + import { DataTableProps } from './types' +const REGISTERS_PER_PAGE = 10 + export const DataTable = ({ columns, data, sorting, - onSorting + pagination }: DataTableProps) => { + const { currentSorting, onSorting } = sorting + const { currentPage, onPageChange } = pagination + const table = useReactTable({ columns, data, state: { - sorting + sorting: currentSorting, + pagination: currentPage }, manualSorting: true, + manualPagination: true, onSortingChange: onSorting, + onPaginationChange: onPageChange, getCoreRowModel: getCoreRowModel() }) @@ -35,74 +47,145 @@ export const DataTable = ({ return 'Limpar ordenação' } + const lastPage = Math.ceil(data.length / REGISTERS_PER_PAGE) + + const page = useMemo(() => table.getState().pagination.pageIndex + 1, [table]) + + const showInitialEllipsis = useMemo(() => page > 2, [page]) + + const showFinalEllipsis = useMemo(() => page + 2 > 3, [page]) + + const isBeforeLastPage = useMemo( + () => page + 1 < data.length, + [page, data.length] + ) + return ( -
- - - {table.getHeaderGroups().map((headerGroup) => ( - - {headerGroup.headers.map((header) => ( - - {header.isPlaceholder ? null : ( - - - -
- {flexRender( - header.column.columnDef.header, - header.getContext() - )} - {{ - asc: , - desc: - }[header.column.getIsSorted() as string] ?? null} -
-
- -

- {tooltipText(header.column.getNextSortingOrder())} -

-
-
-
- )} -
- ))} -
- ))} -
- - {table.getRowModel().rows?.length ? ( - table.getRowModel().rows.map((row) => ( - - {row.getVisibleCells().map((cell) => ( - - {flexRender(cell.column.columnDef.cell, cell.getContext())} - +
+
+ + + {table.getHeaderGroups().map((headerGroup) => ( + + {headerGroup.headers.map((header) => ( + + {header.isPlaceholder ? null : ( + + + +
+ {flexRender( + header.column.columnDef.header, + header.getContext() + )} + {{ + asc: , + desc: + }[header.column.getIsSorted() as string] ?? null} +
+
+ +

+ {tooltipText(header.column.getNextSortingOrder())} +

+
+
+
+ )} +
))}
- )) - ) : ( - - - No results. - - - )} - -
+ ))} + + + {table.getRowModel().rows?.length ? ( + table.getRowModel().rows.map((row) => ( + + {row.getVisibleCells().map((cell) => ( + + {flexRender( + cell.column.columnDef.cell, + cell.getContext() + )} + + ))} + + )) + ) : ( + + + No results. + + + )} + + +
+ + + + + + + {showInitialEllipsis ? ( + <> + table.setPageIndex(0)}> + 1 + + + + + + + ) : null} + + + {page} + + + {isBeforeLastPage ? ( + <> + {showFinalEllipsis ? ( + + + + ) : null} + + table.setPageIndex(lastPage - 1)} + isDisabled={!table.getCanNextPage()} + > + {lastPage} + + + ) : null} + + + + + +
) } diff --git a/src/presentation/components/ui/dataTable/types.ts b/src/presentation/components/ui/dataTable/types.ts index dfbd33c6..bf17ebdc 100644 --- a/src/presentation/components/ui/dataTable/types.ts +++ b/src/presentation/components/ui/dataTable/types.ts @@ -1,6 +1,7 @@ import { ColumnDef, OnChangeFn, + PaginationState, RowData, SortingState } from '@tanstack/react-table' @@ -8,6 +9,12 @@ import { export type DataTableProps = { data: TData[] columns: ColumnDef[] - sorting: SortingState - onSorting: OnChangeFn + pagination: { + currentPage: PaginationState + onPageChange: OnChangeFn + } + sorting: { + currentSorting: SortingState + onSorting: OnChangeFn + } } From 2666ef37eb6f390844484af83f0034a505cbd543 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sun, 31 Mar 2024 15:10:00 -0300 Subject: [PATCH 002/162] feat: add table container --- .../containers/tableContainer/index.tsx | 20 +++++++++++++++++++ .../containers/tableContainer/types.ts | 8 ++++++++ 2 files changed, 28 insertions(+) create mode 100644 src/presentation/containers/tableContainer/index.tsx create mode 100644 src/presentation/containers/tableContainer/types.ts diff --git a/src/presentation/containers/tableContainer/index.tsx b/src/presentation/containers/tableContainer/index.tsx new file mode 100644 index 00000000..795c073c --- /dev/null +++ b/src/presentation/containers/tableContainer/index.tsx @@ -0,0 +1,20 @@ +import { RowData } from '@tanstack/react-table' + +import { DataTable, Input } from '@/presentation/components/ui' + +import { TableContainerProps } from './types' + +export const TableContainer = ({ + table, + inputSearch +}: TableContainerProps) => ( + <> + + + columns={table.columns} + data={table.data} + sorting={table.sorting} + pagination={table.pagination} + /> + +) diff --git a/src/presentation/containers/tableContainer/types.ts b/src/presentation/containers/tableContainer/types.ts new file mode 100644 index 00000000..023e8b04 --- /dev/null +++ b/src/presentation/containers/tableContainer/types.ts @@ -0,0 +1,8 @@ +import { RowData } from '@tanstack/react-table' + +import type { DataTableProps, InputProps } from '@/presentation/components/ui' + +export type TableContainerProps = { + table: DataTableProps + inputSearch: InputProps +} From 47e971c04925bd27371dad6007384c1e1a7425f4 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Mon, 1 Apr 2024 14:10:00 -0300 Subject: [PATCH 003/162] style: fix input container styles --- src/presentation/components/ui/input/input.tsx | 2 +- src/presentation/components/ui/input/styles.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/presentation/components/ui/input/input.tsx b/src/presentation/components/ui/input/input.tsx index 40ff1f9b..a34d99dc 100644 --- a/src/presentation/components/ui/input/input.tsx +++ b/src/presentation/components/ui/input/input.tsx @@ -41,7 +41,7 @@ export const Input = forwardRef( }) return ( -
+
{iconsStart.map(({ key, icon: Icon, onClick }) => ( Date: Mon, 1 Apr 2024 14:30:00 -0300 Subject: [PATCH 004/162] fix: pagination ellipsis broken screen --- src/presentation/components/ui/pagination/ellipsis.tsx | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/presentation/components/ui/pagination/ellipsis.tsx b/src/presentation/components/ui/pagination/ellipsis.tsx index 6dd293df..2ca8f09b 100644 --- a/src/presentation/components/ui/pagination/ellipsis.tsx +++ b/src/presentation/components/ui/pagination/ellipsis.tsx @@ -2,13 +2,8 @@ import { MoreHorizontal } from 'lucide-react' import { cn } from '@/main/utils' -type EllipsisProps = React.ComponentProps<'span'> & { - text?: string -} - -export const Ellipsis: React.FC = ({ +export const Ellipsis: React.FC> = ({ className, - text = 'Mais páginas', ...props }) => ( = ({ className={cn('flex h-9 w-9 items-center justify-center', className)} {...props} > - - {text} + ) From 5257fa42cd687b2e0b60c6d70413cb43c6199419 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Mon, 1 Apr 2024 14:30:00 -0300 Subject: [PATCH 005/162] feat: pagintion item add isDisabled variant --- .../components/ui/pagination/item.tsx | 27 ++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/src/presentation/components/ui/pagination/item.tsx b/src/presentation/components/ui/pagination/item.tsx index 44cf7d9a..1af54526 100644 --- a/src/presentation/components/ui/pagination/item.tsx +++ b/src/presentation/components/ui/pagination/item.tsx @@ -1,10 +1,31 @@ import { forwardRef, ComponentProps } from 'react' +import { VariantProps, cva } from 'class-variance-authority' +import clsx from 'clsx' + import { cn } from '@/main/utils' -export const Item = forwardRef>( - ({ className, ...props }, ref) => ( -
  • +const itemVariants = cva('cursor-pointer', { + variants: { + isDisabled: { + true: clsx`cursor-not-allowed opacity-50`, + false: '' + } + }, + defaultVariants: { + isDisabled: false + } +}) + +type ItemProps = ComponentProps<'li'> & VariantProps + +export const Item = forwardRef( + ({ className, isDisabled, ...props }, ref) => ( +
  • ) ) From d586538576487038a5c0c760e5e78580d8f85d38 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Tue, 2 Apr 2024 09:15:02 -0300 Subject: [PATCH 006/162] chore: fix eslint rule --- .eslintrc.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.eslintrc.json b/.eslintrc.json index 35a1b6da..0cbb3538 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -111,6 +111,12 @@ "react/prop-types": "off", "react/require-default-props": "off", "react/function-component-definition": "off", + "react/no-unstable-nested-components": [ + "error", + { + "allowAsProps": true + } + ], "class-methods-use-this": "off" }, "overrides": [ From 8c90eb49d788684d95aa1c4398538e4e98952c43 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Tue, 2 Apr 2024 09:15:21 -0300 Subject: [PATCH 007/162] feat: wip add page container --- src/main/routes/routes.tsx | 3 +- src/presentation/containers/index.ts | 1 + .../containers/pageContainer/index.tsx | 114 ++++++++++++++++++ 3 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 src/presentation/containers/pageContainer/index.tsx diff --git a/src/main/routes/routes.tsx b/src/main/routes/routes.tsx index 79d8b701..f22d11e3 100644 --- a/src/main/routes/routes.tsx +++ b/src/main/routes/routes.tsx @@ -1,5 +1,6 @@ import { MakeLoginPage, MakeSignUpPage } from '@/main/factories/pages' import { PrivateRouteProxy } from '@/main/proxies' +import { PageContainer } from '@/presentation/containers' import { PAGE_PATHS, Pages } from './paths' @@ -33,7 +34,7 @@ export const ROUTES = Object.freeze({ path: () => PAGE_PATHS.properties, component: ( -

    Under construction!

    +
    ) }, diff --git a/src/presentation/containers/index.ts b/src/presentation/containers/index.ts index 28039e12..756bb950 100644 --- a/src/presentation/containers/index.ts +++ b/src/presentation/containers/index.ts @@ -1 +1,2 @@ export * from './loggedContainer' +export * from './pageContainer' diff --git a/src/presentation/containers/pageContainer/index.tsx b/src/presentation/containers/pageContainer/index.tsx new file mode 100644 index 00000000..71cf3d99 --- /dev/null +++ b/src/presentation/containers/pageContainer/index.tsx @@ -0,0 +1,114 @@ +import { useState } from 'react' + +import { ColumnDef, PaginationState, SortingState } from '@tanstack/react-table' +import { MoreHorizontal, Pencil, Trash2 } from 'lucide-react' + +import { Button, DropdownMenu } from '@/presentation/components/ui' + +import { TableContainer } from '../tableContainer' + +type Property = { + id: string + producer: string + name: string + county: { + city: string + state: string + } +} + +export const PageContainer: React.FC = () => { + const columns: ColumnDef[] = [ + { + accessorKey: 'producer', + header: 'Produtor' + }, + { + accessorKey: 'name', + header: 'Propriedade' + }, + { + accessorKey: 'county', + header: 'Município', + accessorFn: ({ county }) => `${county.city} - ${county.state}` + }, + { + id: 'row-actions', + header: '', + cell: ({ row }) => { + const { id } = row.original + + return ( + + + + + + + Editar + + + + Excluir + + + + ) + } + } + ] + + const data: Property[] = Array.from({ length: 60 }, (_, index) => ({ + id: (index + 1).toString(), + producer: `Producer ${index + 1}`, + name: `Property ${index + 1}`, + county: { + city: 'Pato Branco', + state: 'PR' + } + })) + + const [sorting, setSorting] = useState([]) + const [page, setPage] = useState({ + pageIndex: 0, + pageSize: 0 + }) + + return ( +
    +
    +
    +
    + + Propriedades + +

    + Gerenciamento das propriedades dos produtores +

    +
    + + +
    +
    +
    + +
    +
    + ) +} From 790a72e21a13de707ce4de8c65d631335111ed7a Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Tue, 2 Apr 2024 19:46:54 -0300 Subject: [PATCH 008/162] fix: use correct sorting prop on Datatable stories --- .../components/ui/dataTable/index.stories.tsx | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/presentation/components/ui/dataTable/index.stories.tsx b/src/presentation/components/ui/dataTable/index.stories.tsx index 62f095fd..349b8e11 100644 --- a/src/presentation/components/ui/dataTable/index.stories.tsx +++ b/src/presentation/components/ui/dataTable/index.stories.tsx @@ -1,7 +1,7 @@ import { useState } from 'react' import { Meta, StoryFn } from '@storybook/react/' -import { ColumnDef, SortingState } from '@tanstack/react-table' +import { ColumnDef, PaginationState, SortingState } from '@tanstack/react-table' import { DataTable, type DataTableProps } from '.' @@ -59,11 +59,26 @@ export default { const Template: StoryFn> = (args) => { const [sorting, setSorting] = useState([]) + const [pagination, setPagination] = useState({ + pageIndex: 0, + pageSize: 0 + }) return (
    - - Sorting State: {JSON.stringify(sorting, null, 2)} + +

    Sorting State: {JSON.stringify(sorting, null, 2)}

    +

    Pagination State: {JSON.stringify(pagination, null, 2)}

    ) } From ad651c629298543b44090d19908a234c6bad77f5 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Fri, 5 Apr 2024 19:31:21 -0300 Subject: [PATCH 009/162] feat: add msw and faker setup --- package.json | 8 +- pnpm-lock.yaml | 204 +++++++++++++++++++++++++- public/mockServiceWorker.js | 284 ++++++++++++++++++++++++++++++++++++ src/mocks/browser.ts | 5 + src/mocks/modules/index.ts | 5 + 5 files changed, 504 insertions(+), 2 deletions(-) create mode 100644 public/mockServiceWorker.js create mode 100644 src/mocks/browser.ts create mode 100644 src/mocks/modules/index.ts diff --git a/package.json b/package.json index 209838d8..ba437887 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ }, "devDependencies": { "@commitlint/config-conventional": "^17.7.0", - "@faker-js/faker": "^8.0.2", + "@faker-js/faker": "^8.4.0", "@storybook/addon-actions": "^7.3.0", "@storybook/addon-essentials": "^7.3.0", "@storybook/addon-interactions": "^7.3.0", @@ -70,6 +70,7 @@ "eslint-plugin-storybook": "^0.6.13", "husky": "^8.0.3", "lint-staged": "^13.2.3", + "msw": "^2.2.13", "postcss": "^8.4.33", "prettier": "^3.1.0", "storybook": "^7.3.0", @@ -87,5 +88,10 @@ "engines": { "node": ">=18.0.0", "npm": ">=6.14.13" + }, + "msw": { + "workerDirectory": [ + "public" + ] } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bfd61c78..fe0d1e96 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -71,7 +71,7 @@ devDependencies: specifier: ^17.7.0 version: 17.8.1 '@faker-js/faker': - specifier: ^8.0.2 + specifier: ^8.4.0 version: 8.4.0 '@storybook/addon-actions': specifier: ^7.3.0 @@ -154,6 +154,9 @@ devDependencies: lint-staged: specifier: ^13.2.3 version: 13.3.0 + msw: + specifier: ^2.2.13 + version: 2.2.13(typescript@5.3.3) postcss: specifier: ^8.4.33 version: 8.4.33 @@ -1481,6 +1484,18 @@ packages: resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} dev: true + /@bundled-es-modules/cookie@2.0.0: + resolution: {integrity: sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw==} + dependencies: + cookie: 0.5.0 + dev: true + + /@bundled-es-modules/statuses@1.0.1: + resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==} + dependencies: + statuses: 2.0.1 + dev: true + /@colors/colors@1.5.0: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} @@ -1963,6 +1978,38 @@ packages: resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} dev: true + /@inquirer/confirm@3.1.1: + resolution: {integrity: sha512-epf2RVHJJxX5qF85U41PBq9qq2KTJW9sKNLx6+bb2/i2rjXgeoHVGUm8kJxZHavrESgXgBLKCABcfOJYIso8cQ==} + engines: {node: '>=18'} + dependencies: + '@inquirer/core': 7.1.1 + '@inquirer/type': 1.2.1 + dev: true + + /@inquirer/core@7.1.1: + resolution: {integrity: sha512-rD1UI3eARN9qJBcLRXPOaZu++Bg+xsk0Tuz1EUOXEW+UbYif1sGjr0Tw7lKejHzKD9IbXE1CEtZ+xR/DrNlQGQ==} + engines: {node: '>=18'} + dependencies: + '@inquirer/type': 1.2.1 + '@types/mute-stream': 0.0.4 + '@types/node': 20.12.4 + '@types/wrap-ansi': 3.0.0 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-spinners: 2.9.2 + cli-width: 4.1.0 + figures: 3.2.0 + mute-stream: 1.0.0 + signal-exit: 4.1.0 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + dev: true + + /@inquirer/type@1.2.1: + resolution: {integrity: sha512-xwMfkPAxeo8Ji/IxfUSqzRi0/+F2GIqJmpc5/thelgMGsjNZcjDDRBO9TLXT1s/hdx/mK5QbVIvgoLIFgXhTMQ==} + engines: {node: '>=18'} + dev: true + /@isaacs/cliui@8.0.2: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -2105,6 +2152,23 @@ packages: react: 18.2.0 dev: true + /@mswjs/cookies@1.1.0: + resolution: {integrity: sha512-0ZcCVQxifZmhwNBoQIrystCb+2sWBY2Zw8lpfJBPCHGCA/HWqehITeCRVIv4VMy8MPlaHo2w2pTHFV2pFfqKPw==} + engines: {node: '>=18'} + dev: true + + /@mswjs/interceptors@0.26.15: + resolution: {integrity: sha512-HM47Lu1YFmnYHKMBynFfjCp0U/yRskHj/8QEJW0CBEPOlw8Gkmjfll+S9b8M7V5CNDw2/ciRxjjnWeaCiblSIQ==} + engines: {node: '>=18'} + dependencies: + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/logger': 0.3.0 + '@open-draft/until': 2.1.0 + is-node-process: 1.2.0 + outvariant: 1.4.2 + strict-event-emitter: 0.5.1 + dev: true + /@ndelangen/get-tarball@3.0.9: resolution: {integrity: sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA==} dependencies: @@ -2131,6 +2195,21 @@ packages: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.0 + /@open-draft/deferred-promise@2.2.0: + resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} + dev: true + + /@open-draft/logger@0.3.0: + resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} + dependencies: + is-node-process: 1.2.0 + outvariant: 1.4.2 + dev: true + + /@open-draft/until@2.1.0: + resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} + dev: true + /@pkgjs/parseargs@0.11.0: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -3818,6 +3897,10 @@ packages: '@types/node': 20.11.14 dev: true + /@types/cookie@0.6.0: + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + dev: true + /@types/cross-spawn@6.0.6: resolution: {integrity: sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==} dependencies: @@ -3947,6 +4030,12 @@ packages: resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} dev: true + /@types/mute-stream@0.0.4: + resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==} + dependencies: + '@types/node': 20.12.4 + dev: true + /@types/node-fetch@2.6.11: resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==} dependencies: @@ -3966,6 +4055,12 @@ packages: undici-types: 5.26.5 dev: true + /@types/node@20.12.4: + resolution: {integrity: sha512-E+Fa9z3wSQpzgYQdYmme5X3OTuejnnTx88A6p6vkkJosR3KBz+HpE3kqNm98VE6cfLFcISx7zW7MsJkH6KwbTw==} + dependencies: + undici-types: 5.26.5 + dev: true + /@types/node@20.5.1: resolution: {integrity: sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==} @@ -4026,6 +4121,10 @@ packages: '@types/node': 20.11.14 dev: true + /@types/statuses@2.0.5: + resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==} + dev: true + /@types/unist@2.0.10: resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} dev: true @@ -4038,6 +4137,10 @@ packages: resolution: {integrity: sha512-c/hzNDBh7eRF+KbCf+OoZxKbnkpaK/cKp9iLQWqB7muXtM+MtL9SUUH8vCFcLn6dH1Qm05jiexK0ofWY7TfOhQ==} dev: true + /@types/wrap-ansi@3.0.0: + resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} + dev: true + /@types/yargs-parser@21.0.3: resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} dev: true @@ -4398,6 +4501,13 @@ packages: uri-js: 4.4.1 dev: true + /ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.21.3 + dev: true + /ansi-escapes@5.0.0: resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} engines: {node: '>=12'} @@ -4965,6 +5075,11 @@ packages: string-width: 5.1.2 dev: true + /cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + dev: true + /cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -6174,6 +6289,13 @@ packages: resolution: {integrity: sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==} dev: true + /figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -6576,6 +6698,11 @@ packages: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true + /graphql@16.8.1: + resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + dev: true + /gunzip-maybe@1.4.2: resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} hasBin: true @@ -6649,6 +6776,10 @@ packages: dependencies: function-bind: 1.1.2 + /headers-polyfill@4.0.3: + resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} + dev: true + /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true @@ -6917,6 +7048,10 @@ packages: engines: {node: '>= 0.4'} dev: true + /is-node-process@1.2.0: + resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} + dev: true + /is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} @@ -7747,6 +7882,42 @@ packages: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true + /msw@2.2.13(typescript@5.3.3): + resolution: {integrity: sha512-ljFf1xZsU0b4zv1l7xzEmC6OZA6yD06hcx0H+dc8V0VypaP3HGYJa1rMLjQbBWl32ptGhcfwcPCWDB1wjmsftw==} + engines: {node: '>=18'} + hasBin: true + requiresBuild: true + peerDependencies: + typescript: '>= 4.7.x' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@bundled-es-modules/cookie': 2.0.0 + '@bundled-es-modules/statuses': 1.0.1 + '@inquirer/confirm': 3.1.1 + '@mswjs/cookies': 1.1.0 + '@mswjs/interceptors': 0.26.15 + '@open-draft/until': 2.1.0 + '@types/cookie': 0.6.0 + '@types/statuses': 2.0.5 + chalk: 4.1.2 + graphql: 16.8.1 + headers-polyfill: 4.0.3 + is-node-process: 1.2.0 + outvariant: 1.4.2 + path-to-regexp: 6.2.1 + strict-event-emitter: 0.5.1 + type-fest: 4.15.0 + typescript: 5.3.3 + yargs: 17.7.2 + dev: true + + /mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true + /mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} dependencies: @@ -8006,6 +8177,10 @@ packages: wcwidth: 1.0.1 dev: true + /outvariant@1.4.2: + resolution: {integrity: sha512-Ou3dJ6bA/UJ5GVHxah4LnqDwZRwAmWxrG3wtrHrbGnP4RnLCtA64A4F+ae7Y8ww660JaddSoArUR5HjipWSHAQ==} + dev: true + /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -8117,6 +8292,10 @@ packages: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} dev: true + /path-to-regexp@6.2.1: + resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} + dev: true + /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -9083,6 +9262,10 @@ packages: resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} dev: true + /strict-event-emitter@0.5.1: + resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} + dev: true + /string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} @@ -9539,6 +9722,11 @@ packages: engines: {node: '>=10'} dev: true + /type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + dev: true + /type-fest@0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} engines: {node: '>=8'} @@ -9559,6 +9747,11 @@ packages: engines: {node: '>=12.20'} dev: true + /type-fest@4.15.0: + resolution: {integrity: sha512-tB9lu0pQpX5KJq54g+oHOLumOx+pMep4RaM6liXh2PKmVRFF+/vAtUP0ZaJ0kOySfVNjF6doBWPHhBhISKdlIA==} + engines: {node: '>=16'} + dev: true + /type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -9947,6 +10140,15 @@ packages: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true + /wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} diff --git a/public/mockServiceWorker.js b/public/mockServiceWorker.js new file mode 100644 index 00000000..07eb2d52 --- /dev/null +++ b/public/mockServiceWorker.js @@ -0,0 +1,284 @@ +/* eslint-disable */ +/* tslint:disable */ + +/** + * Mock Service Worker. + * @see https://github.com/mswjs/msw + * - Please do NOT modify this file. + * - Please do NOT serve this file on production. + */ + +const PACKAGE_VERSION = '2.2.13' +const INTEGRITY_CHECKSUM = '26357c79639bfa20d64c0efca2a87423' +const IS_MOCKED_RESPONSE = Symbol('isMockedResponse') +const activeClientIds = new Set() + +self.addEventListener('install', function () { + self.skipWaiting() +}) + +self.addEventListener('activate', function (event) { + event.waitUntil(self.clients.claim()) +}) + +self.addEventListener('message', async function (event) { + const clientId = event.source.id + + if (!clientId || !self.clients) { + return + } + + const client = await self.clients.get(clientId) + + if (!client) { + return + } + + const allClients = await self.clients.matchAll({ + type: 'window' + }) + + switch (event.data) { + case 'KEEPALIVE_REQUEST': { + sendToClient(client, { + type: 'KEEPALIVE_RESPONSE' + }) + break + } + + case 'INTEGRITY_CHECK_REQUEST': { + sendToClient(client, { + type: 'INTEGRITY_CHECK_RESPONSE', + payload: { + packageVersion: PACKAGE_VERSION, + checksum: INTEGRITY_CHECKSUM + } + }) + break + } + + case 'MOCK_ACTIVATE': { + activeClientIds.add(clientId) + + sendToClient(client, { + type: 'MOCKING_ENABLED', + payload: true + }) + break + } + + case 'MOCK_DEACTIVATE': { + activeClientIds.delete(clientId) + break + } + + case 'CLIENT_CLOSED': { + activeClientIds.delete(clientId) + + const remainingClients = allClients.filter((client) => { + return client.id !== clientId + }) + + // Unregister itself when there are no more clients + if (remainingClients.length === 0) { + self.registration.unregister() + } + + break + } + } +}) + +self.addEventListener('fetch', function (event) { + const { request } = event + + // Bypass navigation requests. + if (request.mode === 'navigate') { + return + } + + // Opening the DevTools triggers the "only-if-cached" request + // that cannot be handled by the worker. Bypass such requests. + if (request.cache === 'only-if-cached' && request.mode !== 'same-origin') { + return + } + + // Bypass all requests when there are no active clients. + // Prevents the self-unregistered worked from handling requests + // after it's been deleted (still remains active until the next reload). + if (activeClientIds.size === 0) { + return + } + + // Generate unique request ID. + const requestId = crypto.randomUUID() + event.respondWith(handleRequest(event, requestId)) +}) + +async function handleRequest(event, requestId) { + const client = await resolveMainClient(event) + const response = await getResponse(event, client, requestId) + + // Send back the response clone for the "response:*" life-cycle events. + // Ensure MSW is active and ready to handle the message, otherwise + // this message will pend indefinitely. + if (client && activeClientIds.has(client.id)) { + ;(async function () { + const responseClone = response.clone() + + sendToClient( + client, + { + type: 'RESPONSE', + payload: { + requestId, + isMockedResponse: IS_MOCKED_RESPONSE in response, + type: responseClone.type, + status: responseClone.status, + statusText: responseClone.statusText, + body: responseClone.body, + headers: Object.fromEntries(responseClone.headers.entries()) + } + }, + [responseClone.body] + ) + })() + } + + return response +} + +// Resolve the main client for the given event. +// Client that issues a request doesn't necessarily equal the client +// that registered the worker. It's with the latter the worker should +// communicate with during the response resolving phase. +async function resolveMainClient(event) { + const client = await self.clients.get(event.clientId) + + if (client?.frameType === 'top-level') { + return client + } + + const allClients = await self.clients.matchAll({ + type: 'window' + }) + + return allClients + .filter((client) => { + // Get only those clients that are currently visible. + return client.visibilityState === 'visible' + }) + .find((client) => { + // Find the client ID that's recorded in the + // set of clients that have registered the worker. + return activeClientIds.has(client.id) + }) +} + +async function getResponse(event, client, requestId) { + const { request } = event + + // Clone the request because it might've been already used + // (i.e. its body has been read and sent to the client). + const requestClone = request.clone() + + function passthrough() { + const headers = Object.fromEntries(requestClone.headers.entries()) + + // Remove internal MSW request header so the passthrough request + // complies with any potential CORS preflight checks on the server. + // Some servers forbid unknown request headers. + delete headers['x-msw-intention'] + + return fetch(requestClone, { headers }) + } + + // Bypass mocking when the client is not active. + if (!client) { + return passthrough() + } + + // Bypass initial page load requests (i.e. static assets). + // The absence of the immediate/parent client in the map of the active clients + // means that MSW hasn't dispatched the "MOCK_ACTIVATE" event yet + // and is not ready to handle requests. + if (!activeClientIds.has(client.id)) { + return passthrough() + } + + // Notify the client that a request has been intercepted. + const requestBuffer = await request.arrayBuffer() + const clientMessage = await sendToClient( + client, + { + type: 'REQUEST', + payload: { + id: requestId, + url: request.url, + mode: request.mode, + method: request.method, + headers: Object.fromEntries(request.headers.entries()), + cache: request.cache, + credentials: request.credentials, + destination: request.destination, + integrity: request.integrity, + redirect: request.redirect, + referrer: request.referrer, + referrerPolicy: request.referrerPolicy, + body: requestBuffer, + keepalive: request.keepalive + } + }, + [requestBuffer] + ) + + switch (clientMessage.type) { + case 'MOCK_RESPONSE': { + return respondWithMock(clientMessage.data) + } + + case 'PASSTHROUGH': { + return passthrough() + } + } + + return passthrough() +} + +function sendToClient(client, message, transferrables = []) { + return new Promise((resolve, reject) => { + const channel = new MessageChannel() + + channel.port1.onmessage = (event) => { + if (event.data && event.data.error) { + return reject(event.data.error) + } + + resolve(event.data) + } + + client.postMessage( + message, + [channel.port2].concat(transferrables.filter(Boolean)) + ) + }) +} + +async function respondWithMock(response) { + // Setting response status code to 0 is a no-op. + // However, when responding with a "Response.error()", the produced Response + // instance will have status code set to 0. Since it's not possible to create + // a Response instance with status code 0, handle that use-case separately. + if (response.status === 0) { + return Response.error() + } + + const mockedResponse = new Response(response.body, response) + + Reflect.defineProperty(mockedResponse, IS_MOCKED_RESPONSE, { + value: true, + enumerable: true + }) + + return mockedResponse +} diff --git a/src/mocks/browser.ts b/src/mocks/browser.ts new file mode 100644 index 00000000..2932acc2 --- /dev/null +++ b/src/mocks/browser.ts @@ -0,0 +1,5 @@ +import { setupWorker } from 'msw/browser' + +import { handlers } from './modules' + +export const worker = setupWorker(...handlers) diff --git a/src/mocks/modules/index.ts b/src/mocks/modules/index.ts new file mode 100644 index 00000000..46a1699e --- /dev/null +++ b/src/mocks/modules/index.ts @@ -0,0 +1,5 @@ +import { type HttpHandler } from 'msw' + +import { userHandlers } from './user' + +export const handlers: HttpHandler[] = [...userHandlers] From 42bd875b0f3b41bb236a818f0851f8fbd47fc8af Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Fri, 5 Apr 2024 19:33:27 -0300 Subject: [PATCH 010/162] feat: add msw middlewares --- src/mocks/lib/index.ts | 37 +++++++++++++++++++++++++++++++ src/mocks/middleware/index.ts | 2 ++ src/mocks/middleware/withAuth.ts | 27 ++++++++++++++++++++++ src/mocks/middleware/withDelay.ts | 11 +++++++++ 4 files changed, 77 insertions(+) create mode 100644 src/mocks/lib/index.ts create mode 100644 src/mocks/middleware/index.ts create mode 100644 src/mocks/middleware/withAuth.ts create mode 100644 src/mocks/middleware/withDelay.ts diff --git a/src/mocks/lib/index.ts b/src/mocks/lib/index.ts new file mode 100644 index 00000000..136f8102 --- /dev/null +++ b/src/mocks/lib/index.ts @@ -0,0 +1,37 @@ +import { + type DefaultBodyType, + type HttpResponseResolver, + type PathParams, + http +} from 'msw' + +type Method = keyof typeof http + +type HttpProps< + Params extends PathParams, + RequestBodyType extends DefaultBodyType, + ResponseBodyType extends DefaultBodyType +> = { + routePath: string + method: Method + middlewares: Array<(resolver: HttpResponseResolver) => HttpResponseResolver> + resolver: HttpResponseResolver +} + +export const httpWithMiddleware = < + Params extends PathParams, + RequestBodyType extends DefaultBodyType, + ResponseBodyType extends DefaultBodyType +>({ + routePath, + method, + middlewares, + resolver +}: HttpProps) => { + const resolverHandler = middlewares.reduceRight( + (prevResolver, currentResolver) => currentResolver(prevResolver), + resolver as HttpResponseResolver + ) + + return http[method](routePath, resolverHandler) +} diff --git a/src/mocks/middleware/index.ts b/src/mocks/middleware/index.ts new file mode 100644 index 00000000..cb53311c --- /dev/null +++ b/src/mocks/middleware/index.ts @@ -0,0 +1,2 @@ +export * from './withAuth' +export * from './withDelay' diff --git a/src/mocks/middleware/withAuth.ts b/src/mocks/middleware/withAuth.ts new file mode 100644 index 00000000..739ba729 --- /dev/null +++ b/src/mocks/middleware/withAuth.ts @@ -0,0 +1,27 @@ +import { + DefaultBodyType, + HttpResponse, + PathParams, + type HttpResponseResolver +} from 'msw' +import { type AsyncResponseResolverReturnType } from 'msw/lib/core/handlers/RequestHandler' + +export function withAuth< + Params extends PathParams, + RequestBodyType extends DefaultBodyType, + ResponseBodyType extends DefaultBodyType +>( + resolver: HttpResponseResolver +): HttpResponseResolver { + return (context) => { + const { request } = context + + if (!request.headers.get('Authorization')) { + return new HttpResponse(null, { + status: 401 + }) as AsyncResponseResolverReturnType + } + + return resolver(context) + } +} diff --git a/src/mocks/middleware/withDelay.ts b/src/mocks/middleware/withDelay.ts new file mode 100644 index 00000000..959ea0c5 --- /dev/null +++ b/src/mocks/middleware/withDelay.ts @@ -0,0 +1,11 @@ +import { HttpResponseResolver, delay } from 'msw' + +const ONE_SECOND = 1000 + +export function withDelay(durationMs = ONE_SECOND) { + return (resolver: HttpResponseResolver): HttpResponseResolver => + async (...args) => { + await delay(durationMs) + return resolver(...args) + } +} From 957f27d3cd2421db4540b2922b7a0be8d6b793f0 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Fri, 5 Apr 2024 19:33:57 -0300 Subject: [PATCH 011/162] feat: add msw user module with login service --- src/mocks/modules/user/index.ts | 5 +++ .../modules/user/services/loginService.ts | 40 +++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 src/mocks/modules/user/index.ts create mode 100644 src/mocks/modules/user/services/loginService.ts diff --git a/src/mocks/modules/user/index.ts b/src/mocks/modules/user/index.ts new file mode 100644 index 00000000..f271149f --- /dev/null +++ b/src/mocks/modules/user/index.ts @@ -0,0 +1,5 @@ +import { type HttpHandler } from 'msw' + +import { loginService } from './services/loginService' + +export const userHandlers: HttpHandler[] = [loginService] diff --git a/src/mocks/modules/user/services/loginService.ts b/src/mocks/modules/user/services/loginService.ts new file mode 100644 index 00000000..f8ffa33c --- /dev/null +++ b/src/mocks/modules/user/services/loginService.ts @@ -0,0 +1,40 @@ +import { faker } from '@faker-js/faker' +import { HttpResponse } from 'msw' + +import { httpWithMiddleware } from '@/mocks/lib' +import { withDelay } from '@/mocks/middleware' + +type Params = { + username: string + password: string +} + +type Response = { + user: { + displayName: string + } + token: string +} + +export const loginService = httpWithMiddleware({ + routePath: 'login', + method: 'post', + middlewares: [withDelay()], + resolver: async ({ request }) => { + const { username, password } = await request.json() + + if ( + username === 'mockedUser@gmail.com' && + password === 'mockedUserPassword' + ) { + return HttpResponse.json({ + token: faker.string.uuid(), + user: { + displayName: faker.person.fullName() + } + }) + } + + return HttpResponse.json({}, { status: 401 }) + } +}) From 7eb7524e604cab353e1f2d956d1cd8e1772261d9 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Fri, 5 Apr 2024 16:30:00 -0300 Subject: [PATCH 012/162] feat: add scripts to generate a fake database for each mocked server endpoint --- .gitignore | 5 ++++- package.json | 3 ++- scripts/seed/data/index.mjs | 1 + scripts/seed/data/properties.mjs | 17 +++++++++++++++++ scripts/seed/index.mjs | 25 +++++++++++++++++++++++++ 5 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 scripts/seed/data/index.mjs create mode 100644 scripts/seed/data/properties.mjs create mode 100644 scripts/seed/index.mjs diff --git a/.gitignore b/.gitignore index d5d5ca66..08f768ef 100644 --- a/.gitignore +++ b/.gitignore @@ -31,4 +31,7 @@ storybook-docs docs-build # Cache -.eslintcache \ No newline at end of file +.eslintcache + +# Mocked Database +database \ No newline at end of file diff --git a/package.json b/package.json index ba437887..a81957c3 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,8 @@ "type:check": "tsc --noEmit", "lint:staged": "lint-staged", "storybook:dev": "storybook dev -p 6006", - "storybook:build": "storybook build -o docs-build" + "storybook:build": "storybook build -o docs-build", + "seed:mock": "node ./scripts/seed/index.mjs" }, "dependencies": { "@radix-ui/react-avatar": "^1.0.4", diff --git a/scripts/seed/data/index.mjs b/scripts/seed/data/index.mjs new file mode 100644 index 00000000..80449012 --- /dev/null +++ b/scripts/seed/data/index.mjs @@ -0,0 +1 @@ +export * from './properties.mjs' diff --git a/scripts/seed/data/properties.mjs b/scripts/seed/data/properties.mjs new file mode 100644 index 00000000..c19f690f --- /dev/null +++ b/scripts/seed/data/properties.mjs @@ -0,0 +1,17 @@ +import { faker } from '@faker-js/faker/locale/pt_BR' + +export const propertiesData = Array.from( + { + length: faker.number.int({ + min: 1, + max: 100 + }) + }, + () => ({ + id: faker.string.uuid(), + name: faker.company.name(), + city: faker.location.city(), + state: faker.location.state(), + producer: faker.person.fullName() + }) +) diff --git a/scripts/seed/index.mjs b/scripts/seed/index.mjs new file mode 100644 index 00000000..ee41140c --- /dev/null +++ b/scripts/seed/index.mjs @@ -0,0 +1,25 @@ +import fs from 'fs' + +import * as DataModules from './data/index.mjs' + +const dir = './database' +const databaseKeys = [] + +const convertAndWriteJSON = (data, fileName) => { + const jsonData = JSON.stringify(data, null, 2) + + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }) + } + + const jsonFilePath = `${dir}/${fileName}.json` + fs.writeFileSync(jsonFilePath, jsonData) + console.info(`Dados gerados ${jsonFilePath}\n`) +} + +for (const [key, data] of Object.entries(DataModules)) { + if (Array.isArray(data)) { + databaseKeys.push(key) + convertAndWriteJSON(data, key) + } +} From 8e01a90e01838d9f6f477cb7462421a3bd94df77 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Fri, 5 Apr 2024 16:30:00 -0300 Subject: [PATCH 013/162] feat: add sort for apiHttpClient --- src/data/protocols/http/httpClient.ts | 7 ++++ src/infra/http/apiHttpClient.ts | 59 +++++++++++++++------------ 2 files changed, 41 insertions(+), 25 deletions(-) diff --git a/src/data/protocols/http/httpClient.ts b/src/data/protocols/http/httpClient.ts index 5b62cb22..b687af95 100644 --- a/src/data/protocols/http/httpClient.ts +++ b/src/data/protocols/http/httpClient.ts @@ -13,6 +13,8 @@ export enum HttpStatusCode { serverError = 500 } +export type SortDirection = 'asc' | 'desc' + export type HttpRequest> = { url: string method: HttpMethod @@ -22,11 +24,16 @@ export type HttpRequest> = { page: number perPage?: number } + sort?: { + direction: SortDirection + field: string + } } export type HttpResponse = { statusCode: HttpStatusCode body?: T + itemsPerPage: number } export interface IHttpClient> { diff --git a/src/infra/http/apiHttpClient.ts b/src/infra/http/apiHttpClient.ts index 71f8dbf5..4e188fc9 100644 --- a/src/infra/http/apiHttpClient.ts +++ b/src/infra/http/apiHttpClient.ts @@ -3,8 +3,10 @@ import axios, { AxiosResponse } from 'axios' import { IHttpClient, HttpRequest, HttpResponse } from '@/data/protocols/http' import { env } from '@/main/env' +export const ITEMS_PER_PAGE = 10 + export const baseApi = axios.create({ - baseURL: env.VITE_API_BASE_URL, + baseURL: env.VITE_API_MOCKED ? '' : env.VITE_API_BASE_URL, headers: { 'Content-Type': 'application/json' }, @@ -16,13 +18,14 @@ export class ApiHttpClient implements IHttpClient { async request(data: HttpRequest): Promise> { let axiosResponse: AxiosResponse - const { url: rawUrl, pagination, filters } = data + const { url: rawUrl, pagination, filters, sort } = data try { const url = this.makeUrlWithFiltersAndPagination({ url: rawUrl, filters, - pagination + pagination, + sort }) axiosResponse = await baseApi.request({ @@ -36,33 +39,39 @@ export class ApiHttpClient implements IHttpClient { return { statusCode: axiosResponse.status, - body: axiosResponse.data + body: axiosResponse.data, + itemsPerPage: pagination?.perPage ?? ITEMS_PER_PAGE } } - private makeUrlWithFiltersAndPagination(params: { - url: string - filters: HttpRequest['filters'] - pagination: HttpRequest['pagination'] - }) { - const { url, filters = {}, pagination = {} } = params - - const paginationKeys = Object.keys(pagination) - const filtersKeys = Object.keys(filters) + private makeUrlWithFiltersAndPagination({ + url, + filters, + pagination, + sort + }: Pick) { + if (!pagination && !filters && !sort) return url - if (!filtersKeys.length && !paginationKeys.length) return url + const query = { + filters: filters ?? {}, + pagination: pagination + ? { + ...pagination, + perPage: pagination?.perPage ? pagination.perPage : ITEMS_PER_PAGE + } + : {}, + sort: sort ?? {} + } - const esc = encodeURIComponent - const filtersAndPagination = [ - ...Object.entries(pagination).map( - ([key, value]) => `${esc(key)}=${esc(String(value))}` - ), - ...Object.entries(filters).map( - ([key, value]) => `${esc(key)}=${esc(value)}` - ) - ] + const parsedQuery = Object.entries(query) + .map(([key, value]) => { + if (typeof value === 'object' && Object.keys(value).length === 0) { + return `${encodeURIComponent(key)}=` + } + return `${encodeURIComponent(key)}=${encodeURIComponent(JSON.stringify(value))}` + }) + .join('&') - const query = filtersAndPagination.join('&') - return `${url}?${query}` + return `${url}?${parsedQuery}` } } From be8004218f657657df95c06248e881da12421b66 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sat, 6 Apr 2024 10:00:00 -0300 Subject: [PATCH 014/162] feat: add getProperties integration, export older integrations and standardizes file names --- src/data/useCases/cep/remoteGetCep.ts | 2 +- src/data/useCases/index.ts | 3 ++ src/data/useCases/property/index.ts | 1 + .../useCases/property/remoteGetProperties.ts | 52 +++++++++++++++++++ src/domain/models/index.ts | 1 + src/domain/models/propertyModel.ts | 9 ++++ src/domain/useCases/cep/{get.ts => getCep.ts} | 0 src/domain/useCases/cep/index.ts | 2 +- src/domain/useCases/index.ts | 2 + src/domain/useCases/property/getProperties.ts | 22 ++++++++ src/domain/useCases/property/index.ts | 1 + .../user/{create.ts => createUser.ts} | 0 src/domain/useCases/user/index.ts | 4 +- .../useCases/user/{login.ts => loginUser.ts} | 0 14 files changed, 95 insertions(+), 4 deletions(-) create mode 100644 src/data/useCases/index.ts create mode 100644 src/data/useCases/property/index.ts create mode 100644 src/data/useCases/property/remoteGetProperties.ts create mode 100644 src/domain/models/propertyModel.ts rename src/domain/useCases/cep/{get.ts => getCep.ts} (100%) create mode 100644 src/domain/useCases/property/getProperties.ts create mode 100644 src/domain/useCases/property/index.ts rename src/domain/useCases/user/{create.ts => createUser.ts} (100%) rename src/domain/useCases/user/{login.ts => loginUser.ts} (100%) diff --git a/src/data/useCases/cep/remoteGetCep.ts b/src/data/useCases/cep/remoteGetCep.ts index 2ff87c99..ce2538a7 100644 --- a/src/data/useCases/cep/remoteGetCep.ts +++ b/src/data/useCases/cep/remoteGetCep.ts @@ -1,7 +1,7 @@ import { IHttpClient, HttpStatusCode } from '@/data/protocols/http' import { UnexpectedError, NotFoundError } from '@/domain/errors' import { CepModel } from '@/domain/models' -import { IGetCep } from '@/domain/useCases/cep' +import { IGetCep } from '@/domain/useCases' export class RemoteGetCep implements IGetCep { constructor( diff --git a/src/data/useCases/index.ts b/src/data/useCases/index.ts new file mode 100644 index 00000000..9cabff75 --- /dev/null +++ b/src/data/useCases/index.ts @@ -0,0 +1,3 @@ +export * from './cep' +export * from './property' +export * from './user' diff --git a/src/data/useCases/property/index.ts b/src/data/useCases/property/index.ts new file mode 100644 index 00000000..a37b32d6 --- /dev/null +++ b/src/data/useCases/property/index.ts @@ -0,0 +1 @@ +export * from './remoteGetProperties' diff --git a/src/data/useCases/property/remoteGetProperties.ts b/src/data/useCases/property/remoteGetProperties.ts new file mode 100644 index 00000000..32af14f6 --- /dev/null +++ b/src/data/useCases/property/remoteGetProperties.ts @@ -0,0 +1,52 @@ +import { IHttpClient, HttpStatusCode } from '@/data/protocols/http' +import { UnexpectedError, NotFoundError } from '@/domain/errors' +import { PropertyModel } from '@/domain/models' +import { + GetPropertiesParams, + GetPropertiesResponse, + IGetProperties +} from '@/domain/useCases' + +export class RemoteGetProperties implements IGetProperties { + constructor( + private readonly url: string, + private readonly httpClient: IHttpClient + ) {} + + async execute({ + filters, + pagination, + sort + }: GetPropertiesParams): Promise { + const { statusCode, body, itemsPerPage } = await this.httpClient.request({ + url: `${this.url}`, + method: 'get', + filters, + pagination, + sort + }) + + if (statusCode === HttpStatusCode.ok && !!body) { + return { + properties: body.properties.map( + (item: any) => + ({ + id: item.id, + name: item.name, + producer: item.producer, + county: { + city: item.city, + state: item.state + } + }) as PropertyModel + ), + totalPages: Math.ceil(body.totalRegisters / itemsPerPage) + } + } + + if (statusCode === HttpStatusCode.notFound) + throw new NotFoundError('Propriedades') + + throw new UnexpectedError() + } +} diff --git a/src/domain/models/index.ts b/src/domain/models/index.ts index 1ff24c20..1ae93a3e 100644 --- a/src/domain/models/index.ts +++ b/src/domain/models/index.ts @@ -1,2 +1,3 @@ export * from './cepModel' export * from './userModel' +export * from './propertyModel' diff --git a/src/domain/models/propertyModel.ts b/src/domain/models/propertyModel.ts new file mode 100644 index 00000000..e857b003 --- /dev/null +++ b/src/domain/models/propertyModel.ts @@ -0,0 +1,9 @@ +export type PropertyModel = { + id: string + producer: string + name: string + county: { + city: string + state: string + } +} diff --git a/src/domain/useCases/cep/get.ts b/src/domain/useCases/cep/getCep.ts similarity index 100% rename from src/domain/useCases/cep/get.ts rename to src/domain/useCases/cep/getCep.ts diff --git a/src/domain/useCases/cep/index.ts b/src/domain/useCases/cep/index.ts index 7d71fd20..6804f53d 100644 --- a/src/domain/useCases/cep/index.ts +++ b/src/domain/useCases/cep/index.ts @@ -1 +1 @@ -export * from './get' +export * from './getCep' diff --git a/src/domain/useCases/index.ts b/src/domain/useCases/index.ts index c3a9c65b..9cabff75 100644 --- a/src/domain/useCases/index.ts +++ b/src/domain/useCases/index.ts @@ -1 +1,3 @@ +export * from './cep' +export * from './property' export * from './user' diff --git a/src/domain/useCases/property/getProperties.ts b/src/domain/useCases/property/getProperties.ts new file mode 100644 index 00000000..68566aee --- /dev/null +++ b/src/domain/useCases/property/getProperties.ts @@ -0,0 +1,22 @@ +import { HttpRequest, SortDirection } from '@/data/protocols/http' +import { PropertyModel } from '@/domain/models' + +export type GetPropertiesParams = { + filters?: { + name: string + } + sort?: { + direction: SortDirection + field: keyof PropertyModel + } + pagination: HttpRequest['pagination'] +} + +export type GetPropertiesResponse = { + properties: PropertyModel[] + totalPages: number +} + +export interface IGetProperties { + execute: (params: GetPropertiesParams) => Promise +} diff --git a/src/domain/useCases/property/index.ts b/src/domain/useCases/property/index.ts new file mode 100644 index 00000000..e0f7c612 --- /dev/null +++ b/src/domain/useCases/property/index.ts @@ -0,0 +1 @@ +export * from './getProperties' diff --git a/src/domain/useCases/user/create.ts b/src/domain/useCases/user/createUser.ts similarity index 100% rename from src/domain/useCases/user/create.ts rename to src/domain/useCases/user/createUser.ts diff --git a/src/domain/useCases/user/index.ts b/src/domain/useCases/user/index.ts index a222ad24..2560814b 100644 --- a/src/domain/useCases/user/index.ts +++ b/src/domain/useCases/user/index.ts @@ -1,2 +1,2 @@ -export * from './create' -export * from './login' +export * from './createUser' +export * from './loginUser' diff --git a/src/domain/useCases/user/login.ts b/src/domain/useCases/user/loginUser.ts similarity index 100% rename from src/domain/useCases/user/login.ts rename to src/domain/useCases/user/loginUser.ts From c8ebcb420bd447972678930ff0db6ddf45d9df09 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sun, 7 Apr 2024 10:00:00 -0300 Subject: [PATCH 015/162] feat: add shared functions to mock endpoints --- src/mocks/shared/filterData.ts | 12 ++++++++++++ src/mocks/shared/index.ts | 4 ++++ src/mocks/shared/normalizeFilters.ts | 21 +++++++++++++++++++++ src/mocks/shared/paginateData.ts | 11 +++++++++++ src/mocks/shared/sortData.ts | 18 ++++++++++++++++++ 5 files changed, 66 insertions(+) create mode 100644 src/mocks/shared/filterData.ts create mode 100644 src/mocks/shared/index.ts create mode 100644 src/mocks/shared/normalizeFilters.ts create mode 100644 src/mocks/shared/paginateData.ts create mode 100644 src/mocks/shared/sortData.ts diff --git a/src/mocks/shared/filterData.ts b/src/mocks/shared/filterData.ts new file mode 100644 index 00000000..576df36d --- /dev/null +++ b/src/mocks/shared/filterData.ts @@ -0,0 +1,12 @@ +export const filterData = >( + filters: Record, + data: TData[] +) => { + const filterEntries = Object.entries(filters) + + return data.filter((item) => + filterEntries.filter(([key, value]) => + item[key as keyof TData].includes(value) + ) + ) +} diff --git a/src/mocks/shared/index.ts b/src/mocks/shared/index.ts new file mode 100644 index 00000000..a02d6508 --- /dev/null +++ b/src/mocks/shared/index.ts @@ -0,0 +1,4 @@ +export * from './filterData' +export * from './normalizeFilters' +export * from './paginateData' +export * from './sortData' diff --git a/src/mocks/shared/normalizeFilters.ts b/src/mocks/shared/normalizeFilters.ts new file mode 100644 index 00000000..39b546fb --- /dev/null +++ b/src/mocks/shared/normalizeFilters.ts @@ -0,0 +1,21 @@ +import { HttpRequest } from '@/data/protocols/http' + +export const normalizeQueryFilters = (url: URL) => { + const pagination = JSON.parse( + url.searchParams.get('pagination') || '{}' + ) as HttpRequest['pagination'] + + const filters = JSON.parse( + url.searchParams.get('filters') || '{}' + ) as HttpRequest['filters'] + + const sort = JSON.parse( + url.searchParams.get('sort') || '{}' + ) as HttpRequest['sort'] + + return { + pagination, + filters, + sort + } +} diff --git a/src/mocks/shared/paginateData.ts b/src/mocks/shared/paginateData.ts new file mode 100644 index 00000000..834cb9cc --- /dev/null +++ b/src/mocks/shared/paginateData.ts @@ -0,0 +1,11 @@ +export const paginateData = >( + pagination: { + page: number + perPage?: number + }, + data: TData[] +) => { + const { page, perPage = 10 } = pagination + + return data.slice((page - 1) * perPage, page * perPage) +} diff --git a/src/mocks/shared/sortData.ts b/src/mocks/shared/sortData.ts new file mode 100644 index 00000000..d37a7579 --- /dev/null +++ b/src/mocks/shared/sortData.ts @@ -0,0 +1,18 @@ +import { SortDirection } from '@/data/protocols/http' + +export const sortData = >( + sort: { + direction: SortDirection + field: string + }, + data: TData[] +) => + data.sort((prevItem, nextItem) => { + const fieldToSort = sort.field as keyof TData + + if (sort.direction === 'asc') { + return prevItem[fieldToSort] < nextItem[fieldToSort] ? -1 : 1 + } + + return prevItem[fieldToSort] > nextItem[fieldToSort] ? -1 : 1 + }) From edb532d0a7b440c96af349df4bdab24178886859 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sun, 7 Apr 2024 10:00:00 -0300 Subject: [PATCH 016/162] feat: add get properties mock service --- src/mocks/modules/index.ts | 3 +- src/mocks/modules/property/index.ts | 5 ++ .../property/services/getPropertiesService.ts | 71 +++++++++++++++++++ 3 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 src/mocks/modules/property/index.ts create mode 100644 src/mocks/modules/property/services/getPropertiesService.ts diff --git a/src/mocks/modules/index.ts b/src/mocks/modules/index.ts index 46a1699e..6ef12ab2 100644 --- a/src/mocks/modules/index.ts +++ b/src/mocks/modules/index.ts @@ -1,5 +1,6 @@ import { type HttpHandler } from 'msw' +import { propertyHandlers } from './property' import { userHandlers } from './user' -export const handlers: HttpHandler[] = [...userHandlers] +export const handlers: HttpHandler[] = [...userHandlers, ...propertyHandlers] diff --git a/src/mocks/modules/property/index.ts b/src/mocks/modules/property/index.ts new file mode 100644 index 00000000..4bfb7c58 --- /dev/null +++ b/src/mocks/modules/property/index.ts @@ -0,0 +1,5 @@ +import { type HttpHandler } from 'msw' + +import { getPropertiesService } from './services/getPropertiesService' + +export const propertyHandlers: HttpHandler[] = [getPropertiesService] diff --git a/src/mocks/modules/property/services/getPropertiesService.ts b/src/mocks/modules/property/services/getPropertiesService.ts new file mode 100644 index 00000000..af8f645b --- /dev/null +++ b/src/mocks/modules/property/services/getPropertiesService.ts @@ -0,0 +1,71 @@ +import { HttpResponse } from 'msw' + +import { HttpStatusCode } from '@/data/protocols/http' +import { httpWithMiddleware } from '@/mocks/lib' +import { withAuth, withDelay } from '@/mocks/middleware' +import { + normalizeQueryFilters, + paginateData, + sortData, + filterData +} from '@/mocks/shared/' + +import propertiesData from '../../../../../database/propertiesData.json' + +type Params = { + filter: string + sort: string + pagination: string +} + +type Property = { + id: string + name: string + city: string + state: string + producer: string +} + +type Response = { + properties: Property[] + totalRegisters: number +} + +export const getPropertiesService = httpWithMiddleware( + { + routePath: '/api/properties', + method: 'get', + middlewares: [withDelay(), withAuth], + resolver: async ({ request }) => { + if (!propertiesData.length) { + return HttpResponse.json( + { + properties: [], + totalRegisters: 0 + }, + { + status: 404 + } + ) + } + + const url = new URL(request.url) + const { pagination, filters, sort } = normalizeQueryFilters(url) + + let filteredData = propertiesData + + if (filters) filteredData = filterData(filters, filteredData) + if (sort) filteredData = sortData(sort, filteredData) + if (pagination) + filteredData = paginateData(pagination, filteredData) + + return HttpResponse.json( + { + properties: filteredData, + totalRegisters: propertiesData.length + }, + { status: HttpStatusCode.ok } + ) + } + } +) From da12cdb1e73c1a3c349b46c14135eb465dabdaf5 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sun, 7 Apr 2024 14:00:00 -0300 Subject: [PATCH 017/162] feat: add api mocked env --- .env.example | 3 ++- src/main/env/index.ts | 3 ++- src/vite-env.d.ts | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.env.example b/.env.example index 2d1bf5ff..fac440f0 100644 --- a/.env.example +++ b/.env.example @@ -1 +1,2 @@ -VITE_API_BASE_URL= \ No newline at end of file +VITE_API_BASE_URL= +VITE_API_MOCKED= \ No newline at end of file diff --git a/src/main/env/index.ts b/src/main/env/index.ts index 63f1f17c..1f43675d 100644 --- a/src/main/env/index.ts +++ b/src/main/env/index.ts @@ -1,3 +1,4 @@ export const env = { - VITE_API_BASE_URL: import.meta.env.VITE_API_BASE_URL + VITE_API_BASE_URL: import.meta.env.VITE_API_BASE_URL, + VITE_API_MOCKED: import.meta.env.VITE_API_MOCKED } diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts index ed419a0e..ed9faea8 100644 --- a/src/vite-env.d.ts +++ b/src/vite-env.d.ts @@ -3,4 +3,5 @@ // eslint-disable-next-line @typescript-eslint/naming-convention interface ImportMetaEnv { readonly VITE_API_BASE_URL + readonly VITE_API_MOCKED } From e85c48c5755ed0d065793e41549aab83ad56c349 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sun, 7 Apr 2024 15:00:00 -0300 Subject: [PATCH 018/162] chore: use module import --- src/main/factories/useCases/cep/remoteGetCepFactory.ts | 4 ++-- src/main/factories/useCases/user/remoteCreateUserFactory.ts | 2 +- src/main/factories/useCases/user/remoteLoginFactory.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/factories/useCases/cep/remoteGetCepFactory.ts b/src/main/factories/useCases/cep/remoteGetCepFactory.ts index 7c86f76e..108e59c9 100644 --- a/src/main/factories/useCases/cep/remoteGetCepFactory.ts +++ b/src/main/factories/useCases/cep/remoteGetCepFactory.ts @@ -1,6 +1,6 @@ -import { RemoteGetCep } from '@/data/useCases/cep' +import { RemoteGetCep } from '@/data/useCases' import { CepModel } from '@/domain/models' -import { IGetCep } from '@/domain/useCases/cep' +import { IGetCep } from '@/domain/useCases' import { makeBrasilApiHttpClient } from '@/main/factories/http' export const makeRemoteGetCep = (): IGetCep => diff --git a/src/main/factories/useCases/user/remoteCreateUserFactory.ts b/src/main/factories/useCases/user/remoteCreateUserFactory.ts index b39d5a3b..0afa3129 100644 --- a/src/main/factories/useCases/user/remoteCreateUserFactory.ts +++ b/src/main/factories/useCases/user/remoteCreateUserFactory.ts @@ -1,4 +1,4 @@ -import { RemoteCreateUser } from '@/data/useCases/user' +import { RemoteCreateUser } from '@/data/useCases' import { ICreateUser } from '@/domain/useCases' import { makeApiHttpClient } from '@/main/factories/http' diff --git a/src/main/factories/useCases/user/remoteLoginFactory.ts b/src/main/factories/useCases/user/remoteLoginFactory.ts index 589d867e..0ea0dfde 100644 --- a/src/main/factories/useCases/user/remoteLoginFactory.ts +++ b/src/main/factories/useCases/user/remoteLoginFactory.ts @@ -1,4 +1,4 @@ -import { RemoteLoginUser } from '@/data/useCases/user' +import { RemoteLoginUser } from '@/data/useCases/' import { UserModel } from '@/domain/models' import { ILoginUser } from '@/domain/useCases' import { makeApiHttpClient } from '@/main/factories/http' From e9fd43d13f5e619d9dced19a7910e7f53e9273f6 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Tue, 9 Apr 2024 22:06:17 -0300 Subject: [PATCH 019/162] refactor: add mocked api prefix --- src/infra/http/apiHttpClient.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/infra/http/apiHttpClient.ts b/src/infra/http/apiHttpClient.ts index 4e188fc9..75b7dc43 100644 --- a/src/infra/http/apiHttpClient.ts +++ b/src/infra/http/apiHttpClient.ts @@ -6,7 +6,7 @@ import { env } from '@/main/env' export const ITEMS_PER_PAGE = 10 export const baseApi = axios.create({ - baseURL: env.VITE_API_MOCKED ? '' : env.VITE_API_BASE_URL, + baseURL: env.VITE_API_MOCKED ? 'api/' : env.VITE_API_BASE_URL, headers: { 'Content-Type': 'application/json' }, From 84c0ee8d8c983cbe8483723310e6a7634dc23661 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sun, 7 Apr 2024 17:00:00 -0300 Subject: [PATCH 020/162] feat: add catchError util decorator --- src/main/utils/axios/catchError.ts | 12 ++++++++++++ src/main/utils/axios/index.ts | 1 + 2 files changed, 13 insertions(+) create mode 100644 src/main/utils/axios/catchError.ts create mode 100644 src/main/utils/axios/index.ts diff --git a/src/main/utils/axios/catchError.ts b/src/main/utils/axios/catchError.ts new file mode 100644 index 00000000..22a57b9b --- /dev/null +++ b/src/main/utils/axios/catchError.ts @@ -0,0 +1,12 @@ +import { isAxiosError } from 'axios' +import toast from 'react-hot-toast' + +export const catchError = async (callback: Function) => { + try { + await callback() + } catch (error) { + if (isAxiosError(error)) { + toast.error(error.message) + } + } +} diff --git a/src/main/utils/axios/index.ts b/src/main/utils/axios/index.ts new file mode 100644 index 00000000..72c52f36 --- /dev/null +++ b/src/main/utils/axios/index.ts @@ -0,0 +1 @@ +export * from './catchError' From 34bce8da16feac3f046e95fc7c682f55d2b0fb2f Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sun, 7 Apr 2024 18:00:00 -0300 Subject: [PATCH 021/162] chore: export utils module --- src/main/utils/index.ts | 4 +++- src/main/utils/string/index.ts | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 src/main/utils/string/index.ts diff --git a/src/main/utils/index.ts b/src/main/utils/index.ts index db16d9ee..5b8d2c25 100644 --- a/src/main/utils/index.ts +++ b/src/main/utils/index.ts @@ -1,2 +1,4 @@ -export * from './time' +export * from './axios' +export * from './string' export * from './tailwind' +export * from './time' diff --git a/src/main/utils/string/index.ts b/src/main/utils/string/index.ts new file mode 100644 index 00000000..fe7ff2fc --- /dev/null +++ b/src/main/utils/string/index.ts @@ -0,0 +1 @@ +export * from './getInitials' From cdffe87dbde7367cdb71fbfb29ccf07a281fff89 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sun, 7 Apr 2024 18:00:00 -0300 Subject: [PATCH 022/162] refactor(components/ui/dataTable): add correct pagination logic and loading and not found condition --- .../components/ui/dataTable/dataTable.tsx | 114 ++++++++++-------- .../components/ui/dataTable/types.ts | 2 + 2 files changed, 65 insertions(+), 51 deletions(-) diff --git a/src/presentation/components/ui/dataTable/dataTable.tsx b/src/presentation/components/ui/dataTable/dataTable.tsx index b2d8b64f..cb77e1f0 100644 --- a/src/presentation/components/ui/dataTable/dataTable.tsx +++ b/src/presentation/components/ui/dataTable/dataTable.tsx @@ -1,9 +1,10 @@ -import { useMemo } from 'react' +import { useCallback, useMemo } from 'react' import { RowData, flexRender, getCoreRowModel, + getPaginationRowModel, useReactTable } from '@tanstack/react-table' import { ArrowDownNarrowWide, ArrowUpNarrowWide } from 'lucide-react' @@ -11,22 +12,32 @@ import { ArrowDownNarrowWide, ArrowUpNarrowWide } from 'lucide-react' import { Table } from '@/presentation/components/ui/table' import { Tooltip } from '@/presentation/components/ui/tooltip' +import { Loading } from '../loading' import { Pagination } from '../pagination' import { DataTableProps } from './types' -const REGISTERS_PER_PAGE = 10 - export const DataTable = ({ columns, data, sorting, - pagination + pagination, + totalPages, + loading = false }: DataTableProps) => { const { currentSorting, onSorting } = sorting const { currentPage, onPageChange } = pagination - const table = useReactTable({ + const { + getState, + getRowModel, + getHeaderGroups, + previousPage, + nextPage, + setPageIndex, + getCanPreviousPage, + getCanNextPage + } = useReactTable({ columns, data, state: { @@ -35,11 +46,15 @@ export const DataTable = ({ }, manualSorting: true, manualPagination: true, + pageCount: totalPages, onSortingChange: onSorting, onPaginationChange: onPageChange, - getCoreRowModel: getCoreRowModel() + getCoreRowModel: getCoreRowModel(), + getPaginationRowModel: getPaginationRowModel() }) + const page = getState().pagination.pageIndex + 1 + const tooltipText = (value: 'asc' | 'desc' | false) => { if (value === 'asc') return 'Ordenar de forma de crescente' if (value === 'desc') return 'Ordenar de forma decrescente' @@ -47,25 +62,52 @@ export const DataTable = ({ return 'Limpar ordenação' } - const lastPage = Math.ceil(data.length / REGISTERS_PER_PAGE) - - const page = useMemo(() => table.getState().pagination.pageIndex + 1, [table]) - const showInitialEllipsis = useMemo(() => page > 2, [page]) const showFinalEllipsis = useMemo(() => page + 2 > 3, [page]) const isBeforeLastPage = useMemo( - () => page + 1 < data.length, - [page, data.length] + () => page + 1 < totalPages, + [page, totalPages] ) + const tableBody = useCallback(() => { + if (loading) { + return ( + + + + + + ) + } + + if (!getRowModel().rows.length) + return ( + + + No results. + + + ) + + return getRowModel().rows.map((row) => ( + + {row.getVisibleCells().map((cell) => ( + + {flexRender(cell.column.columnDef.cell, cell.getContext())} + + ))} + + )) + }, [columns.length, getRowModel, loading]) + return (
    - {table.getHeaderGroups().map((headerGroup) => ( + {getHeaderGroups().map((headerGroup) => ( {headerGroup.headers.map((header) => ( ({ ))} - - {table.getRowModel().rows?.length ? ( - table.getRowModel().rows.map((row) => ( - - {row.getVisibleCells().map((cell) => ( - - {flexRender( - cell.column.columnDef.cell, - cell.getContext() - )} - - ))} - - )) - ) : ( - - - No results. - - - )} - + {tableBody()}
    {showInitialEllipsis ? ( <> - table.setPageIndex(0)}> + setPageIndex(0)}> 1 @@ -170,18 +185,15 @@ export const DataTable = ({ ) : null} table.setPageIndex(lastPage - 1)} - isDisabled={!table.getCanNextPage()} + onClick={() => setPageIndex(totalPages - 1)} + isDisabled={!getCanNextPage()} > - {lastPage} + {totalPages} ) : null} - + diff --git a/src/presentation/components/ui/dataTable/types.ts b/src/presentation/components/ui/dataTable/types.ts index bf17ebdc..425831fa 100644 --- a/src/presentation/components/ui/dataTable/types.ts +++ b/src/presentation/components/ui/dataTable/types.ts @@ -9,6 +9,7 @@ import { export type DataTableProps = { data: TData[] columns: ColumnDef[] + totalPages: number pagination: { currentPage: PaginationState onPageChange: OnChangeFn @@ -17,4 +18,5 @@ export type DataTableProps = { currentSorting: SortingState onSorting: OnChangeFn } + loading?: boolean } From 4efe75d81aa9e4fc472d6ce37cdab6c01235c304 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Mon, 8 Apr 2024 18:00:00 -0300 Subject: [PATCH 023/162] chore(components/ui/header): unify import --- src/presentation/components/ui/header/header.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/presentation/components/ui/header/header.tsx b/src/presentation/components/ui/header/header.tsx index 8d2b9c84..1cb21dad 100644 --- a/src/presentation/components/ui/header/header.tsx +++ b/src/presentation/components/ui/header/header.tsx @@ -1,8 +1,7 @@ import { forwardRef } from 'react' import { LogoIdrJustBrand } from '@/assets/imgs' -import { cn } from '@/main/utils' -import { getInitials } from '@/main/utils/string/getInitials' +import { cn, getInitials } from '@/main/utils' import { Avatar } from '@/presentation/components/ui/avatar' import { HeaderProps } from './types' From a0f93f6c32c6c0ef1c11e8bc298f42398ff84b52 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Mon, 8 Apr 2024 18:00:00 -0300 Subject: [PATCH 024/162] refactor: remove unnecessary factory --- src/main/factories/containers/index.ts | 1 - src/main/factories/containers/loggedContainerFactory.tsx | 7 ------- src/main/proxies/privateRouteProxy.tsx | 7 +++---- 3 files changed, 3 insertions(+), 12 deletions(-) delete mode 100644 src/main/factories/containers/index.ts delete mode 100644 src/main/factories/containers/loggedContainerFactory.tsx diff --git a/src/main/factories/containers/index.ts b/src/main/factories/containers/index.ts deleted file mode 100644 index 3dfec1cc..00000000 --- a/src/main/factories/containers/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './loggedContainerFactory' diff --git a/src/main/factories/containers/loggedContainerFactory.tsx b/src/main/factories/containers/loggedContainerFactory.tsx deleted file mode 100644 index 1ba89817..00000000 --- a/src/main/factories/containers/loggedContainerFactory.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { PropsWithChildren } from 'react' - -import { LoggedContainer } from '@/presentation/containers' - -export const MakeLoggedContainer: React.FC = ({ - children -}) => {children} diff --git a/src/main/proxies/privateRouteProxy.tsx b/src/main/proxies/privateRouteProxy.tsx index 30e1cdca..5ebbd449 100644 --- a/src/main/proxies/privateRouteProxy.tsx +++ b/src/main/proxies/privateRouteProxy.tsx @@ -2,17 +2,16 @@ import { PropsWithChildren } from 'react' import { Navigate } from 'react-router-dom' +import { PAGE_PATHS } from '@/main/routes/paths' +import { LoggedContainer } from '@/presentation/containers' import { useAuth } from '@/presentation/store' -import { MakeLoggedContainer } from '../factories/containers' -import { PAGE_PATHS } from '../routes/paths' - export const PrivateRouteProxy: React.FC = ({ children }) => { const { auth } = useAuth() - if (auth?.token) return {children} + if (auth?.token) return {children} return } From f574aa5d9072c8cb48c4407bc98196c42b0a22cb Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Mon, 8 Apr 2024 18:00:00 -0300 Subject: [PATCH 025/162] style(components/ui/input): add w-full class --- src/presentation/components/ui/input/styles.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/presentation/components/ui/input/styles.ts b/src/presentation/components/ui/input/styles.ts index 49926b0c..6fd44b1d 100644 --- a/src/presentation/components/ui/input/styles.ts +++ b/src/presentation/components/ui/input/styles.ts @@ -2,7 +2,7 @@ import { cva } from 'class-variance-authority' import clsx from 'clsx' export const styles = clsx` - flex h-10 + flex h-10 w-full rounded-md border border-slate-300 py-2 text-base text-slate-900 bg-white From a381fe7430c51d69feeafc7806d705a6669566c7 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Mon, 8 Apr 2024 18:00:00 -0300 Subject: [PATCH 026/162] style(components/ui/loading): use className prop --- src/presentation/components/ui/loading/loading.tsx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/presentation/components/ui/loading/loading.tsx b/src/presentation/components/ui/loading/loading.tsx index b83cb178..a91f0a7b 100644 --- a/src/presentation/components/ui/loading/loading.tsx +++ b/src/presentation/components/ui/loading/loading.tsx @@ -3,11 +3,14 @@ import { cn } from '@/main/utils' import { loadingVariants } from './styles' import { LoadingProps } from './types' -export const Loading: React.FC = ({ size = 'default' }) => ( -
    +export const Loading: React.FC = ({ + size = 'default', + className +}) => ( +
    From f783a91b505900f5f17c47a6bd8295f1007f7013 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Tue, 9 Apr 2024 23:00:00 -0300 Subject: [PATCH 028/162] feat(main/factories): add property factories --- src/main/factories/pages/index.ts | 1 + src/main/factories/pages/propertyPageFactory.tsx | 7 +++++++ src/main/factories/useCases/property/index.ts | 1 + .../useCases/property/remoteGetPropertiesFactory.ts | 7 +++++++ src/main/routes/routes.tsx | 9 ++++----- 5 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 src/main/factories/pages/propertyPageFactory.tsx create mode 100644 src/main/factories/useCases/property/index.ts create mode 100644 src/main/factories/useCases/property/remoteGetPropertiesFactory.ts diff --git a/src/main/factories/pages/index.ts b/src/main/factories/pages/index.ts index 4e1320bc..0705e697 100644 --- a/src/main/factories/pages/index.ts +++ b/src/main/factories/pages/index.ts @@ -1,2 +1,3 @@ export * from './loginPageFactory' export * from './signUpPageFactory' +export * from './propertyPageFactory' diff --git a/src/main/factories/pages/propertyPageFactory.tsx b/src/main/factories/pages/propertyPageFactory.tsx new file mode 100644 index 00000000..36d84436 --- /dev/null +++ b/src/main/factories/pages/propertyPageFactory.tsx @@ -0,0 +1,7 @@ +import { PropertyPage } from '@/presentation/pages/property' + +import { makeRemoteGetProperties } from '../useCases/property' + +export const MakePropertyPage: React.FC = () => ( + +) diff --git a/src/main/factories/useCases/property/index.ts b/src/main/factories/useCases/property/index.ts new file mode 100644 index 00000000..5b285db7 --- /dev/null +++ b/src/main/factories/useCases/property/index.ts @@ -0,0 +1 @@ +export * from './remoteGetPropertiesFactory' diff --git a/src/main/factories/useCases/property/remoteGetPropertiesFactory.ts b/src/main/factories/useCases/property/remoteGetPropertiesFactory.ts new file mode 100644 index 00000000..3c588116 --- /dev/null +++ b/src/main/factories/useCases/property/remoteGetPropertiesFactory.ts @@ -0,0 +1,7 @@ +import { RemoteGetProperties } from '@/data/useCases' +import { PropertyModel } from '@/domain/models' +import { IGetProperties } from '@/domain/useCases' +import { makeApiHttpClient } from '@/main/factories/http' + +export const makeRemoteGetProperties = (): IGetProperties => + new RemoteGetProperties('properties', makeApiHttpClient()) diff --git a/src/main/routes/routes.tsx b/src/main/routes/routes.tsx index f22d11e3..0b3c49d7 100644 --- a/src/main/routes/routes.tsx +++ b/src/main/routes/routes.tsx @@ -1,6 +1,5 @@ -import { MakeLoginPage, MakeSignUpPage } from '@/main/factories/pages' +import * as PageFactory from '@/main/factories/pages' import { PrivateRouteProxy } from '@/main/proxies' -import { PageContainer } from '@/presentation/containers' import { PAGE_PATHS, Pages } from './paths' @@ -16,11 +15,11 @@ type RoutesProps = { export const ROUTES = Object.freeze({ login: { path: () => PAGE_PATHS.login, - component: + component: }, signUp: { path: () => PAGE_PATHS.signUp, - component: + component: }, home: { path: () => PAGE_PATHS.home, @@ -34,7 +33,7 @@ export const ROUTES = Object.freeze({ path: () => PAGE_PATHS.properties, component: ( - + ) }, From 4993e5570900936217b4e6400293068e088a1a61 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Tue, 9 Apr 2024 23:00:00 -0300 Subject: [PATCH 029/162] refactor(presentation/containers): rename table container file name and export types --- src/presentation/containers/tableContainer/index.ts | 2 ++ .../tableContainer/{index.tsx => tableContainer.tsx} | 6 +++++- 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 src/presentation/containers/tableContainer/index.ts rename src/presentation/containers/tableContainer/{index.tsx => tableContainer.tsx} (76%) diff --git a/src/presentation/containers/tableContainer/index.ts b/src/presentation/containers/tableContainer/index.ts new file mode 100644 index 00000000..25894a70 --- /dev/null +++ b/src/presentation/containers/tableContainer/index.ts @@ -0,0 +1,2 @@ +export { TableContainer } from './tableContainer' +export type { TableContainerProps } from './types' diff --git a/src/presentation/containers/tableContainer/index.tsx b/src/presentation/containers/tableContainer/tableContainer.tsx similarity index 76% rename from src/presentation/containers/tableContainer/index.tsx rename to src/presentation/containers/tableContainer/tableContainer.tsx index 795c073c..da9d4896 100644 --- a/src/presentation/containers/tableContainer/index.tsx +++ b/src/presentation/containers/tableContainer/tableContainer.tsx @@ -9,12 +9,16 @@ export const TableContainer = ({ inputSearch }: TableContainerProps) => ( <> - +
    + +
    columns={table.columns} data={table.data} + totalPages={table.totalPages} sorting={table.sorting} pagination={table.pagination} + loading={table.loading} /> ) From 409e08549c3fdeb85c7204d321e775c12c7c8b4e Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Wed, 10 Apr 2024 19:53:46 -0300 Subject: [PATCH 030/162] feat(presentation/containers/pageContainer): add pageContainer --- .../containers/pageContainer/index.ts | 2 + .../containers/pageContainer/index.tsx | 114 ------------------ .../pageContainer/pageContainer.tsx | 37 ++++++ .../containers/pageContainer/types.ts | 11 ++ 4 files changed, 50 insertions(+), 114 deletions(-) create mode 100644 src/presentation/containers/pageContainer/index.ts delete mode 100644 src/presentation/containers/pageContainer/index.tsx create mode 100644 src/presentation/containers/pageContainer/pageContainer.tsx create mode 100644 src/presentation/containers/pageContainer/types.ts diff --git a/src/presentation/containers/pageContainer/index.ts b/src/presentation/containers/pageContainer/index.ts new file mode 100644 index 00000000..1654dc62 --- /dev/null +++ b/src/presentation/containers/pageContainer/index.ts @@ -0,0 +1,2 @@ +export { PageContainer } from './pageContainer' +export type { PageContainerProps } from './types' diff --git a/src/presentation/containers/pageContainer/index.tsx b/src/presentation/containers/pageContainer/index.tsx deleted file mode 100644 index 71cf3d99..00000000 --- a/src/presentation/containers/pageContainer/index.tsx +++ /dev/null @@ -1,114 +0,0 @@ -import { useState } from 'react' - -import { ColumnDef, PaginationState, SortingState } from '@tanstack/react-table' -import { MoreHorizontal, Pencil, Trash2 } from 'lucide-react' - -import { Button, DropdownMenu } from '@/presentation/components/ui' - -import { TableContainer } from '../tableContainer' - -type Property = { - id: string - producer: string - name: string - county: { - city: string - state: string - } -} - -export const PageContainer: React.FC = () => { - const columns: ColumnDef[] = [ - { - accessorKey: 'producer', - header: 'Produtor' - }, - { - accessorKey: 'name', - header: 'Propriedade' - }, - { - accessorKey: 'county', - header: 'Município', - accessorFn: ({ county }) => `${county.city} - ${county.state}` - }, - { - id: 'row-actions', - header: '', - cell: ({ row }) => { - const { id } = row.original - - return ( - - - - - - - Editar - - - - Excluir - - - - ) - } - } - ] - - const data: Property[] = Array.from({ length: 60 }, (_, index) => ({ - id: (index + 1).toString(), - producer: `Producer ${index + 1}`, - name: `Property ${index + 1}`, - county: { - city: 'Pato Branco', - state: 'PR' - } - })) - - const [sorting, setSorting] = useState([]) - const [page, setPage] = useState({ - pageIndex: 0, - pageSize: 0 - }) - - return ( -
    -
    -
    -
    - - Propriedades - -

    - Gerenciamento das propriedades dos produtores -

    -
    - - -
    -
    -
    - -
    -
    - ) -} diff --git a/src/presentation/containers/pageContainer/pageContainer.tsx b/src/presentation/containers/pageContainer/pageContainer.tsx new file mode 100644 index 00000000..01e72c36 --- /dev/null +++ b/src/presentation/containers/pageContainer/pageContainer.tsx @@ -0,0 +1,37 @@ +import { RowData } from '@tanstack/react-table' + +import { Button } from '@/presentation/components/ui' + +import { TableContainer } from '../tableContainer' + +import type { PageContainerProps } from './types' + +export const PageContainer = ({ + header, + tableContainer +}: PageContainerProps) => ( +
    +
    +
    +
    + + {header.title} + +

    {header.description}

    +
    + + +
    +
    +
    + +
    +
    +) diff --git a/src/presentation/containers/pageContainer/types.ts b/src/presentation/containers/pageContainer/types.ts new file mode 100644 index 00000000..8fd14127 --- /dev/null +++ b/src/presentation/containers/pageContainer/types.ts @@ -0,0 +1,11 @@ +import type { TableContainerProps } from '@/presentation/containers/tableContainer/' +import type { RowData } from '@tanstack/react-table' + +export type PageContainerProps = { + header: { + title: string + description: string + buttonAddText: string + } + tableContainer: TableContainerProps +} From ed888f852a4c424eab6df815cc8e94d96cae2a50 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Wed, 10 Apr 2024 22:00:00 -0300 Subject: [PATCH 031/162] refactor(data/useCases): how to type method --- src/data/useCases/cep/remoteGetCep.ts | 2 +- src/data/useCases/property/remoteGetProperties.ts | 10 +++------- src/data/useCases/user/remoteCreateUser.ts | 3 +-- src/data/useCases/user/remoteLoginUser.ts | 5 ++--- 4 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/data/useCases/cep/remoteGetCep.ts b/src/data/useCases/cep/remoteGetCep.ts index ce2538a7..cb83b0bb 100644 --- a/src/data/useCases/cep/remoteGetCep.ts +++ b/src/data/useCases/cep/remoteGetCep.ts @@ -9,7 +9,7 @@ export class RemoteGetCep implements IGetCep { private readonly httpClient: IHttpClient ) {} - async execute(cep: string): Promise { + execute: IGetCep['execute'] = async (cep) => { const { statusCode, body } = await this.httpClient.request({ url: `${this.url}/${cep}`, method: 'get' diff --git a/src/data/useCases/property/remoteGetProperties.ts b/src/data/useCases/property/remoteGetProperties.ts index 32af14f6..16b5860d 100644 --- a/src/data/useCases/property/remoteGetProperties.ts +++ b/src/data/useCases/property/remoteGetProperties.ts @@ -1,11 +1,7 @@ import { IHttpClient, HttpStatusCode } from '@/data/protocols/http' import { UnexpectedError, NotFoundError } from '@/domain/errors' import { PropertyModel } from '@/domain/models' -import { - GetPropertiesParams, - GetPropertiesResponse, - IGetProperties -} from '@/domain/useCases' +import { IGetProperties } from '@/domain/useCases' export class RemoteGetProperties implements IGetProperties { constructor( @@ -13,11 +9,11 @@ export class RemoteGetProperties implements IGetProperties { private readonly httpClient: IHttpClient ) {} - async execute({ + execute: IGetProperties['execute'] = async ({ filters, pagination, sort - }: GetPropertiesParams): Promise { + }) => { const { statusCode, body, itemsPerPage } = await this.httpClient.request({ url: `${this.url}`, method: 'get', diff --git a/src/data/useCases/user/remoteCreateUser.ts b/src/data/useCases/user/remoteCreateUser.ts index ca9366cc..ec69d325 100644 --- a/src/data/useCases/user/remoteCreateUser.ts +++ b/src/data/useCases/user/remoteCreateUser.ts @@ -1,6 +1,5 @@ import { IHttpClient, HttpStatusCode } from '@/data/protocols/http' import { UnexpectedError } from '@/domain/errors' -import { CreateUserModel } from '@/domain/models' import { ICreateUser } from '@/domain/useCases' export class RemoteCreateUser implements ICreateUser { @@ -9,7 +8,7 @@ export class RemoteCreateUser implements ICreateUser { private readonly httpClient: IHttpClient ) {} - async execute(params: CreateUserModel): Promise { + execute: ICreateUser['execute'] = async (params) => { const body = { ...params, username: params.email, diff --git a/src/data/useCases/user/remoteLoginUser.ts b/src/data/useCases/user/remoteLoginUser.ts index 44fa1d9a..34a290b1 100644 --- a/src/data/useCases/user/remoteLoginUser.ts +++ b/src/data/useCases/user/remoteLoginUser.ts @@ -1,7 +1,6 @@ import { IHttpClient, HttpStatusCode } from '@/data/protocols/http' import { InvalidCredentialsError, UnexpectedError } from '@/domain/errors' -import { UserModel } from '@/domain/models' -import { ILoginUser, LoginUserParams } from '@/domain/useCases' +import { ILoginUser } from '@/domain/useCases' export class RemoteLoginUser implements ILoginUser { constructor( @@ -9,7 +8,7 @@ export class RemoteLoginUser implements ILoginUser { private readonly httpClient: IHttpClient ) {} - async execute(params: LoginUserParams): Promise { + execute: ILoginUser['execute'] = async (params) => { const payload = { username: params.email, password: params.password From a2a50e32958227b676c3e4b74b25272fb346a95e Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Wed, 10 Apr 2024 23:00:00 -0300 Subject: [PATCH 032/162] feat(domain/shared): add shared interfaces and types --- src/domain/shared/index.ts | 1 + src/domain/shared/listParamsInterface.ts | 12 ++++++++++++ src/domain/shared/listResponseInterface.ts | 4 ++++ src/domain/shared/requestInterface.ts | 3 +++ 4 files changed, 20 insertions(+) create mode 100644 src/domain/shared/index.ts create mode 100644 src/domain/shared/listParamsInterface.ts create mode 100644 src/domain/shared/listResponseInterface.ts create mode 100644 src/domain/shared/requestInterface.ts diff --git a/src/domain/shared/index.ts b/src/domain/shared/index.ts new file mode 100644 index 00000000..b7c86617 --- /dev/null +++ b/src/domain/shared/index.ts @@ -0,0 +1 @@ +export * from './requestInterface' diff --git a/src/domain/shared/listParamsInterface.ts b/src/domain/shared/listParamsInterface.ts new file mode 100644 index 00000000..221d682f --- /dev/null +++ b/src/domain/shared/listParamsInterface.ts @@ -0,0 +1,12 @@ +import { SortDirection } from '@tanstack/react-table' + +import { HttpRequest } from '@/data/protocols/http' + +export interface IListParams { + filters?: Record + sort?: { + direction: SortDirection + field: TKeyOfModel + } + pagination: HttpRequest['pagination'] +} diff --git a/src/domain/shared/listResponseInterface.ts b/src/domain/shared/listResponseInterface.ts new file mode 100644 index 00000000..9fa0d0d7 --- /dev/null +++ b/src/domain/shared/listResponseInterface.ts @@ -0,0 +1,4 @@ +export interface IListResponse { + data: TData[] + totalPages: number +} diff --git a/src/domain/shared/requestInterface.ts b/src/domain/shared/requestInterface.ts new file mode 100644 index 00000000..fce30957 --- /dev/null +++ b/src/domain/shared/requestInterface.ts @@ -0,0 +1,3 @@ +export interface IRequestInterface { + execute: (params: TParams) => Promise +} From 080445c94ab5a57543a8e21d5e2071be6e72b525 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Wed, 10 Apr 2024 23:30:00 -0300 Subject: [PATCH 033/162] refactor(domain/useCases): use base Request Interface --- src/domain/useCases/cep/getCep.ts | 5 ++-- src/domain/useCases/property/getProperties.ts | 28 ++++++------------- src/domain/useCases/user/createUser.ts | 5 ++-- src/domain/useCases/user/loginUser.ts | 6 ++-- 4 files changed, 15 insertions(+), 29 deletions(-) diff --git a/src/domain/useCases/cep/getCep.ts b/src/domain/useCases/cep/getCep.ts index d00a9300..19541c14 100644 --- a/src/domain/useCases/cep/getCep.ts +++ b/src/domain/useCases/cep/getCep.ts @@ -1,5 +1,4 @@ import { CepModel } from '@/domain/models' +import { IRequestInterface } from '@/domain/shared' -export interface IGetCep { - execute: (cep: string) => Promise -} +export interface IGetCep extends IRequestInterface {} diff --git a/src/domain/useCases/property/getProperties.ts b/src/domain/useCases/property/getProperties.ts index 68566aee..23ea5458 100644 --- a/src/domain/useCases/property/getProperties.ts +++ b/src/domain/useCases/property/getProperties.ts @@ -1,22 +1,10 @@ -import { HttpRequest, SortDirection } from '@/data/protocols/http' import { PropertyModel } from '@/domain/models' +import { IRequestInterface } from '@/domain/shared' +import { IListParams } from '@/domain/shared/listParamsInterface' +import { IListResponse } from '@/domain/shared/listResponseInterface' -export type GetPropertiesParams = { - filters?: { - name: string - } - sort?: { - direction: SortDirection - field: keyof PropertyModel - } - pagination: HttpRequest['pagination'] -} - -export type GetPropertiesResponse = { - properties: PropertyModel[] - totalPages: number -} - -export interface IGetProperties { - execute: (params: GetPropertiesParams) => Promise -} +export interface IGetProperties + extends IRequestInterface< + IListParams, + IListResponse + > {} diff --git a/src/domain/useCases/user/createUser.ts b/src/domain/useCases/user/createUser.ts index 41b7005b..8c561689 100644 --- a/src/domain/useCases/user/createUser.ts +++ b/src/domain/useCases/user/createUser.ts @@ -1,5 +1,4 @@ import { CreateUserModel } from '@/domain/models' +import { IRequestInterface } from '@/domain/shared' -export interface ICreateUser { - execute: (params: CreateUserModel) => Promise -} +export interface ICreateUser extends IRequestInterface {} diff --git a/src/domain/useCases/user/loginUser.ts b/src/domain/useCases/user/loginUser.ts index a3ecab33..8e0ac9c2 100644 --- a/src/domain/useCases/user/loginUser.ts +++ b/src/domain/useCases/user/loginUser.ts @@ -1,10 +1,10 @@ import { UserModel } from '@/domain/models' +import { IRequestInterface } from '@/domain/shared' export type LoginUserParams = { email: string password: string } -export interface ILoginUser { - execute: (params: LoginUserParams) => Promise -} +export interface ILoginUser + extends IRequestInterface {} From 1debb799e80b2b77d9599461e0244784555218a2 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Thu, 11 Apr 2024 14:30:00 -0300 Subject: [PATCH 034/162] fix(mocks/shared): logic to filter data --- src/mocks/shared/filterData.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/mocks/shared/filterData.ts b/src/mocks/shared/filterData.ts index 576df36d..3be6f09e 100644 --- a/src/mocks/shared/filterData.ts +++ b/src/mocks/shared/filterData.ts @@ -5,8 +5,9 @@ export const filterData = >( const filterEntries = Object.entries(filters) return data.filter((item) => - filterEntries.filter(([key, value]) => - item[key as keyof TData].includes(value) - ) + filterEntries.every(([key, value]) => { + const itemValue = item[key as keyof TData] + return itemValue.toLowerCase().includes(value.toLowerCase()) + }) ) } From 171702a1b6f6292635039f7ff21460b51be6de3a Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Thu, 11 Apr 2024 15:00:00 -0300 Subject: [PATCH 035/162] fix(mocks/modules/property/services/getPropertiesService): totalRegisters value --- src/mocks/modules/property/services/getPropertiesService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mocks/modules/property/services/getPropertiesService.ts b/src/mocks/modules/property/services/getPropertiesService.ts index af8f645b..6285212d 100644 --- a/src/mocks/modules/property/services/getPropertiesService.ts +++ b/src/mocks/modules/property/services/getPropertiesService.ts @@ -62,7 +62,7 @@ export const getPropertiesService = httpWithMiddleware( return HttpResponse.json( { properties: filteredData, - totalRegisters: propertiesData.length + totalRegisters: filteredData.length }, { status: HttpStatusCode.ok } ) From 40bbcd4094ab612d79dac78b69c41df0b2b7dfe5 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Thu, 11 Apr 2024 17:00:00 -0300 Subject: [PATCH 036/162] feat(presentation/hooks): add custom hook to dataTable params --- .../hooks/usePageContainer/index.ts | 30 ++++++ .../hooks/usePageContainer/listTable.ts | 92 +++++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100644 src/presentation/hooks/usePageContainer/index.ts create mode 100644 src/presentation/hooks/usePageContainer/listTable.ts diff --git a/src/presentation/hooks/usePageContainer/index.ts b/src/presentation/hooks/usePageContainer/index.ts new file mode 100644 index 00000000..aa808c45 --- /dev/null +++ b/src/presentation/hooks/usePageContainer/index.ts @@ -0,0 +1,30 @@ +import { ListTableParams, UseListTableParams, listTable } from './listTable' + +type PageContainerParams> = { + listTableParams: ListTableParams +} +type UsePageContainerParams< + TModel extends Record, + TKeyOfModel extends string = string +> = { + useListTableParams: UseListTableParams +} + +export const pageContainer = < + TModel extends Record, + TKeyOfModel extends string = string +>({ + listTableParams +}: PageContainerParams) => { + const useListTableHook = listTable(listTableParams) + + return ({ + useListTableParams + }: UsePageContainerParams) => { + const listTableHook = useListTableHook(useListTableParams) + + return { + ...listTableHook + } + } +} diff --git a/src/presentation/hooks/usePageContainer/listTable.ts b/src/presentation/hooks/usePageContainer/listTable.ts new file mode 100644 index 00000000..8b261112 --- /dev/null +++ b/src/presentation/hooks/usePageContainer/listTable.ts @@ -0,0 +1,92 @@ +import { useState, useCallback, useEffect } from 'react' + +import { ColumnDef, SortingState, PaginationState } from '@tanstack/react-table' + +import { IRequestInterface } from '@/domain/shared' +import { IListParams } from '@/domain/shared/listParamsInterface' +import { IListResponse } from '@/domain/shared/listResponseInterface' +import { catchError } from '@/main/utils' + +export type ListTableParams> = { + columns: ColumnDef[] +} + +export type UseListTableParams< + TModel extends Record, + TKeyOfModel extends string = string +> = { + getData: IRequestInterface, IListResponse> +} + +export const listTable = + < + TModel extends Record, + TKeyOfModel extends string = string + >({ + columns + }: ListTableParams) => + ({ getData }: UseListTableParams) => { + const [sorting, setSorting] = useState([]) + const [{ pageIndex, pageSize }, setPage] = useState({ + pageIndex: 0, + pageSize: 0 + }) + const [filters, setFilters] = useState>( + {} as Record + ) + + const [loading, setLoading] = useState(false) + const [data, setData] = useState([]) + const [totalPages, setTotalPages] = useState(0) + + const handleGetData = useCallback( + async (params: { filters: Record }) => { + try { + setLoading(true) + + const [fieldToSort] = sorting ?? {} + + const response = await getData.execute({ + pagination: { + page: pageIndex + 1 + }, + filters: params.filters, + ...(fieldToSort && { + sort: { + direction: fieldToSort.desc ? 'desc' : 'asc', + field: fieldToSort.id as TKeyOfModel + } + }) + }) + + setData(response.data) + setTotalPages(response.totalPages) + } finally { + setLoading(false) + } + }, + [sorting, getData, pageIndex] + ) + + useEffect(() => { + catchError(handleGetData) + }, [handleGetData]) + + return { + columns, + data, + totalPages, + loading, + filters, + setFilters, + handleGetData, + sorting: { + currentSorting: sorting, + onSorting: setSorting + }, + pagination: { + currentPage: { pageIndex, pageSize }, + onPageChange: setPage + } + } + } From 834926dcd0f55f4870c78318694cb9a2c8224046 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Fri, 12 Apr 2024 13:00:00 -0300 Subject: [PATCH 037/162] fix(data/useCases/property): data response --- src/data/useCases/property/remoteGetProperties.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/useCases/property/remoteGetProperties.ts b/src/data/useCases/property/remoteGetProperties.ts index 16b5860d..453beddb 100644 --- a/src/data/useCases/property/remoteGetProperties.ts +++ b/src/data/useCases/property/remoteGetProperties.ts @@ -24,7 +24,7 @@ export class RemoteGetProperties implements IGetProperties { if (statusCode === HttpStatusCode.ok && !!body) { return { - properties: body.properties.map( + data: body.properties.map( (item: any) => ({ id: item.id, From 1ee5df8d2e409cae94221ecab5a430bdfd532809 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Fri, 12 Apr 2024 17:00:00 -0300 Subject: [PATCH 038/162] feat(presentation/pages/property): use custom pageContainer hook and PageContainer component --- .../hooks/usePageContainer/index.ts | 10 ++-- .../hooks/usePageContainer/listTable.ts | 2 +- src/presentation/pages/property/index.tsx | 56 +++++++++++++++++++ src/presentation/pages/property/types.ts | 5 ++ .../pages/property/useProperty.tsx | 53 ++++++++++++++++++ 5 files changed, 120 insertions(+), 6 deletions(-) create mode 100644 src/presentation/pages/property/index.tsx create mode 100644 src/presentation/pages/property/types.ts create mode 100644 src/presentation/pages/property/useProperty.tsx diff --git a/src/presentation/hooks/usePageContainer/index.ts b/src/presentation/hooks/usePageContainer/index.ts index aa808c45..22ae943d 100644 --- a/src/presentation/hooks/usePageContainer/index.ts +++ b/src/presentation/hooks/usePageContainer/index.ts @@ -1,4 +1,4 @@ -import { ListTableParams, UseListTableParams, listTable } from './listTable' +import { ListTableParams, UseListTableParams, listTableHook } from './listTable' type PageContainerParams> = { listTableParams: ListTableParams @@ -10,21 +10,21 @@ type UsePageContainerParams< useListTableParams: UseListTableParams } -export const pageContainer = < +export const pageContainerHook = < TModel extends Record, TKeyOfModel extends string = string >({ listTableParams }: PageContainerParams) => { - const useListTableHook = listTable(listTableParams) + const useListTableHook = listTableHook(listTableParams) return ({ useListTableParams }: UsePageContainerParams) => { - const listTableHook = useListTableHook(useListTableParams) + const listTableHookData = useListTableHook(useListTableParams) return { - ...listTableHook + ...listTableHookData } } } diff --git a/src/presentation/hooks/usePageContainer/listTable.ts b/src/presentation/hooks/usePageContainer/listTable.ts index 8b261112..95323248 100644 --- a/src/presentation/hooks/usePageContainer/listTable.ts +++ b/src/presentation/hooks/usePageContainer/listTable.ts @@ -18,7 +18,7 @@ export type UseListTableParams< getData: IRequestInterface, IListResponse> } -export const listTable = +export const listTableHook = < TModel extends Record, TKeyOfModel extends string = string diff --git a/src/presentation/pages/property/index.tsx b/src/presentation/pages/property/index.tsx new file mode 100644 index 00000000..a8eeb0be --- /dev/null +++ b/src/presentation/pages/property/index.tsx @@ -0,0 +1,56 @@ +import { PageContainer } from '@/presentation/containers' + +import { PropertyPageProps } from './types' +import { usePropertyPage } from './useProperty' + +export const PropertyPage: React.FC = ({ + getProperties +}) => { + const { + columns, + pagination, + sorting, + loading, + totalPages, + filters, + setFilters, + data: properties, + handleGetData: handleGetProperties + } = usePropertyPage({ + useListTableParams: { + getData: getProperties + } + }) + + return ( + { + setFilters((prevState) => ({ + ...prevState, + name: value + })) + }, + placeholder: 'Procurar propriedades', + debounce: 1000, + debounceCallback: () => handleGetProperties({ filters }) + }, + table: { + columns, + totalPages, + data: properties, + pagination, + sorting, + loading + } + }} + /> + ) +} diff --git a/src/presentation/pages/property/types.ts b/src/presentation/pages/property/types.ts new file mode 100644 index 00000000..8baf2c60 --- /dev/null +++ b/src/presentation/pages/property/types.ts @@ -0,0 +1,5 @@ +import { IGetProperties } from '@/domain/useCases' + +export type PropertyPageProps = { + getProperties: IGetProperties +} diff --git a/src/presentation/pages/property/useProperty.tsx b/src/presentation/pages/property/useProperty.tsx new file mode 100644 index 00000000..b0587189 --- /dev/null +++ b/src/presentation/pages/property/useProperty.tsx @@ -0,0 +1,53 @@ +import { ColumnDef } from '@tanstack/react-table' +import { MoreHorizontal, Pencil, Trash2 } from 'lucide-react' + +import { PropertyModel } from '@/domain/models' +import { DropdownMenu } from '@/presentation/components/ui' +import { pageContainerHook } from '@/presentation/hooks/usePageContainer' + +export const usePropertyPage = pageContainerHook< + PropertyModel, + keyof PropertyModel +>({ + listTableParams: { + columns: [ + { + accessorKey: 'producer', + header: 'Produtor' + }, + { + accessorKey: 'name', + header: 'Propriedade' + }, + { + accessorKey: 'county', + header: 'Município', + accessorFn: ({ county }) => `${county.city} - ${county.state}` + }, + { + id: 'row-actions', + header: '', + cell: ({ row }) => { + const { id } = row.original + + return ( + + + + + + + Editar + + + + Excluir + + + + ) + } + } as ColumnDef + ] + } +}) From 44600be0e8154ae3d92ed41b7db35d1e8e3fb917 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Fri, 12 Apr 2024 19:14:00 -0300 Subject: [PATCH 039/162] feat(main): use mocks according env --- src/main.tsx | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/main.tsx b/src/main.tsx index 061d4dbc..7268b379 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -6,14 +6,23 @@ import { BrowserRouter } from 'react-router-dom' import { Compose } from '@/presentation/components/utils' import { App } from './App' +import { env } from './main/env' import { AuthProvider } from './presentation/store' -createRoot(document.getElementById('root') as HTMLElement).render( - - - - - - - -) +async function bootstrap() { + if (env.VITE_API_MOCKED) { + const { worker } = await import('./mocks/browser') + worker.start() + } + + createRoot(document.getElementById('root') as HTMLElement).render( + + + + + + + + ) +} +bootstrap() From 80cbe8cf5b0d1787cd3c6c7c8b9221db77dcfc82 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sat, 13 Apr 2024 12:32:56 -0300 Subject: [PATCH 040/162] refactor: specific better the generic name --- src/data/protocols/http/httpClient.ts | 4 ++-- src/infra/http/apiHttpClient.ts | 4 ++-- src/main/factories/http/apiHttpClientFactory.ts | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/data/protocols/http/httpClient.ts b/src/data/protocols/http/httpClient.ts index b687af95..a7c813d5 100644 --- a/src/data/protocols/http/httpClient.ts +++ b/src/data/protocols/http/httpClient.ts @@ -30,9 +30,9 @@ export type HttpRequest> = { } } -export type HttpResponse = { +export type HttpResponse = { statusCode: HttpStatusCode - body?: T + body?: TBody itemsPerPage: number } diff --git a/src/infra/http/apiHttpClient.ts b/src/infra/http/apiHttpClient.ts index 75b7dc43..4480d2cd 100644 --- a/src/infra/http/apiHttpClient.ts +++ b/src/infra/http/apiHttpClient.ts @@ -14,8 +14,8 @@ export const baseApi = axios.create({ validateStatus: (status: number) => status >= 200 && status < 300 }) -export class ApiHttpClient implements IHttpClient { - async request(data: HttpRequest): Promise> { +export class ApiHttpClient implements IHttpClient { + async request(data: HttpRequest): Promise> { let axiosResponse: AxiosResponse const { url: rawUrl, pagination, filters, sort } = data diff --git a/src/main/factories/http/apiHttpClientFactory.ts b/src/main/factories/http/apiHttpClientFactory.ts index 730c11e7..661fe280 100644 --- a/src/main/factories/http/apiHttpClientFactory.ts +++ b/src/main/factories/http/apiHttpClientFactory.ts @@ -1,4 +1,4 @@ import { ApiHttpClient } from '@/infra/http' -export const makeApiHttpClient = (): ApiHttpClient => - new ApiHttpClient() +export const makeApiHttpClient = (): ApiHttpClient => + new ApiHttpClient() From 6f9aca563db941070130acdc81c23ca432e1ce74 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sat, 13 Apr 2024 13:02:08 -0300 Subject: [PATCH 041/162] feat: add badRequestError --- src/domain/errors/badRequestError.ts | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 src/domain/errors/badRequestError.ts diff --git a/src/domain/errors/badRequestError.ts b/src/domain/errors/badRequestError.ts new file mode 100644 index 00000000..60a235d4 --- /dev/null +++ b/src/domain/errors/badRequestError.ts @@ -0,0 +1,6 @@ +export class BadRequestError extends Error { + constructor(message?: string) { + super(message ?? 'Verifique os dados enviados e tente novamente') + this.name = BadRequestError.name + } +} From eb0984b92fade3a33322ace4d22b6bda2661d6da Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sat, 13 Apr 2024 13:10:43 -0300 Subject: [PATCH 042/162] feat: add forbiddenError --- src/domain/errors/forbiddenError.ts | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 src/domain/errors/forbiddenError.ts diff --git a/src/domain/errors/forbiddenError.ts b/src/domain/errors/forbiddenError.ts new file mode 100644 index 00000000..6ae86f2f --- /dev/null +++ b/src/domain/errors/forbiddenError.ts @@ -0,0 +1,6 @@ +export class ForbiddenError extends Error { + constructor(message?: string) { + super(message ?? 'Você não tem permissão para acessar este recurso') + this.name = ForbiddenError.name + } +} From 46ce89ce83e83f23293bcd0f88a74afbdb8c89c8 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sat, 13 Apr 2024 13:12:24 -0300 Subject: [PATCH 043/162] chore: export new errors --- src/domain/errors/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/domain/errors/index.ts b/src/domain/errors/index.ts index 699911f1..27c6bee2 100644 --- a/src/domain/errors/index.ts +++ b/src/domain/errors/index.ts @@ -1,5 +1,7 @@ export * from './accessDeniedError' +export * from './badRequestError' export * from './emailInUseError' +export * from './forbiddenError' export * from './invalidCredentialsError' export * from './notFoundError' export * from './unexpectedError' From 43c3076086881c9b88198580661b3e173a41680c Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sun, 14 Apr 2024 15:50:27 -0300 Subject: [PATCH 044/162] feat: add create property integration --- src/data/useCases/property/index.ts | 1 + .../useCases/property/remoteCreateProperty.ts | 33 +++++++++++++++++++ src/domain/models/index.ts | 2 +- src/domain/models/propertyModel.ts | 28 ++++++++++++++++ .../useCases/property/createProperty.ts | 5 +++ src/domain/useCases/property/index.ts | 1 + src/main/factories/useCases/property/index.ts | 1 + .../property/remoteCreatePropertyFactory.ts | 6 ++++ src/mocks/modules/property/index.ts | 6 +++- .../services/createPropertyService.ts | 18 ++++++++++ 10 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 src/data/useCases/property/remoteCreateProperty.ts create mode 100644 src/domain/useCases/property/createProperty.ts create mode 100644 src/main/factories/useCases/property/remoteCreatePropertyFactory.ts create mode 100644 src/mocks/modules/property/services/createPropertyService.ts diff --git a/src/data/useCases/property/index.ts b/src/data/useCases/property/index.ts index a37b32d6..f1cb76ea 100644 --- a/src/data/useCases/property/index.ts +++ b/src/data/useCases/property/index.ts @@ -1 +1,2 @@ +export * from './remoteCreateProperty' export * from './remoteGetProperties' diff --git a/src/data/useCases/property/remoteCreateProperty.ts b/src/data/useCases/property/remoteCreateProperty.ts new file mode 100644 index 00000000..db9109ab --- /dev/null +++ b/src/data/useCases/property/remoteCreateProperty.ts @@ -0,0 +1,33 @@ +import { IHttpClient, HttpStatusCode } from '@/data/protocols/http' +import { + BadRequestError, + ForbiddenError, + UnexpectedError +} from '@/domain/errors' +import { ICreateProperty } from '@/domain/useCases' + +export class RemoteCreateProperty implements ICreateProperty { + constructor( + private readonly url: string, + private readonly httpClient: IHttpClient + ) {} + + execute: ICreateProperty['execute'] = async (property) => { + const { statusCode } = await this.httpClient.request({ + url: `${this.url}`, + method: 'post', + body: property + }) + + if (statusCode === HttpStatusCode.created) return + + if (statusCode === HttpStatusCode.badRequest) throw new BadRequestError() + + if (statusCode === HttpStatusCode.forbidden) + throw new ForbiddenError( + 'Você não tem permissão para criar uma nova propriedade' + ) + + throw new UnexpectedError() + } +} diff --git a/src/domain/models/index.ts b/src/domain/models/index.ts index 1ae93a3e..b2af2d4f 100644 --- a/src/domain/models/index.ts +++ b/src/domain/models/index.ts @@ -1,3 +1,3 @@ export * from './cepModel' -export * from './userModel' export * from './propertyModel' +export * from './userModel' diff --git a/src/domain/models/propertyModel.ts b/src/domain/models/propertyModel.ts index e857b003..ee210950 100644 --- a/src/domain/models/propertyModel.ts +++ b/src/domain/models/propertyModel.ts @@ -7,3 +7,31 @@ export type PropertyModel = { state: string } } + +export type CreatePropertyModel = { + generalData: { + name: string + city: string + state: string + producer: string + nakedAveragePricePerHectare: string + leaseAveragePricePerHectare: string + // ToDo: Transform to Option (id, value) + responsibleTechnicians: string[] + } + collaborators: { + name: string + hoursPerDay: string + } + totalArea: { + dairyCattleFarming: string + perennialPasture: string + summerPlowing: string + winterPlowing: string + } + localization: { + latitude: string + longitude: string + images: File[] + } +} diff --git a/src/domain/useCases/property/createProperty.ts b/src/domain/useCases/property/createProperty.ts new file mode 100644 index 00000000..33d04e1b --- /dev/null +++ b/src/domain/useCases/property/createProperty.ts @@ -0,0 +1,5 @@ +import { CreatePropertyModel } from '@/domain/models' +import { IRequestInterface } from '@/domain/shared' + +export interface ICreateProperty + extends IRequestInterface {} diff --git a/src/domain/useCases/property/index.ts b/src/domain/useCases/property/index.ts index e0f7c612..61eae684 100644 --- a/src/domain/useCases/property/index.ts +++ b/src/domain/useCases/property/index.ts @@ -1 +1,2 @@ +export * from './createProperty' export * from './getProperties' diff --git a/src/main/factories/useCases/property/index.ts b/src/main/factories/useCases/property/index.ts index 5b285db7..18ce4059 100644 --- a/src/main/factories/useCases/property/index.ts +++ b/src/main/factories/useCases/property/index.ts @@ -1 +1,2 @@ +export * from './remoteCreatePropertyFactory' export * from './remoteGetPropertiesFactory' diff --git a/src/main/factories/useCases/property/remoteCreatePropertyFactory.ts b/src/main/factories/useCases/property/remoteCreatePropertyFactory.ts new file mode 100644 index 00000000..0711b41b --- /dev/null +++ b/src/main/factories/useCases/property/remoteCreatePropertyFactory.ts @@ -0,0 +1,6 @@ +import { RemoteCreateProperty } from '@/data/useCases/property' +import { ICreateProperty } from '@/domain/useCases' +import { makeApiHttpClient } from '@/main/factories/http' + +export const makeRemoteCreateProperty = (): ICreateProperty => + new RemoteCreateProperty('properties', makeApiHttpClient()) diff --git a/src/mocks/modules/property/index.ts b/src/mocks/modules/property/index.ts index 4bfb7c58..e19e1943 100644 --- a/src/mocks/modules/property/index.ts +++ b/src/mocks/modules/property/index.ts @@ -1,5 +1,9 @@ import { type HttpHandler } from 'msw' +import { createPropertyService } from './services/createPropertyService' import { getPropertiesService } from './services/getPropertiesService' -export const propertyHandlers: HttpHandler[] = [getPropertiesService] +export const propertyHandlers: HttpHandler[] = [ + createPropertyService, + getPropertiesService +] diff --git a/src/mocks/modules/property/services/createPropertyService.ts b/src/mocks/modules/property/services/createPropertyService.ts new file mode 100644 index 00000000..4e6e985c --- /dev/null +++ b/src/mocks/modules/property/services/createPropertyService.ts @@ -0,0 +1,18 @@ +import { HttpResponse } from 'msw' + +import { HttpStatusCode } from '@/data/protocols/http' +import { CreatePropertyModel } from '@/domain/models' +import { httpWithMiddleware } from '@/mocks/lib' +import { withAuth, withDelay } from '@/mocks/middleware' + +export const createPropertyService = httpWithMiddleware< + never, + CreatePropertyModel, + never +>({ + routePath: '/api/properties', + method: 'post', + middlewares: [withDelay(), withAuth], + resolver: async () => + HttpResponse.json({}, { status: HttpStatusCode.created }) +}) From cbd147180b21be28c0fbef178d94630f47962dd6 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sun, 14 Apr 2024 18:27:33 -0300 Subject: [PATCH 045/162] feat: add delete property integration --- src/data/useCases/property/index.ts | 1 + .../useCases/property/remoteDeleteProperty.ts | 24 +++++++++++++++++++ .../useCases/property/deleteProperty.ts | 3 +++ src/domain/useCases/property/index.ts | 1 + src/main/factories/useCases/property/index.ts | 1 + .../property/remoteDeletePropertyFactory.ts | 6 +++++ src/mocks/modules/property/index.ts | 2 ++ .../services/deletePropertyService.ts | 23 ++++++++++++++++++ 8 files changed, 61 insertions(+) create mode 100644 src/data/useCases/property/remoteDeleteProperty.ts create mode 100644 src/domain/useCases/property/deleteProperty.ts create mode 100644 src/main/factories/useCases/property/remoteDeletePropertyFactory.ts create mode 100644 src/mocks/modules/property/services/deletePropertyService.ts diff --git a/src/data/useCases/property/index.ts b/src/data/useCases/property/index.ts index f1cb76ea..fd9ef4e2 100644 --- a/src/data/useCases/property/index.ts +++ b/src/data/useCases/property/index.ts @@ -1,2 +1,3 @@ export * from './remoteCreateProperty' +export * from './remoteDeleteProperty' export * from './remoteGetProperties' diff --git a/src/data/useCases/property/remoteDeleteProperty.ts b/src/data/useCases/property/remoteDeleteProperty.ts new file mode 100644 index 00000000..ace65dbb --- /dev/null +++ b/src/data/useCases/property/remoteDeleteProperty.ts @@ -0,0 +1,24 @@ +import { IHttpClient, HttpStatusCode } from '@/data/protocols/http' +import { UnexpectedError, NotFoundError } from '@/domain/errors' +import { IDeleteProperty } from '@/domain/useCases' + +export class RemoteDeleteProperty implements IDeleteProperty { + constructor( + private readonly url: string, + private readonly httpClient: IHttpClient + ) {} + + execute: IDeleteProperty['execute'] = async (id) => { + const { statusCode } = await this.httpClient.request({ + url: `${this.url}/${id}`, + method: 'delete' + }) + + if (statusCode === HttpStatusCode.noContent) return + + if (statusCode === HttpStatusCode.notFound) + throw new NotFoundError('Propriedades') + + throw new UnexpectedError() + } +} diff --git a/src/domain/useCases/property/deleteProperty.ts b/src/domain/useCases/property/deleteProperty.ts new file mode 100644 index 00000000..f899a45f --- /dev/null +++ b/src/domain/useCases/property/deleteProperty.ts @@ -0,0 +1,3 @@ +import { IRequestInterface } from '@/domain/shared' + +export interface IDeleteProperty extends IRequestInterface {} diff --git a/src/domain/useCases/property/index.ts b/src/domain/useCases/property/index.ts index 61eae684..1228bc6a 100644 --- a/src/domain/useCases/property/index.ts +++ b/src/domain/useCases/property/index.ts @@ -1,2 +1,3 @@ export * from './createProperty' +export * from './deleteProperty' export * from './getProperties' diff --git a/src/main/factories/useCases/property/index.ts b/src/main/factories/useCases/property/index.ts index 18ce4059..d0c91b72 100644 --- a/src/main/factories/useCases/property/index.ts +++ b/src/main/factories/useCases/property/index.ts @@ -1,2 +1,3 @@ export * from './remoteCreatePropertyFactory' +export * from './remoteDeletePropertyFactory' export * from './remoteGetPropertiesFactory' diff --git a/src/main/factories/useCases/property/remoteDeletePropertyFactory.ts b/src/main/factories/useCases/property/remoteDeletePropertyFactory.ts new file mode 100644 index 00000000..e966aa45 --- /dev/null +++ b/src/main/factories/useCases/property/remoteDeletePropertyFactory.ts @@ -0,0 +1,6 @@ +import { RemoteDeleteProperty } from '@/data/useCases/property' +import { IDeleteProperty } from '@/domain/useCases' +import { makeApiHttpClient } from '@/main/factories/http' + +export const makeRemoteDeleteProperty = (): IDeleteProperty => + new RemoteDeleteProperty('properties', makeApiHttpClient()) diff --git a/src/mocks/modules/property/index.ts b/src/mocks/modules/property/index.ts index e19e1943..7fa66193 100644 --- a/src/mocks/modules/property/index.ts +++ b/src/mocks/modules/property/index.ts @@ -1,9 +1,11 @@ import { type HttpHandler } from 'msw' import { createPropertyService } from './services/createPropertyService' +import { deletePropertyService } from './services/deletePropertyService' import { getPropertiesService } from './services/getPropertiesService' export const propertyHandlers: HttpHandler[] = [ createPropertyService, + deletePropertyService, getPropertiesService ] diff --git a/src/mocks/modules/property/services/deletePropertyService.ts b/src/mocks/modules/property/services/deletePropertyService.ts new file mode 100644 index 00000000..bbb61e4e --- /dev/null +++ b/src/mocks/modules/property/services/deletePropertyService.ts @@ -0,0 +1,23 @@ +import { HttpResponse, PathParams } from 'msw' + +import { httpWithMiddleware } from '@/mocks/lib' +import { withAuth, withDelay } from '@/mocks/middleware' + +export const deletePropertyService = httpWithMiddleware< + PathParams, + never, + never +>({ + routePath: '/api/properties', + method: 'delete', + middlewares: [withDelay(), withAuth], + resolver: async ({ params: id }) => + HttpResponse.json( + { + id + }, + { + status: 204 + } + ) +}) From ba503b4eec25233aa678ef17306af62af92c4070 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sun, 21 Apr 2024 00:21:03 -0300 Subject: [PATCH 046/162] feat(remoteCreateUser): add badRequest validation error --- src/data/useCases/user/remoteCreateUser.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/data/useCases/user/remoteCreateUser.ts b/src/data/useCases/user/remoteCreateUser.ts index ec69d325..6e85f957 100644 --- a/src/data/useCases/user/remoteCreateUser.ts +++ b/src/data/useCases/user/remoteCreateUser.ts @@ -1,5 +1,5 @@ import { IHttpClient, HttpStatusCode } from '@/data/protocols/http' -import { UnexpectedError } from '@/domain/errors' +import { BadRequestError, UnexpectedError } from '@/domain/errors' import { ICreateUser } from '@/domain/useCases' export class RemoteCreateUser implements ICreateUser { @@ -27,6 +27,8 @@ export class RemoteCreateUser implements ICreateUser { if (statusCode === HttpStatusCode.created) return + if (statusCode === HttpStatusCode.badRequest) throw new BadRequestError() + throw new UnexpectedError() } } From 6858e7c263f6e34bcb070524019ddd8e44908011 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sun, 14 Apr 2024 19:07:33 -0300 Subject: [PATCH 047/162] refactor: rename CreatePropertyModel to PropertyDetailsModel --- src/domain/models/propertyModel.ts | 2 +- src/domain/useCases/property/createProperty.ts | 4 ++-- src/mocks/modules/property/services/createPropertyService.ts | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/domain/models/propertyModel.ts b/src/domain/models/propertyModel.ts index ee210950..3e1665ec 100644 --- a/src/domain/models/propertyModel.ts +++ b/src/domain/models/propertyModel.ts @@ -8,7 +8,7 @@ export type PropertyModel = { } } -export type CreatePropertyModel = { +export type PropertyDetailsModel = { generalData: { name: string city: string diff --git a/src/domain/useCases/property/createProperty.ts b/src/domain/useCases/property/createProperty.ts index 33d04e1b..f78ab07c 100644 --- a/src/domain/useCases/property/createProperty.ts +++ b/src/domain/useCases/property/createProperty.ts @@ -1,5 +1,5 @@ -import { CreatePropertyModel } from '@/domain/models' +import { PropertyDetailsModel } from '@/domain/models' import { IRequestInterface } from '@/domain/shared' export interface ICreateProperty - extends IRequestInterface {} + extends IRequestInterface {} diff --git a/src/mocks/modules/property/services/createPropertyService.ts b/src/mocks/modules/property/services/createPropertyService.ts index 4e6e985c..787d8935 100644 --- a/src/mocks/modules/property/services/createPropertyService.ts +++ b/src/mocks/modules/property/services/createPropertyService.ts @@ -1,13 +1,13 @@ import { HttpResponse } from 'msw' import { HttpStatusCode } from '@/data/protocols/http' -import { CreatePropertyModel } from '@/domain/models' +import { PropertyDetailsModel } from '@/domain/models' import { httpWithMiddleware } from '@/mocks/lib' import { withAuth, withDelay } from '@/mocks/middleware' export const createPropertyService = httpWithMiddleware< never, - CreatePropertyModel, + PropertyDetailsModel, never >({ routePath: '/api/properties', From 9ce95e15b36014f96ec0fb0dc793f26ec0bf63e6 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Fri, 19 Apr 2024 10:30:54 -0300 Subject: [PATCH 048/162] feat: add get one property integration --- src/data/useCases/property/index.ts | 1 + .../useCases/property/remoteGetProperty.ts | 28 +++++++ src/domain/models/propertyModel.ts | 8 +- src/domain/shared/index.ts | 3 + src/domain/shared/option.types.ts | 4 + src/domain/useCases/property/getProperties.ts | 4 +- src/domain/useCases/property/getProperty.ts | 5 ++ src/domain/useCases/property/index.ts | 1 + src/main/factories/useCases/property/index.ts | 1 + .../property/remoteGetPropertyFactory.ts | 7 ++ .../property/services/getPropertyService.ts | 78 +++++++++++++++++++ 11 files changed, 134 insertions(+), 6 deletions(-) create mode 100644 src/data/useCases/property/remoteGetProperty.ts create mode 100644 src/domain/shared/option.types.ts create mode 100644 src/domain/useCases/property/getProperty.ts create mode 100644 src/main/factories/useCases/property/remoteGetPropertyFactory.ts create mode 100644 src/mocks/modules/property/services/getPropertyService.ts diff --git a/src/data/useCases/property/index.ts b/src/data/useCases/property/index.ts index fd9ef4e2..9c1ef83e 100644 --- a/src/data/useCases/property/index.ts +++ b/src/data/useCases/property/index.ts @@ -1,3 +1,4 @@ export * from './remoteCreateProperty' export * from './remoteDeleteProperty' export * from './remoteGetProperties' +export * from './remoteGetProperty' diff --git a/src/data/useCases/property/remoteGetProperty.ts b/src/data/useCases/property/remoteGetProperty.ts new file mode 100644 index 00000000..e71b6243 --- /dev/null +++ b/src/data/useCases/property/remoteGetProperty.ts @@ -0,0 +1,28 @@ +import { IHttpClient, HttpStatusCode } from '@/data/protocols/http' +import { UnexpectedError, NotFoundError } from '@/domain/errors' +import { IGetProperty } from '@/domain/useCases' + +export class RemoteGetProperty implements IGetProperty { + constructor( + private readonly url: string, + private readonly httpClient: IHttpClient + ) {} + + execute: IGetProperty['execute'] = async (id) => { + const { statusCode, body } = await this.httpClient.request({ + url: `${this.url}/${id}`, + method: 'get' + }) + + if (statusCode === HttpStatusCode.ok && !!body) { + return { + ...body + } + } + + if (statusCode === HttpStatusCode.notFound) + throw new NotFoundError('Propriedades') + + throw new UnexpectedError() + } +} diff --git a/src/domain/models/propertyModel.ts b/src/domain/models/propertyModel.ts index 3e1665ec..e48de5e8 100644 --- a/src/domain/models/propertyModel.ts +++ b/src/domain/models/propertyModel.ts @@ -1,3 +1,5 @@ +import { Option } from '@/domain/shared' + export type PropertyModel = { id: string producer: string @@ -9,6 +11,7 @@ export type PropertyModel = { } export type PropertyDetailsModel = { + id: string generalData: { name: string city: string @@ -16,13 +19,12 @@ export type PropertyDetailsModel = { producer: string nakedAveragePricePerHectare: string leaseAveragePricePerHectare: string - // ToDo: Transform to Option (id, value) - responsibleTechnicians: string[] + responsibleTechnicians: Option[] } collaborators: { name: string hoursPerDay: string - } + }[] totalArea: { dairyCattleFarming: string perennialPasture: string diff --git a/src/domain/shared/index.ts b/src/domain/shared/index.ts index b7c86617..87d78392 100644 --- a/src/domain/shared/index.ts +++ b/src/domain/shared/index.ts @@ -1 +1,4 @@ +export * from './listParamsInterface' +export * from './listResponseInterface' +export * from './option.types' export * from './requestInterface' diff --git a/src/domain/shared/option.types.ts b/src/domain/shared/option.types.ts new file mode 100644 index 00000000..2981bf96 --- /dev/null +++ b/src/domain/shared/option.types.ts @@ -0,0 +1,4 @@ +export type Option = { + id: string + value: TValue +} diff --git a/src/domain/useCases/property/getProperties.ts b/src/domain/useCases/property/getProperties.ts index 23ea5458..e206641a 100644 --- a/src/domain/useCases/property/getProperties.ts +++ b/src/domain/useCases/property/getProperties.ts @@ -1,7 +1,5 @@ import { PropertyModel } from '@/domain/models' -import { IRequestInterface } from '@/domain/shared' -import { IListParams } from '@/domain/shared/listParamsInterface' -import { IListResponse } from '@/domain/shared/listResponseInterface' +import { IRequestInterface, IListParams, IListResponse } from '@/domain/shared' export interface IGetProperties extends IRequestInterface< diff --git a/src/domain/useCases/property/getProperty.ts b/src/domain/useCases/property/getProperty.ts new file mode 100644 index 00000000..570fb01a --- /dev/null +++ b/src/domain/useCases/property/getProperty.ts @@ -0,0 +1,5 @@ +import { PropertyDetailsModel } from '@/domain/models' +import { IRequestInterface } from '@/domain/shared' + +export interface IGetProperty + extends IRequestInterface {} diff --git a/src/domain/useCases/property/index.ts b/src/domain/useCases/property/index.ts index 1228bc6a..bfbd99c1 100644 --- a/src/domain/useCases/property/index.ts +++ b/src/domain/useCases/property/index.ts @@ -1,3 +1,4 @@ export * from './createProperty' export * from './deleteProperty' export * from './getProperties' +export * from './getProperty' diff --git a/src/main/factories/useCases/property/index.ts b/src/main/factories/useCases/property/index.ts index d0c91b72..897a6fd3 100644 --- a/src/main/factories/useCases/property/index.ts +++ b/src/main/factories/useCases/property/index.ts @@ -1,3 +1,4 @@ export * from './remoteCreatePropertyFactory' export * from './remoteDeletePropertyFactory' export * from './remoteGetPropertiesFactory' +export * from './remoteGetPropertyFactory' diff --git a/src/main/factories/useCases/property/remoteGetPropertyFactory.ts b/src/main/factories/useCases/property/remoteGetPropertyFactory.ts new file mode 100644 index 00000000..8e46465d --- /dev/null +++ b/src/main/factories/useCases/property/remoteGetPropertyFactory.ts @@ -0,0 +1,7 @@ +import { RemoteGetProperty } from '@/data/useCases' +import { PropertyDetailsModel } from '@/domain/models' +import { IGetProperty } from '@/domain/useCases' +import { makeApiHttpClient } from '@/main/factories/http' + +export const makeRemoteGetProperty = (): IGetProperty => + new RemoteGetProperty('properties', makeApiHttpClient()) diff --git a/src/mocks/modules/property/services/getPropertyService.ts b/src/mocks/modules/property/services/getPropertyService.ts new file mode 100644 index 00000000..90c6de2d --- /dev/null +++ b/src/mocks/modules/property/services/getPropertyService.ts @@ -0,0 +1,78 @@ +import { faker } from '@faker-js/faker/locale/pt_PT' +import { HttpResponse, PathParams } from 'msw' + +import { HttpStatusCode } from '@/data/protocols/http' +import { PropertyDetailsModel } from '@/domain/models' +import { httpWithMiddleware } from '@/mocks/lib' +import { withAuth, withDelay } from '@/mocks/middleware' + +import propertiesData from '../../../../../database/propertiesData.json' + +export const getPropertyService = httpWithMiddleware< + PathParams, + never, + PropertyDetailsModel +>({ + routePath: '/api/properties', + method: 'get', + middlewares: [withDelay(), withAuth], + resolver: async ({ params: id }) => { + if (!propertiesData.length) + return HttpResponse.json({} as PropertyDetailsModel, { + status: 404 + }) + + const propertyFound = propertiesData.find( + (property) => property.id === String(id) + ) + + if (!propertyFound) + return HttpResponse.json({} as PropertyDetailsModel, { + status: 404 + }) + + const images = await Promise.all( + Array.from({ length: 3 }, async () => { + const response = await fetch(faker.image.url()) + const blob = await response.blob() + return new File([blob], 'image.png', { type: blob.type }) + }) + ) + + return HttpResponse.json( + { + id: propertyFound.id, + generalData: { + name: propertyFound.name, + producer: propertyFound.producer, + city: propertyFound.city, + state: propertyFound.state, + leaseAveragePricePerHectare: faker.finance.amount(), + nakedAveragePricePerHectare: faker.finance.amount(), + responsibleTechnicians: Array.from( + { + length: 3 + }, + () => ({ id: faker.string.uuid(), value: faker.person.fullName() }) + ) + }, + collaborators: Array.from({ length: 5 }, () => ({ + name: faker.person.fullName(), + hoursPerDay: String(faker.number.int({ min: 1, max: 8 })) + })), + localization: { + images, + latitude: String(faker.location.latitude()), + longitude: String(faker.location.longitude()) + }, + totalArea: { + dairyCattleFarming: String(faker.number.float({ min: 1, max: 20 })), + perennialPasture: String(faker.number.float({ min: 1, max: 20 })), + summerPlowing: String(faker.number.float({ min: 1, max: 20 })), + winterPlowing: String(faker.number.float({ min: 1, max: 20 })) + } + }, + { status: HttpStatusCode.ok } + ) + } +}) From 80d1527e917b223fabcf7acb896fe82e8e1f9139 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Fri, 19 Apr 2024 13:54:08 -0300 Subject: [PATCH 049/162] feat: add forbidden error validation on property integrations --- src/data/useCases/property/remoteDeleteProperty.ts | 7 ++++++- src/data/useCases/property/remoteGetProperties.ts | 7 ++++++- src/data/useCases/property/remoteGetProperty.ts | 7 ++++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/data/useCases/property/remoteDeleteProperty.ts b/src/data/useCases/property/remoteDeleteProperty.ts index ace65dbb..f0181b03 100644 --- a/src/data/useCases/property/remoteDeleteProperty.ts +++ b/src/data/useCases/property/remoteDeleteProperty.ts @@ -1,5 +1,5 @@ import { IHttpClient, HttpStatusCode } from '@/data/protocols/http' -import { UnexpectedError, NotFoundError } from '@/domain/errors' +import { UnexpectedError, NotFoundError, ForbiddenError } from '@/domain/errors' import { IDeleteProperty } from '@/domain/useCases' export class RemoteDeleteProperty implements IDeleteProperty { @@ -19,6 +19,11 @@ export class RemoteDeleteProperty implements IDeleteProperty { if (statusCode === HttpStatusCode.notFound) throw new NotFoundError('Propriedades') + if (statusCode === HttpStatusCode.forbidden) + throw new ForbiddenError( + 'Você não tem permissão para excluir uma propriedade' + ) + throw new UnexpectedError() } } diff --git a/src/data/useCases/property/remoteGetProperties.ts b/src/data/useCases/property/remoteGetProperties.ts index 453beddb..cb1230c7 100644 --- a/src/data/useCases/property/remoteGetProperties.ts +++ b/src/data/useCases/property/remoteGetProperties.ts @@ -1,5 +1,5 @@ import { IHttpClient, HttpStatusCode } from '@/data/protocols/http' -import { UnexpectedError, NotFoundError } from '@/domain/errors' +import { UnexpectedError, NotFoundError, ForbiddenError } from '@/domain/errors' import { PropertyModel } from '@/domain/models' import { IGetProperties } from '@/domain/useCases' @@ -43,6 +43,11 @@ export class RemoteGetProperties implements IGetProperties { if (statusCode === HttpStatusCode.notFound) throw new NotFoundError('Propriedades') + if (statusCode === HttpStatusCode.forbidden) + throw new ForbiddenError( + 'Você não tem permissão para buscar propriedades' + ) + throw new UnexpectedError() } } diff --git a/src/data/useCases/property/remoteGetProperty.ts b/src/data/useCases/property/remoteGetProperty.ts index e71b6243..689485fb 100644 --- a/src/data/useCases/property/remoteGetProperty.ts +++ b/src/data/useCases/property/remoteGetProperty.ts @@ -1,5 +1,5 @@ import { IHttpClient, HttpStatusCode } from '@/data/protocols/http' -import { UnexpectedError, NotFoundError } from '@/domain/errors' +import { UnexpectedError, NotFoundError, ForbiddenError } from '@/domain/errors' import { IGetProperty } from '@/domain/useCases' export class RemoteGetProperty implements IGetProperty { @@ -23,6 +23,11 @@ export class RemoteGetProperty implements IGetProperty { if (statusCode === HttpStatusCode.notFound) throw new NotFoundError('Propriedades') + if (statusCode === HttpStatusCode.forbidden) + throw new ForbiddenError( + 'Você não tem permissão para buscar uma propriedade' + ) + throw new UnexpectedError() } } From 139ebfb64b96a978ff5e7a300c293176f0d1a37e Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Fri, 19 Apr 2024 15:27:45 -0300 Subject: [PATCH 050/162] feat: add update property integration --- src/data/useCases/property/index.ts | 1 + .../useCases/property/remoteUpdateProperty.ts | 33 +++++++++++++++++++ src/domain/useCases/property/index.ts | 1 + .../useCases/property/updateProperty.ts | 5 +++ src/main/factories/useCases/property/index.ts | 1 + .../property/remoteUpdatePropertyFactory.ts | 6 ++++ 6 files changed, 47 insertions(+) create mode 100644 src/data/useCases/property/remoteUpdateProperty.ts create mode 100644 src/domain/useCases/property/updateProperty.ts create mode 100644 src/main/factories/useCases/property/remoteUpdatePropertyFactory.ts diff --git a/src/data/useCases/property/index.ts b/src/data/useCases/property/index.ts index 9c1ef83e..ce581655 100644 --- a/src/data/useCases/property/index.ts +++ b/src/data/useCases/property/index.ts @@ -2,3 +2,4 @@ export * from './remoteCreateProperty' export * from './remoteDeleteProperty' export * from './remoteGetProperties' export * from './remoteGetProperty' +export * from './remoteUpdateProperty' diff --git a/src/data/useCases/property/remoteUpdateProperty.ts b/src/data/useCases/property/remoteUpdateProperty.ts new file mode 100644 index 00000000..20ef2129 --- /dev/null +++ b/src/data/useCases/property/remoteUpdateProperty.ts @@ -0,0 +1,33 @@ +import { IHttpClient, HttpStatusCode } from '@/data/protocols/http' +import { + BadRequestError, + ForbiddenError, + UnexpectedError +} from '@/domain/errors' +import { IUpdateProperty } from '@/domain/useCases' + +export class RemoteUpdateProperty implements IUpdateProperty { + constructor( + private readonly url: string, + private readonly httpClient: IHttpClient + ) {} + + execute: IUpdateProperty['execute'] = async (property) => { + const { statusCode } = await this.httpClient.request({ + url: `${this.url}`, + method: 'patch', + body: property + }) + + if (statusCode === HttpStatusCode.noContent) return + + if (statusCode === HttpStatusCode.badRequest) throw new BadRequestError() + + if (statusCode === HttpStatusCode.forbidden) + throw new ForbiddenError( + 'Você não tem permissão para editar uma propriedade' + ) + + throw new UnexpectedError() + } +} diff --git a/src/domain/useCases/property/index.ts b/src/domain/useCases/property/index.ts index bfbd99c1..40100706 100644 --- a/src/domain/useCases/property/index.ts +++ b/src/domain/useCases/property/index.ts @@ -2,3 +2,4 @@ export * from './createProperty' export * from './deleteProperty' export * from './getProperties' export * from './getProperty' +export * from './updateProperty' diff --git a/src/domain/useCases/property/updateProperty.ts b/src/domain/useCases/property/updateProperty.ts new file mode 100644 index 00000000..a8597be5 --- /dev/null +++ b/src/domain/useCases/property/updateProperty.ts @@ -0,0 +1,5 @@ +import { PropertyDetailsModel } from '@/domain/models' +import { IRequestInterface } from '@/domain/shared' + +export interface IUpdateProperty + extends IRequestInterface {} diff --git a/src/main/factories/useCases/property/index.ts b/src/main/factories/useCases/property/index.ts index 897a6fd3..f5bf4855 100644 --- a/src/main/factories/useCases/property/index.ts +++ b/src/main/factories/useCases/property/index.ts @@ -2,3 +2,4 @@ export * from './remoteCreatePropertyFactory' export * from './remoteDeletePropertyFactory' export * from './remoteGetPropertiesFactory' export * from './remoteGetPropertyFactory' +export * from './remoteUpdatePropertyFactory' diff --git a/src/main/factories/useCases/property/remoteUpdatePropertyFactory.ts b/src/main/factories/useCases/property/remoteUpdatePropertyFactory.ts new file mode 100644 index 00000000..85d63951 --- /dev/null +++ b/src/main/factories/useCases/property/remoteUpdatePropertyFactory.ts @@ -0,0 +1,6 @@ +import { RemoteUpdateProperty } from '@/data/useCases/property' +import { IUpdateProperty } from '@/domain/useCases' +import { makeApiHttpClient } from '@/main/factories/http' + +export const makeRemoteUpdateProperty = (): IUpdateProperty => + new RemoteUpdateProperty('properties', makeApiHttpClient()) From 757b27de5962f39ce139bf9288ddb9eee18396a7 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sat, 20 Apr 2024 13:27:45 -0300 Subject: [PATCH 051/162] feat: add command component --- .../components/ui/command/dialog.tsx | 17 ++++++++++++ .../components/ui/command/empty.tsx | 16 ++++++++++++ .../components/ui/command/group.tsx | 21 +++++++++++++++ .../components/ui/command/index.ts | 21 +++++++++++++++ .../components/ui/command/input.tsx | 26 +++++++++++++++++++ .../components/ui/command/item.tsx | 21 +++++++++++++++ .../components/ui/command/list.tsx | 18 +++++++++++++ .../components/ui/command/root.tsx | 21 +++++++++++++++ .../components/ui/command/separator.tsx | 18 +++++++++++++ .../components/ui/command/shortcut.tsx | 16 ++++++++++++ 10 files changed, 195 insertions(+) create mode 100644 src/presentation/components/ui/command/dialog.tsx create mode 100644 src/presentation/components/ui/command/empty.tsx create mode 100644 src/presentation/components/ui/command/group.tsx create mode 100644 src/presentation/components/ui/command/index.ts create mode 100644 src/presentation/components/ui/command/input.tsx create mode 100644 src/presentation/components/ui/command/item.tsx create mode 100644 src/presentation/components/ui/command/list.tsx create mode 100644 src/presentation/components/ui/command/root.tsx create mode 100644 src/presentation/components/ui/command/separator.tsx create mode 100644 src/presentation/components/ui/command/shortcut.tsx diff --git a/src/presentation/components/ui/command/dialog.tsx b/src/presentation/components/ui/command/dialog.tsx new file mode 100644 index 00000000..ef1617cc --- /dev/null +++ b/src/presentation/components/ui/command/dialog.tsx @@ -0,0 +1,17 @@ +import React from 'react' + +import { Command } from 'cmdk' + +import { Dialog as AppDialog } from '../dialog' + +import type { DialogProps } from '@radix-ui/react-dialog' + +export const Dialog: React.FC = ({ children, ...props }) => ( + + + + {children} + + + +) diff --git a/src/presentation/components/ui/command/empty.tsx b/src/presentation/components/ui/command/empty.tsx new file mode 100644 index 00000000..5c05b4af --- /dev/null +++ b/src/presentation/components/ui/command/empty.tsx @@ -0,0 +1,16 @@ +import { forwardRef } from 'react' + +import { Command as CommandPrimitive } from 'cmdk' + +export const Empty = forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>((props, ref) => ( + +)) + +Empty.displayName = CommandPrimitive.Empty.displayName diff --git a/src/presentation/components/ui/command/group.tsx b/src/presentation/components/ui/command/group.tsx new file mode 100644 index 00000000..821bf369 --- /dev/null +++ b/src/presentation/components/ui/command/group.tsx @@ -0,0 +1,21 @@ +import { forwardRef } from 'react' + +import { Command as CommandPrimitive } from 'cmdk' + +import { cn } from '@/main/utils' + +export const Group = forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +Group.displayName = CommandPrimitive.Group.displayName diff --git a/src/presentation/components/ui/command/index.ts b/src/presentation/components/ui/command/index.ts new file mode 100644 index 00000000..4d406058 --- /dev/null +++ b/src/presentation/components/ui/command/index.ts @@ -0,0 +1,21 @@ +import { Dialog } from './dialog' +import { Empty } from './empty' +import { Group } from './group' +import { Input } from './input' +import { Item } from './item' +import { List } from './list' +import { Root } from './root' +import { Separator } from './separator' +import { Shortcut } from './shortcut' + +export const Command = { + Root, + Dialog, + Input, + List, + Empty, + Group, + Item, + Shortcut, + Separator +} diff --git a/src/presentation/components/ui/command/input.tsx b/src/presentation/components/ui/command/input.tsx new file mode 100644 index 00000000..2127b1be --- /dev/null +++ b/src/presentation/components/ui/command/input.tsx @@ -0,0 +1,26 @@ +import { forwardRef } from 'react' + +import { Command as CommandPrimitive } from 'cmdk' +import { Search } from 'lucide-react' + +import { cn } from '@/main/utils' + +export const Input = forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + // eslint-disable-next-line react/no-unknown-property +
    + + +
    +)) + +Input.displayName = CommandPrimitive.Input.displayName diff --git a/src/presentation/components/ui/command/item.tsx b/src/presentation/components/ui/command/item.tsx new file mode 100644 index 00000000..073d6d77 --- /dev/null +++ b/src/presentation/components/ui/command/item.tsx @@ -0,0 +1,21 @@ +import { forwardRef } from 'react' + +import { Command as CommandPrimitive } from 'cmdk' + +import { cn } from '@/main/utils' + +export const Item = forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +Item.displayName = CommandPrimitive.Item.displayName diff --git a/src/presentation/components/ui/command/list.tsx b/src/presentation/components/ui/command/list.tsx new file mode 100644 index 00000000..4336b298 --- /dev/null +++ b/src/presentation/components/ui/command/list.tsx @@ -0,0 +1,18 @@ +import { forwardRef } from 'react' + +import { Command as CommandPrimitive } from 'cmdk' + +import { cn } from '@/main/utils' + +export const List = forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +List.displayName = CommandPrimitive.List.displayName diff --git a/src/presentation/components/ui/command/root.tsx b/src/presentation/components/ui/command/root.tsx new file mode 100644 index 00000000..cbd317d5 --- /dev/null +++ b/src/presentation/components/ui/command/root.tsx @@ -0,0 +1,21 @@ +import { forwardRef } from 'react' + +import { Command as CommandPrimitive } from 'cmdk' + +import { cn } from '@/main/utils' + +export const Root = forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +Root.displayName = CommandPrimitive.displayName diff --git a/src/presentation/components/ui/command/separator.tsx b/src/presentation/components/ui/command/separator.tsx new file mode 100644 index 00000000..402384e9 --- /dev/null +++ b/src/presentation/components/ui/command/separator.tsx @@ -0,0 +1,18 @@ +import { forwardRef } from 'react' + +import { Command as CommandPrimitive } from 'cmdk' + +import { cn } from '@/main/utils' + +export const Separator = forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +Separator.displayName = CommandPrimitive.Separator.displayName diff --git a/src/presentation/components/ui/command/shortcut.tsx b/src/presentation/components/ui/command/shortcut.tsx new file mode 100644 index 00000000..6702f78e --- /dev/null +++ b/src/presentation/components/ui/command/shortcut.tsx @@ -0,0 +1,16 @@ +import { cn } from '@/main/utils' + +export const Shortcut: React.FC> = ({ + className, + ...props +}) => ( + +) + +Shortcut.displayName = 'CommandShortcut' From 12be1e8de03b89d43e01542570d415b386ed5ef0 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sat, 20 Apr 2024 16:44:07 -0300 Subject: [PATCH 052/162] feat: add dialog component --- .../components/ui/dialog/content.tsx | 37 +++++++++++++++++++ .../components/ui/dialog/description.tsx | 18 +++++++++ .../components/ui/dialog/footer.tsx | 16 ++++++++ .../components/ui/dialog/header.tsx | 16 ++++++++ .../components/ui/dialog/index.ts | 21 +++++++++++ .../components/ui/dialog/overlay.tsx | 21 +++++++++++ .../components/ui/dialog/title.tsx | 21 +++++++++++ 7 files changed, 150 insertions(+) create mode 100644 src/presentation/components/ui/dialog/content.tsx create mode 100644 src/presentation/components/ui/dialog/description.tsx create mode 100644 src/presentation/components/ui/dialog/footer.tsx create mode 100644 src/presentation/components/ui/dialog/header.tsx create mode 100644 src/presentation/components/ui/dialog/index.ts create mode 100644 src/presentation/components/ui/dialog/overlay.tsx create mode 100644 src/presentation/components/ui/dialog/title.tsx diff --git a/src/presentation/components/ui/dialog/content.tsx b/src/presentation/components/ui/dialog/content.tsx new file mode 100644 index 00000000..d24389df --- /dev/null +++ b/src/presentation/components/ui/dialog/content.tsx @@ -0,0 +1,37 @@ +import { forwardRef } from 'react' + +import { + Content as ContentPrimitive, + Close as ClosePrimitive, + Portal as PortalPrimitive +} from '@radix-ui/react-dialog' +import { X } from 'lucide-react' + +import { cn } from '@/main/utils' + +import { Overlay } from './overlay' + +export const Content = forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + {children} + + + Close + + + +)) + +Content.displayName = ContentPrimitive.displayName diff --git a/src/presentation/components/ui/dialog/description.tsx b/src/presentation/components/ui/dialog/description.tsx new file mode 100644 index 00000000..8ad3190c --- /dev/null +++ b/src/presentation/components/ui/dialog/description.tsx @@ -0,0 +1,18 @@ +import { forwardRef } from 'react' + +import { Description as DescriptionPrimitive } from '@radix-ui/react-dialog' + +import { cn } from '@/main/utils' + +export const Description = forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +Description.displayName = DescriptionPrimitive.displayName diff --git a/src/presentation/components/ui/dialog/footer.tsx b/src/presentation/components/ui/dialog/footer.tsx new file mode 100644 index 00000000..30fa7732 --- /dev/null +++ b/src/presentation/components/ui/dialog/footer.tsx @@ -0,0 +1,16 @@ +import { cn } from '@/main/utils' + +export const Footer: React.FC> = ({ + className, + ...props +}) => ( +
    +) + +Footer.displayName = 'DialogFooter' diff --git a/src/presentation/components/ui/dialog/header.tsx b/src/presentation/components/ui/dialog/header.tsx new file mode 100644 index 00000000..eae319fe --- /dev/null +++ b/src/presentation/components/ui/dialog/header.tsx @@ -0,0 +1,16 @@ +import { cn } from '@/main/utils' + +export const Header: React.FC> = ({ + className, + ...props +}) => ( +
    +) + +Header.displayName = 'DialogHeader' diff --git a/src/presentation/components/ui/dialog/index.ts b/src/presentation/components/ui/dialog/index.ts new file mode 100644 index 00000000..e73c809f --- /dev/null +++ b/src/presentation/components/ui/dialog/index.ts @@ -0,0 +1,21 @@ +import { Root, Trigger, Portal, Close } from '@radix-ui/react-dialog' + +import { Content } from './content' +import { Description } from './description' +import { Footer } from './footer' +import { Header } from './header' +import { Overlay } from './overlay' +import { Title } from './title' + +export const Dialog = { + Root, + Portal, + Overlay, + Close, + Trigger, + Content, + Header, + Footer, + Title, + Description +} diff --git a/src/presentation/components/ui/dialog/overlay.tsx b/src/presentation/components/ui/dialog/overlay.tsx new file mode 100644 index 00000000..5680c4c0 --- /dev/null +++ b/src/presentation/components/ui/dialog/overlay.tsx @@ -0,0 +1,21 @@ +import { forwardRef } from 'react' + +import { Overlay as OverlayPrimitive } from '@radix-ui/react-dialog' + +import { cn } from '@/main/utils' + +export const Overlay = forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +Overlay.displayName = OverlayPrimitive.displayName diff --git a/src/presentation/components/ui/dialog/title.tsx b/src/presentation/components/ui/dialog/title.tsx new file mode 100644 index 00000000..33d74526 --- /dev/null +++ b/src/presentation/components/ui/dialog/title.tsx @@ -0,0 +1,21 @@ +import { forwardRef } from 'react' + +import { Title as TitlePrimitive } from '@radix-ui/react-dialog' + +import { cn } from '@/main/utils' + +export const Title = forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +Title.displayName = TitlePrimitive.displayName From 32a00433ec3e386195be8f0e86189116e71e461e Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sat, 20 Apr 2024 18:37:15 -0300 Subject: [PATCH 053/162] refactor: move useHookForm to shared hooks --- src/presentation/components/ui/form/hooks/index.ts | 1 - src/presentation/components/ui/form/index.stories.tsx | 3 ++- src/presentation/components/ui/form/index.ts | 1 - src/presentation/{components/ui/form => }/hooks/useHookForm.ts | 2 +- src/presentation/pages/login/useLogin.ts | 2 +- src/presentation/pages/signUp/useSignUp.ts | 2 +- 6 files changed, 5 insertions(+), 6 deletions(-) rename src/presentation/{components/ui/form => }/hooks/useHookForm.ts (93%) diff --git a/src/presentation/components/ui/form/hooks/index.ts b/src/presentation/components/ui/form/hooks/index.ts index 4351250c..3ee4cb5f 100644 --- a/src/presentation/components/ui/form/hooks/index.ts +++ b/src/presentation/components/ui/form/hooks/index.ts @@ -1,2 +1 @@ export * from './useFormField' -export * from './useHookForm' diff --git a/src/presentation/components/ui/form/index.stories.tsx b/src/presentation/components/ui/form/index.stories.tsx index fc3882d4..e0b8ca40 100644 --- a/src/presentation/components/ui/form/index.stories.tsx +++ b/src/presentation/components/ui/form/index.stories.tsx @@ -4,8 +4,9 @@ import { ValidationBuilder } from '@/main/builders' import { ValidationComposite } from '@/main/composite' import { Button } from '@/presentation/components/ui/button' import { Input } from '@/presentation/components/ui/input' +import { useHookForm } from '@/presentation/hooks' -import { useHookForm, Form } from '.' +import { Form } from '.' export default { title: 'Components/UI/Form' diff --git a/src/presentation/components/ui/form/index.ts b/src/presentation/components/ui/form/index.ts index fe1450df..2a4ffc01 100644 --- a/src/presentation/components/ui/form/index.ts +++ b/src/presentation/components/ui/form/index.ts @@ -7,7 +7,6 @@ import { Item } from './item' import { Label } from './label' import { Message } from './message' -export { useFormField, useHookForm } from './hooks' export const Form = { Provider: FormProvider, Control, diff --git a/src/presentation/components/ui/form/hooks/useHookForm.ts b/src/presentation/hooks/useHookForm.ts similarity index 93% rename from src/presentation/components/ui/form/hooks/useHookForm.ts rename to src/presentation/hooks/useHookForm.ts index 40763d7f..0a32a83f 100644 --- a/src/presentation/components/ui/form/hooks/useHookForm.ts +++ b/src/presentation/hooks/useHookForm.ts @@ -9,7 +9,7 @@ import { } from 'react-hook-form' import toast from 'react-hot-toast' -type UseHookFormProps = { +export type UseHookFormProps = { values?: UseFormProps['values'] defaultValues?: DefaultValues schemaResolver?: Resolver diff --git a/src/presentation/pages/login/useLogin.ts b/src/presentation/pages/login/useLogin.ts index 54174ac9..8092e062 100644 --- a/src/presentation/pages/login/useLogin.ts +++ b/src/presentation/pages/login/useLogin.ts @@ -1,7 +1,7 @@ import { useCallback } from 'react' import { LoginUserParams } from '@/domain/useCases' -import { useHookForm } from '@/presentation/components/ui/form/hooks/useHookForm' +import { useHookForm } from '@/presentation/hooks/useHookForm' import { useAuth } from '@/presentation/store' const INITIAL_FORM_DATA: LoginUserParams = { diff --git a/src/presentation/pages/signUp/useSignUp.ts b/src/presentation/pages/signUp/useSignUp.ts index c182f155..688baa50 100644 --- a/src/presentation/pages/signUp/useSignUp.ts +++ b/src/presentation/pages/signUp/useSignUp.ts @@ -6,8 +6,8 @@ import { toast } from 'react-hot-toast' import { CreateUserModel } from '@/domain/models' import { PAGE_PATHS } from '@/main/routes/paths' import { onlyNumbersMask } from '@/masker' -import { useHookForm } from '@/presentation/components/ui/form/hooks/useHookForm' import { useIdrHistory } from '@/presentation/hooks' +import { useHookForm } from '@/presentation/hooks/useHookForm' import { SignUpPageProps } from './types' From b98deeef60a36937e4efcdaa81f0aa548241fe5a Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sat, 20 Apr 2024 19:02:55 -0300 Subject: [PATCH 054/162] feat: add popover component --- .../components/ui/popover/content.tsx | 25 +++++++++++++++++++ .../components/ui/popover/index.ts | 9 +++++++ 2 files changed, 34 insertions(+) create mode 100644 src/presentation/components/ui/popover/content.tsx create mode 100644 src/presentation/components/ui/popover/index.ts diff --git a/src/presentation/components/ui/popover/content.tsx b/src/presentation/components/ui/popover/content.tsx new file mode 100644 index 00000000..fe090601 --- /dev/null +++ b/src/presentation/components/ui/popover/content.tsx @@ -0,0 +1,25 @@ +import { forwardRef } from 'react' + +import { Content as ContentPrimitive, Portal } from '@radix-ui/react-popover' + +import { cn } from '@/main/utils' + +export const Content = forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, align = 'center', sideOffset = 4, ...props }, ref) => ( + + + +)) + +Content.displayName = ContentPrimitive.displayName diff --git a/src/presentation/components/ui/popover/index.ts b/src/presentation/components/ui/popover/index.ts new file mode 100644 index 00000000..484c3935 --- /dev/null +++ b/src/presentation/components/ui/popover/index.ts @@ -0,0 +1,9 @@ +import { Root, Trigger } from '@radix-ui/react-popover' + +import { Content } from './content' + +export const Popover = { + Root, + Trigger, + Content +} From 722dbb010f950090c26e9582792050eabac15270 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sat, 20 Apr 2024 19:28:27 -0300 Subject: [PATCH 055/162] style: responsive sheet content --- src/presentation/components/ui/sheet/content/styles.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/presentation/components/ui/sheet/content/styles.ts b/src/presentation/components/ui/sheet/content/styles.ts index e135cb2b..23765384 100644 --- a/src/presentation/components/ui/sheet/content/styles.ts +++ b/src/presentation/components/ui/sheet/content/styles.ts @@ -1,15 +1,15 @@ import { cva } from 'class-variance-authority' import clsx from 'clsx' -const baseStyles = clsx`flex flex-col fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500` +const baseStyles = clsx`flex flex-col fixed z-50 gap-4 bg-white p-8 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500` export const sheetVariants = cva(baseStyles, { variants: { side: { - top: clsx`inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top`, - bottom: clsx`inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom`, - left: clsx`inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm`, - right: clsx`inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm` + top: clsx`inset-x-0 top-0 data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top`, + bottom: clsx`inset-x-0 bottom-0 data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom`, + left: clsx`inset-y-0 left-0 h-full w-3/4 data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm md:max-w-md lg:max-w-lg xl:max-w-xl 2xl:max-w-2xl`, + right: clsx`inset-y-0 right-0 h-full w-3/4 data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm md:max-w-md lg:max-w-lg xl:max-w-xl 2xl:max-w-2xl` } }, defaultVariants: { From f293837af2e4cf9bcbdae30b7afa357827d0e776 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sat, 20 Apr 2024 21:40:22 -0300 Subject: [PATCH 056/162] style(presentation/tabs/trigger): change bg color --- src/presentation/components/ui/tabs/trigger.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/presentation/components/ui/tabs/trigger.tsx b/src/presentation/components/ui/tabs/trigger.tsx index 05e7009e..1c2caafe 100644 --- a/src/presentation/components/ui/tabs/trigger.tsx +++ b/src/presentation/components/ui/tabs/trigger.tsx @@ -11,7 +11,7 @@ export const Trigger = forwardRef< Date: Sat, 20 Apr 2024 23:25:10 -0300 Subject: [PATCH 057/162] chore: export and add packages for new components --- package.json | 4 +- pnpm-lock.yaml | 187 +++++++++++++++++++++++- src/presentation/components/ui/index.ts | 3 + 3 files changed, 189 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index a81957c3..9c32184f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "@radix-ui/react-dialog": "^1.0.5", "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-label": "^2.0.2", + "@radix-ui/react-popover": "^1.0.7", "@radix-ui/react-slot": "^1.0.2", "@radix-ui/react-tabs": "^1.0.4", "@radix-ui/react-tooltip": "^1.0.7", @@ -31,6 +32,7 @@ "axios": "^1.4.0", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", + "cmdk": "^1.0.0", "lucide-react": "^0.320.0", "react": "^18.2.0", "react-dom": "^18.2.0", @@ -38,7 +40,6 @@ "react-hot-toast": "^2.4.1", "react-router-dom": "^6.14.2", "tailwind-merge": "^2.2.1", - "tailwindcss-animate": "^1.0.7", "validator": "^13.11.0" }, "devDependencies": { @@ -76,6 +77,7 @@ "prettier": "^3.1.0", "storybook": "^7.3.0", "tailwindcss": "^3.4.1", + "tailwindcss-animate": "^1.0.7", "typescript": "^5.1.6", "vite": "^4.4.9" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fe0d1e96..20aa3ba3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,6 +17,9 @@ dependencies: '@radix-ui/react-label': specifier: ^2.0.2 version: 2.0.2(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-popover': + specifier: ^1.0.7 + version: 1.0.7(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-slot': specifier: ^1.0.2 version: 1.0.2(@types/react@18.2.48)(react@18.2.0) @@ -38,6 +41,9 @@ dependencies: clsx: specifier: ^2.1.0 version: 2.1.0 + cmdk: + specifier: ^1.0.0 + version: 1.0.0(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) lucide-react: specifier: ^0.320.0 version: 0.320.0(react@18.2.0) @@ -59,9 +65,6 @@ dependencies: tailwind-merge: specifier: ^2.2.1 version: 2.2.1 - tailwindcss-animate: - specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.1) validator: specifier: ^13.11.0 version: 13.11.0 @@ -169,6 +172,9 @@ devDependencies: tailwindcss: specifier: ^3.4.1 version: 3.4.1(ts-node@10.9.2) + tailwindcss-animate: + specifier: ^1.0.7 + version: 1.0.7(tailwindcss@3.4.1) typescript: specifier: ^5.1.6 version: 5.3.3 @@ -186,6 +192,7 @@ packages: /@alloc/quick-lru@5.2.0: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} + dev: true /@ampproject/remapping@2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} @@ -1676,6 +1683,7 @@ packages: engines: {node: '>=12'} dependencies: '@jridgewell/trace-mapping': 0.3.9 + dev: true /@discoveryjs/json-ext@0.5.7: resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} @@ -2020,6 +2028,7 @@ packages: strip-ansi-cjs: /strip-ansi@6.0.1 wrap-ansi: 8.1.0 wrap-ansi-cjs: /wrap-ansi@7.0.0 + dev: true /@istanbuljs/load-nyc-config@1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} @@ -2114,29 +2123,35 @@ packages: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.22 + dev: true /@jridgewell/resolve-uri@3.1.1: resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} + dev: true /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} + dev: true /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true /@jridgewell/trace-mapping@0.3.22: resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==} dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 + dev: true /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 + dev: true /@juggle/resize-observer@3.4.0: resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} @@ -2183,10 +2198,12 @@ packages: dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 + dev: true /@nodelib/fs.stat@2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} + dev: true /@nodelib/fs.walk@1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} @@ -2194,6 +2211,7 @@ packages: dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.0 + dev: true /@open-draft/deferred-promise@2.2.0: resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} @@ -2214,6 +2232,7 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} requiresBuild: true + dev: true optional: true /@pkgr/core@0.1.1: @@ -2581,6 +2600,41 @@ packages: react-remove-scroll: 2.5.5(@types/react@18.2.48)(react@18.2.0) dev: false + /@radix-ui/react-popover@1.0.7(@types/react-dom@18.2.18)(@types/react@18.2.48)(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.9 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + 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.48)(react@18.2.0) + dev: false + /@radix-ui/react-popper@1.1.2(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==} peerDependencies: @@ -3845,15 +3899,19 @@ packages: /@tsconfig/node10@1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + dev: true /@tsconfig/node12@1.0.11: resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: true /@tsconfig/node14@1.0.3: resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: true /@tsconfig/node16@1.0.4: resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + dev: true /@types/babel__core@7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -4063,6 +4121,7 @@ packages: /@types/node@20.5.1: resolution: {integrity: sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==} + dev: true /@types/normalize-package-data@2.4.4: resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -4453,6 +4512,7 @@ packages: /acorn-walk@8.3.2: resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} engines: {node: '>=0.4.0'} + dev: true /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} @@ -4464,6 +4524,7 @@ packages: resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} hasBin: true + dev: true /address@1.2.2: resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} @@ -4518,10 +4579,12 @@ packages: /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + dev: true /ansi-regex@6.0.1: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} + dev: true /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} @@ -4535,13 +4598,16 @@ packages: engines: {node: '>=8'} dependencies: color-convert: 2.0.1 + dev: true /ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} + dev: true /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: true /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} @@ -4549,6 +4615,7 @@ packages: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 + dev: true /app-root-dir@1.0.2: resolution: {integrity: sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==} @@ -4556,9 +4623,11 @@ packages: /arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + dev: true /arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: true /argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} @@ -4811,6 +4880,7 @@ packages: /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -4831,6 +4901,7 @@ packages: /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} + dev: true /bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} @@ -4878,12 +4949,14 @@ packages: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 + dev: true /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: fill-range: 7.0.1 + dev: true /browser-assert@1.2.1: resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} @@ -4953,6 +5026,7 @@ packages: /camelcase-css@2.0.1: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} + dev: true /camelcase-keys@6.2.2: resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} @@ -5007,6 +5081,7 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.3 + dev: true /chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} @@ -5113,6 +5188,21 @@ packages: engines: {node: '>=6'} dev: false + /cmdk@1.0.0(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-gDzVf0a09TvoJ5jnuPvygTB77+XdOSwEmJ88L6XPFPlv7T3RxbP9jgenfylrAMD0+Le1aO0nVjQUzl2g+vjz5Q==} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + dev: false + /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: @@ -5124,6 +5214,7 @@ packages: engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 + dev: true /color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} @@ -5131,6 +5222,7 @@ packages: /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true /colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} @@ -5150,6 +5242,7 @@ packages: /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} + dev: true /commander@6.2.1: resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} @@ -5317,6 +5410,7 @@ packages: /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + dev: true /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} @@ -5325,6 +5419,7 @@ packages: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 + dev: true /crypto-random-string@2.0.0: resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} @@ -5335,6 +5430,7 @@ packages: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} hasBin: true + dev: true /csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} @@ -5500,10 +5596,12 @@ packages: /didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dev: true /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} + dev: true /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} @@ -5514,6 +5612,7 @@ packages: /dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dev: true /doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} @@ -5557,6 +5656,7 @@ packages: /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dev: true /ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} @@ -5576,9 +5676,11 @@ packages: /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true /emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: true /encodeurl@1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} @@ -6259,6 +6361,7 @@ packages: glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 + dev: true /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -6272,6 +6375,7 @@ packages: resolution: {integrity: sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==} dependencies: reusify: 1.0.4 + dev: true /fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} @@ -6321,6 +6425,7 @@ packages: engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 + dev: true /finalhandler@1.2.0: resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} @@ -6418,6 +6523,7 @@ packages: dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 + dev: true /form-data@4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} @@ -6479,10 +6585,12 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true + dev: true optional: true /function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true /function.prototype.name@1.1.6: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} @@ -6595,12 +6703,14 @@ packages: engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 + dev: true /glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} dependencies: is-glob: 4.0.3 + dev: true /glob-promise@4.2.2(glob@7.2.3): resolution: {integrity: sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw==} @@ -6626,6 +6736,7 @@ packages: minimatch: 9.0.3 minipass: 7.0.4 path-scurry: 1.10.1 + dev: true /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} @@ -6775,6 +6886,7 @@ packages: engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 + dev: true /headers-polyfill@4.0.3: resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} @@ -6953,6 +7065,7 @@ packages: engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 + dev: true /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} @@ -6971,6 +7084,7 @@ packages: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: hasown: 2.0.0 + dev: true /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} @@ -6992,6 +7106,7 @@ packages: /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} + dev: true /is-finalizationregistry@1.0.2: resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} @@ -7002,6 +7117,7 @@ packages: /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} + dev: true /is-fullwidth-code-point@4.0.0: resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} @@ -7020,6 +7136,7 @@ packages: engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 + dev: true /is-gzip@1.0.0: resolution: {integrity: sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==} @@ -7062,6 +7179,7 @@ packages: /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + dev: true /is-obj@2.0.0: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} @@ -7190,6 +7308,7 @@ packages: /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true /isobject@3.0.1: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} @@ -7231,6 +7350,7 @@ packages: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 + dev: true /jake@10.8.7: resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} @@ -7300,6 +7420,7 @@ packages: /jiti@1.21.0: resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} hasBin: true + dev: true /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -7472,13 +7593,16 @@ packages: /lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} + dev: true /lilconfig@3.0.0: resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} engines: {node: '>=14'} + dev: true /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true /lint-staged@13.3.0: resolution: {integrity: sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ==} @@ -7615,6 +7739,7 @@ packages: /lru-cache@10.2.0: resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} engines: {node: 14 || >=16.14} + dev: true /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -7668,6 +7793,7 @@ packages: /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: true /makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} @@ -7747,6 +7873,7 @@ packages: /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + dev: true /methods@1.1.2: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} @@ -7759,6 +7886,7 @@ packages: dependencies: braces: 3.0.2 picomatch: 2.3.1 + dev: true /mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} @@ -7815,6 +7943,7 @@ packages: engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 + dev: true /minimist-options@4.1.0: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} @@ -7844,6 +7973,7 @@ packages: /minipass@7.0.4: resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} engines: {node: '>=16 || 14 >=14.17'} + dev: true /minizlib@2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} @@ -7924,11 +8054,13 @@ packages: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 + dev: true /nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + dev: true /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -7996,6 +8128,7 @@ packages: /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + dev: true /normalize-range@0.1.2: resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} @@ -8030,10 +8163,12 @@ packages: /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + dev: true /object-hash@3.0.0: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} + dev: true /object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} @@ -8272,6 +8407,7 @@ packages: /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + dev: true /path-key@4.0.0: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} @@ -8280,6 +8416,7 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true /path-scurry@1.10.1: resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} @@ -8287,6 +8424,7 @@ packages: dependencies: lru-cache: 10.2.0 minipass: 7.0.4 + dev: true /path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} @@ -8319,10 +8457,12 @@ packages: /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + dev: true /pidtree@0.6.0: resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} @@ -8333,6 +8473,7 @@ packages: /pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} + dev: true /pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} @@ -8342,6 +8483,7 @@ packages: /pirates@4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} + dev: true /pkg-dir@3.0.0: resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} @@ -8381,6 +8523,7 @@ packages: postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 + dev: true /postcss-js@4.0.1(postcss@8.4.33): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} @@ -8390,6 +8533,7 @@ packages: dependencies: camelcase-css: 2.0.1 postcss: 8.4.33 + dev: true /postcss-load-config@4.0.2(postcss@8.4.33)(ts-node@10.9.2): resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} @@ -8407,6 +8551,7 @@ packages: postcss: 8.4.33 ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.3.3) yaml: 2.3.4 + dev: true /postcss-nested@6.0.1(postcss@8.4.33): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} @@ -8416,6 +8561,7 @@ packages: dependencies: postcss: 8.4.33 postcss-selector-parser: 6.0.15 + dev: true /postcss-selector-parser@6.0.15: resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==} @@ -8423,9 +8569,11 @@ packages: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 + dev: true /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: true /postcss@8.4.33: resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} @@ -8434,6 +8582,7 @@ packages: nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.0.2 + dev: true /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} @@ -8568,6 +8717,7 @@ packages: /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true /quick-lru@4.0.1: resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} @@ -8769,6 +8919,7 @@ packages: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} dependencies: pify: 2.3.0 + dev: true /read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} @@ -8815,6 +8966,7 @@ packages: engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 + dev: true /recast@0.23.4: resolution: {integrity: sha512-qtEDqIZGVcSZCHniWwZWbRy79Dc6Wp3kT/UmDA2RJKBPg7+7k51aQBZirHmUGn5uvHf2rg8DkjizrN26k61ATw==} @@ -8956,6 +9108,7 @@ packages: is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + dev: true /resolve@2.0.0-next.5: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} @@ -8985,6 +9138,7 @@ packages: /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true /rfdc@1.3.1: resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} @@ -9023,6 +9177,7 @@ packages: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 + dev: true /safe-array-concat@1.1.0: resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} @@ -9147,10 +9302,12 @@ packages: engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 + dev: true /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + dev: true /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} @@ -9167,6 +9324,7 @@ packages: /signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + dev: true /sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -9188,6 +9346,7 @@ packages: /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} + dev: true /source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} @@ -9278,6 +9437,7 @@ packages: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + dev: true /string-width@5.1.2: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} @@ -9286,6 +9446,7 @@ packages: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.1.0 + dev: true /string.prototype.matchall@4.0.10: resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} @@ -9343,12 +9504,14 @@ packages: engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 + dev: true /strip-ansi@7.1.0: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} dependencies: ansi-regex: 6.0.1 + dev: true /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} @@ -9396,6 +9559,7 @@ packages: mz: 2.7.0 pirates: 4.0.6 ts-interface-checker: 0.1.13 + dev: true /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} @@ -9421,6 +9585,7 @@ packages: /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + dev: true /synchronous-promise@2.0.17: resolution: {integrity: sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==} @@ -9446,7 +9611,7 @@ packages: tailwindcss: '>=3.0.0 || insiders' dependencies: tailwindcss: 3.4.1(ts-node@10.9.2) - dev: false + dev: true /tailwindcss@3.4.1(ts-node@10.9.2): resolution: {integrity: sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==} @@ -9477,6 +9642,7 @@ packages: sucrase: 3.35.0 transitivePeerDependencies: - ts-node + dev: true /tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} @@ -9567,11 +9733,13 @@ packages: engines: {node: '>=0.8'} dependencies: thenify: 3.3.1 + dev: true /thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} dependencies: any-promise: 1.3.0 + dev: true /through2@2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} @@ -9608,6 +9776,7 @@ packages: engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 + dev: true /tocbot@4.25.0: resolution: {integrity: sha512-kE5wyCQJ40hqUaRVkyQ4z5+4juzYsv/eK+aqD97N62YH0TxFhzJvo22RUQQZdO3YnXAk42ZOfOpjVdy+Z0YokA==} @@ -9643,6 +9812,7 @@ packages: /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + dev: true /ts-node@10.9.2(@types/node@20.5.1)(typescript@5.3.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} @@ -9673,6 +9843,7 @@ packages: typescript: 5.3.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + dev: true /tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} @@ -9806,6 +9977,7 @@ packages: resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} engines: {node: '>=14.17'} hasBin: true + dev: true /ufo@1.3.2: resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} @@ -9964,6 +10136,7 @@ packages: /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: true /util@0.12.5: resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} @@ -9987,6 +10160,7 @@ packages: /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: true /validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} @@ -10135,6 +10309,7 @@ packages: hasBin: true dependencies: isexe: 2.0.0 + dev: true /wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} @@ -10156,6 +10331,7 @@ packages: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 + dev: true /wrap-ansi@8.1.0: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} @@ -10164,6 +10340,7 @@ packages: ansi-styles: 6.2.1 string-width: 5.1.2 strip-ansi: 7.1.0 + dev: true /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -10238,6 +10415,7 @@ packages: /yaml@2.3.4: resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} engines: {node: '>= 14'} + dev: true /yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} @@ -10272,6 +10450,7 @@ packages: /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} + dev: true /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} diff --git a/src/presentation/components/ui/index.ts b/src/presentation/components/ui/index.ts index fe3507c4..a05b4b36 100644 --- a/src/presentation/components/ui/index.ts +++ b/src/presentation/components/ui/index.ts @@ -1,7 +1,9 @@ export * from './avatar' export * from './button' export * from './card' +export * from './command' export * from './dataTable' +export * from './dialog' export * from './dropdown' export * from './form' export * from './header' @@ -9,6 +11,7 @@ export * from './input' export * from './label' export * from './loading' export * from './pagination' +export * from './popover' export * from './sheet' export * from './sidebar' export * from './table' From ec21707149552cfbc39259031715739d507edb85 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sun, 21 Apr 2024 08:44:18 -0300 Subject: [PATCH 058/162] refactor: rename domain interfaces and domain types to be more concise --- .../{listParamsInterface.ts => listParams.interface.ts} | 2 +- ...{listResponseInterface.ts => listResponse.interface.ts} | 2 +- src/domain/shared/request.interface.ts | 7 +++++++ src/domain/shared/requestInterface.ts | 3 --- 4 files changed, 9 insertions(+), 5 deletions(-) rename src/domain/shared/{listParamsInterface.ts => listParams.interface.ts} (77%) rename src/domain/shared/{listResponseInterface.ts => listResponse.interface.ts} (75%) create mode 100644 src/domain/shared/request.interface.ts delete mode 100644 src/domain/shared/requestInterface.ts diff --git a/src/domain/shared/listParamsInterface.ts b/src/domain/shared/listParams.interface.ts similarity index 77% rename from src/domain/shared/listParamsInterface.ts rename to src/domain/shared/listParams.interface.ts index 221d682f..1bd22176 100644 --- a/src/domain/shared/listParamsInterface.ts +++ b/src/domain/shared/listParams.interface.ts @@ -2,7 +2,7 @@ import { SortDirection } from '@tanstack/react-table' import { HttpRequest } from '@/data/protocols/http' -export interface IListParams { +export interface IListParams { filters?: Record sort?: { direction: SortDirection diff --git a/src/domain/shared/listResponseInterface.ts b/src/domain/shared/listResponse.interface.ts similarity index 75% rename from src/domain/shared/listResponseInterface.ts rename to src/domain/shared/listResponse.interface.ts index 9fa0d0d7..b88d38d2 100644 --- a/src/domain/shared/listResponseInterface.ts +++ b/src/domain/shared/listResponse.interface.ts @@ -1,4 +1,4 @@ export interface IListResponse { - data: TData[] + resources: TData[] totalPages: number } diff --git a/src/domain/shared/request.interface.ts b/src/domain/shared/request.interface.ts new file mode 100644 index 00000000..9a1510ce --- /dev/null +++ b/src/domain/shared/request.interface.ts @@ -0,0 +1,7 @@ +export interface IRequestInterface< + TParams, + TResponse, + TCustomParams = unknown +> { + execute: (params: TParams, customParams?: TCustomParams) => Promise +} diff --git a/src/domain/shared/requestInterface.ts b/src/domain/shared/requestInterface.ts deleted file mode 100644 index fce30957..00000000 --- a/src/domain/shared/requestInterface.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface IRequestInterface { - execute: (params: TParams) => Promise -} From 24fa4b45031f6c5d943f40b8521d74d9b4753704 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sun, 21 Apr 2024 09:21:43 -0300 Subject: [PATCH 059/162] feat(domain/shared/file.type): add FileType --- src/domain/shared/file.types.ts | 5 +++++ src/domain/shared/index.ts | 7 ++++--- 2 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 src/domain/shared/file.types.ts diff --git a/src/domain/shared/file.types.ts b/src/domain/shared/file.types.ts new file mode 100644 index 00000000..a9887021 --- /dev/null +++ b/src/domain/shared/file.types.ts @@ -0,0 +1,5 @@ +export type FileType = { + name: string + preview: string + file?: File +} diff --git a/src/domain/shared/index.ts b/src/domain/shared/index.ts index 87d78392..5200738f 100644 --- a/src/domain/shared/index.ts +++ b/src/domain/shared/index.ts @@ -1,4 +1,5 @@ -export * from './listParamsInterface' -export * from './listResponseInterface' +export * from './file.types' +export * from './listParams.interface' +export * from './listResponse.interface' export * from './option.types' -export * from './requestInterface' +export * from './request.interface' From 46cd859e398f35281a70b3acf3e6d81168171957 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sun, 21 Apr 2024 12:55:10 -0300 Subject: [PATCH 060/162] refactor: remove id from PropertyDetailsModel --- src/domain/models/propertyModel.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/domain/models/propertyModel.ts b/src/domain/models/propertyModel.ts index e48de5e8..68070ef8 100644 --- a/src/domain/models/propertyModel.ts +++ b/src/domain/models/propertyModel.ts @@ -1,4 +1,4 @@ -import { Option } from '@/domain/shared' +import type { FileType, Option } from '@/domain/shared' export type PropertyModel = { id: string @@ -11,7 +11,6 @@ export type PropertyModel = { } export type PropertyDetailsModel = { - id: string generalData: { name: string city: string @@ -34,6 +33,6 @@ export type PropertyDetailsModel = { localization: { latitude: string longitude: string - images: File[] + images: FileType[] } } From 8824852d484fed92de742a95cc673c816b66730d Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sun, 21 Apr 2024 14:13:41 -0300 Subject: [PATCH 061/162] refactor(main/factories/components/formFieldFactory): use renderProps function --- .../factories/components/formFieldFactory.tsx | 56 ++++++++++++------- 1 file changed, 37 insertions(+), 19 deletions(-) diff --git a/src/main/factories/components/formFieldFactory.tsx b/src/main/factories/components/formFieldFactory.tsx index 36d08bd0..33f41e04 100644 --- a/src/main/factories/components/formFieldFactory.tsx +++ b/src/main/factories/components/formFieldFactory.tsx @@ -1,44 +1,62 @@ -import { FieldPath, FieldValues } from 'react-hook-form' +import { + type ControllerFieldState, + type ControllerRenderProps, + type FieldPath, + type FieldValues, + type UseFormStateReturn +} from 'react-hook-form' -import { Form, Input, type InputProps } from '@/presentation/components/ui' -import { useHookForm } from '@/presentation/components/ui/form/hooks/useHookForm' +import { Form } from '@/presentation/components/ui' import { Grouper } from '@/presentation/components/utils' +import { useHookForm } from '@/presentation/hooks/useHookForm' -export type InputData = InputProps & { - name: FieldPath +type RenderComponentProps< + TFieldValues extends FieldValues, + TName extends FieldPath = FieldPath +> = { + field: ControllerRenderProps + fieldState: ControllerFieldState + formState: UseFormStateReturn +} + +export type ComponentProps = { + name: FieldPath label?: string + renderComponent: ( + props: RenderComponentProps> + ) => React.ReactNode } -export type InputDataGrouped = { +export type InputDataGrouped = { key: string - group: InputData[] + group: ComponentProps[] } -type FormFieldFactoryProps = { - form: ReturnType> - inputData: InputDataGrouped[] +type FormFieldFactoryProps = { + form: ReturnType> + inputData: InputDataGrouped[] } -export const FormFieldFactory = ({ +export const FormFieldFactory = ({ form, inputData -}: FormFieldFactoryProps) => +}: FormFieldFactoryProps) => inputData.map(({ key, group }) => ( - {group.map(({ name, label, ...props }) => ( + {group.map(({ name, label, renderComponent }) => ( ( + render={({ field, fieldState, formState }) => ( {label ? {label} : null} - + {renderComponent({ + field, + fieldState, + formState + })} From fcfd503f534054b176b5e6f3d8a1f5186b1c8e32 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sun, 21 Apr 2024 16:47:31 -0300 Subject: [PATCH 062/162] feat(main/utils/axios/catchError): add custom message error prop --- src/main/utils/axios/catchError.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/utils/axios/catchError.ts b/src/main/utils/axios/catchError.ts index 22a57b9b..70bde077 100644 --- a/src/main/utils/axios/catchError.ts +++ b/src/main/utils/axios/catchError.ts @@ -1,12 +1,12 @@ import { isAxiosError } from 'axios' import toast from 'react-hot-toast' -export const catchError = async (callback: Function) => { +export const catchError = async (callback: Function, message?: string) => { try { await callback() } catch (error) { if (isAxiosError(error)) { - toast.error(error.message) + toast.error(message ?? error.message) } } } From f3f785bfe3f03191aec9bca1e20a75a06b1dd691 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Mon, 22 Apr 2024 12:41:50 -0300 Subject: [PATCH 063/162] feat(presentation/hooks): add useModalHook --- src/presentation/hooks/useModal.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/presentation/hooks/useModal.ts diff --git a/src/presentation/hooks/useModal.ts b/src/presentation/hooks/useModal.ts new file mode 100644 index 00000000..785eba4b --- /dev/null +++ b/src/presentation/hooks/useModal.ts @@ -0,0 +1,15 @@ +import { useState } from 'react' + +export const useModal = () => { + const [isOpen, setIsOpen] = useState(false) + + const open = () => setIsOpen(true) + const close = () => setIsOpen(false) + + return { + isOpen, + setIsOpen, + open, + close + } +} From b79ee3c18644fe5ae169969a86db5fac86fe37c7 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Mon, 22 Apr 2024 13:13:44 -0300 Subject: [PATCH 064/162] feat(presentation/hooks): remove useHandleChange --- src/presentation/hooks/useHandleChange.ts | 25 ----------------------- 1 file changed, 25 deletions(-) delete mode 100644 src/presentation/hooks/useHandleChange.ts diff --git a/src/presentation/hooks/useHandleChange.ts b/src/presentation/hooks/useHandleChange.ts deleted file mode 100644 index caf51ca8..00000000 --- a/src/presentation/hooks/useHandleChange.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { useCallback } from 'react' - -type HandleChange = (key: K) => (value: FD[K]) => void - -type UseHandleChangeFormData = { - formData: FD - setFormData: (data: FD) => void -} - -export const useHandleChangeFormData = ({ - formData, - setFormData -}: UseHandleChangeFormData) => { - const handleChange = useCallback>( - (key) => (value) => { - setFormData({ - ...formData, - [key]: value - }) - }, - [formData, setFormData] - ) - - return { handleChange } -} From fa022013965b2e947fe1c7e1b640d367821da43f Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Tue, 23 Apr 2024 10:30:02 -0300 Subject: [PATCH 065/162] feat(presentation/hooks): add createUpdateHook builder --- .../usePageContainer/createUpdateHook.ts | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 src/presentation/hooks/usePageContainer/createUpdateHook.ts diff --git a/src/presentation/hooks/usePageContainer/createUpdateHook.ts b/src/presentation/hooks/usePageContainer/createUpdateHook.ts new file mode 100644 index 00000000..d20f7108 --- /dev/null +++ b/src/presentation/hooks/usePageContainer/createUpdateHook.ts @@ -0,0 +1,117 @@ +import { useCallback, useEffect, useState } from 'react' + +import toast from 'react-hot-toast' + +import { catchError } from '@/main/utils' + +import { useHookForm } from '../useHookForm' +import { useModal } from '../useModal' + +import type { + CreateResourceService, + GetOneResourceService, + TextBuilder, + UpdateResourceService +} from './types' +import type { DefaultValues, FieldValues, Resolver } from 'react-hook-form' + +type Services = { + createResource: CreateResourceService + getOneResource: GetOneResourceService + updateResource: UpdateResourceService +} + +export type CreateUpdateHookProps = { + defaultValues: DefaultValues + texts: { + createResource: { + success: TextBuilder + error?: TextBuilder + } + updateResource: { + success: TextBuilder + error?: TextBuilder + } + getOneResource: { + error?: TextBuilder + } + } + schemaResolver?: Resolver +} + +export const createUpdateHook = + ({ + defaultValues, + texts, + schemaResolver + }: CreateUpdateHookProps) => + ({ createResource, getOneResource, updateResource }: Services) => { + const [idResourceToUpdate, setIdResourceToUpdate] = useState('') + + const [loadingValues, setLoadingValues] = useState(false) + + const sheetContainerControl = useModal() + + const form = useHookForm({ defaultValues, schemaResolver }) + const { reset } = form + + const openUpdateSheetContainer = useCallback( + (id: string) => { + setIdResourceToUpdate(id) + sheetContainerControl.open() + }, + [sheetContainerControl] + ) + + const onSubmit = useCallback( + async (data: TValues, event?: React.BaseSyntheticEvent) => { + event?.preventDefault() + + if (idResourceToUpdate) { + await updateResource.execute(data) + toast.success(texts.updateResource.success(data)) + return + } + + await createResource.execute(data) + toast.success(texts.createResource.success(data)) + }, + [createResource, idResourceToUpdate, updateResource] + ) + + const getValues = useCallback(async () => { + try { + setLoadingValues(true) + const values = await getOneResource.execute(idResourceToUpdate) + reset(values) + } finally { + setLoadingValues(false) + } + }, [getOneResource, idResourceToUpdate, reset]) + + const handleSubmit = () => + catchError( + onSubmit, + idResourceToUpdate + ? texts.updateResource.error?.() + : texts.createResource.error?.() + ) + + useEffect(() => { + if (idResourceToUpdate) { + catchError(getValues, texts.getOneResource.error?.()) + return + } + + reset(defaultValues) + }, [reset, getValues, idResourceToUpdate]) + + return { + loadingValues, + sheetContainerControl, + idResourceToUpdate, + form, + handleSubmit, + openUpdateSheetContainer + } + } From 9f25819f9cd9a1e4bbdd5d56411bceb03c6b1f2a Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Tue, 23 Apr 2024 12:10:44 -0300 Subject: [PATCH 066/162] feat(presentation/hooks): add listHook builder --- .../hooks/usePageContainer/listHook.ts | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 src/presentation/hooks/usePageContainer/listHook.ts diff --git a/src/presentation/hooks/usePageContainer/listHook.ts b/src/presentation/hooks/usePageContainer/listHook.ts new file mode 100644 index 00000000..2b059bb1 --- /dev/null +++ b/src/presentation/hooks/usePageContainer/listHook.ts @@ -0,0 +1,82 @@ +import { useState, useCallback, useEffect } from 'react' + +import { catchError } from '@/main/utils' + +import type { GetResourcesService, RecordWithId, TextBuilder } from './types' +import type { SortingState, PaginationState } from '@tanstack/react-table' + +export type ListHookProps = { + texts: { + getResources: { + error?: TextBuilder + } + } +} + +export const listHook = + ({ + texts: { + getResources: { error } + } + }: ListHookProps) => + (getResources: GetResourcesService) => { + const [loading, setLoading] = useState(true) + const [sorting, setSorting] = useState([]) + const [filters, setFilters] = useState>( + {} as Record + ) + const [{ pageIndex, pageSize }, setPage] = useState({ + pageIndex: 0, + pageSize: 0 + }) + + const [resources, setResources] = useState([]) + const [totalPages, setTotalPages] = useState(0) + + const handleGetResources = useCallback(async () => { + try { + setLoading(true) + const [fieldToSort] = sorting ?? {} + + const response = await getResources.execute({ + pagination: { + page: pageIndex + 1 + }, + filters, + ...(fieldToSort && { + sort: { + direction: fieldToSort.desc ? 'desc' : 'asc', + field: fieldToSort.id as keyof TModel + } + }) + }) + + setResources(response.resources) + setTotalPages(response.totalPages) + } finally { + setLoading(false) + } + }, [sorting, getResources, pageIndex, filters]) + + useEffect(() => { + catchError(handleGetResources, error?.()) + }, [handleGetResources]) + + return { + resources, + totalPages, + loading, + setLoading, + filters, + setFilters, + handleGetResources, + sorting: { + currentSorting: sorting, + onSorting: setSorting + }, + pagination: { + currentPage: { pageIndex, pageSize }, + onPageChange: setPage + } + } + } From d5d1985220b452d5a4ebe3108c69c8b8b71ab615 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Tue, 23 Apr 2024 14:23:14 -0300 Subject: [PATCH 067/162] feat(presentation/hooks): add listDeleteHook builder --- .../hooks/usePageContainer/listDeleteHook.ts | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 src/presentation/hooks/usePageContainer/listDeleteHook.ts diff --git a/src/presentation/hooks/usePageContainer/listDeleteHook.ts b/src/presentation/hooks/usePageContainer/listDeleteHook.ts new file mode 100644 index 00000000..146052ae --- /dev/null +++ b/src/presentation/hooks/usePageContainer/listDeleteHook.ts @@ -0,0 +1,84 @@ +import { useCallback, useMemo, useState } from 'react' + +import toast from 'react-hot-toast' + +import { catchError } from '@/main/utils' + +import { type ListHookProps, listHook } from './listHook' + +import type { + DeleteResourceService, + GetResourcesService, + RecordWithId, + TextBuilder +} from './types' + +type Services = { + deleteResource: DeleteResourceService + getResources: GetResourcesService +} + +export type ListDeleteHookProps = { + texts: { + deleteResource: { + success: TextBuilder + error?: TextBuilder + } + } +} & ListHookProps + +export const listDeleteHook = ({ + texts +}: ListDeleteHookProps) => { + const useListHook = listHook({ + texts: { + getResources: texts.getResources + } + }) + + return ({ deleteResource, getResources }: Services) => { + const listHookData = useListHook(getResources) + const { resources, setLoading } = listHookData + + const [resourceIdToExclude, setResourceIdToExclude] = useState('') + const resourceToExclude = useMemo( + () => resources.find(({ id }) => id === resourceIdToExclude), + [resourceIdToExclude, resources] + ) + + const deleteResourceFn = useCallback(async () => { + try { + setLoading(true) + + await deleteResource.execute(resourceIdToExclude) + + setResourceIdToExclude('') + + toast.success(texts.deleteResource.success(resourceToExclude!)) + + await listHookData.handleGetResources() + } finally { + setLoading(false) + } + }, [ + deleteResource, + listHookData, + resourceIdToExclude, + resourceToExclude, + setLoading + ]) + + const handleDeleteResource = () => + catchError( + deleteResourceFn, + texts.deleteResource.error?.(resourceToExclude!) + ) + + return { + ...listHookData, + resourceToExclude, + setResourceIdToExclude, + handleDeleteResource + } + } +} From 8ae9217560e36ad61ea26df34d1e72583f778d3b Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Wed, 24 Apr 2024 09:21:44 -0300 Subject: [PATCH 068/162] feat(presentation/hooks): add pageContainerHook builder --- .../hooks/usePageContainer/index.ts | 68 ++++++++++---- .../hooks/usePageContainer/listTable.ts | 92 ------------------- .../hooks/usePageContainer/types.ts | 29 ++++++ 3 files changed, 81 insertions(+), 108 deletions(-) delete mode 100644 src/presentation/hooks/usePageContainer/listTable.ts create mode 100644 src/presentation/hooks/usePageContainer/types.ts diff --git a/src/presentation/hooks/usePageContainer/index.ts b/src/presentation/hooks/usePageContainer/index.ts index 22ae943d..589ff418 100644 --- a/src/presentation/hooks/usePageContainer/index.ts +++ b/src/presentation/hooks/usePageContainer/index.ts @@ -1,30 +1,66 @@ -import { ListTableParams, UseListTableParams, listTableHook } from './listTable' +import { FieldValues } from 'react-hook-form' -type PageContainerParams> = { - listTableParams: ListTableParams +import { + type CreateUpdateHookProps, + createUpdateHook +} from './createUpdateHook' +import { type ListDeleteHookProps, listDeleteHook } from './listDeleteHook' + +import type { + CreateResourceService, + DeleteResourceService, + GetOneResourceService, + GetResourcesService, + RecordWithId, + UpdateResourceService +} from './types' + +type Services = { + getResources: GetResourcesService + deleteResource: DeleteResourceService + createResource: CreateResourceService + getOneResource: GetOneResourceService + updateResource: UpdateResourceService } -type UsePageContainerParams< - TModel extends Record, - TKeyOfModel extends string = string + +export type PageContainerHookProps< + TModel extends RecordWithId, + TValues extends FieldValues > = { - useListTableParams: UseListTableParams + listDeleteHookProps: ListDeleteHookProps + createUpdateHookProps: CreateUpdateHookProps } export const pageContainerHook = < - TModel extends Record, - TKeyOfModel extends string = string + TModel extends RecordWithId, + TValues extends FieldValues >({ - listTableParams -}: PageContainerParams) => { - const useListTableHook = listTableHook(listTableParams) + listDeleteHookProps, + createUpdateHookProps +}: PageContainerHookProps) => { + const useListDeleteHook = listDeleteHook(listDeleteHookProps) + const useCreateUpdateHook = createUpdateHook(createUpdateHookProps) return ({ - useListTableParams - }: UsePageContainerParams) => { - const listTableHookData = useListTableHook(useListTableParams) + createResource, + deleteResource, + getOneResource, + getResources, + updateResource + }: Services) => { + const listDeleteHookData = useListDeleteHook({ + deleteResource, + getResources + }) + const createUpdateHookData = useCreateUpdateHook({ + createResource, + getOneResource, + updateResource + }) return { - ...listTableHookData + ...listDeleteHookData, + ...createUpdateHookData } } } diff --git a/src/presentation/hooks/usePageContainer/listTable.ts b/src/presentation/hooks/usePageContainer/listTable.ts deleted file mode 100644 index 95323248..00000000 --- a/src/presentation/hooks/usePageContainer/listTable.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { useState, useCallback, useEffect } from 'react' - -import { ColumnDef, SortingState, PaginationState } from '@tanstack/react-table' - -import { IRequestInterface } from '@/domain/shared' -import { IListParams } from '@/domain/shared/listParamsInterface' -import { IListResponse } from '@/domain/shared/listResponseInterface' -import { catchError } from '@/main/utils' - -export type ListTableParams> = { - columns: ColumnDef[] -} - -export type UseListTableParams< - TModel extends Record, - TKeyOfModel extends string = string -> = { - getData: IRequestInterface, IListResponse> -} - -export const listTableHook = - < - TModel extends Record, - TKeyOfModel extends string = string - >({ - columns - }: ListTableParams) => - ({ getData }: UseListTableParams) => { - const [sorting, setSorting] = useState([]) - const [{ pageIndex, pageSize }, setPage] = useState({ - pageIndex: 0, - pageSize: 0 - }) - const [filters, setFilters] = useState>( - {} as Record - ) - - const [loading, setLoading] = useState(false) - const [data, setData] = useState([]) - const [totalPages, setTotalPages] = useState(0) - - const handleGetData = useCallback( - async (params: { filters: Record }) => { - try { - setLoading(true) - - const [fieldToSort] = sorting ?? {} - - const response = await getData.execute({ - pagination: { - page: pageIndex + 1 - }, - filters: params.filters, - ...(fieldToSort && { - sort: { - direction: fieldToSort.desc ? 'desc' : 'asc', - field: fieldToSort.id as TKeyOfModel - } - }) - }) - - setData(response.data) - setTotalPages(response.totalPages) - } finally { - setLoading(false) - } - }, - [sorting, getData, pageIndex] - ) - - useEffect(() => { - catchError(handleGetData) - }, [handleGetData]) - - return { - columns, - data, - totalPages, - loading, - filters, - setFilters, - handleGetData, - sorting: { - currentSorting: sorting, - onSorting: setSorting - }, - pagination: { - currentPage: { pageIndex, pageSize }, - onPageChange: setPage - } - } - } diff --git a/src/presentation/hooks/usePageContainer/types.ts b/src/presentation/hooks/usePageContainer/types.ts new file mode 100644 index 00000000..1ab85312 --- /dev/null +++ b/src/presentation/hooks/usePageContainer/types.ts @@ -0,0 +1,29 @@ +import type { + IListParams, + IListResponse, + IRequestInterface +} from '@/domain/shared' +import type { FieldValues } from 'react-hook-form' + +export type RecordWithId = { + id: string + [key: string]: unknown +} + +export type TextBuilder = (model?: T) => string + +export type GetResourcesService< + TModel extends RecordWithId, + TKeyOfModel extends keyof TModel = keyof TModel +> = IRequestInterface, IListResponse> + +export type DeleteResourceService = IRequestInterface + +export type CreateResourceService = + IRequestInterface + +export type UpdateResourceService = + IRequestInterface + +export type GetOneResourceService = + IRequestInterface From 7ae6dcd2ce0575c47c938a24a148571c8236c223 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Wed, 24 Apr 2024 11:32:11 -0300 Subject: [PATCH 069/162] fix(mocks/modules/property): use path params to get one property --- src/mocks/modules/property/index.ts | 4 +++- src/mocks/modules/property/services/getPropertyService.ts | 8 ++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/mocks/modules/property/index.ts b/src/mocks/modules/property/index.ts index 7fa66193..d526b686 100644 --- a/src/mocks/modules/property/index.ts +++ b/src/mocks/modules/property/index.ts @@ -3,9 +3,11 @@ import { type HttpHandler } from 'msw' import { createPropertyService } from './services/createPropertyService' import { deletePropertyService } from './services/deletePropertyService' import { getPropertiesService } from './services/getPropertiesService' +import { getPropertyService } from './services/getPropertyService' export const propertyHandlers: HttpHandler[] = [ createPropertyService, deletePropertyService, - getPropertiesService + getPropertiesService, + getPropertyService ] diff --git a/src/mocks/modules/property/services/getPropertyService.ts b/src/mocks/modules/property/services/getPropertyService.ts index 90c6de2d..99940017 100644 --- a/src/mocks/modules/property/services/getPropertyService.ts +++ b/src/mocks/modules/property/services/getPropertyService.ts @@ -9,21 +9,21 @@ import { withAuth, withDelay } from '@/mocks/middleware' import propertiesData from '../../../../../database/propertiesData.json' export const getPropertyService = httpWithMiddleware< - PathParams, + PathParams<'id'>, never, PropertyDetailsModel >({ - routePath: '/api/properties', + routePath: '/api/properties/:id', method: 'get', middlewares: [withDelay(), withAuth], - resolver: async ({ params: id }) => { + resolver: async ({ params }) => { if (!propertiesData.length) return HttpResponse.json({} as PropertyDetailsModel, { status: 404 }) const propertyFound = propertiesData.find( - (property) => property.id === String(id) + (property) => property.id === String(params.id) ) if (!propertyFound) From e7118f1811f6c13ca75f4d91083bed9e2246a237 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Thu, 25 Apr 2024 14:54:41 -0300 Subject: [PATCH 070/162] fix(mocks/modules/user/services/loginService): add api prefix --- src/mocks/modules/user/services/loginService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mocks/modules/user/services/loginService.ts b/src/mocks/modules/user/services/loginService.ts index f8ffa33c..1f1d6585 100644 --- a/src/mocks/modules/user/services/loginService.ts +++ b/src/mocks/modules/user/services/loginService.ts @@ -17,7 +17,7 @@ type Response = { } export const loginService = httpWithMiddleware({ - routePath: 'login', + routePath: '/api/login', method: 'post', middlewares: [withDelay()], resolver: async ({ request }) => { From dc06ddc12bf184f451e064b3d7e8add32da80c7a Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Thu, 25 Apr 2024 15:31:22 -0300 Subject: [PATCH 071/162] feat(presentation/containers): add sheetContainer and add columns with actions --- .../pageContainer/pageContainer.tsx | 118 +++++++++++++----- .../containers/pageContainer/types.ts | 10 +- .../containers/sheetContainer/index.ts | 2 + .../sheetContainer/sheetContainer.tsx | 60 +++++++++ .../containers/sheetContainer/types.ts | 24 ++++ 5 files changed, 183 insertions(+), 31 deletions(-) create mode 100644 src/presentation/containers/sheetContainer/index.ts create mode 100644 src/presentation/containers/sheetContainer/sheetContainer.tsx create mode 100644 src/presentation/containers/sheetContainer/types.ts diff --git a/src/presentation/containers/pageContainer/pageContainer.tsx b/src/presentation/containers/pageContainer/pageContainer.tsx index 01e72c36..e11d447e 100644 --- a/src/presentation/containers/pageContainer/pageContainer.tsx +++ b/src/presentation/containers/pageContainer/pageContainer.tsx @@ -1,37 +1,97 @@ -import { RowData } from '@tanstack/react-table' +import { useMemo } from 'react' -import { Button } from '@/presentation/components/ui' +import { MoreHorizontal, Pencil, Trash2 } from 'lucide-react' +import { DropdownMenu } from '@/presentation/components/ui' + +import { SheetContainer } from '../sheetContainer' import { TableContainer } from '../tableContainer' import type { PageContainerProps } from './types' +import type { ColumnDef, RowData } from '@tanstack/react-table' +import type { FieldValues } from 'react-hook-form' -export const PageContainer = ({ +export const PageContainer = < + TData extends RowData & { id: string }, + TValues extends FieldValues +>({ header, - tableContainer -}: PageContainerProps) => ( -
    -
    -
    -
    - - {header.title} - -

    {header.description}

    -
    + tableContainer, + sheetContainer, + openUpdateSheetContainer +}: PageContainerProps) => { + const { columns } = tableContainer.table + + const columnsWithActions = useMemo[]>( + () => [ + ...columns, + { + id: 'row-actions', + header: '', + cell: ({ row }) => { + const { id } = row.original - -
    -
    -
    - -
    -
    -) + return ( + + + + + + openUpdateSheetContainer(id)} + > + Editar + + + + Excluir + + + + ) + } + } + ], + [columns, openUpdateSheetContainer] + ) + + return ( +
    +
    +
    +
    + + {header.title} + +

    {header.description}

    +
    + + +
    +
    +
    + +
    +
    + ) +} diff --git a/src/presentation/containers/pageContainer/types.ts b/src/presentation/containers/pageContainer/types.ts index 8fd14127..f0cbb091 100644 --- a/src/presentation/containers/pageContainer/types.ts +++ b/src/presentation/containers/pageContainer/types.ts @@ -1,11 +1,17 @@ +import type { SheetContainerProps } from '@/presentation/containers/sheetContainer' import type { TableContainerProps } from '@/presentation/containers/tableContainer/' import type { RowData } from '@tanstack/react-table' +import type { FieldValues } from 'react-hook-form' -export type PageContainerProps = { +export type PageContainerProps< + TData extends RowData & { id: string }, + TValues extends FieldValues +> = { header: { title: string description: string - buttonAddText: string } + sheetContainer: SheetContainerProps tableContainer: TableContainerProps + openUpdateSheetContainer: (id: string) => void } diff --git a/src/presentation/containers/sheetContainer/index.ts b/src/presentation/containers/sheetContainer/index.ts new file mode 100644 index 00000000..0d30e817 --- /dev/null +++ b/src/presentation/containers/sheetContainer/index.ts @@ -0,0 +1,2 @@ +export { SheetContainer } from './sheetContainer' +export type { SheetContainerProps } from './types' diff --git a/src/presentation/containers/sheetContainer/sheetContainer.tsx b/src/presentation/containers/sheetContainer/sheetContainer.tsx new file mode 100644 index 00000000..e948a7ef --- /dev/null +++ b/src/presentation/containers/sheetContainer/sheetContainer.tsx @@ -0,0 +1,60 @@ +import { Fragment } from 'react' + +import { FieldValues } from 'react-hook-form' + +import { Button, Form, Loading, Sheet } from '@/presentation/components/ui' + +import { SheetContainerProps } from './types' + +export const SheetContainer = ({ + buttonAddText, + title, + description, + loading, + form, + footerButtons, + open, + onOpenChange, + renderData, + handleSubmit +}: SheetContainerProps) => ( + + + + + + + {title} + {description} + + +
    + {loading ? ( +
    + +
    + ) : ( + renderData() + )} + + + {footerButtons.map(({ key, component, isCloser }) => { + if (isCloser) { + return ( + + {component} + + ) + } + + return {component} + })} + +
    +
    +
    +
    +) diff --git a/src/presentation/containers/sheetContainer/types.ts b/src/presentation/containers/sheetContainer/types.ts new file mode 100644 index 00000000..ad3f5c00 --- /dev/null +++ b/src/presentation/containers/sheetContainer/types.ts @@ -0,0 +1,24 @@ +import type { ReactNode } from 'react' + +import { useHookForm } from '@/presentation/hooks' + +import type { FieldValues } from 'react-hook-form' + +type FooterButton = { + key: string + isCloser: boolean + component: React.ReactNode +} + +export type SheetContainerProps = { + buttonAddText: string + title: string + description: string + loading: boolean + form: ReturnType> + footerButtons: FooterButton[] + open: boolean + onOpenChange: (open: boolean) => void + renderData: () => ReactNode + handleSubmit: () => Promise +} From 1a7feb8ed6893b5218b2fcf1574de84167c3c9e9 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Fri, 26 Apr 2024 08:12:57 -0300 Subject: [PATCH 072/162] feat(presentation/hooks): export hooks --- src/presentation/hooks/index.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/presentation/hooks/index.ts b/src/presentation/hooks/index.ts index ed054904..7355cece 100644 --- a/src/presentation/hooks/index.ts +++ b/src/presentation/hooks/index.ts @@ -1,4 +1,7 @@ export * from './useDebounce' -export * from './useHandleChange' +export * from './useHookForm' export * from './useIdrHistory' +export * from './usePageContainer' +export * from './useModal' export * from './useTimeout' +export * from './useWindowResize' From 371f9ade44c62d4996f682d6e27956ea3d201f1e Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Fri, 26 Apr 2024 12:41:11 -0300 Subject: [PATCH 073/162] feat(presentation/containers/sheetContainer): not show buttons when loading --- .../sheetContainer/sheetContainer.tsx | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/presentation/containers/sheetContainer/sheetContainer.tsx b/src/presentation/containers/sheetContainer/sheetContainer.tsx index e948a7ef..28b25f09 100644 --- a/src/presentation/containers/sheetContainer/sheetContainer.tsx +++ b/src/presentation/containers/sheetContainer/sheetContainer.tsx @@ -40,19 +40,21 @@ export const SheetContainer = ({ renderData() )} - - {footerButtons.map(({ key, component, isCloser }) => { - if (isCloser) { - return ( - - {component} - - ) - } + {!loading && ( + + {footerButtons.map(({ key, component, isCloser }) => { + if (isCloser) { + return ( + + {component} + + ) + } - return {component} - })} - + return {component} + })} + + )} From e90a21b4e3e65da9f68a1e12bfe2731a33d95533 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sat, 27 Apr 2024 22:10:44 -0300 Subject: [PATCH 074/162] fix(mocks/modules/property/services/getPropertyService): return correct data structure --- .../modules/property/services/getPropertyService.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/mocks/modules/property/services/getPropertyService.ts b/src/mocks/modules/property/services/getPropertyService.ts index 99940017..e2b12882 100644 --- a/src/mocks/modules/property/services/getPropertyService.ts +++ b/src/mocks/modules/property/services/getPropertyService.ts @@ -33,16 +33,20 @@ export const getPropertyService = httpWithMiddleware< const images = await Promise.all( Array.from({ length: 3 }, async () => { - const response = await fetch(faker.image.url()) + const url = faker.image.url() + const response = await fetch(url) const blob = await response.blob() - return new File([blob], 'image.png', { type: blob.type }) + return { + name: 'image-1', + preview: url, + file: new File([blob], '', { type: blob.type }) + } }) ) return HttpResponse.json( { - id: propertyFound.id, - generalData: { + general: { name: propertyFound.name, producer: propertyFound.producer, city: propertyFound.city, From eaf34a4ac91e3ab6c11f3f119674ea2a434186d7 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sat, 27 Apr 2024 23:22:06 -0300 Subject: [PATCH 075/162] fix(data/useCases/proeprty/remoteGetProperties): returned body --- src/data/useCases/property/remoteGetProperties.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/useCases/property/remoteGetProperties.ts b/src/data/useCases/property/remoteGetProperties.ts index cb1230c7..bf6f53eb 100644 --- a/src/data/useCases/property/remoteGetProperties.ts +++ b/src/data/useCases/property/remoteGetProperties.ts @@ -24,7 +24,7 @@ export class RemoteGetProperties implements IGetProperties { if (statusCode === HttpStatusCode.ok && !!body) { return { - data: body.properties.map( + resources: body.properties.map( (item: any) => ({ id: item.id, From 9bb75e782901f8a26a9c0e786e5eb10b0310d825 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sat, 27 Apr 2024 23:23:02 -0300 Subject: [PATCH 076/162] refactor(domain/models/propertyModel): keep standard PropertyDetailsModel keys --- src/domain/models/propertyModel.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/domain/models/propertyModel.ts b/src/domain/models/propertyModel.ts index 68070ef8..8194c15a 100644 --- a/src/domain/models/propertyModel.ts +++ b/src/domain/models/propertyModel.ts @@ -11,7 +11,7 @@ export type PropertyModel = { } export type PropertyDetailsModel = { - generalData: { + general: { name: string city: string state: string From ba1bc72e37f86e73bb2acac1b18f9753c163b5f0 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sat, 27 Apr 2024 23:23:31 -0300 Subject: [PATCH 077/162] feat(main/factories/components/formFieldFactory): add key prop --- src/main/factories/components/formFieldFactory.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/factories/components/formFieldFactory.tsx b/src/main/factories/components/formFieldFactory.tsx index 33f41e04..4c31a8e8 100644 --- a/src/main/factories/components/formFieldFactory.tsx +++ b/src/main/factories/components/formFieldFactory.tsx @@ -21,6 +21,7 @@ type RenderComponentProps< export type ComponentProps = { name: FieldPath + key?: string label?: string renderComponent: ( props: RenderComponentProps> @@ -43,9 +44,9 @@ export const FormFieldFactory = ({ }: FormFieldFactoryProps) => inputData.map(({ key, group }) => ( - {group.map(({ name, label, renderComponent }) => ( + {group.map(({ key: groupKey, name, label, renderComponent }) => ( ( From 439b46b86eed8a8cd2e6ec2b64b1d60800ea92df Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sun, 28 Apr 2024 09:21:00 -0300 Subject: [PATCH 078/162] feat(scripts/seed/data): add seed for simulate all users (technical) data --- scripts/seed/data/index.mjs | 1 + scripts/seed/data/users.mjs | 14 ++++++++++++++ 2 files changed, 15 insertions(+) create mode 100644 scripts/seed/data/users.mjs diff --git a/scripts/seed/data/index.mjs b/scripts/seed/data/index.mjs index 80449012..1501d2fb 100644 --- a/scripts/seed/data/index.mjs +++ b/scripts/seed/data/index.mjs @@ -1 +1,2 @@ export * from './properties.mjs' +export * from './users.mjs' diff --git a/scripts/seed/data/users.mjs b/scripts/seed/data/users.mjs new file mode 100644 index 00000000..d4a64a8f --- /dev/null +++ b/scripts/seed/data/users.mjs @@ -0,0 +1,14 @@ +import { faker } from '@faker-js/faker/locale/pt_BR' + +export const allUsersData = Array.from( + { + length: faker.number.int({ + min: 50, + max: 150 + }) + }, + () => ({ + id: faker.string.uuid(), + name: faker.person.fullName() + }) +) From b99ea4f6afb7af093d8387beb67066d43119f2b2 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sun, 28 Apr 2024 09:57:00 -0300 Subject: [PATCH 079/162] feat(domain/models/propertyModel): add property id --- src/domain/models/propertyModel.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/domain/models/propertyModel.ts b/src/domain/models/propertyModel.ts index 8194c15a..722ffb87 100644 --- a/src/domain/models/propertyModel.ts +++ b/src/domain/models/propertyModel.ts @@ -21,6 +21,7 @@ export type PropertyDetailsModel = { responsibleTechnicians: Option[] } collaborators: { + id: string name: string hoursPerDay: string }[] From 23afb5f5c1bad7d3e7da799a911561202433b398 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Mon, 29 Apr 2024 14:11:00 -0300 Subject: [PATCH 080/162] feat(domain/useCases/user): add getAllUser contract --- src/domain/useCases/user/getAllUsers.ts | 3 +++ src/domain/useCases/user/index.ts | 1 + 2 files changed, 4 insertions(+) create mode 100644 src/domain/useCases/user/getAllUsers.ts diff --git a/src/domain/useCases/user/getAllUsers.ts b/src/domain/useCases/user/getAllUsers.ts new file mode 100644 index 00000000..0167fbb4 --- /dev/null +++ b/src/domain/useCases/user/getAllUsers.ts @@ -0,0 +1,3 @@ +import { IRequestInterface, Option } from '@/domain/shared' + +export interface IGetAllUsers extends IRequestInterface {} diff --git a/src/domain/useCases/user/index.ts b/src/domain/useCases/user/index.ts index 2560814b..27ee49db 100644 --- a/src/domain/useCases/user/index.ts +++ b/src/domain/useCases/user/index.ts @@ -1,2 +1,3 @@ export * from './createUser' +export * from './getAllUsers' export * from './loginUser' From cc6d98da666062cd36271b93712dcf9ce1548eb0 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Mon, 29 Apr 2024 15:41:00 -0300 Subject: [PATCH 081/162] feat(data/useCases/user): implement getAllUsers contract --- src/data/useCases/user/index.ts | 1 + src/data/useCases/user/remoteGetAllUsers.ts | 40 +++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 src/data/useCases/user/remoteGetAllUsers.ts diff --git a/src/data/useCases/user/index.ts b/src/data/useCases/user/index.ts index 6a518c9c..5729a59d 100644 --- a/src/data/useCases/user/index.ts +++ b/src/data/useCases/user/index.ts @@ -1,2 +1,3 @@ export * from './remoteCreateUser' +export * from './remoteGetAllUsers' export * from './remoteLoginUser' diff --git a/src/data/useCases/user/remoteGetAllUsers.ts b/src/data/useCases/user/remoteGetAllUsers.ts new file mode 100644 index 00000000..79a77bb4 --- /dev/null +++ b/src/data/useCases/user/remoteGetAllUsers.ts @@ -0,0 +1,40 @@ +import { IHttpClient, HttpStatusCode } from '@/data/protocols/http' +import { + BadRequestError, + ForbiddenError, + NotFoundError, + UnexpectedError +} from '@/domain/errors' +import { IGetAllUsers } from '@/domain/useCases' + +export class RemoteGetAllUsers implements IGetAllUsers { + constructor( + private readonly url: string, + private readonly httpClient: IHttpClient + ) {} + + execute: IGetAllUsers['execute'] = async (search) => { + const { statusCode, body } = await this.httpClient.request({ + url: this.url, + method: 'get', + filters: { + name: search + } + }) + + if (statusCode === HttpStatusCode.ok) + return body.map((item: any) => ({ + value: item.id, + label: item.name + })) + + if (statusCode === HttpStatusCode.forbidden) throw new ForbiddenError() + + if (statusCode === HttpStatusCode.notFound) + throw new NotFoundError('Usuários') + + if (statusCode === HttpStatusCode.badRequest) throw new BadRequestError() + + throw new UnexpectedError() + } +} From af982bfbfe75675c35e7a53608c79532c1193906 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Tue, 30 Apr 2024 10:47:00 -0300 Subject: [PATCH 082/162] refactor(domain/shared/option): change property from id to label --- src/domain/shared/option.types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/domain/shared/option.types.ts b/src/domain/shared/option.types.ts index 2981bf96..23143109 100644 --- a/src/domain/shared/option.types.ts +++ b/src/domain/shared/option.types.ts @@ -1,4 +1,4 @@ export type Option = { - id: string + label: string value: TValue } From 4f42bafdbdf2edf16162ff90884954fddba19808 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Tue, 30 Apr 2024 14:15:00 -0300 Subject: [PATCH 083/162] feat(domain/shared/listParams): add Sort and Filters type --- src/domain/shared/listParams.interface.ts | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/domain/shared/listParams.interface.ts b/src/domain/shared/listParams.interface.ts index 1bd22176..24a0dcce 100644 --- a/src/domain/shared/listParams.interface.ts +++ b/src/domain/shared/listParams.interface.ts @@ -2,11 +2,18 @@ import { SortDirection } from '@tanstack/react-table' import { HttpRequest } from '@/data/protocols/http' +export type Filters = Record< + TKeyOfModel, + string +> + +export type Sort = { + direction: SortDirection + field: TKeyOfModel +} + export interface IListParams { - filters?: Record - sort?: { - direction: SortDirection - field: TKeyOfModel - } + filters?: Filters + sort?: Sort pagination: HttpRequest['pagination'] } From 35fbd007f2ce94baa7e4140920ac2c21e60c0251 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Wed, 1 May 2024 17:50:00 -0300 Subject: [PATCH 084/162] fix(mocks/modules/property/services/getPropertyService): return types value --- src/mocks/modules/property/services/getPropertyService.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/mocks/modules/property/services/getPropertyService.ts b/src/mocks/modules/property/services/getPropertyService.ts index e2b12882..b5571225 100644 --- a/src/mocks/modules/property/services/getPropertyService.ts +++ b/src/mocks/modules/property/services/getPropertyService.ts @@ -57,10 +57,14 @@ export const getPropertyService = httpWithMiddleware< { length: 3 }, - () => ({ id: faker.string.uuid(), value: faker.person.fullName() }) + () => ({ + value: faker.string.uuid(), + label: faker.person.fullName() + }) ) }, collaborators: Array.from({ length: 5 }, () => ({ + id: faker.string.uuid(), name: faker.person.fullName(), hoursPerDay: String(faker.number.int({ min: 1, max: 8 })) })), From 228ac37b8476f228bae793e0300971fe7283c4e4 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Wed, 1 May 2024 19:27:00 -0300 Subject: [PATCH 085/162] feat(mocks/modules/user/services/getAllUsersService): add method to return all users --- src/mocks/modules/user/index.ts | 3 +- .../user/services/getAllUsersService.ts | 36 +++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 src/mocks/modules/user/services/getAllUsersService.ts diff --git a/src/mocks/modules/user/index.ts b/src/mocks/modules/user/index.ts index f271149f..eb1f37c4 100644 --- a/src/mocks/modules/user/index.ts +++ b/src/mocks/modules/user/index.ts @@ -1,5 +1,6 @@ import { type HttpHandler } from 'msw' +import { getAllUsersService } from './services/getAllUsersService' import { loginService } from './services/loginService' -export const userHandlers: HttpHandler[] = [loginService] +export const userHandlers: HttpHandler[] = [loginService, getAllUsersService] diff --git a/src/mocks/modules/user/services/getAllUsersService.ts b/src/mocks/modules/user/services/getAllUsersService.ts new file mode 100644 index 00000000..04699440 --- /dev/null +++ b/src/mocks/modules/user/services/getAllUsersService.ts @@ -0,0 +1,36 @@ +import { HttpResponse } from 'msw' + +import { HttpStatusCode } from '@/data/protocols/http' +import { httpWithMiddleware } from '@/mocks/lib' +import { withAuth, withDelay } from '@/mocks/middleware' +import { filterData, normalizeQueryFilters } from '@/mocks/shared' + +import allUsersData from '../../../../../database/allUsersData.json' + +type Response = { + id: string + name: string +} + +export const getAllUsersService = httpWithMiddleware({ + routePath: '/api/users/all', + method: 'get', + middlewares: [withDelay(), withAuth], + resolver: async ({ request }) => { + if (!allUsersData.length) { + return HttpResponse.json([], { + status: 404 + }) + } + + const url = new URL(request.url) + const { filters } = normalizeQueryFilters(url) + + if (filters) { + const filteredData = filterData(filters, allUsersData) + return HttpResponse.json(filteredData, { status: HttpStatusCode.ok }) + } + + return HttpResponse.json(allUsersData, { status: HttpStatusCode.ok }) + } +}) From b8ea9ebb63b5ae8646654e985900d23ee0e90c57 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Wed, 1 May 2024 20:00:00 -0300 Subject: [PATCH 086/162] feat(mocks/shared/filterData): validate if key is valid --- src/mocks/shared/filterData.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/mocks/shared/filterData.ts b/src/mocks/shared/filterData.ts index 3be6f09e..ba94a28a 100644 --- a/src/mocks/shared/filterData.ts +++ b/src/mocks/shared/filterData.ts @@ -6,6 +6,11 @@ export const filterData = >( return data.filter((item) => filterEntries.every(([key, value]) => { + const keyIn = key in item + if (!keyIn) { + return false + } + const itemValue = item[key as keyof TData] return itemValue.toLowerCase().includes(value.toLowerCase()) }) From 1d063fa232b84af370d79d7252c8578912061862 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Thu, 2 May 2024 08:44:00 -0300 Subject: [PATCH 087/162] refactor(main/factories/components/formFieldFactory): formFieldFactory to render group of components --- .../factories/components/formFieldFactory.tsx | 44 ++++++++++--------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/src/main/factories/components/formFieldFactory.tsx b/src/main/factories/components/formFieldFactory.tsx index 4c31a8e8..4faeae17 100644 --- a/src/main/factories/components/formFieldFactory.tsx +++ b/src/main/factories/components/formFieldFactory.tsx @@ -30,7 +30,7 @@ export type ComponentProps = { export type InputDataGrouped = { key: string - group: ComponentProps[] + group: ComponentProps[] | (() => React.ReactNode) } type FormFieldFactoryProps = { @@ -44,25 +44,27 @@ export const FormFieldFactory = ({ }: FormFieldFactoryProps) => inputData.map(({ key, group }) => ( - {group.map(({ key: groupKey, name, label, renderComponent }) => ( - ( - - {label ? {label} : null} - - {renderComponent({ - field, - fieldState, - formState - })} - - - - )} - /> - ))} + {typeof group === 'function' + ? group() + : group.map(({ key: groupKey, name, label, renderComponent }) => ( + ( + + {label ? {label} : null} + + {renderComponent({ + field, + fieldState, + formState + })} + + + + )} + /> + ))} )) From 32f95033dac4b41849659eb37ece49f56b82b9aa Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Thu, 2 May 2024 14:31:00 -0300 Subject: [PATCH 088/162] refactor(main/factories/useCases/cep): import domain module as types --- src/main/factories/useCases/cep/remoteGetCepFactory.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/factories/useCases/cep/remoteGetCepFactory.ts b/src/main/factories/useCases/cep/remoteGetCepFactory.ts index 108e59c9..b4aa428f 100644 --- a/src/main/factories/useCases/cep/remoteGetCepFactory.ts +++ b/src/main/factories/useCases/cep/remoteGetCepFactory.ts @@ -1,7 +1,8 @@ import { RemoteGetCep } from '@/data/useCases' -import { CepModel } from '@/domain/models' -import { IGetCep } from '@/domain/useCases' import { makeBrasilApiHttpClient } from '@/main/factories/http' +import type { CepModel } from '@/domain/models' +import type { IGetCep } from '@/domain/useCases' + export const makeRemoteGetCep = (): IGetCep => new RemoteGetCep('/cep/v1', makeBrasilApiHttpClient()) From 715d6ae102726006ff23f4d25985bc06d0d14283 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Thu, 2 May 2024 14:50:00 -0300 Subject: [PATCH 089/162] refactor(main/factories/useCases/property): import domain module as types --- .../useCases/property/remoteCreatePropertyFactory.ts | 3 ++- .../useCases/property/remoteDeletePropertyFactory.ts | 3 ++- .../useCases/property/remoteGetPropertiesFactory.ts | 5 +++-- .../factories/useCases/property/remoteGetPropertyFactory.ts | 5 +++-- .../useCases/property/remoteUpdatePropertyFactory.ts | 3 ++- 5 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/main/factories/useCases/property/remoteCreatePropertyFactory.ts b/src/main/factories/useCases/property/remoteCreatePropertyFactory.ts index 0711b41b..2e95f395 100644 --- a/src/main/factories/useCases/property/remoteCreatePropertyFactory.ts +++ b/src/main/factories/useCases/property/remoteCreatePropertyFactory.ts @@ -1,6 +1,7 @@ import { RemoteCreateProperty } from '@/data/useCases/property' -import { ICreateProperty } from '@/domain/useCases' import { makeApiHttpClient } from '@/main/factories/http' +import type { ICreateProperty } from '@/domain/useCases' + export const makeRemoteCreateProperty = (): ICreateProperty => new RemoteCreateProperty('properties', makeApiHttpClient()) diff --git a/src/main/factories/useCases/property/remoteDeletePropertyFactory.ts b/src/main/factories/useCases/property/remoteDeletePropertyFactory.ts index e966aa45..c3cd5341 100644 --- a/src/main/factories/useCases/property/remoteDeletePropertyFactory.ts +++ b/src/main/factories/useCases/property/remoteDeletePropertyFactory.ts @@ -1,6 +1,7 @@ import { RemoteDeleteProperty } from '@/data/useCases/property' -import { IDeleteProperty } from '@/domain/useCases' import { makeApiHttpClient } from '@/main/factories/http' +import type { IDeleteProperty } from '@/domain/useCases' + export const makeRemoteDeleteProperty = (): IDeleteProperty => new RemoteDeleteProperty('properties', makeApiHttpClient()) diff --git a/src/main/factories/useCases/property/remoteGetPropertiesFactory.ts b/src/main/factories/useCases/property/remoteGetPropertiesFactory.ts index 3c588116..bf8b1536 100644 --- a/src/main/factories/useCases/property/remoteGetPropertiesFactory.ts +++ b/src/main/factories/useCases/property/remoteGetPropertiesFactory.ts @@ -1,7 +1,8 @@ import { RemoteGetProperties } from '@/data/useCases' -import { PropertyModel } from '@/domain/models' -import { IGetProperties } from '@/domain/useCases' import { makeApiHttpClient } from '@/main/factories/http' +import type { PropertyModel } from '@/domain/models' +import type { IGetProperties } from '@/domain/useCases' + export const makeRemoteGetProperties = (): IGetProperties => new RemoteGetProperties('properties', makeApiHttpClient()) diff --git a/src/main/factories/useCases/property/remoteGetPropertyFactory.ts b/src/main/factories/useCases/property/remoteGetPropertyFactory.ts index 8e46465d..32d8f17c 100644 --- a/src/main/factories/useCases/property/remoteGetPropertyFactory.ts +++ b/src/main/factories/useCases/property/remoteGetPropertyFactory.ts @@ -1,7 +1,8 @@ import { RemoteGetProperty } from '@/data/useCases' -import { PropertyDetailsModel } from '@/domain/models' -import { IGetProperty } from '@/domain/useCases' import { makeApiHttpClient } from '@/main/factories/http' +import type { PropertyDetailsModel } from '@/domain/models' +import type { IGetProperty } from '@/domain/useCases' + export const makeRemoteGetProperty = (): IGetProperty => new RemoteGetProperty('properties', makeApiHttpClient()) diff --git a/src/main/factories/useCases/property/remoteUpdatePropertyFactory.ts b/src/main/factories/useCases/property/remoteUpdatePropertyFactory.ts index 85d63951..e9c3c719 100644 --- a/src/main/factories/useCases/property/remoteUpdatePropertyFactory.ts +++ b/src/main/factories/useCases/property/remoteUpdatePropertyFactory.ts @@ -1,6 +1,7 @@ import { RemoteUpdateProperty } from '@/data/useCases/property' -import { IUpdateProperty } from '@/domain/useCases' import { makeApiHttpClient } from '@/main/factories/http' +import type { IUpdateProperty } from '@/domain/useCases' + export const makeRemoteUpdateProperty = (): IUpdateProperty => new RemoteUpdateProperty('properties', makeApiHttpClient()) From 9cc906c04a847817a9ed8c5ba0b5a336d44ba567 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Thu, 2 May 2024 16:31:00 -0300 Subject: [PATCH 090/162] refactor(main/factories/useCases/user): import domain module as types --- src/main/factories/useCases/user/remoteCreateUserFactory.ts | 3 ++- src/main/factories/useCases/user/remoteLoginFactory.ts | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/factories/useCases/user/remoteCreateUserFactory.ts b/src/main/factories/useCases/user/remoteCreateUserFactory.ts index 0afa3129..337d5a3f 100644 --- a/src/main/factories/useCases/user/remoteCreateUserFactory.ts +++ b/src/main/factories/useCases/user/remoteCreateUserFactory.ts @@ -1,6 +1,7 @@ import { RemoteCreateUser } from '@/data/useCases' -import { ICreateUser } from '@/domain/useCases' import { makeApiHttpClient } from '@/main/factories/http' +import type { ICreateUser } from '@/domain/useCases' + export const makeRemoteCreateUser = (): ICreateUser => new RemoteCreateUser('users', makeApiHttpClient()) diff --git a/src/main/factories/useCases/user/remoteLoginFactory.ts b/src/main/factories/useCases/user/remoteLoginFactory.ts index 0ea0dfde..c11705ae 100644 --- a/src/main/factories/useCases/user/remoteLoginFactory.ts +++ b/src/main/factories/useCases/user/remoteLoginFactory.ts @@ -1,7 +1,8 @@ import { RemoteLoginUser } from '@/data/useCases/' -import { UserModel } from '@/domain/models' -import { ILoginUser } from '@/domain/useCases' import { makeApiHttpClient } from '@/main/factories/http' +import type { UserModel } from '@/domain/models' +import type { ILoginUser } from '@/domain/useCases' + export const makeRemoteLoginUser = (): ILoginUser => new RemoteLoginUser('login', makeApiHttpClient()) From f12d399c9c220492d59f3c5c77491113ab1459cf Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Fri, 3 May 2024 09:10:00 -0300 Subject: [PATCH 091/162] feat(main/factories/useCases/user/remoteGetAllUsersFactory): add factory to get all users --- src/main/factories/useCases/user/index.ts | 1 + .../factories/useCases/user/remoteGetAllUsersFactory.ts | 8 ++++++++ 2 files changed, 9 insertions(+) create mode 100644 src/main/factories/useCases/user/remoteGetAllUsersFactory.ts diff --git a/src/main/factories/useCases/user/index.ts b/src/main/factories/useCases/user/index.ts index 16b14ab4..f1d21f6a 100644 --- a/src/main/factories/useCases/user/index.ts +++ b/src/main/factories/useCases/user/index.ts @@ -1,2 +1,3 @@ export * from './remoteCreateUserFactory' +export * from './remoteGetAllUsersFactory' export * from './remoteLoginFactory' diff --git a/src/main/factories/useCases/user/remoteGetAllUsersFactory.ts b/src/main/factories/useCases/user/remoteGetAllUsersFactory.ts new file mode 100644 index 00000000..00279cb7 --- /dev/null +++ b/src/main/factories/useCases/user/remoteGetAllUsersFactory.ts @@ -0,0 +1,8 @@ +import { RemoteGetAllUsers } from '@/data/useCases' +import { makeApiHttpClient } from '@/main/factories/http' + +import type { Option } from '@/domain/shared' +import type { IGetAllUsers } from '@/domain/useCases' + +export const makeRemoteGetAllUsers = (): IGetAllUsers => + new RemoteGetAllUsers('users/all', makeApiHttpClient()) From f2ee673ed52fd12c3aa4cfa47701430d3022b72e Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Fri, 3 May 2024 11:50:00 -0300 Subject: [PATCH 092/162] feat(presentation/components/ui/combobox): add combobox component --- .../components/ui/combobox/combobox.tsx | 97 +++++++++++++++++++ .../components/ui/combobox/index.stories.tsx | 32 ++++++ .../components/ui/combobox/index.ts | 2 + .../components/ui/combobox/types.ts | 13 +++ 4 files changed, 144 insertions(+) create mode 100644 src/presentation/components/ui/combobox/combobox.tsx create mode 100644 src/presentation/components/ui/combobox/index.stories.tsx create mode 100644 src/presentation/components/ui/combobox/index.ts create mode 100644 src/presentation/components/ui/combobox/types.ts diff --git a/src/presentation/components/ui/combobox/combobox.tsx b/src/presentation/components/ui/combobox/combobox.tsx new file mode 100644 index 00000000..a0d3da47 --- /dev/null +++ b/src/presentation/components/ui/combobox/combobox.tsx @@ -0,0 +1,97 @@ +import { useState } from 'react' + +import { Check, ChevronsUpDown } from 'lucide-react' + +import { cn } from '@/main//utils/tailwind' +import { Button } from '@/presentation/components/ui/button' +import { Command } from '@/presentation/components/ui/command' +import { Loading } from '@/presentation/components/ui/loading' +import { Popover } from '@/presentation/components/ui/popover' + +import type { ComboboxProps } from './types' + +export const Combobox: React.FC = ({ + search, + handleSearch, + items, + selected, + handleSelect, + placeholder, + searchPlaceholder, + emptyMessage, + loading = false +}) => { + const [open, setOpen] = useState(false) + + return ( + + + + + + + handleSearch(value)} + placeholder={searchPlaceholder ?? 'Buscar'} + /> + + {!loading && !items.length && ( + + {emptyMessage ?? 'Nenhum registro encontrado'} + + )} + + {loading ? ( + + + + ) : ( + + {items.map((item) => ( + { + const selectedItem = items.find( + (it) => it.value === currentValue + ) ?? { label: '', value: '' } + + handleSelect(selectedItem) + setOpen(false) + }} + > + + {item.label} + + ))} + + )} + + + + + ) +} + +Combobox.displayName = 'Combobox' diff --git a/src/presentation/components/ui/combobox/index.stories.tsx b/src/presentation/components/ui/combobox/index.stories.tsx new file mode 100644 index 00000000..30bcd7a5 --- /dev/null +++ b/src/presentation/components/ui/combobox/index.stories.tsx @@ -0,0 +1,32 @@ +import { Meta, StoryFn } from '@storybook/react/' + +import { Combobox, type ComboboxProps } from '.' + +export default { + title: 'Components/UI/Combobox' +} as Meta + +const Template: StoryFn = (args) => + +export const Default = Template.bind({}) +Default.args = { + handleSelect: (value) => { + // eslint-disable-next-line no-alert + alert(`value ${value}`) + }, + + items: [ + { + value: '1', + label: 'Um' + }, + { + value: '2', + label: 'Dois' + }, + { + value: '3', + label: 'Três' + } + ] +} diff --git a/src/presentation/components/ui/combobox/index.ts b/src/presentation/components/ui/combobox/index.ts new file mode 100644 index 00000000..4ace1119 --- /dev/null +++ b/src/presentation/components/ui/combobox/index.ts @@ -0,0 +1,2 @@ +export { Combobox } from './combobox' +export type { ComboboxProps } from './types' diff --git a/src/presentation/components/ui/combobox/types.ts b/src/presentation/components/ui/combobox/types.ts new file mode 100644 index 00000000..1d8a8b3e --- /dev/null +++ b/src/presentation/components/ui/combobox/types.ts @@ -0,0 +1,13 @@ +import { Option } from '@/domain/shared' + +export type ComboboxProps = { + search: string + handleSearch: (search: string) => void + items: Option[] + selected: Option + handleSelect: (item: Option) => void + placeholder?: string + searchPlaceholder?: string + emptyMessage?: string + loading?: boolean +} From 5d2270d2ecdf6d5ae488c900ecacc0bd3685e00a Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Fri, 3 May 2024 16:28:00 -0300 Subject: [PATCH 093/162] feat(presentation/components/ui/command): add loading compound component and fix import of command/dialog --- src/presentation/components/ui/command/dialog.tsx | 4 ++-- src/presentation/components/ui/command/index.ts | 4 +++- src/presentation/components/ui/command/item.tsx | 2 +- src/presentation/components/ui/command/loading.tsx | 12 ++++++++++++ 4 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 src/presentation/components/ui/command/loading.tsx diff --git a/src/presentation/components/ui/command/dialog.tsx b/src/presentation/components/ui/command/dialog.tsx index ef1617cc..d2cee9d3 100644 --- a/src/presentation/components/ui/command/dialog.tsx +++ b/src/presentation/components/ui/command/dialog.tsx @@ -1,9 +1,9 @@ import React from 'react' -import { Command } from 'cmdk' - import { Dialog as AppDialog } from '../dialog' +import { Root as Command } from './root' + import type { DialogProps } from '@radix-ui/react-dialog' export const Dialog: React.FC = ({ children, ...props }) => ( diff --git a/src/presentation/components/ui/command/index.ts b/src/presentation/components/ui/command/index.ts index 4d406058..d06997f5 100644 --- a/src/presentation/components/ui/command/index.ts +++ b/src/presentation/components/ui/command/index.ts @@ -4,6 +4,7 @@ import { Group } from './group' import { Input } from './input' import { Item } from './item' import { List } from './list' +import { Loading } from './loading' import { Root } from './root' import { Separator } from './separator' import { Shortcut } from './shortcut' @@ -17,5 +18,6 @@ export const Command = { Group, Item, Shortcut, - Separator + Separator, + Loading } diff --git a/src/presentation/components/ui/command/item.tsx b/src/presentation/components/ui/command/item.tsx index 073d6d77..2d17b769 100644 --- a/src/presentation/components/ui/command/item.tsx +++ b/src/presentation/components/ui/command/item.tsx @@ -11,7 +11,7 @@ export const Item = forwardRef< , + React.ComponentPropsWithoutRef +>((props, ref) => ( + +)) + +Loading.displayName = CommandPrimitive.Loading.displayName From 5673c814ff7b2f9877f77b05a02a4e54ce375ae3 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sat, 4 May 2024 12:08:00 -0300 Subject: [PATCH 094/162] refactor(presentation/pages/signUp): satisfy the types useInputData --- src/presentation/pages/signUp/useInputData.ts | 157 ------------ .../pages/signUp/useInputData.tsx | 230 ++++++++++++++++++ 2 files changed, 230 insertions(+), 157 deletions(-) delete mode 100644 src/presentation/pages/signUp/useInputData.ts create mode 100644 src/presentation/pages/signUp/useInputData.tsx diff --git a/src/presentation/pages/signUp/useInputData.ts b/src/presentation/pages/signUp/useInputData.ts deleted file mode 100644 index d4ff664c..00000000 --- a/src/presentation/pages/signUp/useInputData.ts +++ /dev/null @@ -1,157 +0,0 @@ -import { useState } from 'react' - -import { Eye, EyeOff, Mail } from 'lucide-react' - -import { CreateUserModel } from '@/domain/models' -import { InputDataGrouped } from '@/main/factories/components' -import { cepMask, cpfMask, onlyNumbersMask, phoneMask } from '@/masker' - -import { UseInputDataProps } from './types' - -export const useInputData = ({ - cepLoading, - cepDebounceCallback, - handleOnClearCepDebounce -}: UseInputDataProps) => { - const [viewPassword, setViewPassword] = useState(false) - const [viewConfirmPassword, setViewConfirmPassword] = useState(false) - - const inputDataFirstStep: InputDataGrouped[] = [ - { - key: 'name-email-group', - group: [ - { - name: 'name', - label: 'Nome *', - placeholder: 'Digite seu nome' - }, - { - name: 'email', - label: 'Email *', - placeholder: 'Digite seu email', - iconsStart: [ - { - key: Mail.displayName ?? 'Mail', - icon: Mail - } - ] - } - ] - }, - { - key: 'password-group', - group: [ - { - name: 'password', - label: 'Senha *', - placeholder: 'Digite uma senha forte', - type: viewPassword ? 'text' : 'password', - iconsEnd: [ - { - key: viewPassword - ? EyeOff.displayName ?? 'EyeOff' - : Eye.displayName ?? 'Eye', - icon: viewPassword ? EyeOff : Eye, - onClick: () => setViewPassword((oldValue) => !oldValue) - } - ] - }, - { - name: 'confirmPassword', - label: 'Confirmar Senha *', - placeholder: 'Repita a senha', - type: viewConfirmPassword ? 'text' : 'password', - iconsEnd: [ - { - key: viewConfirmPassword - ? EyeOff.displayName ?? 'EyeOff' - : Eye.displayName ?? 'Eye', - icon: viewConfirmPassword ? EyeOff : Eye, - onClick: () => setViewConfirmPassword((oldValue) => !oldValue) - } - ] - } - ] - }, - { - key: 'cpf-phone-group', - group: [ - { - name: 'cpf', - label: 'CPF *', - placeholder: 'Digite seu CPF', - mask: cpfMask - }, - { - name: 'phone', - label: 'Celular *', - placeholder: 'Digite o número do seu celular', - mask: phoneMask - } - ] - }, - { - key: 'professionalRegister-graduationYear-group', - group: [ - { - name: 'professionalRegister', - label: 'Registro Profissional *', - placeholder: 'Digite seu registro profissional', - mask: onlyNumbersMask - }, - { - name: 'graduationYear', - label: 'Ano de Graduação *', - placeholder: 'Digite o ano de graduação', - mask: onlyNumbersMask - } - ] - } - ] - - const inputDataSecondStep: InputDataGrouped[] = [ - { - key: 'cep-street-group', - group: [ - { - name: 'cep', - label: 'CEP *', - placeholder: 'Digite seu CEP', - mask: cepMask, - debounce: 500, - debounceCallback: cepDebounceCallback, - handleOnClearDebounce: handleOnClearCepDebounce - }, - { - name: 'street', - label: 'Rua *', - placeholder: 'Digite seu endereço', - disabled: cepLoading, - loading: cepLoading - } - ] - }, - { - key: 'city-number-group', - group: [ - { - name: 'city', - label: 'Cidade *', - placeholder: 'Digite sua cidade', - disabled: cepLoading, - loading: cepLoading - }, - { - name: 'houseNumber', - label: 'Número da casa', - placeholder: 'Digite o número da casa' - } - ] - } - ] - - return { - inputDataFirstStep, - inputDataSecondStep - } -} diff --git a/src/presentation/pages/signUp/useInputData.tsx b/src/presentation/pages/signUp/useInputData.tsx new file mode 100644 index 00000000..a235c8b5 --- /dev/null +++ b/src/presentation/pages/signUp/useInputData.tsx @@ -0,0 +1,230 @@ +import { useState } from 'react' + +import { Eye, EyeOff, Mail } from 'lucide-react' + +import { CreateUserModel } from '@/domain/models' +import { InputDataGrouped } from '@/main/factories/components' +import { cepMask, cpfMask, onlyNumbersMask, phoneMask } from '@/masker' +import { Input } from '@/presentation/components/ui' + +import { UseInputDataProps } from './types' + +export const useInputData = ({ + cepLoading, + cepDebounceCallback, + handleOnClearCepDebounce +}: UseInputDataProps) => { + const [viewPassword, setViewPassword] = useState(false) + const [viewConfirmPassword, setViewConfirmPassword] = useState(false) + + const inputDataFirstStep: InputDataGrouped[] = [ + { + key: 'name-email-group', + group: [ + { + name: 'name', + label: 'Nome *', + renderComponent: ({ field }) => ( + + ) + }, + { + name: 'email', + label: 'Email *', + renderComponent: ({ field }) => ( + + ) + } + ] + }, + { + key: 'password-group', + group: [ + { + name: 'password', + label: 'Senha *', + renderComponent: ({ field }) => ( + setViewPassword((oldValue) => !oldValue) + } + ]} + /> + ) + }, + { + name: 'confirmPassword', + label: 'Confirmar Senha *', + renderComponent: ({ field }) => ( + setViewConfirmPassword((oldValue) => !oldValue) + } + ]} + /> + ) + } + ] + }, + { + key: 'cpf-phone-group', + group: [ + { + name: 'cpf', + label: 'CPF *', + renderComponent: ({ field }) => ( + + ) + }, + { + name: 'phone', + label: 'Celular *', + renderComponent: ({ field }) => ( + + ) + } + ] + }, + { + key: 'professionalRegister-graduationYear-group', + group: [ + { + name: 'professionalRegister', + label: 'Registro Profissional *', + renderComponent: ({ field }) => ( + + ) + }, + { + name: 'graduationYear', + label: 'Ano de Graduação *', + renderComponent: ({ field }) => ( + + ) + } + ] + } + ] + + const inputDataSecondStep: InputDataGrouped[] = [ + { + key: 'cep-street-group', + group: [ + { + name: 'cep', + label: 'CEP *', + renderComponent: ({ field }) => ( + + ) + }, + { + name: 'street', + label: 'Rua *', + renderComponent: ({ field }) => ( + + ) + } + ] + }, + { + key: 'city-number-group', + group: [ + { + name: 'city', + label: 'Cidade *', + renderComponent: ({ field }) => ( + + ) + }, + { + name: 'houseNumber', + label: 'Número da casa', + renderComponent: ({ field }) => ( + + ) + } + ] + } + ] + + return { + inputDataFirstStep, + inputDataSecondStep + } +} From 73d961420575b6977465ca126bbd835780cce61e Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sat, 4 May 2024 13:43:00 -0300 Subject: [PATCH 095/162] refactor(presentation/pages/login): satisfy the types useInputData --- src/presentation/pages/login/useInputData.ts | 59 --------------- src/presentation/pages/login/useInputData.tsx | 74 +++++++++++++++++++ 2 files changed, 74 insertions(+), 59 deletions(-) delete mode 100644 src/presentation/pages/login/useInputData.ts create mode 100644 src/presentation/pages/login/useInputData.tsx diff --git a/src/presentation/pages/login/useInputData.ts b/src/presentation/pages/login/useInputData.ts deleted file mode 100644 index 114c2c44..00000000 --- a/src/presentation/pages/login/useInputData.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { useState } from 'react' - -import { Mail, Eye, EyeOff, LockKeyhole } from 'lucide-react' - -import { LoginUserParams } from '@/domain/useCases' -import { InputDataGrouped } from '@/main/factories/components' - -export const useInputData = () => { - const [viewPassword, setViewPassword] = useState(false) - - const inputData: InputDataGrouped[] = [ - { - key: 'email-group', - group: [ - { - name: 'email', - label: 'Email *', - placeholder: 'Email', - iconsStart: [ - { - key: Mail.displayName ?? 'Mail', - icon: Mail - } - ] - } - ] - }, - { - key: 'password-group', - group: [ - { - name: 'password', - label: 'Senha *', - placeholder: 'Senha', - type: viewPassword ? 'text' : 'password', - iconsStart: [ - { - key: LockKeyhole.displayName ?? 'LockKeyhole', - icon: LockKeyhole - } - ], - iconsEnd: [ - { - key: viewPassword - ? EyeOff.displayName ?? 'EyeOff' - : Eye.displayName ?? 'Eye', - icon: viewPassword ? EyeOff : Eye, - onClick: () => setViewPassword((oldValue) => !oldValue) - } - ] - } - ] - } - ] - - return { - inputData - } -} diff --git a/src/presentation/pages/login/useInputData.tsx b/src/presentation/pages/login/useInputData.tsx new file mode 100644 index 00000000..e275a7c4 --- /dev/null +++ b/src/presentation/pages/login/useInputData.tsx @@ -0,0 +1,74 @@ +import { useState } from 'react' + +import { Mail, Eye, EyeOff, LockKeyhole } from 'lucide-react' + +import { LoginUserParams } from '@/domain/useCases' +import { InputDataGrouped } from '@/main/factories/components' +import { Input } from '@/presentation/components/ui' + +export const useInputData = () => { + const [viewPassword, setViewPassword] = useState(false) + + const inputData: InputDataGrouped[] = [ + { + key: 'email-group', + group: [ + { + name: 'email', + label: 'Email *', + renderComponent: ({ field, fieldState }) => ( + + ) + } + ] + }, + { + key: 'password-group', + group: [ + { + name: 'password', + label: 'Senha *', + renderComponent: ({ field, fieldState }) => ( + setViewPassword((oldValue) => !oldValue) + } + ]} + isError={!!fieldState.error?.message} + /> + ) + } + ] + } + ] + + return { + inputData + } +} From 4252ae5eaeef8ca9d688d5e3522600fd7b67984b Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Sun, 5 May 2024 16:43:00 -0300 Subject: [PATCH 096/162] feat(presentation/hooks/useModal): add callback function to call when onClose and onOpen --- src/presentation/hooks/useModal.ts | 30 ++++++++++++++++--- .../usePageContainer/createUpdateHook.ts | 6 +++- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/src/presentation/hooks/useModal.ts b/src/presentation/hooks/useModal.ts index 785eba4b..154b887d 100644 --- a/src/presentation/hooks/useModal.ts +++ b/src/presentation/hooks/useModal.ts @@ -1,10 +1,32 @@ -import { useState } from 'react' +import { useEffect, useState } from 'react' -export const useModal = () => { +export const useModal = ({ + onOpenCallback, + onCloseCallback +}: { + onOpenCallback?: () => void + onCloseCallback?: () => void +}) => { const [isOpen, setIsOpen] = useState(false) - const open = () => setIsOpen(true) - const close = () => setIsOpen(false) + const open = () => { + onOpenCallback?.() + setIsOpen(true) + } + const close = () => { + onCloseCallback?.() + setIsOpen(false) + } + + useEffect(() => { + if (!isOpen && onCloseCallback) { + onCloseCallback() + } + + if (isOpen && onOpenCallback) { + onOpenCallback() + } + }, [isOpen, onCloseCallback, onOpenCallback]) return { isOpen, diff --git a/src/presentation/hooks/usePageContainer/createUpdateHook.ts b/src/presentation/hooks/usePageContainer/createUpdateHook.ts index d20f7108..40829cbd 100644 --- a/src/presentation/hooks/usePageContainer/createUpdateHook.ts +++ b/src/presentation/hooks/usePageContainer/createUpdateHook.ts @@ -50,7 +50,11 @@ export const createUpdateHook = const [loadingValues, setLoadingValues] = useState(false) - const sheetContainerControl = useModal() + const sheetContainerControl = useModal({ + onCloseCallback: () => { + setIdResourceToUpdate('') + } + }) const form = useHookForm({ defaultValues, schemaResolver }) const { reset } = form From 72a29db5ee12899e1e543e7e9d7e0900f45907ee Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Mon, 6 May 2024 17:30:00 -0300 Subject: [PATCH 097/162] feat(presentation/hooks/usePageContainer): add dependencesHook --- .../hooks/usePageContainer/dependencesHook.ts | 54 +++++++++++++++++++ .../hooks/usePageContainer/types.ts | 4 +- 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 src/presentation/hooks/usePageContainer/dependencesHook.ts diff --git a/src/presentation/hooks/usePageContainer/dependencesHook.ts b/src/presentation/hooks/usePageContainer/dependencesHook.ts new file mode 100644 index 00000000..dfcd8bf2 --- /dev/null +++ b/src/presentation/hooks/usePageContainer/dependencesHook.ts @@ -0,0 +1,54 @@ +import { useCallback, useState } from 'react' + +import { catchError } from '@/main/utils' +import { useDebounce } from '@/presentation/hooks/useDebounce' + +import type { GetDependencesService, TextBuilder } from './types' + +export type DependencesHookProps = { + texts: { + getDependences: { + error?: TextBuilder + } + } +} + +export const dependencesHook = + ({ + texts: { + getDependences: { error } + } + }: DependencesHookProps) => + (getDependences: GetDependencesService) => { + const [loadingDependences, setLoadingDependences] = useState(true) + const [dependences, setDependences] = useState([]) + const [search, setSearch] = useState('') + + const handleGetDependences = useCallback(async () => { + try { + setLoadingDependences(true) + if (!search.trim()) { + setDependences([]) + return + } + const data = await getDependences.execute(search) + setDependences(data) + } finally { + setLoadingDependences(false) + } + }, [getDependences, search]) + + const { clear: clearSearch } = useDebounce({ + deps: [handleGetDependences], + ms: 500, + fn: () => catchError(handleGetDependences, error?.()) + }) + + return { + dependences, + loadingDependences, + search, + setSearch, + clearSearch + } + } diff --git a/src/presentation/hooks/usePageContainer/types.ts b/src/presentation/hooks/usePageContainer/types.ts index 1ab85312..7f85df0c 100644 --- a/src/presentation/hooks/usePageContainer/types.ts +++ b/src/presentation/hooks/usePageContainer/types.ts @@ -10,7 +10,7 @@ export type RecordWithId = { [key: string]: unknown } -export type TextBuilder = (model?: T) => string +export type TextBuilder> = (model?: T) => string export type GetResourcesService< TModel extends RecordWithId, @@ -27,3 +27,5 @@ export type UpdateResourceService = export type GetOneResourceService = IRequestInterface + +export type GetDependencesService = IRequestInterface From 0602bdb818fd2537a9bdf13f5ec858c4ee8956f7 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Mon, 6 May 2024 17:54:00 -0300 Subject: [PATCH 098/162] chore(presentation/components/ui): export components --- src/presentation/components/ui/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/presentation/components/ui/index.ts b/src/presentation/components/ui/index.ts index a05b4b36..018272ef 100644 --- a/src/presentation/components/ui/index.ts +++ b/src/presentation/components/ui/index.ts @@ -1,6 +1,7 @@ export * from './avatar' export * from './button' export * from './card' +export * from './combobox' export * from './command' export * from './dataTable' export * from './dialog' From 6433c146742e819754d1693dad24351f3eacf571 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Tue, 7 May 2024 07:49:00 -0300 Subject: [PATCH 099/162] feat(presentation/components/ui): add missing stories --- .../components/ui/command/index.stories.tsx | 83 +++++++++++++++++++ .../components/ui/dialog/index.stories.tsx | 50 +++++++++++ .../components/ui/loading/index.stories.tsx | 12 +++ .../components/ui/popover/index.stories.tsx | 57 +++++++++++++ 4 files changed, 202 insertions(+) create mode 100644 src/presentation/components/ui/command/index.stories.tsx create mode 100644 src/presentation/components/ui/dialog/index.stories.tsx create mode 100644 src/presentation/components/ui/loading/index.stories.tsx create mode 100644 src/presentation/components/ui/popover/index.stories.tsx diff --git a/src/presentation/components/ui/command/index.stories.tsx b/src/presentation/components/ui/command/index.stories.tsx new file mode 100644 index 00000000..d04c8f36 --- /dev/null +++ b/src/presentation/components/ui/command/index.stories.tsx @@ -0,0 +1,83 @@ +import { useEffect, useState } from 'react' + +import { Meta, StoryFn } from '@storybook/react/' +import { + Calculator, + Calendar, + CreditCard, + Settings, + Smile, + User +} from 'lucide-react' + +import { Command } from '.' + +export default { + title: 'Components/UI/Command' +} as Meta + +const Template: StoryFn = () => { + const [open, setOpen] = useState(false) + + useEffect(() => { + const down = (e: KeyboardEvent) => { + if (e.key === 'k' && (e.metaKey || e.ctrlKey)) { + e.preventDefault() + setOpen((prevState) => !prevState) + } + } + + document.addEventListener('keydown', down) + return () => document.removeEventListener('keydown', down) + }, []) + + return ( + <> +

    + Press + + k + +

    + + + + No results found. + + + + Calendar + + + + Search Emoji + + + + Calculator + + + + + + + Profile + ⌘P + + + + Billing + ⌘B + + + + Settings + ⌘S + + + + + + ) +} +export const Default = Template.bind({}) diff --git a/src/presentation/components/ui/dialog/index.stories.tsx b/src/presentation/components/ui/dialog/index.stories.tsx new file mode 100644 index 00000000..99ec5d6f --- /dev/null +++ b/src/presentation/components/ui/dialog/index.stories.tsx @@ -0,0 +1,50 @@ +import { Meta, StoryFn } from '@storybook/react/' + +import { Button } from '../button' +import { Input } from '../input' +import { Label } from '../label' + +import { Dialog } from '.' + +export default { + title: 'Components/UI/Dialog' +} as Meta + +const Template: StoryFn = () => ( + + + + + + + Edit profile + + Make changes to your profile here. Click save when you are done. + + +
    +
    + + +
    +
    + + +
    +
    + + + +
    +
    +) + +export const Default = Template.bind({}) diff --git a/src/presentation/components/ui/loading/index.stories.tsx b/src/presentation/components/ui/loading/index.stories.tsx new file mode 100644 index 00000000..d75ccc0a --- /dev/null +++ b/src/presentation/components/ui/loading/index.stories.tsx @@ -0,0 +1,12 @@ +import { Meta, StoryFn } from '@storybook/react/' + +import { Loading, type LoadingProps } from '.' + +export default { + title: 'Components/UI/Loading', + component: Loading +} as Meta + +const Template: StoryFn = (args) => + +export const Default = Template.bind({}) diff --git a/src/presentation/components/ui/popover/index.stories.tsx b/src/presentation/components/ui/popover/index.stories.tsx new file mode 100644 index 00000000..631eae25 --- /dev/null +++ b/src/presentation/components/ui/popover/index.stories.tsx @@ -0,0 +1,57 @@ +import { Meta, StoryFn } from '@storybook/react/' + +import { Button } from '../button' +import { Input } from '../input' +import { Label } from '../label' + +import { Popover } from '.' + +export default { + title: 'Components/UI/Popover' +} as Meta + +const Template: StoryFn = () => ( + + + + + +
    +
    +

    Dimensions

    +

    + Set the dimensions for the layer. +

    +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    +
    +
    +) + +export const Default = Template.bind({}) From 93e2b82c284ee99ff4702b3b229b648e0dd785e7 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Tue, 7 May 2024 14:12:00 -0300 Subject: [PATCH 100/162] feat(masker/mask): add float mask --- src/masker/masks/floatMask.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/masker/masks/floatMask.ts diff --git a/src/masker/masks/floatMask.ts b/src/masker/masks/floatMask.ts new file mode 100644 index 00000000..aef99d5e --- /dev/null +++ b/src/masker/masks/floatMask.ts @@ -0,0 +1,14 @@ +export const floatMask = (value: string) => { + const sanitizedValue = value.replace(/[^\d]/g, '').replace(/^0+/, '') + if (!sanitizedValue) return '' + + const paddedValue = sanitizedValue.padStart(3, '0') + + const integerPart = paddedValue + .slice(0, -2) + .replace(/\B(?=(\d{3})+(?!\d))/g, '.') + + const decimalPart = paddedValue.slice(-2) + + return `${integerPart},${decimalPart}` +} From 08ef538d1f963bb734704bd2efd3ba7dba75112f Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Tue, 7 May 2024 15:51:00 -0300 Subject: [PATCH 101/162] feat(masker/mask): add money mask --- src/masker/masks/moneyMask.ts | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/masker/masks/moneyMask.ts diff --git a/src/masker/masks/moneyMask.ts b/src/masker/masks/moneyMask.ts new file mode 100644 index 00000000..fc073067 --- /dev/null +++ b/src/masker/masks/moneyMask.ts @@ -0,0 +1,3 @@ +import { floatMask } from './floatMask' + +export const moneyMask = (value: string) => `R$ ${floatMask(value)}` From 236ac554581556f8c9e37df774f907336ce4330f Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi Date: Tue, 7 May 2024 16:01:00 -0300 Subject: [PATCH 102/162] chore(masker/mask): export masks --- src/masker/masks/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/masker/masks/index.ts b/src/masker/masks/index.ts index edb17d35..20556d14 100644 --- a/src/masker/masks/index.ts +++ b/src/masker/masks/index.ts @@ -1,4 +1,6 @@ export * from './cepMask' export * from './cpfMask' +export * from './floatMask' +export * from './moneyMask' export * from './onlyNumbers' export * from './phoneMask' From 7875a080dd5fb025fc98316a0d702ab6f84b83b3 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Tue, 25 Jun 2024 15:03:53 -0300 Subject: [PATCH 103/162] refactor(domain/shared): move types to types folder --- src/domain/shared/index.ts | 5 ----- src/domain/shared/{file.types.ts => types/file.ts} | 0 src/domain/shared/types/index.ts | 5 +++++ .../shared/{listParams.interface.ts => types/listParams.ts} | 0 .../{listResponse.interface.ts => types/listResponse.ts} | 0 src/domain/shared/{option.types.ts => types/option.ts} | 0 .../shared/{request.interface.ts => types/request.ts} | 0 src/domain/useCases/property/getProperties.ts | 6 +++++- 8 files changed, 10 insertions(+), 6 deletions(-) delete mode 100644 src/domain/shared/index.ts rename src/domain/shared/{file.types.ts => types/file.ts} (100%) create mode 100644 src/domain/shared/types/index.ts rename src/domain/shared/{listParams.interface.ts => types/listParams.ts} (100%) rename src/domain/shared/{listResponse.interface.ts => types/listResponse.ts} (100%) rename src/domain/shared/{option.types.ts => types/option.ts} (100%) rename src/domain/shared/{request.interface.ts => types/request.ts} (100%) diff --git a/src/domain/shared/index.ts b/src/domain/shared/index.ts deleted file mode 100644 index 5200738f..00000000 --- a/src/domain/shared/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './file.types' -export * from './listParams.interface' -export * from './listResponse.interface' -export * from './option.types' -export * from './request.interface' diff --git a/src/domain/shared/file.types.ts b/src/domain/shared/types/file.ts similarity index 100% rename from src/domain/shared/file.types.ts rename to src/domain/shared/types/file.ts diff --git a/src/domain/shared/types/index.ts b/src/domain/shared/types/index.ts new file mode 100644 index 00000000..5af7ad9a --- /dev/null +++ b/src/domain/shared/types/index.ts @@ -0,0 +1,5 @@ +export * from './file' +export * from './listParams' +export * from './listResponse' +export * from './option' +export * from './request' diff --git a/src/domain/shared/listParams.interface.ts b/src/domain/shared/types/listParams.ts similarity index 100% rename from src/domain/shared/listParams.interface.ts rename to src/domain/shared/types/listParams.ts diff --git a/src/domain/shared/listResponse.interface.ts b/src/domain/shared/types/listResponse.ts similarity index 100% rename from src/domain/shared/listResponse.interface.ts rename to src/domain/shared/types/listResponse.ts diff --git a/src/domain/shared/option.types.ts b/src/domain/shared/types/option.ts similarity index 100% rename from src/domain/shared/option.types.ts rename to src/domain/shared/types/option.ts diff --git a/src/domain/shared/request.interface.ts b/src/domain/shared/types/request.ts similarity index 100% rename from src/domain/shared/request.interface.ts rename to src/domain/shared/types/request.ts diff --git a/src/domain/useCases/property/getProperties.ts b/src/domain/useCases/property/getProperties.ts index e206641a..87152db6 100644 --- a/src/domain/useCases/property/getProperties.ts +++ b/src/domain/useCases/property/getProperties.ts @@ -1,5 +1,9 @@ import { PropertyModel } from '@/domain/models' -import { IRequestInterface, IListParams, IListResponse } from '@/domain/shared' +import { + IRequestInterface, + IListParams, + IListResponse +} from '@/domain/shared/types' export interface IGetProperties extends IRequestInterface< From 99a6f6a82222248f1108c849d77de73b08e9b3e5 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Tue, 25 Jun 2024 15:08:42 -0300 Subject: [PATCH 104/162] refactor(presentation/components/ui/dataTable): use project types instead of lib types --- .../components/ui/dataTable/dataTable.tsx | 60 +++++++++++++++++-- .../components/ui/dataTable/types.ts | 18 +++--- 2 files changed, 61 insertions(+), 17 deletions(-) diff --git a/src/presentation/components/ui/dataTable/dataTable.tsx b/src/presentation/components/ui/dataTable/dataTable.tsx index cb77e1f0..97c70d4b 100644 --- a/src/presentation/components/ui/dataTable/dataTable.tsx +++ b/src/presentation/components/ui/dataTable/dataTable.tsx @@ -1,7 +1,11 @@ import { useCallback, useMemo } from 'react' import { + OnChangeFn, + PaginationState, RowData, + SortingState, + Updater, flexRender, getCoreRowModel, getPaginationRowModel, @@ -9,11 +13,12 @@ import { } from '@tanstack/react-table' import { ArrowDownNarrowWide, ArrowUpNarrowWide } from 'lucide-react' -import { Table } from '@/presentation/components/ui/table' -import { Tooltip } from '@/presentation/components/ui/tooltip' +import { ITEMS_PER_PAGE } from '@/infra/http' import { Loading } from '../loading' import { Pagination } from '../pagination' +import { Table } from '../table' +import { Tooltip } from '../tooltip' import { DataTableProps } from './types' @@ -28,6 +33,41 @@ export const DataTable = ({ const { currentSorting, onSorting } = sorting const { currentPage, onPageChange } = pagination + const onSortingChange: OnChangeFn = useCallback( + (updaterOrValue: Updater) => { + const [sort] = + typeof updaterOrValue === 'function' + ? updaterOrValue([ + { + desc: currentSorting.direction === 'desc', + id: String(currentSorting.field) + } + ]) + : updaterOrValue + + onSorting({ + direction: sort.desc ? 'desc' : 'asc', + field: sort.id as keyof TData + }) + }, + [currentSorting.direction, currentSorting.field, onSorting] + ) + + const onPaginationChange: OnChangeFn = useCallback( + (updaterOrValue: Updater) => { + const page = + typeof updaterOrValue === 'function' + ? updaterOrValue({ + pageIndex: currentPage - 1, + pageSize: ITEMS_PER_PAGE + }).pageIndex + : updaterOrValue.pageIndex + + onPageChange(page + 1) + }, + [currentPage, onPageChange] + ) + const { getState, getRowModel, @@ -41,14 +81,22 @@ export const DataTable = ({ columns, data, state: { - sorting: currentSorting, - pagination: currentPage + sorting: [ + { + id: String(currentSorting.field), + desc: currentSorting.direction === 'desc' + } + ], + pagination: { + pageIndex: currentPage - 1, + pageSize: ITEMS_PER_PAGE + } }, manualSorting: true, manualPagination: true, pageCount: totalPages, - onSortingChange: onSorting, - onPaginationChange: onPageChange, + onSortingChange, + onPaginationChange, getCoreRowModel: getCoreRowModel(), getPaginationRowModel: getPaginationRowModel() }) diff --git a/src/presentation/components/ui/dataTable/types.ts b/src/presentation/components/ui/dataTable/types.ts index 425831fa..df791aec 100644 --- a/src/presentation/components/ui/dataTable/types.ts +++ b/src/presentation/components/ui/dataTable/types.ts @@ -1,22 +1,18 @@ -import { - ColumnDef, - OnChangeFn, - PaginationState, - RowData, - SortingState -} from '@tanstack/react-table' +import { ColumnDef, RowData } from '@tanstack/react-table' + +import { Sort } from '@/domain/shared/types' export type DataTableProps = { data: TData[] columns: ColumnDef[] totalPages: number pagination: { - currentPage: PaginationState - onPageChange: OnChangeFn + currentPage: number + onPageChange: (page: number) => void } sorting: { - currentSorting: SortingState - onSorting: OnChangeFn + currentSorting: Sort + onSorting: (sort: Sort) => void } loading?: boolean } From b160de29e58693f51140823d152668901bb6993f Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Tue, 25 Jun 2024 15:09:10 -0300 Subject: [PATCH 105/162] refactor(presentation/components/utils/compose): improve to accept props --- .../components/utils/compose/compose.tsx | 6 ++++-- .../components/utils/compose/types.ts | 15 +++++++++++---- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/presentation/components/utils/compose/compose.tsx b/src/presentation/components/utils/compose/compose.tsx index ae61b949..9989e2b5 100644 --- a/src/presentation/components/utils/compose/compose.tsx +++ b/src/presentation/components/utils/compose/compose.tsx @@ -1,8 +1,10 @@ import type { ComposeProps } from './types' -const Compose: React.FC = ({ components, children }) => +const Compose: React.FC> = ({ components, children }) => components.reduceRight( - (acc, Component) => {acc}, + (acc, { component: Component, props }) => ( + {acc} + ), children ) diff --git a/src/presentation/components/utils/compose/types.ts b/src/presentation/components/utils/compose/types.ts index aeb5e0c7..4219b3af 100644 --- a/src/presentation/components/utils/compose/types.ts +++ b/src/presentation/components/utils/compose/types.ts @@ -1,9 +1,16 @@ import { PropsWithChildren, ReactNode } from 'react' -type Component = (props: PropsWithChildren) => ReactNode +type Component = (props: PropsWithChildren) => ReactNode -type Props = { - components: Component[] +type ComponentWithProps = { + component: Component + props?: TProps } -export type ComposeProps = PropsWithChildren +type Props = { + components: ComponentWithProps[] +} + +export type ComposeProps = PropsWithChildren< + Props +> From 37de8371c85bbdcd4621ec9055007253ac288565 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Tue, 25 Jun 2024 15:09:31 -0300 Subject: [PATCH 106/162] chore: remove custom hooks --- .../usePageContainer/createUpdateHook.ts | 121 ------------------ .../hooks/usePageContainer/dependencesHook.ts | 54 -------- .../hooks/usePageContainer/index.ts | 66 ---------- .../hooks/usePageContainer/listDeleteHook.ts | 84 ------------ .../hooks/usePageContainer/listHook.ts | 82 ------------ .../hooks/usePageContainer/types.ts | 31 ----- 6 files changed, 438 deletions(-) delete mode 100644 src/presentation/hooks/usePageContainer/createUpdateHook.ts delete mode 100644 src/presentation/hooks/usePageContainer/dependencesHook.ts delete mode 100644 src/presentation/hooks/usePageContainer/index.ts delete mode 100644 src/presentation/hooks/usePageContainer/listDeleteHook.ts delete mode 100644 src/presentation/hooks/usePageContainer/listHook.ts delete mode 100644 src/presentation/hooks/usePageContainer/types.ts diff --git a/src/presentation/hooks/usePageContainer/createUpdateHook.ts b/src/presentation/hooks/usePageContainer/createUpdateHook.ts deleted file mode 100644 index 40829cbd..00000000 --- a/src/presentation/hooks/usePageContainer/createUpdateHook.ts +++ /dev/null @@ -1,121 +0,0 @@ -import { useCallback, useEffect, useState } from 'react' - -import toast from 'react-hot-toast' - -import { catchError } from '@/main/utils' - -import { useHookForm } from '../useHookForm' -import { useModal } from '../useModal' - -import type { - CreateResourceService, - GetOneResourceService, - TextBuilder, - UpdateResourceService -} from './types' -import type { DefaultValues, FieldValues, Resolver } from 'react-hook-form' - -type Services = { - createResource: CreateResourceService - getOneResource: GetOneResourceService - updateResource: UpdateResourceService -} - -export type CreateUpdateHookProps = { - defaultValues: DefaultValues - texts: { - createResource: { - success: TextBuilder - error?: TextBuilder - } - updateResource: { - success: TextBuilder - error?: TextBuilder - } - getOneResource: { - error?: TextBuilder - } - } - schemaResolver?: Resolver -} - -export const createUpdateHook = - ({ - defaultValues, - texts, - schemaResolver - }: CreateUpdateHookProps) => - ({ createResource, getOneResource, updateResource }: Services) => { - const [idResourceToUpdate, setIdResourceToUpdate] = useState('') - - const [loadingValues, setLoadingValues] = useState(false) - - const sheetContainerControl = useModal({ - onCloseCallback: () => { - setIdResourceToUpdate('') - } - }) - - const form = useHookForm({ defaultValues, schemaResolver }) - const { reset } = form - - const openUpdateSheetContainer = useCallback( - (id: string) => { - setIdResourceToUpdate(id) - sheetContainerControl.open() - }, - [sheetContainerControl] - ) - - const onSubmit = useCallback( - async (data: TValues, event?: React.BaseSyntheticEvent) => { - event?.preventDefault() - - if (idResourceToUpdate) { - await updateResource.execute(data) - toast.success(texts.updateResource.success(data)) - return - } - - await createResource.execute(data) - toast.success(texts.createResource.success(data)) - }, - [createResource, idResourceToUpdate, updateResource] - ) - - const getValues = useCallback(async () => { - try { - setLoadingValues(true) - const values = await getOneResource.execute(idResourceToUpdate) - reset(values) - } finally { - setLoadingValues(false) - } - }, [getOneResource, idResourceToUpdate, reset]) - - const handleSubmit = () => - catchError( - onSubmit, - idResourceToUpdate - ? texts.updateResource.error?.() - : texts.createResource.error?.() - ) - - useEffect(() => { - if (idResourceToUpdate) { - catchError(getValues, texts.getOneResource.error?.()) - return - } - - reset(defaultValues) - }, [reset, getValues, idResourceToUpdate]) - - return { - loadingValues, - sheetContainerControl, - idResourceToUpdate, - form, - handleSubmit, - openUpdateSheetContainer - } - } diff --git a/src/presentation/hooks/usePageContainer/dependencesHook.ts b/src/presentation/hooks/usePageContainer/dependencesHook.ts deleted file mode 100644 index dfcd8bf2..00000000 --- a/src/presentation/hooks/usePageContainer/dependencesHook.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { useCallback, useState } from 'react' - -import { catchError } from '@/main/utils' -import { useDebounce } from '@/presentation/hooks/useDebounce' - -import type { GetDependencesService, TextBuilder } from './types' - -export type DependencesHookProps = { - texts: { - getDependences: { - error?: TextBuilder - } - } -} - -export const dependencesHook = - ({ - texts: { - getDependences: { error } - } - }: DependencesHookProps) => - (getDependences: GetDependencesService) => { - const [loadingDependences, setLoadingDependences] = useState(true) - const [dependences, setDependences] = useState([]) - const [search, setSearch] = useState('') - - const handleGetDependences = useCallback(async () => { - try { - setLoadingDependences(true) - if (!search.trim()) { - setDependences([]) - return - } - const data = await getDependences.execute(search) - setDependences(data) - } finally { - setLoadingDependences(false) - } - }, [getDependences, search]) - - const { clear: clearSearch } = useDebounce({ - deps: [handleGetDependences], - ms: 500, - fn: () => catchError(handleGetDependences, error?.()) - }) - - return { - dependences, - loadingDependences, - search, - setSearch, - clearSearch - } - } diff --git a/src/presentation/hooks/usePageContainer/index.ts b/src/presentation/hooks/usePageContainer/index.ts deleted file mode 100644 index 589ff418..00000000 --- a/src/presentation/hooks/usePageContainer/index.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { FieldValues } from 'react-hook-form' - -import { - type CreateUpdateHookProps, - createUpdateHook -} from './createUpdateHook' -import { type ListDeleteHookProps, listDeleteHook } from './listDeleteHook' - -import type { - CreateResourceService, - DeleteResourceService, - GetOneResourceService, - GetResourcesService, - RecordWithId, - UpdateResourceService -} from './types' - -type Services = { - getResources: GetResourcesService - deleteResource: DeleteResourceService - createResource: CreateResourceService - getOneResource: GetOneResourceService - updateResource: UpdateResourceService -} - -export type PageContainerHookProps< - TModel extends RecordWithId, - TValues extends FieldValues -> = { - listDeleteHookProps: ListDeleteHookProps - createUpdateHookProps: CreateUpdateHookProps -} - -export const pageContainerHook = < - TModel extends RecordWithId, - TValues extends FieldValues ->({ - listDeleteHookProps, - createUpdateHookProps -}: PageContainerHookProps) => { - const useListDeleteHook = listDeleteHook(listDeleteHookProps) - const useCreateUpdateHook = createUpdateHook(createUpdateHookProps) - - return ({ - createResource, - deleteResource, - getOneResource, - getResources, - updateResource - }: Services) => { - const listDeleteHookData = useListDeleteHook({ - deleteResource, - getResources - }) - const createUpdateHookData = useCreateUpdateHook({ - createResource, - getOneResource, - updateResource - }) - - return { - ...listDeleteHookData, - ...createUpdateHookData - } - } -} diff --git a/src/presentation/hooks/usePageContainer/listDeleteHook.ts b/src/presentation/hooks/usePageContainer/listDeleteHook.ts deleted file mode 100644 index 146052ae..00000000 --- a/src/presentation/hooks/usePageContainer/listDeleteHook.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { useCallback, useMemo, useState } from 'react' - -import toast from 'react-hot-toast' - -import { catchError } from '@/main/utils' - -import { type ListHookProps, listHook } from './listHook' - -import type { - DeleteResourceService, - GetResourcesService, - RecordWithId, - TextBuilder -} from './types' - -type Services = { - deleteResource: DeleteResourceService - getResources: GetResourcesService -} - -export type ListDeleteHookProps = { - texts: { - deleteResource: { - success: TextBuilder - error?: TextBuilder - } - } -} & ListHookProps - -export const listDeleteHook = ({ - texts -}: ListDeleteHookProps) => { - const useListHook = listHook({ - texts: { - getResources: texts.getResources - } - }) - - return ({ deleteResource, getResources }: Services) => { - const listHookData = useListHook(getResources) - const { resources, setLoading } = listHookData - - const [resourceIdToExclude, setResourceIdToExclude] = useState('') - const resourceToExclude = useMemo( - () => resources.find(({ id }) => id === resourceIdToExclude), - [resourceIdToExclude, resources] - ) - - const deleteResourceFn = useCallback(async () => { - try { - setLoading(true) - - await deleteResource.execute(resourceIdToExclude) - - setResourceIdToExclude('') - - toast.success(texts.deleteResource.success(resourceToExclude!)) - - await listHookData.handleGetResources() - } finally { - setLoading(false) - } - }, [ - deleteResource, - listHookData, - resourceIdToExclude, - resourceToExclude, - setLoading - ]) - - const handleDeleteResource = () => - catchError( - deleteResourceFn, - texts.deleteResource.error?.(resourceToExclude!) - ) - - return { - ...listHookData, - resourceToExclude, - setResourceIdToExclude, - handleDeleteResource - } - } -} diff --git a/src/presentation/hooks/usePageContainer/listHook.ts b/src/presentation/hooks/usePageContainer/listHook.ts deleted file mode 100644 index 2b059bb1..00000000 --- a/src/presentation/hooks/usePageContainer/listHook.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { useState, useCallback, useEffect } from 'react' - -import { catchError } from '@/main/utils' - -import type { GetResourcesService, RecordWithId, TextBuilder } from './types' -import type { SortingState, PaginationState } from '@tanstack/react-table' - -export type ListHookProps = { - texts: { - getResources: { - error?: TextBuilder - } - } -} - -export const listHook = - ({ - texts: { - getResources: { error } - } - }: ListHookProps) => - (getResources: GetResourcesService) => { - const [loading, setLoading] = useState(true) - const [sorting, setSorting] = useState([]) - const [filters, setFilters] = useState>( - {} as Record - ) - const [{ pageIndex, pageSize }, setPage] = useState({ - pageIndex: 0, - pageSize: 0 - }) - - const [resources, setResources] = useState([]) - const [totalPages, setTotalPages] = useState(0) - - const handleGetResources = useCallback(async () => { - try { - setLoading(true) - const [fieldToSort] = sorting ?? {} - - const response = await getResources.execute({ - pagination: { - page: pageIndex + 1 - }, - filters, - ...(fieldToSort && { - sort: { - direction: fieldToSort.desc ? 'desc' : 'asc', - field: fieldToSort.id as keyof TModel - } - }) - }) - - setResources(response.resources) - setTotalPages(response.totalPages) - } finally { - setLoading(false) - } - }, [sorting, getResources, pageIndex, filters]) - - useEffect(() => { - catchError(handleGetResources, error?.()) - }, [handleGetResources]) - - return { - resources, - totalPages, - loading, - setLoading, - filters, - setFilters, - handleGetResources, - sorting: { - currentSorting: sorting, - onSorting: setSorting - }, - pagination: { - currentPage: { pageIndex, pageSize }, - onPageChange: setPage - } - } - } diff --git a/src/presentation/hooks/usePageContainer/types.ts b/src/presentation/hooks/usePageContainer/types.ts deleted file mode 100644 index 7f85df0c..00000000 --- a/src/presentation/hooks/usePageContainer/types.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { - IListParams, - IListResponse, - IRequestInterface -} from '@/domain/shared' -import type { FieldValues } from 'react-hook-form' - -export type RecordWithId = { - id: string - [key: string]: unknown -} - -export type TextBuilder> = (model?: T) => string - -export type GetResourcesService< - TModel extends RecordWithId, - TKeyOfModel extends keyof TModel = keyof TModel -> = IRequestInterface, IListResponse> - -export type DeleteResourceService = IRequestInterface - -export type CreateResourceService = - IRequestInterface - -export type UpdateResourceService = - IRequestInterface - -export type GetOneResourceService = - IRequestInterface - -export type GetDependencesService = IRequestInterface From 08e546b5552ad12cfcc7601bd41b7ba2f193ca83 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Tue, 25 Jun 2024 15:10:12 -0300 Subject: [PATCH 107/162] feat: add react query --- package.json | 2 + pnpm-lock.yaml | 12870 ++++++++++++++++++++++++++--------------------- src/main.tsx | 15 +- 3 files changed, 7161 insertions(+), 5726 deletions(-) diff --git a/package.json b/package.json index 9c32184f..cab6827c 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "@radix-ui/react-slot": "^1.0.2", "@radix-ui/react-tabs": "^1.0.4", "@radix-ui/react-tooltip": "^1.0.7", + "@tanstack/react-query": "^5.45.1", "@tanstack/react-table": "^8.15.0", "axios": "^1.4.0", "class-variance-authority": "^0.7.0", @@ -53,6 +54,7 @@ "@storybook/preview-web": "^7.3.0", "@storybook/react": "^7.3.0", "@storybook/react-vite": "^7.3.0", + "@tanstack/eslint-plugin-query": "^5.43.1", "@types/react": "^18.2.20", "@types/react-dom": "^18.2.7", "@types/validator": "^13.11.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 20aa3ba3..21a1c8cc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,2105 +1,1162 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@radix-ui/react-avatar': - specifier: ^1.0.4 - version: 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-dialog': - specifier: ^1.0.5 - version: 1.0.5(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-dropdown-menu': - specifier: ^2.0.6 - version: 2.0.6(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-label': - specifier: ^2.0.2 - version: 2.0.2(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-popover': - specifier: ^1.0.7 - version: 1.0.7(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': - specifier: ^1.0.2 - version: 1.0.2(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-tabs': - specifier: ^1.0.4 - version: 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-tooltip': - specifier: ^1.0.7 - version: 1.0.7(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@tanstack/react-table': - specifier: ^8.15.0 - version: 8.15.0(react-dom@18.2.0)(react@18.2.0) - axios: - specifier: ^1.4.0 - version: 1.6.7 - class-variance-authority: - specifier: ^0.7.0 - version: 0.7.0 - clsx: - specifier: ^2.1.0 - version: 2.1.0 - cmdk: - specifier: ^1.0.0 - version: 1.0.0(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - lucide-react: - specifier: ^0.320.0 - version: 0.320.0(react@18.2.0) - react: - specifier: ^18.2.0 - version: 18.2.0 - react-dom: - specifier: ^18.2.0 - version: 18.2.0(react@18.2.0) - react-hook-form: - specifier: ^7.50.1 - version: 7.50.1(react@18.2.0) - react-hot-toast: - specifier: ^2.4.1 - version: 2.4.1(csstype@3.1.3)(react-dom@18.2.0)(react@18.2.0) - react-router-dom: - specifier: ^6.14.2 - version: 6.21.3(react-dom@18.2.0)(react@18.2.0) - tailwind-merge: - specifier: ^2.2.1 - version: 2.2.1 - validator: - specifier: ^13.11.0 - version: 13.11.0 - -devDependencies: - '@commitlint/config-conventional': - specifier: ^17.7.0 - version: 17.8.1 - '@faker-js/faker': - specifier: ^8.4.0 - version: 8.4.0 - '@storybook/addon-actions': - specifier: ^7.3.0 - version: 7.6.12 - '@storybook/addon-essentials': - specifier: ^7.3.0 - version: 7.6.12(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-interactions': - specifier: ^7.3.0 - version: 7.6.12 - '@storybook/addon-links': - specifier: ^7.3.0 - version: 7.6.12(react@18.2.0) - '@storybook/addon-themes': - specifier: ^7.6.12 - version: 7.6.12 - '@storybook/preview-web': - specifier: ^7.3.0 - version: 7.6.12 - '@storybook/react': - specifier: ^7.3.0 - version: 7.6.12(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3) - '@storybook/react-vite': - specifier: ^7.3.0 - version: 7.6.12(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)(vite@4.5.2) - '@types/react': - specifier: ^18.2.20 - version: 18.2.48 - '@types/react-dom': - specifier: ^18.2.7 - version: 18.2.18 - '@types/validator': - specifier: ^13.11.1 - version: 13.11.8 - '@typescript-eslint/eslint-plugin': - specifier: ^6.13.1 - version: 6.20.0(@typescript-eslint/parser@6.20.0)(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/parser': - specifier: ^6.13.1 - version: 6.20.0(eslint@8.56.0)(typescript@5.3.3) - '@vitejs/plugin-react': - specifier: ^4.0.4 - version: 4.2.1(vite@4.5.2) - autoprefixer: - specifier: ^10.4.17 - version: 10.4.17(postcss@8.4.33) - commitlint: - specifier: ^17.7.0 - version: 17.8.1 - eslint: - specifier: ^8.55.0 - version: 8.56.0 - eslint-config-airbnb: - specifier: ^19.0.4 - version: 19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.33.2)(eslint@8.56.0) - eslint-config-prettier: - specifier: ^9.1.0 - version: 9.1.0(eslint@8.56.0) - eslint-import-resolver-typescript: - specifier: ^3.6.1 - version: 3.6.1(@typescript-eslint/parser@6.20.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) - eslint-plugin-import: - specifier: ^2.29.0 - version: 2.29.1(@typescript-eslint/parser@6.20.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - eslint-plugin-jsx-a11y: - specifier: ^6.8.0 - version: 6.8.0(eslint@8.56.0) - eslint-plugin-prettier: - specifier: ^5.0.1 - version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.2.4) - eslint-plugin-react-hooks: - specifier: ^4.6.0 - version: 4.6.0(eslint@8.56.0) - eslint-plugin-storybook: - specifier: ^0.6.13 - version: 0.6.15(eslint@8.56.0)(typescript@5.3.3) - husky: - specifier: ^8.0.3 - version: 8.0.3 - lint-staged: - specifier: ^13.2.3 - version: 13.3.0 - msw: - specifier: ^2.2.13 - version: 2.2.13(typescript@5.3.3) - postcss: - specifier: ^8.4.33 - version: 8.4.33 - prettier: - specifier: ^3.1.0 - version: 3.2.4 - storybook: - specifier: ^7.3.0 - version: 7.6.12 - tailwindcss: - specifier: ^3.4.1 - version: 3.4.1(ts-node@10.9.2) - tailwindcss-animate: - specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.1) - typescript: - specifier: ^5.1.6 - version: 5.3.3 - vite: - specifier: ^4.4.9 - version: 4.5.2(@types/node@20.5.1) +importers: + + .: + dependencies: + '@radix-ui/react-avatar': + specifier: ^1.0.4 + version: 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-dialog': + specifier: ^1.0.5 + version: 1.0.5(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-dropdown-menu': + specifier: ^2.0.6 + version: 2.0.6(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-label': + specifier: ^2.0.2 + version: 2.0.2(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-popover': + specifier: ^1.0.7 + version: 1.0.7(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': + specifier: ^1.0.2 + version: 1.0.2(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-tabs': + specifier: ^1.0.4 + version: 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-tooltip': + specifier: ^1.0.7 + version: 1.0.7(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@tanstack/react-query': + specifier: ^5.45.1 + version: 5.45.1(react@18.2.0) + '@tanstack/react-table': + specifier: ^8.15.0 + version: 8.15.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + axios: + specifier: ^1.4.0 + version: 1.6.7 + class-variance-authority: + specifier: ^0.7.0 + version: 0.7.0 + clsx: + specifier: ^2.1.0 + version: 2.1.0 + cmdk: + specifier: ^1.0.0 + version: 1.0.0(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + lucide-react: + specifier: ^0.320.0 + version: 0.320.0(react@18.2.0) + react: + specifier: ^18.2.0 + version: 18.2.0 + react-dom: + specifier: ^18.2.0 + version: 18.2.0(react@18.2.0) + react-hook-form: + specifier: ^7.50.1 + version: 7.50.1(react@18.2.0) + react-hot-toast: + specifier: ^2.4.1 + version: 2.4.1(csstype@3.1.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react-router-dom: + specifier: ^6.14.2 + version: 6.21.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + tailwind-merge: + specifier: ^2.2.1 + version: 2.2.1 + validator: + specifier: ^13.11.0 + version: 13.11.0 + devDependencies: + '@commitlint/config-conventional': + specifier: ^17.7.0 + version: 17.8.1 + '@faker-js/faker': + specifier: ^8.4.0 + version: 8.4.0 + '@storybook/addon-actions': + specifier: ^7.3.0 + version: 7.6.12 + '@storybook/addon-essentials': + specifier: ^7.3.0 + version: 7.6.12(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addon-interactions': + specifier: ^7.3.0 + version: 7.6.12 + '@storybook/addon-links': + specifier: ^7.3.0 + version: 7.6.12(react@18.2.0) + '@storybook/addon-themes': + specifier: ^7.6.12 + version: 7.6.12 + '@storybook/preview-web': + specifier: ^7.3.0 + version: 7.6.12 + '@storybook/react': + specifier: ^7.3.0 + version: 7.6.12(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.3.3) + '@storybook/react-vite': + specifier: ^7.3.0 + version: 7.6.12(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@3.29.4)(typescript@5.3.3)(vite@4.5.2(@types/node@20.5.1)) + '@tanstack/eslint-plugin-query': + specifier: ^5.43.1 + version: 5.43.1(eslint@8.56.0)(typescript@5.3.3) + '@types/react': + specifier: ^18.2.20 + version: 18.2.48 + '@types/react-dom': + specifier: ^18.2.7 + version: 18.2.18 + '@types/validator': + specifier: ^13.11.1 + version: 13.11.8 + '@typescript-eslint/eslint-plugin': + specifier: ^6.13.1 + version: 6.20.0(@typescript-eslint/parser@6.20.0(eslint@8.56.0)(typescript@5.3.3))(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': + specifier: ^6.13.1 + version: 6.20.0(eslint@8.56.0)(typescript@5.3.3) + '@vitejs/plugin-react': + specifier: ^4.0.4 + version: 4.2.1(vite@4.5.2(@types/node@20.5.1)) + autoprefixer: + specifier: ^10.4.17 + version: 10.4.17(postcss@8.4.33) + commitlint: + specifier: ^17.7.0 + version: 17.8.1 + eslint: + specifier: ^8.55.0 + version: 8.56.0 + eslint-config-airbnb: + specifier: ^19.0.4 + version: 19.0.4(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.20.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0))(eslint-plugin-jsx-a11y@6.8.0(eslint@8.56.0))(eslint-plugin-react-hooks@4.6.0(eslint@8.56.0))(eslint-plugin-react@7.33.2(eslint@8.56.0))(eslint@8.56.0) + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.0(eslint@8.56.0) + eslint-import-resolver-typescript: + specifier: ^3.6.1 + version: 3.6.1(@typescript-eslint/parser@6.20.0(eslint@8.56.0)(typescript@5.3.3))(eslint-plugin-import@2.29.1)(eslint@8.56.0) + eslint-plugin-import: + specifier: ^2.29.0 + version: 2.29.1(@typescript-eslint/parser@6.20.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-jsx-a11y: + specifier: ^6.8.0 + version: 6.8.0(eslint@8.56.0) + eslint-plugin-prettier: + specifier: ^5.0.1 + version: 5.1.3(eslint-config-prettier@9.1.0(eslint@8.56.0))(eslint@8.56.0)(prettier@3.2.4) + eslint-plugin-react-hooks: + specifier: ^4.6.0 + version: 4.6.0(eslint@8.56.0) + eslint-plugin-storybook: + specifier: ^0.6.13 + version: 0.6.15(eslint@8.56.0)(typescript@5.3.3) + husky: + specifier: ^8.0.3 + version: 8.0.3 + lint-staged: + specifier: ^13.2.3 + version: 13.3.0 + msw: + specifier: ^2.2.13 + version: 2.2.13(typescript@5.3.3) + postcss: + specifier: ^8.4.33 + version: 8.4.33 + prettier: + specifier: ^3.1.0 + version: 3.2.4 + storybook: + specifier: ^7.3.0 + version: 7.6.12 + tailwindcss: + specifier: ^3.4.1 + version: 3.4.1(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.3.3)) + tailwindcss-animate: + specifier: ^1.0.7 + version: 1.0.7(tailwindcss@3.4.1(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.3.3))) + typescript: + specifier: ^5.1.6 + version: 5.3.3 + vite: + specifier: ^4.4.9 + version: 4.5.2(@types/node@20.5.1) packages: - /@aashutoshrathi/word-wrap@1.2.6: + '@aashutoshrathi/word-wrap@1.2.6': resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} engines: {node: '>=0.10.0'} - dev: true - /@alloc/quick-lru@5.2.0: + '@alloc/quick-lru@5.2.0': resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - dev: true - /@ampproject/remapping@2.2.1: + '@ampproject/remapping@2.2.1': resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.22 - dev: true - /@aw-web-design/x-default-browser@1.4.126: + '@aw-web-design/x-default-browser@1.4.126': resolution: {integrity: sha512-Xk1sIhyNC/esHGGVjL/niHLowM0csl/kFO5uawBy4IrWwy0o1G8LGt3jP6nmWGz+USxeeqbihAmp/oVZju6wug==} hasBin: true - dependencies: - default-browser-id: 3.0.0 - dev: true - /@babel/code-frame@7.23.5: + '@babel/code-frame@7.23.5': resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.23.4 - chalk: 2.4.2 - dev: true - /@babel/compat-data@7.23.5: + '@babel/compat-data@7.23.5': resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} engines: {node: '>=6.9.0'} - dev: true - /@babel/core@7.23.9: + '@babel/core@7.23.9': resolution: {integrity: sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==} engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) - '@babel/helpers': 7.23.9 - '@babel/parser': 7.23.9 - '@babel/template': 7.23.9 - '@babel/traverse': 7.23.9 - '@babel/types': 7.23.9 - convert-source-map: 2.0.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/generator@7.23.6: + '@babel/generator@7.23.6': resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.9 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.22 - jsesc: 2.5.2 - dev: true - /@babel/helper-annotate-as-pure@7.22.5: + '@babel/helper-annotate-as-pure@7.22.5': resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.9 - dev: true - /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: + '@babel/helper-builder-binary-assignment-operator-visitor@7.22.15': resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.9 - dev: true - /@babel/helper-compilation-targets@7.23.6: + '@babel/helper-compilation-targets@7.23.6': resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/compat-data': 7.23.5 - '@babel/helper-validator-option': 7.23.5 - browserslist: 4.22.3 - lru-cache: 5.1.1 - semver: 6.3.1 - dev: true - /@babel/helper-create-class-features-plugin@7.23.10(@babel/core@7.23.9): + '@babel/helper-create-class-features-plugin@7.23.10': resolution: {integrity: sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.9) - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - semver: 6.3.1 - dev: true - /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.9): + '@babel/helper-create-regexp-features-plugin@7.22.15': resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-annotate-as-pure': 7.22.5 - regexpu-core: 5.3.2 - semver: 6.3.1 - dev: true - /@babel/helper-define-polyfill-provider@0.5.0(@babel/core@7.23.9): + '@babel/helper-define-polyfill-provider@0.5.0': resolution: {integrity: sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - debug: 4.3.4 - lodash.debounce: 4.0.8 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-environment-visitor@7.22.20: + '@babel/helper-environment-visitor@7.22.20': resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-function-name@7.23.0: + '@babel/helper-function-name@7.23.0': resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.23.9 - '@babel/types': 7.23.9 - dev: true - /@babel/helper-hoist-variables@7.22.5: + '@babel/helper-hoist-variables@7.22.5': resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.9 - dev: true - /@babel/helper-member-expression-to-functions@7.23.0: + '@babel/helper-member-expression-to-functions@7.23.0': resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.9 - dev: true - /@babel/helper-module-imports@7.22.15: + '@babel/helper-module-imports@7.22.15': resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.9 - dev: true - /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.9): + '@babel/helper-module-transforms@7.23.3': resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 - dev: true - /@babel/helper-optimise-call-expression@7.22.5: + '@babel/helper-optimise-call-expression@7.22.5': resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.9 - dev: true - /@babel/helper-plugin-utils@7.22.5: + '@babel/helper-plugin-utils@7.22.5': resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.9): + '@babel/helper-remap-async-to-generator@7.22.20': resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-wrap-function': 7.22.20 - dev: true - /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.9): + '@babel/helper-replace-supers@7.22.20': resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - dev: true - /@babel/helper-simple-access@7.22.5: + '@babel/helper-simple-access@7.22.5': resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.9 - dev: true - /@babel/helper-skip-transparent-expression-wrappers@7.22.5: + '@babel/helper-skip-transparent-expression-wrappers@7.22.5': resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.9 - dev: true - /@babel/helper-split-export-declaration@7.22.6: + '@babel/helper-split-export-declaration@7.22.6': resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.9 - dev: true - /@babel/helper-string-parser@7.23.4: + '@babel/helper-string-parser@7.23.4': resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-validator-identifier@7.22.20: + '@babel/helper-validator-identifier@7.22.20': resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-validator-option@7.23.5: + '@babel/helper-validator-option@7.23.5': resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-wrap-function@7.22.20: + '@babel/helper-wrap-function@7.22.20': resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-function-name': 7.23.0 - '@babel/template': 7.23.9 - '@babel/types': 7.23.9 - dev: true - /@babel/helpers@7.23.9: + '@babel/helpers@7.23.9': resolution: {integrity: sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.23.9 - '@babel/traverse': 7.23.9 - '@babel/types': 7.23.9 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/highlight@7.23.4: + '@babel/highlight@7.23.4': resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 - dev: true - /@babel/parser@7.23.9: + '@babel/parser@7.23.9': resolution: {integrity: sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==} engines: {node: '>=6.0.0'} hasBin: true - dependencies: - '@babel/types': 7.23.9 - dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.9): + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3': resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.9): + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3': resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.9) - dev: true - /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.7(@babel/core@7.23.9): + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.7': resolution: {integrity: sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.9): + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.9): + '@babel/plugin-syntax-async-generators@7.8.4': resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.9): + '@babel/plugin-syntax-class-properties@7.12.13': resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.9): + '@babel/plugin-syntax-class-static-block@7.14.5': resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.9): + '@babel/plugin-syntax-dynamic-import@7.8.3': resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.9): + '@babel/plugin-syntax-export-namespace-from@7.8.3': resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-flow@7.23.3(@babel/core@7.23.9): + '@babel/plugin-syntax-flow@7.23.3': resolution: {integrity: sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.9): + '@babel/plugin-syntax-import-assertions@7.23.3': resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.9): + '@babel/plugin-syntax-import-attributes@7.23.3': resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.9): + '@babel/plugin-syntax-import-meta@7.10.4': resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.9): + '@babel/plugin-syntax-json-strings@7.8.3': resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.9): + '@babel/plugin-syntax-jsx@7.23.3': resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.9): + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.9): + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.9): + '@babel/plugin-syntax-numeric-separator@7.10.4': resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.9): + '@babel/plugin-syntax-object-rest-spread@7.8.3': resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.9): + '@babel/plugin-syntax-optional-catch-binding@7.8.3': resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.9): + '@babel/plugin-syntax-optional-chaining@7.8.3': resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.9): + '@babel/plugin-syntax-private-property-in-object@7.14.5': resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.9): + '@babel/plugin-syntax-top-level-await@7.14.5': resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.9): + '@babel/plugin-syntax-typescript@7.23.3': resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.9): + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-arrow-functions@7.23.3': resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-async-generator-functions@7.23.9(@babel/core@7.23.9): + '@babel/plugin-transform-async-generator-functions@7.23.9': resolution: {integrity: sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.9) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.9) - dev: true - /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-async-to-generator@7.23.3': resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.9) - dev: true - /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-block-scoped-functions@7.23.3': resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.9): + '@babel/plugin-transform-block-scoping@7.23.4': resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-class-properties@7.23.3': resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.9): + '@babel/plugin-transform-class-static-block@7.23.4': resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.9) - dev: true - /@babel/plugin-transform-classes@7.23.8(@babel/core@7.23.9): + '@babel/plugin-transform-classes@7.23.8': resolution: {integrity: sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.9) - '@babel/helper-split-export-declaration': 7.22.6 - globals: 11.12.0 - dev: true - /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-computed-properties@7.23.3': resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/template': 7.23.9 - dev: true - /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-destructuring@7.23.3': resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-dotall-regex@7.23.3': resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-duplicate-keys@7.23.3': resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.9): + '@babel/plugin-transform-dynamic-import@7.23.4': resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.9) - dev: true - /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-exponentiation-operator@7.23.3': resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.9): + '@babel/plugin-transform-export-namespace-from@7.23.4': resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.9) - dev: true - /@babel/plugin-transform-flow-strip-types@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-flow-strip-types@7.23.3': resolution: {integrity: sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.9) - dev: true - /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.23.9): + '@babel/plugin-transform-for-of@7.23.6': resolution: {integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - dev: true - /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-function-name@7.23.3': resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.9): + '@babel/plugin-transform-json-strings@7.23.4': resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.9) - dev: true - /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-literals@7.23.3': resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.9): + '@babel/plugin-transform-logical-assignment-operators@7.23.4': resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.9) - dev: true - /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-member-expression-literals@7.23.3': resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-modules-amd@7.23.3': resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-modules-commonjs@7.23.3': resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-simple-access': 7.22.5 - dev: true - /@babel/plugin-transform-modules-systemjs@7.23.9(@babel/core@7.23.9): + '@babel/plugin-transform-modules-systemjs@7.23.9': resolution: {integrity: sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-identifier': 7.22.20 - dev: true - /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-modules-umd@7.23.3': resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.9): + '@babel/plugin-transform-named-capturing-groups-regex@7.22.5': resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-new-target@7.23.3': resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.9): + '@babel/plugin-transform-nullish-coalescing-operator@7.23.4': resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.9) - dev: true - /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.9): + '@babel/plugin-transform-numeric-separator@7.23.4': resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.9) - dev: true - /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.9): + '@babel/plugin-transform-object-rest-spread@7.23.4': resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.9 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.9) - dev: true - /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-object-super@7.23.3': resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.9) - dev: true - /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.9): + '@babel/plugin-transform-optional-catch-binding@7.23.4': resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.9) - dev: true - /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.9): + '@babel/plugin-transform-optional-chaining@7.23.4': resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.9) - dev: true - /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-parameters@7.23.3': resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-private-methods@7.23.3': resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.9): + '@babel/plugin-transform-private-property-in-object@7.23.4': resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.9) - dev: true - /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-property-literals@7.23.3': resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-react-jsx-self@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-react-jsx-self@7.23.3': resolution: {integrity: sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-react-jsx-source@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-react-jsx-source@7.23.3': resolution: {integrity: sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-regenerator@7.23.3': resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - regenerator-transform: 0.15.2 - dev: true - /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-reserved-words@7.23.3': resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-shorthand-properties@7.23.3': resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-spread@7.23.3': resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - dev: true - /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-sticky-regex@7.23.3': resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-template-literals@7.23.3': resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-typeof-symbol@7.23.3': resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-typescript@7.23.6(@babel/core@7.23.9): + '@babel/plugin-transform-typescript@7.23.6': resolution: {integrity: sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.9) - dev: true - /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-unicode-escapes@7.23.3': resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-unicode-property-regex@7.23.3': resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-unicode-regex@7.23.3': resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.9): + '@babel/plugin-transform-unicode-sets-regex@7.23.3': resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/preset-env@7.23.9(@babel/core@7.23.9): + '@babel/preset-env@7.23.9': resolution: {integrity: sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.9 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.7(@babel/core@7.23.9) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.9) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.9) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.9) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.9) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.9) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.9) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.9) - '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-async-generator-functions': 7.23.9(@babel/core@7.23.9) - '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.23.9) - '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.9) - '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-modules-systemjs': 7.23.9(@babel/core@7.23.9) - '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.9) - '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.9) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.9) - babel-plugin-polyfill-corejs2: 0.4.8(@babel/core@7.23.9) - babel-plugin-polyfill-corejs3: 0.9.0(@babel/core@7.23.9) - babel-plugin-polyfill-regenerator: 0.5.5(@babel/core@7.23.9) - core-js-compat: 3.35.1 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/preset-flow@7.23.3(@babel/core@7.23.9): + '@babel/preset-flow@7.23.3': resolution: {integrity: sha512-7yn6hl8RIv+KNk6iIrGZ+D06VhVY35wLVf23Cz/mMu1zOr7u4MMP4j0nZ9tLf8+4ZFpnib8cFYgB/oYg9hfswA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.23.9) - dev: true - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.9): + '@babel/preset-modules@0.1.6-no-external-plugins': resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/types': 7.23.9 - esutils: 2.0.3 - dev: true - /@babel/preset-typescript@7.23.3(@babel/core@7.23.9): + '@babel/preset-typescript@7.23.3': resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.9) - dev: true - /@babel/register@7.23.7(@babel/core@7.23.9): + '@babel/register@7.23.7': resolution: {integrity: sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - clone-deep: 4.0.1 - find-cache-dir: 2.1.0 - make-dir: 2.1.0 - pirates: 4.0.6 - source-map-support: 0.5.21 - dev: true - /@babel/regjsgen@0.8.0: + '@babel/regjsgen@0.8.0': resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} - dev: true - /@babel/runtime@7.23.9: + '@babel/runtime@7.23.9': resolution: {integrity: sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==} engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.14.1 - /@babel/template@7.23.9: + '@babel/template@7.23.9': resolution: {integrity: sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 - dev: true - /@babel/traverse@7.23.9: + '@babel/traverse@7.23.9': resolution: {integrity: sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/types@7.23.9: + '@babel/types@7.23.9': resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - dev: true - /@base2/pretty-print-object@1.0.1: + '@base2/pretty-print-object@1.0.1': resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} - dev: true - /@bundled-es-modules/cookie@2.0.0: + '@bundled-es-modules/cookie@2.0.0': resolution: {integrity: sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw==} - dependencies: - cookie: 0.5.0 - dev: true - /@bundled-es-modules/statuses@1.0.1: + '@bundled-es-modules/statuses@1.0.1': resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==} - dependencies: - statuses: 2.0.1 - dev: true - /@colors/colors@1.5.0: + '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} - requiresBuild: true - dev: true - optional: true - /@commitlint/cli@17.8.1: + '@commitlint/cli@17.8.1': resolution: {integrity: sha512-ay+WbzQesE0Rv4EQKfNbSMiJJ12KdKTDzIt0tcK4k11FdsWmtwP0Kp1NWMOUswfIWo6Eb7p7Ln721Nx9FLNBjg==} engines: {node: '>=v14'} hasBin: true - dependencies: - '@commitlint/format': 17.8.1 - '@commitlint/lint': 17.8.1 - '@commitlint/load': 17.8.1 - '@commitlint/read': 17.8.1 - '@commitlint/types': 17.8.1 - execa: 5.1.1 - lodash.isfunction: 3.0.9 - resolve-from: 5.0.0 - resolve-global: 1.0.0 - yargs: 17.7.2 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - dev: true - /@commitlint/config-conventional@17.8.1: + '@commitlint/config-conventional@17.8.1': resolution: {integrity: sha512-NxCOHx1kgneig3VLauWJcDWS40DVjg7nKOpBEEK9E5fjJpQqLCilcnKkIIjdBH98kEO1q3NpE5NSrZ2kl/QGJg==} engines: {node: '>=v14'} - dependencies: - conventional-changelog-conventionalcommits: 6.1.0 - dev: true - /@commitlint/config-validator@17.8.1: + '@commitlint/config-validator@17.8.1': resolution: {integrity: sha512-UUgUC+sNiiMwkyiuIFR7JG2cfd9t/7MV8VB4TZ+q02ZFkHoduUS4tJGsCBWvBOGD9Btev6IecPMvlWUfJorkEA==} engines: {node: '>=v14'} - dependencies: - '@commitlint/types': 17.8.1 - ajv: 8.12.0 - dev: true - /@commitlint/ensure@17.8.1: + '@commitlint/ensure@17.8.1': resolution: {integrity: sha512-xjafwKxid8s1K23NFpL8JNo6JnY/ysetKo8kegVM7c8vs+kWLP8VrQq+NbhgVlmCojhEDbzQKp4eRXSjVOGsow==} engines: {node: '>=v14'} - dependencies: - '@commitlint/types': 17.8.1 - lodash.camelcase: 4.3.0 - lodash.kebabcase: 4.1.1 - lodash.snakecase: 4.1.1 - lodash.startcase: 4.4.0 - lodash.upperfirst: 4.3.1 - dev: true - /@commitlint/execute-rule@17.8.1: + '@commitlint/execute-rule@17.8.1': resolution: {integrity: sha512-JHVupQeSdNI6xzA9SqMF+p/JjrHTcrJdI02PwesQIDCIGUrv04hicJgCcws5nzaoZbROapPs0s6zeVHoxpMwFQ==} engines: {node: '>=v14'} - dev: true - /@commitlint/format@17.8.1: + '@commitlint/format@17.8.1': resolution: {integrity: sha512-f3oMTyZ84M9ht7fb93wbCKmWxO5/kKSbwuYvS867duVomoOsgrgljkGGIztmT/srZnaiGbaK8+Wf8Ik2tSr5eg==} engines: {node: '>=v14'} - dependencies: - '@commitlint/types': 17.8.1 - chalk: 4.1.2 - dev: true - /@commitlint/is-ignored@17.8.1: + '@commitlint/is-ignored@17.8.1': resolution: {integrity: sha512-UshMi4Ltb4ZlNn4F7WtSEugFDZmctzFpmbqvpyxD3la510J+PLcnyhf9chs7EryaRFJMdAKwsEKfNK0jL/QM4g==} engines: {node: '>=v14'} - dependencies: - '@commitlint/types': 17.8.1 - semver: 7.5.4 - dev: true - /@commitlint/lint@17.8.1: + '@commitlint/lint@17.8.1': resolution: {integrity: sha512-aQUlwIR1/VMv2D4GXSk7PfL5hIaFSfy6hSHV94O8Y27T5q+DlDEgd/cZ4KmVI+MWKzFfCTiTuWqjfRSfdRllCA==} engines: {node: '>=v14'} - dependencies: - '@commitlint/is-ignored': 17.8.1 - '@commitlint/parse': 17.8.1 - '@commitlint/rules': 17.8.1 - '@commitlint/types': 17.8.1 - dev: true - /@commitlint/load@17.8.1: + '@commitlint/load@17.8.1': resolution: {integrity: sha512-iF4CL7KDFstP1kpVUkT8K2Wl17h2yx9VaR1ztTc8vzByWWcbO/WaKwxsnCOqow9tVAlzPfo1ywk9m2oJ9ucMqA==} engines: {node: '>=v14'} - dependencies: - '@commitlint/config-validator': 17.8.1 - '@commitlint/execute-rule': 17.8.1 - '@commitlint/resolve-extends': 17.8.1 - '@commitlint/types': 17.8.1 - '@types/node': 20.5.1 - chalk: 4.1.2 - cosmiconfig: 8.3.6(typescript@5.3.3) - cosmiconfig-typescript-loader: 4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6)(ts-node@10.9.2)(typescript@5.3.3) - lodash.isplainobject: 4.0.6 - lodash.merge: 4.6.2 - lodash.uniq: 4.5.0 - resolve-from: 5.0.0 - ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.3.3) - typescript: 5.3.3 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - dev: true - /@commitlint/message@17.8.1: + '@commitlint/message@17.8.1': resolution: {integrity: sha512-6bYL1GUQsD6bLhTH3QQty8pVFoETfFQlMn2Nzmz3AOLqRVfNNtXBaSY0dhZ0dM6A2MEq4+2d7L/2LP8TjqGRkA==} engines: {node: '>=v14'} - dev: true - /@commitlint/parse@17.8.1: + '@commitlint/parse@17.8.1': resolution: {integrity: sha512-/wLUickTo0rNpQgWwLPavTm7WbwkZoBy3X8PpkUmlSmQJyWQTj0m6bDjiykMaDt41qcUbfeFfaCvXfiR4EGnfw==} engines: {node: '>=v14'} - dependencies: - '@commitlint/types': 17.8.1 - conventional-changelog-angular: 6.0.0 - conventional-commits-parser: 4.0.0 - dev: true - /@commitlint/read@17.8.1: + '@commitlint/read@17.8.1': resolution: {integrity: sha512-Fd55Oaz9irzBESPCdMd8vWWgxsW3OWR99wOntBDHgf9h7Y6OOHjWEdS9Xzen1GFndqgyoaFplQS5y7KZe0kO2w==} engines: {node: '>=v14'} - dependencies: - '@commitlint/top-level': 17.8.1 - '@commitlint/types': 17.8.1 - fs-extra: 11.2.0 - git-raw-commits: 2.0.11 - minimist: 1.2.8 - dev: true - /@commitlint/resolve-extends@17.8.1: + '@commitlint/resolve-extends@17.8.1': resolution: {integrity: sha512-W/ryRoQ0TSVXqJrx5SGkaYuAaE/BUontL1j1HsKckvM6e5ZaG0M9126zcwL6peKSuIetJi7E87PRQF8O86EW0Q==} engines: {node: '>=v14'} - dependencies: - '@commitlint/config-validator': 17.8.1 - '@commitlint/types': 17.8.1 - import-fresh: 3.3.0 - lodash.mergewith: 4.6.2 - resolve-from: 5.0.0 - resolve-global: 1.0.0 - dev: true - /@commitlint/rules@17.8.1: + '@commitlint/rules@17.8.1': resolution: {integrity: sha512-2b7OdVbN7MTAt9U0vKOYKCDsOvESVXxQmrvuVUZ0rGFMCrCPJWWP1GJ7f0lAypbDAhaGb8zqtdOr47192LBrIA==} engines: {node: '>=v14'} - dependencies: - '@commitlint/ensure': 17.8.1 - '@commitlint/message': 17.8.1 - '@commitlint/to-lines': 17.8.1 - '@commitlint/types': 17.8.1 - execa: 5.1.1 - dev: true - /@commitlint/to-lines@17.8.1: + '@commitlint/to-lines@17.8.1': resolution: {integrity: sha512-LE0jb8CuR/mj6xJyrIk8VLz03OEzXFgLdivBytoooKO5xLt5yalc8Ma5guTWobw998sbR3ogDd+2jed03CFmJA==} engines: {node: '>=v14'} - dev: true - /@commitlint/top-level@17.8.1: + '@commitlint/top-level@17.8.1': resolution: {integrity: sha512-l6+Z6rrNf5p333SHfEte6r+WkOxGlWK4bLuZKbtf/2TXRN+qhrvn1XE63VhD8Oe9oIHQ7F7W1nG2k/TJFhx2yA==} engines: {node: '>=v14'} - dependencies: - find-up: 5.0.0 - dev: true - /@commitlint/types@17.8.1: + '@commitlint/types@17.8.1': resolution: {integrity: sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==} engines: {node: '>=v14'} - dependencies: - chalk: 4.1.2 - dev: true - /@cspotcode/source-map-support@0.8.1: + '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - dev: true - /@discoveryjs/json-ext@0.5.7: + '@discoveryjs/json-ext@0.5.7': resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} - dev: true - /@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0): + '@emotion/use-insertion-effect-with-fallbacks@1.0.1': resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} peerDependencies: react: '>=16.8.0' - dependencies: - react: 18.2.0 - dev: true - /@esbuild/android-arm64@0.18.20: + '@esbuild/android-arm64@0.18.20': resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} cpu: [arm64] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm@0.18.20: + '@esbuild/android-arm@0.18.20': resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} engines: {node: '>=12'} cpu: [arm] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-x64@0.18.20: + '@esbuild/android-x64@0.18.20': resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} engines: {node: '>=12'} cpu: [x64] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-arm64@0.18.20: + '@esbuild/darwin-arm64@0.18.20': resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-x64@0.18.20: + '@esbuild/darwin-x64@0.18.20': resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} engines: {node: '>=12'} cpu: [x64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-arm64@0.18.20: + '@esbuild/freebsd-arm64@0.18.20': resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-x64@0.18.20: + '@esbuild/freebsd-x64@0.18.20': resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm64@0.18.20: + '@esbuild/linux-arm64@0.18.20': resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} engines: {node: '>=12'} cpu: [arm64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm@0.18.20: + '@esbuild/linux-arm@0.18.20': resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} engines: {node: '>=12'} cpu: [arm] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ia32@0.18.20: + '@esbuild/linux-ia32@0.18.20': resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} engines: {node: '>=12'} cpu: [ia32] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-loong64@0.18.20: + '@esbuild/linux-loong64@0.18.20': resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-mips64el@0.18.20: + '@esbuild/linux-mips64el@0.18.20': resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ppc64@0.18.20: + '@esbuild/linux-ppc64@0.18.20': resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-riscv64@0.18.20: + '@esbuild/linux-riscv64@0.18.20': resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-s390x@0.18.20: + '@esbuild/linux-s390x@0.18.20': resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} engines: {node: '>=12'} cpu: [s390x] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-x64@0.18.20: + '@esbuild/linux-x64@0.18.20': resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} engines: {node: '>=12'} cpu: [x64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/netbsd-x64@0.18.20: + '@esbuild/netbsd-x64@0.18.20': resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/openbsd-x64@0.18.20: + '@esbuild/openbsd-x64@0.18.20': resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/sunos-x64@0.18.20: + '@esbuild/sunos-x64@0.18.20': resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} engines: {node: '>=12'} cpu: [x64] os: [sunos] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-arm64@0.18.20: + '@esbuild/win32-arm64@0.18.20': resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-ia32@0.18.20: + '@esbuild/win32-ia32@0.18.20': resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} engines: {node: '>=12'} cpu: [ia32] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-x64@0.18.20: + '@esbuild/win32-x64@0.18.20': resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} engines: {node: '>=12'} cpu: [x64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): + '@eslint-community/eslint-utils@4.4.0': resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.56.0 - eslint-visitor-keys: 3.4.3 - dev: true - /@eslint-community/regexpp@4.10.0: + '@eslint-community/regexpp@4.10.0': resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true - /@eslint/eslintrc@2.1.4: + '@eslint/eslintrc@2.1.4': resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.0 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: true - /@eslint/js@8.56.0: + '@eslint/js@8.56.0': resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - /@faker-js/faker@8.4.0: + '@faker-js/faker@8.4.0': resolution: {integrity: sha512-htW87352wzUCdX1jyUQocUcmAaFqcR/w082EC8iP/gtkF0K+aKcBp0hR5Arb7dzR8tQ1TrhE9DNa5EbJELm84w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0, npm: '>=6.14.13'} - dev: true - /@fal-works/esbuild-plugin-global-externals@2.1.2: + '@fal-works/esbuild-plugin-global-externals@2.1.2': resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==} - dev: true - /@floating-ui/core@1.6.0: + '@floating-ui/core@1.6.0': resolution: {integrity: sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==} - dependencies: - '@floating-ui/utils': 0.2.1 - /@floating-ui/dom@1.6.1: + '@floating-ui/dom@1.6.1': resolution: {integrity: sha512-iA8qE43/H5iGozC3W0YSnVSW42Vh522yyM1gj+BqRwVsTNOyr231PsXDaV04yT39PsO0QL2QpbI/M0ZaLUQgRQ==} - dependencies: - '@floating-ui/core': 1.6.0 - '@floating-ui/utils': 0.2.1 - /@floating-ui/react-dom@2.0.8(react-dom@18.2.0)(react@18.2.0): + '@floating-ui/react-dom@2.0.8': resolution: {integrity: sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' - dependencies: - '@floating-ui/dom': 1.6.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - /@floating-ui/utils@0.2.1: + '@floating-ui/utils@0.2.1': resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} - /@humanwhocodes/config-array@0.11.14: + '@humanwhocodes/config-array@0.11.14': resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} - dependencies: - '@humanwhocodes/object-schema': 2.0.2 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - dev: true - /@humanwhocodes/module-importer@1.0.1: + '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - dev: true - /@humanwhocodes/object-schema@2.0.2: + '@humanwhocodes/object-schema@2.0.2': resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} - dev: true - /@inquirer/confirm@3.1.1: + '@inquirer/confirm@3.1.1': resolution: {integrity: sha512-epf2RVHJJxX5qF85U41PBq9qq2KTJW9sKNLx6+bb2/i2rjXgeoHVGUm8kJxZHavrESgXgBLKCABcfOJYIso8cQ==} engines: {node: '>=18'} - dependencies: - '@inquirer/core': 7.1.1 - '@inquirer/type': 1.2.1 - dev: true - /@inquirer/core@7.1.1: + '@inquirer/core@7.1.1': resolution: {integrity: sha512-rD1UI3eARN9qJBcLRXPOaZu++Bg+xsk0Tuz1EUOXEW+UbYif1sGjr0Tw7lKejHzKD9IbXE1CEtZ+xR/DrNlQGQ==} engines: {node: '>=18'} - dependencies: - '@inquirer/type': 1.2.1 - '@types/mute-stream': 0.0.4 - '@types/node': 20.12.4 - '@types/wrap-ansi': 3.0.0 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - cli-spinners: 2.9.2 - cli-width: 4.1.0 - figures: 3.2.0 - mute-stream: 1.0.0 - signal-exit: 4.1.0 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - dev: true - /@inquirer/type@1.2.1: + '@inquirer/type@1.2.1': resolution: {integrity: sha512-xwMfkPAxeo8Ji/IxfUSqzRi0/+F2GIqJmpc5/thelgMGsjNZcjDDRBO9TLXT1s/hdx/mK5QbVIvgoLIFgXhTMQ==} engines: {node: '>=18'} - dev: true - /@isaacs/cliui@8.0.2: + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} - dependencies: - string-width: 5.1.2 - string-width-cjs: /string-width@4.2.3 - strip-ansi: 7.1.0 - strip-ansi-cjs: /strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: /wrap-ansi@7.0.0 - dev: true - /@istanbuljs/load-nyc-config@1.1.0: + '@istanbuljs/load-nyc-config@1.1.0': resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} - dependencies: - camelcase: 5.3.1 - find-up: 4.1.0 - get-package-type: 0.1.0 - js-yaml: 3.14.1 - resolve-from: 5.0.0 - dev: true - /@istanbuljs/schema@0.1.3: + '@istanbuljs/schema@0.1.3': resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - dev: true - /@jest/schemas@29.6.3: + '@jest/schemas@29.6.3': resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@sinclair/typebox': 0.27.8 - dev: true - /@jest/transform@29.7.0: + '@jest/transform@29.7.0': resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@babel/core': 7.23.9 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.22 - babel-plugin-istanbul: 6.1.1 - chalk: 4.1.2 - convert-source-map: 2.0.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - micromatch: 4.0.5 - pirates: 4.0.6 - slash: 3.0.0 - write-file-atomic: 4.0.2 - transitivePeerDependencies: - - supports-color - dev: true - /@jest/types@27.5.1: + '@jest/types@27.5.1': resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 20.11.14 - '@types/yargs': 16.0.9 - chalk: 4.1.2 - dev: true - /@jest/types@29.6.3: + '@jest/types@29.6.3': resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 20.11.14 - '@types/yargs': 17.0.32 - chalk: 4.1.2 - dev: true - /@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.3.3)(vite@4.5.2): + '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0': resolution: {integrity: sha512-2D6y7fNvFmsLmRt6UCOFJPvFoPMJGT0Uh1Wg0RaigUp7kdQPs6yYn8Dmx6GZkOH/NW0yMTwRz/p0SRMMRo50vA==} peerDependencies: typescript: '>= 4.3.x' @@ -2107,151 +1164,83 @@ packages: peerDependenciesMeta: typescript: optional: true - dependencies: - glob: 7.2.3 - glob-promise: 4.2.2(glob@7.2.3) - magic-string: 0.27.0 - react-docgen-typescript: 2.2.2(typescript@5.3.3) - typescript: 5.3.3 - vite: 4.5.2(@types/node@20.5.1) - dev: true - /@jridgewell/gen-mapping@0.3.3: + '@jridgewell/gen-mapping@0.3.3': resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.22 - dev: true - /@jridgewell/resolve-uri@3.1.1: + '@jridgewell/resolve-uri@3.1.1': resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} - dev: true - /@jridgewell/set-array@1.1.2: + '@jridgewell/set-array@1.1.2': resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} - dev: true - /@jridgewell/sourcemap-codec@1.4.15: + '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true - /@jridgewell/trace-mapping@0.3.22: + '@jridgewell/trace-mapping@0.3.22': resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==} - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - /@jridgewell/trace-mapping@0.3.9: + '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - /@juggle/resize-observer@3.4.0: + '@juggle/resize-observer@3.4.0': resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} - dev: true - /@mdx-js/react@2.3.0(react@18.2.0): + '@mdx-js/react@2.3.0': resolution: {integrity: sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==} peerDependencies: react: '>=16' - dependencies: - '@types/mdx': 2.0.11 - '@types/react': 18.2.48 - react: 18.2.0 - dev: true - /@mswjs/cookies@1.1.0: + '@mswjs/cookies@1.1.0': resolution: {integrity: sha512-0ZcCVQxifZmhwNBoQIrystCb+2sWBY2Zw8lpfJBPCHGCA/HWqehITeCRVIv4VMy8MPlaHo2w2pTHFV2pFfqKPw==} engines: {node: '>=18'} - dev: true - /@mswjs/interceptors@0.26.15: + '@mswjs/interceptors@0.26.15': resolution: {integrity: sha512-HM47Lu1YFmnYHKMBynFfjCp0U/yRskHj/8QEJW0CBEPOlw8Gkmjfll+S9b8M7V5CNDw2/ciRxjjnWeaCiblSIQ==} engines: {node: '>=18'} - dependencies: - '@open-draft/deferred-promise': 2.2.0 - '@open-draft/logger': 0.3.0 - '@open-draft/until': 2.1.0 - is-node-process: 1.2.0 - outvariant: 1.4.2 - strict-event-emitter: 0.5.1 - dev: true - /@ndelangen/get-tarball@3.0.9: + '@ndelangen/get-tarball@3.0.9': resolution: {integrity: sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA==} - dependencies: - gunzip-maybe: 1.4.2 - pump: 3.0.0 - tar-fs: 2.1.1 - dev: true - /@nodelib/fs.scandir@2.1.5: + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - dev: true - /@nodelib/fs.stat@2.0.5: + '@nodelib/fs.stat@2.0.5': resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} - dev: true - /@nodelib/fs.walk@1.2.8: + '@nodelib/fs.walk@1.2.8': resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.0 - dev: true - /@open-draft/deferred-promise@2.2.0: + '@open-draft/deferred-promise@2.2.0': resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} - dev: true - /@open-draft/logger@0.3.0: + '@open-draft/logger@0.3.0': resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} - dependencies: - is-node-process: 1.2.0 - outvariant: 1.4.2 - dev: true - /@open-draft/until@2.1.0: + '@open-draft/until@2.1.0': resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - dev: true - /@pkgjs/parseargs@0.11.0: + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - requiresBuild: true - dev: true - optional: true - /@pkgr/core@0.1.1: + '@pkgr/core@0.1.1': resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - dev: true - /@radix-ui/number@1.0.1: + '@radix-ui/number@1.0.1': resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==} - dependencies: - '@babel/runtime': 7.23.9 - dev: true - /@radix-ui/primitive@1.0.1: + '@radix-ui/primitive@1.0.1': resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} - dependencies: - '@babel/runtime': 7.23.9 - /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): + '@radix-ui/react-arrow@1.0.3': resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} peerDependencies: '@types/react': '*' @@ -2263,15 +1252,8 @@ packages: optional: true '@types/react-dom': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.48 - '@types/react-dom': 18.2.18 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - /@radix-ui/react-avatar@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): + '@radix-ui/react-avatar@1.0.4': resolution: {integrity: sha512-kVK2K7ZD3wwj3qhle0ElXhOjbezIgyl2hVvgwfIdexL3rN6zJmy5AqqIf+D31lxVppdzV8CjAfZ6PklkmInZLw==} peerDependencies: '@types/react': '*' @@ -2283,19 +1265,8 @@ packages: optional: true '@types/react-dom': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 - '@types/react-dom': 18.2.18 - 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.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): + '@radix-ui/react-collection@1.0.3': resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} peerDependencies: '@types/react': '*' @@ -2307,18 +1278,8 @@ packages: optional: true '@types/react-dom': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 - '@types/react-dom': 18.2.18 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.48)(react@18.2.0): + '@radix-ui/react-compose-refs@1.0.1': resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} peerDependencies: '@types/react': '*' @@ -2326,12 +1287,8 @@ packages: peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@types/react': 18.2.48 - react: 18.2.0 - /@radix-ui/react-context@1.0.1(@types/react@18.2.48)(react@18.2.0): + '@radix-ui/react-context@1.0.1': resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} peerDependencies: '@types/react': '*' @@ -2339,12 +1296,8 @@ packages: peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@types/react': 18.2.48 - react: 18.2.0 - /@radix-ui/react-dialog@1.0.5(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): + '@radix-ui/react-dialog@1.0.5': resolution: {integrity: sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==} peerDependencies: '@types/react': '*' @@ -2356,29 +1309,8 @@ packages: optional: true '@types/react-dom': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 - '@types/react-dom': 18.2.18 - 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.48)(react@18.2.0) - dev: false - /@radix-ui/react-direction@1.0.1(@types/react@18.2.48)(react@18.2.0): + '@radix-ui/react-direction@1.0.1': resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} peerDependencies: '@types/react': '*' @@ -2386,12 +1318,8 @@ packages: peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@types/react': 18.2.48 - react: 18.2.0 - /@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): + '@radix-ui/react-dismissable-layer@1.0.4': resolution: {integrity: sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==} peerDependencies: '@types/react': '*' @@ -2403,20 +1331,8 @@ packages: optional: true '@types/react-dom': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 - '@types/react-dom': 18.2.18 - 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.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): + '@radix-ui/react-dismissable-layer@1.0.5': resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==} peerDependencies: '@types/react': '*' @@ -2428,20 +1344,8 @@ packages: optional: true '@types/react-dom': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 - '@types/react-dom': 18.2.18 - 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.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): + '@radix-ui/react-dropdown-menu@2.0.6': resolution: {integrity: sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA==} peerDependencies: '@types/react': '*' @@ -2453,22 +1357,8 @@ packages: optional: true '@types/react-dom': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-menu': 2.0.6(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 - '@types/react-dom': 18.2.18 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - /@radix-ui/react-focus-guards@1.0.1(@types/react@18.2.48)(react@18.2.0): + '@radix-ui/react-focus-guards@1.0.1': resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} peerDependencies: '@types/react': '*' @@ -2476,12 +1366,8 @@ packages: peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@types/react': 18.2.48 - react: 18.2.0 - /@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): + '@radix-ui/react-focus-scope@1.0.3': resolution: {integrity: sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==} peerDependencies: '@types/react': '*' @@ -2493,18 +1379,8 @@ packages: optional: true '@types/react-dom': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 - '@types/react-dom': 18.2.18 - 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.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): + '@radix-ui/react-focus-scope@1.0.4': resolution: {integrity: sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==} peerDependencies: '@types/react': '*' @@ -2516,18 +1392,8 @@ packages: optional: true '@types/react-dom': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 - '@types/react-dom': 18.2.18 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - /@radix-ui/react-id@1.0.1(@types/react@18.2.48)(react@18.2.0): + '@radix-ui/react-id@1.0.1': resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} peerDependencies: '@types/react': '*' @@ -2535,13 +1401,8 @@ packages: peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 - react: 18.2.0 - /@radix-ui/react-label@2.0.2(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): + '@radix-ui/react-label@2.0.2': resolution: {integrity: sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==} peerDependencies: '@types/react': '*' @@ -2553,16 +1414,8 @@ packages: optional: true '@types/react-dom': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.48 - '@types/react-dom': 18.2.18 - 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.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): + '@radix-ui/react-menu@2.0.6': resolution: {integrity: sha512-BVkFLS+bUC8HcImkRKPSiVumA1VPOOEC5WBMiT+QAVsPzW1FJzI9KnqgGxVDPBcql5xXrHkD3JOVoXWEXD8SYA==} peerDependencies: '@types/react': '*' @@ -2574,33 +1427,8 @@ packages: optional: true '@types/react-dom': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 - '@types/react-dom': 18.2.18 - 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.48)(react@18.2.0) - dev: false - /@radix-ui/react-popover@1.0.7(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): + '@radix-ui/react-popover@1.0.7': resolution: {integrity: sha512-shtvVnlsxT6faMnK/a7n0wptwBD23xc1Z5mdrtKLwVEfsEMXodS0r5s0/g5P0hX//EKYZS2sxUjqfzlg52ZSnQ==} peerDependencies: '@types/react': '*' @@ -2612,30 +1440,8 @@ packages: optional: true '@types/react-dom': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 - '@types/react-dom': 18.2.18 - 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.48)(react@18.2.0) - dev: false - /@radix-ui/react-popper@1.1.2(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): + '@radix-ui/react-popper@1.1.2': resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==} peerDependencies: '@types/react': '*' @@ -2647,25 +1453,8 @@ packages: optional: true '@types/react-dom': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@floating-ui/react-dom': 2.0.8(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/rect': 1.0.1 - '@types/react': 18.2.48 - '@types/react-dom': 18.2.18 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - /@radix-ui/react-popper@1.1.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): + '@radix-ui/react-popper@1.1.3': resolution: {integrity: sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==} peerDependencies: '@types/react': '*' @@ -2677,25 +1466,8 @@ packages: optional: true '@types/react-dom': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@floating-ui/react-dom': 2.0.8(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/rect': 1.0.1 - '@types/react': 18.2.48 - '@types/react-dom': 18.2.18 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - /@radix-ui/react-portal@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): + '@radix-ui/react-portal@1.0.3': resolution: {integrity: sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==} peerDependencies: '@types/react': '*' @@ -2707,16 +1479,8 @@ packages: optional: true '@types/react-dom': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.48 - '@types/react-dom': 18.2.18 - 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.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): + '@radix-ui/react-portal@1.0.4': resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==} peerDependencies: '@types/react': '*' @@ -2728,16 +1492,8 @@ packages: optional: true '@types/react-dom': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.48 - '@types/react-dom': 18.2.18 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - /@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): + '@radix-ui/react-presence@1.0.1': resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} peerDependencies: '@types/react': '*' @@ -2749,17 +1505,8 @@ packages: optional: true '@types/react-dom': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 - '@types/react-dom': 18.2.18 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): + '@radix-ui/react-primitive@1.0.3': resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} peerDependencies: '@types/react': '*' @@ -2771,15 +1518,8 @@ packages: optional: true '@types/react-dom': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 - '@types/react-dom': 18.2.18 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): + '@radix-ui/react-roving-focus@1.0.4': resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} peerDependencies: '@types/react': '*' @@ -2791,23 +1531,8 @@ packages: optional: true '@types/react-dom': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 - '@types/react-dom': 18.2.18 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - /@radix-ui/react-select@1.2.2(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): + '@radix-ui/react-select@1.2.2': resolution: {integrity: sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw==} peerDependencies: '@types/react': '*' @@ -2819,36 +1544,8 @@ packages: optional: true '@types/react-dom': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@radix-ui/number': 1.0.1 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.48 - '@types/react-dom': 18.2.18 - 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.48)(react@18.2.0) - dev: true - /@radix-ui/react-separator@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): + '@radix-ui/react-separator@1.0.3': resolution: {integrity: sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw==} peerDependencies: '@types/react': '*' @@ -2860,16 +1557,8 @@ packages: optional: true '@types/react-dom': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.48 - '@types/react-dom': 18.2.18 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - /@radix-ui/react-slot@1.0.2(@types/react@18.2.48)(react@18.2.0): + '@radix-ui/react-slot@1.0.2': resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} peerDependencies: '@types/react': '*' @@ -2877,13 +1566,8 @@ packages: peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 - react: 18.2.0 - /@radix-ui/react-tabs@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): + '@radix-ui/react-tabs@1.0.4': resolution: {integrity: sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog==} peerDependencies: '@types/react': '*' @@ -2895,23 +1579,8 @@ packages: optional: true '@types/react-dom': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 - '@types/react-dom': 18.2.18 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - /@radix-ui/react-toggle-group@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): + '@radix-ui/react-toggle-group@1.0.4': resolution: {integrity: sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A==} peerDependencies: '@types/react': '*' @@ -2923,22 +1592,8 @@ packages: optional: true '@types/react-dom': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-toggle': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 - '@types/react-dom': 18.2.18 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - /@radix-ui/react-toggle@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): + '@radix-ui/react-toggle@1.0.3': resolution: {integrity: sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg==} peerDependencies: '@types/react': '*' @@ -2950,18 +1605,8 @@ packages: optional: true '@types/react-dom': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 - '@types/react-dom': 18.2.18 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - /@radix-ui/react-toolbar@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): + '@radix-ui/react-toolbar@1.0.4': resolution: {integrity: sha512-tBgmM/O7a07xbaEkYJWYTXkIdU/1pW4/KZORR43toC/4XWyBCURK0ei9kMUdp+gTPPKBgYLxXmRSH1EVcIDp8Q==} peerDependencies: '@types/react': '*' @@ -2973,22 +1618,8 @@ packages: optional: true '@types/react-dom': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-separator': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-toggle-group': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.48 - '@types/react-dom': 18.2.18 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - /@radix-ui/react-tooltip@1.0.7(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): + '@radix-ui/react-tooltip@1.0.7': resolution: {integrity: sha512-lPh5iKNFVQ/jav/j6ZrWq3blfDJ0OH9R6FlNUHPMqdLuQ9vwDgFsRxvl8b7Asuy5c8xmoojHUxKHQSOAvMHxyw==} peerDependencies: '@types/react': '*' @@ -3000,27 +1631,8 @@ packages: optional: true '@types/react-dom': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.48 - '@types/react-dom': 18.2.18 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.48)(react@18.2.0): + '@radix-ui/react-use-callback-ref@1.0.1': resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} peerDependencies: '@types/react': '*' @@ -3028,12 +1640,8 @@ packages: peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@types/react': 18.2.48 - react: 18.2.0 - /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.48)(react@18.2.0): + '@radix-ui/react-use-controllable-state@1.0.1': resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} peerDependencies: '@types/react': '*' @@ -3041,13 +1649,8 @@ packages: peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 - react: 18.2.0 - /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.48)(react@18.2.0): + '@radix-ui/react-use-escape-keydown@1.0.3': resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} peerDependencies: '@types/react': '*' @@ -3055,13 +1658,8 @@ packages: peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 - react: 18.2.0 - /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.48)(react@18.2.0): + '@radix-ui/react-use-layout-effect@1.0.1': resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} peerDependencies: '@types/react': '*' @@ -3069,12 +1667,8 @@ packages: peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@babel/runtime': 7.23.9 - '@types/react': 18.2.48 - react: 18.2.0 - /@radix-ui/react-use-previous@1.0.1(@types/react@18.2.48)(react@18.2.0): + '@radix-ui/react-use-previous@1.0.1': resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} peerDependencies: '@types/react': '*' @@ -3082,90 +1676,5652 @@ packages: peerDependenciesMeta: '@types/react': optional: true + + '@radix-ui/react-use-rect@1.0.1': + resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-size@1.0.1': + resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-visually-hidden@1.0.3': + resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} + 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 + + '@radix-ui/rect@1.0.1': + resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} + + '@remix-run/router@1.14.2': + resolution: {integrity: sha512-ACXpdMM9hmKZww21yEqWwiLws/UPLhNKvimN8RrYSqPSvB3ov7sLvAcfvaxePeLvccTQKGdkDIhLYApZVDFuKg==} + engines: {node: '>=14.0.0'} + + '@rollup/pluginutils@5.1.0': + resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + + '@storybook/addon-actions@7.6.12': + resolution: {integrity: sha512-vK/H6K+AJ4ZSsCu/+MapYYI/xrynB6JoCOejt//flTigZOhwTWv7WXbmEeqGIIToXy0LA2IUZ1/kCjFXR0lEdQ==} + + '@storybook/addon-backgrounds@7.6.12': + resolution: {integrity: sha512-G14uN5lDXUtXw+dmEPaB6lpDpR9K25ssYuWWn8yYR44B1WMuD4kDgw0QGb0g+xYQj9R1TsalKEJHA4AuSYkVGQ==} + + '@storybook/addon-controls@7.6.12': + resolution: {integrity: sha512-NX4KajscOsuXyYE3hhniF+y0E59E6rM0FgIaZ48P9c0DD+wDo8bAISHjZvmKXtDVajLk4/JySvByx1eN6V3hmA==} + + '@storybook/addon-docs@7.6.12': + resolution: {integrity: sha512-AzMgnGYfEg+Z1ycJh8MEp44x1DfjRijKCVYNaPFT6o+TjN/9GBaAkV4ydxmQzMEMnnnh/0E9YeHO+ivBVSkNog==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + + '@storybook/addon-essentials@7.6.12': + resolution: {integrity: sha512-Pl6n+19QC/T+cuU8DZjCwILXVxrdRTivNxPOiy8SEX+jjR4H0uAfXC9+RXCPjRFn64t4j1K7oIyoNokEn39cNw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + + '@storybook/addon-highlight@7.6.12': + resolution: {integrity: sha512-rWNEyBhwncXEDd9z7l67BLBIPqn0SRI/CJpZvCSF5KLWrVaoSEDF8INavmbikd1JBMcajJ28Ur6NsGj+eJjJiw==} + + '@storybook/addon-interactions@7.6.12': + resolution: {integrity: sha512-D8NX2xu9WiqPInoN842DU+KAFVC8HscGczqkDGEiWCAqq0DfXtW/0ClMSaE6d2+twhGv6uiPfeJ2IdynSZolXg==} + + '@storybook/addon-links@7.6.12': + resolution: {integrity: sha512-rGwPYpZAANPrf2GaNi5t9zAjLF8PgzKizyBPltIXUtplxDg88ziXlDA1dhsuGDs4Kf0oXECyAHPw79JjkJQziA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + + '@storybook/addon-measure@7.6.12': + resolution: {integrity: sha512-K3aKErr84V0eVK7t+wco5cSYDdeotwoXi4e7VLSa2cdUz0wanOb4R7v3kf6vxucUyp05Lv+yHkz9zsbwuezepA==} + + '@storybook/addon-outline@7.6.12': + resolution: {integrity: sha512-r6eO4EKh+zwGUNjxe8v/44BhyV+JD3Dl9GYMutsFqbwYsoWHJaZmzHuyqeFBXwx2MEoixdWdIzNMP71+srQqvw==} + + '@storybook/addon-themes@7.6.12': + resolution: {integrity: sha512-3NwkWsbXxNtsrsnyVzjBDAR3Y1A/laojELmS4EOWl5BID/n4erDVF36KmGLvh8HuY9GidHaRnwsCClJCZXExsg==} + + '@storybook/addon-toolbars@7.6.12': + resolution: {integrity: sha512-TSwq8xO7fmS6GRTgJJa31OBzm+5zlgDYK2Q42jxFo/Vm10uMzCpjYJE6mIHpUDyjyBVQk6xxMMEcvo6no2eAWg==} + + '@storybook/addon-viewport@7.6.12': + resolution: {integrity: sha512-51zsBeoaEzq699SKDCe+GG/2PDAJKKJtpjqxIc4lDskogaCJSb3Ie8LyookHAKYgbi2qealVgK8zaP27KUj3Pg==} + + '@storybook/blocks@7.6.12': + resolution: {integrity: sha512-T47KOAjgZmhV+Ov59A70inE5edInh1Jh5w/5J5cjpk9a2p4uhd337SnK4B8J5YLhcM2lbKRWJjzIJ0nDZQTdnQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + + '@storybook/builder-manager@7.6.12': + resolution: {integrity: sha512-AJFrtBj0R11OFwwz+2j+ivRzttWXT6LesSGoLnxown24EV9uLQoHtGb7GOA2GyzY5wjUJS9gQBPGHXjvQEfLJA==} + + '@storybook/builder-vite@7.6.12': + resolution: {integrity: sha512-VJIn+XYVVhdJHHMEtYDnEyQQU4fRupugSFpP9XLYTRYgXPN9PSVey4vI/IyuHcHYINPba39UY2+8PW+5NgShxQ==} + peerDependencies: + '@preact/preset-vite': '*' + typescript: '>= 4.3.x' + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 + vite-plugin-glimmerx: '*' + peerDependenciesMeta: + '@preact/preset-vite': + optional: true + typescript: + optional: true + vite-plugin-glimmerx: + optional: true + + '@storybook/channels@7.6.12': + resolution: {integrity: sha512-TaPl5Y3lOoVi5kTLgKNRX8xh2sUPekH0Id1l4Ymw+lpgriEY6r60bmkZLysLG1GhlskpQ/da2+S2ap2ht8P2TQ==} + + '@storybook/cli@7.6.12': + resolution: {integrity: sha512-x4sG1oIVERxp+WnWUexVlgaJCFmML0kGi7a5qfx7z4vHMxCV/WG7g1q7mPS/kqStCGEiQdTciCqOEFqlMh9MLw==} + hasBin: true + + '@storybook/client-logger@7.6.12': + resolution: {integrity: sha512-hiRv6dXsOttMPqm9SxEuFoAtDe9rs7TUS8XcO5rmJ9BgfwBJsYlHzAxXkazxmvlyZtKL7gMx6m8OYbCdZgUqtA==} + + '@storybook/codemod@7.6.12': + resolution: {integrity: sha512-4EI4Ah1cvz6gFkXOS/LGf23oN8LO6ABGpWwPQoMHpIV3wUkFWBwrKFUe/UAQZGptnM0VZRYx4grS82Hluw4XJA==} + + '@storybook/components@7.6.12': + resolution: {integrity: sha512-PCijPqmlZd7qyTzNr+vD0Kf8sAI9vWJIaxbSjXwn/De3e63m4fsEcIf8FaUT8cMZ46AWZvaxaxX5km2u0UISJQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + + '@storybook/core-client@7.6.12': + resolution: {integrity: sha512-VzVp32tMZsCzM4UIqfvCoJF7N9mBf6dsAxh1/ZgViy75Fht78pGo3JwZXW8osMbFSRpmWD7fxlUM5S7TQOYQug==} + + '@storybook/core-common@7.6.12': + resolution: {integrity: sha512-kM9YiBBMM2x5v/oylL7gdO1PS4oehgJC21MivS9p5QZ8uuXKtCQ6UQvI3rzaV+1ZzUA4n+I8MyaMrNIQk8KDbw==} + + '@storybook/core-events@7.6.12': + resolution: {integrity: sha512-IO4cwk7bBCKH6lLnnIlHO9FwQXt/9CzLUAoZSY9msWsdPppCdKlw8ynJI5YarSNKDBUn8ArIfnRf0Mve0KQr9Q==} + + '@storybook/core-server@7.6.12': + resolution: {integrity: sha512-tjWifKsDnIc8pvbjVyQrOHef70Gcp93Bg3WwuysB8PGk7lcX2RD9zv44HNIyjxdOLSSv66IGKrOldEBL3hab4w==} + + '@storybook/csf-plugin@7.6.12': + resolution: {integrity: sha512-fe/84AyctJcrpH1F/tTBxKrbjv0ilmG3ZTwVcufEiAzupZuYjQ/0P+Pxs8m8VxiGJZZ1pWofFFDbYi+wERjamQ==} + + '@storybook/csf-tools@7.6.12': + resolution: {integrity: sha512-MdhkYYxSW5I6Jpk34gTkAZsuj9sxe0xdyeUQpNa8CgJxG43F+ehZ6scW/IPjoSG9gCXBUJMekq26UrmbVfsLCQ==} + + '@storybook/csf@0.0.1': + resolution: {integrity: sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==} + + '@storybook/csf@0.1.2': + resolution: {integrity: sha512-ePrvE/pS1vsKR9Xr+o+YwdqNgHUyXvg+1Xjx0h9LrVx7Zq4zNe06pd63F5EvzTbCbJsHj7GHr9tkiaqm7U8WRA==} + + '@storybook/docs-mdx@0.1.0': + resolution: {integrity: sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg==} + + '@storybook/docs-tools@7.6.12': + resolution: {integrity: sha512-nY2lqEDTd/fR/D91ZLlIp+boSuJtkb8DqHW7pECy61rJqzGq4QpepRaWjQDKnGTgPItrsPfTPOu6iXvXNK07Ow==} + + '@storybook/global@5.0.0': + resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} + + '@storybook/manager-api@7.6.12': + resolution: {integrity: sha512-XA5KQpY44d6mlqt0AlesZ7fsPpm1PCpoV+nRGFBR0YtF6RdPFvrPyHhlGgLkJC4xSyb2YJmLKn8cERSluAcEgQ==} + + '@storybook/manager@7.6.12': + resolution: {integrity: sha512-WMWvswJHGiqJFJb98WQMQfZQhLuVtmci4y/VJGQ/Jnq1nJQs76BCtaeGiHcsYmRaAP1HMI4DbzuTSEgca146xw==} + + '@storybook/mdx2-csf@1.1.0': + resolution: {integrity: sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw==} + + '@storybook/node-logger@7.6.12': + resolution: {integrity: sha512-iS44/EjfF6hLecKzICmcpQoB9bmVi4tXx5gVXnbI5ZyziBibRQcg/U191Njl7wY2ScN/RCQOr8lh5k57rI3Prg==} + + '@storybook/postinstall@7.6.12': + resolution: {integrity: sha512-uR0mDPxLzPaouCNrLp8vID8lATVTOtG7HB6lfjjzMdE3sN6MLmK9n2z2nXjb5DRRxOFWMeE1/4Age1/Ml2tnmA==} + + '@storybook/preview-api@7.6.12': + resolution: {integrity: sha512-uSzeMSLnCRROjiofJP0F0niLWL+sboQ5ktHW6BAYoPwprumXduPxKBUVEZNxMbVYoAz9v/kEZmaLauh8LRP2Hg==} + + '@storybook/preview-web@7.6.12': + resolution: {integrity: sha512-8NPvn+9607VVZh/nwzzkDGTEPIBrmenmt/ZdUz7FBvbBcO0wZjjFVBJmtrT3onegtYYyGNyQY125tOqLDn8uew==} + + '@storybook/preview@7.6.12': + resolution: {integrity: sha512-7vbeqQY3X+FCt/ccgCuBmj4rkbQebLHGEBAt8elcX0E2pr7SGW57lWhnasU3jeMaz7tNrkcs0gfl4hyVRWUHDg==} + + '@storybook/react-dom-shim@7.6.12': + resolution: {integrity: sha512-P8eu/s/RQlc/7Yvr260lqNa6rttxIYiPUuHQBu9oCacwkpB3Xep2R/PUY2CifRHqlDhaOINO/Z79oGZl4EBQRQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + + '@storybook/react-vite@7.6.12': + resolution: {integrity: sha512-kQjCWmTcHuZM1Mlt1QjpYNXP1TxfkSDFWC36fSEUC0q48wzyjUEZs6YraxZu0YE+zXK+X4tmaZhz8pUPgV3gLw==} + engines: {node: '>=16'} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 + + '@storybook/react@7.6.12': + resolution: {integrity: sha512-ITDRGi79Qg+z1kGYv+yyJESz/5AsJVdBTMO7tr1qV7gmHElkASt6UR8SBSqKgePOnYgy3k/1PLfbzOs6G4OgYQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@storybook/router@7.6.12': + resolution: {integrity: sha512-1fqscJbePFJXhapqiv7fAIIqAvouSsdPnqWjJGJrUMR6JBtRYMcrb3MnDeqi9OYnU73r65BrQBPtSzWM8nP0LQ==} + + '@storybook/telemetry@7.6.12': + resolution: {integrity: sha512-eBG3sLb9CZ05pyK2JXBvnaAsxDzbZH57VyhtphhuZmx0DqF/78qIoHs9ebRJpJWV0sL5rtT9vIq8QXpQhDHLWg==} + + '@storybook/theming@7.6.12': + resolution: {integrity: sha512-P4zoMKlSYbNrWJjQROuz+DZSDEpdf3TUvk203EqBRdElqw2EMHcqZ8+0HGPFfVHpqEj05+B9Mr6R/Z/BURj0lw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + + '@storybook/types@7.6.12': + resolution: {integrity: sha512-Wsbd+NS10/2yMHQ/26rXHflXam0hm2qufTFiHOX6VXZWxij3slRU88Fnwzp+1QSyjXb0qkEr8dOx7aG00+ItVw==} + + '@tanstack/eslint-plugin-query@5.43.1': + resolution: {integrity: sha512-5WZmkny6u/lSjzUpgnvn+vnA1KtIa7umNZYLqCg9TZK0lmz9SRP6Hnui1PI279eisDy/O+1yD0MfEHTJWlQGVw==} + peerDependencies: + eslint: ^8 || ^9 + + '@tanstack/query-core@5.45.0': + resolution: {integrity: sha512-RVfIZQmFUTdjhSAAblvueimfngYyfN6HlwaJUPK71PKd7yi43Vs1S/rdimmZedPWX/WGppcq/U1HOj7O7FwYxw==} + + '@tanstack/react-query@5.45.1': + resolution: {integrity: sha512-mYYfJujKg2kxmkRRjA6nn4YKG3ITsKuH22f1kteJ5IuVQqgKUgbaSQfYwVP0gBS05mhwxO03HVpD0t7BMN7WOA==} + peerDependencies: + react: ^18.0.0 + + '@tanstack/react-table@8.15.0': + resolution: {integrity: sha512-8K4RSROUtXUtfiezV6Ehl8z99axFrkQnxXi0vjWBJv3Tsm5x4EyrgXI7d2tOOMoANykKZLB6S1sGZGemoMRt7Q==} + engines: {node: '>=12'} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + + '@tanstack/table-core@8.14.0': + resolution: {integrity: sha512-wDhpKJahGHWhmRt4RxtV3pES63CoeadljGWS/xeS9OJr1HBl2NB+OO44ht3sxDH5j5TRDAbQzC0NvSlsUfn7lQ==} + engines: {node: '>=12'} + + '@tsconfig/node10@1.0.9': + resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.5': + resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} + + '@types/body-parser@1.19.5': + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/cookie@0.6.0': + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + + '@types/cross-spawn@6.0.6': + resolution: {integrity: sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==} + + '@types/detect-port@1.3.5': + resolution: {integrity: sha512-Rf3/lB9WkDfIL9eEKaSYKc+1L/rNVYBjThk22JTqQw0YozXarX8YljFAz+HCoC6h4B4KwCMsBPZHaFezwT4BNA==} + + '@types/doctrine@0.0.3': + resolution: {integrity: sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA==} + + '@types/doctrine@0.0.9': + resolution: {integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==} + + '@types/ejs@3.1.5': + resolution: {integrity: sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==} + + '@types/emscripten@1.39.10': + resolution: {integrity: sha512-TB/6hBkYQJxsZHSqyeuO1Jt0AB/bW6G7rHt9g7lML7SOF6lbgcHvw/Lr+69iqN0qxgXLhWKScAon73JNnptuDw==} + + '@types/escodegen@0.0.6': + resolution: {integrity: sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==} + + '@types/estree@0.0.51': + resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} + + '@types/estree@1.0.5': + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + '@types/express-serve-static-core@4.17.42': + resolution: {integrity: sha512-ckM3jm2bf/MfB3+spLPWYPUH573plBFwpOhqQ2WottxYV85j1HQFlxmnTq57X1yHY9awZPig06hL/cLMgNWHIQ==} + + '@types/express@4.17.21': + resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + + '@types/find-cache-dir@3.2.1': + resolution: {integrity: sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==} + + '@types/glob@7.2.0': + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + + '@types/graceful-fs@4.1.9': + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + + '@types/http-errors@2.0.4': + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/lodash@4.14.202': + resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} + + '@types/mdx@2.0.11': + resolution: {integrity: sha512-HM5bwOaIQJIQbAYfax35HCKxx7a3KrK3nBtIqJgSOitivTD1y3oW9P3rxY9RkXYPUk7y/AjAohfHKmFpGE79zw==} + + '@types/mime-types@2.1.4': + resolution: {integrity: sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==} + + '@types/mime@1.3.5': + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + + '@types/mime@3.0.4': + resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} + + '@types/minimatch@5.1.2': + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + + '@types/minimist@1.2.5': + resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} + + '@types/mute-stream@0.0.4': + resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==} + + '@types/node-fetch@2.6.11': + resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==} + + '@types/node@18.19.12': + resolution: {integrity: sha512-uLcpWEAvatBEubmgCMzWforZbAu1dT9syweWnU3/DNwbeUBq2miP5nG8Y4JL9MDMKWt+7Yv1CSvA8xELdEl54w==} + + '@types/node@20.11.14': + resolution: {integrity: sha512-w3yWCcwULefjP9DmDDsgUskrMoOy5Z8MiwKHr1FvqGPtx7CvJzQvxD7eKpxNtklQxLruxSXWddyeRtyud0RcXQ==} + + '@types/node@20.12.4': + resolution: {integrity: sha512-E+Fa9z3wSQpzgYQdYmme5X3OTuejnnTx88A6p6vkkJosR3KBz+HpE3kqNm98VE6cfLFcISx7zW7MsJkH6KwbTw==} + + '@types/node@20.5.1': + resolution: {integrity: sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==} + + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + + '@types/pretty-hrtime@1.0.3': + resolution: {integrity: sha512-nj39q0wAIdhwn7DGUyT9irmsKK1tV0bd5WFEhgpqNTMFZ8cE+jieuTphCW0tfdm47S2zVT5mr09B28b1chmQMA==} + + '@types/prop-types@15.7.11': + resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} + + '@types/qs@6.9.11': + resolution: {integrity: sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==} + + '@types/range-parser@1.2.7': + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + + '@types/react-dom@18.2.18': + resolution: {integrity: sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==} + + '@types/react@18.2.48': + resolution: {integrity: sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==} + + '@types/resolve@1.20.6': + resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} + + '@types/scheduler@0.16.8': + resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} + + '@types/semver@7.5.6': + resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} + + '@types/send@0.17.4': + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + + '@types/serve-static@1.15.5': + resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} + + '@types/statuses@2.0.5': + resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==} + + '@types/unist@2.0.10': + resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} + + '@types/uuid@9.0.8': + resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} + + '@types/validator@13.11.8': + resolution: {integrity: sha512-c/hzNDBh7eRF+KbCf+OoZxKbnkpaK/cKp9iLQWqB7muXtM+MtL9SUUH8vCFcLn6dH1Qm05jiexK0ofWY7TfOhQ==} + + '@types/wrap-ansi@3.0.0': + resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} + + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@16.0.9': + resolution: {integrity: sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==} + + '@types/yargs@17.0.32': + resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} + + '@typescript-eslint/eslint-plugin@6.20.0': + resolution: {integrity: sha512-fTwGQUnjhoYHeSF6m5pWNkzmDDdsKELYrOBxhjMrofPqCkoC2k3B2wvGHFxa1CTIqkEn88nlW1HVMztjo2K8Hg==} + 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 + + '@typescript-eslint/parser@6.20.0': + resolution: {integrity: sha512-bYerPDF/H5v6V76MdMYhjwmwgMA+jlPVqjSDq2cRqMi8bP5sR3Z+RLOiOMad3nsnmDVmn2gAFCyNgh/dIrfP/w==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@5.62.0': + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/scope-manager@6.20.0': + resolution: {integrity: sha512-p4rvHQRDTI1tGGMDFQm+GtxP1ZHyAh64WANVoyEcNMpaTFn3ox/3CcgtIlELnRfKzSs/DwYlDccJEtr3O6qBvA==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/scope-manager@8.0.0-alpha.28': + resolution: {integrity: sha512-Iq8QFmJ2DH2tx7jfOraMZM1Y1axRfWh4t29JXRgbzvgiDQ2uHRHcaXqTulqsZXzJ0+vERNvNkOIPcQYGsNeGVQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@6.20.0': + resolution: {integrity: sha512-qnSobiJQb1F5JjN0YDRPHruQTrX7ICsmltXhkV536mp4idGAYrIyr47zF/JmkJtEcAVnIz4gUYJ7gOZa6SmN4g==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@5.62.0': + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/types@6.20.0': + resolution: {integrity: sha512-MM9mfZMAhiN4cOEcUOEx+0HmuaW3WBfukBZPCfwSqFnQy0grXYtngKCqpQN339X3RrwtzspWJrpbrupKYUSBXQ==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/types@8.0.0-alpha.28': + resolution: {integrity: sha512-HYg+e0EWVShx0FEX0MAjDinYLmd+wD6nGMpbaddB1iACYwqaJFbf7vw0l+hdLTJvQC6UY8ndRkaEsL68QEoIZQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@5.62.0': + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/typescript-estree@6.20.0': + resolution: {integrity: sha512-RnRya9q5m6YYSpBN7IzKu9FmLcYtErkDkc8/dKv81I9QiLLtVBHrjz+Ev/crAqgMNW2FCsoZF4g2QUylMnJz+g==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/typescript-estree@8.0.0-alpha.28': + resolution: {integrity: sha512-I/5ODd4XJ+TO0XrKwDaB4tVGVi6kz2LAlN3WPd7mZVVtW21HHByCILRhOF9RbC69gJQ/TGHFpWCmAcsq2RZisg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@5.62.0': + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + + '@typescript-eslint/utils@6.20.0': + resolution: {integrity: sha512-/EKuw+kRu2vAqCoDwDCBtDRU6CTKbUmwwI7SH7AashZ+W+7o8eiyy6V2cdOqN49KsTcASWsC5QeghYuRDTyOOg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + + '@typescript-eslint/utils@8.0.0-alpha.28': + resolution: {integrity: sha512-PnIz94+nbyjJisMI+KZqXMfw0wfIHvbyh0MGEx2M314wqm6SUWcxB5I8zduGQgJbRB0YFnboPS+MeSlBYPWrBQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + + '@typescript-eslint/visitor-keys@5.62.0': + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/visitor-keys@6.20.0': + resolution: {integrity: sha512-E8Cp98kRe4gKHjJD4NExXKz/zOJ1A2hhZc+IMVD6i7w4yjIvh6VyuRI0gRtxAsXtoC35uGMaQ9rjI2zJaXDEAw==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/visitor-keys@8.0.0-alpha.28': + resolution: {integrity: sha512-+ewAOeKDycydKMlnfmW8zAURTA8PR5Csyvxy6PJt4XRYjoquode9/eWaMt9Sp4Rz1FGMSVU9KxDRR83ASH/xkQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@ungap/structured-clone@1.2.0': + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + + '@vitejs/plugin-react@3.1.0': + resolution: {integrity: sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.1.0-beta.0 + + '@vitejs/plugin-react@4.2.1': + resolution: {integrity: sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 + + '@yarnpkg/esbuild-plugin-pnp@3.0.0-rc.15': + resolution: {integrity: sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==} + engines: {node: '>=14.15.0'} + peerDependencies: + esbuild: '>=0.10.0' + + '@yarnpkg/fslib@2.10.3': + resolution: {integrity: sha512-41H+Ga78xT9sHvWLlFOZLIhtU6mTGZ20pZ29EiZa97vnxdohJD2AF42rCoAoWfqUz486xY6fhjMH+DYEM9r14A==} + engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'} + + '@yarnpkg/libzip@2.3.0': + resolution: {integrity: sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==} + engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'} + + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@7.2.0: + resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} + engines: {node: '>=0.4.0'} + + acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + engines: {node: '>=0.4.0'} + + acorn@7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + + acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + + address@1.2.2: + resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} + engines: {node: '>= 10.0.0'} + + agent-base@5.1.1: + resolution: {integrity: sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==} + engines: {node: '>= 6.0.0'} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-escapes@5.0.0: + resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} + engines: {node: '>=12'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + app-root-dir@1.0.2: + resolution: {integrity: sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-hidden@1.2.3: + resolution: {integrity: sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==} + engines: {node: '>=10'} + + aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + + array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + array-ify@1.0.0: + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + + array-includes@3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + engines: {node: '>= 0.4'} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + array.prototype.findlastindex@1.2.3: + resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + + array.prototype.tosorted@1.1.2: + resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} + + arraybuffer.prototype.slice@1.0.2: + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + engines: {node: '>= 0.4'} + + arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + + assert@2.1.0: + resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} + + ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + + ast-types@0.16.1: + resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} + engines: {node: '>=4'} + + async-limiter@1.0.1: + resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} + + async@3.2.5: + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} + + asynciterator.prototype@1.0.0: + resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + autoprefixer@10.4.17: + resolution: {integrity: sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + + axe-core@4.7.0: + resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} + engines: {node: '>=4'} + + axios@1.6.7: + resolution: {integrity: sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==} + + axobject-query@3.2.1: + resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} + + babel-core@7.0.0-bridge.0: + resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + + babel-plugin-polyfill-corejs2@0.4.8: + resolution: {integrity: sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.9.0: + resolution: {integrity: sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-regenerator@0.5.5: + resolution: {integrity: sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + better-opn@3.0.2: + resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} + engines: {node: '>=12.0.0'} + + big-integer@1.6.52: + resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} + engines: {node: '>=0.6'} + + binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + body-parser@1.20.1: + resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + bplist-parser@0.2.0: + resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} + engines: {node: '>= 5.10.0'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + + browser-assert@1.2.1: + resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} + + browserify-zlib@0.1.4: + resolution: {integrity: sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==} + + browserslist@4.22.3: + resolution: {integrity: sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + bytes@3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + + camelcase-keys@6.2.2: + resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} + engines: {node: '>=8'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + caniuse-lite@1.0.30001581: + resolution: {integrity: sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ==} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + + chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + citty@0.1.5: + resolution: {integrity: sha512-AS7n5NSc0OQVMV9v6wt3ByujNIrne0/cTjiC2MYqhvao57VNfiuVksTSr2p17nVOhEr2KtqiAkGwHcgMC/qUuQ==} + + class-variance-authority@0.7.0: + resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==} + + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-table3@0.6.3: + resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==} + engines: {node: 10.* || >= 12.*} + + cli-truncate@3.1.0: + resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone-deep@4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + clsx@2.0.0: + resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} + engines: {node: '>=6'} + + clsx@2.1.0: + resolution: {integrity: sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==} + engines: {node: '>=6'} + + cmdk@1.0.0: + resolution: {integrity: sha512-gDzVf0a09TvoJ5jnuPvygTB77+XdOSwEmJ88L6XPFPlv7T3RxbP9jgenfylrAMD0+Le1aO0nVjQUzl2g+vjz5Q==} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@11.0.0: + resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} + engines: {node: '>=16'} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + commander@6.2.1: + resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} + engines: {node: '>= 6'} + + commitlint@17.8.1: + resolution: {integrity: sha512-X+VPJwZsQDeGj/DG1NsxhZEl+oMHKNC+1myZ/zauNDoo+7OuLHfTOUU1C1a4CjKW4b6T7NuoFcYfK0kRCjCtbA==} + engines: {node: '>=v14'} + hasBin: true + + commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + + compare-func@2.0.0: + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + + compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + + compression@1.7.4: + resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} + engines: {node: '>= 0.8.0'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + concat-stream@1.6.2: + resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} + engines: {'0': node >= 0.8} + + confusing-browser-globals@1.0.11: + resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} + + consola@3.2.3: + resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} + engines: {node: ^14.18.0 || >=16.10.0} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + conventional-changelog-angular@6.0.0: + resolution: {integrity: sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==} + engines: {node: '>=14'} + + conventional-changelog-conventionalcommits@6.1.0: + resolution: {integrity: sha512-3cS3GEtR78zTfMzk0AizXKKIdN4OvSh7ibNz6/DPbhWWQu7LqE/8+/GqSodV+sywUR2gpJAdP/1JFf4XtN7Zpw==} + engines: {node: '>=14'} + + conventional-commits-parser@4.0.0: + resolution: {integrity: sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==} + engines: {node: '>=14'} + hasBin: true + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + + cookie@0.5.0: + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} + + core-js-compat@3.35.1: + resolution: {integrity: sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cosmiconfig-typescript-loader@4.4.0: + resolution: {integrity: sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==} + engines: {node: '>=v14.21.3'} + peerDependencies: + '@types/node': '*' + cosmiconfig: '>=7' + ts-node: '>=10' + typescript: '>=4' + + cosmiconfig@8.3.6: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + crypto-random-string@2.0.0: + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + engines: {node: '>=8'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + + dargs@7.0.0: + resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} + engines: {node: '>=8'} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize-keys@1.1.1: + resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} + engines: {node: '>=0.10.0'} + + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + default-browser-id@3.0.0: + resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} + engines: {node: '>=12'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + engines: {node: '>= 0.4'} + + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + + del@6.1.1: + resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==} + engines: {node: '>=10'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + + detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + + detect-package-manager@2.0.1: + resolution: {integrity: sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A==} + engines: {node: '>=12'} + + detect-port@1.5.1: + resolution: {integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==} + hasBin: true + + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dot-prop@5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} + + dotenv-expand@10.0.0: + resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} + engines: {node: '>=12'} + + dotenv@16.4.1: + resolution: {integrity: sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ==} + engines: {node: '>=12'} + + duplexify@3.7.1: + resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + ejs@3.1.9: + resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} + engines: {node: '>=0.10.0'} + hasBin: true + + electron-to-chromium@1.4.652: + resolution: {integrity: sha512-XvQaa8hVUAuEJtLw6VKQqvdOxTOfBLWfI10t2xWpezx4XXD3k8bdLweEKeItqaa0+OkJX5l0mP1W+JWobyIDrg==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + enhanced-resolve@5.15.0: + resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + engines: {node: '>=10.13.0'} + + envinfo@7.11.0: + resolution: {integrity: sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==} + engines: {node: '>=4'} + hasBin: true + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-abstract@1.22.3: + resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} + engines: {node: '>= 0.4'} + + es-iterator-helpers@1.0.15: + resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} + + es-module-lexer@0.9.3: + resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} + + es-set-tostringtag@2.0.2: + resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + + es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + + esbuild-plugin-alias@0.2.1: + resolution: {integrity: sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ==} + + esbuild-register@3.5.0: + resolution: {integrity: sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==} + peerDependencies: + esbuild: '>=0.12 <1' + + esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + + eslint-config-airbnb-base@15.0.0: + resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + eslint: ^7.32.0 || ^8.2.0 + eslint-plugin-import: ^2.25.2 + + eslint-config-airbnb@19.0.4: + resolution: {integrity: sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==} + engines: {node: ^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^7.32.0 || ^8.2.0 + eslint-plugin-import: ^2.25.3 + eslint-plugin-jsx-a11y: ^6.5.1 + eslint-plugin-react: ^7.28.0 + eslint-plugin-react-hooks: ^4.3.0 + + eslint-config-prettier@9.1.0: + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-import-resolver-typescript@3.6.1: + resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + + eslint-module-utils@2.8.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 + + eslint-plugin-import@2.29.1: + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-plugin-jsx-a11y@6.8.0: + resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + + eslint-plugin-prettier@5.1.3: + resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '*' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + + eslint-plugin-react-hooks@4.6.0: + resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + + eslint-plugin-react@7.33.2: + resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + + eslint-plugin-storybook@0.6.15: + resolution: {integrity: sha512-lAGqVAJGob47Griu29KXYowI4G7KwMoJDOkEip8ujikuDLxU+oWJ1l0WL6F2oDO4QiyUFXvtDkEkISMOPzo+7w==} + engines: {node: 12.x || 14.x || >= 16} + peerDependencies: + eslint: '>=6' + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint@8.56.0: + resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + + express@4.18.2: + resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} + engines: {node: '>= 0.10.0'} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + extract-zip@1.7.0: + resolution: {integrity: sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==} + hasBin: true + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.17.0: + resolution: {integrity: sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==} + + fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + + fetch-retry@5.0.6: + resolution: {integrity: sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==} + + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + file-system-cache@2.3.0: + resolution: {integrity: sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==} + + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + + fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + + finalhandler@1.2.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + + find-cache-dir@2.1.0: + resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} + engines: {node: '>=6'} + + find-cache-dir@3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + + find-up@3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + + flow-parser@0.227.0: + resolution: {integrity: sha512-nOygtGKcX/siZK/lFzpfdHEfOkfGcTW7rNroR1Zsz6T/JxSahPALXVt5qVHq/fgvMJuv096BTKbgxN3PzVBaDA==} + engines: {node: '>=0.4.0'} + + follow-redirects@1.15.5: + resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + + fs-extra@11.1.1: + resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} + engines: {node: '>=14.14'} + + fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + + get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + + get-npm-tarball-url@2.1.0: + resolution: {integrity: sha512-ro+DiMu5DXgRBabqXupW38h7WPZ9+Ad8UjwhvsmmN8w1sU7ab0nzAXvVZ4kqYg57OrqomRtJvepX5/xvFKNtjA==} + engines: {node: '>=12.17'} + + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + + get-port@5.1.1: + resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} + engines: {node: '>=8'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + + get-symbol-description@1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + + get-tsconfig@4.7.2: + resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} + + giget@1.2.1: + resolution: {integrity: sha512-4VG22mopWtIeHwogGSy1FViXVo0YT+m6BrqZfz0JJFwbSsePsCdOzdLIIli5BtMp7Xe8f/o2OmBpQX2NBOC24g==} + hasBin: true + + git-raw-commits@2.0.11: + resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} + engines: {node: '>=10'} + hasBin: true + + github-slugger@1.5.0: + resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob-promise@4.2.2: + resolution: {integrity: sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw==} + engines: {node: '>=12'} + peerDependencies: + glob: ^7.1.6 + + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + + glob@10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + + global-dirs@0.1.1: + resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} + engines: {node: '>=4'} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + goober@2.1.14: + resolution: {integrity: sha512-4UpC0NdGyAFqLNPnhCT2iHpza2q+RAY3GV85a/mRPdzyPQMsj0KmMMuetdIkzWRbJ+Hgau1EZztq8ImmiMGhsg==} + peerDependencies: + csstype: ^3.0.10 + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + graphql@16.8.1: + resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + + gunzip-maybe@1.4.2: + resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} + hasBin: true + + handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + engines: {node: '>=0.4.7'} + hasBin: true + + hard-rejection@2.1.0: + resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} + engines: {node: '>=6'} + + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.1: + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + + has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + + hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + + headers-polyfill@4.0.3: + resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} + + hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + + hosted-git-info@4.1.0: + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} + + html-tags@3.3.1: + resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} + engines: {node: '>=8'} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + https-proxy-agent@4.0.0: + resolution: {integrity: sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==} + engines: {node: '>= 6.0.0'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + + husky@8.0.3: + resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} + engines: {node: '>=14'} + hasBin: true + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.3.0: + resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} + engines: {node: '>= 4'} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + internal-slot@1.0.6: + resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} + engines: {node: '>= 0.4'} + + invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + + ip@2.0.0: + resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + is-absolute-url@3.0.3: + resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==} + engines: {node: '>=8'} + + is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + + is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + + is-deflate@1.0.0: + resolution: {integrity: sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-gzip@1.0.0: + resolution: {integrity: sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==} + engines: {node: '>=0.10.0'} + + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + is-map@2.0.2: + resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} + + is-nan@1.3.2: + resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} + engines: {node: '>= 0.4'} + + is-negative-zero@2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + + is-node-process@1.2.0: + resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} + + is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + + is-path-cwd@2.2.0: + resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} + engines: {node: '>=6'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + + is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + + is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + + is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + + is-set@2.0.2: + resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} + + is-shared-array-buffer@1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + + is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + + is-text-path@1.0.1: + resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==} + engines: {node: '>=0.10.0'} + + is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-weakmap@2.0.1: + resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} + + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + + is-weakset@2.0.2: + resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + + iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + + jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + + jake@10.8.7: + resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} + engines: {node: '>=10'} + hasBin: true + + jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-mock@27.5.1: + resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jscodeshift@0.15.1: + resolution: {integrity: sha512-hIJfxUy8Rt4HkJn/zZPU9ChKfKZM1342waJ1QC2e2YsPcWhM+3BJ4dcfQCzArTrk1jJeNLB341H+qOcEHRxJZg==} + hasBin: true + peerDependencies: + '@babel/preset-env': ^7.1.6 + peerDependenciesMeta: + '@babel/preset-env': + optional: true + + jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + + jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + language-subtag-registry@0.3.22: + resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} + + language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + + lazy-universal-dotenv@4.0.0: + resolution: {integrity: sha512-aXpZJRnTkpK6gQ/z4nk+ZBLd/Qdp118cvPruLSIQzQNRhKwEcdXCOzXuF55VDqIiuAaY3UGZ10DJtvZzDcvsxg==} + engines: {node: '>=14.0.0'} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + lilconfig@3.0.0: + resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + lint-staged@13.3.0: + resolution: {integrity: sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ==} + engines: {node: ^16.14.0 || >=18.0.0} + hasBin: true + + listr2@6.6.1: + resolution: {integrity: sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==} + engines: {node: '>=16.0.0'} + peerDependencies: + enquirer: '>= 2.3.0 < 3' + peerDependenciesMeta: + enquirer: + optional: true + + locate-path@3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + lodash.isfunction@3.0.9: + resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.kebabcase@4.1.1: + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.mergewith@4.6.2: + resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} + + lodash.snakecase@4.1.1: + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} + + lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + + lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + + lodash.upperfirst@4.3.1: + resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + log-update@5.0.1: + resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lru-cache@10.2.0: + resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} + engines: {node: 14 || >=16.14} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + lucide-react@0.320.0: + resolution: {integrity: sha512-HuMmfmFiWwctDkN27wklKVZr8UpwP2TTekLZ3xiLCEjx/STG1k0KLWMbBfIJ/lnNJQDfSjztDZSVU316xA+AQg==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 + + magic-string@0.27.0: + resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} + engines: {node: '>=12'} + + magic-string@0.30.6: + resolution: {integrity: sha512-n62qCLbPjNjyo+owKtveQxZFZTBm+Ms6YoGD23Wew6Vw337PElFNifQpknPruVRQV57kVShPnLGo9vWxVhpPvA==} + engines: {node: '>=12'} + + make-dir@2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} + + make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + + map-obj@1.0.1: + resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} + engines: {node: '>=0.10.0'} + + map-obj@4.3.0: + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} + + map-or-similar@1.5.0: + resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} + + markdown-to-jsx@7.4.1: + resolution: {integrity: sha512-GbrbkTnHp9u6+HqbPRFJbObi369AgJNXi/sGqq5HRsoZW063xR1XDCaConqq+whfEIAlzB1YPnOgsPc7B7bc/A==} + engines: {node: '>= 10'} + peerDependencies: + react: '>= 0.14.0' + + mdast-util-definitions@4.0.0: + resolution: {integrity: sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==} + + mdast-util-to-string@1.1.0: + resolution: {integrity: sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + memoizerific@1.11.3: + resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==} + + meow@8.1.2: + resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} + engines: {node: '>=10'} + + merge-descriptors@1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + mime@2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + + minimatch@9.0.4: + resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist-options@4.1.0: + resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} + engines: {node: '>= 6'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + + minipass@7.0.4: + resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + + mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + msw@2.2.13: + resolution: {integrity: sha512-ljFf1xZsU0b4zv1l7xzEmC6OZA6yD06hcx0H+dc8V0VypaP3HGYJa1rMLjQbBWl32ptGhcfwcPCWDB1wjmsftw==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + typescript: '>= 4.7.x' + peerDependenciesMeta: + typescript: + optional: true + + mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + node-dir@0.1.17: + resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==} + engines: {node: '>= 0.10.5'} + + node-fetch-native@1.6.1: + resolution: {integrity: sha512-bW9T/uJDPAJB2YNYEpWzE54U5O3MQidXsOyTfnbKYtTtFexRvGzb1waphBN4ZwP6EcIvYYEOwW0b72BpAqydTw==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + + node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + + normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + + normalize-package-data@3.0.3: + resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} + engines: {node: '>=10'} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + npm-run-path@5.2.0: + resolution: {integrity: sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + nypm@0.3.6: + resolution: {integrity: sha512-2CATJh3pd6CyNfU5VZM7qSwFu0ieyabkEdnogE30Obn1czrmOYiZ8DOZLe1yBdLKWoyD3Mcy2maUs+0MR3yVjQ==} + engines: {node: ^14.16.0 || >=16.10.0} + hasBin: true + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + + object-is@1.1.5: + resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + object.entries@1.1.7: + resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.7: + resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.1: + resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} + + object.hasown@1.1.3: + resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} + + object.values@1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + engines: {node: '>= 0.4'} + + ohash@1.1.3: + resolution: {integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + + optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + + outvariant@1.4.2: + resolution: {integrity: sha512-Ou3dJ6bA/UJ5GVHxah4LnqDwZRwAmWxrG3wtrHrbGnP4RnLCtA64A4F+ae7Y8ww660JaddSoArUR5HjipWSHAQ==} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + pako@0.2.9: + resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.10.1: + resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} + engines: {node: '>=16 || 14 >=14.17'} + + path-to-regexp@0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + + path-to-regexp@6.2.1: + resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + + peek-stream@1.1.3: + resolution: {integrity: sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==} + + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + + picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + pkg-dir@3.0.0: + resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} + engines: {node: '>=6'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + pkg-dir@5.0.0: + resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} + engines: {node: '>=10'} + + polished@4.2.2: + resolution: {integrity: sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==} + engines: {node: '>=10'} + + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.0.1: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-nested@6.0.1: + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-selector-parser@6.0.15: + resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.4.33: + resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + + prettier@3.2.4: + resolution: {integrity: sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==} + engines: {node: '>=14'} + hasBin: true + + pretty-hrtime@1.0.3: + resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} + engines: {node: '>= 0.8'} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + pump@2.0.1: + resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} + + pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + + pumpify@1.5.1: + resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + puppeteer-core@2.1.1: + resolution: {integrity: sha512-n13AWriBMPYxnpbb6bnaY5YoY6rGj8vPLrz6CZF3o0qJNEwlcfJVxBzYZ0NJsQ21UbdJoijPCDrM++SUVEz7+w==} + engines: {node: '>=8.16.0'} + + qs@6.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} + + qs@6.11.2: + resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} + engines: {node: '>=0.6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + quick-lru@4.0.1: + resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} + engines: {node: '>=8'} + + ramda@0.29.0: + resolution: {integrity: sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.5.1: + resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} + engines: {node: '>= 0.8'} + + react-colorful@5.6.1: + resolution: {integrity: sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + react-docgen-typescript@2.2.2: + resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} + peerDependencies: + typescript: '>= 4.3.x' + + react-docgen@7.0.3: + resolution: {integrity: sha512-i8aF1nyKInZnANZ4uZrH49qn1paRgBZ7wZiCNBMnenlPzEv0mRl+ShpTVEI6wZNl8sSc79xZkivtgLKQArcanQ==} + engines: {node: '>=16.14.0'} + + react-dom@18.2.0: + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + peerDependencies: + react: ^18.2.0 + + react-element-to-jsx-string@15.0.0: + resolution: {integrity: sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==} + peerDependencies: + react: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0 + react-dom: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0 + + react-hook-form@7.50.1: + resolution: {integrity: sha512-3PCY82oE0WgeOgUtIr3nYNNtNvqtJ7BZjsbxh6TnYNbXButaD5WpjOmTjdxZfheuHKR68qfeFnEDVYoSSFPMTQ==} + engines: {node: '>=12.22.0'} + peerDependencies: + react: ^16.8.0 || ^17 || ^18 + + react-hot-toast@2.4.1: + resolution: {integrity: sha512-j8z+cQbWIM5LY37pR6uZR6D4LfseplqnuAO4co4u8917hBUvXlEqyP1ZzqVLcqoyUesZZv/ImreoCeHVDpE5pQ==} + engines: {node: '>=10'} + peerDependencies: + react: '>=16' + react-dom: '>=16' + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-is@18.1.0: + resolution: {integrity: sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==} + + react-refresh@0.14.0: + resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} + engines: {node: '>=0.10.0'} + + react-remove-scroll-bar@2.3.4: + resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} + 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 + + react-remove-scroll@2.5.5: + resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} + 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 + + react-router-dom@6.21.3: + resolution: {integrity: sha512-kNzubk7n4YHSrErzjLK72j0B5i969GsuCGazRl3G6j1zqZBLjuSlYBdVdkDOgzGdPIffUOc9nmgiadTEVoq91g==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + + react-router@6.21.3: + resolution: {integrity: sha512-a0H638ZXULv1OdkmiK6s6itNhoy33ywxmUFT/xtSoVyf9VnC7n7+VT4LjVzdIHSaF5TIh9ylUgxMXksHTgGrKg==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + + react-style-singleton@2.2.1: + resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} + 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 + + react@18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + + read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + + read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + recast@0.23.4: + resolution: {integrity: sha512-qtEDqIZGVcSZCHniWwZWbRy79Dc6Wp3kT/UmDA2RJKBPg7+7k51aQBZirHmUGn5uvHf2rg8DkjizrN26k61ATw==} + engines: {node: '>= 4'} + + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + + reflect.getprototypeof@1.0.4: + resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} + engines: {node: '>= 0.4'} + + regenerate-unicode-properties@10.1.1: + resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} + engines: {node: '>=4'} + + regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + + regexp.prototype.flags@1.5.1: + resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + engines: {node: '>= 0.4'} + + regexpu-core@5.3.2: + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} + engines: {node: '>=4'} + + regjsparser@0.9.1: + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + hasBin: true + + remark-external-links@8.0.0: + resolution: {integrity: sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==} + + remark-slug@6.1.0: + resolution: {integrity: sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + requireindex@1.2.0: + resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} + engines: {node: '>=0.10.5'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve-global@1.0.0: + resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} + engines: {node: '>=8'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + restore-cursor@4.0.0: + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.3.1: + resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} + + rimraf@2.6.3: + resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} + hasBin: true + + rimraf@2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + hasBin: true + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + + rollup@3.29.4: + resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-array-concat@1.1.0: + resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} + engines: {node: '>=0.4'} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex-test@1.0.2: + resolution: {integrity: sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==} + engines: {node: '>= 0.4'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + scheduler@0.23.0: + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + + semver@7.6.2: + resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} + engines: {node: '>=10'} + hasBin: true + + send@0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + + serve-static@1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + + set-function-length@1.2.0: + resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.1: + resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + engines: {node: '>= 0.4'} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + shallow-clone@3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + + source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + space-separated-tokens@1.1.5: + resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.4.0: + resolution: {integrity: sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.16: + resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} + + split2@3.2.2: + resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + store2@2.14.2: + resolution: {integrity: sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==} + + storybook@7.6.12: + resolution: {integrity: sha512-zcH9CwIsE8N4PX3he5vaJ3mTTWGxu7cxJ/ag9oja/k3N5/IvQjRyIU1TLkRVb28BB8gaLyorpnc4C4aLVGy4WQ==} + hasBin: true + + stream-shift@1.0.3: + resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + + strict-event-emitter@0.5.1: + resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} + + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string.prototype.matchall@4.0.10: + resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} + + string.prototype.trim@1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.7: + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + + string.prototype.trimstart@1.0.7: + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + + strip-indent@4.0.0: + resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} + engines: {node: '>=12'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + synchronous-promise@2.0.17: + resolution: {integrity: sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==} + + synckit@0.8.8: + resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} + engines: {node: ^14.18.0 || >=16.0.0} + + tailwind-merge@2.2.1: + resolution: {integrity: sha512-o+2GTLkthfa5YUt4JxPfzMIpQzZ3adD1vLVkvKE1Twl9UAhGsEbIZhHHZVRttyW177S8PDJI3bTQNaebyofK3Q==} + + tailwindcss-animate@1.0.7: + resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders' + + tailwindcss@3.4.1: + resolution: {integrity: sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==} + engines: {node: '>=14.0.0'} + hasBin: true + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + tar-fs@2.1.1: + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + + tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + + tar@6.2.0: + resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} + engines: {node: '>=10'} + + telejson@7.2.0: + resolution: {integrity: sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==} + + temp-dir@2.0.0: + resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} + engines: {node: '>=8'} + + temp@0.8.4: + resolution: {integrity: sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==} + engines: {node: '>=6.0.0'} + + tempy@1.0.1: + resolution: {integrity: sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==} + engines: {node: '>=10'} + + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + text-extensions@1.9.0: + resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} + engines: {node: '>=0.10'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + through2@2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + + through2@4.0.2: + resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + tiny-invariant@1.3.1: + resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} + + tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tocbot@4.25.0: + resolution: {integrity: sha512-kE5wyCQJ40hqUaRVkyQ4z5+4juzYsv/eK+aqD97N62YH0TxFhzJvo22RUQQZdO3YnXAk42ZOfOpjVdy+Z0YokA==} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + trim-newlines@3.0.1: + resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} + engines: {node: '>=8'} + + ts-api-utils@1.0.3: + resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' + + ts-api-utils@1.3.0: + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + ts-dedent@2.2.0: + resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} + engines: {node: '>=6.10'} + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + tsutils@3.21.0: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.16.0: + resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} + engines: {node: '>=10'} + + type-fest@0.18.1: + resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} + engines: {node: '>=10'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + + type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + + type-fest@1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + + type-fest@4.15.0: + resolution: {integrity: sha512-tB9lu0pQpX5KJq54g+oHOLumOx+pMep4RaM6liXh2PKmVRFF+/vAtUP0ZaJ0kOySfVNjF6doBWPHhBhISKdlIA==} + engines: {node: '>=16'} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + + typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + + typescript@5.3.3: + resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + engines: {node: '>=14.17'} + hasBin: true + + ufo@1.3.2: + resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} + + uglify-js@3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + unicode-canonical-property-names-ecmascript@2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} + + unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + + unicode-match-property-value-ecmascript@2.1.0: + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + engines: {node: '>=4'} + + unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + + unique-string@2.0.0: + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} + + unist-util-is@4.1.0: + resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} + + unist-util-visit-parents@3.1.1: + resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==} + + unist-util-visit@2.0.3: + resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + unplugin@1.6.0: + resolution: {integrity: sha512-BfJEpWBu3aE/AyHx8VaNE/WgouoQxgH9baAiH82JjX8cqVyi3uJQstqwD5J+SZxIK326SZIhsSZlALXVBCknTQ==} + + untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + + update-browserslist-db@1.0.13: + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + use-callback-ref@1.3.1: + resolution: {integrity: sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ==} + 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 + + use-resize-observer@9.1.0: + resolution: {integrity: sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==} + peerDependencies: + react: 16.8.0 - 18 + react-dom: 16.8.0 - 18 + + use-sidecar@1.1.2: + resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + validator@13.11.0: + resolution: {integrity: sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==} + engines: {node: '>= 0.10'} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vite@4.5.2: + resolution: {integrity: sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + + watchpack@2.4.0: + resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} + engines: {node: '>=10.13.0'} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack-virtual-modules@0.6.1: + resolution: {integrity: sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + + which-builtin-type@1.1.3: + resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} + engines: {node: '>= 0.4'} + + which-collection@1.0.1: + resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} + + which-typed-array@1.1.13: + resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@2.4.3: + resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==} + + write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + ws@6.2.2: + resolution: {integrity: sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.16.0: + resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml@2.3.1: + resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} + engines: {node: '>= 14'} + + yaml@2.3.4: + resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} + engines: {node: '>= 14'} + + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@aashutoshrathi/word-wrap@1.2.6': {} + + '@alloc/quick-lru@5.2.0': {} + + '@ampproject/remapping@2.2.1': + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.22 + + '@aw-web-design/x-default-browser@1.4.126': + dependencies: + default-browser-id: 3.0.0 + + '@babel/code-frame@7.23.5': + dependencies: + '@babel/highlight': 7.23.4 + chalk: 2.4.2 + + '@babel/compat-data@7.23.5': {} + + '@babel/core@7.23.9': + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) + '@babel/helpers': 7.23.9 + '@babel/parser': 7.23.9 + '@babel/template': 7.23.9 + '@babel/traverse': 7.23.9 + '@babel/types': 7.23.9 + convert-source-map: 2.0.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.23.6': + dependencies: + '@babel/types': 7.23.9 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.22 + jsesc: 2.5.2 + + '@babel/helper-annotate-as-pure@7.22.5': + dependencies: + '@babel/types': 7.23.9 + + '@babel/helper-builder-binary-assignment-operator-visitor@7.22.15': + dependencies: + '@babel/types': 7.23.9 + + '@babel/helper-compilation-targets@7.23.6': + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/helper-validator-option': 7.23.5 + browserslist: 4.22.3 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.23.10(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.9) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + + '@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-annotate-as-pure': 7.22.5 + regexpu-core: 5.3.2 + semver: 6.3.1 + + '@babel/helper-define-polyfill-provider@0.5.0(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + debug: 4.3.4 + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + + '@babel/helper-environment-visitor@7.22.20': {} + + '@babel/helper-function-name@7.23.0': + dependencies: + '@babel/template': 7.23.9 + '@babel/types': 7.23.9 + + '@babel/helper-hoist-variables@7.22.5': + dependencies: + '@babel/types': 7.23.9 + + '@babel/helper-member-expression-to-functions@7.23.0': + dependencies: + '@babel/types': 7.23.9 + + '@babel/helper-module-imports@7.22.15': + dependencies: + '@babel/types': 7.23.9 + + '@babel/helper-module-transforms@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + + '@babel/helper-optimise-call-expression@7.22.5': + dependencies: + '@babel/types': 7.23.9 + + '@babel/helper-plugin-utils@7.22.5': {} + + '@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-wrap-function': 7.22.20 + + '@babel/helper-replace-supers@7.22.20(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + + '@babel/helper-simple-access@7.22.5': + dependencies: + '@babel/types': 7.23.9 + + '@babel/helper-skip-transparent-expression-wrappers@7.22.5': + dependencies: + '@babel/types': 7.23.9 + + '@babel/helper-split-export-declaration@7.22.6': + dependencies: + '@babel/types': 7.23.9 + + '@babel/helper-string-parser@7.23.4': {} + + '@babel/helper-validator-identifier@7.22.20': {} + + '@babel/helper-validator-option@7.23.5': {} + + '@babel/helper-wrap-function@7.22.20': + dependencies: + '@babel/helper-function-name': 7.23.0 + '@babel/template': 7.23.9 + '@babel/types': 7.23.9 + + '@babel/helpers@7.23.9': + dependencies: + '@babel/template': 7.23.9 + '@babel/traverse': 7.23.9 + '@babel/types': 7.23.9 + transitivePeerDependencies: + - supports-color + + '@babel/highlight@7.23.4': + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + + '@babel/parser@7.23.9': + dependencies: + '@babel/types': 7.23.9 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.9) + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.7(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-flow@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-async-generator-functions@7.23.9(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.9) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.9) + + '@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.9) + + '@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.9) + + '@babel/plugin-transform-classes@7.23.8(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.9) + '@babel/helper-split-export-declaration': 7.22.6 + globals: 11.12.0 + + '@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.23.9 + + '@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.9) + + '@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.9) + + '@babel/plugin-transform-flow-strip-types@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.9) + + '@babel/plugin-transform-for-of@7.23.6(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + + '@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.9) + + '@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.9) + + '@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + + '@babel/plugin-transform-modules-systemjs@7.23.9(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 + + '@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.9) + + '@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.9) + + '@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.9)': + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.9 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.9) + + '@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.9) + + '@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.9) + + '@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.9) + + '@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.9) + + '@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-react-jsx-self@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-react-jsx-source@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + regenerator-transform: 0.15.2 + + '@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + + '@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-typescript@7.23.6(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.9) + + '@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/preset-env@7.23.9(@babel/core@7.23.9)': + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.9 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.7(@babel/core@7.23.9) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.9) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.9) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.9) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.9) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.9) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.9) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.9) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.9) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.9) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.9) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-async-generator-functions': 7.23.9(@babel/core@7.23.9) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.9) + '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.9) + '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.23.9) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.9) + '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.9) + '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.9) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.9) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.9) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-modules-systemjs': 7.23.9(@babel/core@7.23.9) + '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.9) + '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.9) + '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.9) + '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.9) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.9) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.9) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.9) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.9) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.9) + babel-plugin-polyfill-corejs2: 0.4.8(@babel/core@7.23.9) + babel-plugin-polyfill-corejs3: 0.9.0(@babel/core@7.23.9) + babel-plugin-polyfill-regenerator: 0.5.5(@babel/core@7.23.9) + core-js-compat: 3.35.1 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/preset-flow@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.23.9) + + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/types': 7.23.9 + esutils: 2.0.3 + + '@babel/preset-typescript@7.23.3(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.9) + '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.9) + + '@babel/register@7.23.7(@babel/core@7.23.9)': + dependencies: + '@babel/core': 7.23.9 + clone-deep: 4.0.1 + find-cache-dir: 2.1.0 + make-dir: 2.1.0 + pirates: 4.0.6 + source-map-support: 0.5.21 + + '@babel/regjsgen@0.8.0': {} + + '@babel/runtime@7.23.9': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/template@7.23.9': + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/parser': 7.23.9 + '@babel/types': 7.23.9 + + '@babel/traverse@7.23.9': + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.9 + '@babel/types': 7.23.9 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.23.9': + dependencies: + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + + '@base2/pretty-print-object@1.0.1': {} + + '@bundled-es-modules/cookie@2.0.0': + dependencies: + cookie: 0.5.0 + + '@bundled-es-modules/statuses@1.0.1': + dependencies: + statuses: 2.0.1 + + '@colors/colors@1.5.0': + optional: true + + '@commitlint/cli@17.8.1': + dependencies: + '@commitlint/format': 17.8.1 + '@commitlint/lint': 17.8.1 + '@commitlint/load': 17.8.1 + '@commitlint/read': 17.8.1 + '@commitlint/types': 17.8.1 + execa: 5.1.1 + lodash.isfunction: 3.0.9 + resolve-from: 5.0.0 + resolve-global: 1.0.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + + '@commitlint/config-conventional@17.8.1': + dependencies: + conventional-changelog-conventionalcommits: 6.1.0 + + '@commitlint/config-validator@17.8.1': + dependencies: + '@commitlint/types': 17.8.1 + ajv: 8.12.0 + + '@commitlint/ensure@17.8.1': + dependencies: + '@commitlint/types': 17.8.1 + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + lodash.snakecase: 4.1.1 + lodash.startcase: 4.4.0 + lodash.upperfirst: 4.3.1 + + '@commitlint/execute-rule@17.8.1': {} + + '@commitlint/format@17.8.1': + dependencies: + '@commitlint/types': 17.8.1 + chalk: 4.1.2 + + '@commitlint/is-ignored@17.8.1': + dependencies: + '@commitlint/types': 17.8.1 + semver: 7.5.4 + + '@commitlint/lint@17.8.1': + dependencies: + '@commitlint/is-ignored': 17.8.1 + '@commitlint/parse': 17.8.1 + '@commitlint/rules': 17.8.1 + '@commitlint/types': 17.8.1 + + '@commitlint/load@17.8.1': + dependencies: + '@commitlint/config-validator': 17.8.1 + '@commitlint/execute-rule': 17.8.1 + '@commitlint/resolve-extends': 17.8.1 + '@commitlint/types': 17.8.1 + '@types/node': 20.5.1 + chalk: 4.1.2 + cosmiconfig: 8.3.6(typescript@5.3.3) + cosmiconfig-typescript-loader: 4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.3.3))(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.3.3))(typescript@5.3.3) + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + lodash.uniq: 4.5.0 + resolve-from: 5.0.0 + ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + + '@commitlint/message@17.8.1': {} + + '@commitlint/parse@17.8.1': + dependencies: + '@commitlint/types': 17.8.1 + conventional-changelog-angular: 6.0.0 + conventional-commits-parser: 4.0.0 + + '@commitlint/read@17.8.1': + dependencies: + '@commitlint/top-level': 17.8.1 + '@commitlint/types': 17.8.1 + fs-extra: 11.2.0 + git-raw-commits: 2.0.11 + minimist: 1.2.8 + + '@commitlint/resolve-extends@17.8.1': + dependencies: + '@commitlint/config-validator': 17.8.1 + '@commitlint/types': 17.8.1 + import-fresh: 3.3.0 + lodash.mergewith: 4.6.2 + resolve-from: 5.0.0 + resolve-global: 1.0.0 + + '@commitlint/rules@17.8.1': + dependencies: + '@commitlint/ensure': 17.8.1 + '@commitlint/message': 17.8.1 + '@commitlint/to-lines': 17.8.1 + '@commitlint/types': 17.8.1 + execa: 5.1.1 + + '@commitlint/to-lines@17.8.1': {} + + '@commitlint/top-level@17.8.1': + dependencies: + find-up: 5.0.0 + + '@commitlint/types@17.8.1': + dependencies: + chalk: 4.1.2 + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@discoveryjs/json-ext@0.5.7': {} + + '@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0)': + dependencies: + react: 18.2.0 + + '@esbuild/android-arm64@0.18.20': + optional: true + + '@esbuild/android-arm@0.18.20': + optional: true + + '@esbuild/android-x64@0.18.20': + optional: true + + '@esbuild/darwin-arm64@0.18.20': + optional: true + + '@esbuild/darwin-x64@0.18.20': + optional: true + + '@esbuild/freebsd-arm64@0.18.20': + optional: true + + '@esbuild/freebsd-x64@0.18.20': + optional: true + + '@esbuild/linux-arm64@0.18.20': + optional: true + + '@esbuild/linux-arm@0.18.20': + optional: true + + '@esbuild/linux-ia32@0.18.20': + optional: true + + '@esbuild/linux-loong64@0.18.20': + optional: true + + '@esbuild/linux-mips64el@0.18.20': + optional: true + + '@esbuild/linux-ppc64@0.18.20': + optional: true + + '@esbuild/linux-riscv64@0.18.20': + optional: true + + '@esbuild/linux-s390x@0.18.20': + optional: true + + '@esbuild/linux-x64@0.18.20': + optional: true + + '@esbuild/netbsd-x64@0.18.20': + optional: true + + '@esbuild/openbsd-x64@0.18.20': + optional: true + + '@esbuild/sunos-x64@0.18.20': + optional: true + + '@esbuild/win32-arm64@0.18.20': + optional: true + + '@esbuild/win32-ia32@0.18.20': + optional: true + + '@esbuild/win32-x64@0.18.20': + optional: true + + '@eslint-community/eslint-utils@4.4.0(eslint@8.56.0)': + dependencies: + eslint: 8.56.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.10.0': {} + + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.0 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.56.0': {} + + '@faker-js/faker@8.4.0': {} + + '@fal-works/esbuild-plugin-global-externals@2.1.2': {} + + '@floating-ui/core@1.6.0': + dependencies: + '@floating-ui/utils': 0.2.1 + + '@floating-ui/dom@1.6.1': + dependencies: + '@floating-ui/core': 1.6.0 + '@floating-ui/utils': 0.2.1 + + '@floating-ui/react-dom@2.0.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@floating-ui/dom': 1.6.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@floating-ui/utils@0.2.1': {} + + '@humanwhocodes/config-array@0.11.14': + dependencies: + '@humanwhocodes/object-schema': 2.0.2 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@2.0.2': {} + + '@inquirer/confirm@3.1.1': + dependencies: + '@inquirer/core': 7.1.1 + '@inquirer/type': 1.2.1 + + '@inquirer/core@7.1.1': + dependencies: + '@inquirer/type': 1.2.1 + '@types/mute-stream': 0.0.4 + '@types/node': 20.12.4 + '@types/wrap-ansi': 3.0.0 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-spinners: 2.9.2 + cli-width: 4.1.0 + figures: 3.2.0 + mute-stream: 1.0.0 + signal-exit: 4.1.0 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + + '@inquirer/type@1.2.1': {} + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@istanbuljs/load-nyc-config@1.1.0': + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + + '@istanbuljs/schema@0.1.3': {} + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + + '@jest/transform@29.7.0': + dependencies: + '@babel/core': 7.23.9 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.22 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.5 + pirates: 4.0.6 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + + '@jest/types@27.5.1': + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.11.14 + '@types/yargs': 16.0.9 + chalk: 4.1.2 + + '@jest/types@29.6.3': + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.11.14 + '@types/yargs': 17.0.32 + chalk: 4.1.2 + + '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.3.3)(vite@4.5.2(@types/node@20.5.1))': + dependencies: + glob: 7.2.3 + glob-promise: 4.2.2(glob@7.2.3) + magic-string: 0.27.0 + react-docgen-typescript: 2.2.2(typescript@5.3.3) + vite: 4.5.2(@types/node@20.5.1) + optionalDependencies: + typescript: 5.3.3 + + '@jridgewell/gen-mapping@0.3.3': + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.22 + + '@jridgewell/resolve-uri@3.1.1': {} + + '@jridgewell/set-array@1.1.2': {} + + '@jridgewell/sourcemap-codec@1.4.15': {} + + '@jridgewell/trace-mapping@0.3.22': + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + + '@juggle/resize-observer@3.4.0': {} + + '@mdx-js/react@2.3.0(react@18.2.0)': + dependencies: + '@types/mdx': 2.0.11 + '@types/react': 18.2.48 + react: 18.2.0 + + '@mswjs/cookies@1.1.0': {} + + '@mswjs/interceptors@0.26.15': + dependencies: + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/logger': 0.3.0 + '@open-draft/until': 2.1.0 + is-node-process: 1.2.0 + outvariant: 1.4.2 + strict-event-emitter: 0.5.1 + + '@ndelangen/get-tarball@3.0.9': + dependencies: + gunzip-maybe: 1.4.2 + pump: 3.0.0 + tar-fs: 2.1.1 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.0 + + '@open-draft/deferred-promise@2.2.0': {} + + '@open-draft/logger@0.3.0': + dependencies: + is-node-process: 1.2.0 + outvariant: 1.4.2 + + '@open-draft/until@2.1.0': {} + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@pkgr/core@0.1.1': {} + + '@radix-ui/number@1.0.1': + dependencies: + '@babel/runtime': 7.23.9 + + '@radix-ui/primitive@1.0.1': + dependencies: + '@babel/runtime': 7.23.9 + + '@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + + '@radix-ui/react-avatar@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.48)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + + '@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.48)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + + '@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.48)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.48 + + '@radix-ui/react-context@1.0.1(@types/react@18.2.48)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.48 + + '@radix-ui/react-dialog@1.0.5(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.48)(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.5(@types/react@18.2.48)(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + + '@radix-ui/react-direction@1.0.1(@types/react@18.2.48)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.48 + + '@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.48)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + + '@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.48)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + + '@radix-ui/react-dropdown-menu@2.0.6(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-menu': 2.0.6(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.48)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + + '@radix-ui/react-focus-guards@1.0.1(@types/react@18.2.48)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.48 + + '@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + + '@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + + '@radix-ui/react-id@1.0.1(@types/react@18.2.48)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.48)(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.48 + + '@radix-ui/react-label@2.0.2(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + + '@radix-ui/react-menu@2.0.6(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(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.5(@types/react@18.2.48)(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + + '@radix-ui/react-popover@1.0.7(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.48)(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.5(@types/react@18.2.48)(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + + '@radix-ui/react-popper@1.1.2(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + '@floating-ui/react-dom': 2.0.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/rect': 1.0.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + + '@radix-ui/react-popper@1.1.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + '@floating-ui/react-dom': 2.0.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/rect': 1.0.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + + '@radix-ui/react-portal@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + + '@radix-ui/react-portal@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + + '@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.48)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + + '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.48)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + + '@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.48)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + + '@radix-ui/react-select@1.2.2(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + '@radix-ui/number': 1.0.1 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.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.5(@types/react@18.2.48)(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + + '@radix-ui/react-separator@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + + '@radix-ui/react-slot@1.0.2(@types/react@18.2.48)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.48 + + '@radix-ui/react-tabs@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.48)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + + '@radix-ui/react-toggle-group@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-toggle': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.48)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + + '@radix-ui/react-toggle@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.48)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + + '@radix-ui/react-toolbar@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-separator': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-toggle-group': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + + '@radix-ui/react-tooltip@1.0.7(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + + '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.48)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.48 + + '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.48)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.48 + + '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.48)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.48)(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.48 + + '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.48)(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 + react: 18.2.0 + optionalDependencies: '@types/react': 18.2.48 + + '@radix-ui/react-use-previous@1.0.1(@types/react@18.2.48)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.9 react: 18.2.0 - dev: true + optionalDependencies: + '@types/react': 18.2.48 - /@radix-ui/react-use-rect@1.0.1(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@radix-ui/react-use-rect@1.0.1(@types/react@18.2.48)(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 '@radix-ui/rect': 1.0.1 - '@types/react': 18.2.48 react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.48 - /@radix-ui/react-use-size@1.0.1(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true + '@radix-ui/react-use-size@1.0.1(@types/react@18.2.48)(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.48)(react@18.2.0) - '@types/react': 18.2.48 react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.48 - /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} - 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 + '@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.48 - '@types/react-dom': 18.2.18 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 - /@radix-ui/rect@1.0.1: - resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} + '@radix-ui/rect@1.0.1': dependencies: '@babel/runtime': 7.23.9 - /@remix-run/router@1.14.2: - resolution: {integrity: sha512-ACXpdMM9hmKZww21yEqWwiLws/UPLhNKvimN8RrYSqPSvB3ov7sLvAcfvaxePeLvccTQKGdkDIhLYApZVDFuKg==} - engines: {node: '>=14.0.0'} - dev: false + '@remix-run/router@1.14.2': {} - /@rollup/pluginutils@5.1.0: - resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true + '@rollup/pluginutils@5.1.0(rollup@3.29.4)': dependencies: '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 - dev: true + optionalDependencies: + rollup: 3.29.4 - /@sinclair/typebox@0.27.8: - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - dev: true + '@sinclair/typebox@0.27.8': {} - /@storybook/addon-actions@7.6.12: - resolution: {integrity: sha512-vK/H6K+AJ4ZSsCu/+MapYYI/xrynB6JoCOejt//flTigZOhwTWv7WXbmEeqGIIToXy0LA2IUZ1/kCjFXR0lEdQ==} + '@storybook/addon-actions@7.6.12': dependencies: '@storybook/core-events': 7.6.12 '@storybook/global': 5.0.0 @@ -3173,20 +7329,16 @@ packages: dequal: 2.0.3 polished: 4.2.2 uuid: 9.0.1 - dev: true - /@storybook/addon-backgrounds@7.6.12: - resolution: {integrity: sha512-G14uN5lDXUtXw+dmEPaB6lpDpR9K25ssYuWWn8yYR44B1WMuD4kDgw0QGb0g+xYQj9R1TsalKEJHA4AuSYkVGQ==} + '@storybook/addon-backgrounds@7.6.12': dependencies: '@storybook/global': 5.0.0 memoizerific: 1.11.3 ts-dedent: 2.2.0 - dev: true - /@storybook/addon-controls@7.6.12(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-NX4KajscOsuXyYE3hhniF+y0E59E6rM0FgIaZ48P9c0DD+wDo8bAISHjZvmKXtDVajLk4/JySvByx1eN6V3hmA==} + '@storybook/addon-controls@7.6.12(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@storybook/blocks': 7.6.12(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) + '@storybook/blocks': 7.6.12(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) lodash: 4.17.21 ts-dedent: 2.2.0 transitivePeerDependencies: @@ -3196,19 +7348,14 @@ packages: - react - react-dom - supports-color - dev: true - /@storybook/addon-docs@7.6.12(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-AzMgnGYfEg+Z1ycJh8MEp44x1DfjRijKCVYNaPFT6o+TjN/9GBaAkV4ydxmQzMEMnnnh/0E9YeHO+ivBVSkNog==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@storybook/addon-docs@7.6.12(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@jest/transform': 29.7.0 '@mdx-js/react': 2.3.0(react@18.2.0) - '@storybook/blocks': 7.6.12(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) + '@storybook/blocks': 7.6.12(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/client-logger': 7.6.12 - '@storybook/components': 7.6.12(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) + '@storybook/components': 7.6.12(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/csf-plugin': 7.6.12 '@storybook/csf-tools': 7.6.12 '@storybook/global': 5.0.0 @@ -3216,8 +7363,8 @@ packages: '@storybook/node-logger': 7.6.12 '@storybook/postinstall': 7.6.12 '@storybook/preview-api': 7.6.12 - '@storybook/react-dom-shim': 7.6.12(react-dom@18.2.0)(react@18.2.0) - '@storybook/theming': 7.6.12(react-dom@18.2.0)(react@18.2.0) + '@storybook/react-dom-shim': 7.6.12(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/theming': 7.6.12(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/types': 7.6.12 fs-extra: 11.2.0 react: 18.2.0 @@ -3230,25 +7377,20 @@ packages: - '@types/react-dom' - encoding - supports-color - dev: true - /@storybook/addon-essentials@7.6.12(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Pl6n+19QC/T+cuU8DZjCwILXVxrdRTivNxPOiy8SEX+jjR4H0uAfXC9+RXCPjRFn64t4j1K7oIyoNokEn39cNw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@storybook/addon-essentials@7.6.12(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@storybook/addon-actions': 7.6.12 '@storybook/addon-backgrounds': 7.6.12 - '@storybook/addon-controls': 7.6.12(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@storybook/addon-docs': 7.6.12(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) + '@storybook/addon-controls': 7.6.12(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@storybook/addon-docs': 7.6.12(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/addon-highlight': 7.6.12 '@storybook/addon-measure': 7.6.12 '@storybook/addon-outline': 7.6.12 '@storybook/addon-toolbars': 7.6.12 '@storybook/addon-viewport': 7.6.12 '@storybook/core-common': 7.6.12 - '@storybook/manager-api': 7.6.12(react-dom@18.2.0)(react@18.2.0) + '@storybook/manager-api': 7.6.12(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/node-logger': 7.6.12 '@storybook/preview-api': 7.6.12 react: 18.2.0 @@ -3259,84 +7401,59 @@ packages: - '@types/react-dom' - encoding - supports-color - dev: true - /@storybook/addon-highlight@7.6.12: - resolution: {integrity: sha512-rWNEyBhwncXEDd9z7l67BLBIPqn0SRI/CJpZvCSF5KLWrVaoSEDF8INavmbikd1JBMcajJ28Ur6NsGj+eJjJiw==} + '@storybook/addon-highlight@7.6.12': dependencies: '@storybook/global': 5.0.0 - dev: true - /@storybook/addon-interactions@7.6.12: - resolution: {integrity: sha512-D8NX2xu9WiqPInoN842DU+KAFVC8HscGczqkDGEiWCAqq0DfXtW/0ClMSaE6d2+twhGv6uiPfeJ2IdynSZolXg==} + '@storybook/addon-interactions@7.6.12': dependencies: '@storybook/global': 5.0.0 '@storybook/types': 7.6.12 jest-mock: 27.5.1 polished: 4.2.2 ts-dedent: 2.2.0 - dev: true - /@storybook/addon-links@7.6.12(react@18.2.0): - resolution: {integrity: sha512-rGwPYpZAANPrf2GaNi5t9zAjLF8PgzKizyBPltIXUtplxDg88ziXlDA1dhsuGDs4Kf0oXECyAHPw79JjkJQziA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true + '@storybook/addon-links@7.6.12(react@18.2.0)': dependencies: '@storybook/csf': 0.1.2 '@storybook/global': 5.0.0 - react: 18.2.0 ts-dedent: 2.2.0 - dev: true + optionalDependencies: + react: 18.2.0 - /@storybook/addon-measure@7.6.12: - resolution: {integrity: sha512-K3aKErr84V0eVK7t+wco5cSYDdeotwoXi4e7VLSa2cdUz0wanOb4R7v3kf6vxucUyp05Lv+yHkz9zsbwuezepA==} + '@storybook/addon-measure@7.6.12': dependencies: '@storybook/global': 5.0.0 tiny-invariant: 1.3.1 - dev: true - /@storybook/addon-outline@7.6.12: - resolution: {integrity: sha512-r6eO4EKh+zwGUNjxe8v/44BhyV+JD3Dl9GYMutsFqbwYsoWHJaZmzHuyqeFBXwx2MEoixdWdIzNMP71+srQqvw==} + '@storybook/addon-outline@7.6.12': dependencies: '@storybook/global': 5.0.0 ts-dedent: 2.2.0 - dev: true - /@storybook/addon-themes@7.6.12: - resolution: {integrity: sha512-3NwkWsbXxNtsrsnyVzjBDAR3Y1A/laojELmS4EOWl5BID/n4erDVF36KmGLvh8HuY9GidHaRnwsCClJCZXExsg==} + '@storybook/addon-themes@7.6.12': dependencies: ts-dedent: 2.2.0 - dev: true - /@storybook/addon-toolbars@7.6.12: - resolution: {integrity: sha512-TSwq8xO7fmS6GRTgJJa31OBzm+5zlgDYK2Q42jxFo/Vm10uMzCpjYJE6mIHpUDyjyBVQk6xxMMEcvo6no2eAWg==} - dev: true + '@storybook/addon-toolbars@7.6.12': {} - /@storybook/addon-viewport@7.6.12: - resolution: {integrity: sha512-51zsBeoaEzq699SKDCe+GG/2PDAJKKJtpjqxIc4lDskogaCJSb3Ie8LyookHAKYgbi2qealVgK8zaP27KUj3Pg==} + '@storybook/addon-viewport@7.6.12': dependencies: memoizerific: 1.11.3 - dev: true - /@storybook/blocks@7.6.12(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-T47KOAjgZmhV+Ov59A70inE5edInh1Jh5w/5J5cjpk9a2p4uhd337SnK4B8J5YLhcM2lbKRWJjzIJ0nDZQTdnQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@storybook/blocks@7.6.12(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@storybook/channels': 7.6.12 '@storybook/client-logger': 7.6.12 - '@storybook/components': 7.6.12(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) + '@storybook/components': 7.6.12(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/core-events': 7.6.12 '@storybook/csf': 0.1.2 '@storybook/docs-tools': 7.6.12 '@storybook/global': 5.0.0 - '@storybook/manager-api': 7.6.12(react-dom@18.2.0)(react@18.2.0) + '@storybook/manager-api': 7.6.12(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/preview-api': 7.6.12 - '@storybook/theming': 7.6.12(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 7.6.12(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/types': 7.6.12 '@types/lodash': 4.14.202 color-convert: 2.0.1 @@ -3346,7 +7463,7 @@ packages: memoizerific: 1.11.3 polished: 4.2.2 react: 18.2.0 - react-colorful: 5.6.1(react-dom@18.2.0)(react@18.2.0) + react-colorful: 5.6.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-dom: 18.2.0(react@18.2.0) telejson: 7.2.0 tocbot: 4.25.0 @@ -3357,10 +7474,8 @@ packages: - '@types/react-dom' - encoding - supports-color - dev: true - /@storybook/builder-manager@7.6.12: - resolution: {integrity: sha512-AJFrtBj0R11OFwwz+2j+ivRzttWXT6LesSGoLnxown24EV9uLQoHtGb7GOA2GyzY5wjUJS9gQBPGHXjvQEfLJA==} + '@storybook/builder-manager@7.6.12': dependencies: '@fal-works/esbuild-plugin-global-externals': 2.1.2 '@storybook/core-common': 7.6.12 @@ -3381,22 +7496,8 @@ packages: transitivePeerDependencies: - encoding - supports-color - dev: true - /@storybook/builder-vite@7.6.12(typescript@5.3.3)(vite@4.5.2): - resolution: {integrity: sha512-VJIn+XYVVhdJHHMEtYDnEyQQU4fRupugSFpP9XLYTRYgXPN9PSVey4vI/IyuHcHYINPba39UY2+8PW+5NgShxQ==} - peerDependencies: - '@preact/preset-vite': '*' - typescript: '>= 4.3.x' - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 - vite-plugin-glimmerx: '*' - peerDependenciesMeta: - '@preact/preset-vite': - optional: true - typescript: - optional: true - vite-plugin-glimmerx: - optional: true + '@storybook/builder-vite@7.6.12(typescript@5.3.3)(vite@4.5.2(@types/node@20.5.1))': dependencies: '@storybook/channels': 7.6.12 '@storybook/client-logger': 7.6.12 @@ -3414,15 +7515,14 @@ packages: fs-extra: 11.2.0 magic-string: 0.30.6 rollup: 3.29.4 - typescript: 5.3.3 vite: 4.5.2(@types/node@20.5.1) + optionalDependencies: + typescript: 5.3.3 transitivePeerDependencies: - encoding - supports-color - dev: true - /@storybook/channels@7.6.12: - resolution: {integrity: sha512-TaPl5Y3lOoVi5kTLgKNRX8xh2sUPekH0Id1l4Ymw+lpgriEY6r60bmkZLysLG1GhlskpQ/da2+S2ap2ht8P2TQ==} + '@storybook/channels@7.6.12': dependencies: '@storybook/client-logger': 7.6.12 '@storybook/core-events': 7.6.12 @@ -3430,11 +7530,8 @@ packages: qs: 6.11.2 telejson: 7.2.0 tiny-invariant: 1.3.1 - dev: true - /@storybook/cli@7.6.12: - resolution: {integrity: sha512-x4sG1oIVERxp+WnWUexVlgaJCFmML0kGi7a5qfx7z4vHMxCV/WG7g1q7mPS/kqStCGEiQdTciCqOEFqlMh9MLw==} - hasBin: true + '@storybook/cli@7.6.12': dependencies: '@babel/core': 7.23.9 '@babel/preset-env': 7.23.9(@babel/core@7.23.9) @@ -3464,7 +7561,7 @@ packages: get-port: 5.1.1 giget: 1.2.1 globby: 11.1.0 - jscodeshift: 0.15.1(@babel/preset-env@7.23.9) + jscodeshift: 0.15.1(@babel/preset-env@7.23.9(@babel/core@7.23.9)) leven: 3.1.0 ora: 5.4.1 prettier: 2.8.8 @@ -3481,16 +7578,12 @@ packages: - encoding - supports-color - utf-8-validate - dev: true - /@storybook/client-logger@7.6.12: - resolution: {integrity: sha512-hiRv6dXsOttMPqm9SxEuFoAtDe9rs7TUS8XcO5rmJ9BgfwBJsYlHzAxXkazxmvlyZtKL7gMx6m8OYbCdZgUqtA==} + '@storybook/client-logger@7.6.12': dependencies: '@storybook/global': 5.0.0 - dev: true - /@storybook/codemod@7.6.12: - resolution: {integrity: sha512-4EI4Ah1cvz6gFkXOS/LGf23oN8LO6ABGpWwPQoMHpIV3wUkFWBwrKFUe/UAQZGptnM0VZRYx4grS82Hluw4XJA==} + '@storybook/codemod@7.6.12': dependencies: '@babel/core': 7.23.9 '@babel/preset-env': 7.23.9(@babel/core@7.23.9) @@ -3502,46 +7595,37 @@ packages: '@types/cross-spawn': 6.0.6 cross-spawn: 7.0.3 globby: 11.1.0 - jscodeshift: 0.15.1(@babel/preset-env@7.23.9) + jscodeshift: 0.15.1(@babel/preset-env@7.23.9(@babel/core@7.23.9)) lodash: 4.17.21 prettier: 2.8.8 recast: 0.23.4 transitivePeerDependencies: - supports-color - dev: true - /@storybook/components@7.6.12(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-PCijPqmlZd7qyTzNr+vD0Kf8sAI9vWJIaxbSjXwn/De3e63m4fsEcIf8FaUT8cMZ46AWZvaxaxX5km2u0UISJQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@storybook/components@7.6.12(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@radix-ui/react-select': 1.2.2(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-toolbar': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-select': 1.2.2(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-toolbar': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/client-logger': 7.6.12 '@storybook/csf': 0.1.2 '@storybook/global': 5.0.0 - '@storybook/theming': 7.6.12(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 7.6.12(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/types': 7.6.12 memoizerific: 1.11.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - use-resize-observer: 9.1.0(react-dom@18.2.0)(react@18.2.0) + use-resize-observer: 9.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) util-deprecate: 1.0.2 transitivePeerDependencies: - '@types/react' - '@types/react-dom' - dev: true - /@storybook/core-client@7.6.12: - resolution: {integrity: sha512-VzVp32tMZsCzM4UIqfvCoJF7N9mBf6dsAxh1/ZgViy75Fht78pGo3JwZXW8osMbFSRpmWD7fxlUM5S7TQOYQug==} + '@storybook/core-client@7.6.12': dependencies: '@storybook/client-logger': 7.6.12 '@storybook/preview-api': 7.6.12 - dev: true - /@storybook/core-common@7.6.12: - resolution: {integrity: sha512-kM9YiBBMM2x5v/oylL7gdO1PS4oehgJC21MivS9p5QZ8uuXKtCQ6UQvI3rzaV+1ZzUA4n+I8MyaMrNIQk8KDbw==} + '@storybook/core-common@7.6.12': dependencies: '@storybook/core-events': 7.6.12 '@storybook/node-logger': 7.6.12 @@ -3569,16 +7653,12 @@ packages: transitivePeerDependencies: - encoding - supports-color - dev: true - /@storybook/core-events@7.6.12: - resolution: {integrity: sha512-IO4cwk7bBCKH6lLnnIlHO9FwQXt/9CzLUAoZSY9msWsdPppCdKlw8ynJI5YarSNKDBUn8ArIfnRf0Mve0KQr9Q==} + '@storybook/core-events@7.6.12': dependencies: ts-dedent: 2.2.0 - dev: true - /@storybook/core-server@7.6.12: - resolution: {integrity: sha512-tjWifKsDnIc8pvbjVyQrOHef70Gcp93Bg3WwuysB8PGk7lcX2RD9zv44HNIyjxdOLSSv66IGKrOldEBL3hab4w==} + '@storybook/core-server@7.6.12': dependencies: '@aw-web-design/x-default-browser': 1.4.126 '@discoveryjs/json-ext': 0.5.7 @@ -3626,19 +7706,15 @@ packages: - encoding - supports-color - utf-8-validate - dev: true - /@storybook/csf-plugin@7.6.12: - resolution: {integrity: sha512-fe/84AyctJcrpH1F/tTBxKrbjv0ilmG3ZTwVcufEiAzupZuYjQ/0P+Pxs8m8VxiGJZZ1pWofFFDbYi+wERjamQ==} + '@storybook/csf-plugin@7.6.12': dependencies: '@storybook/csf-tools': 7.6.12 unplugin: 1.6.0 transitivePeerDependencies: - supports-color - dev: true - /@storybook/csf-tools@7.6.12: - resolution: {integrity: sha512-MdhkYYxSW5I6Jpk34gTkAZsuj9sxe0xdyeUQpNa8CgJxG43F+ehZ6scW/IPjoSG9gCXBUJMekq26UrmbVfsLCQ==} + '@storybook/csf-tools@7.6.12': dependencies: '@babel/generator': 7.23.6 '@babel/parser': 7.23.9 @@ -3651,26 +7727,18 @@ packages: ts-dedent: 2.2.0 transitivePeerDependencies: - supports-color - dev: true - /@storybook/csf@0.0.1: - resolution: {integrity: sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==} + '@storybook/csf@0.0.1': dependencies: lodash: 4.17.21 - dev: true - /@storybook/csf@0.1.2: - resolution: {integrity: sha512-ePrvE/pS1vsKR9Xr+o+YwdqNgHUyXvg+1Xjx0h9LrVx7Zq4zNe06pd63F5EvzTbCbJsHj7GHr9tkiaqm7U8WRA==} + '@storybook/csf@0.1.2': dependencies: type-fest: 2.19.0 - dev: true - /@storybook/docs-mdx@0.1.0: - resolution: {integrity: sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg==} - dev: true + '@storybook/docs-mdx@0.1.0': {} - /@storybook/docs-tools@7.6.12: - resolution: {integrity: sha512-nY2lqEDTd/fR/D91ZLlIp+boSuJtkb8DqHW7pECy61rJqzGq4QpepRaWjQDKnGTgPItrsPfTPOu6iXvXNK07Ow==} + '@storybook/docs-tools@7.6.12': dependencies: '@storybook/core-common': 7.6.12 '@storybook/preview-api': 7.6.12 @@ -3682,14 +7750,10 @@ packages: transitivePeerDependencies: - encoding - supports-color - dev: true - /@storybook/global@5.0.0: - resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} - dev: true + '@storybook/global@5.0.0': {} - /@storybook/manager-api@7.6.12(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-XA5KQpY44d6mlqt0AlesZ7fsPpm1PCpoV+nRGFBR0YtF6RdPFvrPyHhlGgLkJC4xSyb2YJmLKn8cERSluAcEgQ==} + '@storybook/manager-api@7.6.12(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@storybook/channels': 7.6.12 '@storybook/client-logger': 7.6.12 @@ -3697,7 +7761,7 @@ packages: '@storybook/csf': 0.1.2 '@storybook/global': 5.0.0 '@storybook/router': 7.6.12 - '@storybook/theming': 7.6.12(react-dom@18.2.0)(react@18.2.0) + '@storybook/theming': 7.6.12(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/types': 7.6.12 dequal: 2.0.3 lodash: 4.17.21 @@ -3708,26 +7772,16 @@ packages: transitivePeerDependencies: - react - react-dom - dev: true - /@storybook/manager@7.6.12: - resolution: {integrity: sha512-WMWvswJHGiqJFJb98WQMQfZQhLuVtmci4y/VJGQ/Jnq1nJQs76BCtaeGiHcsYmRaAP1HMI4DbzuTSEgca146xw==} - dev: true + '@storybook/manager@7.6.12': {} - /@storybook/mdx2-csf@1.1.0: - resolution: {integrity: sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw==} - dev: true + '@storybook/mdx2-csf@1.1.0': {} - /@storybook/node-logger@7.6.12: - resolution: {integrity: sha512-iS44/EjfF6hLecKzICmcpQoB9bmVi4tXx5gVXnbI5ZyziBibRQcg/U191Njl7wY2ScN/RCQOr8lh5k57rI3Prg==} - dev: true + '@storybook/node-logger@7.6.12': {} - /@storybook/postinstall@7.6.12: - resolution: {integrity: sha512-uR0mDPxLzPaouCNrLp8vID8lATVTOtG7HB6lfjjzMdE3sN6MLmK9n2z2nXjb5DRRxOFWMeE1/4Age1/Ml2tnmA==} - dev: true + '@storybook/postinstall@7.6.12': {} - /@storybook/preview-api@7.6.12: - resolution: {integrity: sha512-uSzeMSLnCRROjiofJP0F0niLWL+sboQ5ktHW6BAYoPwprumXduPxKBUVEZNxMbVYoAz9v/kEZmaLauh8LRP2Hg==} + '@storybook/preview-api@7.6.12': dependencies: '@storybook/channels': 7.6.12 '@storybook/client-logger': 7.6.12 @@ -3743,42 +7797,26 @@ packages: synchronous-promise: 2.0.17 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - dev: true - /@storybook/preview-web@7.6.12: - resolution: {integrity: sha512-8NPvn+9607VVZh/nwzzkDGTEPIBrmenmt/ZdUz7FBvbBcO0wZjjFVBJmtrT3onegtYYyGNyQY125tOqLDn8uew==} + '@storybook/preview-web@7.6.12': dependencies: '@storybook/client-logger': 7.6.12 '@storybook/preview-api': 7.6.12 - dev: true - /@storybook/preview@7.6.12: - resolution: {integrity: sha512-7vbeqQY3X+FCt/ccgCuBmj4rkbQebLHGEBAt8elcX0E2pr7SGW57lWhnasU3jeMaz7tNrkcs0gfl4hyVRWUHDg==} - dev: true + '@storybook/preview@7.6.12': {} - /@storybook/react-dom-shim@7.6.12(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-P8eu/s/RQlc/7Yvr260lqNa6rttxIYiPUuHQBu9oCacwkpB3Xep2R/PUY2CifRHqlDhaOINO/Z79oGZl4EBQRQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@storybook/react-dom-shim@7.6.12(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true - /@storybook/react-vite@7.6.12(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)(vite@4.5.2): - resolution: {integrity: sha512-kQjCWmTcHuZM1Mlt1QjpYNXP1TxfkSDFWC36fSEUC0q48wzyjUEZs6YraxZu0YE+zXK+X4tmaZhz8pUPgV3gLw==} - engines: {node: '>=16'} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 + '@storybook/react-vite@7.6.12(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(rollup@3.29.4)(typescript@5.3.3)(vite@4.5.2(@types/node@20.5.1))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.3.3)(vite@4.5.2) - '@rollup/pluginutils': 5.1.0 - '@storybook/builder-vite': 7.6.12(typescript@5.3.3)(vite@4.5.2) - '@storybook/react': 7.6.12(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3) - '@vitejs/plugin-react': 3.1.0(vite@4.5.2) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.3.3)(vite@4.5.2(@types/node@20.5.1)) + '@rollup/pluginutils': 5.1.0(rollup@3.29.4) + '@storybook/builder-vite': 7.6.12(typescript@5.3.3)(vite@4.5.2(@types/node@20.5.1)) + '@storybook/react': 7.6.12(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.3.3) + '@vitejs/plugin-react': 3.1.0(vite@4.5.2(@types/node@20.5.1)) magic-string: 0.30.6 react: 18.2.0 react-docgen: 7.0.3 @@ -3791,25 +7829,15 @@ packages: - supports-color - typescript - vite-plugin-glimmerx - dev: true - /@storybook/react@7.6.12(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3): - resolution: {integrity: sha512-ITDRGi79Qg+z1kGYv+yyJESz/5AsJVdBTMO7tr1qV7gmHElkASt6UR8SBSqKgePOnYgy3k/1PLfbzOs6G4OgYQ==} - engines: {node: '>=16.0.0'} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@storybook/react@7.6.12(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.3.3)': dependencies: '@storybook/client-logger': 7.6.12 '@storybook/core-client': 7.6.12 '@storybook/docs-tools': 7.6.12 '@storybook/global': 5.0.0 '@storybook/preview-api': 7.6.12 - '@storybook/react-dom-shim': 7.6.12(react-dom@18.2.0)(react@18.2.0) + '@storybook/react-dom-shim': 7.6.12(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@storybook/types': 7.6.12 '@types/escodegen': 0.0.6 '@types/estree': 0.0.51 @@ -3823,26 +7851,23 @@ packages: prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-element-to-jsx-string: 15.0.0(react-dom@18.2.0)(react@18.2.0) + react-element-to-jsx-string: 15.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) ts-dedent: 2.2.0 type-fest: 2.19.0 - typescript: 5.3.3 util-deprecate: 1.0.2 + optionalDependencies: + typescript: 5.3.3 transitivePeerDependencies: - encoding - supports-color - dev: true - /@storybook/router@7.6.12: - resolution: {integrity: sha512-1fqscJbePFJXhapqiv7fAIIqAvouSsdPnqWjJGJrUMR6JBtRYMcrb3MnDeqi9OYnU73r65BrQBPtSzWM8nP0LQ==} + '@storybook/router@7.6.12': dependencies: '@storybook/client-logger': 7.6.12 memoizerific: 1.11.3 qs: 6.11.2 - dev: true - /@storybook/telemetry@7.6.12: - resolution: {integrity: sha512-eBG3sLb9CZ05pyK2JXBvnaAsxDzbZH57VyhtphhuZmx0DqF/78qIoHs9ebRJpJWV0sL5rtT9vIq8QXpQhDHLWg==} + '@storybook/telemetry@7.6.12': dependencies: '@storybook/client-logger': 7.6.12 '@storybook/core-common': 7.6.12 @@ -3855,13 +7880,8 @@ packages: transitivePeerDependencies: - encoding - supports-color - dev: true - /@storybook/theming@7.6.12(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-P4zoMKlSYbNrWJjQROuz+DZSDEpdf3TUvk203EqBRdElqw2EMHcqZ8+0HGPFfVHpqEj05+B9Mr6R/Z/BURj0lw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + '@storybook/theming@7.6.12(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) '@storybook/client-logger': 7.6.12 @@ -3869,363 +7889,233 @@ packages: memoizerific: 1.11.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true - /@storybook/types@7.6.12: - resolution: {integrity: sha512-Wsbd+NS10/2yMHQ/26rXHflXam0hm2qufTFiHOX6VXZWxij3slRU88Fnwzp+1QSyjXb0qkEr8dOx7aG00+ItVw==} + '@storybook/types@7.6.12': dependencies: '@storybook/channels': 7.6.12 '@types/babel__core': 7.20.5 '@types/express': 4.17.21 file-system-cache: 2.3.0 - dev: true - /@tanstack/react-table@8.15.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-8K4RSROUtXUtfiezV6Ehl8z99axFrkQnxXi0vjWBJv3Tsm5x4EyrgXI7d2tOOMoANykKZLB6S1sGZGemoMRt7Q==} - engines: {node: '>=12'} - peerDependencies: - react: '>=16.8' - react-dom: '>=16.8' + '@tanstack/eslint-plugin-query@5.43.1(eslint@8.56.0)(typescript@5.3.3)': + dependencies: + '@typescript-eslint/utils': 8.0.0-alpha.28(eslint@8.56.0)(typescript@5.3.3) + eslint: 8.56.0 + transitivePeerDependencies: + - supports-color + - typescript + + '@tanstack/query-core@5.45.0': {} + + '@tanstack/react-query@5.45.1(react@18.2.0)': + dependencies: + '@tanstack/query-core': 5.45.0 + react: 18.2.0 + + '@tanstack/react-table@8.15.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@tanstack/table-core': 8.14.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: false - /@tanstack/table-core@8.14.0: - resolution: {integrity: sha512-wDhpKJahGHWhmRt4RxtV3pES63CoeadljGWS/xeS9OJr1HBl2NB+OO44ht3sxDH5j5TRDAbQzC0NvSlsUfn7lQ==} - engines: {node: '>=12'} - dev: false + '@tanstack/table-core@8.14.0': {} - /@tsconfig/node10@1.0.9: - resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} - dev: true + '@tsconfig/node10@1.0.9': {} - /@tsconfig/node12@1.0.11: - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: true + '@tsconfig/node12@1.0.11': {} - /@tsconfig/node14@1.0.3: - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: true + '@tsconfig/node14@1.0.3': {} - /@tsconfig/node16@1.0.4: - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - dev: true + '@tsconfig/node16@1.0.4': {} - /@types/babel__core@7.20.5: - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.23.9 '@babel/types': 7.23.9 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.5 - dev: true - /@types/babel__generator@7.6.8: - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + '@types/babel__generator@7.6.8': dependencies: '@babel/types': 7.23.9 - dev: true - /@types/babel__template@7.4.4: - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + '@types/babel__template@7.4.4': dependencies: '@babel/parser': 7.23.9 '@babel/types': 7.23.9 - dev: true - /@types/babel__traverse@7.20.5: - resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} + '@types/babel__traverse@7.20.5': dependencies: '@babel/types': 7.23.9 - dev: true - /@types/body-parser@1.19.5: - resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 '@types/node': 20.11.14 - dev: true - /@types/connect@3.4.38: - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + '@types/connect@3.4.38': dependencies: '@types/node': 20.11.14 - dev: true - /@types/cookie@0.6.0: - resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - dev: true + '@types/cookie@0.6.0': {} - /@types/cross-spawn@6.0.6: - resolution: {integrity: sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==} + '@types/cross-spawn@6.0.6': dependencies: '@types/node': 20.11.14 - dev: true - /@types/detect-port@1.3.5: - resolution: {integrity: sha512-Rf3/lB9WkDfIL9eEKaSYKc+1L/rNVYBjThk22JTqQw0YozXarX8YljFAz+HCoC6h4B4KwCMsBPZHaFezwT4BNA==} - dev: true + '@types/detect-port@1.3.5': {} - /@types/doctrine@0.0.3: - resolution: {integrity: sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA==} - dev: true + '@types/doctrine@0.0.3': {} - /@types/doctrine@0.0.9: - resolution: {integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==} - dev: true + '@types/doctrine@0.0.9': {} - /@types/ejs@3.1.5: - resolution: {integrity: sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==} - dev: true + '@types/ejs@3.1.5': {} - /@types/emscripten@1.39.10: - resolution: {integrity: sha512-TB/6hBkYQJxsZHSqyeuO1Jt0AB/bW6G7rHt9g7lML7SOF6lbgcHvw/Lr+69iqN0qxgXLhWKScAon73JNnptuDw==} - dev: true + '@types/emscripten@1.39.10': {} - /@types/escodegen@0.0.6: - resolution: {integrity: sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==} - dev: true + '@types/escodegen@0.0.6': {} - /@types/estree@0.0.51: - resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} - dev: true + '@types/estree@0.0.51': {} - /@types/estree@1.0.5: - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - dev: true + '@types/estree@1.0.5': {} - /@types/express-serve-static-core@4.17.42: - resolution: {integrity: sha512-ckM3jm2bf/MfB3+spLPWYPUH573plBFwpOhqQ2WottxYV85j1HQFlxmnTq57X1yHY9awZPig06hL/cLMgNWHIQ==} + '@types/express-serve-static-core@4.17.42': dependencies: '@types/node': 20.11.14 '@types/qs': 6.9.11 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 - dev: true - /@types/express@4.17.21: - resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + '@types/express@4.17.21': dependencies: '@types/body-parser': 1.19.5 '@types/express-serve-static-core': 4.17.42 '@types/qs': 6.9.11 '@types/serve-static': 1.15.5 - dev: true - /@types/find-cache-dir@3.2.1: - resolution: {integrity: sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==} - dev: true + '@types/find-cache-dir@3.2.1': {} - /@types/glob@7.2.0: - resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 '@types/node': 20.11.14 - dev: true - /@types/graceful-fs@4.1.9: - resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + '@types/graceful-fs@4.1.9': dependencies: '@types/node': 20.11.14 - dev: true - /@types/http-errors@2.0.4: - resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - dev: true + '@types/http-errors@2.0.4': {} - /@types/istanbul-lib-coverage@2.0.6: - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - dev: true + '@types/istanbul-lib-coverage@2.0.6': {} - /@types/istanbul-lib-report@3.0.3: - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + '@types/istanbul-lib-report@3.0.3': dependencies: '@types/istanbul-lib-coverage': 2.0.6 - dev: true - /@types/istanbul-reports@3.0.4: - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + '@types/istanbul-reports@3.0.4': dependencies: '@types/istanbul-lib-report': 3.0.3 - dev: true - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: true + '@types/json-schema@7.0.15': {} - /@types/json5@0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - dev: true + '@types/json5@0.0.29': {} - /@types/lodash@4.14.202: - resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} - dev: true + '@types/lodash@4.14.202': {} - /@types/mdx@2.0.11: - resolution: {integrity: sha512-HM5bwOaIQJIQbAYfax35HCKxx7a3KrK3nBtIqJgSOitivTD1y3oW9P3rxY9RkXYPUk7y/AjAohfHKmFpGE79zw==} - dev: true + '@types/mdx@2.0.11': {} - /@types/mime-types@2.1.4: - resolution: {integrity: sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==} - dev: true + '@types/mime-types@2.1.4': {} - /@types/mime@1.3.5: - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - dev: true + '@types/mime@1.3.5': {} - /@types/mime@3.0.4: - resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} - dev: true + '@types/mime@3.0.4': {} - /@types/minimatch@5.1.2: - resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - dev: true + '@types/minimatch@5.1.2': {} - /@types/minimist@1.2.5: - resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} - dev: true + '@types/minimist@1.2.5': {} - /@types/mute-stream@0.0.4: - resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==} + '@types/mute-stream@0.0.4': dependencies: '@types/node': 20.12.4 - dev: true - /@types/node-fetch@2.6.11: - resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==} + '@types/node-fetch@2.6.11': dependencies: '@types/node': 18.19.12 form-data: 4.0.0 - dev: true - /@types/node@18.19.12: - resolution: {integrity: sha512-uLcpWEAvatBEubmgCMzWforZbAu1dT9syweWnU3/DNwbeUBq2miP5nG8Y4JL9MDMKWt+7Yv1CSvA8xELdEl54w==} + '@types/node@18.19.12': dependencies: undici-types: 5.26.5 - dev: true - /@types/node@20.11.14: - resolution: {integrity: sha512-w3yWCcwULefjP9DmDDsgUskrMoOy5Z8MiwKHr1FvqGPtx7CvJzQvxD7eKpxNtklQxLruxSXWddyeRtyud0RcXQ==} + '@types/node@20.11.14': dependencies: undici-types: 5.26.5 - dev: true - /@types/node@20.12.4: - resolution: {integrity: sha512-E+Fa9z3wSQpzgYQdYmme5X3OTuejnnTx88A6p6vkkJosR3KBz+HpE3kqNm98VE6cfLFcISx7zW7MsJkH6KwbTw==} + '@types/node@20.12.4': dependencies: undici-types: 5.26.5 - dev: true - /@types/node@20.5.1: - resolution: {integrity: sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==} - dev: true + '@types/node@20.5.1': {} - /@types/normalize-package-data@2.4.4: - resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - dev: true + '@types/normalize-package-data@2.4.4': {} - /@types/pretty-hrtime@1.0.3: - resolution: {integrity: sha512-nj39q0wAIdhwn7DGUyT9irmsKK1tV0bd5WFEhgpqNTMFZ8cE+jieuTphCW0tfdm47S2zVT5mr09B28b1chmQMA==} - dev: true + '@types/pretty-hrtime@1.0.3': {} - /@types/prop-types@15.7.11: - resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} + '@types/prop-types@15.7.11': {} - /@types/qs@6.9.11: - resolution: {integrity: sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==} - dev: true + '@types/qs@6.9.11': {} - /@types/range-parser@1.2.7: - resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - dev: true + '@types/range-parser@1.2.7': {} - /@types/react-dom@18.2.18: - resolution: {integrity: sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==} + '@types/react-dom@18.2.18': dependencies: '@types/react': 18.2.48 - /@types/react@18.2.48: - resolution: {integrity: sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==} + '@types/react@18.2.48': dependencies: '@types/prop-types': 15.7.11 '@types/scheduler': 0.16.8 csstype: 3.1.3 - /@types/resolve@1.20.6: - resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} - dev: true + '@types/resolve@1.20.6': {} - /@types/scheduler@0.16.8: - resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} + '@types/scheduler@0.16.8': {} - /@types/semver@7.5.6: - resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} - dev: true + '@types/semver@7.5.6': {} - /@types/send@0.17.4: - resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 '@types/node': 20.11.14 - dev: true - /@types/serve-static@1.15.5: - resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} + '@types/serve-static@1.15.5': dependencies: '@types/http-errors': 2.0.4 '@types/mime': 3.0.4 '@types/node': 20.11.14 - dev: true - - /@types/statuses@2.0.5: - resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==} - dev: true - /@types/unist@2.0.10: - resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} - dev: true + '@types/statuses@2.0.5': {} - /@types/uuid@9.0.8: - resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} - dev: true + '@types/unist@2.0.10': {} - /@types/validator@13.11.8: - resolution: {integrity: sha512-c/hzNDBh7eRF+KbCf+OoZxKbnkpaK/cKp9iLQWqB7muXtM+MtL9SUUH8vCFcLn6dH1Qm05jiexK0ofWY7TfOhQ==} - dev: true + '@types/uuid@9.0.8': {} - /@types/wrap-ansi@3.0.0: - resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} - dev: true + '@types/validator@13.11.8': {} - /@types/yargs-parser@21.0.3: - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - dev: true + '@types/wrap-ansi@3.0.0': {} - /@types/yargs@16.0.9: - resolution: {integrity: sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==} - dependencies: - '@types/yargs-parser': 21.0.3 - dev: true + '@types/yargs-parser@21.0.3': {} - /@types/yargs@17.0.32: - resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} + '@types/yargs@16.0.9': dependencies: '@types/yargs-parser': 21.0.3 - dev: true - - /@typescript-eslint/eslint-plugin@6.20.0(@typescript-eslint/parser@6.20.0)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-fTwGQUnjhoYHeSF6m5pWNkzmDDdsKELYrOBxhjMrofPqCkoC2k3B2wvGHFxa1CTIqkEn88nlW1HVMztjo2K8Hg==} - 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 + + '@types/yargs@17.0.32': + dependencies: + '@types/yargs-parser': 21.0.3 + + '@typescript-eslint/eslint-plugin@6.20.0(@typescript-eslint/parser@6.20.0(eslint@8.56.0)(typescript@5.3.3))(eslint@8.56.0)(typescript@5.3.3)': dependencies: '@eslint-community/regexpp': 4.10.0 '@typescript-eslint/parser': 6.20.0(eslint@8.56.0)(typescript@5.3.3) @@ -4240,20 +8130,12 @@ packages: natural-compare: 1.4.0 semver: 7.5.4 ts-api-utils: 1.0.3(typescript@5.3.3) + optionalDependencies: typescript: 5.3.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/parser@6.20.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-bYerPDF/H5v6V76MdMYhjwmwgMA+jlPVqjSDq2cRqMi8bP5sR3Z+RLOiOMad3nsnmDVmn2gAFCyNgh/dIrfP/w==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/parser@6.20.0(eslint@8.56.0)(typescript@5.3.3)': dependencies: '@typescript-eslint/scope-manager': 6.20.0 '@typescript-eslint/types': 6.20.0 @@ -4261,65 +8143,45 @@ packages: '@typescript-eslint/visitor-keys': 6.20.0 debug: 4.3.4 eslint: 8.56.0 + optionalDependencies: typescript: 5.3.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/scope-manager@5.62.0: - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/scope-manager@5.62.0': dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - dev: true - /@typescript-eslint/scope-manager@6.20.0: - resolution: {integrity: sha512-p4rvHQRDTI1tGGMDFQm+GtxP1ZHyAh64WANVoyEcNMpaTFn3ox/3CcgtIlELnRfKzSs/DwYlDccJEtr3O6qBvA==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/scope-manager@6.20.0': dependencies: '@typescript-eslint/types': 6.20.0 '@typescript-eslint/visitor-keys': 6.20.0 - dev: true - /@typescript-eslint/type-utils@6.20.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-qnSobiJQb1F5JjN0YDRPHruQTrX7ICsmltXhkV536mp4idGAYrIyr47zF/JmkJtEcAVnIz4gUYJ7gOZa6SmN4g==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/scope-manager@8.0.0-alpha.28': + dependencies: + '@typescript-eslint/types': 8.0.0-alpha.28 + '@typescript-eslint/visitor-keys': 8.0.0-alpha.28 + + '@typescript-eslint/type-utils@6.20.0(eslint@8.56.0)(typescript@5.3.3)': dependencies: '@typescript-eslint/typescript-estree': 6.20.0(typescript@5.3.3) '@typescript-eslint/utils': 6.20.0(eslint@8.56.0)(typescript@5.3.3) debug: 4.3.4 eslint: 8.56.0 ts-api-utils: 1.0.3(typescript@5.3.3) + optionalDependencies: typescript: 5.3.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/types@5.62.0: - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + '@typescript-eslint/types@5.62.0': {} - /@typescript-eslint/types@6.20.0: - resolution: {integrity: sha512-MM9mfZMAhiN4cOEcUOEx+0HmuaW3WBfukBZPCfwSqFnQy0grXYtngKCqpQN339X3RrwtzspWJrpbrupKYUSBXQ==} - engines: {node: ^16.0.0 || >=18.0.0} - dev: true + '@typescript-eslint/types@6.20.0': {} - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.3.3): - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/types@8.0.0-alpha.28': {} + + '@typescript-eslint/typescript-estree@5.62.0(typescript@5.3.3)': dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 @@ -4328,19 +8190,12 @@ packages: is-glob: 4.0.3 semver: 7.5.4 tsutils: 3.21.0(typescript@5.3.3) + optionalDependencies: typescript: 5.3.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/typescript-estree@6.20.0(typescript@5.3.3): - resolution: {integrity: sha512-RnRya9q5m6YYSpBN7IzKu9FmLcYtErkDkc8/dKv81I9QiLLtVBHrjz+Ev/crAqgMNW2FCsoZF4g2QUylMnJz+g==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/typescript-estree@6.20.0(typescript@5.3.3)': dependencies: '@typescript-eslint/types': 6.20.0 '@typescript-eslint/visitor-keys': 6.20.0 @@ -4350,16 +8205,27 @@ packages: minimatch: 9.0.3 semver: 7.5.4 ts-api-utils: 1.0.3(typescript@5.3.3) + optionalDependencies: typescript: 5.3.3 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@typescript-eslint/typescript-estree@8.0.0-alpha.28(typescript@5.3.3)': + dependencies: + '@typescript-eslint/types': 8.0.0-alpha.28 + '@typescript-eslint/visitor-keys': 8.0.0-alpha.28 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.4 + semver: 7.6.2 + ts-api-utils: 1.3.0(typescript@5.3.3) + optionalDependencies: + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@5.62.0(eslint@8.56.0)(typescript@5.3.3)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@types/json-schema': 7.0.15 @@ -4373,13 +8239,8 @@ packages: transitivePeerDependencies: - supports-color - typescript - dev: true - /@typescript-eslint/utils@6.20.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-/EKuw+kRu2vAqCoDwDCBtDRU6CTKbUmwwI7SH7AashZ+W+7o8eiyy6V2cdOqN49KsTcASWsC5QeghYuRDTyOOg==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + '@typescript-eslint/utils@6.20.0(eslint@8.56.0)(typescript@5.3.3)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@types/json-schema': 7.0.15 @@ -4392,33 +8253,36 @@ packages: transitivePeerDependencies: - supports-color - typescript - dev: true - /@typescript-eslint/visitor-keys@5.62.0: - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/utils@8.0.0-alpha.28(eslint@8.56.0)(typescript@5.3.3)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@typescript-eslint/scope-manager': 8.0.0-alpha.28 + '@typescript-eslint/types': 8.0.0-alpha.28 + '@typescript-eslint/typescript-estree': 8.0.0-alpha.28(typescript@5.3.3) + eslint: 8.56.0 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@5.62.0': dependencies: '@typescript-eslint/types': 5.62.0 eslint-visitor-keys: 3.4.3 - dev: true - /@typescript-eslint/visitor-keys@6.20.0: - resolution: {integrity: sha512-E8Cp98kRe4gKHjJD4NExXKz/zOJ1A2hhZc+IMVD6i7w4yjIvh6VyuRI0gRtxAsXtoC35uGMaQ9rjI2zJaXDEAw==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/visitor-keys@6.20.0': dependencies: '@typescript-eslint/types': 6.20.0 eslint-visitor-keys: 3.4.3 - dev: true - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: true + '@typescript-eslint/visitor-keys@8.0.0-alpha.28': + dependencies: + '@typescript-eslint/types': 8.0.0-alpha.28 + eslint-visitor-keys: 3.4.3 - /@vitejs/plugin-react@3.1.0(vite@4.5.2): - resolution: {integrity: sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - vite: ^4.1.0-beta.0 + '@ungap/structured-clone@1.2.0': {} + + '@vitejs/plugin-react@3.1.0(vite@4.5.2(@types/node@20.5.1))': dependencies: '@babel/core': 7.23.9 '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.23.9) @@ -4428,13 +8292,8 @@ packages: vite: 4.5.2(@types/node@20.5.1) transitivePeerDependencies: - supports-color - dev: true - /@vitejs/plugin-react@4.2.1(vite@4.5.2): - resolution: {integrity: sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - vite: ^4.2.0 || ^5.0.0 + '@vitejs/plugin-react@4.2.1(vite@4.5.2(@types/node@20.5.1))': dependencies: '@babel/core': 7.23.9 '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.23.9) @@ -4444,288 +8303,170 @@ packages: vite: 4.5.2(@types/node@20.5.1) transitivePeerDependencies: - supports-color - dev: true - /@yarnpkg/esbuild-plugin-pnp@3.0.0-rc.15(esbuild@0.18.20): - resolution: {integrity: sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==} - engines: {node: '>=14.15.0'} - peerDependencies: - esbuild: '>=0.10.0' + '@yarnpkg/esbuild-plugin-pnp@3.0.0-rc.15(esbuild@0.18.20)': dependencies: esbuild: 0.18.20 tslib: 2.6.2 - dev: true - /@yarnpkg/fslib@2.10.3: - resolution: {integrity: sha512-41H+Ga78xT9sHvWLlFOZLIhtU6mTGZ20pZ29EiZa97vnxdohJD2AF42rCoAoWfqUz486xY6fhjMH+DYEM9r14A==} - engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'} + '@yarnpkg/fslib@2.10.3': dependencies: '@yarnpkg/libzip': 2.3.0 tslib: 1.14.1 - dev: true - /@yarnpkg/libzip@2.3.0: - resolution: {integrity: sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==} - engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'} + '@yarnpkg/libzip@2.3.0': dependencies: '@types/emscripten': 1.39.10 tslib: 1.14.1 - dev: true - /JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true + JSONStream@1.3.5: dependencies: jsonparse: 1.3.1 through: 2.3.8 - dev: true - /accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} + accepts@1.3.8: dependencies: mime-types: 2.1.35 negotiator: 0.6.3 - dev: true - /acorn-jsx@5.3.2(acorn@7.4.1): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-jsx@5.3.2(acorn@7.4.1): dependencies: acorn: 7.4.1 - dev: true - /acorn-jsx@5.3.2(acorn@8.11.3): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-jsx@5.3.2(acorn@8.11.3): dependencies: acorn: 8.11.3 - dev: true - /acorn-walk@7.2.0: - resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} - engines: {node: '>=0.4.0'} - dev: true + acorn-walk@7.2.0: {} - /acorn-walk@8.3.2: - resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} - engines: {node: '>=0.4.0'} - dev: true + acorn-walk@8.3.2: {} - /acorn@7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true + acorn@7.4.1: {} - /acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true + acorn@8.11.3: {} - /address@1.2.2: - resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} - engines: {node: '>= 10.0.0'} - dev: true + address@1.2.2: {} - /agent-base@5.1.1: - resolution: {integrity: sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==} - engines: {node: '>= 6.0.0'} - dev: true + agent-base@5.1.1: {} - /aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} + aggregate-error@3.1.0: dependencies: clean-stack: 2.2.0 indent-string: 4.0.0 - dev: true - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - dev: true - /ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + ajv@8.12.0: dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 uri-js: 4.4.1 - dev: true - /ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} + ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 - dev: true - /ansi-escapes@5.0.0: - resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} - engines: {node: '>=12'} + ansi-escapes@5.0.0: dependencies: type-fest: 1.4.0 - dev: true - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true + ansi-regex@5.0.1: {} - /ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - dev: true + ansi-regex@6.0.1: {} - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} + ansi-styles@3.2.1: dependencies: color-convert: 1.9.3 - dev: true - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - dev: true - /ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - dev: true + ansi-styles@6.2.1: {} - /any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: true + any-promise@1.3.0: {} - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - dev: true - /app-root-dir@1.0.2: - resolution: {integrity: sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==} - dev: true + app-root-dir@1.0.2: {} - /arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: true + arg@4.1.3: {} - /arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - dev: true + arg@5.0.2: {} - /argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 - dev: true - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true + argparse@2.0.1: {} - /aria-hidden@1.2.3: - resolution: {integrity: sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==} - engines: {node: '>=10'} + aria-hidden@1.2.3: dependencies: tslib: 2.6.2 - /aria-query@5.3.0: - resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + aria-query@5.3.0: dependencies: dequal: 2.0.3 - dev: true - /array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + array-buffer-byte-length@1.0.0: dependencies: call-bind: 1.0.5 is-array-buffer: 3.0.2 - dev: true - /array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - dev: true + array-flatten@1.1.1: {} - /array-ify@1.0.0: - resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} - dev: true + array-ify@1.0.0: {} - /array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} - engines: {node: '>= 0.4'} + array-includes@3.1.7: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 get-intrinsic: 1.2.2 is-string: 1.0.7 - dev: true - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - dev: true + array-union@2.1.0: {} - /array.prototype.findlastindex@1.2.3: - resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} - engines: {node: '>= 0.4'} + array.prototype.findlastindex@1.2.3: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 es-shim-unscopables: 1.0.2 get-intrinsic: 1.2.2 - dev: true - /array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} + array.prototype.flat@1.3.2: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 es-shim-unscopables: 1.0.2 - dev: true - /array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} + array.prototype.flatmap@1.3.2: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 es-shim-unscopables: 1.0.2 - dev: true - /array.prototype.tosorted@1.1.2: - resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} + array.prototype.tosorted@1.1.2: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 es-shim-unscopables: 1.0.2 get-intrinsic: 1.2.2 - dev: true - /arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} - engines: {node: '>= 0.4'} + arraybuffer.prototype.slice@1.0.2: dependencies: array-buffer-byte-length: 1.0.0 call-bind: 1.0.5 @@ -4734,57 +8475,34 @@ packages: get-intrinsic: 1.2.2 is-array-buffer: 3.0.2 is-shared-array-buffer: 1.0.2 - dev: true - /arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - dev: true + arrify@1.0.1: {} - /assert@2.1.0: - resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} + assert@2.1.0: dependencies: call-bind: 1.0.5 is-nan: 1.3.2 object-is: 1.1.5 object.assign: 4.1.5 util: 0.12.5 - dev: true - /ast-types-flow@0.0.8: - resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - dev: true + ast-types-flow@0.0.8: {} - /ast-types@0.16.1: - resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} - engines: {node: '>=4'} + ast-types@0.16.1: dependencies: tslib: 2.6.2 - dev: true - /async-limiter@1.0.1: - resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} - dev: true + async-limiter@1.0.1: {} - /async@3.2.5: - resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} - dev: true + async@3.2.5: {} - /asynciterator.prototype@1.0.0: - resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} + asynciterator.prototype@1.0.0: dependencies: has-symbols: 1.0.3 - dev: true - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + asynckit@0.4.0: {} - /autoprefixer@10.4.17(postcss@8.4.33): - resolution: {integrity: sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 + autoprefixer@10.4.17(postcss@8.4.33): dependencies: browserslist: 4.22.3 caniuse-lite: 1.0.30001581 @@ -4793,45 +8511,28 @@ packages: picocolors: 1.0.0 postcss: 8.4.33 postcss-value-parser: 4.2.0 - dev: true - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} - engines: {node: '>= 0.4'} - dev: true + available-typed-arrays@1.0.5: {} - /axe-core@4.7.0: - resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} - engines: {node: '>=4'} - dev: true + axe-core@4.7.0: {} - /axios@1.6.7: - resolution: {integrity: sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==} + axios@1.6.7: dependencies: follow-redirects: 1.15.5 form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug - dev: false - /axobject-query@3.2.1: - resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} + axobject-query@3.2.1: dependencies: dequal: 2.0.3 - dev: true - /babel-core@7.0.0-bridge.0(@babel/core@7.23.9): - resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} - peerDependencies: - '@babel/core': ^7.0.0-0 + babel-core@7.0.0-bridge.0(@babel/core@7.23.9): dependencies: '@babel/core': 7.23.9 - dev: true - /babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} + babel-plugin-istanbul@6.1.1: dependencies: '@babel/helper-plugin-utils': 7.22.5 '@istanbuljs/load-nyc-config': 1.1.0 @@ -4840,12 +8541,8 @@ packages: test-exclude: 6.0.0 transitivePeerDependencies: - supports-color - dev: true - /babel-plugin-polyfill-corejs2@0.4.8(@babel/core@7.23.9): - resolution: {integrity: sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-polyfill-corejs2@0.4.8(@babel/core@7.23.9): dependencies: '@babel/compat-data': 7.23.5 '@babel/core': 7.23.9 @@ -4853,67 +8550,41 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true - /babel-plugin-polyfill-corejs3@0.9.0(@babel/core@7.23.9): - resolution: {integrity: sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-polyfill-corejs3@0.9.0(@babel/core@7.23.9): dependencies: '@babel/core': 7.23.9 '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.23.9) core-js-compat: 3.35.1 transitivePeerDependencies: - supports-color - dev: true - /babel-plugin-polyfill-regenerator@0.5.5(@babel/core@7.23.9): - resolution: {integrity: sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-polyfill-regenerator@0.5.5(@babel/core@7.23.9): dependencies: '@babel/core': 7.23.9 '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.23.9) transitivePeerDependencies: - supports-color - dev: true - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true + balanced-match@1.0.2: {} - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true + base64-js@1.5.1: {} - /better-opn@3.0.2: - resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} - engines: {node: '>=12.0.0'} + better-opn@3.0.2: dependencies: open: 8.4.2 - dev: true - /big-integer@1.6.52: - resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} - engines: {node: '>=0.6'} - dev: true + big-integer@1.6.52: {} - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - dev: true + binary-extensions@2.2.0: {} - /bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + bl@4.1.0: dependencies: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 - dev: true - /body-parser@1.20.1: - resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + body-parser@1.20.1: dependencies: bytes: 3.1.2 content-type: 1.0.5 @@ -4929,148 +8600,88 @@ packages: unpipe: 1.0.0 transitivePeerDependencies: - supports-color - dev: true - /bplist-parser@0.2.0: - resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} - engines: {node: '>= 5.10.0'} + bplist-parser@0.2.0: dependencies: big-integer: 1.6.52 - dev: true - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@2.0.1: dependencies: balanced-match: 1.0.2 - dev: true - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} + braces@3.0.2: dependencies: fill-range: 7.0.1 - dev: true - /browser-assert@1.2.1: - resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} - dev: true + browser-assert@1.2.1: {} - /browserify-zlib@0.1.4: - resolution: {integrity: sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==} + browserify-zlib@0.1.4: dependencies: pako: 0.2.9 - dev: true - /browserslist@4.22.3: - resolution: {integrity: sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + browserslist@4.22.3: dependencies: caniuse-lite: 1.0.30001581 electron-to-chromium: 1.4.652 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.22.3) - dev: true - /bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + bser@2.1.1: dependencies: node-int64: 0.4.0 - dev: true - /buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - dev: true + buffer-crc32@0.2.13: {} - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true + buffer-from@1.1.2: {} - /buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + buffer@5.7.1: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: true - /bytes@3.0.0: - resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} - engines: {node: '>= 0.8'} - dev: true + bytes@3.0.0: {} - /bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - dev: true + bytes@3.1.2: {} - /call-bind@1.0.5: - resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + call-bind@1.0.5: dependencies: function-bind: 1.1.2 get-intrinsic: 1.2.2 set-function-length: 1.2.0 - dev: true - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: true + callsites@3.1.0: {} - /camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - dev: true + camelcase-css@2.0.1: {} - /camelcase-keys@6.2.2: - resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} - engines: {node: '>=8'} + camelcase-keys@6.2.2: dependencies: camelcase: 5.3.1 map-obj: 4.3.0 quick-lru: 4.0.1 - dev: true - /camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - dev: true + camelcase@5.3.1: {} - /caniuse-lite@1.0.30001581: - resolution: {integrity: sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ==} - dev: true + caniuse-lite@1.0.30001581: {} - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 - dev: true - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true - /chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: true + chalk@5.3.0: {} - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} + chokidar@3.5.3: dependencies: anymatch: 3.1.3 braces: 3.0.2 @@ -5081,207 +8692,118 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.3 - dev: true - /chownr@1.1.4: - resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - dev: true + chownr@1.1.4: {} - /chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - dev: true + chownr@2.0.0: {} - /ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - dev: true + ci-info@3.9.0: {} - /citty@0.1.5: - resolution: {integrity: sha512-AS7n5NSc0OQVMV9v6wt3ByujNIrne0/cTjiC2MYqhvao57VNfiuVksTSr2p17nVOhEr2KtqiAkGwHcgMC/qUuQ==} + citty@0.1.5: dependencies: consola: 3.2.3 - dev: true - /class-variance-authority@0.7.0: - resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==} + class-variance-authority@0.7.0: dependencies: clsx: 2.0.0 - dev: false - /clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - dev: true + clean-stack@2.2.0: {} - /cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} + cli-cursor@3.1.0: dependencies: restore-cursor: 3.1.0 - dev: true - /cli-cursor@4.0.0: - resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + cli-cursor@4.0.0: dependencies: restore-cursor: 4.0.0 - dev: true - /cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} - dev: true + cli-spinners@2.9.2: {} - /cli-table3@0.6.3: - resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==} - engines: {node: 10.* || >= 12.*} + cli-table3@0.6.3: dependencies: string-width: 4.2.3 optionalDependencies: '@colors/colors': 1.5.0 - dev: true - /cli-truncate@3.1.0: - resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + cli-truncate@3.1.0: dependencies: slice-ansi: 5.0.0 string-width: 5.1.2 - dev: true - /cli-width@4.1.0: - resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} - engines: {node: '>= 12'} - dev: true + cli-width@4.1.0: {} - /cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + cliui@8.0.1: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: true - /clone-deep@4.0.1: - resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} - engines: {node: '>=6'} + clone-deep@4.0.1: dependencies: is-plain-object: 2.0.4 kind-of: 6.0.3 shallow-clone: 3.0.1 - dev: true - /clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - dev: true + clone@1.0.4: {} - /clsx@2.0.0: - resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} - engines: {node: '>=6'} - dev: false + clsx@2.0.0: {} - /clsx@2.1.0: - resolution: {integrity: sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==} - engines: {node: '>=6'} - dev: false + clsx@2.1.0: {} - /cmdk@1.0.0(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-gDzVf0a09TvoJ5jnuPvygTB77+XdOSwEmJ88L6XPFPlv7T3RxbP9jgenfylrAMD0+Le1aO0nVjQUzl2g+vjz5Q==} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 + cmdk@1.0.0(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: - '@types/react' - '@types/react-dom' - dev: false - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + color-convert@1.9.3: dependencies: color-name: 1.1.3 - dev: true - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + color-convert@2.0.1: dependencies: color-name: 1.1.4 - dev: true - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: true + color-name@1.1.3: {} - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true + color-name@1.1.4: {} - /colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - dev: true + colorette@2.0.20: {} - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 - /commander@11.0.0: - resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} - engines: {node: '>=16'} - dev: true + commander@11.0.0: {} - /commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - dev: true + commander@4.1.1: {} - /commander@6.2.1: - resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} - engines: {node: '>= 6'} - dev: true + commander@6.2.1: {} - /commitlint@17.8.1: - resolution: {integrity: sha512-X+VPJwZsQDeGj/DG1NsxhZEl+oMHKNC+1myZ/zauNDoo+7OuLHfTOUU1C1a4CjKW4b6T7NuoFcYfK0kRCjCtbA==} - engines: {node: '>=v14'} - hasBin: true + commitlint@17.8.1: dependencies: '@commitlint/cli': 17.8.1 '@commitlint/types': 17.8.1 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' - dev: true - /commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - dev: true + commondir@1.0.1: {} - /compare-func@2.0.0: - resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + compare-func@2.0.0: dependencies: array-ify: 1.0.0 dot-prop: 5.3.0 - dev: true - /compressible@2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} + compressible@2.0.18: dependencies: mime-db: 1.52.0 - dev: true - /compression@1.7.4: - resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} - engines: {node: '>= 0.8.0'} + compression@1.7.4: dependencies: accepts: 1.3.8 bytes: 3.0.0 @@ -5292,253 +8814,134 @@ packages: vary: 1.1.2 transitivePeerDependencies: - supports-color - dev: true - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true + concat-map@0.0.1: {} - /concat-stream@1.6.2: - resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} - engines: {'0': node >= 0.8} + concat-stream@1.6.2: dependencies: buffer-from: 1.1.2 inherits: 2.0.4 readable-stream: 2.3.8 typedarray: 0.0.6 - dev: true - /confusing-browser-globals@1.0.11: - resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} - dev: true + confusing-browser-globals@1.0.11: {} - /consola@3.2.3: - resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} - engines: {node: ^14.18.0 || >=16.10.0} - dev: true + consola@3.2.3: {} - /content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} + content-disposition@0.5.4: dependencies: safe-buffer: 5.2.1 - dev: true - /content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - dev: true + content-type@1.0.5: {} - /conventional-changelog-angular@6.0.0: - resolution: {integrity: sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==} - engines: {node: '>=14'} + conventional-changelog-angular@6.0.0: dependencies: compare-func: 2.0.0 - dev: true - /conventional-changelog-conventionalcommits@6.1.0: - resolution: {integrity: sha512-3cS3GEtR78zTfMzk0AizXKKIdN4OvSh7ibNz6/DPbhWWQu7LqE/8+/GqSodV+sywUR2gpJAdP/1JFf4XtN7Zpw==} - engines: {node: '>=14'} + conventional-changelog-conventionalcommits@6.1.0: dependencies: compare-func: 2.0.0 - dev: true - /conventional-commits-parser@4.0.0: - resolution: {integrity: sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==} - engines: {node: '>=14'} - hasBin: true + conventional-commits-parser@4.0.0: dependencies: JSONStream: 1.3.5 is-text-path: 1.0.1 meow: 8.1.2 split2: 3.2.2 - dev: true - /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - dev: true + convert-source-map@2.0.0: {} - /cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - dev: true + cookie-signature@1.0.6: {} - /cookie@0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} - engines: {node: '>= 0.6'} - dev: true + cookie@0.5.0: {} - /core-js-compat@3.35.1: - resolution: {integrity: sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==} + core-js-compat@3.35.1: dependencies: browserslist: 4.22.3 - dev: true - /core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - dev: true + core-util-is@1.0.3: {} - /cosmiconfig-typescript-loader@4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6)(ts-node@10.9.2)(typescript@5.3.3): - resolution: {integrity: sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==} - engines: {node: '>=v14.21.3'} - peerDependencies: - '@types/node': '*' - cosmiconfig: '>=7' - ts-node: '>=10' - typescript: '>=4' + cosmiconfig-typescript-loader@4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.3.3))(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.3.3))(typescript@5.3.3): dependencies: '@types/node': 20.5.1 cosmiconfig: 8.3.6(typescript@5.3.3) ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.3.3) typescript: 5.3.3 - dev: true - /cosmiconfig@8.3.6(typescript@5.3.3): - resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true + cosmiconfig@8.3.6(typescript@5.3.3): dependencies: import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 + optionalDependencies: typescript: 5.3.3 - dev: true - /create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: true + create-require@1.1.1: {} - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} + cross-spawn@7.0.3: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - dev: true - /crypto-random-string@2.0.0: - resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} - engines: {node: '>=8'} - dev: true + crypto-random-string@2.0.0: {} - /cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - dev: true + cssesc@3.0.0: {} - /csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + csstype@3.1.3: {} - /damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - dev: true + damerau-levenshtein@1.0.8: {} - /dargs@7.0.0: - resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} - engines: {node: '>=8'} - dev: true + dargs@7.0.0: {} - /debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@2.6.9: dependencies: ms: 2.0.0 - dev: true - /debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@3.2.7: dependencies: ms: 2.1.3 - dev: true - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.3.4: dependencies: ms: 2.1.2 - dev: true - /decamelize-keys@1.1.1: - resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} - engines: {node: '>=0.10.0'} + decamelize-keys@1.1.1: dependencies: decamelize: 1.2.0 map-obj: 1.0.1 - dev: true - /decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - dev: true + decamelize@1.2.0: {} - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true + deep-is@0.1.4: {} - /default-browser-id@3.0.0: - resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} - engines: {node: '>=12'} + default-browser-id@3.0.0: dependencies: bplist-parser: 0.2.0 untildify: 4.0.0 - dev: true - /defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + defaults@1.0.4: dependencies: clone: 1.0.4 - dev: true - /define-data-property@1.1.1: - resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} - engines: {node: '>= 0.4'} + define-data-property@1.1.1: dependencies: get-intrinsic: 1.2.2 gopd: 1.0.1 has-property-descriptors: 1.0.1 - dev: true - /define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - dev: true + define-lazy-prop@2.0.0: {} - /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} + define-properties@1.2.1: dependencies: define-data-property: 1.1.1 has-property-descriptors: 1.0.1 object-keys: 1.1.1 - dev: true - /defu@6.1.4: - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - dev: true + defu@6.1.4: {} - /del@6.1.1: - resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==} - engines: {node: '>=10'} + del@6.1.1: dependencies: globby: 11.1.0 graceful-fs: 4.2.11 @@ -5548,174 +8951,95 @@ packages: p-map: 4.0.0 rimraf: 3.0.2 slash: 3.0.0 - dev: true - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} + delayed-stream@1.0.0: {} - /depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - dev: true + depd@2.0.0: {} - /dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - dev: true + dequal@2.0.3: {} - /destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dev: true + destroy@1.2.0: {} - /detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} - engines: {node: '>=8'} - dev: true + detect-indent@6.1.0: {} - /detect-node-es@1.1.0: - resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + detect-node-es@1.1.0: {} - /detect-package-manager@2.0.1: - resolution: {integrity: sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A==} - engines: {node: '>=12'} + detect-package-manager@2.0.1: dependencies: execa: 5.1.1 - dev: true - /detect-port@1.5.1: - resolution: {integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==} - hasBin: true + detect-port@1.5.1: dependencies: address: 1.2.2 debug: 4.3.4 transitivePeerDependencies: - supports-color - dev: true - /didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - dev: true + didyoumean@1.2.2: {} - /diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - dev: true + diff@4.0.2: {} - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 - dev: true - /dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dev: true + dlv@1.1.3: {} - /doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} + doctrine@2.1.0: dependencies: esutils: 2.0.3 - dev: true - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} + doctrine@3.0.0: dependencies: esutils: 2.0.3 - dev: true - /dot-prop@5.3.0: - resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} - engines: {node: '>=8'} + dot-prop@5.3.0: dependencies: is-obj: 2.0.0 - dev: true - /dotenv-expand@10.0.0: - resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} - engines: {node: '>=12'} - dev: true + dotenv-expand@10.0.0: {} - /dotenv@16.4.1: - resolution: {integrity: sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ==} - engines: {node: '>=12'} - dev: true + dotenv@16.4.1: {} - /duplexify@3.7.1: - resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} + duplexify@3.7.1: dependencies: end-of-stream: 1.4.4 inherits: 2.0.4 readable-stream: 2.3.8 stream-shift: 1.0.3 - dev: true - /eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - dev: true + eastasianwidth@0.2.0: {} - /ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - dev: true + ee-first@1.1.1: {} - /ejs@3.1.9: - resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} - engines: {node: '>=0.10.0'} - hasBin: true + ejs@3.1.9: dependencies: jake: 10.8.7 - dev: true - /electron-to-chromium@1.4.652: - resolution: {integrity: sha512-XvQaa8hVUAuEJtLw6VKQqvdOxTOfBLWfI10t2xWpezx4XXD3k8bdLweEKeItqaa0+OkJX5l0mP1W+JWobyIDrg==} - dev: true + electron-to-chromium@1.4.652: {} - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true + emoji-regex@8.0.0: {} - /emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - dev: true + emoji-regex@9.2.2: {} - /encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - dev: true + encodeurl@1.0.2: {} - /end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + end-of-stream@1.4.4: dependencies: once: 1.4.0 - dev: true - /enhanced-resolve@5.15.0: - resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} - engines: {node: '>=10.13.0'} + enhanced-resolve@5.15.0: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 - dev: true - /envinfo@7.11.0: - resolution: {integrity: sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==} - engines: {node: '>=4'} - hasBin: true - dev: true + envinfo@7.11.0: {} - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 - dev: true - /es-abstract@1.22.3: - resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} - engines: {node: '>= 0.4'} + es-abstract@1.22.3: dependencies: array-buffer-byte-length: 1.0.0 arraybuffer.prototype.slice: 1.0.2 @@ -5756,10 +9080,8 @@ packages: typed-array-length: 1.0.4 unbox-primitive: 1.0.2 which-typed-array: 1.1.13 - dev: true - /es-iterator-helpers@1.0.15: - resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} + es-iterator-helpers@1.0.15: dependencies: asynciterator.prototype: 1.0.0 call-bind: 1.0.5 @@ -5775,56 +9097,35 @@ packages: internal-slot: 1.0.6 iterator.prototype: 1.1.2 safe-array-concat: 1.1.0 - dev: true - /es-module-lexer@0.9.3: - resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} - dev: true + es-module-lexer@0.9.3: {} - /es-set-tostringtag@2.0.2: - resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} - engines: {node: '>= 0.4'} + es-set-tostringtag@2.0.2: dependencies: get-intrinsic: 1.2.2 has-tostringtag: 1.0.0 hasown: 2.0.0 - dev: true - /es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + es-shim-unscopables@1.0.2: dependencies: hasown: 2.0.0 - dev: true - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} + es-to-primitive@1.2.1: dependencies: is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 - dev: true - /esbuild-plugin-alias@0.2.1: - resolution: {integrity: sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ==} - dev: true + esbuild-plugin-alias@0.2.1: {} - /esbuild-register@3.5.0(esbuild@0.18.20): - resolution: {integrity: sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==} - peerDependencies: - esbuild: '>=0.12 <1' + esbuild-register@3.5.0(esbuild@0.18.20): dependencies: debug: 4.3.4 esbuild: 0.18.20 transitivePeerDependencies: - supports-color - dev: true - /esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true + esbuild@0.18.20: optionalDependencies: '@esbuild/android-arm': 0.18.20 '@esbuild/android-arm64': 0.18.20 @@ -5848,105 +9149,62 @@ packages: '@esbuild/win32-arm64': 0.18.20 '@esbuild/win32-ia32': 0.18.20 '@esbuild/win32-x64': 0.18.20 - dev: true - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - dev: true + escalade@3.1.1: {} - /escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - dev: true + escape-html@1.0.3: {} - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - dev: true + escape-string-regexp@1.0.5: {} - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - dev: true + escape-string-regexp@4.0.0: {} - /escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true + escodegen@2.1.0: dependencies: esprima: 4.0.1 estraverse: 5.3.0 esutils: 2.0.3 optionalDependencies: source-map: 0.6.1 - dev: true - /eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.29.1)(eslint@8.56.0): - resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==} - engines: {node: ^10.12.0 || >=12.0.0} - peerDependencies: - eslint: ^7.32.0 || ^8.2.0 - eslint-plugin-import: ^2.25.2 + eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.20.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0))(eslint@8.56.0): dependencies: confusing-browser-globals: 1.0.11 eslint: 8.56.0 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.20.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.20.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) object.assign: 4.1.5 object.entries: 1.1.7 semver: 6.3.1 - dev: true - /eslint-config-airbnb@19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.33.2)(eslint@8.56.0): - resolution: {integrity: sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==} - engines: {node: ^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^7.32.0 || ^8.2.0 - eslint-plugin-import: ^2.25.3 - eslint-plugin-jsx-a11y: ^6.5.1 - eslint-plugin-react: ^7.28.0 - eslint-plugin-react-hooks: ^4.3.0 + eslint-config-airbnb@19.0.4(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.20.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0))(eslint-plugin-jsx-a11y@6.8.0(eslint@8.56.0))(eslint-plugin-react-hooks@4.6.0(eslint@8.56.0))(eslint-plugin-react@7.33.2(eslint@8.56.0))(eslint@8.56.0): dependencies: eslint: 8.56.0 - eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.20.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.20.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0))(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.20.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) eslint-plugin-react: 7.33.2(eslint@8.56.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) object.assign: 4.1.5 object.entries: 1.1.7 - dev: true - /eslint-config-prettier@9.1.0(eslint@8.56.0): - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' + eslint-config-prettier@9.1.0(eslint@8.56.0): dependencies: eslint: 8.56.0 - dev: true - /eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 is-core-module: 2.13.1 resolve: 1.22.8 transitivePeerDependencies: - supports-color - dev: true - /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.20.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0): - resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' + eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.20.0(eslint@8.56.0)(typescript@5.3.3))(eslint-plugin-import@2.29.1)(eslint@8.56.0): dependencies: debug: 4.3.4 enhanced-resolve: 5.15.0 eslint: 8.56.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.20.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.20.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.20.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.20.0(eslint@8.56.0)(typescript@5.3.3))(eslint-plugin-import@2.29.1)(eslint@8.56.0))(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.20.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.13.1 @@ -5956,49 +9214,20 @@ packages: - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color - dev: true - - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.20.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.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 + + eslint-module-utils@2.8.0(@typescript-eslint/parser@6.20.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.20.0(eslint@8.56.0)(typescript@5.3.3))(eslint-plugin-import@2.29.1)(eslint@8.56.0))(eslint@8.56.0): dependencies: - '@typescript-eslint/parser': 6.20.0(eslint@8.56.0)(typescript@5.3.3) debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 6.20.0(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.20.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.20.0(eslint@8.56.0)(typescript@5.3.3))(eslint-plugin-import@2.29.1)(eslint@8.56.0) transitivePeerDependencies: - supports-color - dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.20.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true + eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.20.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): dependencies: - '@typescript-eslint/parser': 6.20.0(eslint@8.56.0)(typescript@5.3.3) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -6007,7 +9236,7 @@ packages: doctrine: 2.1.0 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.20.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.20.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.20.0(eslint@8.56.0)(typescript@5.3.3))(eslint-plugin-import@2.29.1)(eslint@8.56.0))(eslint@8.56.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -6017,17 +9246,14 @@ packages: object.values: 1.1.7 semver: 6.3.1 tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 6.20.0(eslint@8.56.0)(typescript@5.3.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - dev: true - /eslint-plugin-jsx-a11y@6.8.0(eslint@8.56.0): - resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + eslint-plugin-jsx-a11y@6.8.0(eslint@8.56.0): dependencies: '@babel/runtime': 7.23.9 aria-query: 5.3.0 @@ -6046,43 +9272,21 @@ packages: minimatch: 3.1.2 object.entries: 1.1.7 object.fromentries: 2.0.7 - dev: true - /eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.2.4): - resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - '@types/eslint': '>=8.0.0' - eslint: '>=8.0.0' - eslint-config-prettier: '*' - prettier: '>=3.0.0' - peerDependenciesMeta: - '@types/eslint': - optional: true - eslint-config-prettier: - optional: true + eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0(eslint@8.56.0))(eslint@8.56.0)(prettier@3.2.4): dependencies: eslint: 8.56.0 - eslint-config-prettier: 9.1.0(eslint@8.56.0) prettier: 3.2.4 prettier-linter-helpers: 1.0.0 synckit: 0.8.8 - dev: true + optionalDependencies: + eslint-config-prettier: 9.1.0(eslint@8.56.0) - /eslint-plugin-react-hooks@4.6.0(eslint@8.56.0): - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + eslint-plugin-react-hooks@4.6.0(eslint@8.56.0): dependencies: eslint: 8.56.0 - dev: true - /eslint-plugin-react@7.33.2(eslint@8.56.0): - resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + eslint-plugin-react@7.33.2(eslint@8.56.0): dependencies: array-includes: 3.1.7 array.prototype.flatmap: 1.3.2 @@ -6101,13 +9305,8 @@ packages: resolve: 2.0.0-next.5 semver: 6.3.1 string.prototype.matchall: 4.0.10 - dev: true - /eslint-plugin-storybook@0.6.15(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-lAGqVAJGob47Griu29KXYowI4G7KwMoJDOkEip8ujikuDLxU+oWJ1l0WL6F2oDO4QiyUFXvtDkEkISMOPzo+7w==} - engines: {node: 12.x || 14.x || >= 16} - peerDependencies: - eslint: '>=6' + eslint-plugin-storybook@0.6.15(eslint@8.56.0)(typescript@5.3.3): dependencies: '@storybook/csf': 0.0.1 '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) @@ -6117,33 +9316,20 @@ packages: transitivePeerDependencies: - supports-color - typescript - dev: true - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} + eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - dev: true - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@7.2.2: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - dev: true - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + eslint-visitor-keys@3.4.3: {} - /eslint@8.56.0: - resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true + eslint@8.56.0: dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@eslint-community/regexpp': 4.10.0 @@ -6185,68 +9371,36 @@ packages: text-table: 0.2.0 transitivePeerDependencies: - supports-color - dev: true - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + espree@9.6.1: dependencies: acorn: 8.11.3 acorn-jsx: 5.3.2(acorn@8.11.3) eslint-visitor-keys: 3.4.3 - dev: true - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: true + esprima@4.0.1: {} - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} + esquery@1.5.0: dependencies: estraverse: 5.3.0 - dev: true - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 - dev: true - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - dev: true + estraverse@4.3.0: {} - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true + estraverse@5.3.0: {} - /estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - dev: true + estree-walker@2.0.2: {} - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true + esutils@2.0.3: {} - /etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - dev: true + etag@1.8.1: {} - /eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - dev: true + eventemitter3@5.0.1: {} - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} + execa@5.1.1: dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 @@ -6257,11 +9411,8 @@ packages: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 - dev: true - /execa@7.2.0: - resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} - engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + execa@7.2.0: dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 @@ -6272,11 +9423,8 @@ packages: onetime: 6.0.0 signal-exit: 3.0.7 strip-final-newline: 3.0.0 - dev: true - /execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} + execa@8.0.1: dependencies: cross-spawn: 7.0.3 get-stream: 8.0.1 @@ -6287,11 +9435,8 @@ packages: onetime: 6.0.0 signal-exit: 4.1.0 strip-final-newline: 3.0.0 - dev: true - /express@4.18.2: - resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} - engines: {node: '>= 0.10.0'} + express@4.18.2: dependencies: accepts: 1.3.8 array-flatten: 1.1.1 @@ -6326,15 +9471,10 @@ packages: vary: 1.1.2 transitivePeerDependencies: - supports-color - dev: true - /extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - dev: true + extend@3.0.2: {} - /extract-zip@1.7.0: - resolution: {integrity: sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==} - hasBin: true + extract-zip@1.7.0: dependencies: concat-stream: 1.6.2 debug: 2.6.9 @@ -6342,94 +9482,59 @@ packages: yauzl: 2.10.0 transitivePeerDependencies: - supports-color - dev: true - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true + fast-deep-equal@3.1.3: {} - /fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - dev: true + fast-diff@1.3.0: {} - /fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} + fast-glob@3.3.2: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 - dev: true - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true + fast-json-stable-stringify@2.1.0: {} - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true + fast-levenshtein@2.0.6: {} - /fastq@1.17.0: - resolution: {integrity: sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==} + fastq@1.17.0: dependencies: reusify: 1.0.4 - dev: true - /fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + fb-watchman@2.0.2: dependencies: bser: 2.1.1 - dev: true - /fd-slicer@1.1.0: - resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + fd-slicer@1.1.0: dependencies: pend: 1.2.0 - dev: true - /fetch-retry@5.0.6: - resolution: {integrity: sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==} - dev: true + fetch-retry@5.0.6: {} - /figures@3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} - engines: {node: '>=8'} + figures@3.2.0: dependencies: escape-string-regexp: 1.0.5 - dev: true - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@6.0.1: dependencies: flat-cache: 3.2.0 - dev: true - /file-system-cache@2.3.0: - resolution: {integrity: sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==} + file-system-cache@2.3.0: dependencies: fs-extra: 11.1.1 ramda: 0.29.0 - dev: true - /filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + filelist@1.0.4: dependencies: minimatch: 5.1.6 - dev: true - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} + fill-range@7.0.1: dependencies: to-regex-range: 5.0.1 - dev: true - /finalhandler@1.2.0: - resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} - engines: {node: '>= 0.8'} + finalhandler@1.2.0: dependencies: debug: 2.6.9 encodeurl: 1.0.2 @@ -6440,237 +9545,133 @@ packages: unpipe: 1.0.0 transitivePeerDependencies: - supports-color - dev: true - /find-cache-dir@2.1.0: - resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} - engines: {node: '>=6'} + find-cache-dir@2.1.0: dependencies: commondir: 1.0.1 make-dir: 2.1.0 pkg-dir: 3.0.0 - dev: true - /find-cache-dir@3.3.2: - resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} - engines: {node: '>=8'} + find-cache-dir@3.3.2: dependencies: commondir: 1.0.1 make-dir: 3.1.0 pkg-dir: 4.2.0 - dev: true - /find-up@3.0.0: - resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} - engines: {node: '>=6'} + find-up@3.0.0: dependencies: locate-path: 3.0.0 - dev: true - /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} + find-up@4.1.0: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 - dev: true - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: true - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@3.2.0: dependencies: flatted: 3.2.9 keyv: 4.5.4 rimraf: 3.0.2 - dev: true - /flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} - dev: true + flatted@3.2.9: {} - /flow-parser@0.227.0: - resolution: {integrity: sha512-nOygtGKcX/siZK/lFzpfdHEfOkfGcTW7rNroR1Zsz6T/JxSahPALXVt5qVHq/fgvMJuv096BTKbgxN3PzVBaDA==} - engines: {node: '>=0.4.0'} - dev: true + flow-parser@0.227.0: {} - /follow-redirects@1.15.5: - resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: false + follow-redirects@1.15.5: {} - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + for-each@0.3.3: dependencies: is-callable: 1.2.7 - dev: true - /foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} - engines: {node: '>=14'} + foreground-child@3.1.1: dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 - dev: true - /form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} - engines: {node: '>= 6'} + form-data@4.0.0: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 - /forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - dev: true + forwarded@0.2.0: {} - /fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - dev: true + fraction.js@4.3.7: {} - /fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - dev: true + fresh@0.5.2: {} - /fs-constants@1.0.0: - resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - dev: true + fs-constants@1.0.0: {} - /fs-extra@11.1.1: - resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} - engines: {node: '>=14.14'} + fs-extra@11.1.1: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 - dev: true - /fs-extra@11.2.0: - resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} - engines: {node: '>=14.14'} + fs-extra@11.2.0: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 - dev: true - /fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} + fs-minipass@2.1.0: dependencies: minipass: 3.3.6 - dev: true - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true + fs.realpath@1.0.0: {} - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true + fsevents@2.3.3: optional: true - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - dev: true + function-bind@1.1.2: {} - /function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} + function.prototype.name@1.1.6: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 functions-have-names: 1.2.3 - dev: true - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true + functions-have-names@1.2.3: {} - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - dev: true + gensync@1.0.0-beta.2: {} - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: true + get-caller-file@2.0.5: {} - /get-intrinsic@1.2.2: - resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + get-intrinsic@1.2.2: dependencies: function-bind: 1.1.2 has-proto: 1.0.1 has-symbols: 1.0.3 hasown: 2.0.0 - dev: true - /get-nonce@1.0.1: - resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} - engines: {node: '>=6'} + get-nonce@1.0.1: {} - /get-npm-tarball-url@2.1.0: - resolution: {integrity: sha512-ro+DiMu5DXgRBabqXupW38h7WPZ9+Ad8UjwhvsmmN8w1sU7ab0nzAXvVZ4kqYg57OrqomRtJvepX5/xvFKNtjA==} - engines: {node: '>=12.17'} - dev: true + get-npm-tarball-url@2.1.0: {} - /get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - dev: true + get-package-type@0.1.0: {} - /get-port@5.1.1: - resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} - engines: {node: '>=8'} - dev: true + get-port@5.1.1: {} - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: true + get-stream@6.0.1: {} - /get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} - dev: true + get-stream@8.0.1: {} - /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} - engines: {node: '>= 0.4'} + get-symbol-description@1.0.0: dependencies: call-bind: 1.0.5 get-intrinsic: 1.2.2 - dev: true - /get-tsconfig@4.7.2: - resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} + get-tsconfig@4.7.2: dependencies: resolve-pkg-maps: 1.0.0 - dev: true - /giget@1.2.1: - resolution: {integrity: sha512-4VG22mopWtIeHwogGSy1FViXVo0YT+m6BrqZfz0JJFwbSsePsCdOzdLIIli5BtMp7Xe8f/o2OmBpQX2NBOC24g==} - hasBin: true + giget@1.2.1: dependencies: citty: 0.1.5 consola: 3.2.3 @@ -6680,66 +9681,41 @@ packages: ohash: 1.1.3 pathe: 1.1.2 tar: 6.2.0 - dev: true - /git-raw-commits@2.0.11: - resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} - engines: {node: '>=10'} - hasBin: true + git-raw-commits@2.0.11: dependencies: dargs: 7.0.0 lodash: 4.17.21 meow: 8.1.2 split2: 3.2.2 through2: 4.0.2 - dev: true - /github-slugger@1.5.0: - resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} - dev: true + github-slugger@1.5.0: {} - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - dev: true - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 - dev: true - /glob-promise@4.2.2(glob@7.2.3): - resolution: {integrity: sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw==} - engines: {node: '>=12'} - peerDependencies: - glob: ^7.1.6 + glob-promise@4.2.2(glob@7.2.3): dependencies: '@types/glob': 7.2.0 glob: 7.2.3 - dev: true - /glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - dev: true + glob-to-regexp@0.4.1: {} - /glob@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true + glob@10.3.10: dependencies: foreground-child: 3.1.1 jackspeak: 2.3.6 minimatch: 9.0.3 minipass: 7.0.4 path-scurry: 1.10.1 - dev: true - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + glob@7.2.3: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -6747,37 +9723,22 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true - /global-dirs@0.1.1: - resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} - engines: {node: '>=4'} + global-dirs@0.1.1: dependencies: ini: 1.3.8 - dev: true - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - dev: true + globals@11.12.0: {} - /globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} + globals@13.24.0: dependencies: type-fest: 0.20.2 - dev: true - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} + globalthis@1.0.3: dependencies: define-properties: 1.2.1 - dev: true - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} + globby@11.1.0: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 @@ -6785,38 +9746,22 @@ packages: ignore: 5.3.0 merge2: 1.4.1 slash: 3.0.0 - dev: true - /goober@2.1.14(csstype@3.1.3): - resolution: {integrity: sha512-4UpC0NdGyAFqLNPnhCT2iHpza2q+RAY3GV85a/mRPdzyPQMsj0KmMMuetdIkzWRbJ+Hgau1EZztq8ImmiMGhsg==} - peerDependencies: - csstype: ^3.0.10 + goober@2.1.14(csstype@3.1.3): dependencies: csstype: 3.1.3 - dev: false - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + gopd@1.0.1: dependencies: get-intrinsic: 1.2.2 - dev: true - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - dev: true + graceful-fs@4.2.11: {} - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true + graphemer@1.4.0: {} - /graphql@16.8.1: - resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==} - engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} - dev: true + graphql@16.8.1: {} - /gunzip-maybe@1.4.2: - resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} - hasBin: true + gunzip-maybe@1.4.2: dependencies: browserify-zlib: 0.1.4 is-deflate: 1.0.0 @@ -6824,12 +9769,8 @@ packages: peek-stream: 1.1.3 pumpify: 1.5.1 through2: 2.0.5 - dev: true - /handlebars@4.7.8: - resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} - engines: {node: '>=0.4.7'} - hasBin: true + handlebars@4.7.8: dependencies: minimist: 1.2.8 neo-async: 2.6.2 @@ -6837,492 +9778,262 @@ packages: wordwrap: 1.0.0 optionalDependencies: uglify-js: 3.17.4 - dev: true - /hard-rejection@2.1.0: - resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} - engines: {node: '>=6'} - dev: true + hard-rejection@2.1.0: {} - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true + has-bigints@1.0.2: {} - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - dev: true + has-flag@3.0.0: {} - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true + has-flag@4.0.0: {} - /has-property-descriptors@1.0.1: - resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + has-property-descriptors@1.0.1: dependencies: get-intrinsic: 1.2.2 - dev: true - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} - engines: {node: '>= 0.4'} - dev: true + has-proto@1.0.1: {} - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true + has-symbols@1.0.3: {} - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} - engines: {node: '>= 0.4'} + has-tostringtag@1.0.0: dependencies: has-symbols: 1.0.3 - dev: true - /hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} - engines: {node: '>= 0.4'} + hasown@2.0.0: dependencies: function-bind: 1.1.2 - dev: true - /headers-polyfill@4.0.3: - resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} - dev: true + headers-polyfill@4.0.3: {} - /hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - dev: true + hosted-git-info@2.8.9: {} - /hosted-git-info@4.1.0: - resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} - engines: {node: '>=10'} + hosted-git-info@4.1.0: dependencies: lru-cache: 6.0.0 - dev: true - /html-tags@3.3.1: - resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} - engines: {node: '>=8'} - dev: true + html-tags@3.3.1: {} - /http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} + http-errors@2.0.0: dependencies: depd: 2.0.0 inherits: 2.0.4 setprototypeof: 1.2.0 statuses: 2.0.1 toidentifier: 1.0.1 - dev: true - /https-proxy-agent@4.0.0: - resolution: {integrity: sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==} - engines: {node: '>= 6.0.0'} + https-proxy-agent@4.0.0: dependencies: agent-base: 5.1.1 debug: 4.3.4 transitivePeerDependencies: - supports-color - dev: true - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: true + human-signals@2.1.0: {} - /human-signals@4.3.1: - resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} - engines: {node: '>=14.18.0'} - dev: true + human-signals@4.3.1: {} - /human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - dev: true + human-signals@5.0.0: {} - /husky@8.0.3: - resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} - engines: {node: '>=14'} - hasBin: true - dev: true + husky@8.0.3: {} - /iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 - dev: true - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true + ieee754@1.2.1: {} - /ignore@5.3.0: - resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} - engines: {node: '>= 4'} - dev: true + ignore@5.3.0: {} - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} + import-fresh@3.3.0: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - dev: true - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: true + imurmurhash@0.1.4: {} - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - dev: true + indent-string@4.0.0: {} - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + inflight@1.0.6: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: true - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true + inherits@2.0.4: {} - /ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - dev: true + ini@1.3.8: {} - /internal-slot@1.0.6: - resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} - engines: {node: '>= 0.4'} + internal-slot@1.0.6: dependencies: get-intrinsic: 1.2.2 hasown: 2.0.0 side-channel: 1.0.4 - dev: true - /invariant@2.2.4: - resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + invariant@2.2.4: dependencies: loose-envify: 1.4.0 - /ip@2.0.0: - resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} - dev: true + ip@2.0.0: {} - /ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - dev: true + ipaddr.js@1.9.1: {} - /is-absolute-url@3.0.3: - resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==} - engines: {node: '>=8'} - dev: true + is-absolute-url@3.0.3: {} - /is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} + is-arguments@1.1.1: dependencies: call-bind: 1.0.5 has-tostringtag: 1.0.0 - dev: true - /is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + is-array-buffer@3.0.2: dependencies: call-bind: 1.0.5 get-intrinsic: 1.2.2 is-typed-array: 1.1.12 - dev: true - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: true + is-arrayish@0.2.1: {} - /is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} - engines: {node: '>= 0.4'} + is-async-function@2.0.0: dependencies: has-tostringtag: 1.0.0 - dev: true - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + is-bigint@1.0.4: dependencies: has-bigints: 1.0.2 - dev: true - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + is-binary-path@2.1.0: dependencies: binary-extensions: 2.2.0 - dev: true - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} + is-boolean-object@1.1.2: dependencies: call-bind: 1.0.5 has-tostringtag: 1.0.0 - dev: true - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true + is-callable@1.2.7: {} - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + is-core-module@2.13.1: dependencies: hasown: 2.0.0 - dev: true - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} + is-date-object@1.0.5: dependencies: has-tostringtag: 1.0.0 - dev: true - /is-deflate@1.0.0: - resolution: {integrity: sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==} - dev: true + is-deflate@1.0.0: {} - /is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - dev: true + is-docker@2.2.1: {} - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true + is-extglob@2.1.1: {} - /is-finalizationregistry@1.0.2: - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + is-finalizationregistry@1.0.2: dependencies: call-bind: 1.0.5 - dev: true - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: true + is-fullwidth-code-point@3.0.0: {} - /is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} - dev: true + is-fullwidth-code-point@4.0.0: {} - /is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} + is-generator-function@1.0.10: dependencies: has-tostringtag: 1.0.0 - dev: true - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - dev: true - /is-gzip@1.0.0: - resolution: {integrity: sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==} - engines: {node: '>=0.10.0'} - dev: true + is-gzip@1.0.0: {} - /is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - dev: true + is-interactive@1.0.0: {} - /is-map@2.0.2: - resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} - dev: true + is-map@2.0.2: {} - /is-nan@1.3.2: - resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} - engines: {node: '>= 0.4'} + is-nan@1.3.2: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 - dev: true - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} - dev: true + is-negative-zero@2.0.2: {} - /is-node-process@1.2.0: - resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} - dev: true + is-node-process@1.2.0: {} - /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} + is-number-object@1.0.7: dependencies: has-tostringtag: 1.0.0 - dev: true - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true + is-number@7.0.0: {} - /is-obj@2.0.0: - resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} - engines: {node: '>=8'} - dev: true + is-obj@2.0.0: {} - /is-path-cwd@2.2.0: - resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} - engines: {node: '>=6'} - dev: true + is-path-cwd@2.2.0: {} - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true + is-path-inside@3.0.3: {} - /is-plain-obj@1.1.0: - resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} - engines: {node: '>=0.10.0'} - dev: true + is-plain-obj@1.1.0: {} - /is-plain-object@2.0.4: - resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} - engines: {node: '>=0.10.0'} + is-plain-object@2.0.4: dependencies: isobject: 3.0.1 - dev: true - /is-plain-object@5.0.0: - resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} - engines: {node: '>=0.10.0'} - dev: true + is-plain-object@5.0.0: {} - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} + is-regex@1.1.4: dependencies: call-bind: 1.0.5 has-tostringtag: 1.0.0 - dev: true - /is-set@2.0.2: - resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} - dev: true + is-set@2.0.2: {} - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + is-shared-array-buffer@1.0.2: dependencies: call-bind: 1.0.5 - dev: true - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: true + is-stream@2.0.1: {} - /is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + is-stream@3.0.0: {} - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} + is-string@1.0.7: dependencies: has-tostringtag: 1.0.0 - dev: true - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} + is-symbol@1.0.4: dependencies: has-symbols: 1.0.3 - dev: true - /is-text-path@1.0.1: - resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==} - engines: {node: '>=0.10.0'} + is-text-path@1.0.1: dependencies: text-extensions: 1.9.0 - dev: true - /is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} - engines: {node: '>= 0.4'} + is-typed-array@1.1.12: dependencies: which-typed-array: 1.1.13 - dev: true - /is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - dev: true + is-unicode-supported@0.1.0: {} - /is-weakmap@2.0.1: - resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} - dev: true + is-weakmap@2.0.1: {} - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + is-weakref@1.0.2: dependencies: call-bind: 1.0.5 - dev: true - /is-weakset@2.0.2: - resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + is-weakset@2.0.2: dependencies: call-bind: 1.0.5 get-intrinsic: 1.2.2 - dev: true - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} + is-wsl@2.2.0: dependencies: is-docker: 2.2.1 - dev: true - /isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - dev: true + isarray@1.0.0: {} - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: true + isarray@2.0.5: {} - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true + isexe@2.0.0: {} - /isobject@3.0.1: - resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} - engines: {node: '>=0.10.0'} - dev: true + isobject@3.0.1: {} - /istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} - dev: true + istanbul-lib-coverage@3.2.2: {} - /istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} + istanbul-lib-instrument@5.2.1: dependencies: '@babel/core': 7.23.9 '@babel/parser': 7.23.9 @@ -7331,41 +10042,29 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true - /iterator.prototype@1.1.2: - resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + iterator.prototype@1.1.2: dependencies: define-properties: 1.2.1 get-intrinsic: 1.2.2 has-symbols: 1.0.3 reflect.getprototypeof: 1.0.4 set-function-name: 2.0.1 - dev: true - /jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} + jackspeak@2.3.6: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - dev: true - /jake@10.8.7: - resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} - engines: {node: '>=10'} - hasBin: true + jake@10.8.7: dependencies: async: 3.2.5 chalk: 4.1.2 filelist: 1.0.4 minimatch: 3.1.2 - dev: true - /jest-haste-map@29.7.0: - resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-haste-map@29.7.0: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 @@ -7380,24 +10079,15 @@ packages: walker: 1.0.8 optionalDependencies: fsevents: 2.3.3 - dev: true - /jest-mock@27.5.1: - resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + jest-mock@27.5.1: dependencies: '@jest/types': 27.5.1 '@types/node': 20.11.14 - dev: true - /jest-regex-util@29.6.3: - resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true + jest-regex-util@29.6.3: {} - /jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 '@types/node': 20.11.14 @@ -7405,49 +10095,28 @@ packages: ci-info: 3.9.0 graceful-fs: 4.2.11 picomatch: 2.3.1 - dev: true - /jest-worker@29.7.0: - resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-worker@29.7.0: dependencies: '@types/node': 20.11.14 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - dev: true - /jiti@1.21.0: - resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} - hasBin: true - dev: true + jiti@1.21.0: {} - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-tokens@4.0.0: {} - /js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true + js-yaml@3.14.1: dependencies: argparse: 1.0.10 esprima: 4.0.1 - dev: true - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + js-yaml@4.1.0: dependencies: argparse: 2.0.1 - dev: true - /jscodeshift@0.15.1(@babel/preset-env@7.23.9): - resolution: {integrity: sha512-hIJfxUy8Rt4HkJn/zZPU9ChKfKZM1342waJ1QC2e2YsPcWhM+3BJ4dcfQCzArTrk1jJeNLB341H+qOcEHRxJZg==} - hasBin: true - peerDependencies: - '@babel/preset-env': ^7.1.6 - peerDependenciesMeta: - '@babel/preset-env': - optional: true + jscodeshift@0.15.1(@babel/preset-env@7.23.9(@babel/core@7.23.9)): dependencies: '@babel/core': 7.23.9 '@babel/parser': 7.23.9 @@ -7456,7 +10125,6 @@ packages: '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.9) '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.9) '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.9) - '@babel/preset-env': 7.23.9(@babel/core@7.23.9) '@babel/preset-flow': 7.23.3(@babel/core@7.23.9) '@babel/preset-typescript': 7.23.3(@babel/core@7.23.9) '@babel/register': 7.23.7(@babel/core@7.23.9) @@ -7470,144 +10138,80 @@ packages: recast: 0.23.4 temp: 0.8.4 write-file-atomic: 2.4.3 + optionalDependencies: + '@babel/preset-env': 7.23.9(@babel/core@7.23.9) transitivePeerDependencies: - supports-color - dev: true - /jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true - dev: true + jsesc@0.5.0: {} - /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - dev: true + jsesc@2.5.2: {} - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: true + json-buffer@3.0.1: {} - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: true + json-parse-even-better-errors@2.3.1: {} - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true + json-schema-traverse@0.4.1: {} - /json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: true + json-schema-traverse@1.0.0: {} - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true + json-stable-stringify-without-jsonify@1.0.1: {} - /json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true + json5@1.0.2: dependencies: minimist: 1.2.8 - dev: true - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - dev: true + json5@2.2.3: {} - /jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonfile@6.1.0: dependencies: universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 - dev: true - /jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - dev: true + jsonparse@1.3.1: {} - /jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} + jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.7 array.prototype.flat: 1.3.2 object.assign: 4.1.5 object.values: 1.1.7 - dev: true - /keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + keyv@4.5.4: dependencies: json-buffer: 3.0.1 - dev: true - /kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - dev: true + kind-of@6.0.3: {} - /kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - dev: true + kleur@3.0.3: {} - /language-subtag-registry@0.3.22: - resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} - dev: true + language-subtag-registry@0.3.22: {} - /language-tags@1.0.9: - resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} - engines: {node: '>=0.10'} + language-tags@1.0.9: dependencies: language-subtag-registry: 0.3.22 - dev: true - /lazy-universal-dotenv@4.0.0: - resolution: {integrity: sha512-aXpZJRnTkpK6gQ/z4nk+ZBLd/Qdp118cvPruLSIQzQNRhKwEcdXCOzXuF55VDqIiuAaY3UGZ10DJtvZzDcvsxg==} - engines: {node: '>=14.0.0'} + lazy-universal-dotenv@4.0.0: dependencies: app-root-dir: 1.0.2 dotenv: 16.4.1 dotenv-expand: 10.0.0 - dev: true - /leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - dev: true + leven@3.1.0: {} - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true - /lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - dev: true + lilconfig@2.1.0: {} - /lilconfig@3.0.0: - resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} - engines: {node: '>=14'} - dev: true + lilconfig@3.0.0: {} - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true + lines-and-columns@1.2.4: {} - /lint-staged@13.3.0: - resolution: {integrity: sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ==} - engines: {node: ^16.14.0 || >=18.0.0} - hasBin: true + lint-staged@13.3.0: dependencies: chalk: 5.3.0 commander: 11.0.0 @@ -7622,16 +10226,8 @@ packages: transitivePeerDependencies: - enquirer - supports-color - dev: true - /listr2@6.6.1: - resolution: {integrity: sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==} - engines: {node: '>=16.0.0'} - peerDependencies: - enquirer: '>= 2.3.0 < 3' - peerDependenciesMeta: - enquirer: - optional: true + listr2@6.6.1: dependencies: cli-truncate: 3.1.0 colorette: 2.0.20 @@ -7639,215 +10235,121 @@ packages: log-update: 5.0.1 rfdc: 1.3.1 wrap-ansi: 8.1.0 - dev: true - /locate-path@3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} - engines: {node: '>=6'} + locate-path@3.0.0: dependencies: p-locate: 3.0.0 path-exists: 3.0.0 - dev: true - /locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} + locate-path@5.0.0: dependencies: p-locate: 4.1.0 - dev: true - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + locate-path@6.0.0: dependencies: p-locate: 5.0.0 - dev: true - /lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - dev: true + lodash.camelcase@4.3.0: {} - /lodash.debounce@4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - dev: true + lodash.debounce@4.0.8: {} - /lodash.isfunction@3.0.9: - resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==} - dev: true + lodash.isfunction@3.0.9: {} - /lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - dev: true + lodash.isplainobject@4.0.6: {} - /lodash.kebabcase@4.1.1: - resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} - dev: true + lodash.kebabcase@4.1.1: {} - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true + lodash.merge@4.6.2: {} - /lodash.mergewith@4.6.2: - resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} - dev: true + lodash.mergewith@4.6.2: {} - /lodash.snakecase@4.1.1: - resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} - dev: true + lodash.snakecase@4.1.1: {} - /lodash.startcase@4.4.0: - resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - dev: true + lodash.startcase@4.4.0: {} - /lodash.uniq@4.5.0: - resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - dev: true + lodash.uniq@4.5.0: {} - /lodash.upperfirst@4.3.1: - resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} - dev: true + lodash.upperfirst@4.3.1: {} - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true + lodash@4.17.21: {} - /log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} + log-symbols@4.1.0: dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 - dev: true - /log-update@5.0.1: - resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + log-update@5.0.1: dependencies: ansi-escapes: 5.0.0 cli-cursor: 4.0.0 slice-ansi: 5.0.0 strip-ansi: 7.1.0 wrap-ansi: 8.1.0 - dev: true - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 - /lru-cache@10.2.0: - resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} - engines: {node: 14 || >=16.14} - dev: true + lru-cache@10.2.0: {} - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 - dev: true - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} + lru-cache@6.0.0: dependencies: yallist: 4.0.0 - dev: true - /lucide-react@0.320.0(react@18.2.0): - resolution: {integrity: sha512-HuMmfmFiWwctDkN27wklKVZr8UpwP2TTekLZ3xiLCEjx/STG1k0KLWMbBfIJ/lnNJQDfSjztDZSVU316xA+AQg==} - peerDependencies: - react: ^16.5.1 || ^17.0.0 || ^18.0.0 + lucide-react@0.320.0(react@18.2.0): dependencies: react: 18.2.0 - dev: false - /magic-string@0.27.0: - resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} - engines: {node: '>=12'} + magic-string@0.27.0: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - /magic-string@0.30.6: - resolution: {integrity: sha512-n62qCLbPjNjyo+owKtveQxZFZTBm+Ms6YoGD23Wew6Vw337PElFNifQpknPruVRQV57kVShPnLGo9vWxVhpPvA==} - engines: {node: '>=12'} + magic-string@0.30.6: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - /make-dir@2.1.0: - resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} - engines: {node: '>=6'} + make-dir@2.1.0: dependencies: pify: 4.0.1 semver: 5.7.2 - dev: true - /make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} + make-dir@3.1.0: dependencies: semver: 6.3.1 - dev: true - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true + make-error@1.3.6: {} - /makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + makeerror@1.0.12: dependencies: tmpl: 1.0.5 - dev: true - /map-obj@1.0.1: - resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} - engines: {node: '>=0.10.0'} - dev: true + map-obj@1.0.1: {} - /map-obj@4.3.0: - resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} - engines: {node: '>=8'} - dev: true + map-obj@4.3.0: {} - /map-or-similar@1.5.0: - resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} - dev: true + map-or-similar@1.5.0: {} - /markdown-to-jsx@7.4.1(react@18.2.0): - resolution: {integrity: sha512-GbrbkTnHp9u6+HqbPRFJbObi369AgJNXi/sGqq5HRsoZW063xR1XDCaConqq+whfEIAlzB1YPnOgsPc7B7bc/A==} - engines: {node: '>= 10'} - peerDependencies: - react: '>= 0.14.0' + markdown-to-jsx@7.4.1(react@18.2.0): dependencies: react: 18.2.0 - dev: true - /mdast-util-definitions@4.0.0: - resolution: {integrity: sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==} + mdast-util-definitions@4.0.0: dependencies: unist-util-visit: 2.0.3 - dev: true - /mdast-util-to-string@1.1.0: - resolution: {integrity: sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==} - dev: true + mdast-util-to-string@1.1.0: {} - /media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - dev: true + media-typer@0.3.0: {} - /memoizerific@1.11.3: - resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==} + memoizerific@1.11.3: dependencies: map-or-similar: 1.5.0 - dev: true - /meow@8.1.2: - resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} - engines: {node: '>=10'} + meow@8.1.2: dependencies: '@types/minimist': 1.2.5 camelcase-keys: 6.2.2 @@ -7860,168 +10362,88 @@ packages: trim-newlines: 3.0.1 type-fest: 0.18.1 yargs-parser: 20.2.9 - dev: true - /merge-descriptors@1.0.1: - resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} - dev: true + merge-descriptors@1.0.1: {} - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true + merge-stream@2.0.0: {} - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true + merge2@1.4.1: {} - /methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} - dev: true + methods@1.1.2: {} - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} + micromatch@4.0.5: dependencies: braces: 3.0.2 picomatch: 2.3.1 - dev: true - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} + mime-db@1.52.0: {} - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} + mime-types@2.1.35: dependencies: mime-db: 1.52.0 - /mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - dev: true + mime@1.6.0: {} - /mime@2.6.0: - resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} - engines: {node: '>=4.0.0'} - hasBin: true - dev: true + mime@2.6.0: {} - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: true + mimic-fn@2.1.0: {} - /mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - dev: true + mimic-fn@4.0.0: {} - /min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - dev: true + min-indent@1.0.1: {} - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - dev: true - /minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} + minimatch@5.1.6: dependencies: brace-expansion: 2.0.1 - dev: true - /minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.3: dependencies: brace-expansion: 2.0.1 - dev: true - /minimist-options@4.1.0: - resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} - engines: {node: '>= 6'} + minimatch@9.0.4: + dependencies: + brace-expansion: 2.0.1 + + minimist-options@4.1.0: dependencies: arrify: 1.0.1 is-plain-obj: 1.1.0 kind-of: 6.0.3 - dev: true - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true + minimist@1.2.8: {} - /minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} + minipass@3.3.6: dependencies: yallist: 4.0.0 - dev: true - /minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} - dev: true + minipass@5.0.0: {} - /minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} - engines: {node: '>=16 || 14 >=14.17'} - dev: true + minipass@7.0.4: {} - /minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} + minizlib@2.1.2: dependencies: minipass: 3.3.6 yallist: 4.0.0 - dev: true - /mkdirp-classic@0.5.3: - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - dev: true + mkdirp-classic@0.5.3: {} - /mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true + mkdirp@0.5.6: dependencies: minimist: 1.2.8 - dev: true - /mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - dev: true + mkdirp@1.0.4: {} - /ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - dev: true + ms@2.0.0: {} - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true + ms@2.1.2: {} - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true + ms@2.1.3: {} - /msw@2.2.13(typescript@5.3.3): - resolution: {integrity: sha512-ljFf1xZsU0b4zv1l7xzEmC6OZA6yD06hcx0H+dc8V0VypaP3HGYJa1rMLjQbBWl32ptGhcfwcPCWDB1wjmsftw==} - engines: {node: '>=18'} - hasBin: true - requiresBuild: true - peerDependencies: - typescript: '>= 4.7.x' - peerDependenciesMeta: - typescript: - optional: true + msw@2.2.13(typescript@5.3.3): dependencies: '@bundled-es-modules/cookie': 2.0.0 '@bundled-es-modules/statuses': 1.0.1 @@ -8039,255 +10461,150 @@ packages: path-to-regexp: 6.2.1 strict-event-emitter: 0.5.1 type-fest: 4.15.0 - typescript: 5.3.3 yargs: 17.7.2 - dev: true + optionalDependencies: + typescript: 5.3.3 - /mute-stream@1.0.0: - resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true + mute-stream@1.0.0: {} - /mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + mz@2.7.0: dependencies: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 - dev: true - /nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true + nanoid@3.3.7: {} - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true + natural-compare@1.4.0: {} - /negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - dev: true + negotiator@0.6.3: {} - /neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - dev: true + neo-async@2.6.2: {} - /node-dir@0.1.17: - resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==} - engines: {node: '>= 0.10.5'} + node-dir@0.1.17: dependencies: minimatch: 3.1.2 - dev: true - /node-fetch-native@1.6.1: - resolution: {integrity: sha512-bW9T/uJDPAJB2YNYEpWzE54U5O3MQidXsOyTfnbKYtTtFexRvGzb1waphBN4ZwP6EcIvYYEOwW0b72BpAqydTw==} - dev: true + node-fetch-native@1.6.1: {} - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 - dev: true - /node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - dev: true + node-int64@0.4.0: {} - /node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} - dev: true + node-releases@2.0.14: {} - /normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 resolve: 1.22.8 semver: 5.7.2 validate-npm-package-license: 3.0.4 - dev: true - /normalize-package-data@3.0.3: - resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} - engines: {node: '>=10'} + normalize-package-data@3.0.3: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.13.1 semver: 7.5.4 validate-npm-package-license: 3.0.4 - dev: true - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true + normalize-path@3.0.0: {} - /normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - dev: true + normalize-range@0.1.2: {} - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 - dev: true - /npm-run-path@5.2.0: - resolution: {integrity: sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + npm-run-path@5.2.0: dependencies: path-key: 4.0.0 - dev: true - /nypm@0.3.6: - resolution: {integrity: sha512-2CATJh3pd6CyNfU5VZM7qSwFu0ieyabkEdnogE30Obn1czrmOYiZ8DOZLe1yBdLKWoyD3Mcy2maUs+0MR3yVjQ==} - engines: {node: ^14.16.0 || >=16.10.0} - hasBin: true + nypm@0.3.6: dependencies: citty: 0.1.5 execa: 8.0.1 pathe: 1.1.2 ufo: 1.3.2 - dev: true - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - dev: true + object-assign@4.1.1: {} - /object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - dev: true + object-hash@3.0.0: {} - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - dev: true + object-inspect@1.13.1: {} - /object-is@1.1.5: - resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} - engines: {node: '>= 0.4'} + object-is@1.1.5: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 - dev: true - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: true + object-keys@1.1.1: {} - /object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} + object.assign@4.1.5: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 - dev: true - /object.entries@1.1.7: - resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} - engines: {node: '>= 0.4'} + object.entries@1.1.7: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 - dev: true - /object.fromentries@2.0.7: - resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} - engines: {node: '>= 0.4'} + object.fromentries@2.0.7: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 - dev: true - /object.groupby@1.0.1: - resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} + object.groupby@1.0.1: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 get-intrinsic: 1.2.2 - dev: true - /object.hasown@1.1.3: - resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} + object.hasown@1.1.3: dependencies: define-properties: 1.2.1 es-abstract: 1.22.3 - dev: true - /object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} - engines: {node: '>= 0.4'} + object.values@1.1.7: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 - dev: true - /ohash@1.1.3: - resolution: {integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==} - dev: true + ohash@1.1.3: {} - /on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} + on-finished@2.4.1: dependencies: ee-first: 1.1.1 - dev: true - /on-headers@1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} - engines: {node: '>= 0.8'} - dev: true + on-headers@1.0.2: {} - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + once@1.4.0: dependencies: wrappy: 1.0.2 - dev: true - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + onetime@5.1.2: dependencies: mimic-fn: 2.1.0 - dev: true - /onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} + onetime@6.0.0: dependencies: mimic-fn: 4.0.0 - dev: true - /open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} + open@8.4.2: dependencies: define-lazy-prop: 2.0.0 is-docker: 2.2.1 is-wsl: 2.2.0 - dev: true - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} + optionator@0.9.3: dependencies: '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 @@ -8295,11 +10612,8 @@ packages: levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true - /ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} + ora@5.4.1: dependencies: bl: 4.1.0 chalk: 4.1.2 @@ -8310,380 +10624,204 @@ packages: log-symbols: 4.1.0 strip-ansi: 6.0.1 wcwidth: 1.0.1 - dev: true - /outvariant@1.4.2: - resolution: {integrity: sha512-Ou3dJ6bA/UJ5GVHxah4LnqDwZRwAmWxrG3wtrHrbGnP4RnLCtA64A4F+ae7Y8ww660JaddSoArUR5HjipWSHAQ==} - dev: true + outvariant@1.4.2: {} - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} + p-limit@2.3.0: dependencies: p-try: 2.2.0 - dev: true - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - dev: true - /p-locate@3.0.0: - resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} - engines: {node: '>=6'} + p-locate@3.0.0: dependencies: p-limit: 2.3.0 - dev: true - /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} + p-locate@4.1.0: dependencies: p-limit: 2.3.0 - dev: true - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + p-locate@5.0.0: dependencies: p-limit: 3.1.0 - dev: true - /p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} + p-map@4.0.0: dependencies: aggregate-error: 3.1.0 - dev: true - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - dev: true + p-try@2.2.0: {} - /pako@0.2.9: - resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} - dev: true + pako@0.2.9: {} - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + parent-module@1.0.1: dependencies: callsites: 3.1.0 - dev: true - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + parse-json@5.2.0: dependencies: '@babel/code-frame': 7.23.5 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - dev: true - /parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - dev: true + parseurl@1.3.3: {} - /path-exists@3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} - engines: {node: '>=4'} - dev: true + path-exists@3.0.0: {} - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true + path-exists@4.0.0: {} - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true + path-is-absolute@1.0.1: {} - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: true + path-key@3.1.1: {} - /path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - dev: true + path-key@4.0.0: {} - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true + path-parse@1.0.7: {} - /path-scurry@1.10.1: - resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} - engines: {node: '>=16 || 14 >=14.17'} + path-scurry@1.10.1: dependencies: lru-cache: 10.2.0 minipass: 7.0.4 - dev: true - /path-to-regexp@0.1.7: - resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} - dev: true + path-to-regexp@0.1.7: {} - /path-to-regexp@6.2.1: - resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} - dev: true + path-to-regexp@6.2.1: {} - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: true + path-type@4.0.0: {} - /pathe@1.1.2: - resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - dev: true + pathe@1.1.2: {} - /peek-stream@1.1.3: - resolution: {integrity: sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==} + peek-stream@1.1.3: dependencies: buffer-from: 1.1.2 duplexify: 3.7.1 through2: 2.0.5 - dev: true - /pend@1.2.0: - resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - dev: true + pend@1.2.0: {} - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true + picocolors@1.0.0: {} - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true + picomatch@2.3.1: {} - /pidtree@0.6.0: - resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} - engines: {node: '>=0.10'} - hasBin: true - dev: true + pidtree@0.6.0: {} - /pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - dev: true + pify@2.3.0: {} - /pify@4.0.1: - resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} - engines: {node: '>=6'} - dev: true + pify@4.0.1: {} - /pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - dev: true + pirates@4.0.6: {} - /pkg-dir@3.0.0: - resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} - engines: {node: '>=6'} + pkg-dir@3.0.0: dependencies: find-up: 3.0.0 - dev: true - /pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} + pkg-dir@4.2.0: dependencies: find-up: 4.1.0 - dev: true - /pkg-dir@5.0.0: - resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} - engines: {node: '>=10'} + pkg-dir@5.0.0: dependencies: find-up: 5.0.0 - dev: true - /polished@4.2.2: - resolution: {integrity: sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==} - engines: {node: '>=10'} + polished@4.2.2: dependencies: '@babel/runtime': 7.23.9 - dev: true - /postcss-import@15.1.0(postcss@8.4.33): - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 + postcss-import@15.1.0(postcss@8.4.33): dependencies: postcss: 8.4.33 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - dev: true - /postcss-js@4.0.1(postcss@8.4.33): - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 + postcss-js@4.0.1(postcss@8.4.33): dependencies: camelcase-css: 2.0.1 postcss: 8.4.33 - dev: true - /postcss-load-config@4.0.2(postcss@8.4.33)(ts-node@10.9.2): - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true + postcss-load-config@4.0.2(postcss@8.4.33)(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.3.3)): dependencies: lilconfig: 3.0.0 + yaml: 2.3.4 + optionalDependencies: postcss: 8.4.33 ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.3.3) - yaml: 2.3.4 - dev: true - /postcss-nested@6.0.1(postcss@8.4.33): - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 + postcss-nested@6.0.1(postcss@8.4.33): dependencies: postcss: 8.4.33 postcss-selector-parser: 6.0.15 - dev: true - /postcss-selector-parser@6.0.15: - resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==} - engines: {node: '>=4'} + postcss-selector-parser@6.0.15: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - dev: true - /postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - dev: true + postcss-value-parser@4.2.0: {} - /postcss@8.4.33: - resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} - engines: {node: ^10 || ^12 || >=14} + postcss@8.4.33: dependencies: nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.0.2 - dev: true - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true + prelude-ls@1.2.1: {} - /prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} - engines: {node: '>=6.0.0'} + prettier-linter-helpers@1.0.0: dependencies: fast-diff: 1.3.0 - dev: true - /prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} - engines: {node: '>=10.13.0'} - hasBin: true - dev: true + prettier@2.8.8: {} - /prettier@3.2.4: - resolution: {integrity: sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==} - engines: {node: '>=14'} - hasBin: true - dev: true + prettier@3.2.4: {} - /pretty-hrtime@1.0.3: - resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} - engines: {node: '>= 0.8'} - dev: true + pretty-hrtime@1.0.3: {} - /process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: true + process-nextick-args@2.0.1: {} - /process@0.11.10: - resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} - engines: {node: '>= 0.6.0'} - dev: true + process@0.11.10: {} - /progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} - dev: true + progress@2.0.3: {} - /prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} + prompts@2.4.2: dependencies: kleur: 3.0.3 sisteransi: 1.0.5 - dev: true - /prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + prop-types@15.8.1: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 - dev: true - /proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 ipaddr.js: 1.9.1 - dev: true - /proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + proxy-from-env@1.1.0: {} - /pump@2.0.1: - resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} + pump@2.0.1: dependencies: end-of-stream: 1.4.4 once: 1.4.0 - dev: true - /pump@3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + pump@3.0.0: dependencies: end-of-stream: 1.4.4 once: 1.4.0 - dev: true - /pumpify@1.5.1: - resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==} + pumpify@1.5.1: dependencies: duplexify: 3.7.1 inherits: 2.0.4 pump: 2.0.1 - dev: true - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - dev: true + punycode@2.3.1: {} - /puppeteer-core@2.1.1: - resolution: {integrity: sha512-n13AWriBMPYxnpbb6bnaY5YoY6rGj8vPLrz6CZF3o0qJNEwlcfJVxBzYZ0NJsQ21UbdJoijPCDrM++SUVEz7+w==} - engines: {node: '>=8.16.0'} + puppeteer-core@2.1.1: dependencies: '@types/mime-types': 2.1.4 debug: 4.3.4 @@ -8699,71 +10837,40 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: true - /qs@6.11.0: - resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} - engines: {node: '>=0.6'} + qs@6.11.0: dependencies: side-channel: 1.0.4 - dev: true - /qs@6.11.2: - resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} - engines: {node: '>=0.6'} + qs@6.11.2: dependencies: side-channel: 1.0.4 - dev: true - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true + queue-microtask@1.2.3: {} - /quick-lru@4.0.1: - resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} - engines: {node: '>=8'} - dev: true + quick-lru@4.0.1: {} - /ramda@0.29.0: - resolution: {integrity: sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==} - dev: true + ramda@0.29.0: {} - /range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - dev: true + range-parser@1.2.1: {} - /raw-body@2.5.1: - resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} - engines: {node: '>= 0.8'} + raw-body@2.5.1: dependencies: bytes: 3.1.2 http-errors: 2.0.0 iconv-lite: 0.4.24 unpipe: 1.0.0 - dev: true - /react-colorful@5.6.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' + react-colorful@5.6.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true - /react-docgen-typescript@2.2.2(typescript@5.3.3): - resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} - peerDependencies: - typescript: '>= 4.3.x' + react-docgen-typescript@2.2.2(typescript@5.3.3): dependencies: typescript: 5.3.3 - dev: true - /react-docgen@7.0.3: - resolution: {integrity: sha512-i8aF1nyKInZnANZ4uZrH49qn1paRgBZ7wZiCNBMnenlPzEv0mRl+ShpTVEI6wZNl8sSc79xZkivtgLKQArcanQ==} - engines: {node: '>=16.14.0'} + react-docgen@7.0.3: dependencies: '@babel/core': 7.23.9 '@babel/traverse': 7.23.9 @@ -8777,171 +10884,101 @@ packages: strip-indent: 4.0.0 transitivePeerDependencies: - supports-color - dev: true - /react-dom@18.2.0(react@18.2.0): - resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} - peerDependencies: - react: ^18.2.0 + react-dom@18.2.0(react@18.2.0): dependencies: loose-envify: 1.4.0 react: 18.2.0 scheduler: 0.23.0 - /react-element-to-jsx-string@15.0.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==} - peerDependencies: - react: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0 - react-dom: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0 + react-element-to-jsx-string@15.0.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@base2/pretty-print-object': 1.0.1 is-plain-object: 5.0.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-is: 18.1.0 - dev: true - /react-hook-form@7.50.1(react@18.2.0): - resolution: {integrity: sha512-3PCY82oE0WgeOgUtIr3nYNNtNvqtJ7BZjsbxh6TnYNbXButaD5WpjOmTjdxZfheuHKR68qfeFnEDVYoSSFPMTQ==} - engines: {node: '>=12.22.0'} - peerDependencies: - react: ^16.8.0 || ^17 || ^18 + react-hook-form@7.50.1(react@18.2.0): dependencies: react: 18.2.0 - dev: false - /react-hot-toast@2.4.1(csstype@3.1.3)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-j8z+cQbWIM5LY37pR6uZR6D4LfseplqnuAO4co4u8917hBUvXlEqyP1ZzqVLcqoyUesZZv/ImreoCeHVDpE5pQ==} - engines: {node: '>=10'} - peerDependencies: - react: '>=16' - react-dom: '>=16' + react-hot-toast@2.4.1(csstype@3.1.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: goober: 2.1.14(csstype@3.1.3) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: - csstype - dev: false - /react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - dev: true + react-is@16.13.1: {} - /react-is@18.1.0: - resolution: {integrity: sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==} - dev: true + react-is@18.1.0: {} - /react-refresh@0.14.0: - resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} - engines: {node: '>=0.10.0'} - dev: true + react-refresh@0.14.0: {} - /react-remove-scroll-bar@2.3.4(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} - 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 + react-remove-scroll-bar@2.3.4(@types/react@18.2.48)(react@18.2.0): dependencies: - '@types/react': 18.2.48 react: 18.2.0 react-style-singleton: 2.2.1(@types/react@18.2.48)(react@18.2.0) tslib: 2.6.2 + optionalDependencies: + '@types/react': 18.2.48 - /react-remove-scroll@2.5.5(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} - 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 + react-remove-scroll@2.5.5(@types/react@18.2.48)(react@18.2.0): dependencies: - '@types/react': 18.2.48 react: 18.2.0 react-remove-scroll-bar: 2.3.4(@types/react@18.2.48)(react@18.2.0) react-style-singleton: 2.2.1(@types/react@18.2.48)(react@18.2.0) tslib: 2.6.2 use-callback-ref: 1.3.1(@types/react@18.2.48)(react@18.2.0) use-sidecar: 1.1.2(@types/react@18.2.48)(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 - /react-router-dom@6.21.3(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-kNzubk7n4YHSrErzjLK72j0B5i969GsuCGazRl3G6j1zqZBLjuSlYBdVdkDOgzGdPIffUOc9nmgiadTEVoq91g==} - engines: {node: '>=14.0.0'} - peerDependencies: - react: '>=16.8' - react-dom: '>=16.8' + react-router-dom@6.21.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@remix-run/router': 1.14.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-router: 6.21.3(react@18.2.0) - dev: false - /react-router@6.21.3(react@18.2.0): - resolution: {integrity: sha512-a0H638ZXULv1OdkmiK6s6itNhoy33ywxmUFT/xtSoVyf9VnC7n7+VT4LjVzdIHSaF5TIh9ylUgxMXksHTgGrKg==} - engines: {node: '>=14.0.0'} - peerDependencies: - react: '>=16.8' + react-router@6.21.3(react@18.2.0): dependencies: '@remix-run/router': 1.14.2 react: 18.2.0 - dev: false - /react-style-singleton@2.2.1(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} - 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 + react-style-singleton@2.2.1(@types/react@18.2.48)(react@18.2.0): dependencies: - '@types/react': 18.2.48 get-nonce: 1.0.1 invariant: 2.2.4 react: 18.2.0 tslib: 2.6.2 + optionalDependencies: + '@types/react': 18.2.48 - /react@18.2.0: - resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} - engines: {node: '>=0.10.0'} + react@18.2.0: dependencies: loose-envify: 1.4.0 - /read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + read-cache@1.0.0: dependencies: pify: 2.3.0 - dev: true - /read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} + read-pkg-up@7.0.1: dependencies: find-up: 4.1.0 read-pkg: 5.2.0 type-fest: 0.8.1 - dev: true - /read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} + read-pkg@5.2.0: dependencies: '@types/normalize-package-data': 2.4.4 normalize-package-data: 2.5.0 parse-json: 5.2.0 type-fest: 0.6.0 - dev: true - /readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 inherits: 2.0.4 @@ -8950,46 +10987,31 @@ packages: safe-buffer: 5.1.2 string_decoder: 1.1.1 util-deprecate: 1.0.2 - dev: true - /readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} + readable-stream@3.6.2: dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 - dev: true - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + readdirp@3.6.0: dependencies: picomatch: 2.3.1 - dev: true - /recast@0.23.4: - resolution: {integrity: sha512-qtEDqIZGVcSZCHniWwZWbRy79Dc6Wp3kT/UmDA2RJKBPg7+7k51aQBZirHmUGn5uvHf2rg8DkjizrN26k61ATw==} - engines: {node: '>= 4'} + recast@0.23.4: dependencies: assert: 2.1.0 ast-types: 0.16.1 esprima: 4.0.1 source-map: 0.6.1 tslib: 2.6.2 - dev: true - /redent@3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} + redent@3.0.0: dependencies: indent-string: 4.0.0 strip-indent: 3.0.0 - dev: true - /reflect.getprototypeof@1.0.4: - resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} - engines: {node: '>= 0.4'} + reflect.getprototypeof@1.0.4: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 @@ -8997,40 +11019,26 @@ packages: get-intrinsic: 1.2.2 globalthis: 1.0.3 which-builtin-type: 1.1.3 - dev: true - /regenerate-unicode-properties@10.1.1: - resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} - engines: {node: '>=4'} + regenerate-unicode-properties@10.1.1: dependencies: regenerate: 1.4.2 - dev: true - /regenerate@1.4.2: - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - dev: true + regenerate@1.4.2: {} - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + regenerator-runtime@0.14.1: {} - /regenerator-transform@0.15.2: - resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + regenerator-transform@0.15.2: dependencies: '@babel/runtime': 7.23.9 - dev: true - /regexp.prototype.flags@1.5.1: - resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} - engines: {node: '>= 0.4'} + regexp.prototype.flags@1.5.1: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 set-function-name: 2.0.1 - dev: true - /regexpu-core@5.3.2: - resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} - engines: {node: '>=4'} + regexpu-core@5.3.2: dependencies: '@babel/regjsgen': 0.8.0 regenerate: 1.4.2 @@ -9038,204 +11046,121 @@ packages: regjsparser: 0.9.1 unicode-match-property-ecmascript: 2.0.0 unicode-match-property-value-ecmascript: 2.1.0 - dev: true - /regjsparser@0.9.1: - resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} - hasBin: true + regjsparser@0.9.1: dependencies: jsesc: 0.5.0 - dev: true - /remark-external-links@8.0.0: - resolution: {integrity: sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==} + remark-external-links@8.0.0: dependencies: extend: 3.0.2 is-absolute-url: 3.0.3 mdast-util-definitions: 4.0.0 space-separated-tokens: 1.1.5 unist-util-visit: 2.0.3 - dev: true - /remark-slug@6.1.0: - resolution: {integrity: sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==} + remark-slug@6.1.0: dependencies: github-slugger: 1.5.0 mdast-util-to-string: 1.1.0 unist-util-visit: 2.0.3 - dev: true - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: true + require-directory@2.1.1: {} - /require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - dev: true + require-from-string@2.0.2: {} - /requireindex@1.2.0: - resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} - engines: {node: '>=0.10.5'} - dev: true + requireindex@1.2.0: {} - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true + resolve-from@4.0.0: {} - /resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - dev: true + resolve-from@5.0.0: {} - /resolve-global@1.0.0: - resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} - engines: {node: '>=8'} + resolve-global@1.0.0: dependencies: global-dirs: 0.1.1 - dev: true - /resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - dev: true + resolve-pkg-maps@1.0.0: {} - /resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true + resolve@1.22.8: dependencies: is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true - /resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true + resolve@2.0.0-next.5: dependencies: is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true - /restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} + restore-cursor@3.1.0: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 - dev: true - /restore-cursor@4.0.0: - resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + restore-cursor@4.0.0: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 - dev: true - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true + reusify@1.0.4: {} - /rfdc@1.3.1: - resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} - dev: true + rfdc@1.3.1: {} - /rimraf@2.6.3: - resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} - hasBin: true + rimraf@2.6.3: dependencies: glob: 7.2.3 - dev: true - /rimraf@2.7.1: - resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} - hasBin: true + rimraf@2.7.1: dependencies: glob: 7.2.3 - dev: true - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true + rimraf@3.0.2: dependencies: glob: 7.2.3 - dev: true - /rollup@3.29.4: - resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true + rollup@3.29.4: optionalDependencies: fsevents: 2.3.3 - dev: true - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - dev: true - /safe-array-concat@1.1.0: - resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} - engines: {node: '>=0.4'} + safe-array-concat@1.1.0: dependencies: call-bind: 1.0.5 get-intrinsic: 1.2.2 has-symbols: 1.0.3 isarray: 2.0.5 - dev: true - /safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: true + safe-buffer@5.1.2: {} - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true + safe-buffer@5.2.1: {} - /safe-regex-test@1.0.2: - resolution: {integrity: sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==} - engines: {node: '>= 0.4'} + safe-regex-test@1.0.2: dependencies: call-bind: 1.0.5 get-intrinsic: 1.2.2 is-regex: 1.1.4 - dev: true - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true + safer-buffer@2.1.2: {} - /scheduler@0.23.0: - resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + scheduler@0.23.0: dependencies: loose-envify: 1.4.0 - /semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - dev: true + semver@5.7.2: {} - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - dev: true + semver@6.3.1: {} - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true + semver@7.5.4: dependencies: lru-cache: 6.0.0 - dev: true - /send@0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} - engines: {node: '>= 0.8.0'} + semver@7.6.2: {} + + send@0.18.0: dependencies: debug: 2.6.9 depd: 2.0.0 @@ -9252,11 +11177,8 @@ packages: statuses: 2.0.1 transitivePeerDependencies: - supports-color - dev: true - /serve-static@1.15.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} - engines: {node: '>= 0.8.0'} + serve-static@1.15.0: dependencies: encodeurl: 1.0.2 escape-html: 1.0.3 @@ -9264,150 +11186,88 @@ packages: send: 0.18.0 transitivePeerDependencies: - supports-color - dev: true - /set-function-length@1.2.0: - resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==} - engines: {node: '>= 0.4'} + set-function-length@1.2.0: dependencies: define-data-property: 1.1.1 function-bind: 1.1.2 get-intrinsic: 1.2.2 gopd: 1.0.1 has-property-descriptors: 1.0.1 - dev: true - /set-function-name@2.0.1: - resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} - engines: {node: '>= 0.4'} + set-function-name@2.0.1: dependencies: define-data-property: 1.1.1 functions-have-names: 1.2.3 has-property-descriptors: 1.0.1 - dev: true - /setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - dev: true + setprototypeof@1.2.0: {} - /shallow-clone@3.0.1: - resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} - engines: {node: '>=8'} + shallow-clone@3.0.1: dependencies: kind-of: 6.0.3 - dev: true - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - dev: true - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: true + shebang-regex@3.0.0: {} - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + side-channel@1.0.4: dependencies: call-bind: 1.0.5 get-intrinsic: 1.2.2 object-inspect: 1.13.1 - dev: true - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true + signal-exit@3.0.7: {} - /signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - dev: true + signal-exit@4.1.0: {} - /sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - dev: true + sisteransi@1.0.5: {} - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - dev: true + slash@3.0.0: {} - /slice-ansi@5.0.0: - resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} - engines: {node: '>=12'} + slice-ansi@5.0.0: dependencies: ansi-styles: 6.2.1 is-fullwidth-code-point: 4.0.0 - dev: true - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} - dev: true + source-map-js@1.0.2: {} - /source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - dev: true - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: true + source-map@0.6.1: {} - /space-separated-tokens@1.1.5: - resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} - dev: true + space-separated-tokens@1.1.5: {} - /spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 spdx-license-ids: 3.0.16 - dev: true - /spdx-exceptions@2.4.0: - resolution: {integrity: sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw==} - dev: true + spdx-exceptions@2.4.0: {} - /spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + spdx-expression-parse@3.0.1: dependencies: spdx-exceptions: 2.4.0 spdx-license-ids: 3.0.16 - dev: true - /spdx-license-ids@3.0.16: - resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} - dev: true + spdx-license-ids@3.0.16: {} - /split2@3.2.2: - resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} + split2@3.2.2: dependencies: readable-stream: 3.6.2 - dev: true - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: true + sprintf-js@1.0.3: {} - /statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - dev: true + statuses@2.0.1: {} - /store2@2.14.2: - resolution: {integrity: sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==} - dev: true + store2@2.14.2: {} - /storybook@7.6.12: - resolution: {integrity: sha512-zcH9CwIsE8N4PX3he5vaJ3mTTWGxu7cxJ/ag9oja/k3N5/IvQjRyIU1TLkRVb28BB8gaLyorpnc4C4aLVGy4WQ==} - hasBin: true + storybook@7.6.12: dependencies: '@storybook/cli': 7.6.12 transitivePeerDependencies: @@ -9415,41 +11275,26 @@ packages: - encoding - supports-color - utf-8-validate - dev: true - /stream-shift@1.0.3: - resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} - dev: true + stream-shift@1.0.3: {} - /strict-event-emitter@0.5.1: - resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} - dev: true + strict-event-emitter@0.5.1: {} - /string-argv@0.3.2: - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} - engines: {node: '>=0.6.19'} - dev: true + string-argv@0.3.2: {} - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - dev: true - /string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} + string-width@5.1.2: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.1.0 - dev: true - /string.prototype.matchall@4.0.10: - resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} + string.prototype.matchall@4.0.10: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 @@ -9460,97 +11305,58 @@ packages: regexp.prototype.flags: 1.5.1 set-function-name: 2.0.1 side-channel: 1.0.4 - dev: true - /string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} - engines: {node: '>= 0.4'} + string.prototype.trim@1.2.8: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 - dev: true - /string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + string.prototype.trimend@1.0.7: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 - dev: true - /string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + string.prototype.trimstart@1.0.7: dependencies: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 - dev: true - /string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 - dev: true - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 - dev: true - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - dev: true - /strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} + strip-ansi@7.1.0: dependencies: ansi-regex: 6.0.1 - dev: true - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - dev: true + strip-bom@3.0.0: {} - /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: true + strip-final-newline@2.0.0: {} - /strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - dev: true + strip-final-newline@3.0.0: {} - /strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} + strip-indent@3.0.0: dependencies: min-indent: 1.0.1 - dev: true - /strip-indent@4.0.0: - resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} - engines: {node: '>=12'} + strip-indent@4.0.0: dependencies: min-indent: 1.0.1 - dev: true - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true + strip-json-comments@3.1.1: {} - /sucrase@3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true + sucrase@3.35.0: dependencies: '@jridgewell/gen-mapping': 0.3.3 commander: 4.1.1 @@ -9559,64 +11365,37 @@ packages: mz: 2.7.0 pirates: 4.0.6 ts-interface-checker: 0.1.13 - dev: true - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} + supports-color@5.5.0: dependencies: has-flag: 3.0.0 - dev: true - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 - dev: true - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} + supports-color@8.1.1: dependencies: has-flag: 4.0.0 - dev: true - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true + supports-preserve-symlinks-flag@1.0.0: {} - /synchronous-promise@2.0.17: - resolution: {integrity: sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==} - dev: true + synchronous-promise@2.0.17: {} - /synckit@0.8.8: - resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} - engines: {node: ^14.18.0 || >=16.0.0} + synckit@0.8.8: dependencies: '@pkgr/core': 0.1.1 tslib: 2.6.2 - dev: true - /tailwind-merge@2.2.1: - resolution: {integrity: sha512-o+2GTLkthfa5YUt4JxPfzMIpQzZ3adD1vLVkvKE1Twl9UAhGsEbIZhHHZVRttyW177S8PDJI3bTQNaebyofK3Q==} + tailwind-merge@2.2.1: dependencies: '@babel/runtime': 7.23.9 - dev: false - /tailwindcss-animate@1.0.7(tailwindcss@3.4.1): - resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} - peerDependencies: - tailwindcss: '>=3.0.0 || insiders' + tailwindcss-animate@1.0.7(tailwindcss@3.4.1(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.3.3))): dependencies: - tailwindcss: 3.4.1(ts-node@10.9.2) - dev: true + tailwindcss: 3.4.1(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.3.3)) - /tailwindcss@3.4.1(ts-node@10.9.2): - resolution: {integrity: sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==} - engines: {node: '>=14.0.0'} - hasBin: true + tailwindcss@3.4.1(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.3.3)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -9635,43 +11414,32 @@ packages: postcss: 8.4.33 postcss-import: 15.1.0(postcss@8.4.33) postcss-js: 4.0.1(postcss@8.4.33) - postcss-load-config: 4.0.2(postcss@8.4.33)(ts-node@10.9.2) + postcss-load-config: 4.0.2(postcss@8.4.33)(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.3.3)) postcss-nested: 6.0.1(postcss@8.4.33) postcss-selector-parser: 6.0.15 resolve: 1.22.8 sucrase: 3.35.0 transitivePeerDependencies: - ts-node - dev: true - /tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - dev: true + tapable@2.2.1: {} - /tar-fs@2.1.1: - resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + tar-fs@2.1.1: dependencies: chownr: 1.1.4 mkdirp-classic: 0.5.3 pump: 3.0.0 tar-stream: 2.2.0 - dev: true - /tar-stream@2.2.0: - resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} - engines: {node: '>=6'} + tar-stream@2.2.0: dependencies: bl: 4.1.0 end-of-stream: 1.4.4 fs-constants: 1.0.0 inherits: 2.0.4 readable-stream: 3.6.2 - dev: true - /tar@6.2.0: - resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} - engines: {node: '>=10'} + tar@6.2.0: dependencies: chownr: 2.0.0 fs-minipass: 2.1.0 @@ -9679,154 +11447,85 @@ packages: minizlib: 2.1.2 mkdirp: 1.0.4 yallist: 4.0.0 - dev: true - /telejson@7.2.0: - resolution: {integrity: sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==} + telejson@7.2.0: dependencies: memoizerific: 1.11.3 - dev: true - - /temp-dir@2.0.0: - resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} - engines: {node: '>=8'} - dev: true - /temp@0.8.4: - resolution: {integrity: sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==} - engines: {node: '>=6.0.0'} + temp-dir@2.0.0: {} + + temp@0.8.4: dependencies: rimraf: 2.6.3 - dev: true - /tempy@1.0.1: - resolution: {integrity: sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==} - engines: {node: '>=10'} + tempy@1.0.1: dependencies: del: 6.1.1 is-stream: 2.0.1 temp-dir: 2.0.0 type-fest: 0.16.0 unique-string: 2.0.0 - dev: true - /test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} + test-exclude@6.0.0: dependencies: '@istanbuljs/schema': 0.1.3 glob: 7.2.3 minimatch: 3.1.2 - dev: true - /text-extensions@1.9.0: - resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} - engines: {node: '>=0.10'} - dev: true + text-extensions@1.9.0: {} - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true + text-table@0.2.0: {} - /thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} + thenify-all@1.6.0: dependencies: thenify: 3.3.1 - dev: true - /thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + thenify@3.3.1: dependencies: any-promise: 1.3.0 - dev: true - /through2@2.0.5: - resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + through2@2.0.5: dependencies: readable-stream: 2.3.8 xtend: 4.0.2 - dev: true - /through2@4.0.2: - resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + through2@4.0.2: dependencies: readable-stream: 3.6.2 - dev: true - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true + through@2.3.8: {} - /tiny-invariant@1.3.1: - resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} - dev: true + tiny-invariant@1.3.1: {} - /tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - dev: true + tmpl@1.0.5: {} - /to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - dev: true + to-fast-properties@2.0.0: {} - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - dev: true - /tocbot@4.25.0: - resolution: {integrity: sha512-kE5wyCQJ40hqUaRVkyQ4z5+4juzYsv/eK+aqD97N62YH0TxFhzJvo22RUQQZdO3YnXAk42ZOfOpjVdy+Z0YokA==} - dev: true + tocbot@4.25.0: {} - /toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - dev: true + toidentifier@1.0.1: {} - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: true + tr46@0.0.3: {} - /trim-newlines@3.0.1: - resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} - engines: {node: '>=8'} - dev: true + trim-newlines@3.0.1: {} - /ts-api-utils@1.0.3(typescript@5.3.3): - resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} - engines: {node: '>=16.13.0'} - peerDependencies: - typescript: '>=4.2.0' + ts-api-utils@1.0.3(typescript@5.3.3): dependencies: typescript: 5.3.3 - dev: true - /ts-dedent@2.2.0: - resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} - engines: {node: '>=6.10'} - dev: true + ts-api-utils@1.3.0(typescript@5.3.3): + dependencies: + typescript: 5.3.3 - /ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - dev: true + ts-dedent@2.2.0: {} - /ts-node@10.9.2(@types/node@20.5.1)(typescript@5.3.3): - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true + ts-interface-checker@0.1.13: {} + + ts-node@10.9.2(@types/node@20.5.1)(typescript@5.3.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.9 @@ -9843,431 +11542,234 @@ packages: typescript: 5.3.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - dev: true - /tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + tsconfig-paths@3.15.0: dependencies: '@types/json5': 0.0.29 json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 - dev: true - /tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: true + tslib@1.14.1: {} - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + tslib@2.6.2: {} - /tsutils@3.21.0(typescript@5.3.3): - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + tsutils@3.21.0(typescript@5.3.3): dependencies: tslib: 1.14.1 typescript: 5.3.3 - dev: true - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - dev: true - /type-fest@0.16.0: - resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} - engines: {node: '>=10'} - dev: true + type-fest@0.16.0: {} - /type-fest@0.18.1: - resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} - engines: {node: '>=10'} - dev: true + type-fest@0.18.1: {} - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true + type-fest@0.20.2: {} - /type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - dev: true + type-fest@0.21.3: {} - /type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - dev: true + type-fest@0.6.0: {} - /type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - dev: true + type-fest@0.8.1: {} - /type-fest@1.4.0: - resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} - engines: {node: '>=10'} - dev: true + type-fest@1.4.0: {} - /type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} - engines: {node: '>=12.20'} - dev: true + type-fest@2.19.0: {} - /type-fest@4.15.0: - resolution: {integrity: sha512-tB9lu0pQpX5KJq54g+oHOLumOx+pMep4RaM6liXh2PKmVRFF+/vAtUP0ZaJ0kOySfVNjF6doBWPHhBhISKdlIA==} - engines: {node: '>=16'} - dev: true + type-fest@4.15.0: {} - /type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} + type-is@1.6.18: dependencies: media-typer: 0.3.0 mime-types: 2.1.35 - dev: true - /typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} - engines: {node: '>= 0.4'} + typed-array-buffer@1.0.0: dependencies: call-bind: 1.0.5 get-intrinsic: 1.2.2 is-typed-array: 1.1.12 - dev: true - /typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} - engines: {node: '>= 0.4'} + typed-array-byte-length@1.0.0: dependencies: call-bind: 1.0.5 for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.12 - dev: true - /typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} - engines: {node: '>= 0.4'} + typed-array-byte-offset@1.0.0: dependencies: available-typed-arrays: 1.0.5 call-bind: 1.0.5 for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.12 - dev: true - /typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + typed-array-length@1.0.4: dependencies: call-bind: 1.0.5 for-each: 0.3.3 is-typed-array: 1.1.12 - dev: true - /typedarray@0.0.6: - resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - dev: true + typedarray@0.0.6: {} - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} - engines: {node: '>=14.17'} - hasBin: true - dev: true + typescript@5.3.3: {} - /ufo@1.3.2: - resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} - dev: true + ufo@1.3.2: {} - /uglify-js@3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true + uglify-js@3.17.4: optional: true - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + unbox-primitive@1.0.2: dependencies: call-bind: 1.0.5 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - dev: true - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true + undici-types@5.26.5: {} - /unicode-canonical-property-names-ecmascript@2.0.0: - resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} - engines: {node: '>=4'} - dev: true + unicode-canonical-property-names-ecmascript@2.0.0: {} - /unicode-match-property-ecmascript@2.0.0: - resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} - engines: {node: '>=4'} + unicode-match-property-ecmascript@2.0.0: dependencies: unicode-canonical-property-names-ecmascript: 2.0.0 unicode-property-aliases-ecmascript: 2.1.0 - dev: true - /unicode-match-property-value-ecmascript@2.1.0: - resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} - engines: {node: '>=4'} - dev: true + unicode-match-property-value-ecmascript@2.1.0: {} - /unicode-property-aliases-ecmascript@2.1.0: - resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} - engines: {node: '>=4'} - dev: true + unicode-property-aliases-ecmascript@2.1.0: {} - /unique-string@2.0.0: - resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} - engines: {node: '>=8'} + unique-string@2.0.0: dependencies: crypto-random-string: 2.0.0 - dev: true - /unist-util-is@4.1.0: - resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} - dev: true + unist-util-is@4.1.0: {} - /unist-util-visit-parents@3.1.1: - resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==} + unist-util-visit-parents@3.1.1: dependencies: '@types/unist': 2.0.10 unist-util-is: 4.1.0 - dev: true - /unist-util-visit@2.0.3: - resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==} + unist-util-visit@2.0.3: dependencies: '@types/unist': 2.0.10 unist-util-is: 4.1.0 unist-util-visit-parents: 3.1.1 - dev: true - /universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - dev: true + universalify@2.0.1: {} - /unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - dev: true + unpipe@1.0.0: {} - /unplugin@1.6.0: - resolution: {integrity: sha512-BfJEpWBu3aE/AyHx8VaNE/WgouoQxgH9baAiH82JjX8cqVyi3uJQstqwD5J+SZxIK326SZIhsSZlALXVBCknTQ==} + unplugin@1.6.0: dependencies: acorn: 8.11.3 chokidar: 3.5.3 webpack-sources: 3.2.3 webpack-virtual-modules: 0.6.1 - dev: true - /untildify@4.0.0: - resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} - engines: {node: '>=8'} - dev: true + untildify@4.0.0: {} - /update-browserslist-db@1.0.13(browserslist@4.22.3): - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' + update-browserslist-db@1.0.13(browserslist@4.22.3): dependencies: browserslist: 4.22.3 escalade: 3.1.1 picocolors: 1.0.0 - dev: true - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + uri-js@4.4.1: dependencies: punycode: 2.3.1 - dev: true - /use-callback-ref@1.3.1(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ==} - 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 + use-callback-ref@1.3.1(@types/react@18.2.48)(react@18.2.0): dependencies: - '@types/react': 18.2.48 react: 18.2.0 tslib: 2.6.2 + optionalDependencies: + '@types/react': 18.2.48 - /use-resize-observer@9.1.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==} - peerDependencies: - react: 16.8.0 - 18 - react-dom: 16.8.0 - 18 + use-resize-observer@9.1.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@juggle/resize-observer': 3.4.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true - /use-sidecar@1.1.2(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true + use-sidecar@1.1.2(@types/react@18.2.48)(react@18.2.0): dependencies: - '@types/react': 18.2.48 detect-node-es: 1.1.0 react: 18.2.0 tslib: 2.6.2 + optionalDependencies: + '@types/react': 18.2.48 - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true + util-deprecate@1.0.2: {} - /util@0.12.5: - resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + util@0.12.5: dependencies: inherits: 2.0.4 is-arguments: 1.1.1 is-generator-function: 1.0.10 is-typed-array: 1.1.12 which-typed-array: 1.1.13 - dev: true - /utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - dev: true + utils-merge@1.0.1: {} - /uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true - dev: true + uuid@9.0.1: {} - /v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: true + v8-compile-cache-lib@3.0.1: {} - /validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - dev: true - /validator@13.11.0: - resolution: {integrity: sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==} - engines: {node: '>= 0.10'} - dev: false + validator@13.11.0: {} - /vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - dev: true + vary@1.1.2: {} - /vite@4.5.2(@types/node@20.5.1): - resolution: {integrity: sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true + vite@4.5.2(@types/node@20.5.1): dependencies: - '@types/node': 20.5.1 esbuild: 0.18.20 postcss: 8.4.33 rollup: 3.29.4 optionalDependencies: + '@types/node': 20.5.1 fsevents: 2.3.3 - dev: true - /walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + walker@1.0.8: dependencies: makeerror: 1.0.12 - dev: true - /watchpack@2.4.0: - resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} - engines: {node: '>=10.13.0'} + watchpack@2.4.0: dependencies: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 - dev: true - /wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + wcwidth@1.0.1: dependencies: defaults: 1.0.4 - dev: true - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: true + webidl-conversions@3.0.1: {} - /webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - dev: true + webpack-sources@3.2.3: {} - /webpack-virtual-modules@0.6.1: - resolution: {integrity: sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==} - dev: true + webpack-virtual-modules@0.6.1: {} - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - dev: true - /which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + which-boxed-primitive@1.0.2: dependencies: is-bigint: 1.0.4 is-boolean-object: 1.1.2 is-number-object: 1.0.7 is-string: 1.0.7 is-symbol: 1.0.4 - dev: true - /which-builtin-type@1.1.3: - resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} - engines: {node: '>= 0.4'} + which-builtin-type@1.1.3: dependencies: function.prototype.name: 1.1.6 has-tostringtag: 1.0.0 @@ -10281,155 +11783,82 @@ packages: which-boxed-primitive: 1.0.2 which-collection: 1.0.1 which-typed-array: 1.1.13 - dev: true - /which-collection@1.0.1: - resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} + which-collection@1.0.1: dependencies: is-map: 2.0.2 is-set: 2.0.2 is-weakmap: 2.0.1 is-weakset: 2.0.2 - dev: true - /which-typed-array@1.1.13: - resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} - engines: {node: '>= 0.4'} + which-typed-array@1.1.13: dependencies: available-typed-arrays: 1.0.5 call-bind: 1.0.5 for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.0 - dev: true - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + which@2.0.2: dependencies: isexe: 2.0.0 - dev: true - /wordwrap@1.0.0: - resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - dev: true + wordwrap@1.0.0: {} - /wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true - /wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} + wrap-ansi@8.1.0: dependencies: ansi-styles: 6.2.1 string-width: 5.1.2 strip-ansi: 7.1.0 - dev: true - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true + wrappy@1.0.2: {} - /write-file-atomic@2.4.3: - resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==} + write-file-atomic@2.4.3: dependencies: graceful-fs: 4.2.11 imurmurhash: 0.1.4 signal-exit: 3.0.7 - dev: true - /write-file-atomic@4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + write-file-atomic@4.0.2: dependencies: imurmurhash: 0.1.4 signal-exit: 3.0.7 - dev: true - /ws@6.2.2: - resolution: {integrity: sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true + ws@6.2.2: dependencies: async-limiter: 1.0.1 - dev: true - /ws@8.16.0: - resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true + ws@8.16.0: {} - /xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - dev: true + xtend@4.0.2: {} - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true + y18n@5.0.8: {} - /yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - dev: true + yallist@3.1.1: {} - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true + yallist@4.0.0: {} - /yaml@2.3.1: - resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} - engines: {node: '>= 14'} - dev: true + yaml@2.3.1: {} - /yaml@2.3.4: - resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} - engines: {node: '>= 14'} - dev: true + yaml@2.3.4: {} - /yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} - dev: true + yargs-parser@20.2.9: {} - /yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - dev: true + yargs-parser@21.1.1: {} - /yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + yargs@17.7.2: dependencies: cliui: 8.0.1 escalade: 3.1.1 @@ -10438,21 +11867,12 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 - dev: true - /yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + yauzl@2.10.0: dependencies: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 - dev: true - /yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - dev: true + yn@3.1.1: {} - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true + yocto-queue@0.1.0: {} diff --git a/src/main.tsx b/src/main.tsx index 7268b379..1905115e 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,5 +1,6 @@ import { StrictMode } from 'react' +import { QueryClient, QueryClientProvider } from '@tanstack/react-query' import { createRoot } from 'react-dom/client' import { BrowserRouter } from 'react-router-dom' @@ -10,6 +11,8 @@ import { env } from './main/env' import { AuthProvider } from './presentation/store' async function bootstrap() { + const queryClient = new QueryClient() + if (env.VITE_API_MOCKED) { const { worker } = await import('./mocks/browser') worker.start() @@ -18,7 +21,17 @@ async function bootstrap() { createRoot(document.getElementById('root') as HTMLElement).render( - + From 7981f7814da0ff2cbd7551e2c8eeab0616fb254d Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Tue, 25 Jun 2024 15:10:38 -0300 Subject: [PATCH 108/162] feat: wip fetch properties --- src/presentation/pages/property/index.tsx | 45 ++++++----- .../pages/property/useProperty.tsx | 78 +++++++++++++++---- 2 files changed, 90 insertions(+), 33 deletions(-) diff --git a/src/presentation/pages/property/index.tsx b/src/presentation/pages/property/index.tsx index a8eeb0be..ae0e502a 100644 --- a/src/presentation/pages/property/index.tsx +++ b/src/presentation/pages/property/index.tsx @@ -1,6 +1,7 @@ +import type { PropertyDetailsModel, PropertyModel } from '@/domain/models' import { PageContainer } from '@/presentation/containers' -import { PropertyPageProps } from './types' +import type { PropertyPageProps } from './types' import { usePropertyPage } from './useProperty' export const PropertyPage: React.FC = ({ @@ -8,30 +9,28 @@ export const PropertyPage: React.FC = ({ }) => { const { columns, - pagination, - sorting, - loading, - totalPages, + isPropertiesLoading, + properties, + handleGetProperties, + page, + setPage, filters, setFilters, - data: properties, - handleGetData: handleGetProperties + sort, + setSort } = usePropertyPage({ - useListTableParams: { - getData: getProperties - } + getProperties }) return ( - header={{ title: 'Propriedades', - description: 'Gerenciamento das propriedades dos produtores', - buttonAddText: 'Adicionar Propriedade' + description: 'Gerenciamento das propriedades dos produtores' }} tableContainer={{ inputSearch: { - value: filters?.name ?? '', + value: filters.name, onChange: ({ target: { value } }) => { setFilters((prevState) => ({ ...prevState, @@ -40,15 +39,21 @@ export const PropertyPage: React.FC = ({ }, placeholder: 'Procurar propriedades', debounce: 1000, - debounceCallback: () => handleGetProperties({ filters }) + debounceCallback: handleGetProperties }, table: { columns, - totalPages, - data: properties, - pagination, - sorting, - loading + totalPages: properties.totalPages, + data: properties.resources, + pagination: { + currentPage: page, + onPageChange: setPage + }, + sorting: { + currentSorting: sort, + onSorting: setSort + }, + loading: isPropertiesLoading } }} /> diff --git a/src/presentation/pages/property/useProperty.tsx b/src/presentation/pages/property/useProperty.tsx index b0587189..d8672b09 100644 --- a/src/presentation/pages/property/useProperty.tsx +++ b/src/presentation/pages/property/useProperty.tsx @@ -1,16 +1,48 @@ -import { ColumnDef } from '@tanstack/react-table' +import { useEffect, useMemo, useState } from 'react' + +import { useQuery } from '@tanstack/react-query' +import type { ColumnDef } from '@tanstack/react-table' import { MoreHorizontal, Pencil, Trash2 } from 'lucide-react' +import toast from 'react-hot-toast' -import { PropertyModel } from '@/domain/models' +import type { PropertyModel } from '@/domain/models' import { DropdownMenu } from '@/presentation/components/ui' -import { pageContainerHook } from '@/presentation/hooks/usePageContainer' - -export const usePropertyPage = pageContainerHook< - PropertyModel, - keyof PropertyModel ->({ - listTableParams: { - columns: [ + +import type { PropertyPageProps } from './types' +import type { Filters, Sort } from '@/domain/shared/types' + +export const usePropertyPage = ({ getProperties }: PropertyPageProps) => { + const [filters, setFilters] = useState>>( + { + name: '' + } + ) + const [page, setPage] = useState(1) + const [sort, setSort] = useState>({ + direction: 'asc', + field: 'name' + }) + + const { + data: properties, + isError: isPropertiesError, + isLoading: isPropertiesLoading, + refetch: handleGetProperties + } = useQuery({ + queryKey: ['properties', { ...filters }], + queryFn: () => + getProperties.execute({ + pagination: { page }, + sort + }), + initialData: { + resources: [], + totalPages: 0 + } + }) + + const columns = useMemo[]>( + () => [ { accessorKey: 'producer', header: 'Produtor' @@ -47,7 +79,27 @@ export const usePropertyPage = pageContainerHook< ) } - } as ColumnDef - ] + } + ], + [] + ) + + useEffect(() => { + if (isPropertiesError) { + toast('Não foi possível listar as propriedades') + } + }, [isPropertiesError]) + + return { + columns, + isPropertiesLoading, + properties, + handleGetProperties, + page, + setPage, + sort, + setSort, + filters, + setFilters } -}) +} From 7872bdca449579f526778392791deb3c863beb4a Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Wed, 24 Jul 2024 11:51:11 -0300 Subject: [PATCH 109/162] fix(domain): imports --- src/domain/models/propertyModel.ts | 2 +- src/domain/useCases/cep/getCep.ts | 4 ++-- src/domain/useCases/property/createProperty.ts | 4 ++-- src/domain/useCases/property/deleteProperty.ts | 2 +- src/domain/useCases/property/getProperties.ts | 4 ++-- src/domain/useCases/property/getProperty.ts | 4 ++-- src/domain/useCases/property/updateProperty.ts | 6 +++--- src/domain/useCases/user/createUser.ts | 4 ++-- src/domain/useCases/user/getAllUsers.ts | 2 +- src/domain/useCases/user/loginUser.ts | 4 ++-- 10 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/domain/models/propertyModel.ts b/src/domain/models/propertyModel.ts index 722ffb87..2a7f58b1 100644 --- a/src/domain/models/propertyModel.ts +++ b/src/domain/models/propertyModel.ts @@ -1,4 +1,4 @@ -import type { FileType, Option } from '@/domain/shared' +import type { FileType, Option } from '@/domain/shared/types' export type PropertyModel = { id: string diff --git a/src/domain/useCases/cep/getCep.ts b/src/domain/useCases/cep/getCep.ts index 19541c14..8772172f 100644 --- a/src/domain/useCases/cep/getCep.ts +++ b/src/domain/useCases/cep/getCep.ts @@ -1,4 +1,4 @@ -import { CepModel } from '@/domain/models' -import { IRequestInterface } from '@/domain/shared' +import type { CepModel } from '@/domain/models' +import type { IRequestInterface } from '@/domain/shared/types' export interface IGetCep extends IRequestInterface {} diff --git a/src/domain/useCases/property/createProperty.ts b/src/domain/useCases/property/createProperty.ts index f78ab07c..5470912b 100644 --- a/src/domain/useCases/property/createProperty.ts +++ b/src/domain/useCases/property/createProperty.ts @@ -1,5 +1,5 @@ -import { PropertyDetailsModel } from '@/domain/models' -import { IRequestInterface } from '@/domain/shared' +import type { PropertyDetailsModel } from '@/domain/models' +import type { IRequestInterface } from '@/domain/shared/types' export interface ICreateProperty extends IRequestInterface {} diff --git a/src/domain/useCases/property/deleteProperty.ts b/src/domain/useCases/property/deleteProperty.ts index f899a45f..9655e251 100644 --- a/src/domain/useCases/property/deleteProperty.ts +++ b/src/domain/useCases/property/deleteProperty.ts @@ -1,3 +1,3 @@ -import { IRequestInterface } from '@/domain/shared' +import type { IRequestInterface } from '@/domain/shared/types' export interface IDeleteProperty extends IRequestInterface {} diff --git a/src/domain/useCases/property/getProperties.ts b/src/domain/useCases/property/getProperties.ts index 87152db6..464a1e52 100644 --- a/src/domain/useCases/property/getProperties.ts +++ b/src/domain/useCases/property/getProperties.ts @@ -1,5 +1,5 @@ -import { PropertyModel } from '@/domain/models' -import { +import type { PropertyModel } from '@/domain/models' +import type { IRequestInterface, IListParams, IListResponse diff --git a/src/domain/useCases/property/getProperty.ts b/src/domain/useCases/property/getProperty.ts index 570fb01a..7798552c 100644 --- a/src/domain/useCases/property/getProperty.ts +++ b/src/domain/useCases/property/getProperty.ts @@ -1,5 +1,5 @@ -import { PropertyDetailsModel } from '@/domain/models' -import { IRequestInterface } from '@/domain/shared' +import type { PropertyDetailsModel } from '@/domain/models' +import type { IRequestInterface } from '@/domain/shared/types' export interface IGetProperty extends IRequestInterface {} diff --git a/src/domain/useCases/property/updateProperty.ts b/src/domain/useCases/property/updateProperty.ts index a8597be5..1a1565ee 100644 --- a/src/domain/useCases/property/updateProperty.ts +++ b/src/domain/useCases/property/updateProperty.ts @@ -1,5 +1,5 @@ -import { PropertyDetailsModel } from '@/domain/models' -import { IRequestInterface } from '@/domain/shared' +import type { PropertyDetailsModel } from '@/domain/models' +import type { IRequestInterface } from '@/domain/shared/types' export interface IUpdateProperty - extends IRequestInterface {} + extends IRequestInterface<{ id: string } & PropertyDetailsModel, void> {} diff --git a/src/domain/useCases/user/createUser.ts b/src/domain/useCases/user/createUser.ts index 8c561689..9fb85128 100644 --- a/src/domain/useCases/user/createUser.ts +++ b/src/domain/useCases/user/createUser.ts @@ -1,4 +1,4 @@ -import { CreateUserModel } from '@/domain/models' -import { IRequestInterface } from '@/domain/shared' +import type { CreateUserModel } from '@/domain/models/' +import type { IRequestInterface } from '@/domain/shared/types' export interface ICreateUser extends IRequestInterface {} diff --git a/src/domain/useCases/user/getAllUsers.ts b/src/domain/useCases/user/getAllUsers.ts index 0167fbb4..474fcf97 100644 --- a/src/domain/useCases/user/getAllUsers.ts +++ b/src/domain/useCases/user/getAllUsers.ts @@ -1,3 +1,3 @@ -import { IRequestInterface, Option } from '@/domain/shared' +import type { IRequestInterface, Option } from '@/domain/shared/types' export interface IGetAllUsers extends IRequestInterface {} diff --git a/src/domain/useCases/user/loginUser.ts b/src/domain/useCases/user/loginUser.ts index 8e0ac9c2..ef2f48f3 100644 --- a/src/domain/useCases/user/loginUser.ts +++ b/src/domain/useCases/user/loginUser.ts @@ -1,5 +1,5 @@ -import { UserModel } from '@/domain/models' -import { IRequestInterface } from '@/domain/shared' +import type { UserModel } from '@/domain/models' +import type { IRequestInterface } from '@/domain/shared/types' export type LoginUserParams = { email: string From 47d36c8c824edaf95cb796766a74ab1db0e30ce7 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Wed, 24 Jul 2024 11:51:42 -0300 Subject: [PATCH 110/162] feat(domain/shared/types): add nested keyof --- src/domain/shared/types/index.ts | 1 + src/domain/shared/types/nestedKeyof.ts | 5 +++++ 2 files changed, 6 insertions(+) create mode 100644 src/domain/shared/types/nestedKeyof.ts diff --git a/src/domain/shared/types/index.ts b/src/domain/shared/types/index.ts index 5af7ad9a..b835b918 100644 --- a/src/domain/shared/types/index.ts +++ b/src/domain/shared/types/index.ts @@ -1,5 +1,6 @@ export * from './file' export * from './listParams' export * from './listResponse' +export * from './nestedKeyof' export * from './option' export * from './request' diff --git a/src/domain/shared/types/nestedKeyof.ts b/src/domain/shared/types/nestedKeyof.ts new file mode 100644 index 00000000..1bf3b582 --- /dev/null +++ b/src/domain/shared/types/nestedKeyof.ts @@ -0,0 +1,5 @@ +export type NestedKeyOf = { + [Key in keyof ObjectType & (string | number)]: ObjectType[Key] extends object + ? `${Key}` | `${Key}.${NestedKeyOf}` + : `${Key}` +}[keyof ObjectType & (string | number)] From 4c3bbe6cdf097fac55ad89f46a439cd34c20c705 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Wed, 24 Jul 2024 11:52:08 -0300 Subject: [PATCH 111/162] feat(data/useCases/property): use id to update property --- src/data/useCases/property/remoteUpdateProperty.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/useCases/property/remoteUpdateProperty.ts b/src/data/useCases/property/remoteUpdateProperty.ts index 20ef2129..6b675780 100644 --- a/src/data/useCases/property/remoteUpdateProperty.ts +++ b/src/data/useCases/property/remoteUpdateProperty.ts @@ -12,9 +12,9 @@ export class RemoteUpdateProperty implements IUpdateProperty { private readonly httpClient: IHttpClient ) {} - execute: IUpdateProperty['execute'] = async (property) => { + execute: IUpdateProperty['execute'] = async ({ id, ...property }) => { const { statusCode } = await this.httpClient.request({ - url: `${this.url}`, + url: `${this.url}/${id}`, method: 'patch', body: property }) From 69639310366997eec20df06f4510822b4716f77e Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Wed, 24 Jul 2024 11:53:03 -0300 Subject: [PATCH 112/162] feat: add min number validator --- src/main/builders/validationBuilder.ts | 6 +++++ src/validation/validators/index.ts | 1 + .../validators/minNumberValidation.ts | 23 +++++++++++++++++++ 3 files changed, 30 insertions(+) create mode 100644 src/validation/validators/minNumberValidation.ts diff --git a/src/main/builders/validationBuilder.ts b/src/main/builders/validationBuilder.ts index 94c75aad..8ed6e67b 100644 --- a/src/main/builders/validationBuilder.ts +++ b/src/main/builders/validationBuilder.ts @@ -4,6 +4,7 @@ import { CpfValidation, EmailValidation, MinLengthValidation, + MinNumberValidation, PasswordValidation, PhoneValidation, RequiredFieldValidation, @@ -35,6 +36,11 @@ export class ValidationBuilder { return this } + minNumber(min: number): ValidationBuilder { + this.validations.push(new MinNumberValidation(this.fieldName, min)) + return this + } + sameAs(fieldToCompare: T): ValidationBuilder { this.validations.push( new CompareFieldsValidation(this.fieldName, fieldToCompare) diff --git a/src/validation/validators/index.ts b/src/validation/validators/index.ts index eaccd233..23cb8605 100644 --- a/src/validation/validators/index.ts +++ b/src/validation/validators/index.ts @@ -2,6 +2,7 @@ export * from './compareFieldValidation' export * from './cpfValidation' export * from './emailValidation' export * from './minLengthValidation' +export * from './minNumberValidation' export * from './passwordValidation' export * from './phoneValidation' export * from './requiredFieldValidation' diff --git a/src/validation/validators/minNumberValidation.ts b/src/validation/validators/minNumberValidation.ts new file mode 100644 index 00000000..94c2a01d --- /dev/null +++ b/src/validation/validators/minNumberValidation.ts @@ -0,0 +1,23 @@ +import { onlyNumbersMask } from '@/masker' + +import { InvalidFieldError } from '../errors' +import { IFieldValidation } from '../protocols' + +export class MinNumberValidation implements IFieldValidation { + constructor( + readonly field: string, + private readonly minValue: number + ) {} + + validate(input: object): Error | null { + const [, value] = + Object.entries(input).find(([fieldName]) => fieldName === this.field) || + [] + + const onlyNumber = Number(onlyNumbersMask(value)) + + if (onlyNumber >= this.minValue) return null + + return new InvalidFieldError() + } +} From efa8434044a64def2c8121598ab0fc9292e724af Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Wed, 24 Jul 2024 11:53:25 -0300 Subject: [PATCH 113/162] fix: nested object validation --- src/main/composite/validationComposite.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/composite/validationComposite.ts b/src/main/composite/validationComposite.ts index 9f94ab0e..6f7dfcca 100644 --- a/src/main/composite/validationComposite.ts +++ b/src/main/composite/validationComposite.ts @@ -1,5 +1,7 @@ -import { ErrorDef, IValidation, Validate } from '@/presentation/protocols' -import { IFieldValidation } from '@/validation/protocols' +import { flattenObject } from '../utils' + +import type { ErrorDef, IValidation, Validate } from '@/presentation/protocols' +import type { IFieldValidation } from '@/validation/protocols' export class ValidationComposite implements IValidation { private constructor(private readonly validators: IFieldValidation[]) {} @@ -9,17 +11,19 @@ export class ValidationComposite implements IValidation { } validate: Validate = ({ data }) => { - const fields = Object.keys(data) + const flattenedData = flattenObject(data) let errors: ErrorDef = {} - for (const fieldName of fields) { + for (const fieldName of Object.keys(flattenedData)) { const validators = this.validators.filter( (validator) => validator.field === fieldName ) for (const validator of validators) { - const error = validator.validate(data) + const error = validator.validate({ + [fieldName]: flattenedData[fieldName] + }) if (error) { errors = { ...errors, [fieldName]: { message: error.message } } From 5459e8ec0db8d524b61fdd0b9ecea8d0096675f3 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Wed, 24 Jul 2024 11:53:46 -0300 Subject: [PATCH 114/162] feat: add flatten object --- src/main/utils/index.ts | 1 + src/main/utils/object/flattenObject.ts | 27 ++++++++++++++++++++++++++ src/main/utils/object/index.ts | 1 + 3 files changed, 29 insertions(+) create mode 100644 src/main/utils/object/flattenObject.ts create mode 100644 src/main/utils/object/index.ts diff --git a/src/main/utils/index.ts b/src/main/utils/index.ts index 5b8d2c25..368d2079 100644 --- a/src/main/utils/index.ts +++ b/src/main/utils/index.ts @@ -1,4 +1,5 @@ export * from './axios' +export * from './object' export * from './string' export * from './tailwind' export * from './time' diff --git a/src/main/utils/object/flattenObject.ts b/src/main/utils/object/flattenObject.ts new file mode 100644 index 00000000..7d2b7196 --- /dev/null +++ b/src/main/utils/object/flattenObject.ts @@ -0,0 +1,27 @@ +type FlattenedObject = { + [key: string]: any +} + +export const flattenObject = ( + obj: any, + parentKey = '', + res: FlattenedObject = {} +): FlattenedObject => { + for (const key in obj) { + if (Object.hasOwn(obj, key)) { + const propName = parentKey ? `${parentKey}.${key}` : key + + if ( + typeof obj[key] === 'object' && + obj[key] !== null && + !Array.isArray(obj[key]) + ) { + flattenObject(obj[key], propName, res) + } else { + res[propName] = obj[key] + } + } + } + + return res +} diff --git a/src/main/utils/object/index.ts b/src/main/utils/object/index.ts new file mode 100644 index 00000000..43efdd29 --- /dev/null +++ b/src/main/utils/object/index.ts @@ -0,0 +1 @@ +export * from './flattenObject' From 94901305cca2a632b689c4630abf8cfca382f7d7 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Wed, 24 Jul 2024 11:55:49 -0300 Subject: [PATCH 115/162] refactor: remove form field factory --- .../factories/components/formFieldFactory.tsx | 70 ---- src/main/factories/components/index.ts | 1 - src/presentation/pages/login/useInputData.tsx | 74 ---- .../pages/{login => loginPage}/index.tsx | 71 +++- .../useLogin.ts => loginPage/useLoginPage.ts} | 11 +- .../pages/signUp/useInputData.tsx | 230 ------------- .../pages/{signUp => signUpPage}/index.tsx | 23 +- .../pages/{signUp => signUpPage}/types.ts | 4 + .../useSignUpPage.ts} | 2 +- .../signUpPage/useSignUpPageInputData.tsx | 325 ++++++++++++++++++ 10 files changed, 406 insertions(+), 405 deletions(-) delete mode 100644 src/main/factories/components/formFieldFactory.tsx delete mode 100644 src/main/factories/components/index.ts delete mode 100644 src/presentation/pages/login/useInputData.tsx rename src/presentation/pages/{login => loginPage}/index.tsx (50%) rename src/presentation/pages/{login/useLogin.ts => loginPage/useLoginPage.ts} (73%) delete mode 100644 src/presentation/pages/signUp/useInputData.tsx rename src/presentation/pages/{signUp => signUpPage}/index.tsx (78%) rename src/presentation/pages/{signUp => signUpPage}/types.ts (78%) rename src/presentation/pages/{signUp/useSignUp.ts => signUpPage/useSignUpPage.ts} (98%) create mode 100644 src/presentation/pages/signUpPage/useSignUpPageInputData.tsx diff --git a/src/main/factories/components/formFieldFactory.tsx b/src/main/factories/components/formFieldFactory.tsx deleted file mode 100644 index 4faeae17..00000000 --- a/src/main/factories/components/formFieldFactory.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import { - type ControllerFieldState, - type ControllerRenderProps, - type FieldPath, - type FieldValues, - type UseFormStateReturn -} from 'react-hook-form' - -import { Form } from '@/presentation/components/ui' -import { Grouper } from '@/presentation/components/utils' -import { useHookForm } from '@/presentation/hooks/useHookForm' - -type RenderComponentProps< - TFieldValues extends FieldValues, - TName extends FieldPath = FieldPath -> = { - field: ControllerRenderProps - fieldState: ControllerFieldState - formState: UseFormStateReturn -} - -export type ComponentProps = { - name: FieldPath - key?: string - label?: string - renderComponent: ( - props: RenderComponentProps> - ) => React.ReactNode -} - -export type InputDataGrouped = { - key: string - group: ComponentProps[] | (() => React.ReactNode) -} - -type FormFieldFactoryProps = { - form: ReturnType> - inputData: InputDataGrouped[] -} - -export const FormFieldFactory = ({ - form, - inputData -}: FormFieldFactoryProps) => - inputData.map(({ key, group }) => ( - - {typeof group === 'function' - ? group() - : group.map(({ key: groupKey, name, label, renderComponent }) => ( - ( - - {label ? {label} : null} - - {renderComponent({ - field, - fieldState, - formState - })} - - - - )} - /> - ))} - - )) diff --git a/src/main/factories/components/index.ts b/src/main/factories/components/index.ts deleted file mode 100644 index cf37c49f..00000000 --- a/src/main/factories/components/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './formFieldFactory' diff --git a/src/presentation/pages/login/useInputData.tsx b/src/presentation/pages/login/useInputData.tsx deleted file mode 100644 index e275a7c4..00000000 --- a/src/presentation/pages/login/useInputData.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import { useState } from 'react' - -import { Mail, Eye, EyeOff, LockKeyhole } from 'lucide-react' - -import { LoginUserParams } from '@/domain/useCases' -import { InputDataGrouped } from '@/main/factories/components' -import { Input } from '@/presentation/components/ui' - -export const useInputData = () => { - const [viewPassword, setViewPassword] = useState(false) - - const inputData: InputDataGrouped[] = [ - { - key: 'email-group', - group: [ - { - name: 'email', - label: 'Email *', - renderComponent: ({ field, fieldState }) => ( - - ) - } - ] - }, - { - key: 'password-group', - group: [ - { - name: 'password', - label: 'Senha *', - renderComponent: ({ field, fieldState }) => ( - setViewPassword((oldValue) => !oldValue) - } - ]} - isError={!!fieldState.error?.message} - /> - ) - } - ] - } - ] - - return { - inputData - } -} diff --git a/src/presentation/pages/login/index.tsx b/src/presentation/pages/loginPage/index.tsx similarity index 50% rename from src/presentation/pages/login/index.tsx rename to src/presentation/pages/loginPage/index.tsx index b5233fee..377117c6 100644 --- a/src/presentation/pages/login/index.tsx +++ b/src/presentation/pages/loginPage/index.tsx @@ -1,18 +1,14 @@ -import { ChevronRight } from 'lucide-react' +import { ChevronRight, Eye, EyeOff, LockKeyhole, Mail } from 'lucide-react' import { LogoIdr, LogoParana } from '@/assets/imgs' -import { LoginUserParams } from '@/domain/useCases' -import { FormFieldFactory } from '@/main/factories/components' import { PAGE_PATHS } from '@/main/routes/paths' -import { Button, Card, Form, Wave } from '@/presentation/components/ui' +import { Button, Card, Form, Input, Wave } from '@/presentation/components/ui' import { useIdrHistory } from '@/presentation/hooks' -import { useInputData } from './useInputData' -import { useLogin } from './useLogin' +import { useLoginPage } from './useLoginPage' export const LoginPage: React.FC = () => { - const { form, buttonDisabled, handleSubmit } = useLogin() - const { inputData } = useInputData() + const { form, viewPassword, setViewPassword, handleSubmit } = useLoginPage() const { navigate } = useIdrHistory() return ( @@ -37,9 +33,60 @@ export const LoginPage: React.FC = () => {
    - - form={form} - inputData={inputData} + ( + + Email + + + + + + )} + /> + ( + + Senha + + + setViewPassword((oldValue) => !oldValue) + } + ]} + /> + + + + )} /> @@ -47,7 +94,7 @@ export const LoginPage: React.FC = () => { className="w-full" variant="default" type="submit" - disabled={buttonDisabled} + disabled={form.buttonDisabled} > Entrar diff --git a/src/presentation/pages/login/useLogin.ts b/src/presentation/pages/loginPage/useLoginPage.ts similarity index 73% rename from src/presentation/pages/login/useLogin.ts rename to src/presentation/pages/loginPage/useLoginPage.ts index 8092e062..e1d58a1e 100644 --- a/src/presentation/pages/login/useLogin.ts +++ b/src/presentation/pages/loginPage/useLoginPage.ts @@ -1,4 +1,4 @@ -import { useCallback } from 'react' +import { useCallback, useState } from 'react' import { LoginUserParams } from '@/domain/useCases' import { useHookForm } from '@/presentation/hooks/useHookForm' @@ -9,14 +9,16 @@ const INITIAL_FORM_DATA: LoginUserParams = { password: '' } -export const useLogin = () => { +export const useLoginPage = () => { const { handleSignIn } = useAuth() + const [viewPassword, setViewPassword] = useState(false) + const form = useHookForm({ defaultValues: INITIAL_FORM_DATA }) - const { buttonDisabled, handleSubmit: handleSubmitForm } = form + const { handleSubmit: handleSubmitForm } = form const onSubmit = useCallback( async (data: LoginUserParams, event?: React.BaseSyntheticEvent) => { @@ -30,7 +32,8 @@ export const useLogin = () => { return { form, - buttonDisabled, + viewPassword, + setViewPassword, handleSubmit } } diff --git a/src/presentation/pages/signUp/useInputData.tsx b/src/presentation/pages/signUp/useInputData.tsx deleted file mode 100644 index a235c8b5..00000000 --- a/src/presentation/pages/signUp/useInputData.tsx +++ /dev/null @@ -1,230 +0,0 @@ -import { useState } from 'react' - -import { Eye, EyeOff, Mail } from 'lucide-react' - -import { CreateUserModel } from '@/domain/models' -import { InputDataGrouped } from '@/main/factories/components' -import { cepMask, cpfMask, onlyNumbersMask, phoneMask } from '@/masker' -import { Input } from '@/presentation/components/ui' - -import { UseInputDataProps } from './types' - -export const useInputData = ({ - cepLoading, - cepDebounceCallback, - handleOnClearCepDebounce -}: UseInputDataProps) => { - const [viewPassword, setViewPassword] = useState(false) - const [viewConfirmPassword, setViewConfirmPassword] = useState(false) - - const inputDataFirstStep: InputDataGrouped[] = [ - { - key: 'name-email-group', - group: [ - { - name: 'name', - label: 'Nome *', - renderComponent: ({ field }) => ( - - ) - }, - { - name: 'email', - label: 'Email *', - renderComponent: ({ field }) => ( - - ) - } - ] - }, - { - key: 'password-group', - group: [ - { - name: 'password', - label: 'Senha *', - renderComponent: ({ field }) => ( - setViewPassword((oldValue) => !oldValue) - } - ]} - /> - ) - }, - { - name: 'confirmPassword', - label: 'Confirmar Senha *', - renderComponent: ({ field }) => ( - setViewConfirmPassword((oldValue) => !oldValue) - } - ]} - /> - ) - } - ] - }, - { - key: 'cpf-phone-group', - group: [ - { - name: 'cpf', - label: 'CPF *', - renderComponent: ({ field }) => ( - - ) - }, - { - name: 'phone', - label: 'Celular *', - renderComponent: ({ field }) => ( - - ) - } - ] - }, - { - key: 'professionalRegister-graduationYear-group', - group: [ - { - name: 'professionalRegister', - label: 'Registro Profissional *', - renderComponent: ({ field }) => ( - - ) - }, - { - name: 'graduationYear', - label: 'Ano de Graduação *', - renderComponent: ({ field }) => ( - - ) - } - ] - } - ] - - const inputDataSecondStep: InputDataGrouped[] = [ - { - key: 'cep-street-group', - group: [ - { - name: 'cep', - label: 'CEP *', - renderComponent: ({ field }) => ( - - ) - }, - { - name: 'street', - label: 'Rua *', - renderComponent: ({ field }) => ( - - ) - } - ] - }, - { - key: 'city-number-group', - group: [ - { - name: 'city', - label: 'Cidade *', - renderComponent: ({ field }) => ( - - ) - }, - { - name: 'houseNumber', - label: 'Número da casa', - renderComponent: ({ field }) => ( - - ) - } - ] - } - ] - - return { - inputDataFirstStep, - inputDataSecondStep - } -} diff --git a/src/presentation/pages/signUp/index.tsx b/src/presentation/pages/signUpPage/index.tsx similarity index 78% rename from src/presentation/pages/signUp/index.tsx rename to src/presentation/pages/signUpPage/index.tsx index 5b91e9c6..016915cd 100644 --- a/src/presentation/pages/signUp/index.tsx +++ b/src/presentation/pages/signUpPage/index.tsx @@ -1,11 +1,10 @@ import { LogoIdr, LogoParana } from '@/assets/imgs' -import { CreateUserModel } from '@/domain/models' -import { FormFieldFactory } from '@/main/factories/components' import { Button, Card, Wave, Form } from '@/presentation/components/ui' -import { SignUpPageProps } from './types' -import { useInputData } from './useInputData' -import { useSignUp } from './useSignUp' +import { useSignUpPage } from './useSignUpPage' +import { useSignUpPageInputData } from './useSignUpPageInputData' + +import type { SignUpPageProps } from './types' export const SignUpPage: React.FC = ({ createUser, @@ -20,13 +19,14 @@ export const SignUpPage: React.FC = ({ handleSubmit, handleFetchCep, handleOnClearCepDebounce - } = useSignUp({ + } = useSignUpPage({ createUser, getCep, validation }) - const { inputDataFirstStep, inputDataSecondStep } = useInputData({ + const { inputDataFirstStep, inputDataSecondStep } = useSignUpPageInputData({ + control: form.control, cepLoading, cepDebounceCallback: handleFetchCep, handleOnClearCepDebounce @@ -58,12 +58,9 @@ export const SignUpPage: React.FC = ({ - - form={form} - inputData={ - isFirstStep ? inputDataFirstStep : inputDataSecondStep - } - /> + {isFirstStep + ? inputDataFirstStep.map((component) => component) + : inputDataSecondStep.map((component) => component)} + */} + + + {title} + {description} + + + + {buttonCancel.text} + + + {buttonConfirm.text} + + + + +) diff --git a/src/presentation/containers/deleteContainer/index.ts b/src/presentation/containers/deleteContainer/index.ts new file mode 100644 index 00000000..b1841c18 --- /dev/null +++ b/src/presentation/containers/deleteContainer/index.ts @@ -0,0 +1,2 @@ +export { DeleteContainer } from './deleteContainer' +export type { DeleteContainerProps } from './types' diff --git a/src/presentation/containers/deleteContainer/types.ts b/src/presentation/containers/deleteContainer/types.ts new file mode 100644 index 00000000..20695ef8 --- /dev/null +++ b/src/presentation/containers/deleteContainer/types.ts @@ -0,0 +1,14 @@ +export type DeleteContainerProps = { + title: string + description: string + open: boolean + onOpenChange: (isOpen: boolean) => void + buttonConfirm: { + text: string + onClick: () => void + } + buttonCancel: { + text: string + onClick?: () => void + } +} diff --git a/src/presentation/containers/pageContainer/pageContainer.tsx b/src/presentation/containers/pageContainer/pageContainer.tsx index e11d447e..3422d64b 100644 --- a/src/presentation/containers/pageContainer/pageContainer.tsx +++ b/src/presentation/containers/pageContainer/pageContainer.tsx @@ -1,14 +1,9 @@ -import { useMemo } from 'react' - -import { MoreHorizontal, Pencil, Trash2 } from 'lucide-react' - -import { DropdownMenu } from '@/presentation/components/ui' - +import { DeleteContainer } from '../deleteContainer' import { SheetContainer } from '../sheetContainer' import { TableContainer } from '../tableContainer' import type { PageContainerProps } from './types' -import type { ColumnDef, RowData } from '@tanstack/react-table' +import type { RowData } from '@tanstack/react-table' import type { FieldValues } from 'react-hook-form' export const PageContainer = < @@ -18,80 +13,39 @@ export const PageContainer = < header, tableContainer, sheetContainer, - openUpdateSheetContainer -}: PageContainerProps) => { - const { columns } = tableContainer.table - - const columnsWithActions = useMemo[]>( - () => [ - ...columns, - { - id: 'row-actions', - header: '', - cell: ({ row }) => { - const { id } = row.original - - return ( - - - - - - openUpdateSheetContainer(id)} - > - Editar - - - - Excluir - - - - ) - } - } - ], - [columns, openUpdateSheetContainer] - ) - - return ( -
    -
    -
    -
    - - {header.title} - -

    {header.description}

    -
    - - + deleteContainer +}: PageContainerProps) => ( +
    +
    +
    +
    + + {header.title} + +

    {header.description}

    -
    -
    - -
    -
    - ) -} +
    +
    +
    + +
    + + +
    +) diff --git a/src/presentation/containers/pageContainer/types.ts b/src/presentation/containers/pageContainer/types.ts index f0cbb091..c98e6477 100644 --- a/src/presentation/containers/pageContainer/types.ts +++ b/src/presentation/containers/pageContainer/types.ts @@ -1,3 +1,4 @@ +import type { DeleteContainerProps } from '../deleteContainer' import type { SheetContainerProps } from '@/presentation/containers/sheetContainer' import type { TableContainerProps } from '@/presentation/containers/tableContainer/' import type { RowData } from '@tanstack/react-table' @@ -13,5 +14,5 @@ export type PageContainerProps< } sheetContainer: SheetContainerProps tableContainer: TableContainerProps - openUpdateSheetContainer: (id: string) => void + deleteContainer: DeleteContainerProps } diff --git a/src/presentation/containers/sheetContainer/sheetContainer.tsx b/src/presentation/containers/sheetContainer/sheetContainer.tsx index 28b25f09..ac3a8fbe 100644 --- a/src/presentation/containers/sheetContainer/sheetContainer.tsx +++ b/src/presentation/containers/sheetContainer/sheetContainer.tsx @@ -42,7 +42,7 @@ export const SheetContainer = ({ {!loading && ( - {footerButtons.map(({ key, component, isCloser }) => { + {footerButtons.map(({ key, component, isCloser = false }) => { if (isCloser) { return ( diff --git a/src/presentation/containers/sheetContainer/types.ts b/src/presentation/containers/sheetContainer/types.ts index ad3f5c00..610e36a8 100644 --- a/src/presentation/containers/sheetContainer/types.ts +++ b/src/presentation/containers/sheetContainer/types.ts @@ -6,8 +6,8 @@ import type { FieldValues } from 'react-hook-form' type FooterButton = { key: string - isCloser: boolean component: React.ReactNode + isCloser?: boolean } export type SheetContainerProps = { @@ -20,5 +20,5 @@ export type SheetContainerProps = { open: boolean onOpenChange: (open: boolean) => void renderData: () => ReactNode - handleSubmit: () => Promise + handleSubmit: () => void } From a7ea2b5014c6ab14c477b8fb60f5e9ae0331ea8e Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Wed, 24 Jul 2024 11:58:19 -0300 Subject: [PATCH 117/162] feat: wip add property page --- .../factories/pages/propertyPageFactory.tsx | 20 +- .../validations/propertyValidationFactory.ts | 47 +++ src/presentation/pages/index.ts | 5 +- src/presentation/pages/property/index.tsx | 61 ---- src/presentation/pages/property/types.ts | 5 - .../pages/property/useProperty.tsx | 105 ------- src/presentation/pages/propertyPage/index.tsx | 153 ++++++++++ .../tabs/useGeneralTabInputData.tsx | 217 ++++++++++++++ src/presentation/pages/propertyPage/types.ts | 17 ++ .../pages/propertyPage/usePropertyPage.tsx | 283 ++++++++++++++++++ .../propertyPage/usePropertyPageInputData.tsx | 214 +++++++++++++ 11 files changed, 951 insertions(+), 176 deletions(-) create mode 100644 src/main/factories/validations/propertyValidationFactory.ts delete mode 100644 src/presentation/pages/property/index.tsx delete mode 100644 src/presentation/pages/property/types.ts delete mode 100644 src/presentation/pages/property/useProperty.tsx create mode 100644 src/presentation/pages/propertyPage/index.tsx create mode 100644 src/presentation/pages/propertyPage/tabs/useGeneralTabInputData.tsx create mode 100644 src/presentation/pages/propertyPage/types.ts create mode 100644 src/presentation/pages/propertyPage/usePropertyPage.tsx create mode 100644 src/presentation/pages/propertyPage/usePropertyPageInputData.tsx diff --git a/src/main/factories/pages/propertyPageFactory.tsx b/src/main/factories/pages/propertyPageFactory.tsx index 36d84436..5c5076f6 100644 --- a/src/main/factories/pages/propertyPageFactory.tsx +++ b/src/main/factories/pages/propertyPageFactory.tsx @@ -1,7 +1,21 @@ -import { PropertyPage } from '@/presentation/pages/property' +import { PropertyPage } from '@/presentation/pages/propertyPage' -import { makeRemoteGetProperties } from '../useCases/property' +import { + makeRemoteCreateProperty, + makeRemoteDeleteProperty, + makeRemoteGetProperties, + makeRemoteGetProperty, + makeRemoteUpdateProperty +} from '../useCases/property' +import { makePropertyValidation } from '../validations/propertyValidationFactory' export const MakePropertyPage: React.FC = () => ( - + ) diff --git a/src/main/factories/validations/propertyValidationFactory.ts b/src/main/factories/validations/propertyValidationFactory.ts new file mode 100644 index 00000000..1361bdac --- /dev/null +++ b/src/main/factories/validations/propertyValidationFactory.ts @@ -0,0 +1,47 @@ +import { ValidationBuilder } from '@/main/builders' +import { ValidationComposite } from '@/main/composite' + +import type { PropertyDetailsModel } from '@/domain/models' +import type { NestedKeyOf } from '@/domain/shared/types' + +export const makePropertyValidation = () => + ValidationComposite.build([ + ...ValidationBuilder.field>( + 'general.name' + ) + .required() + .build(), + + ...ValidationBuilder.field>( + 'general.city' + ) + .required() + .build(), + + ...ValidationBuilder.field>( + 'general.producer' + ) + .required() + .build(), + + ...ValidationBuilder.field>( + 'general.nakedAveragePricePerHectare' + ) + .required() + .minNumber(0.01) + .build(), + + ...ValidationBuilder.field>( + 'general.leaseAveragePricePerHectare' + ) + .required() + .minNumber(0.01) + .build(), + + ...ValidationBuilder.field>( + 'general.responsibleTechnicians' + ) + .required() + .min(1) + .build() + ]) diff --git a/src/presentation/pages/index.ts b/src/presentation/pages/index.ts index 615738a5..6ad4bf85 100644 --- a/src/presentation/pages/index.ts +++ b/src/presentation/pages/index.ts @@ -1,2 +1,3 @@ -export * from './login' -export * from './signUp' +export * from './loginPage' +export * from './propertyPage' +export * from './signUpPage' diff --git a/src/presentation/pages/property/index.tsx b/src/presentation/pages/property/index.tsx deleted file mode 100644 index ae0e502a..00000000 --- a/src/presentation/pages/property/index.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import type { PropertyDetailsModel, PropertyModel } from '@/domain/models' -import { PageContainer } from '@/presentation/containers' - -import type { PropertyPageProps } from './types' -import { usePropertyPage } from './useProperty' - -export const PropertyPage: React.FC = ({ - getProperties -}) => { - const { - columns, - isPropertiesLoading, - properties, - handleGetProperties, - page, - setPage, - filters, - setFilters, - sort, - setSort - } = usePropertyPage({ - getProperties - }) - - return ( - - header={{ - title: 'Propriedades', - description: 'Gerenciamento das propriedades dos produtores' - }} - tableContainer={{ - inputSearch: { - value: filters.name, - onChange: ({ target: { value } }) => { - setFilters((prevState) => ({ - ...prevState, - name: value - })) - }, - placeholder: 'Procurar propriedades', - debounce: 1000, - debounceCallback: handleGetProperties - }, - table: { - columns, - totalPages: properties.totalPages, - data: properties.resources, - pagination: { - currentPage: page, - onPageChange: setPage - }, - sorting: { - currentSorting: sort, - onSorting: setSort - }, - loading: isPropertiesLoading - } - }} - /> - ) -} diff --git a/src/presentation/pages/property/types.ts b/src/presentation/pages/property/types.ts deleted file mode 100644 index 8baf2c60..00000000 --- a/src/presentation/pages/property/types.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { IGetProperties } from '@/domain/useCases' - -export type PropertyPageProps = { - getProperties: IGetProperties -} diff --git a/src/presentation/pages/property/useProperty.tsx b/src/presentation/pages/property/useProperty.tsx deleted file mode 100644 index d8672b09..00000000 --- a/src/presentation/pages/property/useProperty.tsx +++ /dev/null @@ -1,105 +0,0 @@ -import { useEffect, useMemo, useState } from 'react' - -import { useQuery } from '@tanstack/react-query' -import type { ColumnDef } from '@tanstack/react-table' -import { MoreHorizontal, Pencil, Trash2 } from 'lucide-react' -import toast from 'react-hot-toast' - -import type { PropertyModel } from '@/domain/models' -import { DropdownMenu } from '@/presentation/components/ui' - -import type { PropertyPageProps } from './types' -import type { Filters, Sort } from '@/domain/shared/types' - -export const usePropertyPage = ({ getProperties }: PropertyPageProps) => { - const [filters, setFilters] = useState>>( - { - name: '' - } - ) - const [page, setPage] = useState(1) - const [sort, setSort] = useState>({ - direction: 'asc', - field: 'name' - }) - - const { - data: properties, - isError: isPropertiesError, - isLoading: isPropertiesLoading, - refetch: handleGetProperties - } = useQuery({ - queryKey: ['properties', { ...filters }], - queryFn: () => - getProperties.execute({ - pagination: { page }, - sort - }), - initialData: { - resources: [], - totalPages: 0 - } - }) - - const columns = useMemo[]>( - () => [ - { - accessorKey: 'producer', - header: 'Produtor' - }, - { - accessorKey: 'name', - header: 'Propriedade' - }, - { - accessorKey: 'county', - header: 'Município', - accessorFn: ({ county }) => `${county.city} - ${county.state}` - }, - { - id: 'row-actions', - header: '', - cell: ({ row }) => { - const { id } = row.original - - return ( - - - - - - - Editar - - - - Excluir - - - - ) - } - } - ], - [] - ) - - useEffect(() => { - if (isPropertiesError) { - toast('Não foi possível listar as propriedades') - } - }, [isPropertiesError]) - - return { - columns, - isPropertiesLoading, - properties, - handleGetProperties, - page, - setPage, - sort, - setSort, - filters, - setFilters - } -} diff --git a/src/presentation/pages/propertyPage/index.tsx b/src/presentation/pages/propertyPage/index.tsx new file mode 100644 index 00000000..9489c00c --- /dev/null +++ b/src/presentation/pages/propertyPage/index.tsx @@ -0,0 +1,153 @@ +import { Button, Tabs } from '@/presentation/components/ui' +import { PageContainer } from '@/presentation/containers' + +import { usePropertyPage } from './usePropertyPage' +import { usePropertyPageInputData } from './usePropertyPageInputData' + +import type { PropertyPageProps } from './types' +import type { PropertyDetailsModel, PropertyModel } from '@/domain/models' + +export const PropertyPage: React.FC = ({ + createProperty, + updateProperty, + deleteProperty, + getProperties, + getProperty, + validation +}) => { + const { + isOpenSheet, + setIsOpenSheet, + isOpenDelete, + setIsOpenDelete, + activeTab, + setActiveTab, + form, + propertyToDelete, + propertyIdToUpdate, + propertyToUpdate, + columns, + isPropertyDetailsLoading, + isPropertiesLoading, + properties, + totalPages, + page, + setPage, + sort, + setSort, + filters, + setFilters, + handleSubmit, + handleDeleteProperty + } = usePropertyPage({ + createProperty, + updateProperty, + deleteProperty, + getProperties, + getProperty, + validation + }) + + const { generalInputData } = usePropertyPageInputData({ + form + }) + + return ( + + header={{ + title: 'Propriedades', + description: 'Gerenciamento das propriedades dos produtores' + }} + deleteContainer={{ + open: isOpenDelete, + onOpenChange: setIsOpenDelete, + title: `Deseja remover a propriedade ${propertyToDelete?.name}`, + description: 'Não será possível desfazer essa ação!', + buttonCancel: { + text: 'Cancelar' + }, + buttonConfirm: { + text: 'Remover', + onClick: handleDeleteProperty + } + }} + sheetContainer={{ + buttonAddText: 'Adicionar Propriedade', + title: propertyIdToUpdate + ? `Atualizar Propriedade ${propertyToUpdate?.name}` + : 'Nova Propriedade', + description: `Preencha o formulário para ${propertyIdToUpdate ? 'atualizar a' : 'criar uma nova'} propriedade`, + form, + handleSubmit, + open: isOpenSheet, + onOpenChange: setIsOpenSheet, + renderData: () => ( + + + setActiveTab('general')} + > + Dados Gerais + + setActiveTab('collaborators')} + > + Colaboradores + + setActiveTab('totalArea')} + > + Área Total + + setActiveTab('localization')} + > + Localização + + + + {generalInputData.map((component) => component)} + + + ), + loading: form.formState.isLoading || isPropertyDetailsLoading, + footerButtons: [ + { + key: 'save', + component: + } + ] + }} + tableContainer={{ + inputSearch: { + value: filters.name, + onChange: ({ target: { value } }) => { + setFilters((prevState) => ({ + ...prevState, + name: value + })) + }, + placeholder: 'Procurar propriedades' + }, + table: { + columns, + totalPages, + data: properties, + pagination: { + currentPage: page, + onPageChange: setPage + }, + sorting: { + currentSorting: sort, + onSorting: setSort + }, + loading: isPropertiesLoading + } + }} + /> + ) +} diff --git a/src/presentation/pages/propertyPage/tabs/useGeneralTabInputData.tsx b/src/presentation/pages/propertyPage/tabs/useGeneralTabInputData.tsx new file mode 100644 index 00000000..4b7b5e27 --- /dev/null +++ b/src/presentation/pages/propertyPage/tabs/useGeneralTabInputData.tsx @@ -0,0 +1,217 @@ +import { useMemo, useState } from 'react' + +import { Plus } from 'lucide-react' +import toast from 'react-hot-toast' + +import { moneyMask } from '@/masker' +import { Input, Form, Combobox, Button } from '@/presentation/components/ui' +import { useHookForm } from '@/presentation/hooks' + +import type { PropertyDetailsModel } from '@/domain/models' + +export const useGeneralTabInputData = ({ + form +}: { + form: ReturnType> +}) => { + const { control, getValues, setValue } = form + + const [search, setSearch] = useState('') + + const inputData = useMemo( + () => [ + { + const { error } = fieldState + + return ( + + Nome da Propriedade + + + + + + ) + }} + />, + { + const { error } = fieldState + + return ( + + Município + + + + + + ) + }} + />, + { + const { error } = fieldState + + return ( + + Produtor + + + + + + ) + }} + />, + { + const { error } = fieldState + + return ( + + Preço médio da terra nua (R$/ha) + + + + + + ) + }} + />, + { + const { error } = fieldState + + return ( + + + Valor médio de arrendamento para pecuária na região (R$/ha/ano) + + + + + + + ) + }} + />, + { + const { value: technicians } = field + const nonEmptyTechnicians = technicians.filter( + (technician) => technician.value + ) + const { error } = fieldState + + return ( + + Técnicos responsáveis + +
    + {technicians.map((technician) => ( + setSearch(value)} + handleSelect={(selectedTechnician) => + setValue('general.responsibleTechnicians', [ + ...nonEmptyTechnicians, + selectedTechnician + ]) + } + isError={!!error?.message} + /> + ))} + + + + +
    +
    +
    + ) + }} + /> + ], + [control, getValues, search, setValue] + ) + + return { + inputData + } +} diff --git a/src/presentation/pages/propertyPage/types.ts b/src/presentation/pages/propertyPage/types.ts new file mode 100644 index 00000000..2031340e --- /dev/null +++ b/src/presentation/pages/propertyPage/types.ts @@ -0,0 +1,17 @@ +import type { + ICreateProperty, + IDeleteProperty, + IGetProperties, + IGetProperty, + IUpdateProperty +} from '@/domain/useCases' +import type { IValidation } from '@/presentation/protocols' + +export type PropertyPageProps = { + createProperty: ICreateProperty + updateProperty: IUpdateProperty + deleteProperty: IDeleteProperty + getProperties: IGetProperties + getProperty: IGetProperty + validation: IValidation +} diff --git a/src/presentation/pages/propertyPage/usePropertyPage.tsx b/src/presentation/pages/propertyPage/usePropertyPage.tsx new file mode 100644 index 00000000..5c68d4fa --- /dev/null +++ b/src/presentation/pages/propertyPage/usePropertyPage.tsx @@ -0,0 +1,283 @@ +import { useEffect, useMemo, useState } from 'react' + +import { useMutation, useQuery } from '@tanstack/react-query' +import { MoreHorizontal, Pencil, Trash2 } from 'lucide-react' +import toast from 'react-hot-toast' + +import { DropdownMenu } from '@/presentation/components/ui' +import { useDebounce, useHookForm } from '@/presentation/hooks' + +import type { PropertyPageProps } from './types' +import type { PropertyDetailsModel, PropertyModel } from '@/domain/models' +import type { Filters, Sort } from '@/domain/shared/types' +import type { ColumnDef } from '@tanstack/react-table' + +const PROPERTY_DEFAULT_VALUES: PropertyDetailsModel = { + general: { + name: '', + producer: '', + state: '', + city: '', + nakedAveragePricePerHectare: '', + leaseAveragePricePerHectare: '', + responsibleTechnicians: [] + }, + collaborators: [], + totalArea: { + dairyCattleFarming: '', + perennialPasture: '', + summerPlowing: '', + winterPlowing: '' + }, + localization: { + latitude: '', + longitude: '', + images: [] + } +} + +export const usePropertyPage = ({ + createProperty, + updateProperty, + deleteProperty, + getProperties, + getProperty, + validation +}: PropertyPageProps) => { + const [isOpenSheet, setIsOpenSheet] = useState(false) + const [isOpenDelete, setIsOpenDelete] = useState(false) + const [activeTab, setActiveTab] = useState< + 'general' | 'collaborators' | 'totalArea' | 'localization' + >('general') + const [filters, setFilters] = useState>>( + { + name: '' + } + ) + const [page, setPage] = useState(1) + const [sort, setSort] = useState | undefined>() + const [propertyIdToUpdate, setPropertyIdToUpdate] = useState( + null + ) + const [propertyIdToDelete, setPropertyIdToDelete] = useState( + null + ) + + const debouncedFilters = useDebounce({ value: filters, delayInMs: 1000 }) + + const form = useHookForm({ + defaultValues: PROPERTY_DEFAULT_VALUES, + schemaResolver: (data) => validation.validate({ data }) + }) + const { getValues, reset } = form + + const { + data: propertyDetails, + isError: isPropertyDetailsError, + isLoading: isPropertyDetailsLoading, + refetch: handleGetPropertyDetails + } = useQuery({ + queryKey: ['property', propertyIdToUpdate], + queryFn: async () => { + if (!propertyIdToUpdate) return undefined + return getProperty.execute(propertyIdToUpdate) + }, + enabled: false + }) + + const { + data: propertiesData, + isError: isPropertiesError, + isLoading: isPropertiesLoading + } = useQuery({ + queryKey: ['properties', { page, ...debouncedFilters, ...sort }], + queryFn: () => + getProperties.execute({ + pagination: { page }, + sort, + filters: debouncedFilters + }) + }) + + const { mutate: handleSubmit } = useMutation({ + mutationFn: () => { + const values = getValues() + + return propertyIdToUpdate + ? updateProperty.execute({ + id: propertyIdToUpdate, + ...values + }) + : createProperty.execute(values) + }, + onSuccess: () => { + toast.success( + `Propriedade ${propertyIdToUpdate ? 'atualizada' : 'criada'} com sucesso` + ) + setPropertyIdToUpdate(null) + setIsOpenSheet(false) + }, + onError: () => { + toast.error( + `Não foi possível ${propertyIdToUpdate ? 'atualizar' : 'criar'} a propriedade` + ) + } + }) + + const { mutate: handleDeleteProperty } = useMutation({ + mutationFn: () => { + if (!propertyIdToDelete) { + return Promise.reject(new Error('Not found Property')) + } + + return deleteProperty.execute(propertyIdToDelete) + }, + onSuccess: () => { + toast.success('Propriedade removida com sucesso') + setPropertyIdToDelete(null) + setIsOpenDelete(false) + }, + onError: () => { + toast.error('Não foi possível remover essa propriedade') + setPropertyIdToDelete(null) + setIsOpenDelete(false) + } + }) + + const { properties, totalPages } = useMemo( + () => ({ + properties: propertiesData ? propertiesData.resources : [], + totalPages: propertiesData ? propertiesData.totalPages : 1 + }), + [propertiesData] + ) + + const propertyToUpdate = useMemo( + () => properties.find((property) => property.id === propertyIdToUpdate), + [properties, propertyIdToUpdate] + ) + + const propertyToDelete = useMemo( + () => properties.find((property) => property.id === propertyIdToDelete), + [properties, propertyIdToDelete] + ) + + const columns = useMemo[]>( + () => [ + { + accessorKey: 'producer', + header: 'Produtor' + }, + { + accessorKey: 'name', + header: 'Propriedade' + }, + { + accessorKey: 'county', + header: 'Município', + accessorFn: ({ county }) => `${county.city} - ${county.state}` + }, + { + id: 'row-actions', + header: '', + cell: ({ row }) => { + const { id } = row.original + + return ( + + + + + + setPropertyIdToUpdate(id)} + > + Editar + + + setPropertyIdToDelete(id)} + > + Excluir + + + + ) + } + } + ], + [] + ) + + useEffect(() => { + if (propertyIdToUpdate) { + setIsOpenSheet(true) + handleGetPropertyDetails() + } + }, [handleGetPropertyDetails, propertyIdToUpdate]) + + useEffect(() => { + if (propertyIdToDelete) { + setIsOpenDelete(true) + } + }, [propertyIdToDelete]) + + useEffect(() => { + reset(propertyDetails) + }, [propertyDetails, reset]) + + useEffect(() => { + if (!isOpenSheet) { + reset(PROPERTY_DEFAULT_VALUES) + setPropertyIdToUpdate(null) + } + }, [isOpenSheet, reset]) + + useEffect(() => { + if (!isOpenDelete) { + setPropertyIdToDelete(null) + } + }, [isOpenDelete]) + + useEffect(() => { + if (isPropertiesError) { + toast.error('Não foi possível listar as propriedades') + } + }, [isPropertiesError]) + + useEffect(() => { + if (isPropertyDetailsError) { + setPropertyIdToUpdate(null) + setIsOpenSheet(false) + toast.error('Não foi possível buscar dados dessa propriedade') + } + }, [isPropertyDetailsError]) + + return { + isOpenSheet, + setIsOpenSheet, + isOpenDelete, + setIsOpenDelete, + activeTab, + setActiveTab, + form, + propertyToDelete, + propertyToUpdate, + propertyIdToUpdate, + columns, + isPropertyDetailsLoading, + isPropertiesLoading, + properties, + totalPages, + page, + setPage, + sort, + setSort, + filters, + setFilters, + handleSubmit, + handleDeleteProperty + } +} diff --git a/src/presentation/pages/propertyPage/usePropertyPageInputData.tsx b/src/presentation/pages/propertyPage/usePropertyPageInputData.tsx new file mode 100644 index 00000000..abbeebc6 --- /dev/null +++ b/src/presentation/pages/propertyPage/usePropertyPageInputData.tsx @@ -0,0 +1,214 @@ +import { useState } from 'react' + +import { Plus } from 'lucide-react' +import toast from 'react-hot-toast' + +import { moneyMask } from '@/masker' +import { Input, Form, Combobox, Button } from '@/presentation/components/ui' +import { useHookForm } from '@/presentation/hooks' + +import type { PropertyDetailsModel } from '@/domain/models' + +export const usePropertyPageInputData = ({ + form +}: { + form: ReturnType> +}) => { + const { control, getValues, setValue } = form + + const [search, setSearch] = useState('') + + const generalInputData = [ + { + const { error } = fieldState + + return ( + + Nome da Propriedade + + + + + + ) + }} + />, + { + const { error } = fieldState + + return ( + + Município + + + + + + ) + }} + />, + { + const { error } = fieldState + + return ( + + Produtor + + + + + + ) + }} + />, + { + const { error } = fieldState + + return ( + + Preço médio da terra nua (R$/ha) + + + + + + ) + }} + />, + { + const { error } = fieldState + + return ( + + + Valor médio de arrendamento para pecuária na região (R$/ha/ano) + + + + + + + ) + }} + />, + { + const { value: technicians } = field + const nonEmptyTechnicians = technicians.filter( + (technician) => technician.value + ) + const { error } = fieldState + + return ( + + Técnicos responsáveis + +
    + {technicians.map((technician) => ( + setSearch(value)} + handleSelect={(selectedTechnician) => + setValue('general.responsibleTechnicians', [ + ...nonEmptyTechnicians, + selectedTechnician + ]) + } + isError={!!error?.message} + /> + ))} + + + + +
    +
    +
    + ) + }} + /> + ] + + return { + generalInputData + } +} From 26cf33666b335439c7361bde13da0bf66047caa5 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Wed, 24 Jul 2024 11:59:03 -0300 Subject: [PATCH 118/162] fix(hooks): imports --- src/presentation/hooks/useHookForm.ts | 30 ++++++++++++++++----------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/presentation/hooks/useHookForm.ts b/src/presentation/hooks/useHookForm.ts index 0a32a83f..25fa9892 100644 --- a/src/presentation/hooks/useHookForm.ts +++ b/src/presentation/hooks/useHookForm.ts @@ -1,10 +1,12 @@ +import { useCallback } from 'react' + import { - DefaultValues, - FieldValues, - Resolver, - SubmitErrorHandler, - SubmitHandler, - UseFormProps, + type DefaultValues, + type FieldValues, + type Resolver, + type SubmitErrorHandler, + type SubmitHandler, + type UseFormProps, useForm } from 'react-hook-form' import toast from 'react-hot-toast' @@ -12,6 +14,7 @@ import toast from 'react-hot-toast' export type UseHookFormProps = { values?: UseFormProps['values'] defaultValues?: DefaultValues + schemaResolver?: Resolver } @@ -34,13 +37,16 @@ export const useHookForm = ({ const buttonDisabled = isSubmitting || isValidating - const onSubmit = (successCallback: SubmitHandler) => { - const errorCallback: SubmitErrorHandler = () => { - toast.error('Preencha os campos obrigatórios') - } + const onSubmit = useCallback( + (successCallback: SubmitHandler) => { + const errorCallback: SubmitErrorHandler = () => { + toast.error('Preencha os campos obrigatórios') + } - return handleSubmit(successCallback, errorCallback) - } + return handleSubmit(successCallback, errorCallback) + }, + [handleSubmit] + ) return { ...form, From 466296a19323d1263b80cb9db1c37c59913ae972 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Wed, 24 Jul 2024 11:59:33 -0300 Subject: [PATCH 119/162] refactor: use debouce --- src/presentation/hooks/useDebounce.ts | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/src/presentation/hooks/useDebounce.ts b/src/presentation/hooks/useDebounce.ts index ed912a98..19274e5d 100644 --- a/src/presentation/hooks/useDebounce.ts +++ b/src/presentation/hooks/useDebounce.ts @@ -1,23 +1,18 @@ -import { DependencyList, useEffect } from 'react' +import { useEffect, useState } from 'react' import { useTimeoutFn } from './useTimeout' -export type UseDebounceReturn = { - isReady: () => boolean | null - clear: () => void +type Props = { + value: T + delayInMs?: number } -export type UseDebounce = (params: { - fn: () => void - ms: number - deps: DependencyList -}) => UseDebounceReturn +export const useDebounce = ({ value, delayInMs = 500 }: Props) => { + const [debouncedValue, setDebouncedValue] = useState(value) -export const useDebounce: UseDebounce = ({ fn, ms = 0, deps = [] }) => { - const { isReady, clear, set } = useTimeoutFn(fn, ms) + const { set } = useTimeoutFn(() => setDebouncedValue(value), delayInMs) - // eslint-disable-next-line react-hooks/exhaustive-deps - useEffect(set, deps) + useEffect(set, [value, delayInMs, set]) - return { isReady, clear } + return debouncedValue } From 76964c83dc2399c5ca2f3c9c66b2739f25fb1701 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Wed, 24 Jul 2024 11:59:56 -0300 Subject: [PATCH 120/162] fix: money mask to clear money symbol --- src/masker/masks/moneyMask.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/masker/masks/moneyMask.ts b/src/masker/masks/moneyMask.ts index fc073067..3cc1173d 100644 --- a/src/masker/masks/moneyMask.ts +++ b/src/masker/masks/moneyMask.ts @@ -1,3 +1,7 @@ import { floatMask } from './floatMask' +import { onlyNumbersMask } from './onlyNumbers' -export const moneyMask = (value: string) => `R$ ${floatMask(value)}` +export const moneyMask = (value: string) => { + const valueOnlyNumbers = onlyNumbersMask(value) + return valueOnlyNumbers ? `R$ ${floatMask(valueOnlyNumbers)}` : '' +} From 71a379521d4c3fe3fd88753279b8f2d8a787e720 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Wed, 24 Jul 2024 12:00:20 -0300 Subject: [PATCH 121/162] feat: add alert dialog --- .../components/ui/alertDialog/action.tsx | 24 ++++++++++++++ .../components/ui/alertDialog/cancel.tsx | 28 ++++++++++++++++ .../components/ui/alertDialog/content.tsx | 33 +++++++++++++++++++ .../components/ui/alertDialog/description.tsx | 22 +++++++++++++ .../components/ui/alertDialog/footer.tsx | 18 ++++++++++ .../components/ui/alertDialog/header.tsx | 18 ++++++++++ .../ui/alertDialog/index.stories.tsx | 32 ++++++++++++++++++ .../components/ui/alertDialog/index.ts | 24 ++++++++++++++ .../components/ui/alertDialog/overlay.tsx | 25 ++++++++++++++ .../components/ui/alertDialog/title.tsx | 22 +++++++++++++ src/presentation/components/ui/index.ts | 1 + 11 files changed, 247 insertions(+) create mode 100644 src/presentation/components/ui/alertDialog/action.tsx create mode 100644 src/presentation/components/ui/alertDialog/cancel.tsx create mode 100644 src/presentation/components/ui/alertDialog/content.tsx create mode 100644 src/presentation/components/ui/alertDialog/description.tsx create mode 100644 src/presentation/components/ui/alertDialog/footer.tsx create mode 100644 src/presentation/components/ui/alertDialog/header.tsx create mode 100644 src/presentation/components/ui/alertDialog/index.stories.tsx create mode 100644 src/presentation/components/ui/alertDialog/index.ts create mode 100644 src/presentation/components/ui/alertDialog/overlay.tsx create mode 100644 src/presentation/components/ui/alertDialog/title.tsx diff --git a/src/presentation/components/ui/alertDialog/action.tsx b/src/presentation/components/ui/alertDialog/action.tsx new file mode 100644 index 00000000..f6c98605 --- /dev/null +++ b/src/presentation/components/ui/alertDialog/action.tsx @@ -0,0 +1,24 @@ +import { + forwardRef, + type ElementRef, + type ComponentPropsWithoutRef +} from 'react' + +import { Action as ActionPrimitive } from '@radix-ui/react-alert-dialog' + +import { cn } from '@/main/utils' + +import { buttonVariants } from '../button' + +export const Action = forwardRef< + ElementRef, + ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +Action.displayName = ActionPrimitive.displayName diff --git a/src/presentation/components/ui/alertDialog/cancel.tsx b/src/presentation/components/ui/alertDialog/cancel.tsx new file mode 100644 index 00000000..9d44c2b4 --- /dev/null +++ b/src/presentation/components/ui/alertDialog/cancel.tsx @@ -0,0 +1,28 @@ +import { + forwardRef, + type ElementRef, + type ComponentPropsWithoutRef +} from 'react' + +import { Cancel as CancelPrimitive } from '@radix-ui/react-alert-dialog' + +import { cn } from '@/main/utils' + +import { buttonVariants } from '../button' + +export const Cancel = forwardRef< + ElementRef, + ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +Cancel.displayName = CancelPrimitive.displayName diff --git a/src/presentation/components/ui/alertDialog/content.tsx b/src/presentation/components/ui/alertDialog/content.tsx new file mode 100644 index 00000000..c05078e3 --- /dev/null +++ b/src/presentation/components/ui/alertDialog/content.tsx @@ -0,0 +1,33 @@ +import { + forwardRef, + type ComponentPropsWithoutRef, + type ElementRef +} from 'react' + +import { + Content as ContentPrimitive, + Portal as PortalPrimitive +} from '@radix-ui/react-alert-dialog' + +import { cn } from '@/main/utils' + +import { Overlay } from './overlay' + +export const Content = forwardRef< + ElementRef, + ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + + +)) + +Content.displayName = ContentPrimitive.displayName diff --git a/src/presentation/components/ui/alertDialog/description.tsx b/src/presentation/components/ui/alertDialog/description.tsx new file mode 100644 index 00000000..246fd746 --- /dev/null +++ b/src/presentation/components/ui/alertDialog/description.tsx @@ -0,0 +1,22 @@ +import { + forwardRef, + type ElementRef, + type ComponentPropsWithoutRef +} from 'react' + +import { Description as DescriptionPrimitive } from '@radix-ui/react-alert-dialog' + +import { cn } from '@/main/utils' + +export const Description = forwardRef< + ElementRef, + ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +Description.displayName = DescriptionPrimitive.displayName diff --git a/src/presentation/components/ui/alertDialog/footer.tsx b/src/presentation/components/ui/alertDialog/footer.tsx new file mode 100644 index 00000000..434d14a4 --- /dev/null +++ b/src/presentation/components/ui/alertDialog/footer.tsx @@ -0,0 +1,18 @@ +import { type HTMLAttributes } from 'react' + +import { cn } from '@/main/utils' + +export const Footer = ({ + className, + ...props +}: HTMLAttributes) => ( +
    +) + +Footer.displayName = 'AlertDialogFooter' diff --git a/src/presentation/components/ui/alertDialog/header.tsx b/src/presentation/components/ui/alertDialog/header.tsx new file mode 100644 index 00000000..a8c7d1ab --- /dev/null +++ b/src/presentation/components/ui/alertDialog/header.tsx @@ -0,0 +1,18 @@ +import { type HTMLAttributes } from 'react' + +import { cn } from '@/main/utils' + +export const Header = ({ + className, + ...props +}: HTMLAttributes) => ( +
    +) + +Header.displayName = 'AlertDialogHeader' diff --git a/src/presentation/components/ui/alertDialog/index.stories.tsx b/src/presentation/components/ui/alertDialog/index.stories.tsx new file mode 100644 index 00000000..1d4ffd28 --- /dev/null +++ b/src/presentation/components/ui/alertDialog/index.stories.tsx @@ -0,0 +1,32 @@ +import { Meta, StoryFn } from '@storybook/react/' + +import { Button } from '../button' + +import { AlertDialog } from '.' + +export default { + title: 'Components/UI/Alert Dialog' +} as Meta + +const Template: StoryFn = () => ( + + + + + + + Are you absolutely sure? + + This action cannot be undone. This will permanently delete your + account and remove your data from our servers. + + + + Cancel + Continue + + + +) + +export const Default = Template.bind({}) diff --git a/src/presentation/components/ui/alertDialog/index.ts b/src/presentation/components/ui/alertDialog/index.ts new file mode 100644 index 00000000..498579aa --- /dev/null +++ b/src/presentation/components/ui/alertDialog/index.ts @@ -0,0 +1,24 @@ +import { Root, Trigger, Portal } from '@radix-ui/react-alert-dialog' + +import { Action } from './action' +import { Cancel } from './cancel' +import { Content } from './content' +import { Description } from './description' +import { Footer } from './footer' +import { Header } from './header' +import { Overlay } from './overlay' +import { Title } from './title' + +export const AlertDialog = { + Root, + Trigger, + Portal, + Action, + Cancel, + Content, + Description, + Footer, + Header, + Overlay, + Title +} diff --git a/src/presentation/components/ui/alertDialog/overlay.tsx b/src/presentation/components/ui/alertDialog/overlay.tsx new file mode 100644 index 00000000..ac26b493 --- /dev/null +++ b/src/presentation/components/ui/alertDialog/overlay.tsx @@ -0,0 +1,25 @@ +import { + forwardRef, + type ElementRef, + type ComponentPropsWithoutRef +} from 'react' + +import { Overlay as OverlayPrimitive } from '@radix-ui/react-alert-dialog' + +import { cn } from '@/main/utils' + +export const Overlay = forwardRef< + ElementRef, + ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +Overlay.displayName = OverlayPrimitive.displayName diff --git a/src/presentation/components/ui/alertDialog/title.tsx b/src/presentation/components/ui/alertDialog/title.tsx new file mode 100644 index 00000000..840fc7fd --- /dev/null +++ b/src/presentation/components/ui/alertDialog/title.tsx @@ -0,0 +1,22 @@ +import { + forwardRef, + type ElementRef, + type ComponentPropsWithoutRef +} from 'react' + +import { Title as TitlePrimitive } from '@radix-ui/react-alert-dialog' + +import { cn } from '@/main/utils' + +export const Title = forwardRef< + ElementRef, + ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +Title.displayName = TitlePrimitive.displayName diff --git a/src/presentation/components/ui/index.ts b/src/presentation/components/ui/index.ts index 018272ef..488a54d8 100644 --- a/src/presentation/components/ui/index.ts +++ b/src/presentation/components/ui/index.ts @@ -1,3 +1,4 @@ +export * from './alertDialog' export * from './avatar' export * from './button' export * from './card' From be9bc8149094ba35bdb6c2ecc4617759f38120ee Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Wed, 24 Jul 2024 12:00:45 -0300 Subject: [PATCH 122/162] feat(combobox): add is error --- src/presentation/components/ui/combobox/combobox.tsx | 4 +++- src/presentation/components/ui/combobox/types.ts | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/presentation/components/ui/combobox/combobox.tsx b/src/presentation/components/ui/combobox/combobox.tsx index a0d3da47..ce2af2ed 100644 --- a/src/presentation/components/ui/combobox/combobox.tsx +++ b/src/presentation/components/ui/combobox/combobox.tsx @@ -19,7 +19,8 @@ export const Combobox: React.FC = ({ placeholder, searchPlaceholder, emptyMessage, - loading = false + loading = false, + isError = false }) => { const [open, setOpen] = useState(false) @@ -32,6 +33,7 @@ export const Combobox: React.FC = ({ aria-expanded={open} className={cn( 'w-full justify-between', + isError && 'border border-red-500', !selected && 'text-muted-foreground' )} > diff --git a/src/presentation/components/ui/combobox/types.ts b/src/presentation/components/ui/combobox/types.ts index 1d8a8b3e..e8f74793 100644 --- a/src/presentation/components/ui/combobox/types.ts +++ b/src/presentation/components/ui/combobox/types.ts @@ -1,4 +1,4 @@ -import { Option } from '@/domain/shared' +import { Option } from '@/domain/shared/types' export type ComboboxProps = { search: string @@ -10,4 +10,5 @@ export type ComboboxProps = { searchPlaceholder?: string emptyMessage?: string loading?: boolean + isError?: boolean } From d9314e4140a25ec3509581f98a5d8496b7b03f3e Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Wed, 24 Jul 2024 12:01:09 -0300 Subject: [PATCH 123/162] refactor(input): remove debounce logic --- .../components/ui/input/input.tsx | 37 +++++-------------- src/presentation/components/ui/input/types.ts | 3 -- .../components/ui/input/useInput.ts | 31 +--------------- 3 files changed, 12 insertions(+), 59 deletions(-) diff --git a/src/presentation/components/ui/input/input.tsx b/src/presentation/components/ui/input/input.tsx index a34d99dc..de2f679e 100644 --- a/src/presentation/components/ui/input/input.tsx +++ b/src/presentation/components/ui/input/input.tsx @@ -1,6 +1,6 @@ import { forwardRef } from 'react' -import { AlertCircle, XCircle } from 'lucide-react' +import { AlertCircle } from 'lucide-react' import { cn } from '@/main/utils' import { Loading } from '@/presentation/components/ui/loading' @@ -19,26 +19,18 @@ export const Input = forwardRef( iconsEnd = [], isError, loading = false, - debounce = 0, - // eslint-disable-next-line no-empty-function - debounceCallback = () => {}, mask, - handleOnClearDebounce, ...props }, ref ) => { - const { paddingLeft, paddingRight, handleOnChange, handleOnClear } = - useInput({ - iconsStart, - iconsEnd, - isError, - debounce, - debounceCallback, - mask, - handleOnClearDebounce, - ...props - }) + const { paddingLeft, paddingRight, handleOnChange } = useInput({ + iconsStart, + iconsEnd, + isError, + mask, + ...props + }) return (
    @@ -72,17 +64,8 @@ export const Input = forwardRef( onClick={onClick} /> ))} - {loading ? : null} - {debounce ? ( - - ) : null} - {isError ? ( - - ) : null} + {loading && } + {isError && }
    ) diff --git a/src/presentation/components/ui/input/types.ts b/src/presentation/components/ui/input/types.ts index ad95aa88..eec3ae58 100644 --- a/src/presentation/components/ui/input/types.ts +++ b/src/presentation/components/ui/input/types.ts @@ -13,9 +13,6 @@ export type InputProps = React.InputHTMLAttributes & VariantProps & { iconsStart?: InputIcon[] iconsEnd?: InputIcon[] - debounce?: number loading?: boolean - debounceCallback?: () => void - handleOnClearDebounce?: () => void mask?: (value: string) => string } diff --git a/src/presentation/components/ui/input/useInput.ts b/src/presentation/components/ui/input/useInput.ts index 3137396d..bc268cef 100644 --- a/src/presentation/components/ui/input/useInput.ts +++ b/src/presentation/components/ui/input/useInput.ts @@ -1,7 +1,5 @@ import { useCallback } from 'react' -import { useDebounce } from '@/presentation/hooks' - import { InputProps } from './types' const ICON_SPACING = 28 @@ -11,13 +9,8 @@ export const useInput = ({ isError, iconsStart, iconsEnd, - value, - debounce = 0, - // eslint-disable-next-line no-empty-function - debounceCallback = () => {}, mask, - onChange, - handleOnClearDebounce + onChange }: InputProps) => { const handleOnChange = useCallback( (e: React.ChangeEvent) => { @@ -32,25 +25,6 @@ export const useInput = ({ [mask, onChange] ) - const { clear } = useDebounce({ - deps: [value], - ms: debounce, - fn: debounceCallback - }) - - const handleOnClear = useCallback(() => { - clear() - - const event = { - target: { - value: '' - } - } as React.ChangeEvent - handleOnChange(event) - - handleOnClearDebounce?.() - }, [clear, handleOnChange, handleOnClearDebounce]) - const iconContainerSize = (iconContainerLength: number) => iconContainerLength * ICON_SPACING @@ -64,7 +38,6 @@ export const useInput = ({ ICON_SPACING + iconContainerSize(iconsEndLength) : ICON_CONTAINER_PADDING + iconContainerSize(iconsEndLength), - handleOnChange, - handleOnClear + handleOnChange } } From f59cf97ad1d9d3df746480f542e6f501d96a0b3a Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Wed, 24 Jul 2024 12:01:35 -0300 Subject: [PATCH 124/162] refactor(datatable): sort and pagination logic --- .../components/ui/dataTable/dataTable.tsx | 40 ++++++++++++------- .../components/ui/dataTable/types.ts | 4 +- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/src/presentation/components/ui/dataTable/dataTable.tsx b/src/presentation/components/ui/dataTable/dataTable.tsx index 97c70d4b..9f9ddc13 100644 --- a/src/presentation/components/ui/dataTable/dataTable.tsx +++ b/src/presentation/components/ui/dataTable/dataTable.tsx @@ -39,18 +39,22 @@ export const DataTable = ({ typeof updaterOrValue === 'function' ? updaterOrValue([ { - desc: currentSorting.direction === 'desc', - id: String(currentSorting.field) + desc: currentSorting?.direction === 'desc', + id: String(currentSorting?.field) } ]) : updaterOrValue + if (!sort) { + onSorting() + } + onSorting({ - direction: sort.desc ? 'desc' : 'asc', - field: sort.id as keyof TData + direction: sort?.desc ? 'desc' : 'asc', + field: sort?.id as keyof TData }) }, - [currentSorting.direction, currentSorting.field, onSorting] + [currentSorting?.direction, currentSorting?.field, onSorting] ) const onPaginationChange: OnChangeFn = useCallback( @@ -83,8 +87,8 @@ export const DataTable = ({ state: { sorting: [ { - id: String(currentSorting.field), - desc: currentSorting.direction === 'desc' + id: String(currentSorting?.field), + desc: currentSorting?.direction === 'desc' } ], pagination: { @@ -110,10 +114,10 @@ export const DataTable = ({ return 'Limpar ordenação' } - const showInitialEllipsis = useMemo(() => page > 2, [page]) - const showFinalEllipsis = useMemo(() => page + 2 > 3, [page]) + const isAfterFirstPage = useMemo(() => page > 1, [page]) + const isBeforeLastPage = useMemo( () => page + 1 < totalPages, [page, totalPages] @@ -208,7 +212,7 @@ export const DataTable = ({ - {showInitialEllipsis ? ( + {isAfterFirstPage && ( <> setPageIndex(0)}> 1 @@ -218,19 +222,25 @@ export const DataTable = ({ - ) : null} + )} {page} - {isBeforeLastPage ? ( + {page === 1 && ( + + + + )} + + {isBeforeLastPage && ( <> - {showFinalEllipsis ? ( + {showFinalEllipsis && ( - ) : null} + )} setPageIndex(totalPages - 1)} @@ -239,7 +249,7 @@ export const DataTable = ({ {totalPages} - ) : null} + )} diff --git a/src/presentation/components/ui/dataTable/types.ts b/src/presentation/components/ui/dataTable/types.ts index df791aec..05327531 100644 --- a/src/presentation/components/ui/dataTable/types.ts +++ b/src/presentation/components/ui/dataTable/types.ts @@ -11,8 +11,8 @@ export type DataTableProps = { onPageChange: (page: number) => void } sorting: { - currentSorting: Sort - onSorting: (sort: Sort) => void + currentSorting?: Sort + onSorting: (sort?: Sort) => void } loading?: boolean } From 37d07ab801826274b34eb6f078a89ccff41c3146 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Wed, 24 Jul 2024 12:01:55 -0300 Subject: [PATCH 125/162] chore: remove use modal hook --- src/presentation/hooks/index.ts | 2 -- src/presentation/hooks/useModal.ts | 37 ------------------------------ 2 files changed, 39 deletions(-) delete mode 100644 src/presentation/hooks/useModal.ts diff --git a/src/presentation/hooks/index.ts b/src/presentation/hooks/index.ts index 7355cece..a0b2bf5f 100644 --- a/src/presentation/hooks/index.ts +++ b/src/presentation/hooks/index.ts @@ -1,7 +1,5 @@ export * from './useDebounce' export * from './useHookForm' export * from './useIdrHistory' -export * from './usePageContainer' -export * from './useModal' export * from './useTimeout' export * from './useWindowResize' diff --git a/src/presentation/hooks/useModal.ts b/src/presentation/hooks/useModal.ts deleted file mode 100644 index 154b887d..00000000 --- a/src/presentation/hooks/useModal.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { useEffect, useState } from 'react' - -export const useModal = ({ - onOpenCallback, - onCloseCallback -}: { - onOpenCallback?: () => void - onCloseCallback?: () => void -}) => { - const [isOpen, setIsOpen] = useState(false) - - const open = () => { - onOpenCallback?.() - setIsOpen(true) - } - const close = () => { - onCloseCallback?.() - setIsOpen(false) - } - - useEffect(() => { - if (!isOpen && onCloseCallback) { - onCloseCallback() - } - - if (isOpen && onOpenCallback) { - onOpenCallback() - } - }, [isOpen, onCloseCallback, onOpenCallback]) - - return { - isOpen, - setIsOpen, - open, - close - } -} From 6cc0259884495898d6359f6996b55fce31e655a2 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Wed, 24 Jul 2024 12:02:50 -0300 Subject: [PATCH 126/162] fix(mocks/modules/property/services/deletePropertyService): return correct status code and body --- .../property/services/deletePropertyService.ts | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/mocks/modules/property/services/deletePropertyService.ts b/src/mocks/modules/property/services/deletePropertyService.ts index bbb61e4e..44d7c089 100644 --- a/src/mocks/modules/property/services/deletePropertyService.ts +++ b/src/mocks/modules/property/services/deletePropertyService.ts @@ -4,20 +4,15 @@ import { httpWithMiddleware } from '@/mocks/lib' import { withAuth, withDelay } from '@/mocks/middleware' export const deletePropertyService = httpWithMiddleware< - PathParams, + PathParams<'id'>, never, never >({ - routePath: '/api/properties', + routePath: '/api/properties/:id', method: 'delete', middlewares: [withDelay(), withAuth], - resolver: async ({ params: id }) => - HttpResponse.json( - { - id - }, - { - status: 204 - } - ) + resolver: async () => + HttpResponse.json(undefined, { + status: 204 + }) }) From 982a378fbe92a1a12b305d331697e07d314e03d3 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Wed, 24 Jul 2024 12:03:21 -0300 Subject: [PATCH 127/162] fix(mocks/modules/property/services/getPropertiesService): total registers --- src/mocks/modules/property/services/getPropertiesService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mocks/modules/property/services/getPropertiesService.ts b/src/mocks/modules/property/services/getPropertiesService.ts index 6285212d..af8f645b 100644 --- a/src/mocks/modules/property/services/getPropertiesService.ts +++ b/src/mocks/modules/property/services/getPropertiesService.ts @@ -62,7 +62,7 @@ export const getPropertiesService = httpWithMiddleware( return HttpResponse.json( { properties: filteredData, - totalRegisters: filteredData.length + totalRegisters: propertiesData.length }, { status: HttpStatusCode.ok } ) From 2ec4c5ecfcd5ac15f8eeea837bfe6738c361c4db Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Wed, 24 Jul 2024 12:03:48 -0300 Subject: [PATCH 128/162] feat(mocks/modules/property/services): add update property service --- src/mocks/modules/property/index.ts | 2 ++ .../services/updatePropertyService copy.ts | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 src/mocks/modules/property/services/updatePropertyService copy.ts diff --git a/src/mocks/modules/property/index.ts b/src/mocks/modules/property/index.ts index d526b686..7578ba80 100644 --- a/src/mocks/modules/property/index.ts +++ b/src/mocks/modules/property/index.ts @@ -4,9 +4,11 @@ import { createPropertyService } from './services/createPropertyService' import { deletePropertyService } from './services/deletePropertyService' import { getPropertiesService } from './services/getPropertiesService' import { getPropertyService } from './services/getPropertyService' +import { updatePropertyService } from './services/updatePropertyService copy' export const propertyHandlers: HttpHandler[] = [ createPropertyService, + updatePropertyService, deletePropertyService, getPropertiesService, getPropertyService diff --git a/src/mocks/modules/property/services/updatePropertyService copy.ts b/src/mocks/modules/property/services/updatePropertyService copy.ts new file mode 100644 index 00000000..b4c1eaff --- /dev/null +++ b/src/mocks/modules/property/services/updatePropertyService copy.ts @@ -0,0 +1,17 @@ +import { HttpResponse, PathParams } from 'msw' + +import { HttpStatusCode } from '@/data/protocols/http' +import { httpWithMiddleware } from '@/mocks/lib' +import { withAuth, withDelay } from '@/mocks/middleware' + +export const updatePropertyService = httpWithMiddleware< + PathParams<'id'>, + never, + never +>({ + routePath: '/api/properties/:id', + method: 'patch', + middlewares: [withDelay(), withAuth], + resolver: async () => + HttpResponse.json(undefined, { status: HttpStatusCode.noContent }) +}) From 80ac2412f7e8e4c3b06ff4ed924a629ec82b73a7 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Wed, 24 Jul 2024 12:04:54 -0300 Subject: [PATCH 129/162] feat: add alert dialog radix package --- package.json | 1 + pnpm-lock.yaml | 348 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 349 insertions(+) diff --git a/package.json b/package.json index cab6827c..f166872c 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "seed:mock": "node ./scripts/seed/index.mjs" }, "dependencies": { + "@radix-ui/react-alert-dialog": "^1.1.1", "@radix-ui/react-avatar": "^1.0.4", "@radix-ui/react-dialog": "^1.0.5", "@radix-ui/react-dropdown-menu": "^2.0.6", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 21a1c8cc..f4fef7b6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: dependencies: + '@radix-ui/react-alert-dialog': + specifier: ^1.1.1 + version: 1.1.1(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-avatar': specifier: ^1.0.4 version: 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -1240,6 +1243,22 @@ packages: '@radix-ui/primitive@1.0.1': resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} + '@radix-ui/primitive@1.1.0': + resolution: {integrity: sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==} + + '@radix-ui/react-alert-dialog@1.1.1': + resolution: {integrity: sha512-wmCoJwj7byuVuiLKqDLlX7ClSUU0vd9sdCeM+2Ls+uf13+cpSJoMgwysHq1SGVVkJj5Xn0XWi1NoRCdkMpr6Mw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-arrow@1.0.3': resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} peerDependencies: @@ -1288,6 +1307,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-compose-refs@1.1.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 + '@radix-ui/react-context@1.0.1': resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} peerDependencies: @@ -1297,6 +1325,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-context@1.1.0': + resolution: {integrity: sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-dialog@1.0.5': resolution: {integrity: sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==} peerDependencies: @@ -1310,6 +1347,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-dialog@1.1.1': + resolution: {integrity: sha512-zysS+iU4YP3STKNS6USvFVqI4qqx8EpiwmT5TuCApVEBca+eRCbONi4EgzfNSuVnOXvC5UPHHMjs8RXO6DH9Bg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-direction@1.0.1': resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} peerDependencies: @@ -1345,6 +1395,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-dismissable-layer@1.1.0': + resolution: {integrity: sha512-/UovfmmXGptwGcBQawLzvn2jOfM0t4z3/uKffoBlj724+n3FvBbZ7M0aaBOmkp6pqFYpO4yx8tSVJjx3Fl2jig==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-dropdown-menu@2.0.6': resolution: {integrity: sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA==} peerDependencies: @@ -1367,6 +1430,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-focus-guards@1.1.0': + resolution: {integrity: sha512-w6XZNUPVv6xCpZUqb/yN9DL6auvpGX3C/ee6Hdi16v2UUy25HV2Q5bcflsiDyT/g5RwbPQ/GIT1vLkeRb+ITBw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-focus-scope@1.0.3': resolution: {integrity: sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==} peerDependencies: @@ -1393,6 +1465,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-focus-scope@1.1.0': + resolution: {integrity: sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-id@1.0.1': resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} peerDependencies: @@ -1402,6 +1487,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-id@1.1.0': + resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-label@2.0.2': resolution: {integrity: sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==} peerDependencies: @@ -1493,6 +1587,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-portal@1.1.1': + resolution: {integrity: sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-presence@1.0.1': resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} peerDependencies: @@ -1506,6 +1613,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-presence@1.1.0': + resolution: {integrity: sha512-Gq6wuRN/asf9H/E/VzdKoUtT8GC9PQc9z40/vEr0VCJ4u5XvvhWIrSsCB6vD2/cH7ugTdSfYq9fLJCcM00acrQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-primitive@1.0.3': resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} peerDependencies: @@ -1519,6 +1639,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-primitive@2.0.0': + resolution: {integrity: sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-roving-focus@1.0.4': resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} peerDependencies: @@ -1567,6 +1700,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-slot@1.1.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 + '@radix-ui/react-tabs@1.0.4': resolution: {integrity: sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog==} peerDependencies: @@ -1641,6 +1783,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-callback-ref@1.1.0': + resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-controllable-state@1.0.1': resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} peerDependencies: @@ -1650,6 +1801,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-controllable-state@1.1.0': + resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-escape-keydown@1.0.3': resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} peerDependencies: @@ -1659,6 +1819,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-escape-keydown@1.1.0': + resolution: {integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-layout-effect@1.0.1': resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} peerDependencies: @@ -1668,6 +1837,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-use-layout-effect@1.1.0': + resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-previous@1.0.1': resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} peerDependencies: @@ -4686,6 +4864,16 @@ packages: '@types/react': optional: true + react-remove-scroll@2.5.7: + resolution: {integrity: sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==} + 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 + react-router-dom@6.21.3: resolution: {integrity: sha512-kNzubk7n4YHSrErzjLK72j0B5i969GsuCGazRl3G6j1zqZBLjuSlYBdVdkDOgzGdPIffUOc9nmgiadTEVoq91g==} engines: {node: '>=14.0.0'} @@ -6791,6 +6979,22 @@ snapshots: dependencies: '@babel/runtime': 7.23.9 + '@radix-ui/primitive@1.1.0': {} + + '@radix-ui/react-alert-dialog@1.1.1(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-context': 1.1.0(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-dialog': 1.1.1(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': 1.1.0(@types/react@18.2.48)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + '@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 @@ -6834,6 +7038,12 @@ snapshots: optionalDependencies: '@types/react': 18.2.48 + '@radix-ui/react-compose-refs@1.1.0(@types/react@18.2.48)(react@18.2.0)': + dependencies: + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.48 + '@radix-ui/react-context@1.0.1(@types/react@18.2.48)(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 @@ -6841,6 +7051,12 @@ snapshots: optionalDependencies: '@types/react': 18.2.48 + '@radix-ui/react-context@1.1.0(@types/react@18.2.48)(react@18.2.0)': + dependencies: + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.48 + '@radix-ui/react-dialog@1.0.5(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 @@ -6864,6 +7080,28 @@ snapshots: '@types/react': 18.2.48 '@types/react-dom': 18.2.18 + '@radix-ui/react-dialog@1.1.1(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-context': 1.1.0(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-focus-guards': 1.1.0(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-id': 1.1.0(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': 1.1.0(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.48)(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.7(@types/react@18.2.48)(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + '@radix-ui/react-direction@1.0.1(@types/react@18.2.48)(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 @@ -6899,6 +7137,19 @@ snapshots: '@types/react': 18.2.48 '@types/react-dom': 18.2.18 + '@radix-ui/react-dismissable-layer@1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.2.48)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + '@radix-ui/react-dropdown-menu@2.0.6(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 @@ -6922,6 +7173,12 @@ snapshots: optionalDependencies: '@types/react': 18.2.48 + '@radix-ui/react-focus-guards@1.1.0(@types/react@18.2.48)(react@18.2.0)': + dependencies: + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.48 + '@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 @@ -6946,6 +7203,17 @@ snapshots: '@types/react': 18.2.48 '@types/react-dom': 18.2.18 + '@radix-ui/react-focus-scope@1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.48)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + '@radix-ui/react-id@1.0.1(@types/react@18.2.48)(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 @@ -6954,6 +7222,13 @@ snapshots: optionalDependencies: '@types/react': 18.2.48 + '@radix-ui/react-id@1.1.0(@types/react@18.2.48)(react@18.2.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.2.48)(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.48 + '@radix-ui/react-label@2.0.2(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 @@ -7073,6 +7348,16 @@ snapshots: '@types/react': 18.2.48 '@types/react-dom': 18.2.18 + '@radix-ui/react-portal@1.1.1(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.2.48)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + '@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 @@ -7084,6 +7369,16 @@ snapshots: '@types/react': 18.2.48 '@types/react-dom': 18.2.18 + '@radix-ui/react-presence@1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.2.48)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.2.48)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 @@ -7094,6 +7389,15 @@ snapshots: '@types/react': 18.2.48 '@types/react-dom': 18.2.18 + '@radix-ui/react-primitive@2.0.0(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/react-slot': 1.1.0(@types/react@18.2.48)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + '@types/react-dom': 18.2.18 + '@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 @@ -7160,6 +7464,13 @@ snapshots: optionalDependencies: '@types/react': 18.2.48 + '@radix-ui/react-slot@1.1.0(@types/react@18.2.48)(react@18.2.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.2.48)(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.48 + '@radix-ui/react-tabs@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 @@ -7249,6 +7560,12 @@ snapshots: optionalDependencies: '@types/react': 18.2.48 + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.2.48)(react@18.2.0)': + dependencies: + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.48 + '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.48)(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 @@ -7257,6 +7574,13 @@ snapshots: optionalDependencies: '@types/react': 18.2.48 + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.2.48)(react@18.2.0)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.48)(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.48 + '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.48)(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 @@ -7265,6 +7589,13 @@ snapshots: optionalDependencies: '@types/react': 18.2.48 + '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.2.48)(react@18.2.0)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.48)(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.48 + '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.48)(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 @@ -7272,6 +7603,12 @@ snapshots: optionalDependencies: '@types/react': 18.2.48 + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.2.48)(react@18.2.0)': + dependencies: + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.48 + '@radix-ui/react-use-previous@1.0.1(@types/react@18.2.48)(react@18.2.0)': dependencies: '@babel/runtime': 7.23.9 @@ -10936,6 +11273,17 @@ snapshots: optionalDependencies: '@types/react': 18.2.48 + react-remove-scroll@2.5.7(@types/react@18.2.48)(react@18.2.0): + dependencies: + react: 18.2.0 + react-remove-scroll-bar: 2.3.4(@types/react@18.2.48)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.2.48)(react@18.2.0) + tslib: 2.6.2 + use-callback-ref: 1.3.1(@types/react@18.2.48)(react@18.2.0) + use-sidecar: 1.1.2(@types/react@18.2.48)(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.48 + react-router-dom@6.21.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@remix-run/router': 1.14.2 From ce3d6ba12e9b041e2e64f985ac322d772c4bfd97 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Mon, 29 Jul 2024 14:33:49 -0300 Subject: [PATCH 130/162] feat(pages/propertyPage): add request to get all users tab and structure better the form tabs --- .../factories/pages/propertyPageFactory.tsx | 2 + src/presentation/pages/propertyPage/index.tsx | 43 ++-- .../index.tsx} | 129 ++++++----- .../propertyPage/tabs/generalTab/types.ts | 6 + .../pages/propertyPage/tabs/types.ts | 7 + src/presentation/pages/propertyPage/types.ts | 2 + .../pages/propertyPage/usePropertyPage.tsx | 34 ++- .../propertyPage/usePropertyPageInputData.tsx | 214 ------------------ 8 files changed, 130 insertions(+), 307 deletions(-) rename src/presentation/pages/propertyPage/tabs/{useGeneralTabInputData.tsx => generalTab/index.tsx} (68%) create mode 100644 src/presentation/pages/propertyPage/tabs/generalTab/types.ts create mode 100644 src/presentation/pages/propertyPage/tabs/types.ts delete mode 100644 src/presentation/pages/propertyPage/usePropertyPageInputData.tsx diff --git a/src/main/factories/pages/propertyPageFactory.tsx b/src/main/factories/pages/propertyPageFactory.tsx index 5c5076f6..40f3c85d 100644 --- a/src/main/factories/pages/propertyPageFactory.tsx +++ b/src/main/factories/pages/propertyPageFactory.tsx @@ -7,6 +7,7 @@ import { makeRemoteGetProperty, makeRemoteUpdateProperty } from '../useCases/property' +import { makeRemoteGetAllUsers } from '../useCases/user' import { makePropertyValidation } from '../validations/propertyValidationFactory' export const MakePropertyPage: React.FC = () => ( @@ -16,6 +17,7 @@ export const MakePropertyPage: React.FC = () => ( deleteProperty={makeRemoteDeleteProperty()} getProperties={makeRemoteGetProperties()} getProperty={makeRemoteGetProperty()} + getAllUsers={makeRemoteGetAllUsers()} validation={makePropertyValidation()} /> ) diff --git a/src/presentation/pages/propertyPage/index.tsx b/src/presentation/pages/propertyPage/index.tsx index 9489c00c..1545cefe 100644 --- a/src/presentation/pages/propertyPage/index.tsx +++ b/src/presentation/pages/propertyPage/index.tsx @@ -2,7 +2,6 @@ import { Button, Tabs } from '@/presentation/components/ui' import { PageContainer } from '@/presentation/containers' import { usePropertyPage } from './usePropertyPage' -import { usePropertyPageInputData } from './usePropertyPageInputData' import type { PropertyPageProps } from './types' import type { PropertyDetailsModel, PropertyModel } from '@/domain/models' @@ -13,9 +12,11 @@ export const PropertyPage: React.FC = ({ deleteProperty, getProperties, getProperty, + getAllUsers, validation }) => { const { + tabs, isOpenSheet, setIsOpenSheet, isOpenDelete, @@ -45,13 +46,10 @@ export const PropertyPage: React.FC = ({ deleteProperty, getProperties, getProperty, + getAllUsers, validation }) - const { generalInputData } = usePropertyPageInputData({ - form - }) - return ( header={{ @@ -84,33 +82,18 @@ export const PropertyPage: React.FC = ({ renderData: () => ( - setActiveTab('general')} - > - Dados Gerais - - setActiveTab('collaborators')} - > - Colaboradores - - setActiveTab('totalArea')} - > - Área Total - - setActiveTab('localization')} - > - Localização - + {tabs.map((tab) => ( + setActiveTab(tab.value)} + > + {tab.title} + + ))} - {generalInputData.map((component) => component)} + {tabs.find((tab) => tab.value === activeTab)?.component} ), diff --git a/src/presentation/pages/propertyPage/tabs/useGeneralTabInputData.tsx b/src/presentation/pages/propertyPage/tabs/generalTab/index.tsx similarity index 68% rename from src/presentation/pages/propertyPage/tabs/useGeneralTabInputData.tsx rename to src/presentation/pages/propertyPage/tabs/generalTab/index.tsx index 4b7b5e27..d619b53d 100644 --- a/src/presentation/pages/propertyPage/tabs/useGeneralTabInputData.tsx +++ b/src/presentation/pages/propertyPage/tabs/generalTab/index.tsx @@ -1,25 +1,52 @@ -import { useMemo, useState } from 'react' +import { useCallback, useEffect, useState } from 'react' -import { Plus } from 'lucide-react' +import { useQuery } from '@tanstack/react-query' +import { Plus, Trash2 } from 'lucide-react' import toast from 'react-hot-toast' import { moneyMask } from '@/masker' import { Input, Form, Combobox, Button } from '@/presentation/components/ui' -import { useHookForm } from '@/presentation/hooks' +import { useDebounce } from '@/presentation/hooks' -import type { PropertyDetailsModel } from '@/domain/models' +import type { GeneralTabProps } from './types' -export const useGeneralTabInputData = ({ - form -}: { - form: ReturnType> +export const GeneralTab: React.FC = ({ + form, + getAllUsers }) => { const { control, getValues, setValue } = form - const [search, setSearch] = useState('') + const debouncedSearch = useDebounce({ value: search, delayInMs: 1000 }) + + const handleRemoveTechnician = useCallback( + (value: string) => { + const technicians = getValues('general.responsibleTechnicians') + + setValue( + 'general.responsibleTechnicians', + technicians.filter((technician) => technician.value !== value) + ) + }, + [getValues, setValue] + ) - const inputData = useMemo( - () => [ + const { + data: allUsersData = [], + isError, + isLoading + } = useQuery({ + queryKey: ['technicians', debouncedSearch], + queryFn: () => getAllUsers.execute(debouncedSearch) + }) + + useEffect(() => { + if (isError) { + toast.error('Erro ao buscar técnicos') + } + }, [isError]) + + return ( + <> ) }} - />, + /> ) }} - />, + /> ) }} - />, + /> ) }} - />, + /> ) }} - />, + />
    {technicians.map((technician) => ( - + setSearch(value)} + handleSelect={(selectedTechnician) => + setValue('general.responsibleTechnicians', [ + ...nonEmptyTechnicians, + selectedTechnician + ]) } - ]} - selected={technician} - handleSearch={(value) => setSearch(value)} - handleSelect={(selectedTechnician) => - setValue('general.responsibleTechnicians', [ - ...nonEmptyTechnicians, - selectedTechnician - ]) - } - isError={!!error?.message} - /> + isError={!!error?.message} + /> + + +
    ))} @@ -207,11 +221,6 @@ export const useGeneralTabInputData = ({ ) }} /> - ], - [control, getValues, search, setValue] + ) - - return { - inputData - } } diff --git a/src/presentation/pages/propertyPage/tabs/generalTab/types.ts b/src/presentation/pages/propertyPage/tabs/generalTab/types.ts new file mode 100644 index 00000000..65ea24d3 --- /dev/null +++ b/src/presentation/pages/propertyPage/tabs/generalTab/types.ts @@ -0,0 +1,6 @@ +import type { TabProps } from '../types' +import type { IGetAllUsers } from '@/domain/useCases' + +export type GeneralTabProps = TabProps & { + getAllUsers: IGetAllUsers +} diff --git a/src/presentation/pages/propertyPage/tabs/types.ts b/src/presentation/pages/propertyPage/tabs/types.ts new file mode 100644 index 00000000..e5561793 --- /dev/null +++ b/src/presentation/pages/propertyPage/tabs/types.ts @@ -0,0 +1,7 @@ +import { useHookForm } from '@/presentation/hooks' + +import type { PropertyDetailsModel } from '@/domain/models' + +export type TabProps = { + form: ReturnType> +} diff --git a/src/presentation/pages/propertyPage/types.ts b/src/presentation/pages/propertyPage/types.ts index 2031340e..71304028 100644 --- a/src/presentation/pages/propertyPage/types.ts +++ b/src/presentation/pages/propertyPage/types.ts @@ -1,6 +1,7 @@ import type { ICreateProperty, IDeleteProperty, + IGetAllUsers, IGetProperties, IGetProperty, IUpdateProperty @@ -13,5 +14,6 @@ export type PropertyPageProps = { deleteProperty: IDeleteProperty getProperties: IGetProperties getProperty: IGetProperty + getAllUsers: IGetAllUsers validation: IValidation } diff --git a/src/presentation/pages/propertyPage/usePropertyPage.tsx b/src/presentation/pages/propertyPage/usePropertyPage.tsx index 5c68d4fa..35bfb1dc 100644 --- a/src/presentation/pages/propertyPage/usePropertyPage.tsx +++ b/src/presentation/pages/propertyPage/usePropertyPage.tsx @@ -7,6 +7,8 @@ import toast from 'react-hot-toast' import { DropdownMenu } from '@/presentation/components/ui' import { useDebounce, useHookForm } from '@/presentation/hooks' +import { GeneralTab } from './tabs/generalTab' + import type { PropertyPageProps } from './types' import type { PropertyDetailsModel, PropertyModel } from '@/domain/models' import type { Filters, Sort } from '@/domain/shared/types' @@ -42,13 +44,12 @@ export const usePropertyPage = ({ deleteProperty, getProperties, getProperty, + getAllUsers, validation }: PropertyPageProps) => { const [isOpenSheet, setIsOpenSheet] = useState(false) const [isOpenDelete, setIsOpenDelete] = useState(false) - const [activeTab, setActiveTab] = useState< - 'general' | 'collaborators' | 'totalArea' | 'localization' - >('general') + const [activeTab, setActiveTab] = useState('general') const [filters, setFilters] = useState>>( { name: '' @@ -162,6 +163,32 @@ export const usePropertyPage = ({ [properties, propertyIdToDelete] ) + const tabs = useMemo( + () => [ + { + value: 'general', + title: 'Dados Gerais', + component: + }, + { + value: 'collaborators', + title: 'Colaboradores', + component: + }, + { + value: 'totalArea', + title: 'Área Total', + component: + }, + { + value: 'localization', + title: 'Localização', + component: + } + ], + [form, getAllUsers] + ) + const columns = useMemo[]>( () => [ { @@ -256,6 +283,7 @@ export const usePropertyPage = ({ }, [isPropertyDetailsError]) return { + tabs, isOpenSheet, setIsOpenSheet, isOpenDelete, diff --git a/src/presentation/pages/propertyPage/usePropertyPageInputData.tsx b/src/presentation/pages/propertyPage/usePropertyPageInputData.tsx deleted file mode 100644 index abbeebc6..00000000 --- a/src/presentation/pages/propertyPage/usePropertyPageInputData.tsx +++ /dev/null @@ -1,214 +0,0 @@ -import { useState } from 'react' - -import { Plus } from 'lucide-react' -import toast from 'react-hot-toast' - -import { moneyMask } from '@/masker' -import { Input, Form, Combobox, Button } from '@/presentation/components/ui' -import { useHookForm } from '@/presentation/hooks' - -import type { PropertyDetailsModel } from '@/domain/models' - -export const usePropertyPageInputData = ({ - form -}: { - form: ReturnType> -}) => { - const { control, getValues, setValue } = form - - const [search, setSearch] = useState('') - - const generalInputData = [ - { - const { error } = fieldState - - return ( - - Nome da Propriedade - - - - - - ) - }} - />, - { - const { error } = fieldState - - return ( - - Município - - - - - - ) - }} - />, - { - const { error } = fieldState - - return ( - - Produtor - - - - - - ) - }} - />, - { - const { error } = fieldState - - return ( - - Preço médio da terra nua (R$/ha) - - - - - - ) - }} - />, - { - const { error } = fieldState - - return ( - - - Valor médio de arrendamento para pecuária na região (R$/ha/ano) - - - - - - - ) - }} - />, - { - const { value: technicians } = field - const nonEmptyTechnicians = technicians.filter( - (technician) => technician.value - ) - const { error } = fieldState - - return ( - - Técnicos responsáveis - -
    - {technicians.map((technician) => ( - setSearch(value)} - handleSelect={(selectedTechnician) => - setValue('general.responsibleTechnicians', [ - ...nonEmptyTechnicians, - selectedTechnician - ]) - } - isError={!!error?.message} - /> - ))} - - - - -
    -
    -
    - ) - }} - /> - ] - - return { - generalInputData - } -} From 793857831bc7b7c8a7a91b99e3bc9c1badb65c90 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Mon, 29 Jul 2024 14:34:26 -0300 Subject: [PATCH 131/162] chore: rename store folder to contexts folder --- src/main.tsx | 2 +- src/main/proxies/privateRouteProxy.tsx | 2 +- src/presentation/containers/loggedContainer/loggedContainer.tsx | 2 +- src/presentation/{store/auth.tsx => contexts/authContext.tsx} | 0 src/presentation/contexts/index.ts | 1 + src/presentation/pages/loginPage/useLoginPage.ts | 2 +- src/presentation/store/index.ts | 1 - 7 files changed, 5 insertions(+), 5 deletions(-) rename src/presentation/{store/auth.tsx => contexts/authContext.tsx} (100%) create mode 100644 src/presentation/contexts/index.ts delete mode 100644 src/presentation/store/index.ts diff --git a/src/main.tsx b/src/main.tsx index 1905115e..0eedddb5 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -8,7 +8,7 @@ import { Compose } from '@/presentation/components/utils' import { App } from './App' import { env } from './main/env' -import { AuthProvider } from './presentation/store' +import { AuthProvider } from './presentation/contexts' async function bootstrap() { const queryClient = new QueryClient() diff --git a/src/main/proxies/privateRouteProxy.tsx b/src/main/proxies/privateRouteProxy.tsx index 5ebbd449..55011a82 100644 --- a/src/main/proxies/privateRouteProxy.tsx +++ b/src/main/proxies/privateRouteProxy.tsx @@ -4,7 +4,7 @@ import { Navigate } from 'react-router-dom' import { PAGE_PATHS } from '@/main/routes/paths' import { LoggedContainer } from '@/presentation/containers' -import { useAuth } from '@/presentation/store' +import { useAuth } from '@/presentation/contexts' export const PrivateRouteProxy: React.FC = ({ children diff --git a/src/presentation/containers/loggedContainer/loggedContainer.tsx b/src/presentation/containers/loggedContainer/loggedContainer.tsx index 122cc8c9..ff9509b8 100644 --- a/src/presentation/containers/loggedContainer/loggedContainer.tsx +++ b/src/presentation/containers/loggedContainer/loggedContainer.tsx @@ -5,8 +5,8 @@ import { sidebarItems } from '@/main/routes/menu' import { cn } from '@/main/utils' import { Button, Header } from '@/presentation/components/ui' import { Sidebar } from '@/presentation/components/ui/sidebar' +import { useAuth } from '@/presentation/contexts' import { useIdrHistory } from '@/presentation/hooks' -import { useAuth } from '@/presentation/store' import { styles } from './styles' diff --git a/src/presentation/store/auth.tsx b/src/presentation/contexts/authContext.tsx similarity index 100% rename from src/presentation/store/auth.tsx rename to src/presentation/contexts/authContext.tsx diff --git a/src/presentation/contexts/index.ts b/src/presentation/contexts/index.ts new file mode 100644 index 00000000..20fc9ea7 --- /dev/null +++ b/src/presentation/contexts/index.ts @@ -0,0 +1 @@ +export * from './authContext' diff --git a/src/presentation/pages/loginPage/useLoginPage.ts b/src/presentation/pages/loginPage/useLoginPage.ts index e1d58a1e..897f46db 100644 --- a/src/presentation/pages/loginPage/useLoginPage.ts +++ b/src/presentation/pages/loginPage/useLoginPage.ts @@ -1,8 +1,8 @@ import { useCallback, useState } from 'react' import { LoginUserParams } from '@/domain/useCases' +import { useAuth } from '@/presentation/contexts' import { useHookForm } from '@/presentation/hooks/useHookForm' -import { useAuth } from '@/presentation/store' const INITIAL_FORM_DATA: LoginUserParams = { email: '', diff --git a/src/presentation/store/index.ts b/src/presentation/store/index.ts deleted file mode 100644 index f140b2ec..00000000 --- a/src/presentation/store/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './auth' From 22ad3d0cfd4534eb758cfec97d1547e33b84db03 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Mon, 29 Jul 2024 14:36:14 -0300 Subject: [PATCH 132/162] chore: remove presentation/factories folder --- .../components/ui/form/contexts/formFieldContext/index.ts | 4 ++-- .../components/ui/form/contexts/formItemContext/index.ts | 6 +++--- .../createCustomContext.tsx} | 2 +- src/presentation/contexts/index.ts | 1 + src/presentation/factories/index.ts | 1 - 5 files changed, 7 insertions(+), 7 deletions(-) rename src/presentation/{factories/createCustomContextFactory.tsx => contexts/createCustomContext.tsx} (90%) delete mode 100644 src/presentation/factories/index.ts diff --git a/src/presentation/components/ui/form/contexts/formFieldContext/index.ts b/src/presentation/components/ui/form/contexts/formFieldContext/index.ts index 372d07e4..61c4192d 100644 --- a/src/presentation/components/ui/form/contexts/formFieldContext/index.ts +++ b/src/presentation/components/ui/form/contexts/formFieldContext/index.ts @@ -1,9 +1,9 @@ -import { createCustomContextFactory } from '@/presentation/factories' +import { createCustomContext } from '@/presentation/contexts' import type { FormFieldProviderProps } from './types' export const { Context: FormFieldContext, useContext: useFormFieldContext } = - createCustomContextFactory({ + createCustomContext({ providerFn: () => ({ name: '' }) diff --git a/src/presentation/components/ui/form/contexts/formItemContext/index.ts b/src/presentation/components/ui/form/contexts/formItemContext/index.ts index 5f7fc8a0..a175179a 100644 --- a/src/presentation/components/ui/form/contexts/formItemContext/index.ts +++ b/src/presentation/components/ui/form/contexts/formItemContext/index.ts @@ -1,9 +1,9 @@ -import { createCustomContextFactory } from '@/presentation/factories' +import { createCustomContext } from '@/presentation/contexts' -import { FormItemProviderProps } from './types' +import type { FormItemProviderProps } from './types' export const { Context: FormItemContext, useContext: useFormItemContext } = - createCustomContextFactory({ + createCustomContext({ providerFn: () => ({ id: '' }) diff --git a/src/presentation/factories/createCustomContextFactory.tsx b/src/presentation/contexts/createCustomContext.tsx similarity index 90% rename from src/presentation/factories/createCustomContextFactory.tsx rename to src/presentation/contexts/createCustomContext.tsx index a9bfa633..321addbf 100644 --- a/src/presentation/factories/createCustomContextFactory.tsx +++ b/src/presentation/contexts/createCustomContext.tsx @@ -4,7 +4,7 @@ type Props = { providerFn: () => TData } -export const createCustomContextFactory = ({ +export const createCustomContext = ({ providerFn }: Props) => { const Context = createContext({} as TContextValue) diff --git a/src/presentation/contexts/index.ts b/src/presentation/contexts/index.ts index 20fc9ea7..8dcdf5f5 100644 --- a/src/presentation/contexts/index.ts +++ b/src/presentation/contexts/index.ts @@ -1 +1,2 @@ export * from './authContext' +export * from './createCustomContext' diff --git a/src/presentation/factories/index.ts b/src/presentation/factories/index.ts deleted file mode 100644 index 2bb1a95e..00000000 --- a/src/presentation/factories/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './createCustomContextFactory' From 97782a0cb83aea49b155c35f942febc24822109c Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Mon, 19 Aug 2024 12:43:21 -0300 Subject: [PATCH 133/162] refactor: use zod instead of custom validation builder and composite --- src/main/builders/index.ts | 1 - src/main/builders/validationBuilder.ts | 74 ---------------- src/main/composite/index.ts | 1 - src/main/composite/validationComposite.ts | 39 --------- .../factories/pages/propertyPageFactory.tsx | 2 - .../factories/pages/signUpPageFactory.tsx | 7 +- src/main/factories/validations/index.ts | 1 - .../validations/propertyValidationFactory.ts | 47 ---------- .../validations/signUpValidationFactory.ts | 57 ------------ .../components/ui/form/index.stories.tsx | 87 +++---------------- src/presentation/hooks/useHookForm.ts | 6 +- src/presentation/protocols/index.ts | 1 - src/presentation/protocols/validation.ts | 14 --- src/validation/errors/index.ts | 2 - src/validation/errors/invalidFieldError.ts | 6 -- src/validation/errors/requiredFieldError.ts | 6 -- src/validation/protocols/fieldValidation.ts | 4 - src/validation/protocols/index.ts | 1 - .../validators/compareFieldValidation.ts | 27 ------ src/validation/validators/cpfValidation.ts | 83 +++++++----------- src/validation/validators/emailValidation.ts | 19 +--- src/validation/validators/index.ts | 4 - .../validators/minLengthValidation.ts | 19 ---- .../validators/minNumberValidation.ts | 23 ----- src/validation/validators/moneyValidation.ts | 6 ++ .../validators/passwordValidation.ts | 35 ++------ src/validation/validators/phoneValidation.ts | 23 +---- .../validators/requiredFieldValidation.ts | 16 ---- src/validation/validators/yearValidation.ts | 20 +---- 29 files changed, 68 insertions(+), 563 deletions(-) delete mode 100644 src/main/builders/index.ts delete mode 100644 src/main/builders/validationBuilder.ts delete mode 100644 src/main/composite/index.ts delete mode 100644 src/main/composite/validationComposite.ts delete mode 100644 src/main/factories/validations/index.ts delete mode 100644 src/main/factories/validations/propertyValidationFactory.ts delete mode 100644 src/main/factories/validations/signUpValidationFactory.ts delete mode 100644 src/presentation/protocols/index.ts delete mode 100644 src/presentation/protocols/validation.ts delete mode 100644 src/validation/errors/index.ts delete mode 100644 src/validation/errors/invalidFieldError.ts delete mode 100644 src/validation/errors/requiredFieldError.ts delete mode 100644 src/validation/protocols/fieldValidation.ts delete mode 100644 src/validation/protocols/index.ts delete mode 100644 src/validation/validators/compareFieldValidation.ts delete mode 100644 src/validation/validators/minLengthValidation.ts delete mode 100644 src/validation/validators/minNumberValidation.ts create mode 100644 src/validation/validators/moneyValidation.ts delete mode 100644 src/validation/validators/requiredFieldValidation.ts diff --git a/src/main/builders/index.ts b/src/main/builders/index.ts deleted file mode 100644 index 3be7dfd1..00000000 --- a/src/main/builders/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './validationBuilder' diff --git a/src/main/builders/validationBuilder.ts b/src/main/builders/validationBuilder.ts deleted file mode 100644 index 8ed6e67b..00000000 --- a/src/main/builders/validationBuilder.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { IFieldValidation } from '@/validation/protocols' -import { - CompareFieldsValidation, - CpfValidation, - EmailValidation, - MinLengthValidation, - MinNumberValidation, - PasswordValidation, - PhoneValidation, - RequiredFieldValidation, - YearValidation -} from '@/validation/validators' - -export class ValidationBuilder { - private constructor( - private readonly fieldName: string, - private readonly validations: IFieldValidation[] - ) {} - - static field(fieldName: T): ValidationBuilder { - return new ValidationBuilder(fieldName, []) - } - - required(): ValidationBuilder { - this.validations.push(new RequiredFieldValidation(this.fieldName)) - return this - } - - email(): ValidationBuilder { - this.validations.push(new EmailValidation(this.fieldName)) - return this - } - - min(length: number): ValidationBuilder { - this.validations.push(new MinLengthValidation(this.fieldName, length)) - return this - } - - minNumber(min: number): ValidationBuilder { - this.validations.push(new MinNumberValidation(this.fieldName, min)) - return this - } - - sameAs(fieldToCompare: T): ValidationBuilder { - this.validations.push( - new CompareFieldsValidation(this.fieldName, fieldToCompare) - ) - return this - } - - password(): ValidationBuilder { - this.validations.push(new PasswordValidation(this.fieldName)) - return this - } - - phone(): ValidationBuilder { - this.validations.push(new PhoneValidation(this.fieldName)) - return this - } - - year(): ValidationBuilder { - this.validations.push(new YearValidation(this.fieldName)) - return this - } - - cpf(): ValidationBuilder { - this.validations.push(new CpfValidation(this.fieldName)) - return this - } - - build(): IFieldValidation[] { - return this.validations - } -} diff --git a/src/main/composite/index.ts b/src/main/composite/index.ts deleted file mode 100644 index 3b9cb53b..00000000 --- a/src/main/composite/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './validationComposite' diff --git a/src/main/composite/validationComposite.ts b/src/main/composite/validationComposite.ts deleted file mode 100644 index 6f7dfcca..00000000 --- a/src/main/composite/validationComposite.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { flattenObject } from '../utils' - -import type { ErrorDef, IValidation, Validate } from '@/presentation/protocols' -import type { IFieldValidation } from '@/validation/protocols' - -export class ValidationComposite implements IValidation { - private constructor(private readonly validators: IFieldValidation[]) {} - - static build(validators: IFieldValidation[]): ValidationComposite { - return new ValidationComposite(validators) - } - - validate: Validate = ({ data }) => { - const flattenedData = flattenObject(data) - - let errors: ErrorDef = {} - - for (const fieldName of Object.keys(flattenedData)) { - const validators = this.validators.filter( - (validator) => validator.field === fieldName - ) - - for (const validator of validators) { - const error = validator.validate({ - [fieldName]: flattenedData[fieldName] - }) - - if (error) { - errors = { ...errors, [fieldName]: { message: error.message } } - } - } - } - - return { - errors, - values: data - } - } -} diff --git a/src/main/factories/pages/propertyPageFactory.tsx b/src/main/factories/pages/propertyPageFactory.tsx index 40f3c85d..3b23256b 100644 --- a/src/main/factories/pages/propertyPageFactory.tsx +++ b/src/main/factories/pages/propertyPageFactory.tsx @@ -8,7 +8,6 @@ import { makeRemoteUpdateProperty } from '../useCases/property' import { makeRemoteGetAllUsers } from '../useCases/user' -import { makePropertyValidation } from '../validations/propertyValidationFactory' export const MakePropertyPage: React.FC = () => ( ( getProperties={makeRemoteGetProperties()} getProperty={makeRemoteGetProperty()} getAllUsers={makeRemoteGetAllUsers()} - validation={makePropertyValidation()} /> ) diff --git a/src/main/factories/pages/signUpPageFactory.tsx b/src/main/factories/pages/signUpPageFactory.tsx index 6d56902a..be6f2095 100644 --- a/src/main/factories/pages/signUpPageFactory.tsx +++ b/src/main/factories/pages/signUpPageFactory.tsx @@ -1,12 +1,7 @@ import { makeRemoteGetCep } from '@/main/factories/useCases/cep' import { makeRemoteCreateUser } from '@/main/factories/useCases/user' -import { makeSignUpValidation } from '@/main/factories/validations' import { SignUpPage } from '@/presentation/pages' export const MakeSignUpPage: React.FC = () => ( - + ) diff --git a/src/main/factories/validations/index.ts b/src/main/factories/validations/index.ts deleted file mode 100644 index 7d929132..00000000 --- a/src/main/factories/validations/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './signUpValidationFactory' diff --git a/src/main/factories/validations/propertyValidationFactory.ts b/src/main/factories/validations/propertyValidationFactory.ts deleted file mode 100644 index 1361bdac..00000000 --- a/src/main/factories/validations/propertyValidationFactory.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { ValidationBuilder } from '@/main/builders' -import { ValidationComposite } from '@/main/composite' - -import type { PropertyDetailsModel } from '@/domain/models' -import type { NestedKeyOf } from '@/domain/shared/types' - -export const makePropertyValidation = () => - ValidationComposite.build([ - ...ValidationBuilder.field>( - 'general.name' - ) - .required() - .build(), - - ...ValidationBuilder.field>( - 'general.city' - ) - .required() - .build(), - - ...ValidationBuilder.field>( - 'general.producer' - ) - .required() - .build(), - - ...ValidationBuilder.field>( - 'general.nakedAveragePricePerHectare' - ) - .required() - .minNumber(0.01) - .build(), - - ...ValidationBuilder.field>( - 'general.leaseAveragePricePerHectare' - ) - .required() - .minNumber(0.01) - .build(), - - ...ValidationBuilder.field>( - 'general.responsibleTechnicians' - ) - .required() - .min(1) - .build() - ]) diff --git a/src/main/factories/validations/signUpValidationFactory.ts b/src/main/factories/validations/signUpValidationFactory.ts deleted file mode 100644 index 30f9c944..00000000 --- a/src/main/factories/validations/signUpValidationFactory.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { CreateUserModel } from '@/domain/models' -import { ValidationBuilder } from '@/main/builders' -import { ValidationComposite } from '@/main/composite' - -type ModelKeys = keyof CreateUserModel - -export const makeSignUpValidation = (): { - firstStepValidation: ValidationComposite - validation: ValidationComposite -} => ({ - firstStepValidation: ValidationComposite.build([ - ...ValidationBuilder.field('name').required().build(), - ...ValidationBuilder.field('email').required().email().build(), - ...ValidationBuilder.field('password') - .required() - .password() - .build(), - ...ValidationBuilder.field('confirmPassword') - .required() - .sameAs('password') - .build(), - ...ValidationBuilder.field('cpf').required().cpf().build(), - ...ValidationBuilder.field('phone').required().phone().build(), - ...ValidationBuilder.field('graduationYear') - .required() - .year() - .build(), - ...ValidationBuilder.field('professionalRegister') - .required() - .build() - ]), - validation: ValidationComposite.build([ - ...ValidationBuilder.field('name').required().build(), - ...ValidationBuilder.field('email').required().email().build(), - ...ValidationBuilder.field('password') - .required() - .password() - .build(), - ...ValidationBuilder.field('confirmPassword') - .required() - .sameAs('password') - .build(), - ...ValidationBuilder.field('cpf').required().cpf().build(), - ...ValidationBuilder.field('phone').required().phone().build(), - ...ValidationBuilder.field('graduationYear') - .required() - .year() - .build(), - ...ValidationBuilder.field('professionalRegister') - .required() - .build(), - ...ValidationBuilder.field('cep').required().build(), - ...ValidationBuilder.field('street').required().build(), - ...ValidationBuilder.field('city').required().build(), - ...ValidationBuilder.field('houseNumber').required().build() - ]) -}) diff --git a/src/presentation/components/ui/form/index.stories.tsx b/src/presentation/components/ui/form/index.stories.tsx index e0b8ca40..e39c9cee 100644 --- a/src/presentation/components/ui/form/index.stories.tsx +++ b/src/presentation/components/ui/form/index.stories.tsx @@ -1,7 +1,7 @@ +import { zodResolver } from '@hookform/resolvers/zod' import { Meta, StoryFn } from '@storybook/react/' +import { z } from 'zod' -import { ValidationBuilder } from '@/main/builders' -import { ValidationComposite } from '@/main/composite' import { Button } from '@/presentation/components/ui/button' import { Input } from '@/presentation/components/ui/input' import { useHookForm } from '@/presentation/hooks' @@ -12,42 +12,19 @@ export default { title: 'Components/UI/Form' } as Meta -type FormData = { - name: string - email: string - password: string - passwordConfirmation: string -} +const schema = z.object({ + name: z.string().min(3, { + message: 'Nome precisa ter ao menos três caracteres' + }) +}) +type FormData = z.infer const Template: StoryFn = () => { - const schema = ValidationComposite.build([ - ...ValidationBuilder.field('name') - .required() - .min(3) - .build(), - ...ValidationBuilder.field('email') - .required() - .email() - .build(), - ...ValidationBuilder.field('password') - .required() - .min(20) - .email() - .build(), - ...ValidationBuilder.field('passwordConfirmation') - .required() - .sameAs('password') - .build() - ]) - const form = useHookForm({ defaultValues: { - name: '', - email: '', - password: '', - passwordConfirmation: '' + name: '' }, - schemaResolver: (data) => schema.validate({ data }) + resolver: zodResolver(schema) }) const onSubmit = (data: FormData) => { @@ -72,50 +49,6 @@ const Template: StoryFn = () => { )} /> - ( - - Email - - - - Digite seu email - - - )} - /> - - ( - - Senha - - - - Digite sua senha - - - )} - /> - - ( - - Confirme sua senha - - - - Digite novamente sua senha - - - )} - /> diff --git a/src/presentation/hooks/useHookForm.ts b/src/presentation/hooks/useHookForm.ts index 25fa9892..b7c2faec 100644 --- a/src/presentation/hooks/useHookForm.ts +++ b/src/presentation/hooks/useHookForm.ts @@ -15,19 +15,19 @@ export type UseHookFormProps = { values?: UseFormProps['values'] defaultValues?: DefaultValues - schemaResolver?: Resolver + resolver?: Resolver } export const useHookForm = ({ values, defaultValues, - schemaResolver + resolver }: UseHookFormProps) => { const form = useForm({ mode: 'all', defaultValues, values, - resolver: schemaResolver + resolver }) const { diff --git a/src/presentation/protocols/index.ts b/src/presentation/protocols/index.ts deleted file mode 100644 index 698c8e52..00000000 --- a/src/presentation/protocols/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './validation' diff --git a/src/presentation/protocols/validation.ts b/src/presentation/protocols/validation.ts deleted file mode 100644 index b125e486..00000000 --- a/src/presentation/protocols/validation.ts +++ /dev/null @@ -1,14 +0,0 @@ -export type ErrorDef = { - [x: string]: { message: string } -} - -type ValidateResponse = { - errors: ErrorDef - values: object -} - -export type Validate = (props: { data: object }) => ValidateResponse - -export interface IValidation { - validate: Validate -} diff --git a/src/validation/errors/index.ts b/src/validation/errors/index.ts deleted file mode 100644 index e8278b16..00000000 --- a/src/validation/errors/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './invalidFieldError' -export * from './requiredFieldError' diff --git a/src/validation/errors/invalidFieldError.ts b/src/validation/errors/invalidFieldError.ts deleted file mode 100644 index 7208232e..00000000 --- a/src/validation/errors/invalidFieldError.ts +++ /dev/null @@ -1,6 +0,0 @@ -export class InvalidFieldError extends Error { - constructor(message?: string) { - super(message || `Campo é inválido`) - this.name = InvalidFieldError.name - } -} diff --git a/src/validation/errors/requiredFieldError.ts b/src/validation/errors/requiredFieldError.ts deleted file mode 100644 index 7f0ae990..00000000 --- a/src/validation/errors/requiredFieldError.ts +++ /dev/null @@ -1,6 +0,0 @@ -export class RequiredFieldError extends Error { - constructor() { - super('Campo obrigatório') - this.name = RequiredFieldError.name - } -} diff --git a/src/validation/protocols/fieldValidation.ts b/src/validation/protocols/fieldValidation.ts deleted file mode 100644 index 386408ea..00000000 --- a/src/validation/protocols/fieldValidation.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface IFieldValidation { - field: string - validate: (input: object) => Error | null -} diff --git a/src/validation/protocols/index.ts b/src/validation/protocols/index.ts deleted file mode 100644 index f621173e..00000000 --- a/src/validation/protocols/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './fieldValidation' diff --git a/src/validation/validators/compareFieldValidation.ts b/src/validation/validators/compareFieldValidation.ts deleted file mode 100644 index e12da691..00000000 --- a/src/validation/validators/compareFieldValidation.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { IFieldValidation } from '@/validation/protocols' - -import { InvalidFieldError } from '../errors/invalidFieldError' - -export class CompareFieldsValidation implements IFieldValidation { - constructor( - readonly field: string, - private readonly fieldToCompare: string - ) {} - - validate(input: object): Error | null { - const [, value] = - Object.entries(input).find(([fieldName]) => fieldName === this.field) || - [] - - const [, valueToCompare] = - Object.entries(input).find( - ([fieldName]) => fieldName === this.fieldToCompare - ) || [] - - if (value !== valueToCompare) { - return new InvalidFieldError('Os campos precisam ser iguais') - } - - return null - } -} diff --git a/src/validation/validators/cpfValidation.ts b/src/validation/validators/cpfValidation.ts index f354ed39..6bc4ef74 100644 --- a/src/validation/validators/cpfValidation.ts +++ b/src/validation/validators/cpfValidation.ts @@ -1,59 +1,40 @@ -import { InvalidFieldError } from '../errors' -import { IFieldValidation } from '../protocols' - -export class CpfValidation implements IFieldValidation { - constructor(readonly field: string) {} - - isCpf(cpf: string): boolean { - if (!cpf) return false - - const sumWeights = (value: string, weights: number[]) => - weights.reduce( - (acc, weight, index) => acc + weight * Number(value[index]), - 0 - ) - - const validateSum = (sum: number) => - (sum * 10) % 11 === 10 ? 0 : (sum * 10) % 11 - - const firstDigit = (value: string) => { - const weights = Array.from({ length: 9 }, (_, index) => 10 - index) - const sum = sumWeights(value, weights) - return validateSum(sum) - } - - const secondDigit = (value: string) => { - const weights = Array.from({ length: 10 }, (_, index) => 11 - index) - const sum = sumWeights(value, weights) - return validateSum(sum) - } - - const cpfOnlyNumbers: string = cpf.replaceAll(/\D/gi, '') - - if (cpfOnlyNumbers.length !== 11) { - return false - } +export const cpfValidation = (cpf: string) => { + if (!cpf) return false + + const sumWeights = (value: string, weights: number[]) => + weights.reduce( + (acc, weight, index) => acc + weight * Number(value[index]), + 0 + ) + + const validateSum = (sum: number) => + (sum * 10) % 11 === 10 ? 0 : (sum * 10) % 11 + + const firstDigit = (value: string) => { + const weights = Array.from({ length: 9 }, (_, index) => 10 - index) + const sum = sumWeights(value, weights) + return validateSum(sum) + } - if (cpfOnlyNumbers[10] !== String(secondDigit(cpfOnlyNumbers))) { - return false - } + const secondDigit = (value: string) => { + const weights = Array.from({ length: 10 }, (_, index) => 11 - index) + const sum = sumWeights(value, weights) + return validateSum(sum) + } - if (cpfOnlyNumbers[9] !== String(firstDigit(cpfOnlyNumbers))) { - return false - } + const cpfOnlyNumbers: string = cpf.replaceAll(/\D/gi, '') - return true + if (cpfOnlyNumbers.length !== 11) { + return false } - validate(input: object): Error | null { - const [, cpf] = - Object.entries(input).find(([fieldName]) => fieldName === this.field) || - [] - - if (this.isCpf(cpf)) { - return null - } + if (cpfOnlyNumbers[10] !== String(secondDigit(cpfOnlyNumbers))) { + return false + } - return new InvalidFieldError('CPF inválido') + if (cpfOnlyNumbers[9] !== String(firstDigit(cpfOnlyNumbers))) { + return false } + + return true } diff --git a/src/validation/validators/emailValidation.ts b/src/validation/validators/emailValidation.ts index 619fa33d..e4bc18cb 100644 --- a/src/validation/validators/emailValidation.ts +++ b/src/validation/validators/emailValidation.ts @@ -1,20 +1,3 @@ import isEmail from 'validator/es/lib/isEmail' -import { InvalidFieldError } from '../errors' -import { IFieldValidation } from '../protocols' - -export class EmailValidation implements IFieldValidation { - constructor(readonly field: string) {} - - validate(input: object): Error | null { - const [, email] = - Object.entries(input).find(([fieldName]) => fieldName === this.field) || - [] - - if (isEmail(email)) { - return null - } - - return new InvalidFieldError('Email inválido') - } -} +export const emailValidation = (email: string) => isEmail(email) diff --git a/src/validation/validators/index.ts b/src/validation/validators/index.ts index 23cb8605..b3660da4 100644 --- a/src/validation/validators/index.ts +++ b/src/validation/validators/index.ts @@ -1,9 +1,5 @@ -export * from './compareFieldValidation' export * from './cpfValidation' export * from './emailValidation' -export * from './minLengthValidation' -export * from './minNumberValidation' export * from './passwordValidation' export * from './phoneValidation' -export * from './requiredFieldValidation' export * from './yearValidation' diff --git a/src/validation/validators/minLengthValidation.ts b/src/validation/validators/minLengthValidation.ts deleted file mode 100644 index d9cc68aa..00000000 --- a/src/validation/validators/minLengthValidation.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { InvalidFieldError } from '../errors' -import { IFieldValidation } from '../protocols' - -export class MinLengthValidation implements IFieldValidation { - constructor( - readonly field: string, - private readonly minLength: number - ) {} - - validate(input: object): Error | null { - const [, value] = - Object.entries(input).find(([fieldName]) => fieldName === this.field) || - [] - - if (value.length >= this.minLength) return null - - return new InvalidFieldError() - } -} diff --git a/src/validation/validators/minNumberValidation.ts b/src/validation/validators/minNumberValidation.ts deleted file mode 100644 index 94c2a01d..00000000 --- a/src/validation/validators/minNumberValidation.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { onlyNumbersMask } from '@/masker' - -import { InvalidFieldError } from '../errors' -import { IFieldValidation } from '../protocols' - -export class MinNumberValidation implements IFieldValidation { - constructor( - readonly field: string, - private readonly minValue: number - ) {} - - validate(input: object): Error | null { - const [, value] = - Object.entries(input).find(([fieldName]) => fieldName === this.field) || - [] - - const onlyNumber = Number(onlyNumbersMask(value)) - - if (onlyNumber >= this.minValue) return null - - return new InvalidFieldError() - } -} diff --git a/src/validation/validators/moneyValidation.ts b/src/validation/validators/moneyValidation.ts new file mode 100644 index 00000000..61aa887f --- /dev/null +++ b/src/validation/validators/moneyValidation.ts @@ -0,0 +1,6 @@ +import { onlyNumbersMask } from '@/masker' + +export const moneyValidation = (value: string, minValue: number) => { + const onlyNumbers = Number(onlyNumbersMask(value) ?? 0) + return onlyNumbers > minValue +} diff --git a/src/validation/validators/passwordValidation.ts b/src/validation/validators/passwordValidation.ts index ceacbb0a..ac85653a 100644 --- a/src/validation/validators/passwordValidation.ts +++ b/src/validation/validators/passwordValidation.ts @@ -1,30 +1,13 @@ import isStrongPassword from 'validator/es/lib/isStrongPassword' -import { InvalidFieldError } from '../errors' -import { IFieldValidation } from '../protocols' - -export class PasswordValidation implements IFieldValidation { - constructor(readonly field: string) {} - - validate(input: object): Error | null { - const [, password] = - Object.entries(input).find(([fieldName]) => fieldName === this.field) || - [] - - const passwordRules = { - minLength: 8, - minLowercase: 1, - minUppercase: 1, - minNumbers: 1, - minSymbols: 1 - } - - if (isStrongPassword(password, passwordRules)) { - return null - } - - return new InvalidFieldError( - 'O campo precisa ter 8 caracteres, 1 letra maiúscula, 1 letra minúscula, 1 número e 1 símbolo' - ) +export const passwordValidation = (password: string) => { + const passwordRules = { + minLength: 8, + minLowercase: 1, + minUppercase: 1, + minNumbers: 1, + minSymbols: 1 } + + return isStrongPassword(password, passwordRules) } diff --git a/src/validation/validators/phoneValidation.ts b/src/validation/validators/phoneValidation.ts index 44c9ede4..140652a0 100644 --- a/src/validation/validators/phoneValidation.ts +++ b/src/validation/validators/phoneValidation.ts @@ -1,24 +1,7 @@ import isMobilePhone from 'validator/es/lib/isMobilePhone' -import { InvalidFieldError } from '../errors' -import { IFieldValidation } from '../protocols' +export const phoneValidation = (phone: string) => { + const phoneWithoutMask = phone.replace(/\D/g, '') -export class PhoneValidation implements IFieldValidation { - constructor(readonly field: string) {} - - validate(input: object): Error | null { - const [, phone] = - Object.entries(input).find(([fieldName]) => fieldName === this.field) || - [] - - const phoneWithoutMask = phone.replace(/\D/g, '') - - if (isMobilePhone(phoneWithoutMask, 'pt-BR')) { - return null - } - - return new InvalidFieldError( - 'O campo precisa ser um número de celular válido' - ) - } + return isMobilePhone(phoneWithoutMask, 'pt-BR') } diff --git a/src/validation/validators/requiredFieldValidation.ts b/src/validation/validators/requiredFieldValidation.ts deleted file mode 100644 index c99fe4d3..00000000 --- a/src/validation/validators/requiredFieldValidation.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { RequiredFieldError } from '../errors' -import { IFieldValidation } from '../protocols' - -export class RequiredFieldValidation implements IFieldValidation { - constructor(readonly field: string) {} - - validate(input: object): Error | null { - const [, value] = - Object.entries(input).find(([fieldName]) => fieldName === this.field) || - [] - - if (value) return null - - return new RequiredFieldError() - } -} diff --git a/src/validation/validators/yearValidation.ts b/src/validation/validators/yearValidation.ts index 9a855145..97d79c29 100644 --- a/src/validation/validators/yearValidation.ts +++ b/src/validation/validators/yearValidation.ts @@ -1,19 +1,5 @@ -import { InvalidFieldError } from '../errors' -import { IFieldValidation } from '../protocols' +export const yearValidation = (year: string) => { + const yearAsNumber = Number(year) -export class YearValidation implements IFieldValidation { - constructor(readonly field: string) {} - - validate(input: object): Error | null { - const [, year] = - Object.entries(input).find(([fieldName]) => fieldName === this.field) || - [] - - const yearAsNumber = Number(year) - - if (yearAsNumber >= 1900 && yearAsNumber <= new Date().getFullYear()) - return null - - return new InvalidFieldError('O ano inserido é inválido') - } + return yearAsNumber >= 1900 && yearAsNumber <= new Date().getFullYear() } From 5627ec1cbab9fd7b9b0240f32b4be1ad70c84699 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Mon, 19 Aug 2024 12:44:39 -0300 Subject: [PATCH 134/162] perf: improve data table render performance --- .../components/ui/dataTable/dataTable.tsx | 92 ++++++++++--------- 1 file changed, 51 insertions(+), 41 deletions(-) diff --git a/src/presentation/components/ui/dataTable/dataTable.tsx b/src/presentation/components/ui/dataTable/dataTable.tsx index 9f9ddc13..be9629a3 100644 --- a/src/presentation/components/ui/dataTable/dataTable.tsx +++ b/src/presentation/components/ui/dataTable/dataTable.tsx @@ -1,11 +1,12 @@ import { useCallback, useMemo } from 'react' import { - OnChangeFn, - PaginationState, - RowData, - SortingState, - Updater, + type OnChangeFn, + type PaginationState, + type RowData, + type RowModel, + type SortingState, + type Updater, flexRender, getCoreRowModel, getPaginationRowModel, @@ -22,6 +23,43 @@ import { Tooltip } from '../tooltip' import { DataTableProps } from './types' +const TableBody = ({ + columns, + loading, + rowModel +}: Pick, 'loading' | 'columns'> & { + rowModel: RowModel +}) => { + if (loading) { + return ( + + + + + + ) + } + + if (!rowModel.rows.length) + return ( + + + No results. + + + ) + + return rowModel.rows.map((row) => ( + + {row.getVisibleCells().map((cell) => ( + + {flexRender(cell.column.columnDef.cell, cell.getContext())} + + ))} + + )) +} + export const DataTable = ({ columns, data, @@ -105,8 +143,6 @@ export const DataTable = ({ getPaginationRowModel: getPaginationRowModel() }) - const page = getState().pagination.pageIndex + 1 - const tooltipText = (value: 'asc' | 'desc' | false) => { if (value === 'asc') return 'Ordenar de forma de crescente' if (value === 'desc') return 'Ordenar de forma decrescente' @@ -114,46 +150,14 @@ export const DataTable = ({ return 'Limpar ordenação' } + const page = useMemo(() => getState().pagination.pageIndex + 1, [getState]) const showFinalEllipsis = useMemo(() => page + 2 > 3, [page]) - const isAfterFirstPage = useMemo(() => page > 1, [page]) - const isBeforeLastPage = useMemo( () => page + 1 < totalPages, [page, totalPages] ) - const tableBody = useCallback(() => { - if (loading) { - return ( - - - - - - ) - } - - if (!getRowModel().rows.length) - return ( - - - No results. - - - ) - - return getRowModel().rows.map((row) => ( - - {row.getVisibleCells().map((cell) => ( - - {flexRender(cell.column.columnDef.cell, cell.getContext())} - - ))} - - )) - }, [columns.length, getRowModel, loading]) - return (
    @@ -200,7 +204,13 @@ export const DataTable = ({ ))} - {tableBody()} + + +
    From 16c028ae5a9b188552a08758552cc502d31a04dc Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Mon, 19 Aug 2024 12:45:20 -0300 Subject: [PATCH 135/162] refactor: remove generic containers --- .../deleteContainer/deleteContainer.tsx | 34 ---------- .../containers/deleteContainer/index.ts | 2 - .../containers/deleteContainer/types.ts | 14 ----- src/presentation/containers/index.ts | 1 - .../containers/pageContainer/index.ts | 2 - .../pageContainer/pageContainer.tsx | 51 --------------- .../containers/pageContainer/types.ts | 18 ------ .../containers/sheetContainer/index.ts | 2 - .../sheetContainer/sheetContainer.tsx | 62 ------------------- .../containers/sheetContainer/types.ts | 24 ------- .../containers/tableContainer/index.ts | 2 - .../tableContainer/tableContainer.tsx | 24 ------- .../containers/tableContainer/types.ts | 8 --- 13 files changed, 244 deletions(-) delete mode 100644 src/presentation/containers/deleteContainer/deleteContainer.tsx delete mode 100644 src/presentation/containers/deleteContainer/index.ts delete mode 100644 src/presentation/containers/deleteContainer/types.ts delete mode 100644 src/presentation/containers/pageContainer/index.ts delete mode 100644 src/presentation/containers/pageContainer/pageContainer.tsx delete mode 100644 src/presentation/containers/pageContainer/types.ts delete mode 100644 src/presentation/containers/sheetContainer/index.ts delete mode 100644 src/presentation/containers/sheetContainer/sheetContainer.tsx delete mode 100644 src/presentation/containers/sheetContainer/types.ts delete mode 100644 src/presentation/containers/tableContainer/index.ts delete mode 100644 src/presentation/containers/tableContainer/tableContainer.tsx delete mode 100644 src/presentation/containers/tableContainer/types.ts diff --git a/src/presentation/containers/deleteContainer/deleteContainer.tsx b/src/presentation/containers/deleteContainer/deleteContainer.tsx deleted file mode 100644 index 2145c09e..00000000 --- a/src/presentation/containers/deleteContainer/deleteContainer.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { type FC } from 'react' - -import { AlertDialog } from '@/presentation/components/ui' - -import type { DeleteContainerProps } from './types' - -export const DeleteContainer: FC = ({ - open, - onOpenChange, - title, - description, - buttonCancel, - buttonConfirm -}) => ( - - {/* - - */} - - - {title} - {description} - - - - {buttonCancel.text} - - - {buttonConfirm.text} - - - - -) diff --git a/src/presentation/containers/deleteContainer/index.ts b/src/presentation/containers/deleteContainer/index.ts deleted file mode 100644 index b1841c18..00000000 --- a/src/presentation/containers/deleteContainer/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { DeleteContainer } from './deleteContainer' -export type { DeleteContainerProps } from './types' diff --git a/src/presentation/containers/deleteContainer/types.ts b/src/presentation/containers/deleteContainer/types.ts deleted file mode 100644 index 20695ef8..00000000 --- a/src/presentation/containers/deleteContainer/types.ts +++ /dev/null @@ -1,14 +0,0 @@ -export type DeleteContainerProps = { - title: string - description: string - open: boolean - onOpenChange: (isOpen: boolean) => void - buttonConfirm: { - text: string - onClick: () => void - } - buttonCancel: { - text: string - onClick?: () => void - } -} diff --git a/src/presentation/containers/index.ts b/src/presentation/containers/index.ts index 756bb950..28039e12 100644 --- a/src/presentation/containers/index.ts +++ b/src/presentation/containers/index.ts @@ -1,2 +1 @@ export * from './loggedContainer' -export * from './pageContainer' diff --git a/src/presentation/containers/pageContainer/index.ts b/src/presentation/containers/pageContainer/index.ts deleted file mode 100644 index 1654dc62..00000000 --- a/src/presentation/containers/pageContainer/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { PageContainer } from './pageContainer' -export type { PageContainerProps } from './types' diff --git a/src/presentation/containers/pageContainer/pageContainer.tsx b/src/presentation/containers/pageContainer/pageContainer.tsx deleted file mode 100644 index 3422d64b..00000000 --- a/src/presentation/containers/pageContainer/pageContainer.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import { DeleteContainer } from '../deleteContainer' -import { SheetContainer } from '../sheetContainer' -import { TableContainer } from '../tableContainer' - -import type { PageContainerProps } from './types' -import type { RowData } from '@tanstack/react-table' -import type { FieldValues } from 'react-hook-form' - -export const PageContainer = < - TData extends RowData & { id: string }, - TValues extends FieldValues ->({ - header, - tableContainer, - sheetContainer, - deleteContainer -}: PageContainerProps) => ( -
    -
    -
    -
    - - {header.title} - -

    {header.description}

    -
    - - -
    -
    -
    - -
    - - -
    -) diff --git a/src/presentation/containers/pageContainer/types.ts b/src/presentation/containers/pageContainer/types.ts deleted file mode 100644 index c98e6477..00000000 --- a/src/presentation/containers/pageContainer/types.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { DeleteContainerProps } from '../deleteContainer' -import type { SheetContainerProps } from '@/presentation/containers/sheetContainer' -import type { TableContainerProps } from '@/presentation/containers/tableContainer/' -import type { RowData } from '@tanstack/react-table' -import type { FieldValues } from 'react-hook-form' - -export type PageContainerProps< - TData extends RowData & { id: string }, - TValues extends FieldValues -> = { - header: { - title: string - description: string - } - sheetContainer: SheetContainerProps - tableContainer: TableContainerProps - deleteContainer: DeleteContainerProps -} diff --git a/src/presentation/containers/sheetContainer/index.ts b/src/presentation/containers/sheetContainer/index.ts deleted file mode 100644 index 0d30e817..00000000 --- a/src/presentation/containers/sheetContainer/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { SheetContainer } from './sheetContainer' -export type { SheetContainerProps } from './types' diff --git a/src/presentation/containers/sheetContainer/sheetContainer.tsx b/src/presentation/containers/sheetContainer/sheetContainer.tsx deleted file mode 100644 index ac3a8fbe..00000000 --- a/src/presentation/containers/sheetContainer/sheetContainer.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import { Fragment } from 'react' - -import { FieldValues } from 'react-hook-form' - -import { Button, Form, Loading, Sheet } from '@/presentation/components/ui' - -import { SheetContainerProps } from './types' - -export const SheetContainer = ({ - buttonAddText, - title, - description, - loading, - form, - footerButtons, - open, - onOpenChange, - renderData, - handleSubmit -}: SheetContainerProps) => ( - - - - - - - {title} - {description} - - -
    - {loading ? ( -
    - -
    - ) : ( - renderData() - )} - - {!loading && ( - - {footerButtons.map(({ key, component, isCloser = false }) => { - if (isCloser) { - return ( - - {component} - - ) - } - - return {component} - })} - - )} -
    -
    -
    -
    -) diff --git a/src/presentation/containers/sheetContainer/types.ts b/src/presentation/containers/sheetContainer/types.ts deleted file mode 100644 index 610e36a8..00000000 --- a/src/presentation/containers/sheetContainer/types.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { ReactNode } from 'react' - -import { useHookForm } from '@/presentation/hooks' - -import type { FieldValues } from 'react-hook-form' - -type FooterButton = { - key: string - component: React.ReactNode - isCloser?: boolean -} - -export type SheetContainerProps = { - buttonAddText: string - title: string - description: string - loading: boolean - form: ReturnType> - footerButtons: FooterButton[] - open: boolean - onOpenChange: (open: boolean) => void - renderData: () => ReactNode - handleSubmit: () => void -} diff --git a/src/presentation/containers/tableContainer/index.ts b/src/presentation/containers/tableContainer/index.ts deleted file mode 100644 index 25894a70..00000000 --- a/src/presentation/containers/tableContainer/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { TableContainer } from './tableContainer' -export type { TableContainerProps } from './types' diff --git a/src/presentation/containers/tableContainer/tableContainer.tsx b/src/presentation/containers/tableContainer/tableContainer.tsx deleted file mode 100644 index da9d4896..00000000 --- a/src/presentation/containers/tableContainer/tableContainer.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { RowData } from '@tanstack/react-table' - -import { DataTable, Input } from '@/presentation/components/ui' - -import { TableContainerProps } from './types' - -export const TableContainer = ({ - table, - inputSearch -}: TableContainerProps) => ( - <> -
    - -
    - - columns={table.columns} - data={table.data} - totalPages={table.totalPages} - sorting={table.sorting} - pagination={table.pagination} - loading={table.loading} - /> - -) diff --git a/src/presentation/containers/tableContainer/types.ts b/src/presentation/containers/tableContainer/types.ts deleted file mode 100644 index 023e8b04..00000000 --- a/src/presentation/containers/tableContainer/types.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { RowData } from '@tanstack/react-table' - -import type { DataTableProps, InputProps } from '@/presentation/components/ui' - -export type TableContainerProps = { - table: DataTableProps - inputSearch: InputProps -} From fb8b338adcf63fd94cc046f2dbca6ae7675f1bf6 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Mon, 19 Aug 2024 12:46:11 -0300 Subject: [PATCH 136/162] feat: add property page with its own containers --- src/domain/models/propertyModel.ts | 2 +- .../propertyDeleteDialogContaienr/index.tsx | 48 ++++ .../propertyDeleteDialogContaienr/types.ts | 9 + .../propertySheetContainer/index.tsx | 81 ++++++ .../tabs/collaboratorsTab.tsx | 83 ++++++ .../tabs/generalTab.tsx | 238 ++++++++++++++++++ .../propertySheetContainer/tabs/index.ts | 3 + .../tabs/totalAreaTab.tsx | 81 ++++++ .../propertySheetContainer/tabs/types.ts | 7 + .../propertySheetContainer/types.ts | 23 ++ .../usePropertySheetContainer.tsx | 146 +++++++++++ .../propertySheetContainer/validation.ts | 88 +++++++ src/presentation/pages/propertyPage/index.tsx | 183 ++++++-------- .../propertyPage/tabs/generalTab/index.tsx | 226 ----------------- .../propertyPage/tabs/generalTab/types.ts | 6 - .../pages/propertyPage/tabs/types.ts | 7 - src/presentation/pages/propertyPage/types.ts | 6 +- .../pages/propertyPage/usePropertyPage.tsx | 234 ++--------------- 18 files changed, 918 insertions(+), 553 deletions(-) create mode 100644 src/presentation/pages/propertyPage/containers/propertyDeleteDialogContaienr/index.tsx create mode 100644 src/presentation/pages/propertyPage/containers/propertyDeleteDialogContaienr/types.ts create mode 100644 src/presentation/pages/propertyPage/containers/propertySheetContainer/index.tsx create mode 100644 src/presentation/pages/propertyPage/containers/propertySheetContainer/tabs/collaboratorsTab.tsx create mode 100644 src/presentation/pages/propertyPage/containers/propertySheetContainer/tabs/generalTab.tsx create mode 100644 src/presentation/pages/propertyPage/containers/propertySheetContainer/tabs/index.ts create mode 100644 src/presentation/pages/propertyPage/containers/propertySheetContainer/tabs/totalAreaTab.tsx create mode 100644 src/presentation/pages/propertyPage/containers/propertySheetContainer/tabs/types.ts create mode 100644 src/presentation/pages/propertyPage/containers/propertySheetContainer/types.ts create mode 100644 src/presentation/pages/propertyPage/containers/propertySheetContainer/usePropertySheetContainer.tsx create mode 100644 src/presentation/pages/propertyPage/containers/propertySheetContainer/validation.ts delete mode 100644 src/presentation/pages/propertyPage/tabs/generalTab/index.tsx delete mode 100644 src/presentation/pages/propertyPage/tabs/generalTab/types.ts delete mode 100644 src/presentation/pages/propertyPage/tabs/types.ts diff --git a/src/domain/models/propertyModel.ts b/src/domain/models/propertyModel.ts index 2a7f58b1..eb24c3af 100644 --- a/src/domain/models/propertyModel.ts +++ b/src/domain/models/propertyModel.ts @@ -21,7 +21,7 @@ export type PropertyDetailsModel = { responsibleTechnicians: Option[] } collaborators: { - id: string + id?: string name: string hoursPerDay: string }[] diff --git a/src/presentation/pages/propertyPage/containers/propertyDeleteDialogContaienr/index.tsx b/src/presentation/pages/propertyPage/containers/propertyDeleteDialogContaienr/index.tsx new file mode 100644 index 00000000..7566d122 --- /dev/null +++ b/src/presentation/pages/propertyPage/containers/propertyDeleteDialogContaienr/index.tsx @@ -0,0 +1,48 @@ +import React from 'react' + +import { useMutation } from '@tanstack/react-query' +import toast from 'react-hot-toast' + +import { AlertDialog } from '@/presentation/components/ui' + +import { PropertyDeleteContainerProps } from './types' + +export const PropertyDeleteDialogContainer: React.FC< + PropertyDeleteContainerProps +> = ({ open, onOpen, property, deleteProperty }) => { + const { mutate: handleDeleteProperty } = useMutation({ + mutationFn: () => { + if (!property?.id) { + return Promise.reject(new Error('Not found Property')) + } + return deleteProperty.execute(property.id) + }, + onSuccess: () => { + toast.success('Propriedade removida com sucesso') + onOpen(false) + }, + onError: () => { + toast.error('Não foi possível remover essa propriedade') + onOpen(false) + } + }) + + return ( + + + + {`Deseja remover a propriedade ${property?.name}`} + + Não será possível desfazer essa ação! + + + + Cancelar + handleDeleteProperty()}> + Remover + + + + + ) +} diff --git a/src/presentation/pages/propertyPage/containers/propertyDeleteDialogContaienr/types.ts b/src/presentation/pages/propertyPage/containers/propertyDeleteDialogContaienr/types.ts new file mode 100644 index 00000000..faa0ba74 --- /dev/null +++ b/src/presentation/pages/propertyPage/containers/propertyDeleteDialogContaienr/types.ts @@ -0,0 +1,9 @@ +import type { PropertyModel } from '@/domain/models' +import type { IDeleteProperty } from '@/domain/useCases' + +export type PropertyDeleteContainerProps = { + property?: PropertyModel + open: boolean + deleteProperty: IDeleteProperty + onOpen: (open: boolean) => void +} diff --git a/src/presentation/pages/propertyPage/containers/propertySheetContainer/index.tsx b/src/presentation/pages/propertyPage/containers/propertySheetContainer/index.tsx new file mode 100644 index 00000000..ed449da6 --- /dev/null +++ b/src/presentation/pages/propertyPage/containers/propertySheetContainer/index.tsx @@ -0,0 +1,81 @@ +import React from 'react' + +import { + Loading, + Button, + Tabs, + Form, + Sheet +} from '@/presentation/components/ui' + +import { usePropertySheetContainer } from './usePropertySheetContainer' + +import type { PropertySheetContainerProps } from './types' + +export const PropertySheetContainer: React.FC = ( + props +) => { + const { property, open, onOpen } = props + + const { + tabs, + form, + activeTab, + setActiveTab, + handleSubmit, + isPropertyDetailsLoading + } = usePropertySheetContainer(props) + + return ( + + + + + {property?.id + ? `Atualizar Propriedade ${property?.name}` + : 'Nova Propriedade'} + + {`Preencha o formulário para ${property?.id ? 'atualizar a' : 'criar uma nova'} propriedade`} + + +
    handleSubmit())} + > + {isPropertyDetailsLoading ? ( +
    + +
    + ) : ( + + + {tabs.map((tab) => ( + setActiveTab(tab.value)} + > + {tab.title} + + ))} + + + {tabs.find((tab) => tab.value === activeTab)?.component} + + + )} + + {!form.formState.isLoading && ( + + + + )} +
    +
    +
    +
    + ) +} diff --git a/src/presentation/pages/propertyPage/containers/propertySheetContainer/tabs/collaboratorsTab.tsx b/src/presentation/pages/propertyPage/containers/propertySheetContainer/tabs/collaboratorsTab.tsx new file mode 100644 index 00000000..37fabcf4 --- /dev/null +++ b/src/presentation/pages/propertyPage/containers/propertySheetContainer/tabs/collaboratorsTab.tsx @@ -0,0 +1,83 @@ +import { useCallback } from 'react' + +import { Plus, Trash2 } from 'lucide-react' +import { useFieldArray } from 'react-hook-form' + +import { Button, Form, Input } from '@/presentation/components/ui' + +import type { TabProps } from './types' + +export const CollaboratorsTab: React.FC = ({ form }) => { + const { control } = form + const { fields, append, remove } = useFieldArray({ + name: 'collaborators', + control + }) + + const handleAddCollaborator = useCallback( + () => + append({ + name: '', + hoursPerDay: '' + }), + [append] + ) + + return ( +
    + {fields.map((field, index) => ( +
    + { + const { error } = fieldState + + return ( + + Nome + + + + + + ) + }} + /> + + { + const { error } = fieldState + + return ( + + Horas/Dia + +
    + + +
    +
    + +
    + ) + }} + /> +
    + ))} + + +
    + ) +} diff --git a/src/presentation/pages/propertyPage/containers/propertySheetContainer/tabs/generalTab.tsx b/src/presentation/pages/propertyPage/containers/propertySheetContainer/tabs/generalTab.tsx new file mode 100644 index 00000000..d8abf967 --- /dev/null +++ b/src/presentation/pages/propertyPage/containers/propertySheetContainer/tabs/generalTab.tsx @@ -0,0 +1,238 @@ +import { useEffect, useMemo, useState } from 'react' + +import { useQuery } from '@tanstack/react-query' +import { Plus, Trash2 } from 'lucide-react' +import { useFieldArray } from 'react-hook-form' +import toast from 'react-hot-toast' + +import { moneyMask } from '@/masker' +import { + Input, + Form, + Combobox, + Button, + Label +} from '@/presentation/components/ui' +import { useDebounce } from '@/presentation/hooks' + +import type { TabProps } from './types' +import type { IGetAllUsers } from '@/domain/useCases' + +type GeneralTabProps = TabProps & { + getAllUsers: IGetAllUsers +} + +export const GeneralTab: React.FC = ({ + form, + getAllUsers +}) => { + const { + control, + getValues, + formState: { errors } + } = form + const { + fields, + append: handleAddTechnician, + remove: handleRemoveTechnician, + update: handleUpdateTechnician + } = useFieldArray({ + name: 'general.responsibleTechnicians', + control + }) + const [search, setSearch] = useState('') + const debouncedSearch = useDebounce({ value: search, delayInMs: 1000 }) + + const { + data: allUsersData = [], + isError, + isLoading + } = useQuery({ + queryKey: ['technicians', debouncedSearch], + queryFn: () => getAllUsers.execute(debouncedSearch) + }) + + const usersToAdd = useMemo( + () => + allUsersData.filter( + (user) => + !getValues('general.responsibleTechnicians').some( + (technician) => technician.value === user.value + ) + ), + [allUsersData, getValues] + ) + + useEffect(() => { + if (isError) { + toast.error('Erro ao buscar técnicos') + } + }, [isError]) + + return ( + <> + { + const { error } = fieldState + + return ( + + Nome da Propriedade + + + + + + ) + }} + /> + { + const { error } = fieldState + + return ( + + Município + + + + + + ) + }} + /> + { + const { error } = fieldState + + return ( + + Produtor + + + + + + ) + }} + /> + { + const { error } = fieldState + + return ( + + Preço médio da terra nua (R$/ha) + + + + + + ) + }} + /> + { + const { error } = fieldState + + return ( + + + Valor médio de arrendamento para pecuária na região (R$/ha/ano) + + + + + + + ) + }} + /> + +
    + {fields?.length ? ( +
    + {fields.map(({ id }, index) => ( + { + const error = + formState.errors?.general?.responsibleTechnicians?.[index] + ?.message + + const { value: technician } = field + + return ( + + Técnicos responsáveis + + +
    + setSearch(value)} + handleSelect={(selectedTechnician) => + handleUpdateTechnician(index, selectedTechnician) + } + isError={!!error} + /> + +
    +
    + +
    + ) + }} + /> + ))} +
    + ) : ( +
    + + {errors.general?.responsibleTechnicians?.root?.message && ( + + )} +
    + )} + + +
    + + ) +} diff --git a/src/presentation/pages/propertyPage/containers/propertySheetContainer/tabs/index.ts b/src/presentation/pages/propertyPage/containers/propertySheetContainer/tabs/index.ts new file mode 100644 index 00000000..22c9b31a --- /dev/null +++ b/src/presentation/pages/propertyPage/containers/propertySheetContainer/tabs/index.ts @@ -0,0 +1,3 @@ +export { GeneralTab } from './generalTab' +export { CollaboratorsTab } from './collaboratorsTab' +export { TotalAreaTab } from './totalAreaTab' diff --git a/src/presentation/pages/propertyPage/containers/propertySheetContainer/tabs/totalAreaTab.tsx b/src/presentation/pages/propertyPage/containers/propertySheetContainer/tabs/totalAreaTab.tsx new file mode 100644 index 00000000..cef8ead7 --- /dev/null +++ b/src/presentation/pages/propertyPage/containers/propertySheetContainer/tabs/totalAreaTab.tsx @@ -0,0 +1,81 @@ +import { floatMask } from '@/masker' +import { Form, Input } from '@/presentation/components/ui' + +import { TabProps } from './types' + +export const TotalAreaTab: React.FC = ({ form }) => { + const { control } = form + + return ( + <> + { + const { error } = fieldState + + return ( + + Área destinada a Bovinocultura Leiteira + + + + + + ) + }} + /> + { + const { error } = fieldState + + return ( + + Área de pasto perene + + + + + + ) + }} + /> + { + const { error } = fieldState + + return ( + + Área de lavoura de verão + + + + + + ) + }} + /> + { + const { error } = fieldState + + return ( + + Área de lavoura de inverno + + + + + + ) + }} + /> + + ) +} diff --git a/src/presentation/pages/propertyPage/containers/propertySheetContainer/tabs/types.ts b/src/presentation/pages/propertyPage/containers/propertySheetContainer/tabs/types.ts new file mode 100644 index 00000000..ef1abd72 --- /dev/null +++ b/src/presentation/pages/propertyPage/containers/propertySheetContainer/tabs/types.ts @@ -0,0 +1,7 @@ +import { useHookForm } from '@/presentation/hooks' + +import type { PropertySchema } from '../types' + +export type TabProps = { + form: ReturnType> +} diff --git a/src/presentation/pages/propertyPage/containers/propertySheetContainer/types.ts b/src/presentation/pages/propertyPage/containers/propertySheetContainer/types.ts new file mode 100644 index 00000000..28c7120c --- /dev/null +++ b/src/presentation/pages/propertyPage/containers/propertySheetContainer/types.ts @@ -0,0 +1,23 @@ +import { z } from 'zod' + +import { propertySchema } from './validation' + +import type { PropertyModel } from '@/domain/models' +import type { + ICreateProperty, + IGetAllUsers, + IGetProperty, + IUpdateProperty +} from '@/domain/useCases' + +export type PropertySheetContainerProps = { + open: boolean + onOpen: (open: boolean) => void + property?: PropertyModel + createProperty: ICreateProperty + updateProperty: IUpdateProperty + getProperty: IGetProperty + getAllUsers: IGetAllUsers +} + +export type PropertySchema = z.infer diff --git a/src/presentation/pages/propertyPage/containers/propertySheetContainer/usePropertySheetContainer.tsx b/src/presentation/pages/propertyPage/containers/propertySheetContainer/usePropertySheetContainer.tsx new file mode 100644 index 00000000..417dfa1d --- /dev/null +++ b/src/presentation/pages/propertyPage/containers/propertySheetContainer/usePropertySheetContainer.tsx @@ -0,0 +1,146 @@ +import { useEffect, useMemo, useState } from 'react' + +import { zodResolver } from '@hookform/resolvers/zod' +import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' +import toast from 'react-hot-toast' + +import { useHookForm } from '@/presentation/hooks' + +import { CollaboratorsTab, GeneralTab, TotalAreaTab } from './tabs' +import { propertySchema } from './validation' + +import type { PropertySchema, PropertySheetContainerProps } from './types' + +const PROPERTY_DEFAULT_VALUES: PropertySchema = { + general: { + name: '', + producer: '', + state: '', + city: '', + nakedAveragePricePerHectare: '', + leaseAveragePricePerHectare: '', + responsibleTechnicians: [{ value: '', label: '' }] + }, + collaborators: [ + { + name: '', + hoursPerDay: '' + } + ], + totalArea: { + dairyCattleFarming: '', + perennialPasture: '', + summerPlowing: '', + winterPlowing: '' + }, + localization: { + latitude: '', + longitude: '', + images: [] + } +} + +export const usePropertySheetContainer = ({ + createProperty, + property, + updateProperty, + getAllUsers, + getProperty, + onOpen +}: PropertySheetContainerProps) => { + const queryClient = useQueryClient() + + const form = useHookForm({ + defaultValues: PROPERTY_DEFAULT_VALUES, + resolver: zodResolver(propertySchema) + }) + + const { getValues, reset } = form + + const { + isError: isPropertyDetailsError, + isLoading: isPropertyDetailsLoading + } = useQuery({ + queryKey: ['property', property?.id], + queryFn: async () => { + if (!property?.id) { + toast.error('Não foi possível buscar a propriedade') + return + } + + const data = await getProperty.execute(property.id) + reset(data) + }, + enabled: !!property?.id + }) + + const [activeTab, setActiveTab] = useState('general') + + const tabs = useMemo( + () => [ + { + value: 'general', + title: 'Dados Gerais', + component: + }, + { + value: 'collaborators', + title: 'Colaboradores', + component: + }, + { + value: 'totalArea', + title: 'Área Total', + component: + }, + { + value: 'localization', + title: 'Localização', + component: + } + ], + [form, getAllUsers] + ) + + const { mutate: handleSubmit } = useMutation({ + mutationFn: () => { + const values = getValues() + + return property?.id + ? updateProperty.execute({ + id: property?.id, + ...values + }) + : createProperty.execute(values) + }, + onSuccess: () => { + toast.success( + `Propriedade ${property?.id ? 'atualizada' : 'criada'} com sucesso` + ) + queryClient.invalidateQueries({ + queryKey: ['properties'] + }) + onOpen(false) + }, + onError: () => { + toast.error( + `Não foi possível ${property?.id ? 'atualizar' : 'criar'} a propriedade` + ) + } + }) + + useEffect(() => { + if (isPropertyDetailsError) { + toast.error('Erro ao buscar dados da propriedade') + } + }, [isPropertyDetailsError]) + + return { + tabs, + form, + activeTab, + setActiveTab, + handleSubmit, + isPropertyDetailsLoading + } +} diff --git a/src/presentation/pages/propertyPage/containers/propertySheetContainer/validation.ts b/src/presentation/pages/propertyPage/containers/propertySheetContainer/validation.ts new file mode 100644 index 00000000..5aacbab1 --- /dev/null +++ b/src/presentation/pages/propertyPage/containers/propertySheetContainer/validation.ts @@ -0,0 +1,88 @@ +import { z } from 'zod' + +import { moneyValidation } from '@/validation/validators/moneyValidation' + +const general = z.object({ + name: z.string().min(1, { + message: 'Nome da propriedade é obrigatório' + }), + producer: z.string().min(1, { + message: 'Nome do produtor é obrigatório' + }), + state: z.string().min(1, { + message: 'Estado é obrigatório' + }), + city: z.string().min(1, { + message: 'Cidade é obrigatório' + }), + nakedAveragePricePerHectare: z + .string() + .refine((value) => moneyValidation(value, 0.01), { + message: 'O valor mínimo é R$0,01' + }), + leaseAveragePricePerHectare: z + .string() + .refine((value) => moneyValidation(value, 0.01), { + message: 'O valor mínimo é R$0,01' + }), + responsibleTechnicians: z + .array( + z + .object({ + value: z.string(), + label: z.string() + }) + .refine(({ label, value }) => !!label || !!value, { + message: 'Selecione pelo menos um técnico responsável' + }) + ) + .nonempty({ + message: 'Adicione pelo menos um técnico' + }) +}) + +const collaborators = z.array( + z.object({ + name: z.string().min(1, { + message: 'Nome do colaborador é obrigatório' + }), + hoursPerDay: z.string().min(1, { + message: 'Hora de trabalho por dia do colaborador é obrigatório' + }) + }) +) + +const totalArea = z.object({ + dairyCattleFarming: z + .string() + .refine((value) => moneyValidation(value, 0.01), { + message: 'A Área destinada a bovinocultura é obrigatória' + }), + perennialPasture: z.string().refine((value) => moneyValidation(value, 0.01), { + message: 'A Área de pasto perene é obrigatória' + }), + summerPlowing: z.string().refine((value) => moneyValidation(value, 0.01), { + message: 'A Área de lavora de verão é obrigatória' + }), + winterPlowing: z.string().refine((value) => moneyValidation(value, 0.01), { + message: 'A Área de lavoura de inverno é obrigatória' + }) +}) + +const localization = z.object({ + latitude: z.string(), + longitude: z.string(), + images: z.array( + z.object({ + name: z.string(), + preview: z.string().url() + }) + ) +}) + +export const propertySchema = z.object({ + general, + collaborators, + totalArea, + localization +}) diff --git a/src/presentation/pages/propertyPage/index.tsx b/src/presentation/pages/propertyPage/index.tsx index 1545cefe..65ab9d2a 100644 --- a/src/presentation/pages/propertyPage/index.tsx +++ b/src/presentation/pages/propertyPage/index.tsx @@ -1,10 +1,11 @@ -import { Button, Tabs } from '@/presentation/components/ui' -import { PageContainer } from '@/presentation/containers' +import { Button, DataTable, Input } from '@/presentation/components/ui' +import { PropertyDeleteDialogContainer } from './containers/propertyDeleteDialogContaienr' +import { PropertySheetContainer } from './containers/propertySheetContainer' import { usePropertyPage } from './usePropertyPage' import type { PropertyPageProps } from './types' -import type { PropertyDetailsModel, PropertyModel } from '@/domain/models' +import type { PropertyModel } from '@/domain/models' export const PropertyPage: React.FC = ({ createProperty, @@ -12,23 +13,16 @@ export const PropertyPage: React.FC = ({ deleteProperty, getProperties, getProperty, - getAllUsers, - validation + getAllUsers }) => { const { - tabs, - isOpenSheet, - setIsOpenSheet, - isOpenDelete, - setIsOpenDelete, - activeTab, - setActiveTab, - form, - propertyToDelete, - propertyIdToUpdate, - propertyToUpdate, + selectedProperty, + setSelectedProperty, + openDelete, + setOpenDelete, + openSheet, + setOpenSheet, columns, - isPropertyDetailsLoading, isPropertiesLoading, properties, totalPages, @@ -37,100 +31,81 @@ export const PropertyPage: React.FC = ({ sort, setSort, filters, - setFilters, - handleSubmit, - handleDeleteProperty + setFilters } = usePropertyPage({ - createProperty, - updateProperty, - deleteProperty, - getProperties, - getProperty, - getAllUsers, - validation + getProperties }) return ( - - header={{ - title: 'Propriedades', - description: 'Gerenciamento das propriedades dos produtores' - }} - deleteContainer={{ - open: isOpenDelete, - onOpenChange: setIsOpenDelete, - title: `Deseja remover a propriedade ${propertyToDelete?.name}`, - description: 'Não será possível desfazer essa ação!', - buttonCancel: { - text: 'Cancelar' - }, - buttonConfirm: { - text: 'Remover', - onClick: handleDeleteProperty - } - }} - sheetContainer={{ - buttonAddText: 'Adicionar Propriedade', - title: propertyIdToUpdate - ? `Atualizar Propriedade ${propertyToUpdate?.name}` - : 'Nova Propriedade', - description: `Preencha o formulário para ${propertyIdToUpdate ? 'atualizar a' : 'criar uma nova'} propriedade`, - form, - handleSubmit, - open: isOpenSheet, - onOpenChange: setIsOpenSheet, - renderData: () => ( - - - {tabs.map((tab) => ( - setActiveTab(tab.value)} - > - {tab.title} - - ))} - - - {tabs.find((tab) => tab.value === activeTab)?.component} - - - ), - loading: form.formState.isLoading || isPropertyDetailsLoading, - footerButtons: [ - { - key: 'save', - component: - } - ] - }} - tableContainer={{ - inputSearch: { - value: filters.name, - onChange: ({ target: { value } }) => { - setFilters((prevState) => ({ - ...prevState, - name: value - })) - }, - placeholder: 'Procurar propriedades' - }, - table: { - columns, - totalPages, - data: properties, - pagination: { +
    +
    +
    +
    + + Propriedades + +

    + Gerenciamento das propriedades dos produtores +

    +
    + + +
    +
    +
    +
    + { + setFilters((prevState) => ({ + ...prevState, + name: target.value + })) + }} + placeholder="Procurar propriedade" + /> +
    + + columns={columns} + data={properties} + totalPages={totalPages} + pagination={{ currentPage: page, onPageChange: setPage - }, - sorting: { + }} + sorting={{ currentSorting: sort, onSorting: setSort - }, - loading: isPropertiesLoading - } - }} - /> + }} + loading={isPropertiesLoading} + /> +
    + + + + +
    ) } diff --git a/src/presentation/pages/propertyPage/tabs/generalTab/index.tsx b/src/presentation/pages/propertyPage/tabs/generalTab/index.tsx deleted file mode 100644 index d619b53d..00000000 --- a/src/presentation/pages/propertyPage/tabs/generalTab/index.tsx +++ /dev/null @@ -1,226 +0,0 @@ -import { useCallback, useEffect, useState } from 'react' - -import { useQuery } from '@tanstack/react-query' -import { Plus, Trash2 } from 'lucide-react' -import toast from 'react-hot-toast' - -import { moneyMask } from '@/masker' -import { Input, Form, Combobox, Button } from '@/presentation/components/ui' -import { useDebounce } from '@/presentation/hooks' - -import type { GeneralTabProps } from './types' - -export const GeneralTab: React.FC = ({ - form, - getAllUsers -}) => { - const { control, getValues, setValue } = form - const [search, setSearch] = useState('') - const debouncedSearch = useDebounce({ value: search, delayInMs: 1000 }) - - const handleRemoveTechnician = useCallback( - (value: string) => { - const technicians = getValues('general.responsibleTechnicians') - - setValue( - 'general.responsibleTechnicians', - technicians.filter((technician) => technician.value !== value) - ) - }, - [getValues, setValue] - ) - - const { - data: allUsersData = [], - isError, - isLoading - } = useQuery({ - queryKey: ['technicians', debouncedSearch], - queryFn: () => getAllUsers.execute(debouncedSearch) - }) - - useEffect(() => { - if (isError) { - toast.error('Erro ao buscar técnicos') - } - }, [isError]) - - return ( - <> - { - const { error } = fieldState - - return ( - - Nome da Propriedade - - - - - - ) - }} - /> - { - const { error } = fieldState - - return ( - - Município - - - - - - ) - }} - /> - { - const { error } = fieldState - - return ( - - Produtor - - - - - - ) - }} - /> - { - const { error } = fieldState - - return ( - - Preço médio da terra nua (R$/ha) - - - - - - ) - }} - /> - { - const { error } = fieldState - - return ( - - - Valor médio de arrendamento para pecuária na região (R$/ha/ano) - - - - - - - ) - }} - /> - { - const { value: technicians } = field - const nonEmptyTechnicians = technicians.filter( - (technician) => technician.value - ) - const { error } = fieldState - - return ( - - Técnicos responsáveis - -
    - {technicians.map((technician) => ( -
    - setSearch(value)} - handleSelect={(selectedTechnician) => - setValue('general.responsibleTechnicians', [ - ...nonEmptyTechnicians, - selectedTechnician - ]) - } - isError={!!error?.message} - /> - - -
    - ))} - - - - -
    -
    -
    - ) - }} - /> - - ) -} diff --git a/src/presentation/pages/propertyPage/tabs/generalTab/types.ts b/src/presentation/pages/propertyPage/tabs/generalTab/types.ts deleted file mode 100644 index 65ea24d3..00000000 --- a/src/presentation/pages/propertyPage/tabs/generalTab/types.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { TabProps } from '../types' -import type { IGetAllUsers } from '@/domain/useCases' - -export type GeneralTabProps = TabProps & { - getAllUsers: IGetAllUsers -} diff --git a/src/presentation/pages/propertyPage/tabs/types.ts b/src/presentation/pages/propertyPage/tabs/types.ts deleted file mode 100644 index e5561793..00000000 --- a/src/presentation/pages/propertyPage/tabs/types.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { useHookForm } from '@/presentation/hooks' - -import type { PropertyDetailsModel } from '@/domain/models' - -export type TabProps = { - form: ReturnType> -} diff --git a/src/presentation/pages/propertyPage/types.ts b/src/presentation/pages/propertyPage/types.ts index 71304028..6e455907 100644 --- a/src/presentation/pages/propertyPage/types.ts +++ b/src/presentation/pages/propertyPage/types.ts @@ -6,7 +6,6 @@ import type { IGetProperty, IUpdateProperty } from '@/domain/useCases' -import type { IValidation } from '@/presentation/protocols' export type PropertyPageProps = { createProperty: ICreateProperty @@ -15,5 +14,8 @@ export type PropertyPageProps = { getProperties: IGetProperties getProperty: IGetProperty getAllUsers: IGetAllUsers - validation: IValidation +} + +export type UsePropertyPageProps = { + getProperties: IGetProperties } diff --git a/src/presentation/pages/propertyPage/usePropertyPage.tsx b/src/presentation/pages/propertyPage/usePropertyPage.tsx index 35bfb1dc..59da4987 100644 --- a/src/presentation/pages/propertyPage/usePropertyPage.tsx +++ b/src/presentation/pages/propertyPage/usePropertyPage.tsx @@ -1,55 +1,20 @@ import { useEffect, useMemo, useState } from 'react' -import { useMutation, useQuery } from '@tanstack/react-query' +import { useQuery } from '@tanstack/react-query' import { MoreHorizontal, Pencil, Trash2 } from 'lucide-react' import toast from 'react-hot-toast' import { DropdownMenu } from '@/presentation/components/ui' -import { useDebounce, useHookForm } from '@/presentation/hooks' +import { useDebounce } from '@/presentation/hooks' -import { GeneralTab } from './tabs/generalTab' - -import type { PropertyPageProps } from './types' -import type { PropertyDetailsModel, PropertyModel } from '@/domain/models' +import type { UsePropertyPageProps } from './types' +import type { PropertyModel } from '@/domain/models' import type { Filters, Sort } from '@/domain/shared/types' import type { ColumnDef } from '@tanstack/react-table' -const PROPERTY_DEFAULT_VALUES: PropertyDetailsModel = { - general: { - name: '', - producer: '', - state: '', - city: '', - nakedAveragePricePerHectare: '', - leaseAveragePricePerHectare: '', - responsibleTechnicians: [] - }, - collaborators: [], - totalArea: { - dairyCattleFarming: '', - perennialPasture: '', - summerPlowing: '', - winterPlowing: '' - }, - localization: { - latitude: '', - longitude: '', - images: [] - } -} - -export const usePropertyPage = ({ - createProperty, - updateProperty, - deleteProperty, - getProperties, - getProperty, - getAllUsers, - validation -}: PropertyPageProps) => { - const [isOpenSheet, setIsOpenSheet] = useState(false) - const [isOpenDelete, setIsOpenDelete] = useState(false) - const [activeTab, setActiveTab] = useState('general') +export const usePropertyPage = ({ getProperties }: UsePropertyPageProps) => { + const [openSheet, setOpenSheet] = useState(false) + const [openDelete, setOpenDelete] = useState(false) const [filters, setFilters] = useState>>( { name: '' @@ -57,35 +22,10 @@ export const usePropertyPage = ({ ) const [page, setPage] = useState(1) const [sort, setSort] = useState | undefined>() - const [propertyIdToUpdate, setPropertyIdToUpdate] = useState( - null - ) - const [propertyIdToDelete, setPropertyIdToDelete] = useState( - null - ) + const [selectedProperty, setSelectedProperty] = useState() const debouncedFilters = useDebounce({ value: filters, delayInMs: 1000 }) - const form = useHookForm({ - defaultValues: PROPERTY_DEFAULT_VALUES, - schemaResolver: (data) => validation.validate({ data }) - }) - const { getValues, reset } = form - - const { - data: propertyDetails, - isError: isPropertyDetailsError, - isLoading: isPropertyDetailsLoading, - refetch: handleGetPropertyDetails - } = useQuery({ - queryKey: ['property', propertyIdToUpdate], - queryFn: async () => { - if (!propertyIdToUpdate) return undefined - return getProperty.execute(propertyIdToUpdate) - }, - enabled: false - }) - const { data: propertiesData, isError: isPropertiesError, @@ -97,52 +37,8 @@ export const usePropertyPage = ({ pagination: { page }, sort, filters: debouncedFilters - }) - }) - - const { mutate: handleSubmit } = useMutation({ - mutationFn: () => { - const values = getValues() - - return propertyIdToUpdate - ? updateProperty.execute({ - id: propertyIdToUpdate, - ...values - }) - : createProperty.execute(values) - }, - onSuccess: () => { - toast.success( - `Propriedade ${propertyIdToUpdate ? 'atualizada' : 'criada'} com sucesso` - ) - setPropertyIdToUpdate(null) - setIsOpenSheet(false) - }, - onError: () => { - toast.error( - `Não foi possível ${propertyIdToUpdate ? 'atualizar' : 'criar'} a propriedade` - ) - } - }) - - const { mutate: handleDeleteProperty } = useMutation({ - mutationFn: () => { - if (!propertyIdToDelete) { - return Promise.reject(new Error('Not found Property')) - } - - return deleteProperty.execute(propertyIdToDelete) - }, - onSuccess: () => { - toast.success('Propriedade removida com sucesso') - setPropertyIdToDelete(null) - setIsOpenDelete(false) - }, - onError: () => { - toast.error('Não foi possível remover essa propriedade') - setPropertyIdToDelete(null) - setIsOpenDelete(false) - } + }), + staleTime: Infinity }) const { properties, totalPages } = useMemo( @@ -153,42 +49,6 @@ export const usePropertyPage = ({ [propertiesData] ) - const propertyToUpdate = useMemo( - () => properties.find((property) => property.id === propertyIdToUpdate), - [properties, propertyIdToUpdate] - ) - - const propertyToDelete = useMemo( - () => properties.find((property) => property.id === propertyIdToDelete), - [properties, propertyIdToDelete] - ) - - const tabs = useMemo( - () => [ - { - value: 'general', - title: 'Dados Gerais', - component: - }, - { - value: 'collaborators', - title: 'Colaboradores', - component: - }, - { - value: 'totalArea', - title: 'Área Total', - component: - }, - { - value: 'localization', - title: 'Localização', - component: - } - ], - [form, getAllUsers] - ) - const columns = useMemo[]>( () => [ { @@ -208,24 +68,30 @@ export const usePropertyPage = ({ id: 'row-actions', header: '', cell: ({ row }) => { - const { id } = row.original + const { original: property } = row return ( - + setPropertyIdToUpdate(id)} + onClick={() => { + setSelectedProperty(property) + setOpenSheet(true) + }} > Editar setPropertyIdToDelete(id)} + onClick={() => { + setSelectedProperty(property) + setOpenDelete(true) + }} > Excluir @@ -238,64 +104,20 @@ export const usePropertyPage = ({ [] ) - useEffect(() => { - if (propertyIdToUpdate) { - setIsOpenSheet(true) - handleGetPropertyDetails() - } - }, [handleGetPropertyDetails, propertyIdToUpdate]) - - useEffect(() => { - if (propertyIdToDelete) { - setIsOpenDelete(true) - } - }, [propertyIdToDelete]) - - useEffect(() => { - reset(propertyDetails) - }, [propertyDetails, reset]) - - useEffect(() => { - if (!isOpenSheet) { - reset(PROPERTY_DEFAULT_VALUES) - setPropertyIdToUpdate(null) - } - }, [isOpenSheet, reset]) - - useEffect(() => { - if (!isOpenDelete) { - setPropertyIdToDelete(null) - } - }, [isOpenDelete]) - useEffect(() => { if (isPropertiesError) { toast.error('Não foi possível listar as propriedades') } }, [isPropertiesError]) - useEffect(() => { - if (isPropertyDetailsError) { - setPropertyIdToUpdate(null) - setIsOpenSheet(false) - toast.error('Não foi possível buscar dados dessa propriedade') - } - }, [isPropertyDetailsError]) - return { - tabs, - isOpenSheet, - setIsOpenSheet, - isOpenDelete, - setIsOpenDelete, - activeTab, - setActiveTab, - form, - propertyToDelete, - propertyToUpdate, - propertyIdToUpdate, + openSheet, + setOpenSheet, + openDelete, + setOpenDelete, + selectedProperty, + setSelectedProperty, columns, - isPropertyDetailsLoading, isPropertiesLoading, properties, totalPages, @@ -304,8 +126,6 @@ export const usePropertyPage = ({ sort, setSort, filters, - setFilters, - handleSubmit, - handleDeleteProperty + setFilters } } From 381e18256ecd227525e01071576f30843cde449b Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Mon, 19 Aug 2024 12:47:45 -0300 Subject: [PATCH 137/162] refactor: signup page --- src/presentation/pages/signUpPage/index.tsx | 25 +++----- src/presentation/pages/signUpPage/types.ts | 13 +---- .../pages/signUpPage/useSignUpPage.ts | 44 ++++++-------- .../signUpPage/useSignUpPageInputData.tsx | 31 ++++++---- .../pages/signUpPage/validation.ts | 58 +++++++++++++++++++ 5 files changed, 105 insertions(+), 66 deletions(-) create mode 100644 src/presentation/pages/signUpPage/validation.ts diff --git a/src/presentation/pages/signUpPage/index.tsx b/src/presentation/pages/signUpPage/index.tsx index 016915cd..45ba5f67 100644 --- a/src/presentation/pages/signUpPage/index.tsx +++ b/src/presentation/pages/signUpPage/index.tsx @@ -8,28 +8,17 @@ import type { SignUpPageProps } from './types' export const SignUpPage: React.FC = ({ createUser, - getCep, - validation + getCep }) => { - const { - form, - isFirstStep, - buttonDisabled, - cepLoading, - handleSubmit, - handleFetchCep, - handleOnClearCepDebounce - } = useSignUpPage({ - createUser, - getCep, - validation - }) + const { form, isFirstStep, buttonDisabled, cepLoading, handleSubmit } = + useSignUpPage({ + createUser, + getCep + }) const { inputDataFirstStep, inputDataSecondStep } = useSignUpPageInputData({ control: form.control, - cepLoading, - cepDebounceCallback: handleFetchCep, - handleOnClearCepDebounce + cepLoading }) return ( diff --git a/src/presentation/pages/signUpPage/types.ts b/src/presentation/pages/signUpPage/types.ts index b141a7a1..521c936c 100644 --- a/src/presentation/pages/signUpPage/types.ts +++ b/src/presentation/pages/signUpPage/types.ts @@ -1,22 +1,15 @@ import { Control } from 'react-hook-form' -import { CreateUserModel } from '@/domain/models' -import { ICreateUser } from '@/domain/useCases' -import { IGetCep } from '@/domain/useCases/cep' -import { ValidationComposite } from '@/main/composite' +import type { CreateUserModel } from '@/domain/models' +import type { ICreateUser } from '@/domain/useCases' +import type { IGetCep } from '@/domain/useCases/cep' export type SignUpPageProps = { createUser: ICreateUser getCep: IGetCep - validation: { - firstStepValidation: ValidationComposite - validation: ValidationComposite - } } export type UseInputDataProps = { control: Control cepLoading: boolean - cepDebounceCallback: () => Promise - handleOnClearCepDebounce: () => void } diff --git a/src/presentation/pages/signUpPage/useSignUpPage.ts b/src/presentation/pages/signUpPage/useSignUpPage.ts index a15e3502..805084f4 100644 --- a/src/presentation/pages/signUpPage/useSignUpPage.ts +++ b/src/presentation/pages/signUpPage/useSignUpPage.ts @@ -1,15 +1,17 @@ -import { useCallback, useState } from 'react' +import { useCallback, useEffect, useState } from 'react' +import { zodResolver } from '@hookform/resolvers/zod' import { AxiosError } from 'axios' import { toast } from 'react-hot-toast' import { CreateUserModel } from '@/domain/models' import { PAGE_PATHS } from '@/main/routes/paths' import { onlyNumbersMask } from '@/masker' -import { useIdrHistory } from '@/presentation/hooks' +import { useDebounce, useIdrHistory } from '@/presentation/hooks' import { useHookForm } from '@/presentation/hooks/useHookForm' import { SignUpPageProps } from './types' +import { signUpSchema } from './validation' const INITIAL_FORM_DATA: CreateUserModel = { name: '', @@ -27,8 +29,7 @@ const INITIAL_FORM_DATA: CreateUserModel = { } export const useSignUpPage = (props: SignUpPageProps) => { - const { createUser, getCep, validation } = props - const { firstStepValidation, validation: validationForm } = validation + const { createUser, getCep } = props const [cepLoading, setCepLoading] = useState(false) const [firstStepData, setFirstStepData] = useState>( @@ -38,13 +39,16 @@ export const useSignUpPage = (props: SignUpPageProps) => { const { navigate } = useIdrHistory() - const form = useHookForm({ + const form = useHookForm({ defaultValues: INITIAL_FORM_DATA, - schemaResolver: (data) => { - if (isFirstStep) return firstStepValidation.validate({ data }) + resolver: zodResolver( + isFirstStep ? signUpSchema.firstStep : signUpSchema.secondStep + ) + }) - return validationForm.validate({ data }) - } + const debouncedCep = useDebounce({ + value: form.getValues('cep'), + delayInMs: 1000 }) const { @@ -124,22 +128,11 @@ export const useSignUpPage = (props: SignUpPageProps) => { } }, [getCep, getValues, setValue]) - const handleOnClearCepDebounce = useCallback(() => { - const fieldsToUpdate = { - cep: '', - city: '', - street: '' + useEffect(() => { + if (debouncedCep) { + handleFetchCep() } - - Object.entries(fieldsToUpdate).forEach(([field, value]) => { - const typedField = field as keyof CreateUserModel - setValue(typedField, value, { - shouldDirty: true, - shouldValidate: true, - shouldTouch: true - }) - }) - }, [setValue]) + }, [debouncedCep, handleFetchCep]) return { cepLoading, @@ -148,7 +141,6 @@ export const useSignUpPage = (props: SignUpPageProps) => { isFirstStep, goToLoginPage, handleFetchCep, - handleSubmit, - handleOnClearCepDebounce + handleSubmit } } diff --git a/src/presentation/pages/signUpPage/useSignUpPageInputData.tsx b/src/presentation/pages/signUpPage/useSignUpPageInputData.tsx index 0225b3eb..3e9ec0cf 100644 --- a/src/presentation/pages/signUpPage/useSignUpPageInputData.tsx +++ b/src/presentation/pages/signUpPage/useSignUpPageInputData.tsx @@ -10,16 +10,15 @@ import type { UseInputDataProps } from './types' export const useSignUpPageInputData = ({ control, - cepLoading, - cepDebounceCallback, - handleOnClearCepDebounce + cepLoading }: UseInputDataProps) => { const [viewPassword, setViewPassword] = useState(false) const [viewConfirmPassword, setViewConfirmPassword] = useState(false) const inputDataFirstStep = [ - + { @@ -41,6 +40,7 @@ export const useSignUpPageInputData = ({ }} /> { @@ -68,8 +68,9 @@ export const useSignUpPageInputData = ({ }} /> , - + { @@ -101,6 +102,7 @@ export const useSignUpPageInputData = ({ }} /> { @@ -133,8 +135,9 @@ export const useSignUpPageInputData = ({ }} /> , - + { @@ -157,6 +160,7 @@ export const useSignUpPageInputData = ({ }} /> { @@ -179,8 +183,9 @@ export const useSignUpPageInputData = ({ }} /> , - + { @@ -203,6 +208,7 @@ export const useSignUpPageInputData = ({ }} /> { @@ -228,8 +234,9 @@ export const useSignUpPageInputData = ({ ] const inputDataSecondStep = [ - + { @@ -244,9 +251,6 @@ export const useSignUpPageInputData = ({ isError={!!cep?.message} placeholder="Digite seu CEP" mask={cepMask} - debounce={500} - debounceCallback={cepDebounceCallback} - handleOnClearDebounce={handleOnClearCepDebounce} /> @@ -255,6 +259,7 @@ export const useSignUpPageInputData = ({ }} /> { @@ -278,8 +283,9 @@ export const useSignUpPageInputData = ({ }} /> , - + { @@ -303,6 +309,7 @@ export const useSignUpPageInputData = ({ }} /> ( diff --git a/src/presentation/pages/signUpPage/validation.ts b/src/presentation/pages/signUpPage/validation.ts new file mode 100644 index 00000000..7ed5b43e --- /dev/null +++ b/src/presentation/pages/signUpPage/validation.ts @@ -0,0 +1,58 @@ +import { z } from 'zod' + +import { + cpfValidation, + emailValidation, + passwordValidation, + phoneValidation, + yearValidation +} from '@/validation/validators' + +const firstStep = z + .object({ + name: z.string().min(1, { + message: 'Nome é obrigatório' + }), + email: z.string().refine(emailValidation, { + message: 'Email precisa ser válido' + }), + password: z.string().refine(passwordValidation, { + message: + 'O campo precisa ter 8 caracteres, 1 letra maiúscula, 1 letra minúscula, 1 número e 1 símbolo' + }), + confirmPassword: z.string(), + cpf: z.string().refine(cpfValidation, { + message: 'CPF precisa ser válido' + }), + phone: z.string().refine(phoneValidation, { + message: 'Celular precisa ser válido' + }), + graduationYear: z.string().refine(yearValidation, { + message: 'Ano de graduação precisa ser válido' + }), + professionalRegister: z.string().min(1, { + message: 'Registro profissional é obrigatório' + }) + }) + .refine((data) => data.password === data.confirmPassword, { + message: 'As senhas precisam ser iguais', + path: ['confirmPassword'] + }) + +const secondStep = z.object({ + cep: z.string().min(1, { + message: 'CEP é obrigatório' + }), + street: z.string().min(1, { + message: 'Rua é obrigatório' + }), + city: z.string().min(1, { + message: 'Cidade é obrigatório' + }), + houseNumber: z.string().optional() +}) + +export const signUpSchema = { + firstStep, + secondStep +} From 8a00adb915e869dddf8b2bb3bccba1c6fa94332e Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Mon, 19 Aug 2024 12:48:09 -0300 Subject: [PATCH 138/162] feat: add react query devtools --- src/main.tsx | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main.tsx b/src/main.tsx index 0eedddb5..67a4d8ce 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,6 +1,7 @@ import { StrictMode } from 'react' import { QueryClient, QueryClientProvider } from '@tanstack/react-query' +import { ReactQueryDevtools } from '@tanstack/react-query-devtools' import { createRoot } from 'react-dom/client' import { BrowserRouter } from 'react-router-dom' @@ -11,7 +12,14 @@ import { env } from './main/env' import { AuthProvider } from './presentation/contexts' async function bootstrap() { - const queryClient = new QueryClient() + const queryClient = new QueryClient({ + defaultOptions: { + queries: { + retry: false, + refetchOnWindowFocus: false + } + } + }) if (env.VITE_API_MOCKED) { const { worker } = await import('./mocks/browser') @@ -33,6 +41,7 @@ async function bootstrap() { ]} > + From f798420cda1544fb07460184af512f4c14e90275 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Mon, 19 Aug 2024 12:48:28 -0300 Subject: [PATCH 139/162] chore: disable eslint no shadow rule --- .eslintrc.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.eslintrc.json b/.eslintrc.json index 0cbb3538..549bfd56 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -87,7 +87,7 @@ "import/prefer-default-export": "off", "import/no-unresolved": "off", "@typescript-eslint/no-unused-vars": "error", - "@typescript-eslint/no-shadow": "error", + "@typescript-eslint/no-shadow": "off", "@typescript-eslint/naming-convention": [ "error", { From 0f25557df81a783132c0e3600654b2fc7bfc2825 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Mon, 19 Aug 2024 12:48:49 -0300 Subject: [PATCH 140/162] chore: update .nvmrc to use latest node version --- .nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nvmrc b/.nvmrc index d509f248..1a2f5bd2 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -18.14 \ No newline at end of file +lts/* \ No newline at end of file From 6e3584de97a1a6e8be3348c047094ba8b361b256 Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Mon, 19 Aug 2024 12:49:04 -0300 Subject: [PATCH 141/162] chore: add new packages --- package.json | 5 ++++- pnpm-lock.yaml | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index f166872c..26ab35b3 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "seed:mock": "node ./scripts/seed/index.mjs" }, "dependencies": { + "@hookform/resolvers": "^3.9.0", "@radix-ui/react-alert-dialog": "^1.1.1", "@radix-ui/react-avatar": "^1.0.4", "@radix-ui/react-dialog": "^1.0.5", @@ -42,7 +43,8 @@ "react-hot-toast": "^2.4.1", "react-router-dom": "^6.14.2", "tailwind-merge": "^2.2.1", - "validator": "^13.11.0" + "validator": "^13.11.0", + "zod": "^3.23.8" }, "devDependencies": { "@commitlint/config-conventional": "^17.7.0", @@ -56,6 +58,7 @@ "@storybook/react": "^7.3.0", "@storybook/react-vite": "^7.3.0", "@tanstack/eslint-plugin-query": "^5.43.1", + "@tanstack/react-query-devtools": "^5.51.23", "@types/react": "^18.2.20", "@types/react-dom": "^18.2.7", "@types/validator": "^13.11.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f4fef7b6..8d952037 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: dependencies: + '@hookform/resolvers': + specifier: ^3.9.0 + version: 3.9.0(react-hook-form@7.50.1(react@18.2.0)) '@radix-ui/react-alert-dialog': specifier: ^1.1.1 version: 1.1.1(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -77,6 +80,9 @@ importers: validator: specifier: ^13.11.0 version: 13.11.0 + zod: + specifier: ^3.23.8 + version: 3.23.8 devDependencies: '@commitlint/config-conventional': specifier: ^17.7.0 @@ -111,6 +117,9 @@ importers: '@tanstack/eslint-plugin-query': specifier: ^5.43.1 version: 5.43.1(eslint@8.56.0)(typescript@5.3.3) + '@tanstack/react-query-devtools': + specifier: ^5.51.23 + version: 5.51.23(@tanstack/react-query@5.45.1(react@18.2.0))(react@18.2.0) '@types/react': specifier: ^18.2.20 version: 18.2.48 @@ -1108,6 +1117,11 @@ packages: '@floating-ui/utils@0.2.1': resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} + '@hookform/resolvers@3.9.0': + resolution: {integrity: sha512-bU0Gr4EepJ/EQsH/IwEzYLsT/PEj5C0ynLQ4m+GSHS+xKH4TfSelhluTgOaoc4kA5s7eCsQbM4wvZLzELmWzUg==} + peerDependencies: + react-hook-form: ^7.0.0 + '@humanwhocodes/config-array@0.11.14': resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} @@ -2103,6 +2117,15 @@ packages: '@tanstack/query-core@5.45.0': resolution: {integrity: sha512-RVfIZQmFUTdjhSAAblvueimfngYyfN6HlwaJUPK71PKd7yi43Vs1S/rdimmZedPWX/WGppcq/U1HOj7O7FwYxw==} + '@tanstack/query-devtools@5.51.16': + resolution: {integrity: sha512-ajwuq4WnkNCMj/Hy3KR8d3RtZ6PSKc1dD2vs2T408MdjgKzQ3klVoL6zDgVO7X+5jlb5zfgcO3thh4ojPhfIaw==} + + '@tanstack/react-query-devtools@5.51.23': + resolution: {integrity: sha512-XpHrdyfUPGULIyJ1K7UvhAcK+KjMJdw4NjmRjryoj3XEgfAU5qU1rz8gIFvGc3gTGT07yIseGo7GEll/ICfJfQ==} + peerDependencies: + '@tanstack/react-query': ^5.51.23 + react: ^18 || ^19 + '@tanstack/react-query@5.45.1': resolution: {integrity: sha512-mYYfJujKg2kxmkRRjA6nn4YKG3ITsKuH22f1kteJ5IuVQqgKUgbaSQfYwVP0gBS05mhwxO03HVpD0t7BMN7WOA==} peerDependencies: @@ -5763,6 +5786,9 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + zod@3.23.8: + resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} + snapshots: '@aashutoshrathi/word-wrap@1.2.6': {} @@ -6793,6 +6819,10 @@ snapshots: '@floating-ui/utils@0.2.1': {} + '@hookform/resolvers@3.9.0(react-hook-form@7.50.1(react@18.2.0))': + dependencies: + react-hook-form: 7.50.1(react@18.2.0) + '@humanwhocodes/config-array@0.11.14': dependencies: '@humanwhocodes/object-schema': 2.0.2 @@ -8244,6 +8274,14 @@ snapshots: '@tanstack/query-core@5.45.0': {} + '@tanstack/query-devtools@5.51.16': {} + + '@tanstack/react-query-devtools@5.51.23(@tanstack/react-query@5.45.1(react@18.2.0))(react@18.2.0)': + dependencies: + '@tanstack/query-devtools': 5.51.16 + '@tanstack/react-query': 5.45.1(react@18.2.0) + react: 18.2.0 + '@tanstack/react-query@5.45.1(react@18.2.0)': dependencies: '@tanstack/query-core': 5.45.0 @@ -12224,3 +12262,5 @@ snapshots: yn@3.1.1: {} yocto-queue@0.1.0: {} + + zod@3.23.8: {} From 6bdcf1b1c677f336982402dbf02e459294d268ed Mon Sep 17 00:00:00 2001 From: Guilherme Minozzi de Sa Date: Mon, 19 Aug 2024 12:51:50 -0300 Subject: [PATCH 142/162] refactor: move utils from main to shared folder --- src/presentation/components/ui/alertDialog/action.tsx | 2 +- src/presentation/components/ui/alertDialog/cancel.tsx | 2 +- src/presentation/components/ui/alertDialog/content.tsx | 2 +- src/presentation/components/ui/alertDialog/description.tsx | 2 +- src/presentation/components/ui/alertDialog/footer.tsx | 2 +- src/presentation/components/ui/alertDialog/header.tsx | 2 +- src/presentation/components/ui/alertDialog/overlay.tsx | 2 +- src/presentation/components/ui/alertDialog/title.tsx | 2 +- src/presentation/components/ui/avatar/fallback.tsx | 2 +- src/presentation/components/ui/avatar/image.tsx | 2 +- src/presentation/components/ui/avatar/root.tsx | 2 +- src/presentation/components/ui/button/button.tsx | 2 +- src/presentation/components/ui/card/content.tsx | 2 +- src/presentation/components/ui/card/description.tsx | 2 +- src/presentation/components/ui/card/footer.tsx | 2 +- src/presentation/components/ui/card/header.tsx | 2 +- src/presentation/components/ui/card/root.tsx | 2 +- src/presentation/components/ui/card/title.tsx | 2 +- src/presentation/components/ui/combobox/combobox.tsx | 2 +- src/presentation/components/ui/command/group.tsx | 2 +- src/presentation/components/ui/command/input.tsx | 2 +- src/presentation/components/ui/command/item.tsx | 2 +- src/presentation/components/ui/command/list.tsx | 2 +- src/presentation/components/ui/command/root.tsx | 2 +- src/presentation/components/ui/command/separator.tsx | 2 +- src/presentation/components/ui/command/shortcut.tsx | 2 +- src/presentation/components/ui/dialog/content.tsx | 2 +- src/presentation/components/ui/dialog/description.tsx | 2 +- src/presentation/components/ui/dialog/footer.tsx | 2 +- src/presentation/components/ui/dialog/header.tsx | 2 +- src/presentation/components/ui/dialog/overlay.tsx | 2 +- src/presentation/components/ui/dialog/title.tsx | 2 +- src/presentation/components/ui/dropdown/checkboxItem.tsx | 2 +- src/presentation/components/ui/dropdown/content.tsx | 2 +- src/presentation/components/ui/dropdown/item.tsx | 2 +- src/presentation/components/ui/dropdown/label.tsx | 2 +- src/presentation/components/ui/dropdown/radioItem.tsx | 2 +- src/presentation/components/ui/dropdown/separator.tsx | 2 +- src/presentation/components/ui/dropdown/shortcut.tsx | 2 +- src/presentation/components/ui/dropdown/subContent.tsx | 2 +- src/presentation/components/ui/dropdown/subTrigger.tsx | 2 +- src/presentation/components/ui/form/description.tsx | 2 +- src/presentation/components/ui/form/item.tsx | 2 +- src/presentation/components/ui/form/label.tsx | 2 +- src/presentation/components/ui/form/message.tsx | 2 +- src/presentation/components/ui/header/header.tsx | 2 +- src/presentation/components/ui/input/input.tsx | 2 +- src/presentation/components/ui/label/label.tsx | 2 +- src/presentation/components/ui/loading/loading.tsx | 2 +- src/presentation/components/ui/pagination/content.tsx | 2 +- src/presentation/components/ui/pagination/ellipsis.tsx | 2 +- src/presentation/components/ui/pagination/item.tsx | 2 +- src/presentation/components/ui/pagination/link.tsx | 2 +- src/presentation/components/ui/pagination/next.tsx | 2 +- src/presentation/components/ui/pagination/previous.tsx | 2 +- src/presentation/components/ui/pagination/root.tsx | 2 +- src/presentation/components/ui/popover/content.tsx | 2 +- src/presentation/components/ui/sheet/content/index.tsx | 2 +- src/presentation/components/ui/sheet/description.tsx | 2 +- src/presentation/components/ui/sheet/footer.tsx | 2 +- src/presentation/components/ui/sheet/header.tsx | 2 +- src/presentation/components/ui/sheet/overlay.tsx | 2 +- src/presentation/components/ui/sheet/title.tsx | 2 +- src/presentation/components/ui/sidebar/item/index.tsx | 2 +- src/presentation/components/ui/sidebar/list.tsx | 2 +- src/presentation/components/ui/sidebar/root.tsx | 2 +- src/presentation/components/ui/table/body.tsx | 2 +- src/presentation/components/ui/table/caption.tsx | 2 +- src/presentation/components/ui/table/cell.tsx | 2 +- src/presentation/components/ui/table/footer.tsx | 2 +- src/presentation/components/ui/table/head.tsx | 2 +- src/presentation/components/ui/table/header.tsx | 2 +- src/presentation/components/ui/table/root.tsx | 2 +- src/presentation/components/ui/table/row.tsx | 2 +- src/presentation/components/ui/tabs/content.tsx | 2 +- src/presentation/components/ui/tabs/list.tsx | 2 +- src/presentation/components/ui/tabs/trigger.tsx | 2 +- src/presentation/components/ui/tooltip/content.tsx | 2 +- src/presentation/components/ui/wave/wave.tsx | 2 +- src/presentation/components/utils/grouper/grouper.tsx | 2 +- src/presentation/containers/loggedContainer/loggedContainer.tsx | 2 +- src/{main => shared}/utils/axios/catchError.ts | 0 src/{main => shared}/utils/axios/index.ts | 0 src/{main => shared}/utils/index.ts | 0 src/{main => shared}/utils/object/flattenObject.ts | 0 src/{main => shared}/utils/object/index.ts | 0 src/{main => shared}/utils/string/getInitials.ts | 0 src/{main => shared}/utils/string/index.ts | 0 src/{main => shared}/utils/tailwind/index.ts | 0 src/{main => shared}/utils/time/freeze.ts | 0 src/{main => shared}/utils/time/index.ts | 0 91 files changed, 81 insertions(+), 81 deletions(-) rename src/{main => shared}/utils/axios/catchError.ts (100%) rename src/{main => shared}/utils/axios/index.ts (100%) rename src/{main => shared}/utils/index.ts (100%) rename src/{main => shared}/utils/object/flattenObject.ts (100%) rename src/{main => shared}/utils/object/index.ts (100%) rename src/{main => shared}/utils/string/getInitials.ts (100%) rename src/{main => shared}/utils/string/index.ts (100%) rename src/{main => shared}/utils/tailwind/index.ts (100%) rename src/{main => shared}/utils/time/freeze.ts (100%) rename src/{main => shared}/utils/time/index.ts (100%) diff --git a/src/presentation/components/ui/alertDialog/action.tsx b/src/presentation/components/ui/alertDialog/action.tsx index f6c98605..3908c820 100644 --- a/src/presentation/components/ui/alertDialog/action.tsx +++ b/src/presentation/components/ui/alertDialog/action.tsx @@ -6,7 +6,7 @@ import { import { Action as ActionPrimitive } from '@radix-ui/react-alert-dialog' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' import { buttonVariants } from '../button' diff --git a/src/presentation/components/ui/alertDialog/cancel.tsx b/src/presentation/components/ui/alertDialog/cancel.tsx index 9d44c2b4..94bdf61d 100644 --- a/src/presentation/components/ui/alertDialog/cancel.tsx +++ b/src/presentation/components/ui/alertDialog/cancel.tsx @@ -6,7 +6,7 @@ import { import { Cancel as CancelPrimitive } from '@radix-ui/react-alert-dialog' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' import { buttonVariants } from '../button' diff --git a/src/presentation/components/ui/alertDialog/content.tsx b/src/presentation/components/ui/alertDialog/content.tsx index c05078e3..cb87e385 100644 --- a/src/presentation/components/ui/alertDialog/content.tsx +++ b/src/presentation/components/ui/alertDialog/content.tsx @@ -9,7 +9,7 @@ import { Portal as PortalPrimitive } from '@radix-ui/react-alert-dialog' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' import { Overlay } from './overlay' diff --git a/src/presentation/components/ui/alertDialog/description.tsx b/src/presentation/components/ui/alertDialog/description.tsx index 246fd746..3cd3eb7b 100644 --- a/src/presentation/components/ui/alertDialog/description.tsx +++ b/src/presentation/components/ui/alertDialog/description.tsx @@ -6,7 +6,7 @@ import { import { Description as DescriptionPrimitive } from '@radix-ui/react-alert-dialog' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Description = forwardRef< ElementRef, diff --git a/src/presentation/components/ui/alertDialog/footer.tsx b/src/presentation/components/ui/alertDialog/footer.tsx index 434d14a4..80e838a9 100644 --- a/src/presentation/components/ui/alertDialog/footer.tsx +++ b/src/presentation/components/ui/alertDialog/footer.tsx @@ -1,6 +1,6 @@ import { type HTMLAttributes } from 'react' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Footer = ({ className, diff --git a/src/presentation/components/ui/alertDialog/header.tsx b/src/presentation/components/ui/alertDialog/header.tsx index a8c7d1ab..1c85b84c 100644 --- a/src/presentation/components/ui/alertDialog/header.tsx +++ b/src/presentation/components/ui/alertDialog/header.tsx @@ -1,6 +1,6 @@ import { type HTMLAttributes } from 'react' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Header = ({ className, diff --git a/src/presentation/components/ui/alertDialog/overlay.tsx b/src/presentation/components/ui/alertDialog/overlay.tsx index ac26b493..8fc3e7eb 100644 --- a/src/presentation/components/ui/alertDialog/overlay.tsx +++ b/src/presentation/components/ui/alertDialog/overlay.tsx @@ -6,7 +6,7 @@ import { import { Overlay as OverlayPrimitive } from '@radix-ui/react-alert-dialog' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Overlay = forwardRef< ElementRef, diff --git a/src/presentation/components/ui/alertDialog/title.tsx b/src/presentation/components/ui/alertDialog/title.tsx index 840fc7fd..27c61b49 100644 --- a/src/presentation/components/ui/alertDialog/title.tsx +++ b/src/presentation/components/ui/alertDialog/title.tsx @@ -6,7 +6,7 @@ import { import { Title as TitlePrimitive } from '@radix-ui/react-alert-dialog' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Title = forwardRef< ElementRef, diff --git a/src/presentation/components/ui/avatar/fallback.tsx b/src/presentation/components/ui/avatar/fallback.tsx index 1976fb79..1293f072 100644 --- a/src/presentation/components/ui/avatar/fallback.tsx +++ b/src/presentation/components/ui/avatar/fallback.tsx @@ -2,7 +2,7 @@ import { forwardRef, ElementRef, ComponentPropsWithoutRef } from 'react' import { Fallback as FallbackPrimitive } from '@radix-ui/react-avatar' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Fallback = forwardRef< ElementRef, diff --git a/src/presentation/components/ui/avatar/image.tsx b/src/presentation/components/ui/avatar/image.tsx index b553e35d..b3d192c2 100644 --- a/src/presentation/components/ui/avatar/image.tsx +++ b/src/presentation/components/ui/avatar/image.tsx @@ -2,7 +2,7 @@ import { forwardRef, ElementRef, ComponentPropsWithoutRef } from 'react' import { Image as ImagePrimitive } from '@radix-ui/react-avatar' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Image = forwardRef< ElementRef, diff --git a/src/presentation/components/ui/avatar/root.tsx b/src/presentation/components/ui/avatar/root.tsx index b836839a..f9d82f9a 100644 --- a/src/presentation/components/ui/avatar/root.tsx +++ b/src/presentation/components/ui/avatar/root.tsx @@ -2,7 +2,7 @@ import { ComponentPropsWithoutRef, ElementRef, forwardRef } from 'react' import { Root as RootPrimitive } from '@radix-ui/react-avatar' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Root = forwardRef< ElementRef, diff --git a/src/presentation/components/ui/button/button.tsx b/src/presentation/components/ui/button/button.tsx index c3d15654..8cb46896 100644 --- a/src/presentation/components/ui/button/button.tsx +++ b/src/presentation/components/ui/button/button.tsx @@ -2,7 +2,7 @@ import { forwardRef } from 'react' import { Slot } from '@radix-ui/react-slot' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' import { buttonVariants } from './styles' diff --git a/src/presentation/components/ui/card/content.tsx b/src/presentation/components/ui/card/content.tsx index 1badb3ef..922bcaed 100644 --- a/src/presentation/components/ui/card/content.tsx +++ b/src/presentation/components/ui/card/content.tsx @@ -1,6 +1,6 @@ import { HTMLAttributes, forwardRef } from 'react' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Content = forwardRef< HTMLDivElement, diff --git a/src/presentation/components/ui/card/description.tsx b/src/presentation/components/ui/card/description.tsx index 35021559..0b6395a3 100644 --- a/src/presentation/components/ui/card/description.tsx +++ b/src/presentation/components/ui/card/description.tsx @@ -1,6 +1,6 @@ import { HTMLAttributes, forwardRef } from 'react' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Description = forwardRef< HTMLParagraphElement, diff --git a/src/presentation/components/ui/card/footer.tsx b/src/presentation/components/ui/card/footer.tsx index b97067f6..66a718f2 100644 --- a/src/presentation/components/ui/card/footer.tsx +++ b/src/presentation/components/ui/card/footer.tsx @@ -1,6 +1,6 @@ import { HTMLAttributes, forwardRef } from 'react' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Footer = forwardRef< HTMLDivElement, diff --git a/src/presentation/components/ui/card/header.tsx b/src/presentation/components/ui/card/header.tsx index 6d6afec4..760c1910 100644 --- a/src/presentation/components/ui/card/header.tsx +++ b/src/presentation/components/ui/card/header.tsx @@ -1,6 +1,6 @@ import { forwardRef, HTMLAttributes } from 'react' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Header = forwardRef< HTMLDivElement, diff --git a/src/presentation/components/ui/card/root.tsx b/src/presentation/components/ui/card/root.tsx index 5aa018e3..9d47bbc9 100644 --- a/src/presentation/components/ui/card/root.tsx +++ b/src/presentation/components/ui/card/root.tsx @@ -1,6 +1,6 @@ import { HTMLAttributes, forwardRef } from 'react' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Root = forwardRef>( ({ className, ...props }, ref) => ( diff --git a/src/presentation/components/ui/card/title.tsx b/src/presentation/components/ui/card/title.tsx index 4e6489ac..7e595be8 100644 --- a/src/presentation/components/ui/card/title.tsx +++ b/src/presentation/components/ui/card/title.tsx @@ -1,6 +1,6 @@ import { forwardRef, HTMLAttributes } from 'react' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Title = forwardRef< HTMLParagraphElement, diff --git a/src/presentation/components/ui/combobox/combobox.tsx b/src/presentation/components/ui/combobox/combobox.tsx index ce2af2ed..27640052 100644 --- a/src/presentation/components/ui/combobox/combobox.tsx +++ b/src/presentation/components/ui/combobox/combobox.tsx @@ -2,11 +2,11 @@ import { useState } from 'react' import { Check, ChevronsUpDown } from 'lucide-react' -import { cn } from '@/main//utils/tailwind' import { Button } from '@/presentation/components/ui/button' import { Command } from '@/presentation/components/ui/command' import { Loading } from '@/presentation/components/ui/loading' import { Popover } from '@/presentation/components/ui/popover' +import { cn } from '@/shared/utils/tailwind' import type { ComboboxProps } from './types' diff --git a/src/presentation/components/ui/command/group.tsx b/src/presentation/components/ui/command/group.tsx index 821bf369..468e3a55 100644 --- a/src/presentation/components/ui/command/group.tsx +++ b/src/presentation/components/ui/command/group.tsx @@ -2,7 +2,7 @@ import { forwardRef } from 'react' import { Command as CommandPrimitive } from 'cmdk' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Group = forwardRef< React.ElementRef, diff --git a/src/presentation/components/ui/command/input.tsx b/src/presentation/components/ui/command/input.tsx index 2127b1be..c6dc8014 100644 --- a/src/presentation/components/ui/command/input.tsx +++ b/src/presentation/components/ui/command/input.tsx @@ -3,7 +3,7 @@ import { forwardRef } from 'react' import { Command as CommandPrimitive } from 'cmdk' import { Search } from 'lucide-react' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Input = forwardRef< React.ElementRef, diff --git a/src/presentation/components/ui/command/item.tsx b/src/presentation/components/ui/command/item.tsx index 2d17b769..0a68631e 100644 --- a/src/presentation/components/ui/command/item.tsx +++ b/src/presentation/components/ui/command/item.tsx @@ -2,7 +2,7 @@ import { forwardRef } from 'react' import { Command as CommandPrimitive } from 'cmdk' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Item = forwardRef< React.ElementRef, diff --git a/src/presentation/components/ui/command/list.tsx b/src/presentation/components/ui/command/list.tsx index 4336b298..f9c4f31c 100644 --- a/src/presentation/components/ui/command/list.tsx +++ b/src/presentation/components/ui/command/list.tsx @@ -2,7 +2,7 @@ import { forwardRef } from 'react' import { Command as CommandPrimitive } from 'cmdk' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const List = forwardRef< React.ElementRef, diff --git a/src/presentation/components/ui/command/root.tsx b/src/presentation/components/ui/command/root.tsx index cbd317d5..605e5406 100644 --- a/src/presentation/components/ui/command/root.tsx +++ b/src/presentation/components/ui/command/root.tsx @@ -2,7 +2,7 @@ import { forwardRef } from 'react' import { Command as CommandPrimitive } from 'cmdk' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Root = forwardRef< React.ElementRef, diff --git a/src/presentation/components/ui/command/separator.tsx b/src/presentation/components/ui/command/separator.tsx index 402384e9..78b33444 100644 --- a/src/presentation/components/ui/command/separator.tsx +++ b/src/presentation/components/ui/command/separator.tsx @@ -2,7 +2,7 @@ import { forwardRef } from 'react' import { Command as CommandPrimitive } from 'cmdk' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Separator = forwardRef< React.ElementRef, diff --git a/src/presentation/components/ui/command/shortcut.tsx b/src/presentation/components/ui/command/shortcut.tsx index 6702f78e..c5225549 100644 --- a/src/presentation/components/ui/command/shortcut.tsx +++ b/src/presentation/components/ui/command/shortcut.tsx @@ -1,4 +1,4 @@ -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Shortcut: React.FC> = ({ className, diff --git a/src/presentation/components/ui/dialog/content.tsx b/src/presentation/components/ui/dialog/content.tsx index d24389df..f7031e4c 100644 --- a/src/presentation/components/ui/dialog/content.tsx +++ b/src/presentation/components/ui/dialog/content.tsx @@ -7,7 +7,7 @@ import { } from '@radix-ui/react-dialog' import { X } from 'lucide-react' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' import { Overlay } from './overlay' diff --git a/src/presentation/components/ui/dialog/description.tsx b/src/presentation/components/ui/dialog/description.tsx index 8ad3190c..ec2fc42a 100644 --- a/src/presentation/components/ui/dialog/description.tsx +++ b/src/presentation/components/ui/dialog/description.tsx @@ -2,7 +2,7 @@ import { forwardRef } from 'react' import { Description as DescriptionPrimitive } from '@radix-ui/react-dialog' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Description = forwardRef< React.ElementRef, diff --git a/src/presentation/components/ui/dialog/footer.tsx b/src/presentation/components/ui/dialog/footer.tsx index 30fa7732..57305517 100644 --- a/src/presentation/components/ui/dialog/footer.tsx +++ b/src/presentation/components/ui/dialog/footer.tsx @@ -1,4 +1,4 @@ -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Footer: React.FC> = ({ className, diff --git a/src/presentation/components/ui/dialog/header.tsx b/src/presentation/components/ui/dialog/header.tsx index eae319fe..e71eb841 100644 --- a/src/presentation/components/ui/dialog/header.tsx +++ b/src/presentation/components/ui/dialog/header.tsx @@ -1,4 +1,4 @@ -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Header: React.FC> = ({ className, diff --git a/src/presentation/components/ui/dialog/overlay.tsx b/src/presentation/components/ui/dialog/overlay.tsx index 5680c4c0..61996c1d 100644 --- a/src/presentation/components/ui/dialog/overlay.tsx +++ b/src/presentation/components/ui/dialog/overlay.tsx @@ -2,7 +2,7 @@ import { forwardRef } from 'react' import { Overlay as OverlayPrimitive } from '@radix-ui/react-dialog' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Overlay = forwardRef< React.ElementRef, diff --git a/src/presentation/components/ui/dialog/title.tsx b/src/presentation/components/ui/dialog/title.tsx index 33d74526..f2d9e9d3 100644 --- a/src/presentation/components/ui/dialog/title.tsx +++ b/src/presentation/components/ui/dialog/title.tsx @@ -2,7 +2,7 @@ import { forwardRef } from 'react' import { Title as TitlePrimitive } from '@radix-ui/react-dialog' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Title = forwardRef< React.ElementRef, diff --git a/src/presentation/components/ui/dropdown/checkboxItem.tsx b/src/presentation/components/ui/dropdown/checkboxItem.tsx index 40cd76ca..cea57855 100644 --- a/src/presentation/components/ui/dropdown/checkboxItem.tsx +++ b/src/presentation/components/ui/dropdown/checkboxItem.tsx @@ -6,7 +6,7 @@ import { } from '@radix-ui/react-dropdown-menu' import { Check } from 'lucide-react' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const CheckboxItem = forwardRef< ElementRef, diff --git a/src/presentation/components/ui/dropdown/content.tsx b/src/presentation/components/ui/dropdown/content.tsx index 44ae7c4c..cf787487 100644 --- a/src/presentation/components/ui/dropdown/content.tsx +++ b/src/presentation/components/ui/dropdown/content.tsx @@ -5,7 +5,7 @@ import { Portal } from '@radix-ui/react-dropdown-menu' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Content = forwardRef< ElementRef, diff --git a/src/presentation/components/ui/dropdown/item.tsx b/src/presentation/components/ui/dropdown/item.tsx index 3f979795..9d8f35b2 100644 --- a/src/presentation/components/ui/dropdown/item.tsx +++ b/src/presentation/components/ui/dropdown/item.tsx @@ -2,7 +2,7 @@ import { forwardRef, ElementRef, ComponentPropsWithoutRef } from 'react' import { Item as ItemPrimitive } from '@radix-ui/react-dropdown-menu' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Item = forwardRef< ElementRef, diff --git a/src/presentation/components/ui/dropdown/label.tsx b/src/presentation/components/ui/dropdown/label.tsx index 129bb932..58d595af 100644 --- a/src/presentation/components/ui/dropdown/label.tsx +++ b/src/presentation/components/ui/dropdown/label.tsx @@ -2,7 +2,7 @@ import { forwardRef, ElementRef, ComponentPropsWithoutRef } from 'react' import { Label as LabelPrimitive } from '@radix-ui/react-dropdown-menu' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Label = forwardRef< ElementRef, diff --git a/src/presentation/components/ui/dropdown/radioItem.tsx b/src/presentation/components/ui/dropdown/radioItem.tsx index 1c3182d7..c2fc3b3a 100644 --- a/src/presentation/components/ui/dropdown/radioItem.tsx +++ b/src/presentation/components/ui/dropdown/radioItem.tsx @@ -6,7 +6,7 @@ import { } from '@radix-ui/react-dropdown-menu' import { Circle } from 'lucide-react' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const RadioItem = forwardRef< ElementRef, diff --git a/src/presentation/components/ui/dropdown/separator.tsx b/src/presentation/components/ui/dropdown/separator.tsx index 94078320..919660ee 100644 --- a/src/presentation/components/ui/dropdown/separator.tsx +++ b/src/presentation/components/ui/dropdown/separator.tsx @@ -2,7 +2,7 @@ import { forwardRef, ElementRef, ComponentPropsWithoutRef } from 'react' import { Separator as SeparatorPrimitive } from '@radix-ui/react-dropdown-menu' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Separator = forwardRef< ElementRef, diff --git a/src/presentation/components/ui/dropdown/shortcut.tsx b/src/presentation/components/ui/dropdown/shortcut.tsx index 7597a36e..208ec66f 100644 --- a/src/presentation/components/ui/dropdown/shortcut.tsx +++ b/src/presentation/components/ui/dropdown/shortcut.tsx @@ -1,4 +1,4 @@ -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Shortcut = ({ className, diff --git a/src/presentation/components/ui/dropdown/subContent.tsx b/src/presentation/components/ui/dropdown/subContent.tsx index a0ad014a..f4d2d76b 100644 --- a/src/presentation/components/ui/dropdown/subContent.tsx +++ b/src/presentation/components/ui/dropdown/subContent.tsx @@ -2,7 +2,7 @@ import { forwardRef, ElementRef, ComponentPropsWithoutRef } from 'react' import { SubContent as SubContentPrimitive } from '@radix-ui/react-dropdown-menu' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const SubContent = forwardRef< ElementRef, diff --git a/src/presentation/components/ui/dropdown/subTrigger.tsx b/src/presentation/components/ui/dropdown/subTrigger.tsx index 7fe8bdd4..1fc6eae0 100644 --- a/src/presentation/components/ui/dropdown/subTrigger.tsx +++ b/src/presentation/components/ui/dropdown/subTrigger.tsx @@ -3,7 +3,7 @@ import { forwardRef, ElementRef, ComponentPropsWithoutRef } from 'react' import { SubTrigger as SubTriggerPrimitive } from '@radix-ui/react-dropdown-menu' import { ChevronRight } from 'lucide-react' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const SubTrigger = forwardRef< ElementRef, diff --git a/src/presentation/components/ui/form/description.tsx b/src/presentation/components/ui/form/description.tsx index d391f67e..52910866 100644 --- a/src/presentation/components/ui/form/description.tsx +++ b/src/presentation/components/ui/form/description.tsx @@ -1,6 +1,6 @@ import { forwardRef, HTMLAttributes } from 'react' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' import { useFormField } from './hooks/useFormField' diff --git a/src/presentation/components/ui/form/item.tsx b/src/presentation/components/ui/form/item.tsx index 4af1c5bf..f33d5578 100644 --- a/src/presentation/components/ui/form/item.tsx +++ b/src/presentation/components/ui/form/item.tsx @@ -1,6 +1,6 @@ import { HTMLAttributes, forwardRef, useId, useMemo } from 'react' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' import { FormItemContext } from './contexts' diff --git a/src/presentation/components/ui/form/label.tsx b/src/presentation/components/ui/form/label.tsx index 899e7a42..22e0cea4 100644 --- a/src/presentation/components/ui/form/label.tsx +++ b/src/presentation/components/ui/form/label.tsx @@ -2,8 +2,8 @@ import { forwardRef, ElementRef, ComponentPropsWithoutRef } from 'react' import { Root } from '@radix-ui/react-label' -import { cn } from '@/main/utils' import { Label as AppLabel } from '@/presentation/components/ui/label' +import { cn } from '@/shared/utils' import { useFormField } from './hooks/useFormField' diff --git a/src/presentation/components/ui/form/message.tsx b/src/presentation/components/ui/form/message.tsx index 8c266045..0a7d0707 100644 --- a/src/presentation/components/ui/form/message.tsx +++ b/src/presentation/components/ui/form/message.tsx @@ -1,6 +1,6 @@ import { forwardRef, HTMLAttributes } from 'react' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' import { useFormField } from './hooks/useFormField' diff --git a/src/presentation/components/ui/header/header.tsx b/src/presentation/components/ui/header/header.tsx index 1cb21dad..c7049973 100644 --- a/src/presentation/components/ui/header/header.tsx +++ b/src/presentation/components/ui/header/header.tsx @@ -1,8 +1,8 @@ import { forwardRef } from 'react' import { LogoIdrJustBrand } from '@/assets/imgs' -import { cn, getInitials } from '@/main/utils' import { Avatar } from '@/presentation/components/ui/avatar' +import { cn, getInitials } from '@/shared/utils' import { HeaderProps } from './types' diff --git a/src/presentation/components/ui/input/input.tsx b/src/presentation/components/ui/input/input.tsx index de2f679e..6b8a9968 100644 --- a/src/presentation/components/ui/input/input.tsx +++ b/src/presentation/components/ui/input/input.tsx @@ -2,8 +2,8 @@ import { forwardRef } from 'react' import { AlertCircle } from 'lucide-react' -import { cn } from '@/main/utils' import { Loading } from '@/presentation/components/ui/loading' +import { cn } from '@/shared/utils' import { inputVariants, styles } from './styles' import { useInput } from './useInput' diff --git a/src/presentation/components/ui/label/label.tsx b/src/presentation/components/ui/label/label.tsx index 8499936a..f4bf21c9 100644 --- a/src/presentation/components/ui/label/label.tsx +++ b/src/presentation/components/ui/label/label.tsx @@ -2,7 +2,7 @@ import { forwardRef } from 'react' import { Root } from '@radix-ui/react-label' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' import { labelVariants } from './styles' diff --git a/src/presentation/components/ui/loading/loading.tsx b/src/presentation/components/ui/loading/loading.tsx index a91f0a7b..07385e8a 100644 --- a/src/presentation/components/ui/loading/loading.tsx +++ b/src/presentation/components/ui/loading/loading.tsx @@ -1,4 +1,4 @@ -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' import { loadingVariants } from './styles' import { LoadingProps } from './types' diff --git a/src/presentation/components/ui/pagination/content.tsx b/src/presentation/components/ui/pagination/content.tsx index 0bdc0a4e..6607d6cc 100644 --- a/src/presentation/components/ui/pagination/content.tsx +++ b/src/presentation/components/ui/pagination/content.tsx @@ -1,6 +1,6 @@ import { forwardRef, ComponentProps } from 'react' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Content = forwardRef>( ({ className, ...props }, ref) => ( diff --git a/src/presentation/components/ui/pagination/ellipsis.tsx b/src/presentation/components/ui/pagination/ellipsis.tsx index 900957f1..bf653c2a 100644 --- a/src/presentation/components/ui/pagination/ellipsis.tsx +++ b/src/presentation/components/ui/pagination/ellipsis.tsx @@ -1,6 +1,6 @@ import { MoreHorizontal } from 'lucide-react' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Ellipsis: React.FC> = ({ className, diff --git a/src/presentation/components/ui/pagination/item.tsx b/src/presentation/components/ui/pagination/item.tsx index 1af54526..9702054a 100644 --- a/src/presentation/components/ui/pagination/item.tsx +++ b/src/presentation/components/ui/pagination/item.tsx @@ -3,7 +3,7 @@ import { forwardRef, ComponentProps } from 'react' import { VariantProps, cva } from 'class-variance-authority' import clsx from 'clsx' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' const itemVariants = cva('cursor-pointer', { variants: { diff --git a/src/presentation/components/ui/pagination/link.tsx b/src/presentation/components/ui/pagination/link.tsx index 4607cebe..9de41f67 100644 --- a/src/presentation/components/ui/pagination/link.tsx +++ b/src/presentation/components/ui/pagination/link.tsx @@ -1,8 +1,8 @@ -import { cn } from '@/main/utils' import { ButtonProps, buttonVariants } from '@/presentation/components/ui/button' +import { cn } from '@/shared/utils' type LinkProps = { isActive?: boolean diff --git a/src/presentation/components/ui/pagination/next.tsx b/src/presentation/components/ui/pagination/next.tsx index 94304a6d..0440f051 100644 --- a/src/presentation/components/ui/pagination/next.tsx +++ b/src/presentation/components/ui/pagination/next.tsx @@ -2,7 +2,7 @@ import { ComponentProps } from 'react' import { ChevronRight } from 'lucide-react' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' import { Link } from './link' diff --git a/src/presentation/components/ui/pagination/previous.tsx b/src/presentation/components/ui/pagination/previous.tsx index 87a0fa7e..14d74f68 100644 --- a/src/presentation/components/ui/pagination/previous.tsx +++ b/src/presentation/components/ui/pagination/previous.tsx @@ -2,7 +2,7 @@ import { ComponentProps } from 'react' import { ChevronLeft } from 'lucide-react' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' import { Link } from './link' diff --git a/src/presentation/components/ui/pagination/root.tsx b/src/presentation/components/ui/pagination/root.tsx index 9b161cab..66cddac2 100644 --- a/src/presentation/components/ui/pagination/root.tsx +++ b/src/presentation/components/ui/pagination/root.tsx @@ -1,6 +1,6 @@ import { ComponentProps } from 'react' -import { cn } from '@/main/utils' +import { cn } from '@/shared/utils' export const Root = ({ className, ...props }: ComponentProps<'nav'>) => (
    + ))} +
    -
    - ) - }} - /> + ) + }} + /> + + { + const { error } = fieldState + + return ( + + Latitude + + + + + + ) + }} + /> + + { + const { error } = fieldState + + return ( + + Longitude + + + + + + ) + }} + /> + ) }