From e5ba0ca94b554735e7a7d42ce9e6de321de370c3 Mon Sep 17 00:00:00 2001 From: kenmaqqe Date: Mon, 26 May 2025 18:01:10 +0300 Subject: [PATCH 01/22] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20create=20table=20c?= =?UTF-8?q?omponent=20and=20test=20in=20order?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Create in ui-shared our table components and testing they in order page with mock data --- apps/fe-admin/src/layouts/index.ts | 2 +- apps/fe-admin/src/pages/OrderPage.tsx | 40 +- .../lib/components/Table/Table.module.scss | 52 ++ .../src/lib/components/Table/Table.tsx | 62 +++ libs/ui/ui-shared/src/lib/components/index.ts | 1 + libs/ui/ui-shared/src/types/OrderType.ts | 11 + libs/ui/ui-shared/src/types/ProductType.ts | 14 + libs/ui/ui-shared/src/types/UserType.ts | 11 + libs/ui/ui-shared/src/types/index.ts | 3 + pnpm-lock.yaml | 518 +++++++++--------- 10 files changed, 453 insertions(+), 261 deletions(-) create mode 100644 libs/ui/ui-shared/src/lib/components/Table/Table.module.scss create mode 100644 libs/ui/ui-shared/src/lib/components/Table/Table.tsx create mode 100644 libs/ui/ui-shared/src/types/OrderType.ts create mode 100644 libs/ui/ui-shared/src/types/ProductType.ts create mode 100644 libs/ui/ui-shared/src/types/UserType.ts create mode 100644 libs/ui/ui-shared/src/types/index.ts diff --git a/apps/fe-admin/src/layouts/index.ts b/apps/fe-admin/src/layouts/index.ts index 39f6125..2aeeb85 100644 --- a/apps/fe-admin/src/layouts/index.ts +++ b/apps/fe-admin/src/layouts/index.ts @@ -1 +1 @@ -export { default as PageLayout } from './pageLayout/PageLayout'; +export { default as PageLayout } from './pageLayout/pageLayout'; diff --git a/apps/fe-admin/src/pages/OrderPage.tsx b/apps/fe-admin/src/pages/OrderPage.tsx index 60dc2b0..54cbf0c 100644 --- a/apps/fe-admin/src/pages/OrderPage.tsx +++ b/apps/fe-admin/src/pages/OrderPage.tsx @@ -1,7 +1,45 @@ import React from 'react'; +import { Table } from '@shopery/ui-shared'; const OrderPage = () => { - return
Orders
; + return ( +
+

Orders

+ + + ); }; export default OrderPage; diff --git a/libs/ui/ui-shared/src/lib/components/Table/Table.module.scss b/libs/ui/ui-shared/src/lib/components/Table/Table.module.scss new file mode 100644 index 0000000..a1ac2aa --- /dev/null +++ b/libs/ui/ui-shared/src/lib/components/Table/Table.module.scss @@ -0,0 +1,52 @@ +.table { + width: 100%; + border-collapse: collapse; + font-size: $font-size-md; + color: $gray-900; + background-color: $white; + border: 1px solid $gray-300; + + thead { + background-color: $gray-100; + + th { + padding: 12px; + text-align: left; + font-weight: $weight-600; + font-size: $font-size-sm; + color: $gray-800; + border-bottom: 2px solid $gray-300; + } + } + + tbody { + tr { + &:nth-child(even) { + background-color: $gray-100; + } + + + td { + padding: 12px; + border-bottom: 1px solid $gray-300; + font-size: $font-size-sm; + color: $gray-700; + + &:last-child { + text-align: center; + } + } + } + } + + .actions { + display: flex; + justify-content: center; + gap: 8px; + + button { + font-size: $font-size-sm; + border-radius: $border-radius-button; + } + } +} \ No newline at end of file diff --git a/libs/ui/ui-shared/src/lib/components/Table/Table.tsx b/libs/ui/ui-shared/src/lib/components/Table/Table.tsx new file mode 100644 index 0000000..14564df --- /dev/null +++ b/libs/ui/ui-shared/src/lib/components/Table/Table.tsx @@ -0,0 +1,62 @@ +import React from 'react'; +import { UserType, OrderType, ProductType } from '../../../types'; +import Button from '../Button/Button'; +import styles from './Table.module.scss'; + +export type TableProps = { + admin: boolean; + header: string[]; + content: T[]; +}; + +export const Table = ({ + admin, + header, + content, +}: TableProps) => { + return ( +
+ + + {header.map((item, index) => ( + + ))} + {admin && } + + + + {content.map((item, index) => ( + + {Object.values(item).map((value, idx) => ( + + ))} + {admin && ( + + )} + + ))} + +
{item}Actions
{value.toString()} +
+ + +
+
+ ); +}; + +export default Table; diff --git a/libs/ui/ui-shared/src/lib/components/index.ts b/libs/ui/ui-shared/src/lib/components/index.ts index 8bc41cb..5675389 100644 --- a/libs/ui/ui-shared/src/lib/components/index.ts +++ b/libs/ui/ui-shared/src/lib/components/index.ts @@ -1 +1,2 @@ export * from './Button/Button'; +export * from './Table/Table'; \ No newline at end of file diff --git a/libs/ui/ui-shared/src/types/OrderType.ts b/libs/ui/ui-shared/src/types/OrderType.ts new file mode 100644 index 0000000..53d8e2a --- /dev/null +++ b/libs/ui/ui-shared/src/types/OrderType.ts @@ -0,0 +1,11 @@ +export interface OrderType { + id: number; + userId: number; + totalPrice: number; + status: OrderStatus; + totalNumberOfProducts: number; + createdAt?: Date; + updatedAt?: Date; +} + +type OrderStatus = 'pending' | 'shipped' | 'delivered'; diff --git a/libs/ui/ui-shared/src/types/ProductType.ts b/libs/ui/ui-shared/src/types/ProductType.ts new file mode 100644 index 0000000..59fd6fc --- /dev/null +++ b/libs/ui/ui-shared/src/types/ProductType.ts @@ -0,0 +1,14 @@ +export interface ProductType { + id: number; + categoriesId: number; + name: string; + description: string; + price: number; + rating: number; + popularTag: Array; + quantityInStock: number; + brand: string; + image: string; + createdAt: Date; + updatedAt: Date; +} \ No newline at end of file diff --git a/libs/ui/ui-shared/src/types/UserType.ts b/libs/ui/ui-shared/src/types/UserType.ts new file mode 100644 index 0000000..1b7099e --- /dev/null +++ b/libs/ui/ui-shared/src/types/UserType.ts @@ -0,0 +1,11 @@ +export interface UserType { + id: number; + firstName: string; + lastName: string; + email: string; + phone: number; + passwordHash?: string; + role: string; + createdAt: Date; + updatedAt: Date; +}; diff --git a/libs/ui/ui-shared/src/types/index.ts b/libs/ui/ui-shared/src/types/index.ts new file mode 100644 index 0000000..9420b8f --- /dev/null +++ b/libs/ui/ui-shared/src/types/index.ts @@ -0,0 +1,3 @@ +export type { UserType } from './UserType'; +export type { OrderType } from './OrderType'; +export type { ProductType } from './ProductType'; \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 06b6d41..5b9a005 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -254,111 +254,111 @@ packages: engines: {node: '>=6.0.0'} '@aws-crypto/sha256-browser@5.2.0': - resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==, tarball: https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz} + resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} '@aws-crypto/sha256-js@5.2.0': - resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==, tarball: https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz} + resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} engines: {node: '>=16.0.0'} '@aws-crypto/supports-web-crypto@5.2.0': - resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==, tarball: https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz} + resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} '@aws-crypto/util@5.2.0': - resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==, tarball: https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz} + resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} '@aws-sdk/client-cognito-identity@3.744.0': - resolution: {integrity: sha512-Z6NAl6pXSOO+9XYh3yWmvrzsE2qbc3abD9LDWNwj1j08fNF0gcKTMZol90dz7J3edaEbt2DBAze/I1cU/QgQCQ==, tarball: https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.744.0.tgz} + resolution: {integrity: sha512-Z6NAl6pXSOO+9XYh3yWmvrzsE2qbc3abD9LDWNwj1j08fNF0gcKTMZol90dz7J3edaEbt2DBAze/I1cU/QgQCQ==} engines: {node: '>=18.0.0'} '@aws-sdk/client-sso@3.744.0': - resolution: {integrity: sha512-mzJxPQ9mcnNY50pi7+pxB34/Dt7PUn0OgkashHdJPTnavoriLWvPcaQCG1NEVAtyzxNdowhpi4KjC+aN1EwAeA==, tarball: https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.744.0.tgz} + resolution: {integrity: sha512-mzJxPQ9mcnNY50pi7+pxB34/Dt7PUn0OgkashHdJPTnavoriLWvPcaQCG1NEVAtyzxNdowhpi4KjC+aN1EwAeA==} engines: {node: '>=18.0.0'} '@aws-sdk/core@3.744.0': - resolution: {integrity: sha512-R0XLfDDq7MAXYyDf7tPb+m0R7gmzTRRDtPNQ5jvuq8dbkefph5gFMkxZ2zSx7dfTsfYHhBPuTBsQ0c5Xjal3Vg==, tarball: https://registry.npmjs.org/@aws-sdk/core/-/core-3.744.0.tgz} + resolution: {integrity: sha512-R0XLfDDq7MAXYyDf7tPb+m0R7gmzTRRDtPNQ5jvuq8dbkefph5gFMkxZ2zSx7dfTsfYHhBPuTBsQ0c5Xjal3Vg==} engines: {node: '>=18.0.0'} '@aws-sdk/credential-provider-cognito-identity@3.744.0': - resolution: {integrity: sha512-NUxBVFzoVBmS6JH1sK8nzw8AAOI5hCM+lMLa0Dtwxk+dRIe6XRpU9wHkIbaA6Adwp8qvvyYZsgymuMvoAzGmcQ==, tarball: https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.744.0.tgz} + resolution: {integrity: sha512-NUxBVFzoVBmS6JH1sK8nzw8AAOI5hCM+lMLa0Dtwxk+dRIe6XRpU9wHkIbaA6Adwp8qvvyYZsgymuMvoAzGmcQ==} engines: {node: '>=18.0.0'} '@aws-sdk/credential-provider-env@3.744.0': - resolution: {integrity: sha512-hyjC7xqzAeERorYYjhQG1ivcr1XlxgfBpa+r4pG29toFG60mACyVzaR7+og3kgzjRFAB7D1imMxPQyEvQ1QokA==, tarball: https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.744.0.tgz} + resolution: {integrity: sha512-hyjC7xqzAeERorYYjhQG1ivcr1XlxgfBpa+r4pG29toFG60mACyVzaR7+og3kgzjRFAB7D1imMxPQyEvQ1QokA==} engines: {node: '>=18.0.0'} '@aws-sdk/credential-provider-http@3.744.0': - resolution: {integrity: sha512-k+P1Tl5ewBvVByR6hB726qFIzANgQVf2cY87hZ/e09pQYlH4bfBcyY16VJhkqYnKmv6HMdWxKHX7D8nwlc8Obg==, tarball: https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.744.0.tgz} + resolution: {integrity: sha512-k+P1Tl5ewBvVByR6hB726qFIzANgQVf2cY87hZ/e09pQYlH4bfBcyY16VJhkqYnKmv6HMdWxKHX7D8nwlc8Obg==} engines: {node: '>=18.0.0'} '@aws-sdk/credential-provider-ini@3.744.0': - resolution: {integrity: sha512-hjEWgkF86tkvg8PIsDiB3KkTj7z8ZFGR0v0OLQYD47o17q1qfoMzZmg9wae3wXp9KzU+lZETo+8oMqX9a+7aVQ==, tarball: https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.744.0.tgz} + resolution: {integrity: sha512-hjEWgkF86tkvg8PIsDiB3KkTj7z8ZFGR0v0OLQYD47o17q1qfoMzZmg9wae3wXp9KzU+lZETo+8oMqX9a+7aVQ==} engines: {node: '>=18.0.0'} '@aws-sdk/credential-provider-node@3.744.0': - resolution: {integrity: sha512-4oUfRd6pe/VGmKoav17pPoOO0WP0L6YXmHqtJHSDmFUOAa+Vh0ZRljTj/yBdleRgdO6rOfdWqoGLFSFiAZDrsQ==, tarball: https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.744.0.tgz} + resolution: {integrity: sha512-4oUfRd6pe/VGmKoav17pPoOO0WP0L6YXmHqtJHSDmFUOAa+Vh0ZRljTj/yBdleRgdO6rOfdWqoGLFSFiAZDrsQ==} engines: {node: '>=18.0.0'} '@aws-sdk/credential-provider-process@3.744.0': - resolution: {integrity: sha512-m0d/pDBIaiEAAxWXt/c79RHsKkUkyPOvF2SAMRddVhhOt1GFZI4ml+3f4drmAZfXldIyJmvJTJJqWluVPwTIqQ==, tarball: https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.744.0.tgz} + resolution: {integrity: sha512-m0d/pDBIaiEAAxWXt/c79RHsKkUkyPOvF2SAMRddVhhOt1GFZI4ml+3f4drmAZfXldIyJmvJTJJqWluVPwTIqQ==} engines: {node: '>=18.0.0'} '@aws-sdk/credential-provider-sso@3.744.0': - resolution: {integrity: sha512-xdMufTZOvpbDoDPI2XLu0/Rg3qJ/txpS8IJR63NsCGotHJZ/ucLNKwTcGS40hllZB8qSHTlvmlOzElDahTtx/A==, tarball: https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.744.0.tgz} + resolution: {integrity: sha512-xdMufTZOvpbDoDPI2XLu0/Rg3qJ/txpS8IJR63NsCGotHJZ/ucLNKwTcGS40hllZB8qSHTlvmlOzElDahTtx/A==} engines: {node: '>=18.0.0'} '@aws-sdk/credential-provider-web-identity@3.744.0': - resolution: {integrity: sha512-cNk93GZxORzqEojWfXdrPBF6a7Nu3LpPCWG5mV+lH2tbuGsmw6XhKkwpt7o+OiIP4tKCpHlvqOD8f1nmhe1KDA==, tarball: https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.744.0.tgz} + resolution: {integrity: sha512-cNk93GZxORzqEojWfXdrPBF6a7Nu3LpPCWG5mV+lH2tbuGsmw6XhKkwpt7o+OiIP4tKCpHlvqOD8f1nmhe1KDA==} engines: {node: '>=18.0.0'} '@aws-sdk/credential-providers@3.744.0': - resolution: {integrity: sha512-8vXnKA/TklSx6HdF88RVohtsvYNuGP9nm5RTCSGbWVR7+xEU/Eh15B+EKoGasCjZW7/9GxnSULp0DN1msCR23A==, tarball: https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.744.0.tgz} + resolution: {integrity: sha512-8vXnKA/TklSx6HdF88RVohtsvYNuGP9nm5RTCSGbWVR7+xEU/Eh15B+EKoGasCjZW7/9GxnSULp0DN1msCR23A==} engines: {node: '>=18.0.0'} '@aws-sdk/middleware-host-header@3.734.0': - resolution: {integrity: sha512-LW7RRgSOHHBzWZnigNsDIzu3AiwtjeI2X66v+Wn1P1u+eXssy1+up4ZY/h+t2sU4LU36UvEf+jrZti9c6vRnFw==, tarball: https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.734.0.tgz} + resolution: {integrity: sha512-LW7RRgSOHHBzWZnigNsDIzu3AiwtjeI2X66v+Wn1P1u+eXssy1+up4ZY/h+t2sU4LU36UvEf+jrZti9c6vRnFw==} engines: {node: '>=18.0.0'} '@aws-sdk/middleware-logger@3.734.0': - resolution: {integrity: sha512-mUMFITpJUW3LcKvFok176eI5zXAUomVtahb9IQBwLzkqFYOrMJvWAvoV4yuxrJ8TlQBG8gyEnkb9SnhZvjg67w==, tarball: https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.734.0.tgz} + resolution: {integrity: sha512-mUMFITpJUW3LcKvFok176eI5zXAUomVtahb9IQBwLzkqFYOrMJvWAvoV4yuxrJ8TlQBG8gyEnkb9SnhZvjg67w==} engines: {node: '>=18.0.0'} '@aws-sdk/middleware-recursion-detection@3.734.0': - resolution: {integrity: sha512-CUat2d9ITsFc2XsmeiRQO96iWpxSKYFjxvj27Hc7vo87YUHRnfMfnc8jw1EpxEwMcvBD7LsRa6vDNky6AjcrFA==, tarball: https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.734.0.tgz} + resolution: {integrity: sha512-CUat2d9ITsFc2XsmeiRQO96iWpxSKYFjxvj27Hc7vo87YUHRnfMfnc8jw1EpxEwMcvBD7LsRa6vDNky6AjcrFA==} engines: {node: '>=18.0.0'} '@aws-sdk/middleware-user-agent@3.744.0': - resolution: {integrity: sha512-ROUbDQHfVWiBHXd4m9E9mKj1Azby8XCs8RC8OCf9GVH339GSE6aMrPJSzMlsV1LmzPdPIypgp5qqh5NfSrKztg==, tarball: https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.744.0.tgz} + resolution: {integrity: sha512-ROUbDQHfVWiBHXd4m9E9mKj1Azby8XCs8RC8OCf9GVH339GSE6aMrPJSzMlsV1LmzPdPIypgp5qqh5NfSrKztg==} engines: {node: '>=18.0.0'} '@aws-sdk/nested-clients@3.744.0': - resolution: {integrity: sha512-Mnrlh4lRY1gZQnKvN2Lh/5WXcGkzC41NM93mtn2uaqOh+DZLCXCttNCfbUesUvYJLOo3lYaOpiDsjTkPVB1yjw==, tarball: https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.744.0.tgz} + resolution: {integrity: sha512-Mnrlh4lRY1gZQnKvN2Lh/5WXcGkzC41NM93mtn2uaqOh+DZLCXCttNCfbUesUvYJLOo3lYaOpiDsjTkPVB1yjw==} engines: {node: '>=18.0.0'} '@aws-sdk/region-config-resolver@3.734.0': - resolution: {integrity: sha512-Lvj1kPRC5IuJBr9DyJ9T9/plkh+EfKLy+12s/mykOy1JaKHDpvj+XGy2YO6YgYVOb8JFtaqloid+5COtje4JTQ==, tarball: https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.734.0.tgz} + resolution: {integrity: sha512-Lvj1kPRC5IuJBr9DyJ9T9/plkh+EfKLy+12s/mykOy1JaKHDpvj+XGy2YO6YgYVOb8JFtaqloid+5COtje4JTQ==} engines: {node: '>=18.0.0'} '@aws-sdk/token-providers@3.744.0': - resolution: {integrity: sha512-v/1+lWkDCd60Ei6oyhJqli6mTsPEVepLoSMB50vHUVlJP0fzXu/3FMje90/RzeUoh/VugZQJCEv/NNpuC6wztg==, tarball: https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.744.0.tgz} + resolution: {integrity: sha512-v/1+lWkDCd60Ei6oyhJqli6mTsPEVepLoSMB50vHUVlJP0fzXu/3FMje90/RzeUoh/VugZQJCEv/NNpuC6wztg==} engines: {node: '>=18.0.0'} '@aws-sdk/types@3.734.0': - resolution: {integrity: sha512-o11tSPTT70nAkGV1fN9wm/hAIiLPyWX6SuGf+9JyTp7S/rC2cFWhR26MvA69nplcjNaXVzB0f+QFrLXXjOqCrg==, tarball: https://registry.npmjs.org/@aws-sdk/types/-/types-3.734.0.tgz} + resolution: {integrity: sha512-o11tSPTT70nAkGV1fN9wm/hAIiLPyWX6SuGf+9JyTp7S/rC2cFWhR26MvA69nplcjNaXVzB0f+QFrLXXjOqCrg==} engines: {node: '>=18.0.0'} '@aws-sdk/util-endpoints@3.743.0': - resolution: {integrity: sha512-sN1l559zrixeh5x+pttrnd0A3+r34r0tmPkJ/eaaMaAzXqsmKU/xYre9K3FNnsSS1J1k4PEfk/nHDTVUgFYjnw==, tarball: https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.743.0.tgz} + resolution: {integrity: sha512-sN1l559zrixeh5x+pttrnd0A3+r34r0tmPkJ/eaaMaAzXqsmKU/xYre9K3FNnsSS1J1k4PEfk/nHDTVUgFYjnw==} engines: {node: '>=18.0.0'} '@aws-sdk/util-locate-window@3.723.0': - resolution: {integrity: sha512-Yf2CS10BqK688DRsrKI/EO6B8ff5J86NXe4C+VCysK7UOgN0l1zOTeTukZ3H8Q9tYYX3oaF1961o8vRkFm7Nmw==, tarball: https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.723.0.tgz} + resolution: {integrity: sha512-Yf2CS10BqK688DRsrKI/EO6B8ff5J86NXe4C+VCysK7UOgN0l1zOTeTukZ3H8Q9tYYX3oaF1961o8vRkFm7Nmw==} engines: {node: '>=18.0.0'} '@aws-sdk/util-user-agent-browser@3.734.0': - resolution: {integrity: sha512-xQTCus6Q9LwUuALW+S76OL0jcWtMOVu14q+GoLnWPUM7QeUw963oQcLhF7oq0CtaLLKyl4GOUfcwc773Zmwwng==, tarball: https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.734.0.tgz} + resolution: {integrity: sha512-xQTCus6Q9LwUuALW+S76OL0jcWtMOVu14q+GoLnWPUM7QeUw963oQcLhF7oq0CtaLLKyl4GOUfcwc773Zmwwng==} '@aws-sdk/util-user-agent-node@3.744.0': - resolution: {integrity: sha512-BJURjwIXhNa4heXkLC0+GcL+8wVXaU7JoyW6ckdvp93LL+sVHeR1d5FxXZHQW/pMI4E3gNlKyBqjKaT75tObNQ==, tarball: https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.744.0.tgz} + resolution: {integrity: sha512-BJURjwIXhNa4heXkLC0+GcL+8wVXaU7JoyW6ckdvp93LL+sVHeR1d5FxXZHQW/pMI4E3gNlKyBqjKaT75tObNQ==} engines: {node: '>=18.0.0'} peerDependencies: aws-crt: '>=1.0.0' @@ -1031,277 +1031,277 @@ packages: resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==} '@esbuild/aix-ppc64@0.19.12': - resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==, tarball: https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz} + resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} engines: {node: '>=12'} cpu: [ppc64] os: [aix] '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==, tarball: https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz} + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} engines: {node: '>=12'} cpu: [ppc64] os: [aix] '@esbuild/android-arm64@0.19.12': - resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==, tarball: https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz} + resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} engines: {node: '>=12'} cpu: [arm64] os: [android] '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==, tarball: https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz} + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} engines: {node: '>=12'} cpu: [arm64] os: [android] '@esbuild/android-arm@0.19.12': - resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==, tarball: https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz} + resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} engines: {node: '>=12'} cpu: [arm] os: [android] '@esbuild/android-arm@0.21.5': - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==, tarball: https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz} + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} engines: {node: '>=12'} cpu: [arm] os: [android] '@esbuild/android-x64@0.19.12': - resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==, tarball: https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz} + resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} engines: {node: '>=12'} cpu: [x64] os: [android] '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==, tarball: https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz} + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} engines: {node: '>=12'} cpu: [x64] os: [android] '@esbuild/darwin-arm64@0.19.12': - resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==, tarball: https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz} + resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] '@esbuild/darwin-arm64@0.21.5': - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==, tarball: https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz} + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] '@esbuild/darwin-x64@0.19.12': - resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==, tarball: https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz} + resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} engines: {node: '>=12'} cpu: [x64] os: [darwin] '@esbuild/darwin-x64@0.21.5': - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==, tarball: https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz} + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] '@esbuild/freebsd-arm64@0.19.12': - resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==, tarball: https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz} + resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] '@esbuild/freebsd-arm64@0.21.5': - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==, tarball: https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz} + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] '@esbuild/freebsd-x64@0.19.12': - resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==, tarball: https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz} + resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] '@esbuild/freebsd-x64@0.21.5': - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==, tarball: https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz} + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] '@esbuild/linux-arm64@0.19.12': - resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==, tarball: https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz} + resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} engines: {node: '>=12'} cpu: [arm64] os: [linux] '@esbuild/linux-arm64@0.21.5': - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==, tarball: https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz} + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} engines: {node: '>=12'} cpu: [arm64] os: [linux] '@esbuild/linux-arm@0.19.12': - resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==, tarball: https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz} + resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} engines: {node: '>=12'} cpu: [arm] os: [linux] '@esbuild/linux-arm@0.21.5': - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==, tarball: https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz} + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} engines: {node: '>=12'} cpu: [arm] os: [linux] '@esbuild/linux-ia32@0.19.12': - resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==, tarball: https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz} + resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} engines: {node: '>=12'} cpu: [ia32] os: [linux] '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==, tarball: https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz} + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} engines: {node: '>=12'} cpu: [ia32] os: [linux] '@esbuild/linux-loong64@0.19.12': - resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==, tarball: https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz} + resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} engines: {node: '>=12'} cpu: [loong64] os: [linux] '@esbuild/linux-loong64@0.21.5': - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==, tarball: https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz} + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] '@esbuild/linux-mips64el@0.19.12': - resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==, tarball: https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz} + resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==, tarball: https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz} + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] '@esbuild/linux-ppc64@0.19.12': - resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==, tarball: https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz} + resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==, tarball: https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz} + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] '@esbuild/linux-riscv64@0.19.12': - resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==, tarball: https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz} + resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] '@esbuild/linux-riscv64@0.21.5': - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==, tarball: https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz} + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] '@esbuild/linux-s390x@0.19.12': - resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==, tarball: https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz} + resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} engines: {node: '>=12'} cpu: [s390x] os: [linux] '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==, tarball: https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz} + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} engines: {node: '>=12'} cpu: [s390x] os: [linux] '@esbuild/linux-x64@0.19.12': - resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==, tarball: https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz} + resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} engines: {node: '>=12'} cpu: [x64] os: [linux] '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==, tarball: https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz} + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} engines: {node: '>=12'} cpu: [x64] os: [linux] '@esbuild/netbsd-x64@0.19.12': - resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==, tarball: https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz} + resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==, tarball: https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz} + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] '@esbuild/openbsd-x64@0.19.12': - resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==, tarball: https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz} + resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==, tarball: https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz} + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] '@esbuild/sunos-x64@0.19.12': - resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==, tarball: https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz} + resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} engines: {node: '>=12'} cpu: [x64] os: [sunos] '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==, tarball: https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz} + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] '@esbuild/win32-arm64@0.19.12': - resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==, tarball: https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz} + resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} engines: {node: '>=12'} cpu: [arm64] os: [win32] '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==, tarball: https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz} + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} engines: {node: '>=12'} cpu: [arm64] os: [win32] '@esbuild/win32-ia32@0.19.12': - resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==, tarball: https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz} + resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} engines: {node: '>=12'} cpu: [ia32] os: [win32] '@esbuild/win32-ia32@0.21.5': - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==, tarball: https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz} + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} engines: {node: '>=12'} cpu: [ia32] os: [win32] '@esbuild/win32-x64@0.19.12': - resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==, tarball: https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz} + resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} engines: {node: '>=12'} cpu: [x64] os: [win32] '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==, tarball: https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz} + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -1369,7 +1369,7 @@ packages: resolution: {integrity: sha512-Iyn8698hp/e5+v8SNBBruTa7UfrMEP52R16dc9jMpqSyEcPsvWFQo+R6WwHCUnJiLIsuci2ZoEZ7ilrSSCPIVg==} '@fontsource/poppins@5.2.5': - resolution: {integrity: sha512-1S3k45pZOz2jqGPPqKw0in3uxFwnB+d5jSU8Tp9YwH/dIJptE3jdkQbYN0QD861GtuOpn6QhPW/yKt1w7hVRBQ==, tarball: https://registry.npmjs.org/@fontsource/poppins/-/poppins-5.2.5.tgz} + resolution: {integrity: sha512-1S3k45pZOz2jqGPPqKw0in3uxFwnB+d5jSU8Tp9YwH/dIJptE3jdkQbYN0QD861GtuOpn6QhPW/yKt1w7hVRBQ==} '@humanwhocodes/config-array@0.13.0': resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} @@ -1385,106 +1385,106 @@ packages: deprecated: Use @eslint/object-schema instead '@img/sharp-darwin-arm64@0.33.5': - resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==, tarball: https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz} + resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] '@img/sharp-darwin-x64@0.33.5': - resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==, tarball: https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz} + resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] '@img/sharp-libvips-darwin-arm64@1.0.4': - resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==, tarball: https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz} + resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} cpu: [arm64] os: [darwin] '@img/sharp-libvips-darwin-x64@1.0.4': - resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==, tarball: https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz} + resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} cpu: [x64] os: [darwin] '@img/sharp-libvips-linux-arm64@1.0.4': - resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz} + resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} cpu: [arm64] os: [linux] '@img/sharp-libvips-linux-arm@1.0.5': - resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz} + resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} cpu: [arm] os: [linux] '@img/sharp-libvips-linux-s390x@1.0.4': - resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz} + resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} cpu: [s390x] os: [linux] '@img/sharp-libvips-linux-x64@1.0.4': - resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz} + resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} cpu: [x64] os: [linux] '@img/sharp-libvips-linuxmusl-arm64@1.0.4': - resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz} + resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} cpu: [arm64] os: [linux] '@img/sharp-libvips-linuxmusl-x64@1.0.4': - resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==, tarball: https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz} + resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} cpu: [x64] os: [linux] '@img/sharp-linux-arm64@0.33.5': - resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==, tarball: https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz} + resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] '@img/sharp-linux-arm@0.33.5': - resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==, tarball: https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz} + resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] '@img/sharp-linux-s390x@0.33.5': - resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==, tarball: https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz} + resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] '@img/sharp-linux-x64@0.33.5': - resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==, tarball: https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz} + resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] '@img/sharp-linuxmusl-arm64@0.33.5': - resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==, tarball: https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz} + resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] '@img/sharp-linuxmusl-x64@0.33.5': - resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==, tarball: https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz} + resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] '@img/sharp-wasm32@0.33.5': - resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==, tarball: https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz} + resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] '@img/sharp-win32-ia32@0.33.5': - resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==, tarball: https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz} + resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] '@img/sharp-win32-x64@0.33.5': - resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==, tarball: https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz} + resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] @@ -1758,103 +1758,103 @@ packages: resolution: {integrity: sha512-+ywrb0AqkfaYuhHs6LxKWgqbh3I72EpEgESCw37o+9qPx9WTCkgDm2B+eMrwehGtHBWHFU4GXvnSCNiFhhausg==} '@napi-rs/nice-android-arm-eabi@1.0.1': - resolution: {integrity: sha512-5qpvOu5IGwDo7MEKVqqyAxF90I6aLj4n07OzpARdgDRfz8UbBztTByBp0RC59r3J1Ij8uzYi6jI7r5Lws7nn6w==, tarball: https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.0.1.tgz} + resolution: {integrity: sha512-5qpvOu5IGwDo7MEKVqqyAxF90I6aLj4n07OzpARdgDRfz8UbBztTByBp0RC59r3J1Ij8uzYi6jI7r5Lws7nn6w==} engines: {node: '>= 10'} cpu: [arm] os: [android] '@napi-rs/nice-android-arm64@1.0.1': - resolution: {integrity: sha512-GqvXL0P8fZ+mQqG1g0o4AO9hJjQaeYG84FRfZaYjyJtZZZcMjXW5TwkL8Y8UApheJgyE13TQ4YNUssQaTgTyvA==, tarball: https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.0.1.tgz} + resolution: {integrity: sha512-GqvXL0P8fZ+mQqG1g0o4AO9hJjQaeYG84FRfZaYjyJtZZZcMjXW5TwkL8Y8UApheJgyE13TQ4YNUssQaTgTyvA==} engines: {node: '>= 10'} cpu: [arm64] os: [android] '@napi-rs/nice-darwin-arm64@1.0.1': - resolution: {integrity: sha512-91k3HEqUl2fsrz/sKkuEkscj6EAj3/eZNCLqzD2AA0TtVbkQi8nqxZCZDMkfklULmxLkMxuUdKe7RvG/T6s2AA==, tarball: https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.0.1.tgz} + resolution: {integrity: sha512-91k3HEqUl2fsrz/sKkuEkscj6EAj3/eZNCLqzD2AA0TtVbkQi8nqxZCZDMkfklULmxLkMxuUdKe7RvG/T6s2AA==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] '@napi-rs/nice-darwin-x64@1.0.1': - resolution: {integrity: sha512-jXnMleYSIR/+TAN/p5u+NkCA7yidgswx5ftqzXdD5wgy/hNR92oerTXHc0jrlBisbd7DpzoaGY4cFD7Sm5GlgQ==, tarball: https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.0.1.tgz} + resolution: {integrity: sha512-jXnMleYSIR/+TAN/p5u+NkCA7yidgswx5ftqzXdD5wgy/hNR92oerTXHc0jrlBisbd7DpzoaGY4cFD7Sm5GlgQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] '@napi-rs/nice-freebsd-x64@1.0.1': - resolution: {integrity: sha512-j+iJ/ezONXRQsVIB/FJfwjeQXX7A2tf3gEXs4WUGFrJjpe/z2KB7sOv6zpkm08PofF36C9S7wTNuzHZ/Iiccfw==, tarball: https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.0.1.tgz} + resolution: {integrity: sha512-j+iJ/ezONXRQsVIB/FJfwjeQXX7A2tf3gEXs4WUGFrJjpe/z2KB7sOv6zpkm08PofF36C9S7wTNuzHZ/Iiccfw==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] '@napi-rs/nice-linux-arm-gnueabihf@1.0.1': - resolution: {integrity: sha512-G8RgJ8FYXYkkSGQwywAUh84m946UTn6l03/vmEXBYNJxQJcD+I3B3k5jmjFG/OPiU8DfvxutOP8bi+F89MCV7Q==, tarball: https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.0.1.tgz} + resolution: {integrity: sha512-G8RgJ8FYXYkkSGQwywAUh84m946UTn6l03/vmEXBYNJxQJcD+I3B3k5jmjFG/OPiU8DfvxutOP8bi+F89MCV7Q==} engines: {node: '>= 10'} cpu: [arm] os: [linux] '@napi-rs/nice-linux-arm64-gnu@1.0.1': - resolution: {integrity: sha512-IMDak59/W5JSab1oZvmNbrms3mHqcreaCeClUjwlwDr0m3BoR09ZiN8cKFBzuSlXgRdZ4PNqCYNeGQv7YMTjuA==, tarball: https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.0.1.tgz} + resolution: {integrity: sha512-IMDak59/W5JSab1oZvmNbrms3mHqcreaCeClUjwlwDr0m3BoR09ZiN8cKFBzuSlXgRdZ4PNqCYNeGQv7YMTjuA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] '@napi-rs/nice-linux-arm64-musl@1.0.1': - resolution: {integrity: sha512-wG8fa2VKuWM4CfjOjjRX9YLIbysSVV1S3Kgm2Fnc67ap/soHBeYZa6AGMeR5BJAylYRjnoVOzV19Cmkco3QEPw==, tarball: https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.0.1.tgz} + resolution: {integrity: sha512-wG8fa2VKuWM4CfjOjjRX9YLIbysSVV1S3Kgm2Fnc67ap/soHBeYZa6AGMeR5BJAylYRjnoVOzV19Cmkco3QEPw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] '@napi-rs/nice-linux-ppc64-gnu@1.0.1': - resolution: {integrity: sha512-lxQ9WrBf0IlNTCA9oS2jg/iAjQyTI6JHzABV664LLrLA/SIdD+I1i3Mjf7TsnoUbgopBcCuDztVLfJ0q9ubf6Q==, tarball: https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.0.1.tgz} + resolution: {integrity: sha512-lxQ9WrBf0IlNTCA9oS2jg/iAjQyTI6JHzABV664LLrLA/SIdD+I1i3Mjf7TsnoUbgopBcCuDztVLfJ0q9ubf6Q==} engines: {node: '>= 10'} cpu: [ppc64] os: [linux] '@napi-rs/nice-linux-riscv64-gnu@1.0.1': - resolution: {integrity: sha512-3xs69dO8WSWBb13KBVex+yvxmUeEsdWexxibqskzoKaWx9AIqkMbWmE2npkazJoopPKX2ULKd8Fm9veEn0g4Ig==, tarball: https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.0.1.tgz} + resolution: {integrity: sha512-3xs69dO8WSWBb13KBVex+yvxmUeEsdWexxibqskzoKaWx9AIqkMbWmE2npkazJoopPKX2ULKd8Fm9veEn0g4Ig==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] '@napi-rs/nice-linux-s390x-gnu@1.0.1': - resolution: {integrity: sha512-lMFI3i9rlW7hgToyAzTaEybQYGbQHDrpRkg+1gJWEpH0PLAQoZ8jiY0IzakLfNWnVda1eTYYlxxFYzW8Rqczkg==, tarball: https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.0.1.tgz} + resolution: {integrity: sha512-lMFI3i9rlW7hgToyAzTaEybQYGbQHDrpRkg+1gJWEpH0PLAQoZ8jiY0IzakLfNWnVda1eTYYlxxFYzW8Rqczkg==} engines: {node: '>= 10'} cpu: [s390x] os: [linux] '@napi-rs/nice-linux-x64-gnu@1.0.1': - resolution: {integrity: sha512-XQAJs7DRN2GpLN6Fb+ZdGFeYZDdGl2Fn3TmFlqEL5JorgWKrQGRUrpGKbgZ25UeZPILuTKJ+OowG2avN8mThBA==, tarball: https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.0.1.tgz} + resolution: {integrity: sha512-XQAJs7DRN2GpLN6Fb+ZdGFeYZDdGl2Fn3TmFlqEL5JorgWKrQGRUrpGKbgZ25UeZPILuTKJ+OowG2avN8mThBA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] '@napi-rs/nice-linux-x64-musl@1.0.1': - resolution: {integrity: sha512-/rodHpRSgiI9o1faq9SZOp/o2QkKQg7T+DK0R5AkbnI/YxvAIEHf2cngjYzLMQSQgUhxym+LFr+UGZx4vK4QdQ==, tarball: https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.0.1.tgz} + resolution: {integrity: sha512-/rodHpRSgiI9o1faq9SZOp/o2QkKQg7T+DK0R5AkbnI/YxvAIEHf2cngjYzLMQSQgUhxym+LFr+UGZx4vK4QdQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] '@napi-rs/nice-win32-arm64-msvc@1.0.1': - resolution: {integrity: sha512-rEcz9vZymaCB3OqEXoHnp9YViLct8ugF+6uO5McifTedjq4QMQs3DHz35xBEGhH3gJWEsXMUbzazkz5KNM5YUg==, tarball: https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.0.1.tgz} + resolution: {integrity: sha512-rEcz9vZymaCB3OqEXoHnp9YViLct8ugF+6uO5McifTedjq4QMQs3DHz35xBEGhH3gJWEsXMUbzazkz5KNM5YUg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] '@napi-rs/nice-win32-ia32-msvc@1.0.1': - resolution: {integrity: sha512-t7eBAyPUrWL8su3gDxw9xxxqNwZzAqKo0Szv3IjVQd1GpXXVkb6vBBQUuxfIYaXMzZLwlxRQ7uzM2vdUE9ULGw==, tarball: https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.0.1.tgz} + resolution: {integrity: sha512-t7eBAyPUrWL8su3gDxw9xxxqNwZzAqKo0Szv3IjVQd1GpXXVkb6vBBQUuxfIYaXMzZLwlxRQ7uzM2vdUE9ULGw==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] '@napi-rs/nice-win32-x64-msvc@1.0.1': - resolution: {integrity: sha512-JlF+uDcatt3St2ntBG8H02F1mM45i5SF9W+bIKiReVE6wiy3o16oBP/yxt+RZ+N6LbCImJXJ6bXNO2kn9AXicg==, tarball: https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.0.1.tgz} + resolution: {integrity: sha512-JlF+uDcatt3St2ntBG8H02F1mM45i5SF9W+bIKiReVE6wiy3o16oBP/yxt+RZ+N6LbCImJXJ6bXNO2kn9AXicg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] '@napi-rs/nice@1.0.1': - resolution: {integrity: sha512-zM0mVWSXE0a0h9aKACLwKmD6nHcRiKrPpCfvaKqG1CqDEyjEawId0ocXxVzPMCAm6kkWr2P025msfxXEnt8UGQ==, tarball: https://registry.npmjs.org/@napi-rs/nice/-/nice-1.0.1.tgz} + resolution: {integrity: sha512-zM0mVWSXE0a0h9aKACLwKmD6nHcRiKrPpCfvaKqG1CqDEyjEawId0ocXxVzPMCAm6kkWr2P025msfxXEnt8UGQ==} engines: {node: '>= 10'} '@napi-rs/wasm-runtime@0.2.4': @@ -1867,49 +1867,49 @@ packages: resolution: {integrity: sha512-noORwKUMkKc96MWjTOwrsUCjky0oFegHbeJ1yEnQBGbMHAaTEIgLZIIfsYF0x3a06PiS+2TXppfifR+O6VWslg==} '@next/swc-darwin-arm64@15.1.6': - resolution: {integrity: sha512-u7lg4Mpl9qWpKgy6NzEkz/w0/keEHtOybmIl0ykgItBxEM5mYotS5PmqTpo+Rhg8FiOiWgwr8USxmKQkqLBCrw==, tarball: https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.1.6.tgz} + resolution: {integrity: sha512-u7lg4Mpl9qWpKgy6NzEkz/w0/keEHtOybmIl0ykgItBxEM5mYotS5PmqTpo+Rhg8FiOiWgwr8USxmKQkqLBCrw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] '@next/swc-darwin-x64@15.1.6': - resolution: {integrity: sha512-x1jGpbHbZoZ69nRuogGL2MYPLqohlhnT9OCU6E6QFewwup+z+M6r8oU47BTeJcWsF2sdBahp5cKiAcDbwwK/lg==, tarball: https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.1.6.tgz} + resolution: {integrity: sha512-x1jGpbHbZoZ69nRuogGL2MYPLqohlhnT9OCU6E6QFewwup+z+M6r8oU47BTeJcWsF2sdBahp5cKiAcDbwwK/lg==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] '@next/swc-linux-arm64-gnu@15.1.6': - resolution: {integrity: sha512-jar9sFw0XewXsBzPf9runGzoivajeWJUc/JkfbLTC4it9EhU8v7tCRLH7l5Y1ReTMN6zKJO0kKAGqDk8YSO2bg==, tarball: https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.1.6.tgz} + resolution: {integrity: sha512-jar9sFw0XewXsBzPf9runGzoivajeWJUc/JkfbLTC4it9EhU8v7tCRLH7l5Y1ReTMN6zKJO0kKAGqDk8YSO2bg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] '@next/swc-linux-arm64-musl@15.1.6': - resolution: {integrity: sha512-+n3u//bfsrIaZch4cgOJ3tXCTbSxz0s6brJtU3SzLOvkJlPQMJ+eHVRi6qM2kKKKLuMY+tcau8XD9CJ1OjeSQQ==, tarball: https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.1.6.tgz} + resolution: {integrity: sha512-+n3u//bfsrIaZch4cgOJ3tXCTbSxz0s6brJtU3SzLOvkJlPQMJ+eHVRi6qM2kKKKLuMY+tcau8XD9CJ1OjeSQQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] '@next/swc-linux-x64-gnu@15.1.6': - resolution: {integrity: sha512-SpuDEXixM3PycniL4iVCLyUyvcl6Lt0mtv3am08sucskpG0tYkW1KlRhTgj4LI5ehyxriVVcfdoxuuP8csi3kQ==, tarball: https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.1.6.tgz} + resolution: {integrity: sha512-SpuDEXixM3PycniL4iVCLyUyvcl6Lt0mtv3am08sucskpG0tYkW1KlRhTgj4LI5ehyxriVVcfdoxuuP8csi3kQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] '@next/swc-linux-x64-musl@15.1.6': - resolution: {integrity: sha512-L4druWmdFSZIIRhF+G60API5sFB7suTbDRhYWSjiw0RbE+15igQvE2g2+S973pMGvwN3guw7cJUjA/TmbPWTHQ==, tarball: https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.1.6.tgz} + resolution: {integrity: sha512-L4druWmdFSZIIRhF+G60API5sFB7suTbDRhYWSjiw0RbE+15igQvE2g2+S973pMGvwN3guw7cJUjA/TmbPWTHQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] '@next/swc-win32-arm64-msvc@15.1.6': - resolution: {integrity: sha512-s8w6EeqNmi6gdvM19tqKKWbCyOBvXFbndkGHl+c9YrzsLARRdCHsD9S1fMj8gsXm9v8vhC8s3N8rjuC/XrtkEg==, tarball: https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.1.6.tgz} + resolution: {integrity: sha512-s8w6EeqNmi6gdvM19tqKKWbCyOBvXFbndkGHl+c9YrzsLARRdCHsD9S1fMj8gsXm9v8vhC8s3N8rjuC/XrtkEg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] '@next/swc-win32-x64-msvc@15.1.6': - resolution: {integrity: sha512-6xomMuu54FAFxttYr5PJbEfu96godcxBTRk1OhAvJq0/EnmFU/Ybiax30Snis4vdWZ9LGpf7Roy5fSs7v/5ROQ==, tarball: https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.1.6.tgz} + resolution: {integrity: sha512-6xomMuu54FAFxttYr5PJbEfu96godcxBTRk1OhAvJq0/EnmFU/Ybiax30Snis4vdWZ9LGpf7Roy5fSs7v/5ROQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -1984,61 +1984,61 @@ packages: resolution: {integrity: sha512-b8wv04GXf+my0mRh5b6iM0QXnWXKOWjeSHUF+9aJR149sJFeZmQMIzB5ywfRZuLYsWX0wUc6vGobLOULwxYbjg==} '@nx/nx-darwin-arm64@20.4.2': - resolution: {integrity: sha512-djXV3rZcDdps2TUo7bMNiB6IkxFlLIZfub5cxPhxSbnrKiMGqmISZNn9n0AmchpNNL6auRWZPAPtDfowtR5GqA==, tarball: https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-20.4.2.tgz} + resolution: {integrity: sha512-djXV3rZcDdps2TUo7bMNiB6IkxFlLIZfub5cxPhxSbnrKiMGqmISZNn9n0AmchpNNL6auRWZPAPtDfowtR5GqA==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] '@nx/nx-darwin-x64@20.4.2': - resolution: {integrity: sha512-3PsiO4zEGgco/pSkYnHIB2j/IEnxsaoME+WdRYa8nRfewASAqCqf7e8DyOCftR7CBsXRosiUQWDcICu3cIfBgw==, tarball: https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-20.4.2.tgz} + resolution: {integrity: sha512-3PsiO4zEGgco/pSkYnHIB2j/IEnxsaoME+WdRYa8nRfewASAqCqf7e8DyOCftR7CBsXRosiUQWDcICu3cIfBgw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] '@nx/nx-freebsd-x64@20.4.2': - resolution: {integrity: sha512-FXaQqn67KDGF6b735GCjFVyWVFWYrVxftvmaM/V4pCmJXjhO3K9NV3jhPVj2MNmrpdYwUtfTP1JMpr/iUBYCQA==, tarball: https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-20.4.2.tgz} + resolution: {integrity: sha512-FXaQqn67KDGF6b735GCjFVyWVFWYrVxftvmaM/V4pCmJXjhO3K9NV3jhPVj2MNmrpdYwUtfTP1JMpr/iUBYCQA==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] '@nx/nx-linux-arm-gnueabihf@20.4.2': - resolution: {integrity: sha512-RcVr6VN7lWJybr0bjs2zaK9mQ0OMFmuILx/8IDniLjAQK8JB+1qQhHLgunAAUJtWv+o0sVb6WXlN/F7PTegmEA==, tarball: https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-20.4.2.tgz} + resolution: {integrity: sha512-RcVr6VN7lWJybr0bjs2zaK9mQ0OMFmuILx/8IDniLjAQK8JB+1qQhHLgunAAUJtWv+o0sVb6WXlN/F7PTegmEA==} engines: {node: '>= 10'} cpu: [arm] os: [linux] '@nx/nx-linux-arm64-gnu@20.4.2': - resolution: {integrity: sha512-Gt38hdU615g+pUAUHe5Z9ingLgpDKNumbJfqe6Y65N9XDHMGvi3YpUwFio2t/8DNZDYY7FH46CBYydDCJjDNyw==, tarball: https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-20.4.2.tgz} + resolution: {integrity: sha512-Gt38hdU615g+pUAUHe5Z9ingLgpDKNumbJfqe6Y65N9XDHMGvi3YpUwFio2t/8DNZDYY7FH46CBYydDCJjDNyw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] '@nx/nx-linux-arm64-musl@20.4.2': - resolution: {integrity: sha512-Kp658KNoRfhi4a/1eoXrxxBiw2kkXqR745iuytVn1f/BL3L2tUHCp6+OyFF7sLx8TnlU9yZAxO62k4DPqS+Ffw==, tarball: https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-20.4.2.tgz} + resolution: {integrity: sha512-Kp658KNoRfhi4a/1eoXrxxBiw2kkXqR745iuytVn1f/BL3L2tUHCp6+OyFF7sLx8TnlU9yZAxO62k4DPqS+Ffw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] '@nx/nx-linux-x64-gnu@20.4.2': - resolution: {integrity: sha512-v+qOF2tmFFPX3fYYCqcdLIgATqlaQcBSHDs8EbwZjdncWk6RQAI/hq6+06+oZQc71RnyhBq5zBE12P0Bj1qTbw==, tarball: https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.4.2.tgz} + resolution: {integrity: sha512-v+qOF2tmFFPX3fYYCqcdLIgATqlaQcBSHDs8EbwZjdncWk6RQAI/hq6+06+oZQc71RnyhBq5zBE12P0Bj1qTbw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] '@nx/nx-linux-x64-musl@20.4.2': - resolution: {integrity: sha512-MxlAqNItkSyiVcB91pOpYWX2Mj6PL9+GzPa63TA0v4PcpZTsFmToYlbKno/1e2T6AKI/0R1ZkAo1XxurUc++nw==, tarball: https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.4.2.tgz} + resolution: {integrity: sha512-MxlAqNItkSyiVcB91pOpYWX2Mj6PL9+GzPa63TA0v4PcpZTsFmToYlbKno/1e2T6AKI/0R1ZkAo1XxurUc++nw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] '@nx/nx-win32-arm64-msvc@20.4.2': - resolution: {integrity: sha512-0FkvctI4lXFK0BEhQjM5If9RC0ja16oVjSacyLY893gBhbSI56Ud/XSA75uF6aplA4AvBe97NPQg5l5btJSxYw==, tarball: https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-20.4.2.tgz} + resolution: {integrity: sha512-0FkvctI4lXFK0BEhQjM5If9RC0ja16oVjSacyLY893gBhbSI56Ud/XSA75uF6aplA4AvBe97NPQg5l5btJSxYw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] '@nx/nx-win32-x64-msvc@20.4.2': - resolution: {integrity: sha512-J7Nh/3hfdlbEXvvIYJI+tAnvupYaeDwSU8ZRlDV7VU5Ee9VLT3hDLhmtXcDjEZnFHNPyaIYgFZXXDppU3a04Xg==, tarball: https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-20.4.2.tgz} + resolution: {integrity: sha512-J7Nh/3hfdlbEXvvIYJI+tAnvupYaeDwSU8ZRlDV7VU5Ee9VLT3hDLhmtXcDjEZnFHNPyaIYgFZXXDppU3a04Xg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -2075,7 +2075,7 @@ packages: typescript: ^3 || ^4 || ^5 '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==, tarball: https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz} + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} '@playwright/test@1.50.1': @@ -2091,7 +2091,7 @@ packages: engines: {node: '>=14'} '@rollup/pluginutils@5.1.4': - resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==, tarball: https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz} + resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -2100,142 +2100,142 @@ packages: optional: true '@rollup/rollup-android-arm-eabi@4.34.6': - resolution: {integrity: sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==, tarball: https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.6.tgz} + resolution: {integrity: sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==} cpu: [arm] os: [android] '@rollup/rollup-android-arm64@4.34.6': - resolution: {integrity: sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA==, tarball: https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.6.tgz} + resolution: {integrity: sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA==} cpu: [arm64] os: [android] '@rollup/rollup-darwin-arm64@4.34.6': - resolution: {integrity: sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg==, tarball: https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.6.tgz} + resolution: {integrity: sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg==} cpu: [arm64] os: [darwin] '@rollup/rollup-darwin-x64@4.34.6': - resolution: {integrity: sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==, tarball: https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.6.tgz} + resolution: {integrity: sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==} cpu: [x64] os: [darwin] '@rollup/rollup-freebsd-arm64@4.34.6': - resolution: {integrity: sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==, tarball: https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.6.tgz} + resolution: {integrity: sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==} cpu: [arm64] os: [freebsd] '@rollup/rollup-freebsd-x64@4.34.6': - resolution: {integrity: sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==, tarball: https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.6.tgz} + resolution: {integrity: sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==} cpu: [x64] os: [freebsd] '@rollup/rollup-linux-arm-gnueabihf@4.34.6': - resolution: {integrity: sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.6.tgz} + resolution: {integrity: sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==} cpu: [arm] os: [linux] '@rollup/rollup-linux-arm-musleabihf@4.34.6': - resolution: {integrity: sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.6.tgz} + resolution: {integrity: sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==} cpu: [arm] os: [linux] '@rollup/rollup-linux-arm64-gnu@4.34.6': - resolution: {integrity: sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.6.tgz} + resolution: {integrity: sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==} cpu: [arm64] os: [linux] '@rollup/rollup-linux-arm64-musl@4.34.6': - resolution: {integrity: sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.6.tgz} + resolution: {integrity: sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==} cpu: [arm64] os: [linux] '@rollup/rollup-linux-loongarch64-gnu@4.34.6': - resolution: {integrity: sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.6.tgz} + resolution: {integrity: sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==} cpu: [loong64] os: [linux] '@rollup/rollup-linux-powerpc64le-gnu@4.34.6': - resolution: {integrity: sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.6.tgz} + resolution: {integrity: sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==} cpu: [ppc64] os: [linux] '@rollup/rollup-linux-riscv64-gnu@4.34.6': - resolution: {integrity: sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.6.tgz} + resolution: {integrity: sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==} cpu: [riscv64] os: [linux] '@rollup/rollup-linux-s390x-gnu@4.34.6': - resolution: {integrity: sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.6.tgz} + resolution: {integrity: sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==} cpu: [s390x] os: [linux] '@rollup/rollup-linux-x64-gnu@4.34.6': - resolution: {integrity: sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.6.tgz} + resolution: {integrity: sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==} cpu: [x64] os: [linux] '@rollup/rollup-linux-x64-musl@4.34.6': - resolution: {integrity: sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.6.tgz} + resolution: {integrity: sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==} cpu: [x64] os: [linux] '@rollup/rollup-win32-arm64-msvc@4.34.6': - resolution: {integrity: sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==, tarball: https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.6.tgz} + resolution: {integrity: sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==} cpu: [arm64] os: [win32] '@rollup/rollup-win32-ia32-msvc@4.34.6': - resolution: {integrity: sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==, tarball: https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.6.tgz} + resolution: {integrity: sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==} cpu: [ia32] os: [win32] '@rollup/rollup-win32-x64-msvc@4.34.6': - resolution: {integrity: sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==, tarball: https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.6.tgz} + resolution: {integrity: sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==} cpu: [x64] os: [win32] '@rspack/binding-darwin-arm64@1.2.2': - resolution: {integrity: sha512-h23F8zEkXWhwMeScm0ZnN78Zh7hCDalxIWsm7bBS0eKadnlegUDwwCF8WE+8NjWr7bRzv0p3QBWlS5ufkcL4eA==, tarball: https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.2.2.tgz} + resolution: {integrity: sha512-h23F8zEkXWhwMeScm0ZnN78Zh7hCDalxIWsm7bBS0eKadnlegUDwwCF8WE+8NjWr7bRzv0p3QBWlS5ufkcL4eA==} cpu: [arm64] os: [darwin] '@rspack/binding-darwin-x64@1.2.2': - resolution: {integrity: sha512-vG5s7FkEvwrGLfksyDRHwKAHUkhZt1zHZZXJQn4gZKjTBonje8ezdc7IFlDiWpC4S+oBYp73nDWkUzkGRbSdcQ==, tarball: https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.2.2.tgz} + resolution: {integrity: sha512-vG5s7FkEvwrGLfksyDRHwKAHUkhZt1zHZZXJQn4gZKjTBonje8ezdc7IFlDiWpC4S+oBYp73nDWkUzkGRbSdcQ==} cpu: [x64] os: [darwin] '@rspack/binding-linux-arm64-gnu@1.2.2': - resolution: {integrity: sha512-VykY/kiYOzO8E1nYzfJ9+gQEHxb5B6lt5wa8M6xFi5B6jEGU+OsaGskmAZB9/GFImeFDHxDPvhUalI4R9p8O2Q==, tarball: https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.2.tgz} + resolution: {integrity: sha512-VykY/kiYOzO8E1nYzfJ9+gQEHxb5B6lt5wa8M6xFi5B6jEGU+OsaGskmAZB9/GFImeFDHxDPvhUalI4R9p8O2Q==} cpu: [arm64] os: [linux] '@rspack/binding-linux-arm64-musl@1.2.2': - resolution: {integrity: sha512-Z5vAC4wGfXi8XXZ6hs8Q06TYjr3zHf819HB4DI5i4C1eQTeKdZSyoFD0NHFG23bP4NWJffp8KhmoObcy9jBT5Q==, tarball: https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.2.tgz} + resolution: {integrity: sha512-Z5vAC4wGfXi8XXZ6hs8Q06TYjr3zHf819HB4DI5i4C1eQTeKdZSyoFD0NHFG23bP4NWJffp8KhmoObcy9jBT5Q==} cpu: [arm64] os: [linux] '@rspack/binding-linux-x64-gnu@1.2.2': - resolution: {integrity: sha512-o3pDaL+cH5EeRbDE9gZcdZpBgp5iXvYZBBhe8vZQllYgI4zN5MJEuleV7WplG3UwTXlgZg3Kht4RORSOPn96vg==, tarball: https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.2.tgz} + resolution: {integrity: sha512-o3pDaL+cH5EeRbDE9gZcdZpBgp5iXvYZBBhe8vZQllYgI4zN5MJEuleV7WplG3UwTXlgZg3Kht4RORSOPn96vg==} cpu: [x64] os: [linux] '@rspack/binding-linux-x64-musl@1.2.2': - resolution: {integrity: sha512-RE3e0xe4DdchHssttKzryDwjLkbrNk/4H59TkkWeGYJcLw41tmcOZVFQUOwKLUvXWVyif/vjvV/w1SMlqB4wQg==, tarball: https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.2.tgz} + resolution: {integrity: sha512-RE3e0xe4DdchHssttKzryDwjLkbrNk/4H59TkkWeGYJcLw41tmcOZVFQUOwKLUvXWVyif/vjvV/w1SMlqB4wQg==} cpu: [x64] os: [linux] '@rspack/binding-win32-arm64-msvc@1.2.2': - resolution: {integrity: sha512-R+PKBYn6uzTaDdVqTHvjqiJPBr5ZHg1wg5UmFDLNH9OklzVFyQh1JInSdJRb7lzfzTRz6bEkkwUFBPQK/CGScw==, tarball: https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.2.tgz} + resolution: {integrity: sha512-R+PKBYn6uzTaDdVqTHvjqiJPBr5ZHg1wg5UmFDLNH9OklzVFyQh1JInSdJRb7lzfzTRz6bEkkwUFBPQK/CGScw==} cpu: [arm64] os: [win32] '@rspack/binding-win32-ia32-msvc@1.2.2': - resolution: {integrity: sha512-dBqz3sRAGZ2f31FgzKLDvIRfq2haRP3X3XVCT0PsiMcvt7QJng+26aYYMy2THatd/nM8IwExYeitHWeiMBoruw==, tarball: https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.2.2.tgz} + resolution: {integrity: sha512-dBqz3sRAGZ2f31FgzKLDvIRfq2haRP3X3XVCT0PsiMcvt7QJng+26aYYMy2THatd/nM8IwExYeitHWeiMBoruw==} cpu: [ia32] os: [win32] '@rspack/binding-win32-x64-msvc@1.2.2': - resolution: {integrity: sha512-eeAvaN831KG553cMSHkVldyk6YQn4ujgRHov6r1wtREq7CD3/ka9LMkJUepCN85K7XtwYT0N4KpFIQyf5GTGoA==, tarball: https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.2.tgz} + resolution: {integrity: sha512-eeAvaN831KG553cMSHkVldyk6YQn4ujgRHov6r1wtREq7CD3/ka9LMkJUepCN85K7XtwYT0N4KpFIQyf5GTGoA==} cpu: [x64] os: [win32] @@ -2300,237 +2300,237 @@ packages: resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} '@smithy/abort-controller@4.0.1': - resolution: {integrity: sha512-fiUIYgIgRjMWznk6iLJz35K2YxSLHzLBA/RC6lBrKfQ8fHbPfvk7Pk9UvpKoHgJjI18MnbPuEju53zcVy6KF1g==, tarball: https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.1.tgz} + resolution: {integrity: sha512-fiUIYgIgRjMWznk6iLJz35K2YxSLHzLBA/RC6lBrKfQ8fHbPfvk7Pk9UvpKoHgJjI18MnbPuEju53zcVy6KF1g==} engines: {node: '>=18.0.0'} '@smithy/config-resolver@4.0.1': - resolution: {integrity: sha512-Igfg8lKu3dRVkTSEm98QpZUvKEOa71jDX4vKRcvJVyRc3UgN3j7vFMf0s7xLQhYmKa8kyJGQgUJDOV5V3neVlQ==, tarball: https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.0.1.tgz} + resolution: {integrity: sha512-Igfg8lKu3dRVkTSEm98QpZUvKEOa71jDX4vKRcvJVyRc3UgN3j7vFMf0s7xLQhYmKa8kyJGQgUJDOV5V3neVlQ==} engines: {node: '>=18.0.0'} '@smithy/core@3.1.2': - resolution: {integrity: sha512-htwQXkbdF13uwwDevz9BEzL5ABK+1sJpVQXywwGSH973AVOvisHNfpcB8A8761G6XgHoS2kHPqc9DqHJ2gp+/Q==, tarball: https://registry.npmjs.org/@smithy/core/-/core-3.1.2.tgz} + resolution: {integrity: sha512-htwQXkbdF13uwwDevz9BEzL5ABK+1sJpVQXywwGSH973AVOvisHNfpcB8A8761G6XgHoS2kHPqc9DqHJ2gp+/Q==} engines: {node: '>=18.0.0'} '@smithy/credential-provider-imds@4.0.1': - resolution: {integrity: sha512-l/qdInaDq1Zpznpmev/+52QomsJNZ3JkTl5yrTl02V6NBgJOQ4LY0SFw/8zsMwj3tLe8vqiIuwF6nxaEwgf6mg==, tarball: https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.1.tgz} + resolution: {integrity: sha512-l/qdInaDq1Zpznpmev/+52QomsJNZ3JkTl5yrTl02V6NBgJOQ4LY0SFw/8zsMwj3tLe8vqiIuwF6nxaEwgf6mg==} engines: {node: '>=18.0.0'} '@smithy/fetch-http-handler@5.0.1': - resolution: {integrity: sha512-3aS+fP28urrMW2KTjb6z9iFow6jO8n3MFfineGbndvzGZit3taZhKWtTorf+Gp5RpFDDafeHlhfsGlDCXvUnJA==, tarball: https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.1.tgz} + resolution: {integrity: sha512-3aS+fP28urrMW2KTjb6z9iFow6jO8n3MFfineGbndvzGZit3taZhKWtTorf+Gp5RpFDDafeHlhfsGlDCXvUnJA==} engines: {node: '>=18.0.0'} '@smithy/hash-node@4.0.1': - resolution: {integrity: sha512-TJ6oZS+3r2Xu4emVse1YPB3Dq3d8RkZDKcPr71Nj/lJsdAP1c7oFzYqEn1IBc915TsgLl2xIJNuxCz+gLbLE0w==, tarball: https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.1.tgz} + resolution: {integrity: sha512-TJ6oZS+3r2Xu4emVse1YPB3Dq3d8RkZDKcPr71Nj/lJsdAP1c7oFzYqEn1IBc915TsgLl2xIJNuxCz+gLbLE0w==} engines: {node: '>=18.0.0'} '@smithy/invalid-dependency@4.0.1': - resolution: {integrity: sha512-gdudFPf4QRQ5pzj7HEnu6FhKRi61BfH/Gk5Yf6O0KiSbr1LlVhgjThcvjdu658VE6Nve8vaIWB8/fodmS1rBPQ==, tarball: https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.1.tgz} + resolution: {integrity: sha512-gdudFPf4QRQ5pzj7HEnu6FhKRi61BfH/Gk5Yf6O0KiSbr1LlVhgjThcvjdu658VE6Nve8vaIWB8/fodmS1rBPQ==} engines: {node: '>=18.0.0'} '@smithy/is-array-buffer@2.2.0': - resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==, tarball: https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz} + resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} engines: {node: '>=14.0.0'} '@smithy/is-array-buffer@4.0.0': - resolution: {integrity: sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==, tarball: https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz} + resolution: {integrity: sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==} engines: {node: '>=18.0.0'} '@smithy/middleware-content-length@4.0.1': - resolution: {integrity: sha512-OGXo7w5EkB5pPiac7KNzVtfCW2vKBTZNuCctn++TTSOMpe6RZO/n6WEC1AxJINn3+vWLKW49uad3lo/u0WJ9oQ==, tarball: https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.1.tgz} + resolution: {integrity: sha512-OGXo7w5EkB5pPiac7KNzVtfCW2vKBTZNuCctn++TTSOMpe6RZO/n6WEC1AxJINn3+vWLKW49uad3lo/u0WJ9oQ==} engines: {node: '>=18.0.0'} '@smithy/middleware-endpoint@4.0.3': - resolution: {integrity: sha512-YdbmWhQF5kIxZjWqPIgboVfi8i5XgiYMM7GGKFMTvBei4XjNQfNv8sukT50ITvgnWKKKpOtp0C0h7qixLgb77Q==, tarball: https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.0.3.tgz} + resolution: {integrity: sha512-YdbmWhQF5kIxZjWqPIgboVfi8i5XgiYMM7GGKFMTvBei4XjNQfNv8sukT50ITvgnWKKKpOtp0C0h7qixLgb77Q==} engines: {node: '>=18.0.0'} '@smithy/middleware-retry@4.0.4': - resolution: {integrity: sha512-wmxyUBGHaYUqul0wZiset4M39SMtDBOtUr2KpDuftKNN74Do9Y36Go6Eqzj9tL0mIPpr31ulB5UUtxcsCeGXsQ==, tarball: https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.0.4.tgz} + resolution: {integrity: sha512-wmxyUBGHaYUqul0wZiset4M39SMtDBOtUr2KpDuftKNN74Do9Y36Go6Eqzj9tL0mIPpr31ulB5UUtxcsCeGXsQ==} engines: {node: '>=18.0.0'} '@smithy/middleware-serde@4.0.2': - resolution: {integrity: sha512-Sdr5lOagCn5tt+zKsaW+U2/iwr6bI9p08wOkCp6/eL6iMbgdtc2R5Ety66rf87PeohR0ExI84Txz9GYv5ou3iQ==, tarball: https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.2.tgz} + resolution: {integrity: sha512-Sdr5lOagCn5tt+zKsaW+U2/iwr6bI9p08wOkCp6/eL6iMbgdtc2R5Ety66rf87PeohR0ExI84Txz9GYv5ou3iQ==} engines: {node: '>=18.0.0'} '@smithy/middleware-stack@4.0.1': - resolution: {integrity: sha512-dHwDmrtR/ln8UTHpaIavRSzeIk5+YZTBtLnKwDW3G2t6nAupCiQUvNzNoHBpik63fwUaJPtlnMzXbQrNFWssIA==, tarball: https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.1.tgz} + resolution: {integrity: sha512-dHwDmrtR/ln8UTHpaIavRSzeIk5+YZTBtLnKwDW3G2t6nAupCiQUvNzNoHBpik63fwUaJPtlnMzXbQrNFWssIA==} engines: {node: '>=18.0.0'} '@smithy/node-config-provider@4.0.1': - resolution: {integrity: sha512-8mRTjvCtVET8+rxvmzRNRR0hH2JjV0DFOmwXPrISmTIJEfnCBugpYYGAsCj8t41qd+RB5gbheSQ/6aKZCQvFLQ==, tarball: https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.0.1.tgz} + resolution: {integrity: sha512-8mRTjvCtVET8+rxvmzRNRR0hH2JjV0DFOmwXPrISmTIJEfnCBugpYYGAsCj8t41qd+RB5gbheSQ/6aKZCQvFLQ==} engines: {node: '>=18.0.0'} '@smithy/node-http-handler@4.0.2': - resolution: {integrity: sha512-X66H9aah9hisLLSnGuzRYba6vckuFtGE+a5DcHLliI/YlqKrGoxhisD5XbX44KyoeRzoNlGr94eTsMVHFAzPOw==, tarball: https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.2.tgz} + resolution: {integrity: sha512-X66H9aah9hisLLSnGuzRYba6vckuFtGE+a5DcHLliI/YlqKrGoxhisD5XbX44KyoeRzoNlGr94eTsMVHFAzPOw==} engines: {node: '>=18.0.0'} '@smithy/property-provider@4.0.1': - resolution: {integrity: sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ==, tarball: https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.1.tgz} + resolution: {integrity: sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ==} engines: {node: '>=18.0.0'} '@smithy/protocol-http@5.0.1': - resolution: {integrity: sha512-TE4cpj49jJNB/oHyh/cRVEgNZaoPaxd4vteJNB0yGidOCVR0jCw/hjPVsT8Q8FRmj8Bd3bFZt8Dh7xGCT+xMBQ==, tarball: https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.0.1.tgz} + resolution: {integrity: sha512-TE4cpj49jJNB/oHyh/cRVEgNZaoPaxd4vteJNB0yGidOCVR0jCw/hjPVsT8Q8FRmj8Bd3bFZt8Dh7xGCT+xMBQ==} engines: {node: '>=18.0.0'} '@smithy/querystring-builder@4.0.1': - resolution: {integrity: sha512-wU87iWZoCbcqrwszsOewEIuq+SU2mSoBE2CcsLwE0I19m0B2gOJr1MVjxWcDQYOzHbR1xCk7AcOBbGFUYOKvdg==, tarball: https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.1.tgz} + resolution: {integrity: sha512-wU87iWZoCbcqrwszsOewEIuq+SU2mSoBE2CcsLwE0I19m0B2gOJr1MVjxWcDQYOzHbR1xCk7AcOBbGFUYOKvdg==} engines: {node: '>=18.0.0'} '@smithy/querystring-parser@4.0.1': - resolution: {integrity: sha512-Ma2XC7VS9aV77+clSFylVUnPZRindhB7BbmYiNOdr+CHt/kZNJoPP0cd3QxCnCFyPXC4eybmyE98phEHkqZ5Jw==, tarball: https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.1.tgz} + resolution: {integrity: sha512-Ma2XC7VS9aV77+clSFylVUnPZRindhB7BbmYiNOdr+CHt/kZNJoPP0cd3QxCnCFyPXC4eybmyE98phEHkqZ5Jw==} engines: {node: '>=18.0.0'} '@smithy/service-error-classification@4.0.1': - resolution: {integrity: sha512-3JNjBfOWpj/mYfjXJHB4Txc/7E4LVq32bwzE7m28GN79+M1f76XHflUaSUkhOriprPDzev9cX/M+dEB80DNDKA==, tarball: https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.1.tgz} + resolution: {integrity: sha512-3JNjBfOWpj/mYfjXJHB4Txc/7E4LVq32bwzE7m28GN79+M1f76XHflUaSUkhOriprPDzev9cX/M+dEB80DNDKA==} engines: {node: '>=18.0.0'} '@smithy/shared-ini-file-loader@4.0.1': - resolution: {integrity: sha512-hC8F6qTBbuHRI/uqDgqqi6J0R4GtEZcgrZPhFQnMhfJs3MnUTGSnR1NSJCJs5VWlMydu0kJz15M640fJlRsIOw==, tarball: https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.1.tgz} + resolution: {integrity: sha512-hC8F6qTBbuHRI/uqDgqqi6J0R4GtEZcgrZPhFQnMhfJs3MnUTGSnR1NSJCJs5VWlMydu0kJz15M640fJlRsIOw==} engines: {node: '>=18.0.0'} '@smithy/signature-v4@5.0.1': - resolution: {integrity: sha512-nCe6fQ+ppm1bQuw5iKoeJ0MJfz2os7Ic3GBjOkLOPtavbD1ONoyE3ygjBfz2ythFWm4YnRm6OxW+8p/m9uCoIA==, tarball: https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.0.1.tgz} + resolution: {integrity: sha512-nCe6fQ+ppm1bQuw5iKoeJ0MJfz2os7Ic3GBjOkLOPtavbD1ONoyE3ygjBfz2ythFWm4YnRm6OxW+8p/m9uCoIA==} engines: {node: '>=18.0.0'} '@smithy/smithy-client@4.1.3': - resolution: {integrity: sha512-A2Hz85pu8BJJaYFdX8yb1yocqigyqBzn+OVaVgm+Kwi/DkN8vhN2kbDVEfADo6jXf5hPKquMLGA3UINA64UZ7A==, tarball: https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.1.3.tgz} + resolution: {integrity: sha512-A2Hz85pu8BJJaYFdX8yb1yocqigyqBzn+OVaVgm+Kwi/DkN8vhN2kbDVEfADo6jXf5hPKquMLGA3UINA64UZ7A==} engines: {node: '>=18.0.0'} '@smithy/types@4.1.0': - resolution: {integrity: sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==, tarball: https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz} + resolution: {integrity: sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==} engines: {node: '>=18.0.0'} '@smithy/url-parser@4.0.1': - resolution: {integrity: sha512-gPXcIEUtw7VlK8f/QcruNXm7q+T5hhvGu9tl63LsJPZ27exB6dtNwvh2HIi0v7JcXJ5emBxB+CJxwaLEdJfA+g==, tarball: https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.1.tgz} + resolution: {integrity: sha512-gPXcIEUtw7VlK8f/QcruNXm7q+T5hhvGu9tl63LsJPZ27exB6dtNwvh2HIi0v7JcXJ5emBxB+CJxwaLEdJfA+g==} engines: {node: '>=18.0.0'} '@smithy/util-base64@4.0.0': - resolution: {integrity: sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==, tarball: https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.0.0.tgz} + resolution: {integrity: sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==} engines: {node: '>=18.0.0'} '@smithy/util-body-length-browser@4.0.0': - resolution: {integrity: sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==, tarball: https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz} + resolution: {integrity: sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==} engines: {node: '>=18.0.0'} '@smithy/util-body-length-node@4.0.0': - resolution: {integrity: sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==, tarball: https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz} + resolution: {integrity: sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==} engines: {node: '>=18.0.0'} '@smithy/util-buffer-from@2.2.0': - resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==, tarball: https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz} + resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} engines: {node: '>=14.0.0'} '@smithy/util-buffer-from@4.0.0': - resolution: {integrity: sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==, tarball: https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz} + resolution: {integrity: sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==} engines: {node: '>=18.0.0'} '@smithy/util-config-provider@4.0.0': - resolution: {integrity: sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==, tarball: https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz} + resolution: {integrity: sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==} engines: {node: '>=18.0.0'} '@smithy/util-defaults-mode-browser@4.0.4': - resolution: {integrity: sha512-Ej1bV5sbrIfH++KnWxjjzFNq9nyP3RIUq2c9Iqq7SmMO/idUR24sqvKH2LUQFTSPy/K7G4sB2m8n7YYlEAfZaw==, tarball: https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.4.tgz} + resolution: {integrity: sha512-Ej1bV5sbrIfH++KnWxjjzFNq9nyP3RIUq2c9Iqq7SmMO/idUR24sqvKH2LUQFTSPy/K7G4sB2m8n7YYlEAfZaw==} engines: {node: '>=18.0.0'} '@smithy/util-defaults-mode-node@4.0.4': - resolution: {integrity: sha512-HE1I7gxa6yP7ZgXPCFfZSDmVmMtY7SHqzFF55gM/GPegzZKaQWZZ+nYn9C2Cc3JltCMyWe63VPR3tSFDEvuGjw==, tarball: https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.4.tgz} + resolution: {integrity: sha512-HE1I7gxa6yP7ZgXPCFfZSDmVmMtY7SHqzFF55gM/GPegzZKaQWZZ+nYn9C2Cc3JltCMyWe63VPR3tSFDEvuGjw==} engines: {node: '>=18.0.0'} '@smithy/util-endpoints@3.0.1': - resolution: {integrity: sha512-zVdUENQpdtn9jbpD9SCFK4+aSiavRb9BxEtw9ZGUR1TYo6bBHbIoi7VkrFQ0/RwZlzx0wRBaRmPclj8iAoJCLA==, tarball: https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.1.tgz} + resolution: {integrity: sha512-zVdUENQpdtn9jbpD9SCFK4+aSiavRb9BxEtw9ZGUR1TYo6bBHbIoi7VkrFQ0/RwZlzx0wRBaRmPclj8iAoJCLA==} engines: {node: '>=18.0.0'} '@smithy/util-hex-encoding@4.0.0': - resolution: {integrity: sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==, tarball: https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz} + resolution: {integrity: sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==} engines: {node: '>=18.0.0'} '@smithy/util-middleware@4.0.1': - resolution: {integrity: sha512-HiLAvlcqhbzhuiOa0Lyct5IIlyIz0PQO5dnMlmQ/ubYM46dPInB+3yQGkfxsk6Q24Y0n3/JmcA1v5iEhmOF5mA==, tarball: https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.1.tgz} + resolution: {integrity: sha512-HiLAvlcqhbzhuiOa0Lyct5IIlyIz0PQO5dnMlmQ/ubYM46dPInB+3yQGkfxsk6Q24Y0n3/JmcA1v5iEhmOF5mA==} engines: {node: '>=18.0.0'} '@smithy/util-retry@4.0.1': - resolution: {integrity: sha512-WmRHqNVwn3kI3rKk1LsKcVgPBG6iLTBGC1iYOV3GQegwJ3E8yjzHytPt26VNzOWr1qu0xE03nK0Ug8S7T7oufw==, tarball: https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.1.tgz} + resolution: {integrity: sha512-WmRHqNVwn3kI3rKk1LsKcVgPBG6iLTBGC1iYOV3GQegwJ3E8yjzHytPt26VNzOWr1qu0xE03nK0Ug8S7T7oufw==} engines: {node: '>=18.0.0'} '@smithy/util-stream@4.0.2': - resolution: {integrity: sha512-0eZ4G5fRzIoewtHtwaYyl8g2C+osYOT4KClXgfdNEDAgkbe2TYPqcnw4GAWabqkZCax2ihRGPe9LZnsPdIUIHA==, tarball: https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.0.2.tgz} + resolution: {integrity: sha512-0eZ4G5fRzIoewtHtwaYyl8g2C+osYOT4KClXgfdNEDAgkbe2TYPqcnw4GAWabqkZCax2ihRGPe9LZnsPdIUIHA==} engines: {node: '>=18.0.0'} '@smithy/util-uri-escape@4.0.0': - resolution: {integrity: sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==, tarball: https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz} + resolution: {integrity: sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==} engines: {node: '>=18.0.0'} '@smithy/util-utf8@2.3.0': - resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==, tarball: https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz} + resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} engines: {node: '>=14.0.0'} '@smithy/util-utf8@4.0.0': - resolution: {integrity: sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==, tarball: https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz} + resolution: {integrity: sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==} engines: {node: '>=18.0.0'} '@svgr/babel-plugin-add-jsx-attribute@8.0.0': - resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==, tarball: https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz} + resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 '@svgr/babel-plugin-remove-jsx-attribute@8.0.0': - resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==, tarball: https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz} + resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0': - resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==, tarball: https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz} + resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0': - resolution: {integrity: sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==, tarball: https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz} + resolution: {integrity: sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 '@svgr/babel-plugin-svg-dynamic-title@8.0.0': - resolution: {integrity: sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==, tarball: https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz} + resolution: {integrity: sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 '@svgr/babel-plugin-svg-em-dimensions@8.0.0': - resolution: {integrity: sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==, tarball: https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz} + resolution: {integrity: sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 '@svgr/babel-plugin-transform-react-native-svg@8.1.0': - resolution: {integrity: sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==, tarball: https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz} + resolution: {integrity: sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 '@svgr/babel-plugin-transform-svg-component@8.0.0': - resolution: {integrity: sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==, tarball: https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz} + resolution: {integrity: sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==} engines: {node: '>=12'} peerDependencies: '@babel/core': ^7.0.0-0 '@svgr/babel-preset@8.1.0': - resolution: {integrity: sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==, tarball: https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz} + resolution: {integrity: sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 '@svgr/core@8.1.0': - resolution: {integrity: sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==, tarball: https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz} + resolution: {integrity: sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==} engines: {node: '>=14'} '@svgr/hast-util-to-babel-ast@8.0.0': - resolution: {integrity: sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==, tarball: https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz} + resolution: {integrity: sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==} engines: {node: '>=14'} '@svgr/plugin-jsx@8.1.0': - resolution: {integrity: sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==, tarball: https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz} + resolution: {integrity: sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==} engines: {node: '>=14'} peerDependencies: '@svgr/core': '*' @@ -2573,61 +2573,61 @@ packages: optional: true '@swc/core-darwin-arm64@1.5.29': - resolution: {integrity: sha512-6F/sSxpHaq3nzg2ADv9FHLi4Fu2A8w8vP8Ich8gIl16D2htStlwnaPmCLjRswO+cFkzgVqy/l01gzNGWd4DFqA==, tarball: https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.5.29.tgz} + resolution: {integrity: sha512-6F/sSxpHaq3nzg2ADv9FHLi4Fu2A8w8vP8Ich8gIl16D2htStlwnaPmCLjRswO+cFkzgVqy/l01gzNGWd4DFqA==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] '@swc/core-darwin-x64@1.5.29': - resolution: {integrity: sha512-rF/rXkvUOTdTIfoYbmszbSUGsCyvqACqy1VeP3nXONS+LxFl4bRmRcUTRrblL7IE5RTMCKUuPbqbQSE2hK7bqg==, tarball: https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.5.29.tgz} + resolution: {integrity: sha512-rF/rXkvUOTdTIfoYbmszbSUGsCyvqACqy1VeP3nXONS+LxFl4bRmRcUTRrblL7IE5RTMCKUuPbqbQSE2hK7bqg==} engines: {node: '>=10'} cpu: [x64] os: [darwin] '@swc/core-linux-arm-gnueabihf@1.5.29': - resolution: {integrity: sha512-2OAPL8iWBsmmwkjGXqvuUhbmmoLxS1xNXiMq87EsnCNMAKohGc7wJkdAOUL6J/YFpean/vwMWg64rJD4pycBeg==, tarball: https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.5.29.tgz} + resolution: {integrity: sha512-2OAPL8iWBsmmwkjGXqvuUhbmmoLxS1xNXiMq87EsnCNMAKohGc7wJkdAOUL6J/YFpean/vwMWg64rJD4pycBeg==} engines: {node: '>=10'} cpu: [arm] os: [linux] '@swc/core-linux-arm64-gnu@1.5.29': - resolution: {integrity: sha512-eH/Q9+8O5qhSxMestZnhuS1xqQMr6M7SolZYxiXJqxArXYILLCF+nq2R9SxuMl0CfjHSpb6+hHPk/HXy54eIRA==, tarball: https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.5.29.tgz} + resolution: {integrity: sha512-eH/Q9+8O5qhSxMestZnhuS1xqQMr6M7SolZYxiXJqxArXYILLCF+nq2R9SxuMl0CfjHSpb6+hHPk/HXy54eIRA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] '@swc/core-linux-arm64-musl@1.5.29': - resolution: {integrity: sha512-TERh2OICAJz+SdDIK9+0GyTUwF6r4xDlFmpoiHKHrrD/Hh3u+6Zue0d7jQ/he/i80GDn4tJQkHlZys+RZL5UZg==, tarball: https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.5.29.tgz} + resolution: {integrity: sha512-TERh2OICAJz+SdDIK9+0GyTUwF6r4xDlFmpoiHKHrrD/Hh3u+6Zue0d7jQ/he/i80GDn4tJQkHlZys+RZL5UZg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] '@swc/core-linux-x64-gnu@1.5.29': - resolution: {integrity: sha512-WMDPqU7Ji9dJpA+Llek2p9t7pcy7Bob8ggPUvgsIlv3R/eesF9DIzSbrgl6j3EAEPB9LFdSafsgf6kT/qnvqFg==, tarball: https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.5.29.tgz} + resolution: {integrity: sha512-WMDPqU7Ji9dJpA+Llek2p9t7pcy7Bob8ggPUvgsIlv3R/eesF9DIzSbrgl6j3EAEPB9LFdSafsgf6kT/qnvqFg==} engines: {node: '>=10'} cpu: [x64] os: [linux] '@swc/core-linux-x64-musl@1.5.29': - resolution: {integrity: sha512-DO14glwpdKY4POSN0201OnGg1+ziaSVr6/RFzuSLggshwXeeyVORiHv3baj7NENhJhWhUy3NZlDsXLnRFkmhHQ==, tarball: https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.5.29.tgz} + resolution: {integrity: sha512-DO14glwpdKY4POSN0201OnGg1+ziaSVr6/RFzuSLggshwXeeyVORiHv3baj7NENhJhWhUy3NZlDsXLnRFkmhHQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] '@swc/core-win32-arm64-msvc@1.5.29': - resolution: {integrity: sha512-V3Y1+a1zG1zpYXUMqPIHEMEOd+rHoVnIpO/KTyFwAmKVu8v+/xPEVx/AGoYE67x4vDAAvPQrKI3Aokilqa5yVg==, tarball: https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.5.29.tgz} + resolution: {integrity: sha512-V3Y1+a1zG1zpYXUMqPIHEMEOd+rHoVnIpO/KTyFwAmKVu8v+/xPEVx/AGoYE67x4vDAAvPQrKI3Aokilqa5yVg==} engines: {node: '>=10'} cpu: [arm64] os: [win32] '@swc/core-win32-ia32-msvc@1.5.29': - resolution: {integrity: sha512-OrM6yfXw4wXhnVFosOJzarw0Fdz5Y0okgHfn9oFbTPJhoqxV5Rdmd6kXxWu2RiVKs6kGSJFZXHDeUq2w5rTIMg==, tarball: https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.5.29.tgz} + resolution: {integrity: sha512-OrM6yfXw4wXhnVFosOJzarw0Fdz5Y0okgHfn9oFbTPJhoqxV5Rdmd6kXxWu2RiVKs6kGSJFZXHDeUq2w5rTIMg==} engines: {node: '>=10'} cpu: [ia32] os: [win32] '@swc/core-win32-x64-msvc@1.5.29': - resolution: {integrity: sha512-eD/gnxqKyZQQR0hR7TMkIlJ+nCF9dzYmVVNbYZWuA1Xy94aBPUsEk3Uw3oG7q6R3ErrEUPP0FNf2ztEnv+I+dw==, tarball: https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.5.29.tgz} + resolution: {integrity: sha512-eD/gnxqKyZQQR0hR7TMkIlJ+nCF9dzYmVVNbYZWuA1Xy94aBPUsEk3Uw3oG7q6R3ErrEUPP0FNf2ztEnv+I+dw==} engines: {node: '>=10'} cpu: [x64] os: [win32] @@ -2739,7 +2739,7 @@ packages: resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==, tarball: https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz} + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} '@types/express-serve-static-core@4.19.6': resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} @@ -2854,7 +2854,7 @@ packages: resolution: {integrity: sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==} '@types/whatwg-url@8.2.2': - resolution: {integrity: sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==, tarball: https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz} + resolution: {integrity: sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==} '@types/ws@8.5.14': resolution: {integrity: sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==} @@ -3435,7 +3435,7 @@ packages: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} bowser@2.11.0: - resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==, tarball: https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz} + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -3460,7 +3460,7 @@ packages: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} bson@4.7.2: - resolution: {integrity: sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==, tarball: https://registry.npmjs.org/bson/-/bson-4.7.2.tgz} + resolution: {integrity: sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==} engines: {node: '>=6.9.0'} bson@6.10.2: @@ -3526,11 +3526,11 @@ packages: engines: {node: '>=6'} camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==, tarball: https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz} + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==, tarball: https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz} + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} caniuse-api@3.0.0: @@ -3654,7 +3654,7 @@ packages: engines: {node: '>= 12'} commander@9.5.0: - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==, tarball: https://registry.npmjs.org/commander/-/commander-9.5.0.tgz} + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} engines: {node: ^12.20.0 || >=14} common-path-prefix@3.0.0: @@ -3734,7 +3734,7 @@ packages: engines: {node: '>=10'} cosmiconfig@8.3.6: - resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==, tarball: https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz} + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} peerDependencies: typescript: '>=4.9.5' @@ -4063,7 +4063,7 @@ packages: resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==, tarball: https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz} + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} dotenv-expand@11.0.7: resolution: {integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==} @@ -4128,11 +4128,11 @@ packages: engines: {node: '>=8.6'} entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==, tarball: https://registry.npmjs.org/entities/-/entities-4.5.0.tgz} + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} errno@0.1.8: - resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==, tarball: https://registry.npmjs.org/errno/-/errno-0.1.8.tgz} + resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} hasBin: true error-ex@1.3.2: @@ -4358,7 +4358,7 @@ packages: engines: {node: '>=4.0'} estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, tarball: https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz} + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} @@ -4452,18 +4452,18 @@ packages: resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} fast-xml-parser@4.4.1: - resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==, tarball: https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz} + resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} hasBin: true fastify-mongodb@4.1.1: - resolution: {integrity: sha512-0L1ix8eXI+U0Ojr0B50G49eagEz4RF1Z/pzSn9pkB3JRZlMItM31MmQReid65wJ58128IsgsTrSgCq+3YV5FQw==, tarball: https://registry.npmjs.org/fastify-mongodb/-/fastify-mongodb-4.1.1.tgz} + resolution: {integrity: sha512-0L1ix8eXI+U0Ojr0B50G49eagEz4RF1Z/pzSn9pkB3JRZlMItM31MmQReid65wJ58128IsgsTrSgCq+3YV5FQw==} fastify-mongodb@4.2.0: resolution: {integrity: sha512-YpNWY8BdJJ/IFfOgo7BQq0iDtvgXetWnhzddglPcgjxjqntxTyi5C2ysJQ3arTcbRsJ+p/cyxh/x1COIxCg9OQ==} deprecated: Please use @fastify/mongodb@5.0.0 instead fastify-plugin@3.0.1: - resolution: {integrity: sha512-qKcDXmuZadJqdTm6vlCqioEbyewF60b/0LOFCcYN1B6BIZGlYJumWWOYs70SFYLDAH4YqdE1cxH/RKMG7rFxgA==, tarball: https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-3.0.1.tgz} + resolution: {integrity: sha512-qKcDXmuZadJqdTm6vlCqioEbyewF60b/0LOFCcYN1B6BIZGlYJumWWOYs70SFYLDAH4YqdE1cxH/RKMG7rFxgA==} fastify-plugin@5.0.1: resolution: {integrity: sha512-HCxs+YnRaWzCl+cWRYFnHmeRFyR5GVnJTAaCJQiYzQSDwK9MgJdyAsuL3nh0EWRCYMgQ5MeziymvmAhUHYHDUQ==} @@ -4644,12 +4644,12 @@ packages: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, tarball: https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz} + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, tarball: https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz} + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] @@ -4939,7 +4939,7 @@ packages: engines: {node: '>= 4'} image-size@0.5.5: - resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==, tarball: https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz} + resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} engines: {node: '>=0.10.0'} hasBin: true @@ -4981,7 +4981,7 @@ packages: engines: {node: '>= 0.4'} ip-address@9.0.5: - resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==, tarball: https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz} + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} engines: {node: '>= 12'} ipaddr.js@1.9.1: @@ -5416,7 +5416,7 @@ packages: hasBin: true jsbn@1.1.0: - resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==, tarball: https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz} + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} jsdom@20.0.3: resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} @@ -5648,7 +5648,7 @@ packages: resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==, tarball: https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz} + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} lowercase-keys@2.0.0: resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} @@ -5682,7 +5682,7 @@ packages: resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} make-dir@2.1.0: - resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==, tarball: https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz} + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} engines: {node: '>=6'} make-dir@4.0.0: @@ -5809,13 +5809,13 @@ packages: resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} mongodb-connection-string-url@2.6.0: - resolution: {integrity: sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==, tarball: https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz} + resolution: {integrity: sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==} mongodb-connection-string-url@3.0.2: resolution: {integrity: sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==} mongodb@4.17.2: - resolution: {integrity: sha512-mLV7SEiov2LHleRJPMPrK2PMyhXFZt2UQLC4VD4pnth3jMjYKHhtqfwwkkvS/NXuo/Fp3vbhaNcXrIDaLRb9Tg==, tarball: https://registry.npmjs.org/mongodb/-/mongodb-4.17.2.tgz} + resolution: {integrity: sha512-mLV7SEiov2LHleRJPMPrK2PMyhXFZt2UQLC4VD4pnth3jMjYKHhtqfwwkkvS/NXuo/Fp3vbhaNcXrIDaLRb9Tg==} engines: {node: '>=12.9.0'} mongodb@6.13.0: @@ -5883,7 +5883,7 @@ packages: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} needle@3.3.1: - resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==, tarball: https://registry.npmjs.org/needle/-/needle-3.3.1.tgz} + resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==} engines: {node: '>= 4.4.x'} hasBin: true @@ -5920,7 +5920,7 @@ packages: optional: true no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==, tarball: https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz} + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} node-abort-controller@3.1.1: resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} @@ -6197,7 +6197,7 @@ packages: resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==, tarball: https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz} + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} pathe@1.1.2: @@ -6944,7 +6944,7 @@ packages: engines: {node: '>=8'} sharp@0.33.5: - resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==, tarball: https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz} + resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} shebang-command@1.2.0: @@ -7015,17 +7015,17 @@ packages: engines: {node: '>=12'} smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==, tarball: https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz} + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} snake-case@3.0.4: - resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==, tarball: https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz} + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} sockjs@0.3.24: resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} socks@2.8.4: - resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==, tarball: https://registry.npmjs.org/socks/-/socks-2.8.4.tgz} + resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} sonic-boom@4.2.0: @@ -7087,7 +7087,7 @@ packages: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==, tarball: https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz} + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} stable-hash@0.0.4: resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==} @@ -7203,7 +7203,7 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} strnum@1.0.5: - resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==, tarball: https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz} + resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} strtok3@7.1.1: resolution: {integrity: sha512-mKX8HA/cdBqMKUr0MMZAFssCkIGoZeSCMXgnt79yKxNFguMLVFgRe6wB+fsL0NmoHDbeyZXczy7vEPSoo3rkzg==} @@ -7259,7 +7259,7 @@ packages: engines: {node: '>= 0.4'} svg-parser@2.0.4: - resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==, tarball: https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz} + resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} svgo@3.3.2: resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==} @@ -7600,7 +7600,7 @@ packages: hasBin: true uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==, tarball: https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz} + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true v8-compile-cache-lib@3.0.1: @@ -7638,7 +7638,7 @@ packages: optional: true vite-plugin-svgr@4.3.0: - resolution: {integrity: sha512-Jy9qLB2/PyWklpYy0xk0UU3TlU0t2UMpJXZvf+hWII1lAmRHrOUKi11Uw8N3rxoNk7atZNYO3pR3vI1f7oi+6w==, tarball: https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-4.3.0.tgz} + resolution: {integrity: sha512-Jy9qLB2/PyWklpYy0xk0UU3TlU0t2UMpJXZvf+hWII1lAmRHrOUKi11Uw8N3rxoNk7atZNYO3pR3vI1f7oi+6w==} peerDependencies: vite: '>=2.6.0' From 690b5377f82e5dacdb9596cc1f6035febec7f0ce Mon Sep 17 00:00:00 2001 From: kenmaqqe Date: Mon, 26 May 2025 18:45:36 +0300 Subject: [PATCH 02/22] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20add=20sort=20compo?= =?UTF-8?q?nent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit create sort component using ant design library --- .../src/pages/OrderPage/OrderPage.module.scss | 0 .../src/pages/{ => OrderPage}/OrderPage.tsx | 6 +- apps/fe-admin/src/pages/index.ts | 2 +- .../src/lib/components/Button/Button.tsx | 2 +- .../src/lib/components/Sort/Sort.module.scss | 31 + .../src/lib/components/Sort/Sort.tsx | 28 + .../lib/components/Table/Table.module.scss | 2 +- .../src/lib/components/Table/Table.tsx | 5 +- libs/ui/ui-shared/src/lib/components/index.ts | 3 +- package.json | 2 + pnpm-lock.yaml | 906 ++++++++++++++++++ 11 files changed, 979 insertions(+), 8 deletions(-) create mode 100644 apps/fe-admin/src/pages/OrderPage/OrderPage.module.scss rename apps/fe-admin/src/pages/{ => OrderPage}/OrderPage.tsx (84%) create mode 100644 libs/ui/ui-shared/src/lib/components/Sort/Sort.module.scss create mode 100644 libs/ui/ui-shared/src/lib/components/Sort/Sort.tsx diff --git a/apps/fe-admin/src/pages/OrderPage/OrderPage.module.scss b/apps/fe-admin/src/pages/OrderPage/OrderPage.module.scss new file mode 100644 index 0000000..e69de29 diff --git a/apps/fe-admin/src/pages/OrderPage.tsx b/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx similarity index 84% rename from apps/fe-admin/src/pages/OrderPage.tsx rename to apps/fe-admin/src/pages/OrderPage/OrderPage.tsx index 54cbf0c..88e9485 100644 --- a/apps/fe-admin/src/pages/OrderPage.tsx +++ b/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx @@ -1,10 +1,12 @@ import React from 'react'; -import { Table } from '@shopery/ui-shared'; +import { Table, Sort } from '@shopery/ui-shared'; +import styles from './OrderPage.module.scss'; const OrderPage = () => { return ( -
+

Orders

+ { - children: string; + children: string | React.ReactNode; variant?: 'fill' | 'border' | 'ghost'; size?: 'small' | 'medium' | 'large'; } diff --git a/libs/ui/ui-shared/src/lib/components/Sort/Sort.module.scss b/libs/ui/ui-shared/src/lib/components/Sort/Sort.module.scss new file mode 100644 index 0000000..ab4c4d8 --- /dev/null +++ b/libs/ui/ui-shared/src/lib/components/Sort/Sort.module.scss @@ -0,0 +1,31 @@ +.sort { + display: flex; + align-items: center; + gap: 8px; + + .ant-select { + width: 100%; + max-width: 250px; + + .ant-select-selector { + border-radius: $border-radius-button; + border: 1px solid $gray-300; + background-color: $white; + font-size: $font-size-sm; + color: $gray-800; + padding: 8px 12px; + + &:hover { + border-color: $primary; + } + } + + .ant-select-arrow { + color: $gray-600; + } + + .ant-select-selection-item { + font-weight: $weight-500; + } + } +} \ No newline at end of file diff --git a/libs/ui/ui-shared/src/lib/components/Sort/Sort.tsx b/libs/ui/ui-shared/src/lib/components/Sort/Sort.tsx new file mode 100644 index 0000000..cf7a220 --- /dev/null +++ b/libs/ui/ui-shared/src/lib/components/Sort/Sort.tsx @@ -0,0 +1,28 @@ +import React from 'react'; +import { Select } from 'antd'; +import styles from './Sort.module.scss'; + +export const Sort = () => { + const handleChange = (value: string) => { + console.log(`selected ${value}`); + }; + + return ( +
+
{ - children: string | React.ReactNode; + children: React.ReactNode; variant?: 'fill' | 'border' | 'ghost'; size?: 'small' | 'medium' | 'large'; } diff --git a/libs/ui/ui-shared/src/lib/components/CustomInput/CustomInput.tsx b/libs/ui/ui-shared/src/lib/components/CustomInput/CustomInput.tsx new file mode 100644 index 0000000..bda6100 --- /dev/null +++ b/libs/ui/ui-shared/src/lib/components/CustomInput/CustomInput.tsx @@ -0,0 +1,33 @@ +import React from 'react'; +import { Input } from 'antd'; + +export type CustomInputProps = { + placeholder?: string; + onChange?: (e: React.ChangeEvent) => void; + error?: string; + hasError?: boolean; +}; + +export const CustomInput = ({ + placeholder, + onChange, + error, + hasError, +}: CustomInputProps) => { + return ( +
+ + {hasError && error && ( +
{error}
+ )} +
+ ); +}; + +export default CustomInput; diff --git a/libs/ui/ui-shared/src/lib/components/CustomSelect/CustomSelect.tsx b/libs/ui/ui-shared/src/lib/components/CustomSelect/CustomSelect.tsx new file mode 100644 index 0000000..6f62a8b --- /dev/null +++ b/libs/ui/ui-shared/src/lib/components/CustomSelect/CustomSelect.tsx @@ -0,0 +1,30 @@ +import React from 'react'; +import { Select } from 'antd'; + +type CustomSelectProps = { + prefix?: string; + onChange?: (value: string) => void; + options?: { value: string; label: string }[]; +}; + +export const CustomSelect = ({ + prefix, + onChange, + options, +}: CustomSelectProps) => { + const handleChange = (value: string) => { + console.log(`selected ${value}`); + }; + + return ( + - - ); -}; - -export default Sort; diff --git a/libs/ui/ui-shared/src/lib/components/Table/Table.tsx b/libs/ui/ui-shared/src/lib/components/Table/Table.tsx index f8cf762..d6e26b8 100644 --- a/libs/ui/ui-shared/src/lib/components/Table/Table.tsx +++ b/libs/ui/ui-shared/src/lib/components/Table/Table.tsx @@ -5,13 +5,13 @@ import styles from './Table.module.scss'; import { MdEdit, MdDelete } from 'react-icons/md'; export type TableProps = { - admin: boolean; + actions: boolean; header: string[]; content: T[]; }; export const Table = ({ - admin, + actions, header, content, }: TableProps) => { @@ -22,7 +22,7 @@ export const Table = ({ {header.map((item, index) => (
))} - {admin && } + {actions && } @@ -31,7 +31,7 @@ export const Table = ({ {Object.values(item).map((value, idx) => ( ))} - {admin && ( + {actions && (
{item}ActionsActions
{value.toString()}
+ + + ), + }, ]; const dataSource = [ From 1d976457b8188093bf9f7cb2cd35f5ea2386e104 Mon Sep 17 00:00:00 2001 From: kenmaqqe Date: Mon, 2 Jun 2025 18:39:39 +0300 Subject: [PATCH 07/22] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20create=20custom=20?= =?UTF-8?q?modal=20component?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/pages/OrderPage/OrderPage.tsx | 19 ++++++- .../components/CustomModal/CustomModal.tsx | 33 ++++++++++++ .../components/CustomTable/Table.module.scss | 52 ------------------- libs/ui/ui-shared/src/lib/components/index.ts | 1 + 4 files changed, 52 insertions(+), 53 deletions(-) create mode 100644 libs/ui/ui-shared/src/lib/components/CustomModal/CustomModal.tsx delete mode 100644 libs/ui/ui-shared/src/lib/components/CustomTable/Table.module.scss diff --git a/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx b/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx index b583bc2..7f4825b 100644 --- a/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx +++ b/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx @@ -1,14 +1,16 @@ +import { useState } from 'react'; import { CustomTable, CustomSelect, CustomInput, Button, + CustomModal, } from '@shopery/ui-shared'; import { useForm, Controller } from 'react-hook-form'; import { yupResolver } from '@hookform/resolvers/yup'; import * as yup from 'yup'; import styles from './OrderPage.module.scss'; -import { MdDelete, MdEdit } from 'react-icons/md'; +import { MdDelete, MdEdit, MdAdd } from 'react-icons/md'; const orderSchema = yup .object({ @@ -74,6 +76,10 @@ const dataSource = [ ]; const OrderPage = () => { + const [openModal, setOpenModal] = useState(false); + const handleClick = () => { + setOpenModal((prev) => !prev); + }; const { control, handleSubmit } = useForm({ resolver: yupResolver(orderSchema), defaultValues: { @@ -108,6 +114,17 @@ const OrderPage = () => { onChange={() => console.log('Filter changed')} /> + + +

Add new order

+

Here you can view and edit order details.

+
); }; diff --git a/libs/ui/ui-shared/src/lib/components/CustomModal/CustomModal.tsx b/libs/ui/ui-shared/src/lib/components/CustomModal/CustomModal.tsx new file mode 100644 index 0000000..fddf652 --- /dev/null +++ b/libs/ui/ui-shared/src/lib/components/CustomModal/CustomModal.tsx @@ -0,0 +1,33 @@ +import { useState } from 'react'; +import { Modal } from 'antd'; +import { Button } from '../Button/Button'; + +type CustomModalProps = { + children: React.ReactNode; + title: string; + open?: boolean; + onOk?: () => void; + onCancel?: () => void; +}; + +export const CustomModal = ({ + children, + title, + open, + onOk, + onCancel, +}: CustomModalProps) => { + return ( + + {children} + + ); +}; + +export default CustomModal; diff --git a/libs/ui/ui-shared/src/lib/components/CustomTable/Table.module.scss b/libs/ui/ui-shared/src/lib/components/CustomTable/Table.module.scss deleted file mode 100644 index 3b5408d..0000000 --- a/libs/ui/ui-shared/src/lib/components/CustomTable/Table.module.scss +++ /dev/null @@ -1,52 +0,0 @@ -.table { - min-width: 100%; - border-collapse: collapse; - font-size: $font-size-md; - color: $gray-900; - background-color: $white; - border: 1px solid $gray-300; - - thead { - background-color: $gray-100; - - th { - padding: 12px; - text-align: left; - font-weight: $weight-600; - font-size: $font-size-sm; - color: $gray-800; - border-bottom: 2px solid $gray-300; - } - } - - tbody { - tr { - &:nth-child(even) { - background-color: $gray-100; - } - - - td { - padding: 12px; - border-bottom: 1px solid $gray-300; - font-size: $font-size-sm; - color: $gray-700; - - &:last-child { - text-align: center; - } - } - } - } - - .actions { - display: flex; - justify-content: center; - gap: 8px; - - button { - font-size: $font-size-sm; - border-radius: $border-radius-button; - } - } -} \ No newline at end of file diff --git a/libs/ui/ui-shared/src/lib/components/index.ts b/libs/ui/ui-shared/src/lib/components/index.ts index 5bb3c1d..35e90a8 100644 --- a/libs/ui/ui-shared/src/lib/components/index.ts +++ b/libs/ui/ui-shared/src/lib/components/index.ts @@ -2,3 +2,4 @@ export * from './Button/Button'; export * from './CustomTable/CustomTable'; export * from './CustomSelect/CustomSelect' export * from './CustomInput/CustomInput'; +export * from './CustomModal/CustomModal'; \ No newline at end of file From 2d404880ea2eb6b51f4898d55589154403af3f8f Mon Sep 17 00:00:00 2001 From: kenmaqqe Date: Mon, 2 Jun 2025 18:57:23 +0300 Subject: [PATCH 08/22] =?UTF-8?q?fix:=20=F0=9F=90=9B=20refactore=20and=20r?= =?UTF-8?q?esolve=20all=20problems?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/fe-admin/src/components/User/User.tsx | 6 +-- apps/fe-admin/src/hooks/useDebounce.ts | 12 ++++++ apps/fe-admin/src/pages/DashboardPage.tsx | 6 +-- .../src/pages/OrderPage/OrderPage.module.scss | 4 ++ .../src/pages/OrderPage/OrderPage.tsx | 39 +++++++++++++------ .../CustomButton.module.scss} | 0 .../CustomButton.tsx} | 6 +-- .../components/CustomModal/CustomModal.tsx | 2 - .../components/CustomSelect/CustomSelect.tsx | 7 +--- libs/ui/ui-shared/src/lib/components/index.ts | 2 +- 10 files changed, 55 insertions(+), 29 deletions(-) create mode 100644 apps/fe-admin/src/hooks/useDebounce.ts rename libs/ui/ui-shared/src/lib/components/{Button/Button.module.scss => CustomButton/CustomButton.module.scss} (100%) rename libs/ui/ui-shared/src/lib/components/{Button/Button.tsx => CustomButton/CustomButton.tsx} (81%) diff --git a/apps/fe-admin/src/components/User/User.tsx b/apps/fe-admin/src/components/User/User.tsx index f9703d9..f6c3544 100644 --- a/apps/fe-admin/src/components/User/User.tsx +++ b/apps/fe-admin/src/components/User/User.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { Button } from '@shopery/ui-shared'; +import { CustomButton } from '@shopery/ui-shared'; import styles from './User.module.scss'; import { User } from '../../types'; import UserAvatarIcon from '@assets/icons/userAvatar.svg?react'; @@ -15,9 +15,9 @@ const UserComponent: React.FC = ({ user }) => {

{user.name}

- + ); }; diff --git a/apps/fe-admin/src/hooks/useDebounce.ts b/apps/fe-admin/src/hooks/useDebounce.ts new file mode 100644 index 0000000..d3bf373 --- /dev/null +++ b/apps/fe-admin/src/hooks/useDebounce.ts @@ -0,0 +1,12 @@ +import { useEffect, useState } from 'react'; + +export function useDebounce(value: T, delay = 300): T { + const [debounced, setDebounced] = useState(value); + + useEffect(() => { + const handler = setTimeout(() => setDebounced(value), delay); + return () => clearTimeout(handler); + }, [value, delay]); + + return debounced; +} \ No newline at end of file diff --git a/apps/fe-admin/src/pages/DashboardPage.tsx b/apps/fe-admin/src/pages/DashboardPage.tsx index f703a91..1b33506 100644 --- a/apps/fe-admin/src/pages/DashboardPage.tsx +++ b/apps/fe-admin/src/pages/DashboardPage.tsx @@ -1,11 +1,11 @@ -import { Button } from '@shopery/ui-shared'; +import { CustomButton } from '@shopery/ui-shared'; const DashboardPage = () => { return (
- +
); }; diff --git a/apps/fe-admin/src/pages/OrderPage/OrderPage.module.scss b/apps/fe-admin/src/pages/OrderPage/OrderPage.module.scss index e69de29..a0ba3e2 100644 --- a/apps/fe-admin/src/pages/OrderPage/OrderPage.module.scss +++ b/apps/fe-admin/src/pages/OrderPage/OrderPage.module.scss @@ -0,0 +1,4 @@ +.ActionButtons{ + display: flex; + gap: 10px; +} \ No newline at end of file diff --git a/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx b/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx index 7f4825b..fbae443 100644 --- a/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx +++ b/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx @@ -3,7 +3,7 @@ import { CustomTable, CustomSelect, CustomInput, - Button, + CustomButton, CustomModal, } from '@shopery/ui-shared'; import { useForm, Controller } from 'react-hook-form'; @@ -11,6 +11,7 @@ import { yupResolver } from '@hookform/resolvers/yup'; import * as yup from 'yup'; import styles from './OrderPage.module.scss'; import { MdDelete, MdEdit, MdAdd } from 'react-icons/md'; +import { useDebounce } from '../../hooks/useDebounce'; // ัˆะปัั…ะธ ะฟั–ะดะบะพั€ะธะณัƒะนั‚ะต ะฟั–ะด ัะตะฑะต const orderSchema = yup .object({ @@ -32,13 +33,13 @@ const columns = [ title: 'Actions', key: 'actions', render: () => ( - - - + ), }, @@ -80,16 +81,32 @@ const OrderPage = () => { const handleClick = () => { setOpenModal((prev) => !prev); }; - const { control, handleSubmit } = useForm({ + const { control, watch } = useForm({ resolver: yupResolver(orderSchema), defaultValues: { search: '', }, }); + + const searchValue = watch('search'); + const debouncedSearch = useDebounce(searchValue, 400); + + const filteredData = dataSource.filter((item) => { + if (!debouncedSearch) return true; + const searchStr = debouncedSearch.toLowerCase(); + return ( + String(item.id).includes(searchStr) || + String(item.userId).includes(searchStr) || + String(item.totalNumberOfProducts).includes(searchStr) || + String(item.totalPrice).includes(searchStr) || + String(item.status).toLowerCase().includes(searchStr) + ); + }); + return (

Orders

-
console.log('Form data:', data))}> + { ]} onChange={() => console.log('Filter changed')} /> - - + { children: React.ReactNode; @@ -8,7 +8,7 @@ export interface ButtonProps extends ButtonHTMLAttributes { size?: 'small' | 'medium' | 'large'; } -export const Button: React.FC = ({ +export const CustomButton: React.FC = ({ children, variant = 'fill', size = 'small', @@ -30,4 +30,4 @@ export const Button: React.FC = ({ ); }; -export default Button; +export default CustomButton; diff --git a/libs/ui/ui-shared/src/lib/components/CustomModal/CustomModal.tsx b/libs/ui/ui-shared/src/lib/components/CustomModal/CustomModal.tsx index fddf652..7a6af14 100644 --- a/libs/ui/ui-shared/src/lib/components/CustomModal/CustomModal.tsx +++ b/libs/ui/ui-shared/src/lib/components/CustomModal/CustomModal.tsx @@ -1,6 +1,4 @@ -import { useState } from 'react'; import { Modal } from 'antd'; -import { Button } from '../Button/Button'; type CustomModalProps = { children: React.ReactNode; diff --git a/libs/ui/ui-shared/src/lib/components/CustomSelect/CustomSelect.tsx b/libs/ui/ui-shared/src/lib/components/CustomSelect/CustomSelect.tsx index 6f62a8b..5c1211a 100644 --- a/libs/ui/ui-shared/src/lib/components/CustomSelect/CustomSelect.tsx +++ b/libs/ui/ui-shared/src/lib/components/CustomSelect/CustomSelect.tsx @@ -12,16 +12,11 @@ export const CustomSelect = ({ onChange, options, }: CustomSelectProps) => { - const handleChange = (value: string) => { - console.log(`selected ${value}`); - }; - return ( - {hasError && error && ( -
{error}
- )} - + ); }; diff --git a/libs/ui/ui-shared/src/lib/components/CustomModal/CustomModal.tsx b/libs/ui/ui-shared/src/lib/components/CustomModal/CustomModal.tsx index 7a6af14..55922ee 100644 --- a/libs/ui/ui-shared/src/lib/components/CustomModal/CustomModal.tsx +++ b/libs/ui/ui-shared/src/lib/components/CustomModal/CustomModal.tsx @@ -6,6 +6,7 @@ type CustomModalProps = { open?: boolean; onOk?: () => void; onCancel?: () => void; + props: React.ComponentProps; }; export const CustomModal = ({ @@ -14,9 +15,11 @@ export const CustomModal = ({ open, onOk, onCancel, + ...props }: CustomModalProps) => { return ( Date: Tue, 10 Jun 2025 21:27:07 +0300 Subject: [PATCH 11/22] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20add=20onClick=20to?= =?UTF-8?q?=20actions=20button=20and=20test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/ActionButtons/ActionButtons.tsx | 12 +++++++++--- apps/fe-admin/src/pages/OrderPage/OrderPage.tsx | 8 +++++++- .../src/lib/components/CustomInput/CustomInput.tsx | 1 + .../src/lib/components/CustomModal/CustomModal.tsx | 1 - 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/apps/fe-admin/src/components/ActionButtons/ActionButtons.tsx b/apps/fe-admin/src/components/ActionButtons/ActionButtons.tsx index a463c97..7392b1c 100644 --- a/apps/fe-admin/src/components/ActionButtons/ActionButtons.tsx +++ b/apps/fe-admin/src/components/ActionButtons/ActionButtons.tsx @@ -2,14 +2,20 @@ import React from 'react'; import { MdDelete, MdEdit } from 'react-icons/md'; import { CustomButton } from '@shopery/ui-shared'; import styles from './ActionButtons.module.scss'; +import { on } from 'events'; -const ActionButtons = () => { +type ActionButtonsProps = { + onClickDelete?: () => void; + onClickEdit?: () => void; +}; + +const ActionButtons = ({ onClickDelete, onClickEdit }: ActionButtonsProps) => { return ( - + - + diff --git a/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx b/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx index fca649e..d0a9a7e 100644 --- a/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx +++ b/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx @@ -33,7 +33,12 @@ const columns = [ { title: 'Actions', key: 'actions', - render: () => , + render: (record) => ( + console.log('Delete order', record.id)} + onClickEdit={() => console.log('Edit order', record.id)} + /> + ), }, ]; @@ -95,6 +100,7 @@ const OrderPage = () => { const handleClick = () => { setOpenModal((prev) => !prev); }; + return (

Orders

diff --git a/libs/ui/ui-shared/src/lib/components/CustomInput/CustomInput.tsx b/libs/ui/ui-shared/src/lib/components/CustomInput/CustomInput.tsx index 81dacb3..e74cf67 100644 --- a/libs/ui/ui-shared/src/lib/components/CustomInput/CustomInput.tsx +++ b/libs/ui/ui-shared/src/lib/components/CustomInput/CustomInput.tsx @@ -13,6 +13,7 @@ export const CustomInput = ({ onChange, error, hasError, + ...props }: CustomInputProps) => { return ( void; onCancel?: () => void; - props: React.ComponentProps; }; export const CustomModal = ({ From 0a109c48aa1a33cc6cf9194a9337da43ecc263a6 Mon Sep 17 00:00:00 2001 From: kenmaqqe Date: Mon, 16 Jun 2025 18:42:38 +0300 Subject: [PATCH 12/22] =?UTF-8?q?refactor:=20=F0=9F=92=A1=20create=20modal?= =?UTF-8?q?=20component=20and=20remake=20modals=20open=20logic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ActionButtons/ActionButtons.tsx | 14 ++-- apps/fe-admin/src/components/Modal/Modal.tsx | 24 +++++++ .../src/pages/OrderPage/OrderPage.tsx | 64 +++++++++---------- 3 files changed, 63 insertions(+), 39 deletions(-) create mode 100644 apps/fe-admin/src/components/Modal/Modal.tsx diff --git a/apps/fe-admin/src/components/ActionButtons/ActionButtons.tsx b/apps/fe-admin/src/components/ActionButtons/ActionButtons.tsx index 7392b1c..6fc192c 100644 --- a/apps/fe-admin/src/components/ActionButtons/ActionButtons.tsx +++ b/apps/fe-admin/src/components/ActionButtons/ActionButtons.tsx @@ -5,19 +5,19 @@ import styles from './ActionButtons.module.scss'; import { on } from 'events'; type ActionButtonsProps = { - onClickDelete?: () => void; - onClickEdit?: () => void; + onEdit?: () => void; + onDelete?: () => void; }; -const ActionButtons = ({ onClickDelete, onClickEdit }: ActionButtonsProps) => { +const ActionButtons = ({ onEdit, onDelete }: ActionButtonsProps) => { return ( - - - - + + + + ); }; diff --git a/apps/fe-admin/src/components/Modal/Modal.tsx b/apps/fe-admin/src/components/Modal/Modal.tsx new file mode 100644 index 0000000..de68611 --- /dev/null +++ b/apps/fe-admin/src/components/Modal/Modal.tsx @@ -0,0 +1,24 @@ +import { CustomModal } from '@shopery/ui-shared'; +import React from 'react'; + +type ModalProps = { + modalType?: 'add' | 'edit' | 'delete' | null; + isOpen: boolean; + onSave: () => void; + onClose: () => void; +}; + +const Modal = ({ modalType, isOpen, onClose, onSave }: ModalProps) => { + return ( + +
{modalType}
+
+ ); +}; + +export default Modal; diff --git a/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx b/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx index d0a9a7e..8098449 100644 --- a/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx +++ b/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx @@ -13,6 +13,7 @@ import styles from './OrderPage.module.scss'; import { MdAdd } from 'react-icons/md'; import ActionButtons from '../../components/ActionButtons/ActionButtons'; import { useDeferredValue } from '../../hooks/useDeferredValue'; +import Modal from '../../components/Modal/Modal'; const orderSchema = yup .object({ @@ -20,28 +21,6 @@ const orderSchema = yup }) .required(); -const columns = [ - { title: 'Order ID', dataIndex: 'id', key: 'id' }, - { title: 'User', dataIndex: 'userId', key: 'userId' }, - { - title: 'Total number of products', - dataIndex: 'totalNumberOfProducts', - key: 'totalNumberOfProducts', - }, - { title: 'Total Price', dataIndex: 'totalPrice', key: 'totalPrice' }, - { title: 'Status', dataIndex: 'status', key: 'status' }, - { - title: 'Actions', - key: 'actions', - render: (record) => ( - console.log('Delete order', record.id)} - onClickEdit={() => console.log('Edit order', record.id)} - /> - ), - }, -]; - const dataSource = [ { id: 1, @@ -75,6 +54,7 @@ const dataSource = [ const OrderPage = () => { const [openModal, setOpenModal] = useState(false); + const [modalType, setModalType] = useState('add'); const { control } = useForm({ resolver: yupResolver(orderSchema), defaultValues: { @@ -82,6 +62,28 @@ const OrderPage = () => { }, }); + const columns = [ + { title: 'Order ID', dataIndex: 'id', key: 'id' }, + { title: 'User', dataIndex: 'userId', key: 'userId' }, + { + title: 'Total number of products', + dataIndex: 'totalNumberOfProducts', + key: 'totalNumberOfProducts', + }, + { title: 'Total Price', dataIndex: 'totalPrice', key: 'totalPrice' }, + { title: 'Status', dataIndex: 'status', key: 'status' }, + { + title: 'Actions', + key: 'actions', + render: (record) => ( + handleClick('edit')} + onDelete={() => handleClick('delete')} + /> + ), + }, + ]; + const searchValue = useWatch({ control, name: 'search' }); const debouncedSearch = useDeferredValue(searchValue?.trim() ?? '', 400); @@ -97,8 +99,9 @@ const OrderPage = () => { ); }); - const handleClick = () => { + const handleClick = (type) => { setOpenModal((prev) => !prev); + setModalType(type); }; return ( @@ -129,17 +132,14 @@ const OrderPage = () => { onChange={() => console.log('Filter changed')} /> - + handleClick('add')}> - -

Add new order

-

Here you can view and edit order details.

-
+ handleClick(null)} + />
); }; From b05f141a7e0ef111b389df5fbfba11d54bc956c5 Mon Sep 17 00:00:00 2001 From: kenmaqqe Date: Mon, 16 Jun 2025 19:19:34 +0300 Subject: [PATCH 13/22] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20create=20new=20mod?= =?UTF-8?q?al=20architecture=20using=20entity=20and=20modalTyp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/fe-admin/src/components/Modal/Modal.tsx | 65 +++++++++++++++++-- .../src/components/Modal/modalType/index.ts | 9 +++ .../Modal/modalType/order/addOrder.tsx | 7 ++ .../Modal/modalType/order/deleteOrder.tsx | 7 ++ .../Modal/modalType/order/editOrder.tsx | 7 ++ .../Modal/modalType/product/addProduct.tsx | 7 ++ .../Modal/modalType/product/deleteProduct.tsx | 7 ++ .../Modal/modalType/product/editProduct.tsx | 7 ++ .../Modal/modalType/user/addUser.tsx | 7 ++ .../Modal/modalType/user/deleteUser.tsx | 7 ++ .../Modal/modalType/user/editUser.tsx | 7 ++ .../src/pages/OrderPage/OrderPage.tsx | 10 +-- 12 files changed, 133 insertions(+), 14 deletions(-) create mode 100644 apps/fe-admin/src/components/Modal/modalType/index.ts create mode 100644 apps/fe-admin/src/components/Modal/modalType/order/addOrder.tsx create mode 100644 apps/fe-admin/src/components/Modal/modalType/order/deleteOrder.tsx create mode 100644 apps/fe-admin/src/components/Modal/modalType/order/editOrder.tsx create mode 100644 apps/fe-admin/src/components/Modal/modalType/product/addProduct.tsx create mode 100644 apps/fe-admin/src/components/Modal/modalType/product/deleteProduct.tsx create mode 100644 apps/fe-admin/src/components/Modal/modalType/product/editProduct.tsx create mode 100644 apps/fe-admin/src/components/Modal/modalType/user/addUser.tsx create mode 100644 apps/fe-admin/src/components/Modal/modalType/user/deleteUser.tsx create mode 100644 apps/fe-admin/src/components/Modal/modalType/user/editUser.tsx diff --git a/apps/fe-admin/src/components/Modal/Modal.tsx b/apps/fe-admin/src/components/Modal/Modal.tsx index de68611..65e89d5 100644 --- a/apps/fe-admin/src/components/Modal/Modal.tsx +++ b/apps/fe-admin/src/components/Modal/Modal.tsx @@ -1,22 +1,73 @@ -import { CustomModal } from '@shopery/ui-shared'; import React from 'react'; +import { + addOrder, + editOrder, + deleteOrder, + addProduct, + editProduct, + deleteProduct, + addUser, + editUser, + deleteUser, +} from './modalType'; +import { CustomModal } from '@shopery/ui-shared'; -type ModalProps = { - modalType?: 'add' | 'edit' | 'delete' | null; +type ModalTypeProps = { + entity: 'order' | 'product' | 'user'; + modalType: 'add' | 'edit' | 'delete'; isOpen: boolean; - onSave: () => void; onClose: () => void; + onSave: () => void; }; -const Modal = ({ modalType, isOpen, onClose, onSave }: ModalProps) => { +const Modal = ({ + entity, + modalType, + isOpen, + onClose, + onSave, +}: ModalTypeProps) => { + let content; + + switch (entity) { + case 'order': + if (modalType === 'add') { + content = addOrder(); + } else if (modalType === 'edit') { + content = editOrder(); + } else if (modalType === 'delete') { + content = deleteOrder(); + } + break; + case 'product': + if (modalType === 'add') { + content = addProduct(); + } else if (modalType === 'edit') { + content = editProduct(); + } else if (modalType === 'delete') { + content = deleteProduct(); + } + break; + case 'user': + if (modalType === 'add') { + content = addUser(); + } else if (modalType === 'edit') { + content = editUser(); + } else if (modalType === 'delete') { + content = deleteUser(); + } + break; + default: + content =
Invalid entity or modal type
; + } return ( -
{modalType}
+ {content}
); }; diff --git a/apps/fe-admin/src/components/Modal/modalType/index.ts b/apps/fe-admin/src/components/Modal/modalType/index.ts new file mode 100644 index 0000000..31509e3 --- /dev/null +++ b/apps/fe-admin/src/components/Modal/modalType/index.ts @@ -0,0 +1,9 @@ +export {default as addProduct} from './product/addProduct'; +export {default as editProduct} from './product/editProduct'; +export {default as deleteProduct} from './product/deleteProduct'; +export {default as addOrder} from './order/addOrder'; +export {default as editOrder} from './order/editOrder'; +export {default as deleteOrder} from './order/deleteOrder'; +export {default as addUser} from './user/addUser'; +export {default as editUser} from './user/editUser'; +export {default as deleteUser} from './user/deleteUser'; \ No newline at end of file diff --git a/apps/fe-admin/src/components/Modal/modalType/order/addOrder.tsx b/apps/fe-admin/src/components/Modal/modalType/order/addOrder.tsx new file mode 100644 index 0000000..25f5412 --- /dev/null +++ b/apps/fe-admin/src/components/Modal/modalType/order/addOrder.tsx @@ -0,0 +1,7 @@ +import React from 'react'; + +const addOrder = () => { + return
addOrder
; +}; + +export default addOrder; diff --git a/apps/fe-admin/src/components/Modal/modalType/order/deleteOrder.tsx b/apps/fe-admin/src/components/Modal/modalType/order/deleteOrder.tsx new file mode 100644 index 0000000..33e4a20 --- /dev/null +++ b/apps/fe-admin/src/components/Modal/modalType/order/deleteOrder.tsx @@ -0,0 +1,7 @@ +import React from 'react'; + +const deleteOrder = () => { + return
deleteOrder
; +}; + +export default deleteOrder; diff --git a/apps/fe-admin/src/components/Modal/modalType/order/editOrder.tsx b/apps/fe-admin/src/components/Modal/modalType/order/editOrder.tsx new file mode 100644 index 0000000..29119e6 --- /dev/null +++ b/apps/fe-admin/src/components/Modal/modalType/order/editOrder.tsx @@ -0,0 +1,7 @@ +import React from 'react'; + +const editOrder = () => { + return
editOrder
; +}; + +export default editOrder; diff --git a/apps/fe-admin/src/components/Modal/modalType/product/addProduct.tsx b/apps/fe-admin/src/components/Modal/modalType/product/addProduct.tsx new file mode 100644 index 0000000..643bec2 --- /dev/null +++ b/apps/fe-admin/src/components/Modal/modalType/product/addProduct.tsx @@ -0,0 +1,7 @@ +import React from 'react'; + +const addProduct = () => { + return
addProduct
; +}; + +export default addProduct; diff --git a/apps/fe-admin/src/components/Modal/modalType/product/deleteProduct.tsx b/apps/fe-admin/src/components/Modal/modalType/product/deleteProduct.tsx new file mode 100644 index 0000000..299f8fb --- /dev/null +++ b/apps/fe-admin/src/components/Modal/modalType/product/deleteProduct.tsx @@ -0,0 +1,7 @@ +import React from 'react'; + +const deleteProduct = () => { + return
deleteProduct
; +}; + +export default deleteProduct; diff --git a/apps/fe-admin/src/components/Modal/modalType/product/editProduct.tsx b/apps/fe-admin/src/components/Modal/modalType/product/editProduct.tsx new file mode 100644 index 0000000..e7219b7 --- /dev/null +++ b/apps/fe-admin/src/components/Modal/modalType/product/editProduct.tsx @@ -0,0 +1,7 @@ +import React from 'react'; + +const editProduct = () => { + return
editProduct
; +}; + +export default editProduct; diff --git a/apps/fe-admin/src/components/Modal/modalType/user/addUser.tsx b/apps/fe-admin/src/components/Modal/modalType/user/addUser.tsx new file mode 100644 index 0000000..d7868c1 --- /dev/null +++ b/apps/fe-admin/src/components/Modal/modalType/user/addUser.tsx @@ -0,0 +1,7 @@ +import React from 'react'; + +const addUser = () => { + return
addUser
; +}; + +export default addUser; diff --git a/apps/fe-admin/src/components/Modal/modalType/user/deleteUser.tsx b/apps/fe-admin/src/components/Modal/modalType/user/deleteUser.tsx new file mode 100644 index 0000000..7cedad6 --- /dev/null +++ b/apps/fe-admin/src/components/Modal/modalType/user/deleteUser.tsx @@ -0,0 +1,7 @@ +import React from 'react'; + +const deleteUser = () => { + return
deleteUser
; +}; + +export default deleteUser; diff --git a/apps/fe-admin/src/components/Modal/modalType/user/editUser.tsx b/apps/fe-admin/src/components/Modal/modalType/user/editUser.tsx new file mode 100644 index 0000000..653a0ba --- /dev/null +++ b/apps/fe-admin/src/components/Modal/modalType/user/editUser.tsx @@ -0,0 +1,7 @@ +import React from 'react'; + +const editUser = () => { + return
editUser
; +}; + +export default editUser; diff --git a/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx b/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx index 8098449..31a5342 100644 --- a/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx +++ b/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx @@ -54,7 +54,7 @@ const dataSource = [ const OrderPage = () => { const [openModal, setOpenModal] = useState(false); - const [modalType, setModalType] = useState('add'); + const [modalType, setModalType] = useState('add'); const { control } = useForm({ resolver: yupResolver(orderSchema), defaultValues: { @@ -99,7 +99,7 @@ const OrderPage = () => { ); }); - const handleClick = (type) => { + const handleClick = (type: string) => { setOpenModal((prev) => !prev); setModalType(type); }; @@ -135,11 +135,7 @@ const OrderPage = () => { handleClick('add')}> - handleClick(null)} - /> +
); }; From b90e31db68faa3935d7ce6b5dabc261b9742609b Mon Sep 17 00:00:00 2001 From: kenmaqqe Date: Mon, 23 Jun 2025 17:54:46 +0300 Subject: [PATCH 14/22] =?UTF-8?q?fix:=20=F0=9F=90=9B=20resolve=20all=20cha?= =?UTF-8?q?nges?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ActionButtons/ActionButtons.module.scss | 2 +- .../ActionButtons/ActionButtons.tsx | 5 +-- apps/fe-admin/src/components/Modal/Modal.tsx | 37 +------------------ .../src/components/Modal/modalType/index.ts | 9 ----- .../Modal/modalType/order/addOrder.tsx | 7 ---- .../Modal/modalType/order/deleteOrder.tsx | 7 ---- .../Modal/modalType/order/editOrder.tsx | 7 ---- .../Modal/modalType/product/addProduct.tsx | 7 ---- .../Modal/modalType/product/deleteProduct.tsx | 7 ---- .../Modal/modalType/product/editProduct.tsx | 7 ---- .../Modal/modalType/user/addUser.tsx | 7 ---- .../Modal/modalType/user/deleteUser.tsx | 7 ---- .../Modal/modalType/user/editUser.tsx | 7 ---- apps/fe-admin/src/hooks/useDeferredValue.ts | 12 ------ .../src/pages/OrderPage/OrderPage.tsx | 21 +++-------- .../components/CustomModal/CustomModal.tsx | 18 +-------- .../components/CustomSelect/CustomSelect.tsx | 18 ++------- .../components/CustomTable/CustomTable.tsx | 16 +------- 18 files changed, 17 insertions(+), 184 deletions(-) delete mode 100644 apps/fe-admin/src/components/Modal/modalType/index.ts delete mode 100644 apps/fe-admin/src/components/Modal/modalType/order/addOrder.tsx delete mode 100644 apps/fe-admin/src/components/Modal/modalType/order/deleteOrder.tsx delete mode 100644 apps/fe-admin/src/components/Modal/modalType/order/editOrder.tsx delete mode 100644 apps/fe-admin/src/components/Modal/modalType/product/addProduct.tsx delete mode 100644 apps/fe-admin/src/components/Modal/modalType/product/deleteProduct.tsx delete mode 100644 apps/fe-admin/src/components/Modal/modalType/product/editProduct.tsx delete mode 100644 apps/fe-admin/src/components/Modal/modalType/user/addUser.tsx delete mode 100644 apps/fe-admin/src/components/Modal/modalType/user/deleteUser.tsx delete mode 100644 apps/fe-admin/src/components/Modal/modalType/user/editUser.tsx delete mode 100644 apps/fe-admin/src/hooks/useDeferredValue.ts diff --git a/apps/fe-admin/src/components/ActionButtons/ActionButtons.module.scss b/apps/fe-admin/src/components/ActionButtons/ActionButtons.module.scss index a0ba3e2..964308a 100644 --- a/apps/fe-admin/src/components/ActionButtons/ActionButtons.module.scss +++ b/apps/fe-admin/src/components/ActionButtons/ActionButtons.module.scss @@ -1,4 +1,4 @@ .ActionButtons{ display: flex; gap: 10px; -} \ No newline at end of file +} diff --git a/apps/fe-admin/src/components/ActionButtons/ActionButtons.tsx b/apps/fe-admin/src/components/ActionButtons/ActionButtons.tsx index 6fc192c..af787f6 100644 --- a/apps/fe-admin/src/components/ActionButtons/ActionButtons.tsx +++ b/apps/fe-admin/src/components/ActionButtons/ActionButtons.tsx @@ -2,7 +2,6 @@ import React from 'react'; import { MdDelete, MdEdit } from 'react-icons/md'; import { CustomButton } from '@shopery/ui-shared'; import styles from './ActionButtons.module.scss'; -import { on } from 'events'; type ActionButtonsProps = { onEdit?: () => void; @@ -11,14 +10,14 @@ type ActionButtonsProps = { const ActionButtons = ({ onEdit, onDelete }: ActionButtonsProps) => { return ( - +
- +
); }; diff --git a/apps/fe-admin/src/components/Modal/Modal.tsx b/apps/fe-admin/src/components/Modal/Modal.tsx index 65e89d5..b92a6cc 100644 --- a/apps/fe-admin/src/components/Modal/Modal.tsx +++ b/apps/fe-admin/src/components/Modal/Modal.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { - addOrder, + AddOrder, editOrder, deleteOrder, addProduct, @@ -27,39 +27,6 @@ const Modal = ({ onClose, onSave, }: ModalTypeProps) => { - let content; - - switch (entity) { - case 'order': - if (modalType === 'add') { - content = addOrder(); - } else if (modalType === 'edit') { - content = editOrder(); - } else if (modalType === 'delete') { - content = deleteOrder(); - } - break; - case 'product': - if (modalType === 'add') { - content = addProduct(); - } else if (modalType === 'edit') { - content = editProduct(); - } else if (modalType === 'delete') { - content = deleteProduct(); - } - break; - case 'user': - if (modalType === 'add') { - content = addUser(); - } else if (modalType === 'edit') { - content = editUser(); - } else if (modalType === 'delete') { - content = deleteUser(); - } - break; - default: - content =
Invalid entity or modal type
; - } return ( - {content} + Modal ); }; diff --git a/apps/fe-admin/src/components/Modal/modalType/index.ts b/apps/fe-admin/src/components/Modal/modalType/index.ts deleted file mode 100644 index 31509e3..0000000 --- a/apps/fe-admin/src/components/Modal/modalType/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -export {default as addProduct} from './product/addProduct'; -export {default as editProduct} from './product/editProduct'; -export {default as deleteProduct} from './product/deleteProduct'; -export {default as addOrder} from './order/addOrder'; -export {default as editOrder} from './order/editOrder'; -export {default as deleteOrder} from './order/deleteOrder'; -export {default as addUser} from './user/addUser'; -export {default as editUser} from './user/editUser'; -export {default as deleteUser} from './user/deleteUser'; \ No newline at end of file diff --git a/apps/fe-admin/src/components/Modal/modalType/order/addOrder.tsx b/apps/fe-admin/src/components/Modal/modalType/order/addOrder.tsx deleted file mode 100644 index 25f5412..0000000 --- a/apps/fe-admin/src/components/Modal/modalType/order/addOrder.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react'; - -const addOrder = () => { - return
addOrder
; -}; - -export default addOrder; diff --git a/apps/fe-admin/src/components/Modal/modalType/order/deleteOrder.tsx b/apps/fe-admin/src/components/Modal/modalType/order/deleteOrder.tsx deleted file mode 100644 index 33e4a20..0000000 --- a/apps/fe-admin/src/components/Modal/modalType/order/deleteOrder.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react'; - -const deleteOrder = () => { - return
deleteOrder
; -}; - -export default deleteOrder; diff --git a/apps/fe-admin/src/components/Modal/modalType/order/editOrder.tsx b/apps/fe-admin/src/components/Modal/modalType/order/editOrder.tsx deleted file mode 100644 index 29119e6..0000000 --- a/apps/fe-admin/src/components/Modal/modalType/order/editOrder.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react'; - -const editOrder = () => { - return
editOrder
; -}; - -export default editOrder; diff --git a/apps/fe-admin/src/components/Modal/modalType/product/addProduct.tsx b/apps/fe-admin/src/components/Modal/modalType/product/addProduct.tsx deleted file mode 100644 index 643bec2..0000000 --- a/apps/fe-admin/src/components/Modal/modalType/product/addProduct.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react'; - -const addProduct = () => { - return
addProduct
; -}; - -export default addProduct; diff --git a/apps/fe-admin/src/components/Modal/modalType/product/deleteProduct.tsx b/apps/fe-admin/src/components/Modal/modalType/product/deleteProduct.tsx deleted file mode 100644 index 299f8fb..0000000 --- a/apps/fe-admin/src/components/Modal/modalType/product/deleteProduct.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react'; - -const deleteProduct = () => { - return
deleteProduct
; -}; - -export default deleteProduct; diff --git a/apps/fe-admin/src/components/Modal/modalType/product/editProduct.tsx b/apps/fe-admin/src/components/Modal/modalType/product/editProduct.tsx deleted file mode 100644 index e7219b7..0000000 --- a/apps/fe-admin/src/components/Modal/modalType/product/editProduct.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react'; - -const editProduct = () => { - return
editProduct
; -}; - -export default editProduct; diff --git a/apps/fe-admin/src/components/Modal/modalType/user/addUser.tsx b/apps/fe-admin/src/components/Modal/modalType/user/addUser.tsx deleted file mode 100644 index d7868c1..0000000 --- a/apps/fe-admin/src/components/Modal/modalType/user/addUser.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react'; - -const addUser = () => { - return
addUser
; -}; - -export default addUser; diff --git a/apps/fe-admin/src/components/Modal/modalType/user/deleteUser.tsx b/apps/fe-admin/src/components/Modal/modalType/user/deleteUser.tsx deleted file mode 100644 index 7cedad6..0000000 --- a/apps/fe-admin/src/components/Modal/modalType/user/deleteUser.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react'; - -const deleteUser = () => { - return
deleteUser
; -}; - -export default deleteUser; diff --git a/apps/fe-admin/src/components/Modal/modalType/user/editUser.tsx b/apps/fe-admin/src/components/Modal/modalType/user/editUser.tsx deleted file mode 100644 index 653a0ba..0000000 --- a/apps/fe-admin/src/components/Modal/modalType/user/editUser.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react'; - -const editUser = () => { - return
editUser
; -}; - -export default editUser; diff --git a/apps/fe-admin/src/hooks/useDeferredValue.ts b/apps/fe-admin/src/hooks/useDeferredValue.ts deleted file mode 100644 index 0f8eb4a..0000000 --- a/apps/fe-admin/src/hooks/useDeferredValue.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { useEffect, useState } from 'react'; - -export function useDeferredValue(value: T, delay = 300): T { - const [deferredValue, setDeferredValue] = useState(value); - - useEffect(() => { - const handler = setTimeout(() => setDeferredValue(value), delay); - return () => clearTimeout(handler); - }, [value, delay]); - - return deferredValue; -} diff --git a/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx b/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx index 31a5342..7588792 100644 --- a/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx +++ b/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react'; +import { useState, useDeferredValue } from 'react'; import { CustomTable, CustomSelect, @@ -7,20 +7,11 @@ import { CustomModal, } from '@shopery/ui-shared'; import { useForm, Controller, useWatch } from 'react-hook-form'; -import { yupResolver } from '@hookform/resolvers/yup'; -import * as yup from 'yup'; import styles from './OrderPage.module.scss'; import { MdAdd } from 'react-icons/md'; import ActionButtons from '../../components/ActionButtons/ActionButtons'; -import { useDeferredValue } from '../../hooks/useDeferredValue'; import Modal from '../../components/Modal/Modal'; -const orderSchema = yup - .object({ - search: yup.string().optional(), - }) - .required(); - const dataSource = [ { id: 1, @@ -53,10 +44,9 @@ const dataSource = [ ]; const OrderPage = () => { - const [openModal, setOpenModal] = useState(false); - const [modalType, setModalType] = useState('add'); + const [isModalOpen, setIsModalOpen] = useState(false); + const [modalType, setModalType] = useState('add'); const { control } = useForm({ - resolver: yupResolver(orderSchema), defaultValues: { search: '', }, @@ -100,7 +90,7 @@ const OrderPage = () => { }); const handleClick = (type: string) => { - setOpenModal((prev) => !prev); + setIsModalOpen((prev) => !prev); setModalType(type); }; @@ -129,13 +119,12 @@ const OrderPage = () => { { value: 'shipped', label: 'Shipped' }, { value: 'delivered', label: 'Delivered' }, ]} - onChange={() => console.log('Filter changed')} /> handleClick('add')}> - + ); }; diff --git a/libs/ui/ui-shared/src/lib/components/CustomModal/CustomModal.tsx b/libs/ui/ui-shared/src/lib/components/CustomModal/CustomModal.tsx index 23b09be..79afcdf 100644 --- a/libs/ui/ui-shared/src/lib/components/CustomModal/CustomModal.tsx +++ b/libs/ui/ui-shared/src/lib/components/CustomModal/CustomModal.tsx @@ -8,23 +8,9 @@ type CustomModalProps = { onCancel?: () => void; }; -export const CustomModal = ({ - children, - title, - open, - onOk, - onCancel, - ...props -}: CustomModalProps) => { +export const CustomModal = ({ children, ...props }: CustomModalProps) => { return ( - + {children} ); diff --git a/libs/ui/ui-shared/src/lib/components/CustomSelect/CustomSelect.tsx b/libs/ui/ui-shared/src/lib/components/CustomSelect/CustomSelect.tsx index 5c1211a..399d5b6 100644 --- a/libs/ui/ui-shared/src/lib/components/CustomSelect/CustomSelect.tsx +++ b/libs/ui/ui-shared/src/lib/components/CustomSelect/CustomSelect.tsx @@ -1,23 +1,11 @@ import React from 'react'; import { Select } from 'antd'; -type CustomSelectProps = { - prefix?: string; - onChange?: (value: string) => void; - options?: { value: string; label: string }[]; -}; - -export const CustomSelect = ({ - prefix, - onChange, - options, -}: CustomSelectProps) => { +export const CustomSelect = ({ ...props }) => { return ( ; +export function CustomTable({ ...props }) { + return
; } export default CustomTable; From b0892f20f006fc86eaa6d01e01d56045ca9c8c9d Mon Sep 17 00:00:00 2001 From: kenmaqqe Date: Mon, 23 Jun 2025 18:59:26 +0300 Subject: [PATCH 15/22] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20new=20archirtectur?= =?UTF-8?q?e=20for=20modal=20component?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/fe-admin/src/components/Modal/Modal.tsx | 42 ------------------- .../src/pages/OrderPage/OrderPage.tsx | 12 +++--- .../components/CustomModal/CustomModal.tsx | 27 +++++++----- .../lib/components/CustomModal/modalStore.ts | 15 +++++++ .../lib/components/CustomModal/modalType.ts | 7 ++++ .../CustomModal/modals/AddProductModal.tsx | 7 ++++ .../CustomModal/modals/AddUserModal.tsx | 7 ++++ .../CustomModal/modals/DeleteModal.tsx | 7 ++++ .../CustomModal/modals/EditProductModal.tsx | 7 ++++ .../CustomModal/modals/EditUserModal.tsx | 7 ++++ .../components/CustomModal/modals/index.ts | 5 +++ .../lib/components/CustomModal/modalsMap.ts | 10 +++++ .../lib/components/CustomModal/useModal.ts | 15 +++++++ libs/ui/ui-shared/src/lib/components/index.ts | 3 +- package.json | 3 +- pnpm-lock.yaml | 26 ++++++++++++ 16 files changed, 139 insertions(+), 61 deletions(-) delete mode 100644 apps/fe-admin/src/components/Modal/Modal.tsx create mode 100644 libs/ui/ui-shared/src/lib/components/CustomModal/modalStore.ts create mode 100644 libs/ui/ui-shared/src/lib/components/CustomModal/modalType.ts create mode 100644 libs/ui/ui-shared/src/lib/components/CustomModal/modals/AddProductModal.tsx create mode 100644 libs/ui/ui-shared/src/lib/components/CustomModal/modals/AddUserModal.tsx create mode 100644 libs/ui/ui-shared/src/lib/components/CustomModal/modals/DeleteModal.tsx create mode 100644 libs/ui/ui-shared/src/lib/components/CustomModal/modals/EditProductModal.tsx create mode 100644 libs/ui/ui-shared/src/lib/components/CustomModal/modals/EditUserModal.tsx create mode 100644 libs/ui/ui-shared/src/lib/components/CustomModal/modals/index.ts create mode 100644 libs/ui/ui-shared/src/lib/components/CustomModal/modalsMap.ts create mode 100644 libs/ui/ui-shared/src/lib/components/CustomModal/useModal.ts diff --git a/apps/fe-admin/src/components/Modal/Modal.tsx b/apps/fe-admin/src/components/Modal/Modal.tsx deleted file mode 100644 index b92a6cc..0000000 --- a/apps/fe-admin/src/components/Modal/Modal.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import React from 'react'; -import { - AddOrder, - editOrder, - deleteOrder, - addProduct, - editProduct, - deleteProduct, - addUser, - editUser, - deleteUser, -} from './modalType'; -import { CustomModal } from '@shopery/ui-shared'; - -type ModalTypeProps = { - entity: 'order' | 'product' | 'user'; - modalType: 'add' | 'edit' | 'delete'; - isOpen: boolean; - onClose: () => void; - onSave: () => void; -}; - -const Modal = ({ - entity, - modalType, - isOpen, - onClose, - onSave, -}: ModalTypeProps) => { - return ( - - Modal - - ); -}; - -export default Modal; diff --git a/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx b/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx index 7588792..8d37033 100644 --- a/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx +++ b/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx @@ -4,13 +4,13 @@ import { CustomSelect, CustomInput, CustomButton, + useModal, CustomModal, } from '@shopery/ui-shared'; import { useForm, Controller, useWatch } from 'react-hook-form'; import styles from './OrderPage.module.scss'; import { MdAdd } from 'react-icons/md'; import ActionButtons from '../../components/ActionButtons/ActionButtons'; -import Modal from '../../components/Modal/Modal'; const dataSource = [ { @@ -46,6 +46,7 @@ const dataSource = [ const OrderPage = () => { const [isModalOpen, setIsModalOpen] = useState(false); const [modalType, setModalType] = useState('add'); + const { openAddUserModal, openEditUserModal, openDeleteModal } = useModal(); const { control } = useForm({ defaultValues: { search: '', @@ -66,10 +67,7 @@ const OrderPage = () => { title: 'Actions', key: 'actions', render: (record) => ( - handleClick('edit')} - onDelete={() => handleClick('delete')} - /> + {}} onDelete={() => {}} /> ), }, ]; @@ -121,10 +119,10 @@ const OrderPage = () => { ]} /> - handleClick('add')}> + openAddUserModal({ userId: null })}> - + ); }; diff --git a/libs/ui/ui-shared/src/lib/components/CustomModal/CustomModal.tsx b/libs/ui/ui-shared/src/lib/components/CustomModal/CustomModal.tsx index 79afcdf..0a25847 100644 --- a/libs/ui/ui-shared/src/lib/components/CustomModal/CustomModal.tsx +++ b/libs/ui/ui-shared/src/lib/components/CustomModal/CustomModal.tsx @@ -1,17 +1,24 @@ import { Modal } from 'antd'; +import { useModalStore } from './modalStore'; +import { modalsMap } from './modalsMap'; -type CustomModalProps = { - children: React.ReactNode; - title: string; - open?: boolean; - onOk?: () => void; - onCancel?: () => void; -}; +export const CustomModal = () => { + const { modalType, modalProps, closeModal } = useModalStore(); + + if (!modalType) return null; + + const ModalComponent = modalsMap[modalType]; + if (!ModalComponent) return null; -export const CustomModal = ({ children, ...props }: CustomModalProps) => { return ( - - {children} + + ); }; diff --git a/libs/ui/ui-shared/src/lib/components/CustomModal/modalStore.ts b/libs/ui/ui-shared/src/lib/components/CustomModal/modalStore.ts new file mode 100644 index 0000000..8c40cf4 --- /dev/null +++ b/libs/ui/ui-shared/src/lib/components/CustomModal/modalStore.ts @@ -0,0 +1,15 @@ +import {create} from 'zustand'; + +interface ModalState { + modalType: string | null; + modalProps: Record; + openModal: (type: string, props?: Record) => void; + closeModal: () => void; +} + +export const useModalStore = create((set)=> ({ + modalType: null, + modalProps: {}, + openModal: (type, props = {}) => set({modalType: type, modalProps: props}), + closeModal: () => set({modalType: null, modalProps: {}}), +})) diff --git a/libs/ui/ui-shared/src/lib/components/CustomModal/modalType.ts b/libs/ui/ui-shared/src/lib/components/CustomModal/modalType.ts new file mode 100644 index 0000000..bab950e --- /dev/null +++ b/libs/ui/ui-shared/src/lib/components/CustomModal/modalType.ts @@ -0,0 +1,7 @@ +export enum ModalType { + ADD_USER = 'ADD_USER', + ADD_PRODUCT = 'ADD_PRODUCT', + EDIT_USER = 'EDIT_USER', + EDIT_PRODUCT = 'EDIT_PRODUCT', + DELETE='DELETE', +} diff --git a/libs/ui/ui-shared/src/lib/components/CustomModal/modals/AddProductModal.tsx b/libs/ui/ui-shared/src/lib/components/CustomModal/modals/AddProductModal.tsx new file mode 100644 index 0000000..0dd6c54 --- /dev/null +++ b/libs/ui/ui-shared/src/lib/components/CustomModal/modals/AddProductModal.tsx @@ -0,0 +1,7 @@ +import React from 'react'; + +const AddProductModal = () => { + return
AddProductModal
; +}; + +export default AddProductModal; diff --git a/libs/ui/ui-shared/src/lib/components/CustomModal/modals/AddUserModal.tsx b/libs/ui/ui-shared/src/lib/components/CustomModal/modals/AddUserModal.tsx new file mode 100644 index 0000000..5cf2135 --- /dev/null +++ b/libs/ui/ui-shared/src/lib/components/CustomModal/modals/AddUserModal.tsx @@ -0,0 +1,7 @@ +import React from 'react'; + +const AddUserModal = () => { + return
AddUserModal
; +}; + +export default AddUserModal; diff --git a/libs/ui/ui-shared/src/lib/components/CustomModal/modals/DeleteModal.tsx b/libs/ui/ui-shared/src/lib/components/CustomModal/modals/DeleteModal.tsx new file mode 100644 index 0000000..ad14275 --- /dev/null +++ b/libs/ui/ui-shared/src/lib/components/CustomModal/modals/DeleteModal.tsx @@ -0,0 +1,7 @@ +import React from 'react'; + +const DeleteModal = () => { + return
DeleteModal
; +}; + +export default DeleteModal; diff --git a/libs/ui/ui-shared/src/lib/components/CustomModal/modals/EditProductModal.tsx b/libs/ui/ui-shared/src/lib/components/CustomModal/modals/EditProductModal.tsx new file mode 100644 index 0000000..a284267 --- /dev/null +++ b/libs/ui/ui-shared/src/lib/components/CustomModal/modals/EditProductModal.tsx @@ -0,0 +1,7 @@ +import React from 'react'; + +const EditProductModal = () => { + return
EditProductModal
; +}; + +export default EditProductModal; diff --git a/libs/ui/ui-shared/src/lib/components/CustomModal/modals/EditUserModal.tsx b/libs/ui/ui-shared/src/lib/components/CustomModal/modals/EditUserModal.tsx new file mode 100644 index 0000000..8e4efdc --- /dev/null +++ b/libs/ui/ui-shared/src/lib/components/CustomModal/modals/EditUserModal.tsx @@ -0,0 +1,7 @@ +import React from 'react'; + +const EditUserModal = () => { + return
EditUserModal
; +}; + +export default EditUserModal; diff --git a/libs/ui/ui-shared/src/lib/components/CustomModal/modals/index.ts b/libs/ui/ui-shared/src/lib/components/CustomModal/modals/index.ts new file mode 100644 index 0000000..51d4cd0 --- /dev/null +++ b/libs/ui/ui-shared/src/lib/components/CustomModal/modals/index.ts @@ -0,0 +1,5 @@ +export {default as AddUserModal} from './AddUserModal'; +export {default as AddProductModal} from './AddProductModal'; +export {default as EditProductModal} from './EditProductModal'; +export {default as EditUserModal} from './EditUserModal'; +export {default as DeleteModal} from './DeleteModal'; \ No newline at end of file diff --git a/libs/ui/ui-shared/src/lib/components/CustomModal/modalsMap.ts b/libs/ui/ui-shared/src/lib/components/CustomModal/modalsMap.ts new file mode 100644 index 0000000..962a41e --- /dev/null +++ b/libs/ui/ui-shared/src/lib/components/CustomModal/modalsMap.ts @@ -0,0 +1,10 @@ +import { ModalType } from "./modalType"; +import {AddUserModal, AddProductModal, EditUserModal, EditProductModal, DeleteModal} from "./modals"; + +export const modalsMap = { + [ModalType.ADD_USER]: AddUserModal, + [ModalType.ADD_PRODUCT]: AddProductModal, + [ModalType.EDIT_USER]: EditUserModal, + [ModalType.EDIT_PRODUCT]: EditProductModal, + [ModalType.DELETE]: DeleteModal, +} diff --git a/libs/ui/ui-shared/src/lib/components/CustomModal/useModal.ts b/libs/ui/ui-shared/src/lib/components/CustomModal/useModal.ts new file mode 100644 index 0000000..4625c2a --- /dev/null +++ b/libs/ui/ui-shared/src/lib/components/CustomModal/useModal.ts @@ -0,0 +1,15 @@ +import { useModalStore } from "./modalStore"; +import { ModalType } from "./modalType"; + +export const useModal = () => { + const { openModal, closeModal } = useModalStore(); + + return { + openAddUserModal: (props?: Record) => openModal(ModalType.ADD_USER, props), + openAddProductModal: (props?: Record) => openModal(ModalType.ADD_PRODUCT, props), + openEditUserModal: (props?: Record) => openModal(ModalType.EDIT_USER, props), + openEditProductModal: (props?: Record) => openModal(ModalType.EDIT_PRODUCT, props), + openDeleteModal: (props?: Record) => openModal(ModalType.DELETE, props), + closeModal + } +} diff --git a/libs/ui/ui-shared/src/lib/components/index.ts b/libs/ui/ui-shared/src/lib/components/index.ts index 230d877..795e2d6 100644 --- a/libs/ui/ui-shared/src/lib/components/index.ts +++ b/libs/ui/ui-shared/src/lib/components/index.ts @@ -2,4 +2,5 @@ export * from './CustomButton/CustomButton'; export * from './CustomTable/CustomTable'; export * from './CustomSelect/CustomSelect' export * from './CustomInput/CustomInput'; -export * from './CustomModal/CustomModal'; +export * from './CustomModal/useModal' +export * from './CustomModal/CustomModal'; \ No newline at end of file diff --git a/package.json b/package.json index 6aaa7f9..c905bad 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,8 @@ "react-hook-form": "^7.56.4", "react-icons": "^5.5.0", "react-router-dom": "6.11.2", - "yup": "^1.6.1" + "yup": "^1.6.1", + "zustand": "^5.0.5" }, "devDependencies": { "@babel/core": "^7.14.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2ecbe79..8b0dee6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -80,6 +80,9 @@ importers: yup: specifier: ^1.6.1 version: 1.6.1 + zustand: + specifier: ^5.0.5 + version: 5.0.5(@types/react@18.3.1)(react@18.3.1) devDependencies: '@babel/core': specifier: ^7.14.5 @@ -8351,6 +8354,24 @@ packages: engines: {node: '>=8.0.0'} hasBin: true + zustand@5.0.5: + resolution: {integrity: sha512-mILtRfKW9xM47hqxGIxCv12gXusoY/xTSHBYApXozR0HmQv299whhBeeAcRy+KrPPybzosvJBCOmVjq6x12fCg==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=18.0.0' + immer: '>=9.0.6' + react: '>=18.0.0' + use-sync-external-store: '>=1.2.0' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + use-sync-external-store: + optional: true + snapshots: '@adobe/css-tools@4.3.3': {} @@ -18518,3 +18539,8 @@ snapshots: validator: 13.12.0 optionalDependencies: commander: 9.5.0 + + zustand@5.0.5(@types/react@18.3.1)(react@18.3.1): + optionalDependencies: + '@types/react': 18.3.1 + react: 18.3.1 From 50b38d0bead0df903faecafdcda8f9d80fe6d496 Mon Sep 17 00:00:00 2001 From: kenmaqqe Date: Mon, 23 Jun 2025 19:15:19 +0300 Subject: [PATCH 16/22] =?UTF-8?q?fix:=20=F0=9F=90=9B=20rebase=20dataSource?= =?UTF-8?q?=20from=20orderPage=20to=20OrderTableData=20file?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/fe-admin/src/data/OrderTableData.ts | 30 +++++++++++ apps/fe-admin/src/data/index.ts | 1 + .../src/pages/OrderPage/OrderPage.tsx | 53 +++---------------- .../components/CustomModal/CustomModal.tsx | 1 - .../lib/components/CustomModal/modalType.ts | 1 + .../CustomModal/modals/EditOrderModal.tsx | 11 ++++ .../components/CustomModal/modals/index.ts | 3 +- .../lib/components/CustomModal/modalsMap.ts | 3 +- .../lib/components/CustomModal/useModal.ts | 1 + 9 files changed, 55 insertions(+), 49 deletions(-) create mode 100644 apps/fe-admin/src/data/OrderTableData.ts create mode 100644 apps/fe-admin/src/data/index.ts create mode 100644 libs/ui/ui-shared/src/lib/components/CustomModal/modals/EditOrderModal.tsx diff --git a/apps/fe-admin/src/data/OrderTableData.ts b/apps/fe-admin/src/data/OrderTableData.ts new file mode 100644 index 0000000..ffd5d01 --- /dev/null +++ b/apps/fe-admin/src/data/OrderTableData.ts @@ -0,0 +1,30 @@ +export const dataSource = [ + { + id: 1, + userId: 101, + totalNumberOfProducts: 2, + totalPrice: 50, + status: 'pending', + }, + { + id: 2, + userId: 102, + totalNumberOfProducts: 3, + totalPrice: 75, + status: 'shipped', + }, + { + id: 3, + userId: 103, + totalNumberOfProducts: 1, + totalPrice: 25, + status: 'delivered', + }, + { + id: 4, + userId: 104, + totalNumberOfProducts: 5, + totalPrice: 100, + status: 'pending', + }, +]; \ No newline at end of file diff --git a/apps/fe-admin/src/data/index.ts b/apps/fe-admin/src/data/index.ts new file mode 100644 index 0000000..7dea87b --- /dev/null +++ b/apps/fe-admin/src/data/index.ts @@ -0,0 +1 @@ +export { dataSource } from './OrderTableData' diff --git a/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx b/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx index 8d37033..8c5de93 100644 --- a/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx +++ b/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx @@ -1,52 +1,18 @@ -import { useState, useDeferredValue } from 'react'; +import { useDeferredValue } from 'react'; import { CustomTable, CustomSelect, CustomInput, - CustomButton, useModal, CustomModal, } from '@shopery/ui-shared'; import { useForm, Controller, useWatch } from 'react-hook-form'; import styles from './OrderPage.module.scss'; -import { MdAdd } from 'react-icons/md'; import ActionButtons from '../../components/ActionButtons/ActionButtons'; - -const dataSource = [ - { - id: 1, - userId: 101, - totalNumberOfProducts: 2, - totalPrice: 50, - status: 'pending', - }, - { - id: 2, - userId: 102, - totalNumberOfProducts: 3, - totalPrice: 75, - status: 'shipped', - }, - { - id: 3, - userId: 103, - totalNumberOfProducts: 1, - totalPrice: 25, - status: 'delivered', - }, - { - id: 4, - userId: 104, - totalNumberOfProducts: 5, - totalPrice: 100, - status: 'pending', - }, -]; +import { dataSource } from '../../data'; const OrderPage = () => { - const [isModalOpen, setIsModalOpen] = useState(false); - const [modalType, setModalType] = useState('add'); - const { openAddUserModal, openEditUserModal, openDeleteModal } = useModal(); + const { openEditOrderModal, openDeleteModal } = useModal(); const { control } = useForm({ defaultValues: { search: '', @@ -67,7 +33,10 @@ const OrderPage = () => { title: 'Actions', key: 'actions', render: (record) => ( - {}} onDelete={() => {}} /> + openEditOrderModal({ orderId: record.id })} + onDelete={() => openDeleteModal({ orderId: record.id })} + /> ), }, ]; @@ -87,11 +56,6 @@ const OrderPage = () => { ); }); - const handleClick = (type: string) => { - setIsModalOpen((prev) => !prev); - setModalType(type); - }; - return (

Orders

@@ -119,9 +83,6 @@ const OrderPage = () => { ]} /> - openAddUserModal({ userId: null })}> - -
); diff --git a/libs/ui/ui-shared/src/lib/components/CustomModal/CustomModal.tsx b/libs/ui/ui-shared/src/lib/components/CustomModal/CustomModal.tsx index 0a25847..a2fe180 100644 --- a/libs/ui/ui-shared/src/lib/components/CustomModal/CustomModal.tsx +++ b/libs/ui/ui-shared/src/lib/components/CustomModal/CustomModal.tsx @@ -16,7 +16,6 @@ export const CustomModal = () => { onCancel={closeModal} footer={null} closable={true} - destroyOnClose={true} >
diff --git a/libs/ui/ui-shared/src/lib/components/CustomModal/modalType.ts b/libs/ui/ui-shared/src/lib/components/CustomModal/modalType.ts index bab950e..8bd4fef 100644 --- a/libs/ui/ui-shared/src/lib/components/CustomModal/modalType.ts +++ b/libs/ui/ui-shared/src/lib/components/CustomModal/modalType.ts @@ -3,5 +3,6 @@ export enum ModalType { ADD_PRODUCT = 'ADD_PRODUCT', EDIT_USER = 'EDIT_USER', EDIT_PRODUCT = 'EDIT_PRODUCT', + EDIT_ORDER = 'EDIT_ORDER', DELETE='DELETE', } diff --git a/libs/ui/ui-shared/src/lib/components/CustomModal/modals/EditOrderModal.tsx b/libs/ui/ui-shared/src/lib/components/CustomModal/modals/EditOrderModal.tsx new file mode 100644 index 0000000..431bd84 --- /dev/null +++ b/libs/ui/ui-shared/src/lib/components/CustomModal/modals/EditOrderModal.tsx @@ -0,0 +1,11 @@ +import React from 'react'; + +type EditOrderModalProps = { + orderId: string; +}; + +const EditOrderModal = ({ orderId }: EditOrderModalProps) => { + return
EditOrderModal {orderId}
; +}; + +export default EditOrderModal; diff --git a/libs/ui/ui-shared/src/lib/components/CustomModal/modals/index.ts b/libs/ui/ui-shared/src/lib/components/CustomModal/modals/index.ts index 51d4cd0..9b4334b 100644 --- a/libs/ui/ui-shared/src/lib/components/CustomModal/modals/index.ts +++ b/libs/ui/ui-shared/src/lib/components/CustomModal/modals/index.ts @@ -2,4 +2,5 @@ export {default as AddUserModal} from './AddUserModal'; export {default as AddProductModal} from './AddProductModal'; export {default as EditProductModal} from './EditProductModal'; export {default as EditUserModal} from './EditUserModal'; -export {default as DeleteModal} from './DeleteModal'; \ No newline at end of file +export {default as DeleteModal} from './DeleteModal'; +export {default as EditOrderModal} from './EditOrderModal'; \ No newline at end of file diff --git a/libs/ui/ui-shared/src/lib/components/CustomModal/modalsMap.ts b/libs/ui/ui-shared/src/lib/components/CustomModal/modalsMap.ts index 962a41e..05405b3 100644 --- a/libs/ui/ui-shared/src/lib/components/CustomModal/modalsMap.ts +++ b/libs/ui/ui-shared/src/lib/components/CustomModal/modalsMap.ts @@ -1,5 +1,5 @@ import { ModalType } from "./modalType"; -import {AddUserModal, AddProductModal, EditUserModal, EditProductModal, DeleteModal} from "./modals"; +import { AddUserModal, AddProductModal, EditUserModal, EditProductModal, DeleteModal, EditOrderModal } from "./modals"; export const modalsMap = { [ModalType.ADD_USER]: AddUserModal, @@ -7,4 +7,5 @@ export const modalsMap = { [ModalType.EDIT_USER]: EditUserModal, [ModalType.EDIT_PRODUCT]: EditProductModal, [ModalType.DELETE]: DeleteModal, + [ModalType.EDIT_ORDER]: EditOrderModal, } diff --git a/libs/ui/ui-shared/src/lib/components/CustomModal/useModal.ts b/libs/ui/ui-shared/src/lib/components/CustomModal/useModal.ts index 4625c2a..c227a73 100644 --- a/libs/ui/ui-shared/src/lib/components/CustomModal/useModal.ts +++ b/libs/ui/ui-shared/src/lib/components/CustomModal/useModal.ts @@ -9,6 +9,7 @@ export const useModal = () => { openAddProductModal: (props?: Record) => openModal(ModalType.ADD_PRODUCT, props), openEditUserModal: (props?: Record) => openModal(ModalType.EDIT_USER, props), openEditProductModal: (props?: Record) => openModal(ModalType.EDIT_PRODUCT, props), + openEditOrderModal: (props?: Record) => openModal(ModalType.EDIT_ORDER, props), openDeleteModal: (props?: Record) => openModal(ModalType.DELETE, props), closeModal } From 65924c95ad4ad21a17347a89af6378a7ec282abc Mon Sep 17 00:00:00 2001 From: kenmaqqe Date: Tue, 24 Jun 2025 17:53:46 +0300 Subject: [PATCH 17/22] =?UTF-8?q?fix:=20=F0=9F=90=9B=20setting=20up=20pagi?= =?UTF-8?q?nation=20for=20Table=20component?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/fe-admin/src/data/OrderTableData.ts | 58 ++++++++++++++++++- .../components/CustomTable/CustomTable.tsx | 12 +++- 2 files changed, 66 insertions(+), 4 deletions(-) diff --git a/apps/fe-admin/src/data/OrderTableData.ts b/apps/fe-admin/src/data/OrderTableData.ts index ffd5d01..5f827ae 100644 --- a/apps/fe-admin/src/data/OrderTableData.ts +++ b/apps/fe-admin/src/data/OrderTableData.ts @@ -27,4 +27,60 @@ export const dataSource = [ totalPrice: 100, status: 'pending', }, -]; \ No newline at end of file + { + id: 5, + userId: 105, + totalNumberOfProducts: 4, + totalPrice: 80, + status: 'shipped', + }, + { + id: 6, + userId: 106, + totalNumberOfProducts: 2, + totalPrice: 60, + status: 'delivered', + }, + { + id: 7, + userId: 107, + totalNumberOfProducts: 3, + totalPrice: 90, + status: 'pending', + }, + { + id: 8, + userId: 108, + totalNumberOfProducts: 1, + totalPrice: 30, + status: 'shipped', + }, + { + id: 9, + userId: 109, + totalNumberOfProducts: 6, + totalPrice: 120, + status: 'delivered', + }, + { + id: 10, + userId: 110, + totalNumberOfProducts: 2, + totalPrice: 40, + status: 'pending', + }, + { + id: 11, + userId: 111, + totalNumberOfProducts: 3, + totalPrice: 70, + status: 'shipped', + }, + { + id: 12, + userId: 112, + totalNumberOfProducts: 4, + totalPrice: 90, + status: 'delivered', + }, +]; diff --git a/libs/ui/ui-shared/src/lib/components/CustomTable/CustomTable.tsx b/libs/ui/ui-shared/src/lib/components/CustomTable/CustomTable.tsx index c99185c..f3b5deb 100644 --- a/libs/ui/ui-shared/src/lib/components/CustomTable/CustomTable.tsx +++ b/libs/ui/ui-shared/src/lib/components/CustomTable/CustomTable.tsx @@ -1,9 +1,15 @@ import React from 'react'; import { Table } from 'antd'; -import type { TableProps as AntTableProps, ColumnsType } from 'antd/es/table'; -export function CustomTable({ ...props }) { - return
; +export function CustomTable({ ...props }) { + return ( +
+ ); } export default CustomTable; From f1b86e19430196ea1524cb30e4378a2103975739 Mon Sep 17 00:00:00 2001 From: kenmaqqe Date: Tue, 24 Jun 2025 18:49:55 +0300 Subject: [PATCH 18/22] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20create=20EditOrder?= =?UTF-8?q?=20and=20Delete=20modal=20and=20testing=20with=20mock?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/pages/OrderPage/OrderPage.tsx | 33 +++++++++++++++-- .../components/CustomModal/CustomModal.tsx | 2 +- .../CustomModal/modals/DeleteModal.tsx | 15 ++++++-- .../CustomModal/modals/EditOrderModal.tsx | 37 +++++++++++++++---- .../components/CustomSelect/CustomSelect.tsx | 2 +- 5 files changed, 74 insertions(+), 15 deletions(-) diff --git a/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx b/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx index 8c5de93..8cb27d6 100644 --- a/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx +++ b/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx @@ -12,7 +12,7 @@ import ActionButtons from '../../components/ActionButtons/ActionButtons'; import { dataSource } from '../../data'; const OrderPage = () => { - const { openEditOrderModal, openDeleteModal } = useModal(); + const { openEditOrderModal, openDeleteModal, closeModal } = useModal(); const { control } = useForm({ defaultValues: { search: '', @@ -34,8 +34,35 @@ const OrderPage = () => { key: 'actions', render: (record) => ( openEditOrderModal({ orderId: record.id })} - onDelete={() => openDeleteModal({ orderId: record.id })} + onEdit={() => + openEditOrderModal({ + orderId: record.id, + totalNumberOfProducts: record.totalNumberOfProducts, + totalPrice: record.totalPrice, + status: record.status, + handleSave: (newStatus: string) => { + dataSource.forEach((item) => { + if (item.id === record.id) { + item.status = newStatus; + } + }); + closeModal(); + }, + }) + } + onDelete={() => + openDeleteModal({ + handleConfirm: () => { + const index = dataSource.findIndex( + (item) => item.id === record.id + ); + if (index !== -1) { + dataSource.splice(index, 1); + } + closeModal(); + }, + }) + } /> ), }, diff --git a/libs/ui/ui-shared/src/lib/components/CustomModal/CustomModal.tsx b/libs/ui/ui-shared/src/lib/components/CustomModal/CustomModal.tsx index a2fe180..7019c0d 100644 --- a/libs/ui/ui-shared/src/lib/components/CustomModal/CustomModal.tsx +++ b/libs/ui/ui-shared/src/lib/components/CustomModal/CustomModal.tsx @@ -17,7 +17,7 @@ export const CustomModal = () => { footer={null} closable={true} > - + ); }; diff --git a/libs/ui/ui-shared/src/lib/components/CustomModal/modals/DeleteModal.tsx b/libs/ui/ui-shared/src/lib/components/CustomModal/modals/DeleteModal.tsx index ad14275..90e55f8 100644 --- a/libs/ui/ui-shared/src/lib/components/CustomModal/modals/DeleteModal.tsx +++ b/libs/ui/ui-shared/src/lib/components/CustomModal/modals/DeleteModal.tsx @@ -1,7 +1,16 @@ -import React from 'react'; +import { useModal } from '../useModal'; +import Button from '../../CustomButton/CustomButton'; -const DeleteModal = () => { - return
DeleteModal
; +const DeleteModal = ({ ...props }) => { + const { closeModal } = useModal(); + return ( +
+

Delete Order

+

Are you sure you want to delete this order?

+ + +
+ ); }; export default DeleteModal; diff --git a/libs/ui/ui-shared/src/lib/components/CustomModal/modals/EditOrderModal.tsx b/libs/ui/ui-shared/src/lib/components/CustomModal/modals/EditOrderModal.tsx index 431bd84..67ae8aa 100644 --- a/libs/ui/ui-shared/src/lib/components/CustomModal/modals/EditOrderModal.tsx +++ b/libs/ui/ui-shared/src/lib/components/CustomModal/modals/EditOrderModal.tsx @@ -1,11 +1,34 @@ -import React from 'react'; +import { Button } from 'antd'; +import CustomSelect from '../../CustomSelect/CustomSelect'; +import { useState } from 'react'; -type EditOrderModalProps = { - orderId: string; -}; - -const EditOrderModal = ({ orderId }: EditOrderModalProps) => { - return
EditOrderModal {orderId}
; +const EditOrderModal = ({ ...props }) => { + const [status, setStatus] = useState(props.status); + return ( +
+ Edit +
+

Order โ„–{props.orderId}

+

Total number of products {props.totalNumberOfProducts}

+

Total Price {props.totalPrice}

+

+ Status: + setStatus(value)} + /> +

+
+ +
+ ); }; export default EditOrderModal; diff --git a/libs/ui/ui-shared/src/lib/components/CustomSelect/CustomSelect.tsx b/libs/ui/ui-shared/src/lib/components/CustomSelect/CustomSelect.tsx index 399d5b6..838f4e4 100644 --- a/libs/ui/ui-shared/src/lib/components/CustomSelect/CustomSelect.tsx +++ b/libs/ui/ui-shared/src/lib/components/CustomSelect/CustomSelect.tsx @@ -4,7 +4,7 @@ import { Select } from 'antd'; export const CustomSelect = ({ ...props }) => { return (
); } diff --git a/libs/ui/ui-shared/src/lib/components/index.ts b/libs/ui/ui-shared/src/lib/components/index.ts index d1ba18b..b1c8c94 100644 --- a/libs/ui/ui-shared/src/lib/components/index.ts +++ b/libs/ui/ui-shared/src/lib/components/index.ts @@ -3,4 +3,3 @@ export * from './CustomInput/CustomInput'; export * from './CustomModal/CustomModal'; export * from './CustomSelect/CustomSelect'; export * from './CustomTable/CustomTable'; - diff --git a/libs/ui/ui-shared/src/types/ProductType.ts b/libs/ui/ui-shared/src/types/ProductType.ts index 59fd6fc..5d37574 100644 --- a/libs/ui/ui-shared/src/types/ProductType.ts +++ b/libs/ui/ui-shared/src/types/ProductType.ts @@ -1,14 +1,14 @@ export interface ProductType { - id: number; - categoriesId: number; - name: string; - description: string; - price: number; - rating: number; - popularTag: Array; - quantityInStock: number; - brand: string; - image: string; - createdAt: Date; - updatedAt: Date; -} \ No newline at end of file + id: number; + categoriesId: number; + name: string; + description: string; + price: number; + rating: number; + popularTag: Array; + quantityInStock: number; + brand: string; + image: string; + createdAt: Date; + updatedAt: Date; +} diff --git a/libs/ui/ui-shared/src/types/UserType.ts b/libs/ui/ui-shared/src/types/UserType.ts index 1b7099e..d0bb04d 100644 --- a/libs/ui/ui-shared/src/types/UserType.ts +++ b/libs/ui/ui-shared/src/types/UserType.ts @@ -8,4 +8,4 @@ export interface UserType { role: string; createdAt: Date; updatedAt: Date; -}; +} From 6e2077c2ac65251c32116440f3be95eaae102eaa Mon Sep 17 00:00:00 2001 From: kenmaqqe Date: Tue, 1 Jul 2025 18:40:36 +0300 Subject: [PATCH 21/22] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20add=20logic=20to?= =?UTF-8?q?=20modal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/pages/OrderPage/OrderPage.tsx | 55 ++++++++++++++----- 1 file changed, 41 insertions(+), 14 deletions(-) diff --git a/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx b/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx index 06b754a..bc96090 100644 --- a/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx +++ b/apps/fe-admin/src/pages/OrderPage/OrderPage.tsx @@ -15,7 +15,8 @@ const OrderPage = () => { const [orderData, setOrderData] = useState(dataSource); const [isEditModalOpen, setIsEditModalOpen] = useState(false); const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false); - const [orderId, setOrderId] = useState(null); + const [orderId, setOrderId] = useState(null); + const [editStatus, setEditStatus] = useState(null); const { control } = useForm({ defaultValues: { search: '', @@ -37,19 +38,26 @@ const OrderPage = () => { key: 'actions', render: (record) => ( handleOpenEditModal(record.id)} + onEdit={() => handleOpenEditModal(record.id, record.status)} onDelete={() => handleOpenDeleteModal(record.id)} /> ), }, ]; - const handleOpenEditModal = (id: string) => { + const statusOptions = [ + { value: 'pending', label: 'Pending' }, + { value: 'shipped', label: 'Shipped' }, + { value: 'delivered', label: 'Delivered' }, + ]; + + const handleOpenEditModal = (id: number, status: string) => { setOrderId(id); setIsEditModalOpen(true); + setEditStatus(status); }; - const handleOpenDeleteModal = (id: string) => { + const handleOpenDeleteModal = (id: number) => { setOrderId(id); setIsDeleteModalOpen(true); }; @@ -74,7 +82,23 @@ const OrderPage = () => { const handleDelete = (id: number) => { setOrderData(orderData.filter((item) => item.id !== id)); - setIsModalOpen(false); + setIsDeleteModalOpen(false); + setOrderId(null); + }; + + const handleSave = () => { + if (typeof editStatus !== 'string') return; + setOrderData((prev) => + prev.map((item) => { + if (item.id === orderId) { + return { ...item, status: editStatus }; + } + return item; + }) + ); + setIsEditModalOpen(false); + setEditStatus(null); + setOrderId(null); }; return ( @@ -96,20 +120,24 @@ const OrderPage = () => { setIsEditModalOpen(false)} title='Edit Order' + footer={ + handleSave()}> + Save + + } > -
wow this is modal window
+ setEditStatus(value)} + />
{ { - setIsDeleteModalOpen(false); - handleDelete(orderId ? parseInt(orderId) : 0); + handleDelete(orderId as number); }} > Delete From 0d1e6b547d8bb6f53bd0dcd40d024b62fb4f6bf0 Mon Sep 17 00:00:00 2001 From: kenmaqqe Date: Mon, 21 Jul 2025 17:55:09 +0300 Subject: [PATCH 22/22] =?UTF-8?q?fix:=20=F0=9F=90=9B=20go=20use=20$danger?= =?UTF-8?q?=20varialbe=20for=20danger=20button=20styles?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/lib/components/CustomButton/CustomButton.module.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/ui/ui-shared/src/lib/components/CustomButton/CustomButton.module.scss b/libs/ui/ui-shared/src/lib/components/CustomButton/CustomButton.module.scss index 39563fd..0369efa 100644 --- a/libs/ui/ui-shared/src/lib/components/CustomButton/CustomButton.module.scss +++ b/libs/ui/ui-shared/src/lib/components/CustomButton/CustomButton.module.scss @@ -33,11 +33,11 @@ } } .danger { - background-color: #ff101a; + background-color: $danger; border: none; color: $white; &:hover { - background-color: #ff4c4c; + filter: brightness(0.9); } } .small {