diff --git a/src/components/ToggleArrow/README.md b/src/components/ToggleArrow/README.md new file mode 100644 index 000000000..3645afcc5 --- /dev/null +++ b/src/components/ToggleArrow/README.md @@ -0,0 +1,27 @@ +# ToggleArrow + +`type: "toggle-arrow"` + +The **ToggleArrow** component is a small, animated arrow icon used for collapsible sections, navigation panels, and accordions. + +--- + +## 🔧 Props + +| Prop | Type | Default | Description | +| ----------- | ---------------------------- | -------------- | --------------------------------------------- | +| `type` | `'horizontal' \| 'vertical'` | `'horizontal'` | Orientation of the arrow. | +| `iconType` | `'default' \| 'navigation'` | `'default'` | Visual icon variant. | +| `open` | `boolean` | `false` | Whether the arrow is in open (rotated) state. | +| `size` | `number` | `16` | Icon size in pixels. | +| `thin` | `boolean` | `false` | Thinner stroke style. | +| `slow` | `boolean` | `false` | Slower transition animation. | +| `className` | `string` | — | Optional custom CSS class. | + +--- + +## 🧩 Example + +```tsx + +``` diff --git a/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-AllVariants-light-chromium-linux.png b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-AllVariants-light-chromium-linux.png new file mode 100644 index 000000000..699e96b71 Binary files /dev/null and b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-AllVariants-light-chromium-linux.png differ diff --git a/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-AllVariants-light-webkit-linux.png b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-AllVariants-light-webkit-linux.png new file mode 100644 index 000000000..e4941f7b1 Binary files /dev/null and b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-AllVariants-light-webkit-linux.png differ diff --git a/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-Default-light-chromium-linux.png b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-Default-light-chromium-linux.png new file mode 100644 index 000000000..0ced01004 Binary files /dev/null and b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-Default-light-chromium-linux.png differ diff --git a/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-Default-light-webkit-linux.png b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-Default-light-webkit-linux.png new file mode 100644 index 000000000..4b3399c45 Binary files /dev/null and b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-Default-light-webkit-linux.png differ diff --git a/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-Horizontal-light-chromium-linux.png b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-Horizontal-light-chromium-linux.png new file mode 100644 index 000000000..2328009c2 Binary files /dev/null and b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-Horizontal-light-chromium-linux.png differ diff --git a/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-Horizontal-light-webkit-linux.png b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-Horizontal-light-webkit-linux.png new file mode 100644 index 000000000..a5b627d6f Binary files /dev/null and b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-Horizontal-light-webkit-linux.png differ diff --git a/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-NavigationIcon-light-chromium-linux.png b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-NavigationIcon-light-chromium-linux.png new file mode 100644 index 000000000..2328009c2 Binary files /dev/null and b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-NavigationIcon-light-chromium-linux.png differ diff --git a/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-NavigationIcon-light-webkit-linux.png b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-NavigationIcon-light-webkit-linux.png new file mode 100644 index 000000000..a5b627d6f Binary files /dev/null and b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-NavigationIcon-light-webkit-linux.png differ diff --git a/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-OpenHorizontal-light-chromium-linux.png b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-OpenHorizontal-light-chromium-linux.png new file mode 100644 index 000000000..5c022c21c Binary files /dev/null and b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-OpenHorizontal-light-chromium-linux.png differ diff --git a/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-OpenHorizontal-light-webkit-linux.png b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-OpenHorizontal-light-webkit-linux.png new file mode 100644 index 000000000..51f729794 Binary files /dev/null and b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-OpenHorizontal-light-webkit-linux.png differ diff --git a/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-OpenVertical-light-chromium-linux.png b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-OpenVertical-light-chromium-linux.png new file mode 100644 index 000000000..4c95ae805 Binary files /dev/null and b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-OpenVertical-light-chromium-linux.png differ diff --git a/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-OpenVertical-light-webkit-linux.png b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-OpenVertical-light-webkit-linux.png new file mode 100644 index 000000000..92cb81475 Binary files /dev/null and b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-OpenVertical-light-webkit-linux.png differ diff --git a/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-Slow-light-chromium-linux.png b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-Slow-light-chromium-linux.png new file mode 100644 index 000000000..0ced01004 Binary files /dev/null and b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-Slow-light-chromium-linux.png differ diff --git a/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-Slow-light-webkit-linux.png b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-Slow-light-webkit-linux.png new file mode 100644 index 000000000..4b3399c45 Binary files /dev/null and b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-Slow-light-webkit-linux.png differ diff --git a/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-Thin-light-chromium-linux.png b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-Thin-light-chromium-linux.png new file mode 100644 index 000000000..e91c5e1b2 Binary files /dev/null and b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-Thin-light-chromium-linux.png differ diff --git a/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-Thin-light-webkit-linux.png b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-Thin-light-webkit-linux.png new file mode 100644 index 000000000..a90dc6bf1 Binary files /dev/null and b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-Thin-light-webkit-linux.png differ diff --git a/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-ThinSlow-light-chromium-linux.png b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-ThinSlow-light-chromium-linux.png new file mode 100644 index 000000000..e91c5e1b2 Binary files /dev/null and b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-ThinSlow-light-chromium-linux.png differ diff --git a/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-ThinSlow-light-webkit-linux.png b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-ThinSlow-light-webkit-linux.png new file mode 100644 index 000000000..a90dc6bf1 Binary files /dev/null and b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-ThinSlow-light-webkit-linux.png differ diff --git a/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-Vertical-light-chromium-linux.png b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-Vertical-light-chromium-linux.png new file mode 100644 index 000000000..e3d8120dc Binary files /dev/null and b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-Vertical-light-chromium-linux.png differ diff --git a/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-Vertical-light-webkit-linux.png b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-Vertical-light-webkit-linux.png new file mode 100644 index 000000000..4e6112f0f Binary files /dev/null and b/src/components/ToggleArrow/__snapshots__/ToggleArrow.visual.test.tsx-snapshots/ToggleArrow-render-Vertical-light-webkit-linux.png differ diff --git a/src/components/ToggleArrow/__stories__/ToggleArrow.mdx b/src/components/ToggleArrow/__stories__/ToggleArrow.mdx index f50949268..bd86c3e8a 100644 --- a/src/components/ToggleArrow/__stories__/ToggleArrow.mdx +++ b/src/components/ToggleArrow/__stories__/ToggleArrow.mdx @@ -1,5 +1,4 @@ import {Meta} from '@storybook/blocks'; - import {StoryTemplate} from '../../../demo/StoryTemplate.mdx'; import * as ToggleArrowStories from './ToggleArrow.stories.tsx'; @@ -8,22 +7,22 @@ import * as ToggleArrowStories from './ToggleArrow.stories.tsx'; ## Usage -For a detailed usage guide of the ToggleArrow component, see [ToggleArrow Usage](https://github.com/gravity-ui/page-constructor/blob/main/memory-bank/usage/toggleArrow.md). +For a detailed usage guide of the **ToggleArrow** component, see [ToggleArrow Usage](https://github.com/gravity-ui/page-constructor/blob/main/memory-bank/usage/toggleArrow.md). ## Parameters -`type?: 'horizontal' | 'vertical'` — Arrow orientation (default: 'horizontal') +`type?: 'horizontal' | 'vertical'` — Arrow orientation (default: `'horizontal'`) -`iconType?: 'default' | 'navigation'` — Icon variant (default: 'default') +`iconType?: 'default' | 'navigation'` — Icon variant (default: `'default'`) -`open?: boolean` — Boolean indicating if the toggle is in open state (default: false) +`open?: boolean` — Indicates whether the toggle is in an open state (default: `false`) -`size?: number` — Icon size in pixels (default: 16) +`size?: number` — Icon size in pixels (default: `16`) -`thin?: boolean` — Boolean for thinner stroke width (default: false) +`thin?: boolean` — Enables a thinner stroke width (default: `false`) -`slow?: boolean` — Boolean for slower animation duration (default: false) +`slow?: boolean` — Slows down animation (default: `false`) -`className?: string` — Optional CSS class name +`className?: string` — Optional CSS class name for the wrapper diff --git a/src/components/ToggleArrow/__stories__/ToggleArrow.stories.tsx b/src/components/ToggleArrow/__stories__/ToggleArrow.stories.tsx index ff709470b..6abcffd09 100644 --- a/src/components/ToggleArrow/__stories__/ToggleArrow.stories.tsx +++ b/src/components/ToggleArrow/__stories__/ToggleArrow.stories.tsx @@ -1,18 +1,69 @@ -import {Meta, StoryFn} from '@storybook/react'; +import {Meta, StoryFn, StoryObj} from '@storybook/react'; +import {blockTransform} from '../../../../.storybook/utils'; +import {CustomBlock} from '../../../models'; import ToggleArrow, {ToggleArrowProps} from '../ToggleArrow'; import data from './data.json'; export default { - component: ToggleArrow, title: 'Components/ToggleArrow', -} as Meta; + component: ToggleArrow, + parameters: { + layout: 'centered', + controls: {expanded: true}, + }, +} as Meta; -const DefaultTemplate: StoryFn = (args) => ; +const Template: StoryFn = (args) => ( + +); -export const Horizontal = DefaultTemplate.bind({}); -export const Vertical = DefaultTemplate.bind({}); +export const Default: StoryObj = Template.bind({}); +export const Horizontal: StoryObj = Template.bind({}); +export const Vertical: StoryObj = Template.bind({}); +export const OpenHorizontal: StoryObj = Template.bind({}); +export const OpenVertical: StoryObj = Template.bind({}); +export const Thin: StoryObj = Template.bind({}); +export const Slow: StoryObj = Template.bind({}); +export const ThinSlow: StoryObj = Template.bind({}); +export const NavigationIcon: StoryObj = Template.bind({}); +export const AllVariants: StoryObj = Template.bind({}); +Default.args = {type: 'horizontal', iconType: 'default', size: 24}; Horizontal.args = data.horizontal.content as ToggleArrowProps; Vertical.args = data.vertical.content as ToggleArrowProps; +OpenHorizontal.args = {type: 'horizontal', open: true, size: 24}; +OpenVertical.args = {type: 'vertical', open: true, size: 24}; +Thin.args = {type: 'horizontal', thin: true, size: 24}; +Slow.args = {type: 'horizontal', slow: true, size: 24}; +ThinSlow.args = {type: 'horizontal', thin: true, slow: true, size: 24}; +NavigationIcon.args = {type: 'horizontal', iconType: 'navigation', size: 30}; + +AllVariants.args = {}; +AllVariants.decorators = [ + () => ( +
+ + + + + + + + + + + + +
+ ), +]; diff --git a/src/components/ToggleArrow/__tests__/ToggleArrow.visual.test.tsx b/src/components/ToggleArrow/__tests__/ToggleArrow.visual.test.tsx new file mode 100644 index 000000000..c6c0af77a --- /dev/null +++ b/src/components/ToggleArrow/__tests__/ToggleArrow.visual.test.tsx @@ -0,0 +1,79 @@ +import {composeStories} from '@storybook/react'; + +import {test} from '../../../../playwright/core/index'; +import * as ToggleArrowStories from '../__stories__/ToggleArrow.stories'; + +const { + Default, + Horizontal, + Vertical, + OpenHorizontal, + OpenVertical, + Thin, + Slow, + ThinSlow, + NavigationIcon, + AllVariants, +} = composeStories(ToggleArrowStories); + +test.describe('ToggleArrow', () => { + test('render ', async ({mount, expectScreenshot, defaultDelay}) => { + await mount(); + await defaultDelay(); + await expectScreenshot({skipTheme: 'dark'}); + }); + + test('render ', async ({mount, expectScreenshot, defaultDelay}) => { + await mount(); + await defaultDelay(); + await expectScreenshot({skipTheme: 'dark'}); + }); + + test('render ', async ({mount, expectScreenshot, defaultDelay}) => { + await mount(); + await defaultDelay(); + await expectScreenshot({skipTheme: 'dark'}); + }); + + test('render ', async ({mount, expectScreenshot, defaultDelay}) => { + await mount(); + await defaultDelay(); + await expectScreenshot({skipTheme: 'dark'}); + }); + + test('render ', async ({mount, expectScreenshot, defaultDelay}) => { + await mount(); + await defaultDelay(); + await expectScreenshot({skipTheme: 'dark'}); + }); + + test('render ', async ({mount, expectScreenshot, defaultDelay}) => { + await mount(); + await defaultDelay(); + await expectScreenshot({skipTheme: 'dark'}); + }); + + test('render ', async ({mount, expectScreenshot, defaultDelay}) => { + await mount(); + await defaultDelay(); + await expectScreenshot({skipTheme: 'dark'}); + }); + + test('render ', async ({mount, expectScreenshot, defaultDelay}) => { + await mount(); + await defaultDelay(); + await expectScreenshot({skipTheme: 'dark'}); + }); + + test('render ', async ({mount, expectScreenshot, defaultDelay}) => { + await mount(); + await defaultDelay(); + await expectScreenshot({skipTheme: 'dark'}); + }); + + test('render ', async ({mount, expectScreenshot, defaultDelay}) => { + await mount(); + await defaultDelay(); + await expectScreenshot({skipTheme: 'dark'}); + }); +});