diff --git a/package.json b/package.json index d63c2bf4e..ef13205ea 100644 --- a/package.json +++ b/package.json @@ -104,7 +104,7 @@ "@babel/preset-typescript": "^7.18.6", "@bem/sdk.naming.cell.match": "^0.1.3", "@bem/sdk.naming.presets": "^0.2.3", - "@consta/stand": "^0.0.141", + "@consta/stand": "^0.0.148", "@consta/uikit": "^5.4.1", "@cspell/dict-ru_ru": "^2.2.4", "@mdx-js/loader": "^2.1.5", diff --git a/src/components/Button/Button.css b/src/components/Button/Button.css index 2d8231547..44916402c 100755 --- a/src/components/Button/Button.css +++ b/src/components/Button/Button.css @@ -213,8 +213,15 @@ } & .Button-Loader { - --loaderBackgroundColor: var(--button-loader-color); + --loader-color-prop: var(--button-loader-color); position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + display: flex; + justify-content: center; + align-items: center; } } } diff --git a/src/components/Button/Button.tsx b/src/components/Button/Button.tsx index cbd939be3..692837688 100644 --- a/src/components/Button/Button.tsx +++ b/src/components/Button/Button.tsx @@ -3,13 +3,14 @@ import './Button.css'; import { IconComponent, IconPropSize } from '@consta/icons/Icon'; import React, { HTMLProps, useRef } from 'react'; +import { Loader } from '##/components/Loader'; + import { useForkRef } from '../../hooks/useForkRef/useForkRef'; import { cnMixFocus } from '../../mixs/MixFocus/MixFocus'; import { cn } from '../../utils/bem'; import { getByMap } from '../../utils/getByMap'; import { forwardRefWithAs } from '../../utils/types/PropsWithAsAttributes'; import { usePropsHandler } from '../EventInterceptor/usePropsHandler'; -import { Loader } from '../LoaderDeprecated/LoaderDeprecated'; export const buttonPropSize = ['m', 'xs', 's', 'l'] as const; export type ButtonPropSize = typeof buttonPropSize[number]; @@ -197,7 +198,11 @@ export const Button = forwardRefWithAs((props, ref) => { ) : ( label ))} - {loading && } + {loading && ( +
+ +
+ )} ); }); diff --git a/src/components/Loader/Loader.css b/src/components/Loader/Loader.css index 1b3a00291..a003bf6ad 100644 --- a/src/components/Loader/Loader.css +++ b/src/components/Loader/Loader.css @@ -1,55 +1,126 @@ +/* --loader-size-prop - задайте для указания размера */ .Loader { - --backgroundColor: - var( - --loaderBackgroundColor, - var(--color-control-bg-primary) + --loader-color-var: var(--loader-color-prop, var(--loader-color)); + --loader-type-circle-size-var: + max( + var(--loader-size-prop, var(--loader-type-circle-size)), + var(--space-s) + ); + --loader-type-dot-size-var: + max( + var(--loader-size-prop, var(--loader-type-dot-size)), + calc(var(--space-l) - var(--space-3xs)) ); display: inline-flex; - padding: calc(var(--loader-size) * 0.25); - gap: var(--loader-gap); - - &-Dot { - width: var(--loader-size); - height: var(--loader-size); - background: var(--backgroundColor); - border-radius: 50%; - animation: var(--loader-dot-animation); - - &_side { - &_left { - --loader-dot-animation: loader 1s ease infinite; - } + box-sizing: border-box; - &_center { - --loader-dot-animation: loader 1s -0.18s ease infinite; - } + &_view { + &_primary { + --loader-color: var(--color-control-bg-primary); + } - &_right { - --loader-dot-animation: loader 1s -0.36s ease infinite; - } + &_clear { + --loader-color: var(--color-control-typo-clear); } } &_size { &_xs { - --loader-size: var(--space-2xs); - --loader-gap: var(--space-3xs); + --loader-type-circle-size: var(--space-s); + --loader-type-dot-size: calc(var(--space-l) - var(--space-3xs)); } &_s { - --loader-size: var(--space-2xs); - --loader-gap: var(--space-2xs); + --loader-type-circle-size: var(--space-m); + --loader-type-dot-size: calc(var(--space-xl) - var(--space-3xs)); } &_m { - --loader-size: var(--space-xs); - --loader-gap: calc(var(--space-xs) - var(--space-3xs)); + --loader-type-circle-size: var(--space-xl); + --loader-type-dot-size: var(--space-3xl); + } + } + + &_type { + &_dots { + --loader-dot-padding: + round( + down, + calc(var(--loader-type-dot-size-var) / 12), + 1px + ); + --loader-dot-size: + round( + down, + calc( + var(--loader-type-dot-size-var) / 3 - var(--loader-dot-padding) * 1.4 + ), + 2px + ); + --loader-dot-scale: + calc( + var(--loader-dot-padding) + var(--loader-dot-size) + ); + justify-content: space-between; + width: var(--loader-type-dot-size-var); + margin: calc(var(--loader-dot-scale) * 1px); + padding: max(calc(var(--loader-dot-padding) / 2), 1px); + + &::before, + &::after, + .Loader-Dot { + flex: none; + width: var(--loader-dot-size); + height: var(--loader-dot-size); + background: var(--loader-color-var); + border-radius: 50%; + animation: + Loader-Animate_type_dots 1s + var(--loader-type-dot-animation-delay) ease infinite; + } + + &::before, + &::after { + content: ''; + } + + &::before { + --loader-type-dot-animation-delay: 0s; + } + + &::after { + --loader-type-dot-animation-delay: 0.36s; + } + + .Loader-Dot { + --loader-type-dot-animation-delay: 0.18s; + } + } + + &_circle { + --loader-type-circle-mask: + conic-gradient(#0000 2%, #000), + linear-gradient(#000 0 0) content-box; + width: var(--loader-type-circle-size-var); + height: var(--loader-type-circle-size-var); + padding: round(up, calc(var(--loader-type-circle-size-var) / 10), 1px); + background: var(--loader-color-var); + border-radius: 50%; + animation: Loader-Animate_type_circle 1.2s infinite linear; + mask: var(--loader-type-circle-mask); + mask-composite: subtract; } } } -@keyframes loader { +@keyframes Loader-Animate_type_dots { 50% { - transform: scale(1.5); + transform: scale(1.4); + } +} + +@keyframes Loader-Animate_type_circle { + to { + transform: rotate(1turn); } } diff --git a/src/components/Loader/Loader.tsx b/src/components/Loader/Loader.tsx index 20974f41d..2028dcd2a 100644 --- a/src/components/Loader/Loader.tsx +++ b/src/components/Loader/Loader.tsx @@ -3,27 +3,26 @@ import './Loader.css'; import React from 'react'; import { cn } from '../../utils/bem'; -import { LoaderProps, loaderPropSizeDefault } from './types'; +import { LoaderProps } from './types'; export const cnLoader = cn('Loader'); -const sides = ['left', 'center', 'right']; - export const Loader = React.forwardRef( (props, ref) => { - const { className, size = loaderPropSizeDefault, ...otherProps } = props; + const { + className, + size = 'm', + type = 'dots', + view = 'primary', + ...otherProps + } = props; return (
- {sides.map((side, index) => ( -
- ))} + {type === 'dots' &&
}
); }, diff --git a/src/components/Loader/__stand__/Loader.dev.stand.mdx b/src/components/Loader/__stand__/Loader.dev.stand.mdx index b4a888546..1c8fd9149 100644 --- a/src/components/Loader/__stand__/Loader.dev.stand.mdx +++ b/src/components/Loader/__stand__/Loader.dev.stand.mdx @@ -1,5 +1,11 @@ -import { MdxMenu } from '@consta/stand'; -import { LoaderExampleSize } from './examples/LoaderExampleSize/LoaderExampleSize'; +import { MdxMenu, MdxTabs } from '@consta/stand'; +import { + LoaderExampleSize, + LoaderExampleType, + LoaderExampleView, +} from './examples/LoaderExampleSize/LoaderExampleSize'; +import { LoaderExampleCustomColor } from './examples/LoaderExampleCustomColor/LoaderExampleCustomColor'; +import { LoaderExampleCustomSize } from './examples/LoaderExampleCustomSize/LoaderExampleCustomSize'; ```tsx import { Loader } from '@consta/uikit/Loader'; @@ -7,16 +13,41 @@ import { Loader } from '@consta/uikit/Loader'; +- [Тип](#тип) - [Размер](#размер) -- [Импорт](#импорт) -- [Список свойств](#свойства) -- [Пример использования](#пример) + - [Кастомный размер](#кастомный-размер) +- [Вид](#вид) + - [Кастомный цвет](#кастомный-цвет) +- [Список свойств](#свойства-компонента) +- [Сss-переменные](#сss-переменные) +## Тип + +За размер компонента отвечает свойство `type`. + +Может принимать значения: + +- `'dots'` - в виде точек +- `'circle'` - в виде круга + + + +```tsx + + +``` + + + + + ## Размер -За размер индикатор загрузки отвечает свойство `size`. +За размер компонента отвечает свойство `size`. + + ```tsx @@ -26,28 +57,96 @@ import { Loader } from '@consta/uikit/Loader'; -## Импорт + + +### Кастомный размер + +Чтобы установить любой размер, используйте css-переменную `--loader-size-prop` + + ```tsx +import './LoaderExampleCustomSize.css'; + +import React from 'react'; +import { cn } from '##/utils/bem'; import { Loader } from '@consta/uikit/Loader'; + +const cnLoaderExampleCustomSize = cn('LoaderExampleCustomSize'); + +export const LoaderExampleCustomSize = () => ( + +); ``` -## Свойства +```css +.LoaderExampleCustomSize { + --loader-size-prop: 70px; +} +``` + + + + -| Свойство | Тип | По умолчанию | Описание | -| ------------------ | --------------------------- | ------------ | ----------------------------------------------- | -| [`size?`](#размер) | `'xs', 's', 'm'` | `'m'` | Размер индикатор загрузки | -| `className?` | `string` | - | Дополнительный CSS-класс | -| `ref?` | `React.Ref` | - | Ссылка на корневой DOM-элемент этого компонента | +## Вид -## Пример +Вид компонента можно установить в свойстве `view`. + + + +```tsx + + +``` + + + + + +### Кастомный цвет + +Для перекрашивания компонента в любой цвет используйте css-переменную `--loader-color-prop`. + + + +```tsx +import './LoaderExampleCustomColor.css'; -```ts -// src/App.ts import React from 'react'; +import { cn } from '##/utils/bem'; import { Loader } from '@consta/uikit/Loader'; -const App = () => { - return ; -}; +const cnLoaderExampleCustomColor = cn('LoaderExampleCustomColor'); + +export const LoaderExampleCustomColor = () => ( + +); ``` + +```css +.LoaderExampleCustomColor { + --loader-color-prop: var(--color-typo-primary); +} +``` + + + + + +## Свойства компонента + +| Свойство | Тип | По умолчанию | Описание | +| ------------------ | ---------------------------------------------------------- | ------------ | ----------------------------------------------- | +| [`size?`](#размер) | `'xs'` | `'s'` | `'m'` | `'m'` | Размер | +| [`type?`](#тип) | `'dots'` | `'circle'` | `dots'` | Тип | +| [`view?`](#тип) | `'primary'` | `'clear'` | `primary'` | Вид | +| `className?` | `string` | - | Дополнительный CSS-класс | +| `ref?` | `React.Ref` | - | Ссылка на корневой DOM-элемент этого компонента | + +## Сss-переменные + +| Свойство | Описание | +| --------------------- | ----------------- | +| `--loader-color-prop` | Установка цвета | +| `--loader-size-prop` | Установка размера | diff --git a/src/components/Loader/__stand__/Loader.variants.tsx b/src/components/Loader/__stand__/Loader.variants.tsx index 403fb5a4a..318b57991 100644 --- a/src/components/Loader/__stand__/Loader.variants.tsx +++ b/src/components/Loader/__stand__/Loader.variants.tsx @@ -2,11 +2,12 @@ import { useSelect } from '@consta/stand'; import * as React from 'react'; import { Loader } from '../Loader'; -import { loaderPropSize, loaderPropSizeDefault } from '../types'; const Variants = () => { - const size = useSelect('size', loaderPropSize, loaderPropSizeDefault); - return ; + const size = useSelect('size', ['xs', 's', 'm'], 'm'); + const view = useSelect('view', ['primary', 'clear'], 'primary'); + const type = useSelect('type', ['dots', 'circle'], 'dots'); + return ; }; export default Variants; diff --git a/src/components/Loader/__stand__/examples/LoaderExampleCustomColor/LoaderExampleCustomColor.css b/src/components/Loader/__stand__/examples/LoaderExampleCustomColor/LoaderExampleCustomColor.css new file mode 100644 index 000000000..435f58171 --- /dev/null +++ b/src/components/Loader/__stand__/examples/LoaderExampleCustomColor/LoaderExampleCustomColor.css @@ -0,0 +1,3 @@ +.LoaderExampleCustomColor { + --loader-color-prop: var(--color-typo-primary); +} diff --git a/src/components/Loader/__stand__/examples/LoaderExampleCustomColor/LoaderExampleCustomColor.tsx b/src/components/Loader/__stand__/examples/LoaderExampleCustomColor/LoaderExampleCustomColor.tsx new file mode 100644 index 000000000..b79bcec48 --- /dev/null +++ b/src/components/Loader/__stand__/examples/LoaderExampleCustomColor/LoaderExampleCustomColor.tsx @@ -0,0 +1,16 @@ +import './LoaderExampleCustomColor.css'; + +import { Example } from '@consta/stand'; +import React from 'react'; + +import { cn } from '##/utils/bem'; + +import { Loader } from '../../../Loader'; + +const cnLoaderExampleCustomColor = cn('LoaderExampleCustomColor'); + +export const LoaderExampleCustomColor = () => ( + + + +); diff --git a/src/components/Loader/__stand__/examples/LoaderExampleCustomSize/LoaderExampleCustomSize.css b/src/components/Loader/__stand__/examples/LoaderExampleCustomSize/LoaderExampleCustomSize.css new file mode 100644 index 000000000..52d7bf1e9 --- /dev/null +++ b/src/components/Loader/__stand__/examples/LoaderExampleCustomSize/LoaderExampleCustomSize.css @@ -0,0 +1,3 @@ +.LoaderExampleCustomSize { + --loader-size-prop: 70px; +} diff --git a/src/components/Loader/__stand__/examples/LoaderExampleCustomSize/LoaderExampleCustomSize.tsx b/src/components/Loader/__stand__/examples/LoaderExampleCustomSize/LoaderExampleCustomSize.tsx new file mode 100644 index 000000000..d0216d961 --- /dev/null +++ b/src/components/Loader/__stand__/examples/LoaderExampleCustomSize/LoaderExampleCustomSize.tsx @@ -0,0 +1,16 @@ +import './LoaderExampleCustomSize.css'; + +import { Example } from '@consta/stand'; +import React from 'react'; + +import { cn } from '##/utils/bem'; + +import { Loader } from '../../../Loader'; + +const cnLoaderExampleCustomSize = cn('LoaderExampleCustomSize'); + +export const LoaderExampleCustomSize = () => ( + + + +); diff --git a/src/components/Loader/__stand__/examples/LoaderExampleSize/LoaderExampleSize.tsx b/src/components/Loader/__stand__/examples/LoaderExampleSize/LoaderExampleSize.tsx index ebef76587..8c87d218c 100644 --- a/src/components/Loader/__stand__/examples/LoaderExampleSize/LoaderExampleSize.tsx +++ b/src/components/Loader/__stand__/examples/LoaderExampleSize/LoaderExampleSize.tsx @@ -2,9 +2,11 @@ import { Example } from '@consta/stand'; import React from 'react'; import { Loader } from '../../../Loader'; -import { LoaderPropSize } from '../../../types'; +import { LoaderPropSize, LoaderPropType, LoaderPropView } from '../../../types'; const sizes: LoaderPropSize[] = ['m', 's', 'xs']; +const types: LoaderPropType[] = ['dots', 'circle']; +const views: LoaderPropView[] = ['primary', 'clear']; export const LoaderExampleSize = () => ( ( getItemDescription={(size) => `size="${size}"`} /> ); + +export const LoaderExampleType = () => ( + } + getItemDescription={(type) => `type="${type}"`} + /> +); + +export const LoaderExampleView = () => ( + } + getItemDescription={(view) => `view="${view}"`} + /> +); diff --git a/src/components/Loader/__tests__/Loader.test.tsx b/src/components/Loader/__tests__/Loader.test.tsx index 33058966c..fc5eff113 100644 --- a/src/components/Loader/__tests__/Loader.test.tsx +++ b/src/components/Loader/__tests__/Loader.test.tsx @@ -2,7 +2,6 @@ import { render, screen } from '@testing-library/react'; import * as React from 'react'; import { cnLoader, Loader } from '../Loader'; -import { loaderPropSize } from '../types'; type FileProps = React.ComponentProps; @@ -23,7 +22,7 @@ describe('Компонент File', () => { describe('проверка props', () => { describe('проверка size', () => { - loaderPropSize.forEach((size) => { + (['xs', 's', 'm'] as const).forEach((size) => { it(`присваивает класс для size=${size}`, () => { renderComponent({ size }); diff --git a/src/components/Loader/types.ts b/src/components/Loader/types.ts index dd72dab03..ede12f386 100644 --- a/src/components/Loader/types.ts +++ b/src/components/Loader/types.ts @@ -1,12 +1,14 @@ import { PropsWithHTMLAttributes } from '../../utils/types/PropsWithHTMLAttributes'; -export const loaderPropSize = ['m', 's', 'xs'] as const; -export type LoaderPropSize = typeof loaderPropSize[number]; -export const loaderPropSizeDefault: LoaderPropSize = loaderPropSize[0]; +export type LoaderPropSize = 'xs' | 's' | 'm'; +export type LoaderPropType = 'dots' | 'circle'; +export type LoaderPropView = 'primary' | 'clear'; type Props = { - size?: LoaderPropSize; + size?: 'xs' | 's' | 'm'; children?: never; + type?: LoaderPropType; + view?: LoaderPropView; }; export type LoaderProps = PropsWithHTMLAttributes; diff --git a/yarn.lock b/yarn.lock index 23e9060eb..712e8f8c1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1782,19 +1782,19 @@ resolved "https://registry.yarnpkg.com/@consta/header/-/header-3.0.0.tgz#b4a10653492b84107a82f1a5a28d9d0641bf4aac" integrity sha512-NSAY2Lzu3MtKMunEcnMCJPVhaEPz9PIkOmu32uotN3jsgDEJbNK67KUhElx6DuN1c0ocV9aH1kVa8eLXH8XAqA== -"@consta/icons@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@consta/icons/-/icons-1.0.1.tgz#59f51cc421de0ff14ed4308026685e82240d3473" - integrity sha512-TgN03C5KOzK8eBOx9Kl4GFw1SL+qSILoadWMboXwOiSHuPU7p4ie5z4ZmS7TzUnLOhybZBL3xVsM9UBOpDMKKQ== +"@consta/icons@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@consta/icons/-/icons-1.1.0.tgz#f21496bc833ad062f03ddde62b93bdf7631c3c57" + integrity sha512-vsv41yw3atSzXfrmu9rJSNvcxjChrFau0IMAP/4nxBPzF7AIFx9Jf94ZtOOmK+st0NN/HXqKkaFMey6rYXTUCQ== -"@consta/stand@^0.0.141": - version "0.0.141" - resolved "https://registry.yarnpkg.com/@consta/stand/-/stand-0.0.141.tgz#2f894f3f05d52c125ea4afd676021730bda65c14" - integrity sha512-jEBNvHZ9r7n4SAFcE/nFSqT6e2+ubK/MggKANoy3Wb1EkD/eQ7f8A3X/HxcMXa2GAGB8Drxd8FUeK4svWAFbnw== +"@consta/stand@^0.0.148": + version "0.0.148" + resolved "https://registry.yarnpkg.com/@consta/stand/-/stand-0.0.148.tgz#d23fe17caf96411ab68941dc57fc2af5397d17d3" + integrity sha512-UtjKG+CGaVkzshYLZO5/JUB87wDDk2dHlks/zbnwFCmBWLGu8ADEiNNmPDlv5gTJxqGOneRcjPDL3Akr8wTdkw== dependencies: "@consta/header" "^3.0.0" - "@consta/icons" "^1.0.1" - "@consta/uikit" "^5.0.1" + "@consta/icons" "^1.1.0" + "@consta/uikit" "^5.15.0" "@mdx-js/loader" "^2.3.0" "@mdx-js/react" "^2.3.0" "@oclif/command" "^1.8.22" @@ -1861,10 +1861,10 @@ webpack-manifest-plugin "^5.0.0" workbox-webpack-plugin "^6.4.1" -"@consta/uikit@^5.0.1": - version "5.14.0" - resolved "https://registry.yarnpkg.com/@consta/uikit/-/uikit-5.14.0.tgz#1457c54a28623db720e9e6efb2fb5451aa533f73" - integrity sha512-IeBhi7HgyRw2aZWVb9va5rAxt/EIqZ2vJx+30OKMWNwBOfViV2QXLpTQ74z+sJXg+L5KinO0rtAbyIfjkrjPMQ== +"@consta/uikit@^5.15.0": + version "5.15.0" + resolved "https://registry.yarnpkg.com/@consta/uikit/-/uikit-5.15.0.tgz#8899dfdfb7b28bbe693e602dda8e79a7717b8d63" + integrity sha512-i2BFXz/+UPyK0dHemVCCIpJL3bUNBbi3huhiyn8W2m7sPMidxq3oG+exa9dN24P0OWIlqtWq4W7HPbgCL3I9TQ== "@consta/uikit@^5.4.1": version "5.9.2" @@ -16706,7 +16706,7 @@ string-natural-compare@^3.0.1: resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -16724,6 +16724,15 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" @@ -16842,7 +16851,7 @@ stringify-package@^1.0.0, stringify-package@^1.0.1: resolved "https://registry.yarnpkg.com/stringify-package/-/stringify-package-1.0.1.tgz#e5aa3643e7f74d0f28628b72f3dad5cecfc3ba85" integrity sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg== -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"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== @@ -16870,6 +16879,13 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" +strip-ansi@^6.0.0, 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@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" @@ -18889,7 +18905,7 @@ worker-farm@^1.6.0, worker-farm@^1.7.0: dependencies: errno "~0.1.7" -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +"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== @@ -18924,6 +18940,15 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +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@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"