- {translateValue &&
}
+
+ {translateValue && }
{!translateValue && row.getValue(String(accessorKey))}
),
diff --git a/src/components/ui/date-picker-with-range.tsx b/src/components/ui/date-picker-with-range.tsx
new file mode 100644
index 00000000..1e74c57a
--- /dev/null
+++ b/src/components/ui/date-picker-with-range.tsx
@@ -0,0 +1,67 @@
+import * as React from 'react';
+import type { DateRange } from 'react-day-picker';
+import { CalendarIcon } from '@radix-ui/react-icons';
+import { format } from 'date-fns';
+
+import { I18nText } from '@/components/common';
+import { Button, Calendar, Popover, PopoverContent, PopoverTrigger } from '@/components/ui';
+import { cn } from '@/lib/utils';
+
+interface DatePickerWithRangeProps extends Omit
, 'onSelect'> {
+ value?: DateRange | undefined;
+ onSelect: (value: DateRange | undefined) => void;
+}
+
+export const DatePickerWithRange = ({ className, value, onSelect }: DatePickerWithRangeProps) => {
+ const [date, setDate] = React.useState(value);
+
+ React.useEffect(() => {
+ setDate(value);
+ }, [value]);
+
+ const handleDateChange = React.useCallback(
+ (newDate: DateRange | undefined) => {
+ setDate(newDate);
+ onSelect(newDate);
+ },
+ [onSelect]
+ );
+
+ return (
+
+
+
+
+
+
+
+
+
+
+ );
+};
diff --git a/src/components/ui/date-picker.tsx b/src/components/ui/date-picker.tsx
new file mode 100644
index 00000000..e1707ec2
--- /dev/null
+++ b/src/components/ui/date-picker.tsx
@@ -0,0 +1,41 @@
+import { format } from 'date-fns';
+import { CalendarIcon } from 'lucide-react';
+
+import { I18nText } from '@/components/common';
+import { Button, Calendar, Popover, PopoverContent, PopoverTrigger } from '@/components/ui';
+import { cn } from '@/lib/utils';
+
+export type DatePickerProps = {
+ value?: Date;
+ onChange: (value: Date | undefined) => void;
+ className?: string;
+};
+
+export const DatePicker = ({ onChange, value, className }: DatePickerProps) => {
+ return (
+
+
+
+
+
+ date < new Date('1900-01-01')}
+ initialFocus
+ />
+
+
+ );
+};
diff --git a/src/components/ui/index.ts b/src/components/ui/index.ts
index cad260ea..d14fad62 100644
--- a/src/components/ui/index.ts
+++ b/src/components/ui/index.ts
@@ -7,6 +7,7 @@ export * from './badge';
export * from './bik-input';
export * from './breadcrumb';
export * from './button';
+export * from './calendar';
export * from './card';
export * from './carousel';
export * from './checkbox';
@@ -17,6 +18,8 @@ export * from './collapsible';
export * from './combobox';
export * from './command';
export * from './data-table';
+export * from './date-picker';
+export * from './date-picker-with-range';
export * from './dialog';
export * from './dropdown-menu';
export * from './dropzone-media';
diff --git a/src/utils/api/hooks/index.ts b/src/utils/api/hooks/index.ts
index d44c70e0..3d6295f4 100644
--- a/src/utils/api/hooks/index.ts
+++ b/src/utils/api/hooks/index.ts
@@ -2,15 +2,18 @@ export * from './useDeleteFileByIdMutation';
export * from './useDeleteLegalAddressByIdMutation';
export * from './useDeleteOrganizationDeleteEmployeeMutation';
export * from './useGetActivityByIdQuery';
+export * from './useGetActivityInfiniteQuery';
export * from './useGetAddressQuery';
export * from './useGetAuthNewCodeMutation';
export * from './useGetCategoryQuery';
export * from './useGetChangesInfiniteQuery';
+export * from './useGetEmployeeInfiniteQuery';
export * from './useGetUserMeMutation';
export * from './usePostAuthLoginEmailMutation';
export * from './usePostChangesMutation';
export * from './usePostFileMutation';
export * from './usePostOrganizationRegisterMutation';
+export * from './usePostScheduleMutation';
export * from './usePutActivityByIdMutation';
export * from './usePutOrganizationByIdMutation';
export * from './usePutTariffByIdMutation';
diff --git a/src/utils/api/hooks/useGetActivityInfiniteQuery.ts b/src/utils/api/hooks/useGetActivityInfiniteQuery.ts
new file mode 100644
index 00000000..ad74eaee
--- /dev/null
+++ b/src/utils/api/hooks/useGetActivityInfiniteQuery.ts
@@ -0,0 +1,32 @@
+import type { InfiniteData, QueryKey } from '@tanstack/react-query';
+import { useInfiniteQuery } from '@tanstack/react-query';
+
+import type { ActivityWithPaginationResponse } from '@/api-types';
+
+import type { GetActivityParams } from '../requests';
+import { getActivity } from '../requests';
+
+export const useGetActivityInfiniteQuery = (
+ params: GetActivityParams,
+ settings?: InfiniteQuerySettings
+) =>
+ useInfiniteQuery<
+ ActivityWithPaginationResponse,
+ any,
+ InfiniteData,
+ QueryKey,
+ number
+ >({
+ queryKey: ['getActivityList', ...Object.values(params)],
+ initialPageParam: params.current ?? 1,
+ queryFn: ({ pageParam }) =>
+ getActivity({
+ params: { ...params, current: pageParam },
+ config: settings?.config
+ }),
+ getNextPageParam: (lastPage, pages) =>
+ Math.ceil(lastPage.pagination.count / lastPage.pagination.limit) > pages.length
+ ? pages.length + 1
+ : undefined,
+ ...settings?.options
+ });
diff --git a/src/utils/api/hooks/useGetChangesInfiniteQuery.ts b/src/utils/api/hooks/useGetChangesInfiniteQuery.ts
index 732dbb5c..f02e1f7e 100644
--- a/src/utils/api/hooks/useGetChangesInfiniteQuery.ts
+++ b/src/utils/api/hooks/useGetChangesInfiniteQuery.ts
@@ -18,7 +18,7 @@ export const useGetChangesInfiniteQuery = (
number
>({
queryKey: ['getChanges', params.current],
- initialPageParam: params.current,
+ initialPageParam: params.current ?? 1,
queryFn: ({ pageParam }) =>
getChanges({
params: { ...params, current: pageParam },
diff --git a/src/utils/api/hooks/useGetEmployeeInfiniteQuery.ts b/src/utils/api/hooks/useGetEmployeeInfiniteQuery.ts
new file mode 100644
index 00000000..46a09704
--- /dev/null
+++ b/src/utils/api/hooks/useGetEmployeeInfiniteQuery.ts
@@ -0,0 +1,27 @@
+import type { InfiniteData, QueryKey } from '@tanstack/react-query';
+import { useInfiniteQuery } from '@tanstack/react-query';
+
+import type { EmployeeListResponse } from '@/api-types';
+import type { GetEmployeeParams } from '@/utils/api';
+import { getEmployee } from '@/utils/api';
+
+export const useGetEmployeeInfiniteQuery = (
+ params: GetEmployeeParams,
+ settings?: InfiniteQuerySettings
+) =>
+ useInfiniteQuery, QueryKey, number>(
+ {
+ queryKey: ['getEmployee', ...Object.values(params)],
+ initialPageParam: params.current ?? 1,
+ queryFn: ({ pageParam }) =>
+ getEmployee({
+ params: { ...params, current: pageParam },
+ config: settings?.config
+ }),
+ getNextPageParam: (lastPage, pages) =>
+ Math.ceil(lastPage.pagination.count / lastPage.pagination.limit) > pages.length
+ ? pages.length + 1
+ : undefined,
+ ...settings?.options
+ }
+ );
diff --git a/src/utils/api/hooks/usePostScheduleMutation.ts b/src/utils/api/hooks/usePostScheduleMutation.ts
new file mode 100644
index 00000000..dc3def42
--- /dev/null
+++ b/src/utils/api/hooks/usePostScheduleMutation.ts
@@ -0,0 +1,14 @@
+import { useMutation } from '@tanstack/react-query';
+
+import type { PostScheduleRequestConfig } from '../requests';
+import { postSchedule } from '../requests';
+
+export const usePostScheduleMutation = (
+ settings?: MutationSettings
+) =>
+ useMutation({
+ mutationKey: ['postSchedule'],
+ mutationFn: ({ params, config }) =>
+ postSchedule({ params, config: { ...settings?.config, ...config } }),
+ ...settings?.options
+ });
diff --git a/src/utils/api/requests/changes/index.ts b/src/utils/api/requests/changes/index.ts
index 235a133f..95205769 100644
--- a/src/utils/api/requests/changes/index.ts
+++ b/src/utils/api/requests/changes/index.ts
@@ -1,11 +1,12 @@
-import type { ChangesResponse, ChangesResponseWithPagination, CreateChangesDto } from '@/api-types';
+import type {
+ ChangesControllerGetChangesParams,
+ ChangesResponse,
+ ChangesResponseWithPagination,
+ CreateChangesDto
+} from '@/api-types';
import { api } from '@/utils/api/instance';
-export interface GetChangesParams {
- current: number;
- limit: number;
- criteria: string;
-}
+export type GetChangesParams = ChangesControllerGetChangesParams;
export type GetChangesRequestConfig = RequestConfig;
diff --git a/src/utils/api/requests/employee/index.ts b/src/utils/api/requests/employee/index.ts
new file mode 100644
index 00000000..e974558c
--- /dev/null
+++ b/src/utils/api/requests/employee/index.ts
@@ -0,0 +1,12 @@
+import type { EmployeeControllerGetEmployeesParams, EmployeeListResponse } from '@/api-types';
+import { api } from '@/utils/api/instance';
+
+export type GetEmployeeParams = EmployeeControllerGetEmployeesParams;
+
+export type GetEmployeeRequestConfig = RequestConfig;
+
+export const getEmployee = async ({ params, config }: GetEmployeeRequestConfig) =>
+ api.get('employee', {
+ ...config,
+ params: { ...config?.params, ...params }
+ });
diff --git a/src/utils/api/requests/index.ts b/src/utils/api/requests/index.ts
index 1103e70c..f4c328df 100644
--- a/src/utils/api/requests/index.ts
+++ b/src/utils/api/requests/index.ts
@@ -7,7 +7,8 @@ export * from './auth/login/email';
export * from './auth/new-code';
export * from './category';
export * from './changes';
-export * from './file/id/index';
+export * from './employee';
+export * from './file/id';
export * from './legal-address';
export * from './legal-address/id';
export * from './legal-addresses/legalId';
@@ -19,6 +20,8 @@ export * from './organization/edit-employee';
export * from './organization/id';
export * from './organization/id/employees';
export * from './organization/register';
+export * from './schedule';
+export * from './schedules';
export * from './tariff/id';
export * from './tariff/legalEntityId';
export * from './user';
diff --git a/src/utils/api/requests/organization/index.ts b/src/utils/api/requests/organization/index.ts
index d2c0def4..72804a9d 100644
--- a/src/utils/api/requests/organization/index.ts
+++ b/src/utils/api/requests/organization/index.ts
@@ -8,8 +8,8 @@ import { api } from '@/utils/api/instance';
export type GetOrganizationParams = OrganizationControllerFindOrganizationsParams;
export type GetOrganizationRequestConfig = RequestConfig;
-export const getOrganization = async (requestConfig?: GetOrganizationRequestConfig) =>
- api.get(
- 'organization',
- requestConfig?.config
- );
+export const getOrganization = async ({ params, config }: GetOrganizationRequestConfig) =>
+ api.get('organization', {
+ ...config,
+ params: { ...config?.params, ...params }
+ });
diff --git a/src/utils/api/requests/schedule/index.ts b/src/utils/api/requests/schedule/index.ts
new file mode 100644
index 00000000..5bca7424
--- /dev/null
+++ b/src/utils/api/requests/schedule/index.ts
@@ -0,0 +1,8 @@
+import type { CreateScheduleDto } from '@/api-types';
+import { api } from '@/utils/api/instance';
+
+export type PostScheduleParams = CreateScheduleDto;
+export type PostScheduleRequestConfig = RequestConfig;
+
+export const postSchedule = async ({ params, config }: PostScheduleRequestConfig) =>
+ api.post('schedule', params, config);
diff --git a/src/utils/api/requests/schedules/index.ts b/src/utils/api/requests/schedules/index.ts
new file mode 100644
index 00000000..36edfbed
--- /dev/null
+++ b/src/utils/api/requests/schedules/index.ts
@@ -0,0 +1,15 @@
+import type { ScheduleControllerGetSchedulesParams, ScheduleListResponse } from '@/api-types';
+import { api } from '@/utils/api/instance';
+
+export type GetSchedulesParams = ScheduleControllerGetSchedulesParams;
+
+export type GetSchedulesRequestConfig = RequestConfig;
+
+export const getSchedules = async ({
+ params: { organizationId, ...params },
+ config
+}: GetSchedulesRequestConfig) =>
+ api.get('schedules', {
+ ...config,
+ params: { ...config?.params, ...params }
+ });
diff --git a/src/utils/helpers/addLeadingZero.ts b/src/utils/helpers/addLeadingZero.ts
new file mode 100644
index 00000000..2addc642
--- /dev/null
+++ b/src/utils/helpers/addLeadingZero.ts
@@ -0,0 +1 @@
+export const addLeadingZero = (num: number) => num.toString().padStart(2, '0');
diff --git a/src/utils/helpers/convertLocalitiesToComboboxItems.ts b/src/utils/helpers/convertLocalitiesToComboboxItems.ts
new file mode 100644
index 00000000..fc82a432
--- /dev/null
+++ b/src/utils/helpers/convertLocalitiesToComboboxItems.ts
@@ -0,0 +1,12 @@
+import type { AddressResponseDto } from '@/api-types';
+
+export const convertLocalitiesToComboboxItems = (addresses: AddressResponseDto[]) =>
+ addresses
+ .filter(
+ (address) =>
+ address.city && !address.street && !address.house && !address.flat && address.cityWithType
+ )
+ .map((address) => ({
+ label: address.cityWithType,
+ value: address.cityWithType
+ }));
diff --git a/src/utils/helpers/getNavigationLinksByRole.ts b/src/utils/helpers/getNavigationLinksByRole.ts
index 40a8dff0..47dd5872 100644
--- a/src/utils/helpers/getNavigationLinksByRole.ts
+++ b/src/utils/helpers/getNavigationLinksByRole.ts
@@ -6,6 +6,8 @@ export const getNavigationLinksByUserRole = (userRole: UserResponseRolesItem) =>
switch (userRole) {
case 'SUPERADMIN':
return ORGANIZER_LINKS;
+ case 'ADMIN':
+ return ORGANIZER_LINKS;
default:
throw new Error('Invalid user role');
}
diff --git a/src/utils/helpers/getWeekDayByIndex.ts b/src/utils/helpers/getWeekDayByIndex.ts
new file mode 100644
index 00000000..abeb7a97
--- /dev/null
+++ b/src/utils/helpers/getWeekDayByIndex.ts
@@ -0,0 +1,3 @@
+import { WeekDayEnum } from '@/api-types';
+
+export const getWeekDayByIndex = (index: number) => Object.values(WeekDayEnum)[index];
diff --git a/src/utils/helpers/index.ts b/src/utils/helpers/index.ts
index e5a08700..f6251157 100644
--- a/src/utils/helpers/index.ts
+++ b/src/utils/helpers/index.ts
@@ -1,2 +1,4 @@
+export * from './addLeadingZero';
export * from './getMessagesByLocale';
export * from './getNavigationLinksByRole';
+export * from './getWeekDayByIndex';
diff --git a/static/locales/ru.json b/static/locales/ru.json
index 93adcb4a..afcc5abc 100644
--- a/static/locales/ru.json
+++ b/static/locales/ru.json
@@ -9,6 +9,7 @@
"partners.addresses.title": "Адреса",
"partners.activities.title": "Активности",
"partners.employees.title": "Сотрудники",
+ "partners.schedule.title": "Расписание",
"redirect.title": "Перейдите на мобильную версию",
"redirect.description": "Для дальнейшего пользования приложением, откройте страницу в телефоне",
@@ -64,6 +65,7 @@
"button.close": "Закрыть",
"button.addActivity": "Добавить активность",
"button.addEmployee": "Добавить сотрудника",
+ "button.addSchedule": "Добавить расписание",
"button.makeCover": "Сделать обложкой",
"button.updateTariff": "Сменить тариф",
"button.learnDetails": "Узнать подробности",
@@ -202,6 +204,21 @@
"field.name.label": "Имя",
"field.surname.label": "Фамилия",
"field.role.label": "Роль",
+ "field.datePicker.label": "Выберите дату",
+
+ "field.chooseLocation.label": "Выбор адреса",
+ "field.chooseActivity.label": "Выбор активности",
+ "field.chooseLead.label": "Выбор ведущего",
+ "field.preEntry.label": "Предварительная запись",
+ "field.activity.label": "Активность",
+ "field.startAndEndDate.label": "Дата начала и окончания",
+ "field.date.label": "Дата",
+ "field.numberOfSeats.label": "Кол-во мест",
+
+ "field.preEntry.true": "По записи",
+ "field.preEntry.false": "Без записи",
+ "field.isRegularActivity.true": "Регулярное",
+ "field.isRegularActivity.false": "Разовое",
"field.freeActivity.label": "Бесплатные активности",
"field.paidActivity.label": "Платные активности",
"field.periodMonth.label": "Период",
@@ -296,6 +313,14 @@
"table.column.organization.tariff": "Тариф",
"table.column.organization.countDays": "Кол-во дней",
+ "table.column.schedule.activity": "Активность",
+ "table.column.schedule.address": "Адрес",
+ "table.column.schedule.leading": "Сотрудник",
+ "table.column.schedule.date": "Дата",
+ "table.column.schedule.time": "Время",
+ "table.column.schedule.numberOfSeats": "Кол-во записей",
+ "table.column.schedule.isDone": "Проведено",
+
"table.column.activities.organization": "Организация",
"table.column.activities.activity": "Активность",
"table.column.activities.location": "Населенный пункт",
@@ -342,12 +367,13 @@
"validation.format": "Неверный формат",
"validation.photo.max": "Максимальный размер фото 5MB",
"validation.photo.format": "Только .jpg, .jpeg, .png и .webp форматы поддерживаются",
+ "validation.dateEnd.required": "Выберите дату окончания",
"dialog.registerOrganization.title": "Заполните заявку",
"dialog.registerOrganization.success": "Спасибо за заявку, мы свяжемся с вами в ближайшее время",
"dialog.addAddress.title": "Добавление адреса",
- "dialog.addAddress.form.untill": "до",
+ "dialog.addAddress.form.until": "до",
"dropzone.image.error": "Разрешена загрузка 1 файла-изображения",
"dropzone.docs.error": "Разрешена загрузка 1 файла-документа",
@@ -371,6 +397,8 @@
"dialog.scanQRCode.title": "QR-код партнера",
+ "dialog.addSchedule.title": "Задание расписания",
+
"tooltip.inn": "ИНН юр. лица - 10 цифр, ИНН физ. лица - 12 цифр",
"tooltip.kpp": "КПП - 9 цифр",
"tooltip.ogrn": "ОГРН - 13 цифр, ОГРНИП - 15 цифр",
diff --git a/yarn.lock b/yarn.lock
index a77aae2f..3a1f0536 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -5928,11 +5928,6 @@ crypto-random-string@^2.0.0:
resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5"
integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==
-crypto@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/crypto/-/crypto-1.0.1.tgz#2af1b7cad8175d24c8a1b0778255794a21803037"
- integrity sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==
-
css-functions-list@^3.2.1:
version "3.2.2"
resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.2.2.tgz#9a54c6dd8416ed25c1079cd88234e927526c1922"
@@ -9697,11 +9692,6 @@ p-try@^2.0.0:
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
-package@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/package/-/package-1.0.1.tgz#d25a1f99e2506dcb27d6704b83dca8a312e4edcc"
- integrity sha512-g6xZR6CO7okjie83sIRJodgGvaXqymfE5GLhN8N2TmZGShmHc/V23hO/vWbdnuy3D81As3pfovw72gGi42l9qA==
-
pako@~0.2.0:
version "0.2.9"
resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
@@ -10335,6 +10325,11 @@ react-colorful@^5.1.2:
resolved "https://registry.yarnpkg.com/react-colorful/-/react-colorful-5.6.1.tgz#7dc2aed2d7c72fac89694e834d179e32f3da563b"
integrity sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==
+react-day-picker@^8.10.0:
+ version "8.10.1"
+ resolved "https://registry.yarnpkg.com/react-day-picker/-/react-day-picker-8.10.1.tgz#4762ec298865919b93ec09ba69621580835b8e80"
+ integrity sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA==
+
react-docgen-typescript@^2.2.2:
version "2.2.2"
resolved "https://registry.yarnpkg.com/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz#4611055e569edc071204aadb20e1c93e1ab1659c"
@@ -11331,14 +11326,7 @@ string_decoder@~1.1.1:
dependencies:
safe-buffer "~5.1.0"
-"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
- integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
- dependencies:
- ansi-regex "^5.0.1"
-
-strip-ansi@6.0.1, strip-ansi@^5.2.0, strip-ansi@^6.0.0, strip-ansi@^6.0.1, strip-ansi@^7.0.1, strip-ansi@^7.1.0:
+"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@6.0.1, strip-ansi@^5.2.0, strip-ansi@^6.0.0, strip-ansi@^6.0.1, strip-ansi@^7.0.1, strip-ansi@^7.1.0:
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
@@ -12384,16 +12372,7 @@ wordwrap@^1.0.0:
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==
-"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
- integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
- dependencies:
- ansi-styles "^4.0.0"
- string-width "^4.1.0"
- strip-ansi "^6.0.0"
-
-wrap-ansi@7.0.0, wrap-ansi@^6.2.0, wrap-ansi@^7.0.0, wrap-ansi@^8.1.0, wrap-ansi@^9.0.0:
+"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@7.0.0, wrap-ansi@^6.2.0, wrap-ansi@^7.0.0, wrap-ansi@^8.1.0, wrap-ansi@^9.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==