diff --git a/packages/vkui/src/components/CardScroll/CardScroll.module.css b/packages/vkui/src/components/CardScroll/CardScroll.module.css index c10a988b5f..536bcbb077 100644 --- a/packages/vkui/src/components/CardScroll/CardScroll.module.css +++ b/packages/vkui/src/components/CardScroll/CardScroll.module.css @@ -1,26 +1,28 @@ .host { - margin: 0; - padding: 0; - list-style-type: none; + --vkui_internal--CardScroll_horizontal_padding: 0; } .in { - display: flex; - align-items: stretch; inline-size: 100%; + margin: 0; + padding: 0; + list-style-type: none; } -.gap { - display: block; - flex-shrink: 0; +.in::after, +.in::before { + content: ''; + padding-inline: calc(var(--vkui_internal--CardScroll_horizontal_padding) / 2); } .host + .host { margin-block-start: 16px; } -.withPaddings .gap { - inline-size: var(--vkui--size_base_padding_horizontal--regular); +.withPaddings { + --vkui_internal--CardScroll_horizontal_padding: var( + --vkui--size_base_padding_horizontal--regular + ); } /** @@ -29,17 +31,15 @@ */ /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */ :global(.vkuiInternalSplitCol--viewWidth-tabletPlus):global(.vkuiInternalSplitCol--spaced-auto) - .withPaddings - .gap { - inline-size: 16px; + .withPaddings { + --vkui_internal--CardScroll_horizontal_padding: 16px; } @media (--viewWidth-smallTabletPlus) { /* stylelint-disable-next-line selector-pseudo-class-disallowed-list */ :global(.vkuiInternalSplitCol--viewWidth-none):global(.vkuiInternalSplitCol--spaced-auto) - .withPaddings - .gap { - inline-size: 16px; + .withPaddings { + --vkui_internal--CardScroll_horizontal_padding: 16px; } } diff --git a/packages/vkui/src/components/CardScroll/CardScroll.test.tsx b/packages/vkui/src/components/CardScroll/CardScroll.test.tsx index 7f6b53c83a..88c06d0a29 100644 --- a/packages/vkui/src/components/CardScroll/CardScroll.test.tsx +++ b/packages/vkui/src/components/CardScroll/CardScroll.test.tsx @@ -1,4 +1,3 @@ -import { type CSSProperties } from 'react'; import { fireEvent, render, screen, waitFor } from '@testing-library/react'; import { baselineComponent } from '../../testing/utils'; import { CardScroll } from './CardScroll'; @@ -38,25 +37,35 @@ const mockCardScrollData = (container: HTMLElement, cardsCount: number, defaultS jest.spyOn(card, 'offsetWidth', 'get').mockImplementation(() => width); }); - jest.spyOn(window, 'getComputedStyle').mockImplementation(() => { - const styles: CSSProperties = { - marginRight: '8px', - }; - return styles as CSSStyleDeclaration; - }); + const originalGetComputedStyle = window.getComputedStyle; + + const getComputedStyleInstance = jest + .spyOn(window, 'getComputedStyle') + .mockImplementation((e) => { + return { + ...originalGetComputedStyle(e), + marginRight: '8px', + getPropertyValue: (property: string) => { + if (property === '--vkui_internal--CardScroll_horizontal_padding') { + return '12px'; + } + return ''; + }, + }; + }); const cardScrollContainer = container.getElementsByClassName(styles.in)[0] as HTMLDivElement; jest.spyOn(cardScrollContainer, 'offsetWidth', 'get').mockImplementation(() => 1009); - const gap = container.getElementsByClassName(styles.gap)[0] as HTMLDivElement; - jest.spyOn(gap, 'offsetWidth', 'get').mockImplementation(() => 12); - const horizontalScroll = container.getElementsByClassName( horizontalScrollStyles.in, )[0] as HTMLDivElement; return { horizontalScrollData: setupHorizontalScrollData(horizontalScroll, defaultScrollLeft), horizontalScroll, + mocksRestore: () => { + [getComputedStyleInstance].forEach((mock) => mock.mockRestore()); + }, }; }; @@ -74,7 +83,7 @@ const setup = ({ defaultScrollLeft = 50, cardsCount = 6 }: PrepareDataParams) => , ); - const { horizontalScrollData, horizontalScroll } = mockCardScrollData( + const { horizontalScrollData, horizontalScroll, mocksRestore } = mockCardScrollData( container, cardsCount, defaultScrollLeft, @@ -84,23 +93,15 @@ const setup = ({ defaultScrollLeft = 50, cardsCount = 6 }: PrepareDataParams) => return { horizontalScrollData, + mocksRestore, }; }; describe('CardScroll', () => { - baselineComponent(CardScroll, { - a11yConfig: { - rules: { - // TODO [a11y]: "