From d836279533e0918ebbd1e1f3d707b0a07775f10d Mon Sep 17 00:00:00 2001 From: hextion <100ishundred@gmail.com> Date: Thu, 2 Oct 2025 10:03:53 +0300 Subject: [PATCH 01/11] fix(button): rework component props --- packages/button/src/Component.responsive.tsx | 4 +- packages/button/src/Component.test.tsx | 25 +++--- .../src/__snapshots__/Component.test.tsx.snap | 8 +- .../src/components/base-button/Component.tsx | 80 +++++-------------- .../components/button-component/Component.tsx | 28 +++++++ .../src/components/button-component/index.ts | 1 + .../button/src/desktop/Component.desktop.tsx | 10 +-- .../button/src/mobile/Component.mobile.tsx | 10 +-- packages/button/src/typings.ts | 61 +++++++++----- .../src/__snapshots__/Component.test.tsx.snap | 9 --- .../src/__snapshots__/Component.test.tsx.snap | 2 + .../src/__snapshots__/Component.test.tsx.snap | 2 + 12 files changed, 125 insertions(+), 115 deletions(-) create mode 100644 packages/button/src/components/button-component/Component.tsx create mode 100644 packages/button/src/components/button-component/index.ts diff --git a/packages/button/src/Component.responsive.tsx b/packages/button/src/Component.responsive.tsx index 88b7744f36..aa8883e037 100644 --- a/packages/button/src/Component.responsive.tsx +++ b/packages/button/src/Component.responsive.tsx @@ -4,9 +4,9 @@ import { useIsDesktop } from '@alfalab/core-components-mq'; import { ButtonDesktop } from './desktop'; import { ButtonMobile } from './mobile'; -import { type ButtonProps } from './typings'; +import { type ButtonProps, type ButtonRef } from './typings'; -export const Button = forwardRef( +export const Button = forwardRef( ( { children, diff --git a/packages/button/src/Component.test.tsx b/packages/button/src/Component.test.tsx index 8f2c19c39e..629292e63b 100644 --- a/packages/button/src/Component.test.tsx +++ b/packages/button/src/Component.test.tsx @@ -1,4 +1,4 @@ -import React, { MouseEvent, useState, FC, forwardRef } from 'react'; +import React, { MouseEvent, useState, FC, forwardRef, useRef } from 'react'; import { render, fireEvent, @@ -100,9 +100,9 @@ describe('Button', () => { expect(container.firstElementChild).toHaveAttribute('disabled'); }); - it('should set disabled attribute to ', () => { + it('should set `aria-disabled` attribute to ', () => { const { container } = render( @@ -969,30 +961,26 @@ exports[`CalendarRange Display tests should match snapshot 1`] = ` > diff --git a/packages/calendar/src/__snapshots__/Component.test.tsx.snap b/packages/calendar/src/__snapshots__/Component.test.tsx.snap index 643b440045..f966dbdabc 100644 --- a/packages/calendar/src/__snapshots__/Component.test.tsx.snap +++ b/packages/calendar/src/__snapshots__/Component.test.tsx.snap @@ -3399,30 +3399,26 @@ exports[`Calendar Display tests should match selectorView="month-only" snapshot > diff --git a/packages/calendar/src/components/period-slider/__snapshots__/Component.test.tsx.snap b/packages/calendar/src/components/period-slider/__snapshots__/Component.test.tsx.snap index ab4f7598c0..5390923593 100644 --- a/packages/calendar/src/components/period-slider/__snapshots__/Component.test.tsx.snap +++ b/packages/calendar/src/components/period-slider/__snapshots__/Component.test.tsx.snap @@ -9,31 +9,27 @@ exports[`PeriodSlider empty PeriodSlider empty PeriodSlider default title snapsh > @@ -83,31 +75,27 @@ exports[`PeriodSlider empty PeriodSlider empty PeriodSlider specific title snaps > diff --git a/packages/file-upload-item-v1/src/__snapshots__/Component.test.tsx.snap b/packages/file-upload-item-v1/src/__snapshots__/Component.test.tsx.snap index c85ee19d94..9f3372b2af 100644 --- a/packages/file-upload-item-v1/src/__snapshots__/Component.test.tsx.snap +++ b/packages/file-upload-item-v1/src/__snapshots__/Component.test.tsx.snap @@ -51,57 +51,49 @@ exports[`FileUploadItemV1 Snapshots tests should match snapshot 1`] = ` - - - - - + + @@ -154,57 +146,49 @@ exports[`FileUploadItemV1 Snapshots tests should match snapshot 1`] = ` - - - - - + + diff --git a/packages/icon-button/src/Component.tsx b/packages/icon-button/src/Component.tsx index 72431fe947..6c9c187c43 100644 --- a/packages/icon-button/src/Component.tsx +++ b/packages/icon-button/src/Component.tsx @@ -7,7 +7,9 @@ import React, { } from 'react'; import cn from 'classnames'; -import { Button, type ButtonProps } from '@alfalab/core-components-button'; +import { type ButtonProps } from '@alfalab/core-components-button'; +import { BaseButtonCandidate } from '@alfalab/core-components-button/components/base-button-candidate'; +import { useLoading } from '@alfalab/core-components-button/shared'; import defaultColors from './default.module.css'; import styles from './index.module.css'; @@ -27,7 +29,7 @@ export type IconButtonProps = { /** * Тип кнопки */ - view?: 'primary' | 'secondary' | 'transparent' | 'tertiary' | 'negative'; + view?: 'primary' | 'secondary' | 'transparent' /* @deprecated */ | 'tertiary' | 'negative'; /** * Размер компонента @@ -75,41 +77,46 @@ export const IconButton = forwardRef( colors = 'default', alignIcon = 'center', transparentBg = false, + loading: loadingFromProps, ...restProps }, ref, - ) => ( - - ), + > + + {React.isValidElement(Icon) ? ( + React.cloneElement(Icon as ReactElement<{ className?: string }>, { + className: cn( + styles.icon, + (Icon as ReactElement<{ className?: string }>).props.className, + ), + }) + ) : ( + + )} + + + ); + }, ); IconButton.displayName = 'IconButton'; diff --git a/packages/icon-button/src/__image_snapshots__/icon-button-screenshots-disabled-view-2-colors-0-snap.png b/packages/icon-button/src/__image_snapshots__/icon-button-screenshots-disabled-view-2-colors-0-snap.png index 55c90c17e8..33ff2c237a 100644 --- a/packages/icon-button/src/__image_snapshots__/icon-button-screenshots-disabled-view-2-colors-0-snap.png +++ b/packages/icon-button/src/__image_snapshots__/icon-button-screenshots-disabled-view-2-colors-0-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8e53491bfb3fc6f57e699eb2c415dbcb9f83afb4df39ca93933ba24df1fe97ac -size 746 +oid sha256:62097e0415d97675a2f7450354d02030659f8f27758cf13087b9c659efd39b6c +size 666 diff --git a/packages/icon-button/src/__image_snapshots__/icon-button-screenshots-disabled-view-2-colors-1-snap.png b/packages/icon-button/src/__image_snapshots__/icon-button-screenshots-disabled-view-2-colors-1-snap.png index b6e213019c..47efd91ae2 100644 --- a/packages/icon-button/src/__image_snapshots__/icon-button-screenshots-disabled-view-2-colors-1-snap.png +++ b/packages/icon-button/src/__image_snapshots__/icon-button-screenshots-disabled-view-2-colors-1-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:67d0e1565e1e3c8b6453dfbe05895aee84aae9c28dd30fbc55eab831ab0a6d0b -size 623 +oid sha256:0fc8bbcebdb89d7e81c629a0d947c3fe8892af7bdc60225f8d0fd5a200ceae17 +size 711 diff --git a/packages/icon-button/src/__snapshots__/Component.test.tsx.snap b/packages/icon-button/src/__snapshots__/Component.test.tsx.snap index 67a9aa50b6..818600cae3 100644 --- a/packages/icon-button/src/__snapshots__/Component.test.tsx.snap +++ b/packages/icon-button/src/__snapshots__/Component.test.tsx.snap @@ -7,43 +7,9 @@ exports[`IconButton Href tests should set \`href\` attribute and be link 1`] = `
- - - - - - - - -
- , - "container":
- - + +
+ , + "container":
+ + + + +
, @@ -125,40 +117,8 @@ exports[`IconButton Snapshots tests should match snapshot 1`] = ` "baseElement":
-
- , - "container":
- +
+ , + "container":
+
, diff --git a/packages/icon-button/src/default.module.css b/packages/icon-button/src/default.module.css index 231494d1f5..3620310b2c 100644 --- a/packages/icon-button/src/default.module.css +++ b/packages/icon-button/src/default.module.css @@ -36,60 +36,70 @@ &.primary { color: var(--icon-button-primary-base-color); - @mixin hover { - color: var(--icon-button-primary-hover-color); - } + @mixin not-disabled { + @mixin hover { + color: var(--icon-button-primary-hover-color); + } - &:active { - color: var(--icon-button-primary-active-color); + &:active { + color: var(--icon-button-primary-active-color); + } } } &.secondary { color: var(--icon-button-secondary-base-color); - @mixin hover { - color: var(--icon-button-secondary-hover-color); - } + @mixin not-disabled { + @mixin hover { + color: var(--icon-button-secondary-hover-color); + } - &:active { - color: var(--icon-button-secondary-active-color); + &:active { + color: var(--icon-button-secondary-active-color); + } } } &.transparent { color: var(--icon-button-transparent-base-color); - @mixin hover { - color: var(--icon-button-transparent-hover-color); - } + @mixin not-disabled { + @mixin hover { + color: var(--icon-button-transparent-hover-color); + } - &:active { - color: var(--icon-button-transparent-active-color); + &:active { + color: var(--icon-button-transparent-active-color); + } } } &.negative { color: var(--icon-button-negative-base-color); - @mixin hover { - color: var(--icon-button-negative-hover-color); - } + @mixin not-disabled { + @mixin hover { + color: var(--icon-button-negative-hover-color); + } - &:active { - color: var(--icon-button-negative-active-color); + &:active { + color: var(--icon-button-negative-active-color); + } } } &.tertiary { color: var(--icon-button-tertiary-base-color); - @mixin hover { - color: var(--icon-button-tertiary-hover-color); - } + @mixin not-disabled { + @mixin hover { + color: var(--icon-button-tertiary-hover-color); + } - &:active { - color: var(--icon-button-tertiary-active-color); + &:active { + color: var(--icon-button-tertiary-active-color); + } } } @@ -97,87 +107,105 @@ &.primary { color: var(--color-light-text-primary); - @mixin hover { - background: var(--color-light-transparent-default-hover); - } + @mixin not-disabled { + @mixin hover { + background: var(--color-light-transparent-default-hover); + } - &:active { - background: var(--color-light-transparent-default-press); + &:active { + background: var(--color-light-transparent-default-press); + } } } &.secondary { color: var(--color-light-text-secondary); - @mixin hover { - background: var(--color-light-transparent-default-hover); - } + @mixin not-disabled { + @mixin hover { + background: var(--color-light-transparent-default-hover); + } - &:active { - background: var(--color-light-transparent-default-press); + &:active { + background: var(--color-light-transparent-default-press); + } } } &.negative { color: var(--color-light-text-negative); - @mixin hover { - background: var(--color-light-transparent-default-hover); - } + @mixin not-disabled { + @mixin hover { + background: var(--color-light-transparent-default-hover); + } - &:active { - background: var(--color-light-transparent-default-press); + &:active { + background: var(--color-light-transparent-default-press); + } } } &.tertiary { color: var(--color-light-text-tertiary); - @mixin hover { - background: var(--color-light-transparent-default-hover); - } + @mixin not-disabled { + @mixin hover { + background: var(--color-light-transparent-default-hover); + } - &:active { - background: var(--color-light-transparent-default-press); + &:active { + background: var(--color-light-transparent-default-press); + } } } } - &.component:disabled { - &.primary { - color: var(--icon-button-primary-disabled-color); + &.component { + @mixin disabled { + &.primary { + color: var(--icon-button-primary-disabled-color); - &.loader { - color: var(--icon-button-primary-base-color); + &.loader { + color: var(--icon-button-primary-base-color); + } } - } - &.secondary { - color: var(--icon-button-secondary-disabled-color); + &.secondary { + color: var(--icon-button-secondary-disabled-color); - &.loader { - color: var(--icon-button-secondary-base-color); + &.loader { + color: var(--icon-button-secondary-base-color); + } } - } - &.negative { - color: var(--icon-button-negative-disabled-color); + &.transparent { + color: var(--icon-button-transparent-disabled-color); - &.loader { - color: var(--icon-button-negative-base-color); + &.loader { + color: var(--icon-button-transparent-base-color); + } } - } - &.tertiary { - color: var(--icon-button-tertiary-disabled-color); + &.negative { + color: var(--icon-button-negative-disabled-color); - &.loader { - color: var(--icon-button-tertiary-base-color); + &.loader { + color: var(--icon-button-negative-base-color); + } } - } - &.transparentBg { - background: transparent; + &.tertiary { + color: var(--icon-button-tertiary-disabled-color); + + &.loader { + color: var(--icon-button-tertiary-base-color); + } + } + + &.transparentBg { + background: transparent; + } } } } diff --git a/packages/icon-button/src/inverted.module.css b/packages/icon-button/src/inverted.module.css index 0b6f20d65e..81727ecd37 100644 --- a/packages/icon-button/src/inverted.module.css +++ b/packages/icon-button/src/inverted.module.css @@ -66,60 +66,70 @@ &.primary { color: var(--icon-button-inverted-primary-base-color); - @mixin hover { - color: var(--icon-button-inverted-primary-hover-color); - } + @mixin not-disabled { + @mixin hover { + color: var(--icon-button-inverted-primary-hover-color); + } - &:active { - color: var(--icon-button-inverted-primary-active-color); + &:active { + color: var(--icon-button-inverted-primary-active-color); + } } } &.secondary { color: var(--icon-button-inverted-secondary-base-color); - @mixin hover { - color: var(--icon-button-inverted-secondary-hover-color); - } + @mixin not-disabled { + @mixin hover { + color: var(--icon-button-inverted-secondary-hover-color); + } - &:active { - color: var(--icon-button-inverted-secondary-active-color); + &:active { + color: var(--icon-button-inverted-secondary-active-color); + } } } &.transparent { color: var(--icon-button-inverted-transparent-base-color); - @mixin hover { - color: var(--icon-button-inverted-transparent-hover-color); - } + @mixin not-disabled { + @mixin hover { + color: var(--icon-button-inverted-transparent-hover-color); + } - &:active { - color: var(--icon-button-inverted-transparent-active-color); + &:active { + color: var(--icon-button-inverted-transparent-active-color); + } } } &.negative { color: var(--icon-button-inverted-negative-base-color); - @mixin hover { - color: var(--icon-button-inverted-negative-hover-color); - } + @mixin not-disabled { + @mixin hover { + color: var(--icon-button-inverted-negative-hover-color); + } - &:active { - color: var(--icon-button-inverted-negative-active-color); + &:active { + color: var(--icon-button-inverted-negative-active-color); + } } } &.tertiary { color: var(--icon-button-inverted-tertiary-base-color); - @mixin hover { - color: var(--icon-button-inverted-tertiary-hover-color); - } + @mixin not-disabled { + @mixin hover { + color: var(--icon-button-inverted-tertiary-hover-color); + } - &:active { - color: var(--icon-button-inverted-tertiary-active-color); + &:active { + color: var(--icon-button-inverted-tertiary-active-color); + } } } @@ -127,87 +137,105 @@ &.primary { color: var(--color-light-text-primary-inverted); - @mixin hover { - background: var(--color-light-transparent-default-inverted-hover); - } + @mixin not-disabled { + @mixin hover { + background: var(--color-light-transparent-default-inverted-hover); + } - &:active { - background: var(--color-light-transparent-default-inverted-press); + &:active { + background: var(--color-light-transparent-default-inverted-press); + } } } &.secondary { color: var(--color-light-text-secondary-inverted); - @mixin hover { - background: var(--color-light-transparent-default-inverted-hover); - } + @mixin not-disabled { + @mixin hover { + background: var(--color-light-transparent-default-inverted-hover); + } - &:active { - background: var(--color-light-transparent-default-inverted-press); + &:active { + background: var(--color-light-transparent-default-inverted-press); + } } } &.negative { color: var(--color-light-text-negative-inverted); - @mixin hover { - background: var(--color-light-transparent-default-inverted-hover); - } + @mixin not-disabled { + @mixin hover { + background: var(--color-light-transparent-default-inverted-hover); + } - &:active { - background: var(--color-light-transparent-default-inverted-press); + &:active { + background: var(--color-light-transparent-default-inverted-press); + } } } &.tertiary { color: var(--color-light-text-tertiary-inverted); - @mixin hover { - background: var(--color-light-transparent-default-inverted-hover); - } + @mixin not-disabled { + @mixin hover { + background: var(--color-light-transparent-default-inverted-hover); + } - &:active { - background: var(--color-light-transparent-default-inverted-press); + &:active { + background: var(--color-light-transparent-default-inverted-press); + } } } } - &.component:disabled { - &.primary { - color: var(--icon-button-inverted-primary-disabled-color); + &.component { + @mixin disabled { + &.primary { + color: var(--icon-button-inverted-primary-disabled-color); - &.loader { - color: var(--icon-button-inverted-primary-base-color); + &.loader { + color: var(--icon-button-inverted-primary-base-color); + } } - } - &.secondary { - color: var(--icon-button-inverted-secondary-disabled-color); + &.secondary { + color: var(--icon-button-inverted-secondary-disabled-color); - &.loader { - color: var(--icon-button-inverted-secondary-base-color); + &.loader { + color: var(--icon-button-inverted-secondary-base-color); + } } - } - &.negative { - color: var(--icon-button-inverted-negative-disabled-color); + &.transparent { + color: var(--icon-button-inverted-transparent-disabled-color); - &.loader { - color: var(--icon-button-inverted-negative-base-color); + &.loader { + color: var(--icon-button-inverted-transparent-base-color); + } } - } - &.tertiary { - color: var(--icon-button-inverted-tertiary-disabled-color); + &.negative { + color: var(--icon-button-inverted-negative-disabled-color); - &.loader { - color: var(--icon-button-inverted-tertiary-base-color); + &.loader { + color: var(--icon-button-inverted-negative-base-color); + } } - } - &.transparentBg { - background: transparent; + &.tertiary { + color: var(--icon-button-inverted-tertiary-disabled-color); + + &.loader { + color: var(--icon-button-inverted-tertiary-base-color); + } + } + + &.transparentBg { + background: transparent; + } } } } diff --git a/packages/input-autocomplete/src/__snapshots__/Component.test.tsx.snap b/packages/input-autocomplete/src/__snapshots__/Component.test.tsx.snap index 7e715aa09c..8ef4d2ac89 100644 --- a/packages/input-autocomplete/src/__snapshots__/Component.test.tsx.snap +++ b/packages/input-autocomplete/src/__snapshots__/Component.test.tsx.snap @@ -140,29 +140,25 @@ exports[`InputAutocompleteMobile Snapshots tests should match snapshot in open s > diff --git a/packages/modal/src/__snapshots__/Component.test.tsx.snap b/packages/modal/src/__snapshots__/Component.test.tsx.snap index 2b70769763..5e2e7df053 100644 --- a/packages/modal/src/__snapshots__/Component.test.tsx.snap +++ b/packages/modal/src/__snapshots__/Component.test.tsx.snap @@ -74,29 +74,25 @@ exports[`ModalDesktop snapshots tests should match snapshot 1`] = ` > @@ -208,29 +204,25 @@ exports[`ModalMobile snapshots tests should match snapshot 1`] = ` > diff --git a/packages/navigation-bar-private/src/__snapshots__/Component.test.tsx.snap b/packages/navigation-bar-private/src/__snapshots__/Component.test.tsx.snap index dfd75c6a81..eb025b12ee 100644 --- a/packages/navigation-bar-private/src/__snapshots__/Component.test.tsx.snap +++ b/packages/navigation-bar-private/src/__snapshots__/Component.test.tsx.snap @@ -66,30 +66,26 @@ exports[`Navigation Bar Snapshots tests should match snapshot 1`] = ` > diff --git a/packages/notification-manager/src/__snapshots__/component.test.tsx.snap b/packages/notification-manager/src/__snapshots__/component.test.tsx.snap index 8c5034c880..917b30f52a 100644 --- a/packages/notification-manager/src/__snapshots__/component.test.tsx.snap +++ b/packages/notification-manager/src/__snapshots__/component.test.tsx.snap @@ -57,29 +57,25 @@ exports[`NotificationManager Snapshots tests should match snapshot 1`] = ` > @@ -120,29 +116,25 @@ exports[`NotificationManager Snapshots tests should match snapshot 1`] = ` > @@ -183,29 +175,25 @@ exports[`NotificationManager Snapshots tests should match snapshot 1`] = ` > diff --git a/packages/notification/src/__snapshots__/Component.test.tsx.snap b/packages/notification/src/__snapshots__/Component.test.tsx.snap index 8871e57133..951c5c7b01 100644 --- a/packages/notification/src/__snapshots__/Component.test.tsx.snap +++ b/packages/notification/src/__snapshots__/Component.test.tsx.snap @@ -67,29 +67,25 @@ exports[`Notification Snapshots tests should match snapshot 1`] = ` > diff --git a/packages/pass-code-v1/src/components/KeyPadButton/index.module.css b/packages/pass-code-v1/src/components/KeyPadButton/index.module.css index 60277952b2..8825bb539f 100644 --- a/packages/pass-code-v1/src/components/KeyPadButton/index.module.css +++ b/packages/pass-code-v1/src/components/KeyPadButton/index.module.css @@ -6,64 +6,54 @@ justify-content: center; align-items: center; padding: var(--gap-0); -} - -.button.button { - @mixin action_component_secondary; - border-radius: var(--border-radius-circle); - padding: var(--gap-0); - min-width: 64px; - width: 64px; - height: 64px; - text-align: center; + .button.button { + @mixin action_component_secondary; - & > span { - vertical-align: middle; + border-radius: var(--border-radius-circle); + width: 64px; + height: 64px; + text-align: center; - & > * { + & > span { vertical-align: middle; - } - } -} - -.secondary.secondary { - color: var(--color-light-text-primary); - background: var(--button-bg-color); - - &:hover { - color: var(--color-light-text-primary); - } - - &:active { - background: var(--button-bg-color-active); - } -} -.ghost.ghost { - color: var(--color-light-text-primary); - - &:hover { - color: var(--color-light-text-primary); - } + & > * { + vertical-align: middle; + } + } - &:active { - background: var(--button-bg-color-active); - } -} + &.secondary.secondary { + padding: var(--gap-0); + min-width: 64px; + color: var(--color-light-text-primary); + background: var(--button-bg-color); + + @mixin not-disabled { + @mixin hover { + color: var(--color-light-text-primary); + } + + &:active { + background: var(--button-bg-color-active); + } + } + } -@media screen and (min-width: 360px) { - .button.button { - min-width: 76px; - height: 76px; - width: 76px; - } -} + @media screen and (min-width: 360px) { + & { + min-width: 76px; + height: 76px; + width: 76px; + } + } -@media screen and (min-width: 390px) { - .button.button { - min-width: 86px; - width: 86px; - height: 86px; + @media screen and (min-width: 390px) { + & { + min-width: 86px; + width: 86px; + height: 86px; + } + } } } diff --git a/packages/password-input/src/__snapshots__/component.test.tsx.snap b/packages/password-input/src/__snapshots__/component.test.tsx.snap index fffd06da45..0049b7edbb 100644 --- a/packages/password-input/src/__snapshots__/component.test.tsx.snap +++ b/packages/password-input/src/__snapshots__/component.test.tsx.snap @@ -26,35 +26,31 @@ exports[`PasswordInput snapshots tests should match snapshot 1`] = ` class="addons rightAddons rightAddons size-48" > diff --git a/packages/picker-button/src/__snapshots__/Component.test.tsx.snap b/packages/picker-button/src/__snapshots__/Component.test.tsx.snap index a5273f6f28..72a47569f5 100644 --- a/packages/picker-button/src/__snapshots__/Component.test.tsx.snap +++ b/packages/picker-button/src/__snapshots__/Component.test.tsx.snap @@ -359,29 +359,25 @@ exports[`Snapshots tests should display opened correctly 4`] = ` > @@ -1473,29 +1469,25 @@ exports[`Snapshots tests should display opened correctly 6`] = ` > diff --git a/packages/side-panel/src/__snapshots__/Component.test.tsx.snap b/packages/side-panel/src/__snapshots__/Component.test.tsx.snap index 5ba617100d..49dd709cbf 100644 --- a/packages/side-panel/src/__snapshots__/Component.test.tsx.snap +++ b/packages/side-panel/src/__snapshots__/Component.test.tsx.snap @@ -77,29 +77,25 @@ exports[`SidePanelDesktop snapshots tests should match snapshot 1`] = ` > @@ -215,29 +211,25 @@ exports[`SidePanelMobile snapshots tests should match snapshot 1`] = ` > From 4b42d323433eea319b76f9868d5d1545978c2325 Mon Sep 17 00:00:00 2001 From: hextion <100ishundred@gmail.com> Date: Tue, 7 Oct 2025 15:45:02 +0300 Subject: [PATCH 07/11] refactor(pass-code-v1): used BaseButtonCandidate --- .../base-button-candidate/Component.tsx | 2 +- .../base-button-candidate/index.module.css | 7 +- .../components/base-button/index.module.css | 4 - .../src/__snapshots__/component.test.tsx.snap | 576 ++++++------------ packages/pass-code-v1/src/component.test.tsx | 2 +- .../src/components/KeyPad/Component.tsx | 6 +- .../src/components/KeyPadButton/Component.tsx | 42 +- .../components/KeyPadButton/index.module.css | 69 +-- 8 files changed, 226 insertions(+), 482 deletions(-) diff --git a/packages/button/src/components/base-button-candidate/Component.tsx b/packages/button/src/components/base-button-candidate/Component.tsx index 4fb0719da8..8bddaf9137 100644 --- a/packages/button/src/components/base-button-candidate/Component.tsx +++ b/packages/button/src/components/base-button-candidate/Component.tsx @@ -57,7 +57,7 @@ interface ComponentProps { /** * Идентификатор для систем автоматизированного тестирования. - * Для спиннера используется модификатор -loader + * Для лоадер используется модификатор -loader */ dataTestId?: string; diff --git a/packages/button/src/components/base-button-candidate/index.module.css b/packages/button/src/components/base-button-candidate/index.module.css index 3fa5725f2a..c730baa539 100644 --- a/packages/button/src/components/base-button-candidate/index.module.css +++ b/packages/button/src/components/base-button-candidate/index.module.css @@ -11,6 +11,11 @@ align-items: center; position: relative; + transition: + background 0.2s ease, + border 0.2s ease, + color 0.2s ease; + /* Block */ &.block { @@ -39,8 +44,6 @@ /* Disabled */ - /* Disabled */ - @mixin disabled { cursor: var(--disabled-cursor); diff --git a/packages/button/src/components/base-button/index.module.css b/packages/button/src/components/base-button/index.module.css index 6d3f7e12c2..9f479d40a4 100644 --- a/packages/button/src/components/base-button/index.module.css +++ b/packages/button/src/components/base-button/index.module.css @@ -18,10 +18,6 @@ font-weight: var(--button-font-weight); font-family: var(--font-family); } - transition: - background 0.2s ease, - border 0.2s ease, - color 0.2s ease; &.rounded { border-radius: var(--border-radius-pill); diff --git a/packages/pass-code-v1/src/__snapshots__/component.test.tsx.snap b/packages/pass-code-v1/src/__snapshots__/component.test.tsx.snap index 26587e895c..eccff4798d 100644 --- a/packages/pass-code-v1/src/__snapshots__/component.test.tsx.snap +++ b/packages/pass-code-v1/src/__snapshots__/component.test.tsx.snap @@ -35,143 +35,67 @@ exports[`PassCodeV1 Snapshot tests should match snapshot with code length 1`] =
-
- -
-
+ -
-
+ -
-
+ -
-
+ -
-
+ -
-
+ -
-
+ -
-
+ -
+ 9 +
-
- -
+ 0 +
@@ -202,173 +126,89 @@ exports[`PassCodeV1 Snapshot tests should match snapshot with error prop 1`] = `
-
- -
-
+ -
-
+ -
-
+ -
-
+ -
-
+ -
-
+ -
-
+ -
-
+ -
+ 9 +
-
- -
-
+ -
+ + + +
@@ -396,143 +236,67 @@ exports[`PassCodeV1 Snapshot tests should match snapshot with unknown code lengt
-
- -
-
+ -
-
+ -
-
+ -
-
+ -
-
+ -
-
+ -
-
+ -
-
+ -
+ 9 +
-
- -
+ 0 +
diff --git a/packages/pass-code-v1/src/component.test.tsx b/packages/pass-code-v1/src/component.test.tsx index 697ce3c939..ce3f89adc7 100644 --- a/packages/pass-code-v1/src/component.test.tsx +++ b/packages/pass-code-v1/src/component.test.tsx @@ -39,7 +39,7 @@ describe('PassCodeV1', () => { const { getByText } = render(); - const button = getByText(pressedDigit).parentNode as HTMLButtonElement; + const button = getByText(pressedDigit) as HTMLButtonElement; fireEvent.click(button); diff --git a/packages/pass-code-v1/src/components/KeyPad/Component.tsx b/packages/pass-code-v1/src/components/KeyPad/Component.tsx index 3f0a5c6c3b..cbd8c5f5a5 100644 --- a/packages/pass-code-v1/src/components/KeyPad/Component.tsx +++ b/packages/pass-code-v1/src/components/KeyPad/Component.tsx @@ -81,10 +81,14 @@ export const KeyPad: React.FC = ({ return
; } + const handleDigitClick = () => { + onClick(digit); + }; + return ( = { +export type KeyPadButtonProps = { /** * Вид кнопки. */ - view: ButtonMobileProps['view']; + view: 'secondary' | 'text'; /** * Значение. */ - children: T; + children?: ReactNode; /** * Дополнительный класс. @@ -29,7 +29,7 @@ export type KeyPadButtonProps = { /** * Коллбэк нажатия на кнопку. */ - onClick?: (payload: T) => void; + onClick?: () => void; /** * Идентификатор для систем автоматизированного тестирования. @@ -37,24 +37,18 @@ export type KeyPadButtonProps = { dataTestId?: string; }; -export function KeyPadButton({ - children, - onClick, - className, +export const KeyPadButton: FC = ({ view = 'secondary', buttonClassName, + children, dataTestId, -}: KeyPadButtonProps) { - return ( -
- onClick?.(children)} - dataTestId={dataTestId} - > - {children} - -
- ); -} + onClick, +}) => ( + + {children} + +); diff --git a/packages/pass-code-v1/src/components/KeyPadButton/index.module.css b/packages/pass-code-v1/src/components/KeyPadButton/index.module.css index 8825bb539f..57c7c16ea9 100644 --- a/packages/pass-code-v1/src/components/KeyPadButton/index.module.css +++ b/packages/pass-code-v1/src/components/KeyPadButton/index.module.css @@ -2,58 +2,41 @@ @import '../../vars.css'; .component { - display: flex; - justify-content: center; - align-items: center; - padding: var(--gap-0); + @mixin action_component_secondary; - .button.button { - @mixin action_component_secondary; + border-radius: var(--border-radius-circle); + width: 64px; + height: 64px; - border-radius: var(--border-radius-circle); - width: 64px; - height: 64px; - text-align: center; + justify-content: center; + align-items: center; + color: var(--color-light-text-primary); - & > span { - vertical-align: middle; + &.secondary { + background: var(--button-bg-color); - & > * { - vertical-align: middle; - } + &:active { + background: var(--button-bg-color-active); } + } - &.secondary.secondary { - padding: var(--gap-0); - min-width: 64px; - color: var(--color-light-text-primary); - background: var(--button-bg-color); - - @mixin not-disabled { - @mixin hover { - color: var(--color-light-text-primary); - } - - &:active { - background: var(--button-bg-color-active); - } - } + &.text { + @mixin hover { + color: var(--color-light-text-primary-hover); } - @media screen and (min-width: 360px) { - & { - min-width: 76px; - height: 76px; - width: 76px; - } + &:active { + color: var(--color-light-text-primary-press); } + } - @media screen and (min-width: 390px) { - & { - min-width: 86px; - width: 86px; - height: 86px; - } - } + @media screen and (min-width: 360px) { + height: 76px; + width: 76px; + } + + @media screen and (min-width: 390px) { + width: 86px; + height: 86px; } } From 47f40ed52ccad06cac1536f5ab1581c287a3f201 Mon Sep 17 00:00:00 2001 From: hextion <100ishundred@gmail.com> Date: Tue, 7 Oct 2025 20:06:50 +0300 Subject: [PATCH 08/11] refactor(pass-code): used BaseButtonCandidate --- .../src/__snapshots__/component.test.tsx.snap | 148 +++++------------- packages/pass-code/src/component.test.tsx | 2 +- .../src/components/KeyPad/Component.tsx | 10 +- .../src/components/KeyPadButton/Component.tsx | 62 +++----- .../components/KeyPadButton/index.module.css | 27 +--- .../pass-code/src/docs/Component.stories.tsx | 6 +- packages/pass-code/src/docs/description.mdx | 16 +- 7 files changed, 80 insertions(+), 191 deletions(-) diff --git a/packages/pass-code/src/__snapshots__/component.test.tsx.snap b/packages/pass-code/src/__snapshots__/component.test.tsx.snap index 4f34115502..800ae4abd7 100644 --- a/packages/pass-code/src/__snapshots__/component.test.tsx.snap +++ b/packages/pass-code/src/__snapshots__/component.test.tsx.snap @@ -53,98 +53,62 @@ exports[`PassCode Snapshot tests should match snapshot with code length 1`] = ` class="component" >
diff --git a/packages/pattern-lock-v1/src/components/base-pattern-lock/Component.tsx b/packages/pattern-lock-v1/src/components/base-pattern-lock/Component.tsx index a29115ad42..b7830a5299 100644 --- a/packages/pattern-lock-v1/src/components/base-pattern-lock/Component.tsx +++ b/packages/pattern-lock-v1/src/components/base-pattern-lock/Component.tsx @@ -126,9 +126,14 @@ export const BasePatternLock = forwardRef< extraBounds={extraBounds} hover={hover} /> - - {showForgotCodeBtn ? ( -
+
+ {showForgotCodeBtn && ( {forgotCodeBtnText} -
- ) : ( -
- )} + )} +
); }, diff --git a/packages/pattern-lock-v1/src/components/base-pattern-lock/index.module.css b/packages/pattern-lock-v1/src/components/base-pattern-lock/index.module.css index 2b04d6c49f..e02b49b74d 100644 --- a/packages/pattern-lock-v1/src/components/base-pattern-lock/index.module.css +++ b/packages/pattern-lock-v1/src/components/base-pattern-lock/index.module.css @@ -33,6 +33,7 @@ justify-content: center; } +.forgotBtnContainer, .forgotBtn.forgotBtn.forgotBtn { min-height: var(--size-xs-height); } diff --git a/packages/pattern-lock-v1/src/mobile/mobile.module.css b/packages/pattern-lock-v1/src/mobile/mobile.module.css index 95138295c4..9caaaa80e1 100644 --- a/packages/pattern-lock-v1/src/mobile/mobile.module.css +++ b/packages/pattern-lock-v1/src/mobile/mobile.module.css @@ -14,6 +14,7 @@ .forgotBtnContainer { margin-top: var(--gap-32); } + .forgotBtnContainer, .forgotBtn.forgotBtn.forgotBtn { min-height: var(--size-s-height); } @@ -24,6 +25,7 @@ } @media screen and (min-width: 390px) { + .forgotBtnContainer, .forgotBtn.forgotBtn.forgotBtn { min-height: var(--size-m-height); } diff --git a/packages/pattern-lock/src/__image_snapshots__/pattern-lock-screenshots-default-with-forgot-code-button-snap.png b/packages/pattern-lock/src/__image_snapshots__/pattern-lock-screenshots-default-with-forgot-code-button-snap.png index 678ec1c6d2..dc230a1366 100644 --- a/packages/pattern-lock/src/__image_snapshots__/pattern-lock-screenshots-default-with-forgot-code-button-snap.png +++ b/packages/pattern-lock/src/__image_snapshots__/pattern-lock-screenshots-default-with-forgot-code-button-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5a8cc30205a0fdb528b64a54dbbd964a50b854d6a090b50cea8d2386e56df0d0 -size 9019 +oid sha256:bc7add260dd67f0f0bc65e793dec0b4f5bc8d617ee1624f013d3cab03f07de79 +size 8754 diff --git a/packages/pattern-lock/src/__snapshots__/component.test.tsx.snap b/packages/pattern-lock/src/__snapshots__/component.test.tsx.snap index 575242d8d9..bf276cc7fa 100644 --- a/packages/pattern-lock/src/__snapshots__/component.test.tsx.snap +++ b/packages/pattern-lock/src/__snapshots__/component.test.tsx.snap @@ -3,7 +3,7 @@ exports[`PatternLock test Snapshot tests should match snapshot 1`] = `
{showForgotCodeBtn && ( - - {forgotCodeBtnText} - +
+ + {forgotCodeBtnText} + +
)}
); diff --git a/packages/pattern-lock/src/components/base-pattern-lock/index.module.css b/packages/pattern-lock/src/components/base-pattern-lock/index.module.css index 8afcb3af9c..38ff009988 100644 --- a/packages/pattern-lock/src/components/base-pattern-lock/index.module.css +++ b/packages/pattern-lock/src/components/base-pattern-lock/index.module.css @@ -35,7 +35,8 @@ min-height: var(--pattern-lock-with-forgot-btn-min-height); } -.forgotBtn { - display: block; - min-height: var(--size-xs-height); +.forgotBtnContainer { + display: flex; + justify-content: center; + margin: var(--gap-8) auto var(--gap-0); } diff --git a/packages/pattern-lock/src/desktop/Component.desktop.tsx b/packages/pattern-lock/src/desktop/Component.desktop.tsx index be765912c1..880305a092 100644 --- a/packages/pattern-lock/src/desktop/Component.desktop.tsx +++ b/packages/pattern-lock/src/desktop/Component.desktop.tsx @@ -5,10 +5,8 @@ import { type TPatternLockInstance } from '@alfalab/react-canvas-pattern-lock'; import { BasePatternLock } from '../components/base-pattern-lock'; import { type CommonPatternLockProps } from '../typings'; -import styles from './desktop.module.css'; - export const PatternLockDesktop = forwardRef( - (restProps, ref) => , + (restProps, ref) => , ); PatternLockDesktop.displayName = 'PatternLockDesktop'; diff --git a/packages/pattern-lock/src/desktop/desktop.module.css b/packages/pattern-lock/src/desktop/desktop.module.css deleted file mode 100644 index 6c6b96266e..0000000000 --- a/packages/pattern-lock/src/desktop/desktop.module.css +++ /dev/null @@ -1,15 +0,0 @@ -@import '@alfalab/core-components-vars/src/no-typography-index.css'; -@import '../vars.css'; - -.component { - margin: var(--gap-0) auto; - min-width: var(--pattern-lock-min-width); -} - -.forgotBtn { - margin: var(--gap-8) auto var(--gap-0); -} - -.hiddenBtn { - display: none; -} diff --git a/packages/pattern-lock/src/mobile/Component.mobile.tsx b/packages/pattern-lock/src/mobile/Component.mobile.tsx index 98efd99c02..36735aab1d 100644 --- a/packages/pattern-lock/src/mobile/Component.mobile.tsx +++ b/packages/pattern-lock/src/mobile/Component.mobile.tsx @@ -5,10 +5,8 @@ import { type TPatternLockInstance } from '@alfalab/react-canvas-pattern-lock'; import { BasePatternLock } from '../components/base-pattern-lock'; import { type CommonPatternLockProps } from '../typings'; -import styles from './mobile.module.css'; - export const PatternLockMobile = forwardRef( - (restProps, ref) => , + (restProps, ref) => , ); PatternLockMobile.displayName = 'PatternLockMobile'; diff --git a/packages/pattern-lock/src/mobile/mobile.module.css b/packages/pattern-lock/src/mobile/mobile.module.css deleted file mode 100644 index 57d3ff2840..0000000000 --- a/packages/pattern-lock/src/mobile/mobile.module.css +++ /dev/null @@ -1,11 +0,0 @@ -@import '@alfalab/core-components-vars/src/no-typography-index.css'; -@import '../vars.css'; - -.component { - margin: var(--gap-0) auto; - min-width: var(--pattern-lock-min-width); -} - -.forgotBtn { - margin: var(--gap-8) auto var(--gap-0); -} diff --git a/packages/pattern-lock/src/typings.ts b/packages/pattern-lock/src/typings.ts index e17ec2e02b..e8d6b1d102 100644 --- a/packages/pattern-lock/src/typings.ts +++ b/packages/pattern-lock/src/typings.ts @@ -75,10 +75,6 @@ export type PrivatePatternLockProps = { * Включает ховер-эффект */ hover?: boolean; - /** - * Стили компонента - */ - styles: { [key: string]: string }; }; export type PatternLockProps = CommonPatternLockProps & { diff --git a/packages/tabs/src/__image_snapshots__/tabs-text-style-prop-text-style-13-snap.png b/packages/tabs/src/__image_snapshots__/tabs-text-style-prop-text-style-13-snap.png index 143035f38b..b3b418e19e 100644 --- a/packages/tabs/src/__image_snapshots__/tabs-text-style-prop-text-style-13-snap.png +++ b/packages/tabs/src/__image_snapshots__/tabs-text-style-prop-text-style-13-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:36430c5f8bb9992a75386cfd79cd5bdf9d6e52913a4b1fe999e9827595eeb44b -size 6593 +oid sha256:b0a8bd828f30ae7bf0a13fec26d72979eae6925de9c7d4c8251fead5d6b2a2e5 +size 6579 diff --git a/packages/tabs/src/__image_snapshots__/tabs-text-style-prop-text-style-2-snap.png b/packages/tabs/src/__image_snapshots__/tabs-text-style-prop-text-style-2-snap.png index 6cc1c46f8d..b75c5098c5 100644 --- a/packages/tabs/src/__image_snapshots__/tabs-text-style-prop-text-style-2-snap.png +++ b/packages/tabs/src/__image_snapshots__/tabs-text-style-prop-text-style-2-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e20d6ff21a16a231f1b463cb3d79d5cc8a4666a07087413fac8058f54ce73ff8 -size 6868 +oid sha256:9c77f5219ebce4542ff87cf5167a68e2cc36651f976fc8a6f8cc52c90ea093e2 +size 6841 diff --git a/packages/tabs/src/__image_snapshots__/tabs-text-style-prop-text-style-5-snap.png b/packages/tabs/src/__image_snapshots__/tabs-text-style-prop-text-style-5-snap.png index 6cc1c46f8d..b75c5098c5 100644 --- a/packages/tabs/src/__image_snapshots__/tabs-text-style-prop-text-style-5-snap.png +++ b/packages/tabs/src/__image_snapshots__/tabs-text-style-prop-text-style-5-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e20d6ff21a16a231f1b463cb3d79d5cc8a4666a07087413fac8058f54ce73ff8 -size 6868 +oid sha256:9c77f5219ebce4542ff87cf5167a68e2cc36651f976fc8a6f8cc52c90ea093e2 +size 6841 diff --git a/packages/tabs/src/__image_snapshots__/tabs-text-style-prop-text-style-8-snap.png b/packages/tabs/src/__image_snapshots__/tabs-text-style-prop-text-style-8-snap.png index 578ed625cc..39d24c8173 100644 --- a/packages/tabs/src/__image_snapshots__/tabs-text-style-prop-text-style-8-snap.png +++ b/packages/tabs/src/__image_snapshots__/tabs-text-style-prop-text-style-8-snap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e33a82912452b8838c5babf103b547bc5cc0d2730888c56820258aab890d14af -size 6838 +oid sha256:4013e498eef8d58cf6dccfdb0b33c6fafda311abd5e45f806f0bf844b1f03fa9 +size 6824