@snack-uikit/accordion 0.3.4-preview-85c5f47b.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +104 -0
- package/LICENSE +201 -0
- package/README.md +57 -0
- package/dist/components/AccordionPrimary/AccordionPrimary.d.ts +5 -0
- package/dist/components/AccordionPrimary/AccordionPrimary.js +21 -0
- package/dist/components/AccordionPrimary/index.d.ts +1 -0
- package/dist/components/AccordionPrimary/index.js +1 -0
- package/dist/components/AccordionPrimary/styles.module.css +7 -0
- package/dist/components/AccordionSecondary/AccordionSecondary.d.ts +5 -0
- package/dist/components/AccordionSecondary/AccordionSecondary.js +21 -0
- package/dist/components/AccordionSecondary/index.d.ts +1 -0
- package/dist/components/AccordionSecondary/index.js +1 -0
- package/dist/components/AccordionSecondary/styles.module.css +7 -0
- package/dist/components/CollapseBlockPrimary/CollapseBlockPrimary.d.ts +2 -0
- package/dist/components/CollapseBlockPrimary/CollapseBlockPrimary.js +22 -0
- package/dist/components/CollapseBlockPrimary/index.d.ts +1 -0
- package/dist/components/CollapseBlockPrimary/index.js +1 -0
- package/dist/components/CollapseBlockPrimary/styles.module.css +14 -0
- package/dist/components/CollapseBlockSecondary/CollapseBlockSecondary.d.ts +2 -0
- package/dist/components/CollapseBlockSecondary/CollapseBlockSecondary.js +22 -0
- package/dist/components/CollapseBlockSecondary/index.d.ts +1 -0
- package/dist/components/CollapseBlockSecondary/index.js +1 -0
- package/dist/components/CollapseBlockSecondary/styles.module.css +18 -0
- package/dist/components/index.d.ts +13 -0
- package/dist/components/index.js +11 -0
- package/dist/helperComponents/Accordion/Accordion.d.ts +2 -0
- package/dist/helperComponents/Accordion/Accordion.js +21 -0
- package/dist/helperComponents/Accordion/index.d.ts +1 -0
- package/dist/helperComponents/Accordion/index.js +1 -0
- package/dist/helperComponents/CollapseBlockHeader/CollapseBlockHeader.d.ts +8 -0
- package/dist/helperComponents/CollapseBlockHeader/CollapseBlockHeader.js +9 -0
- package/dist/helperComponents/CollapseBlockHeader/index.d.ts +1 -0
- package/dist/helperComponents/CollapseBlockHeader/index.js +1 -0
- package/dist/helperComponents/CollapseBlockHeader/styles.module.css +16 -0
- package/dist/helperComponents/CollapseBlockHeaderContainer/CollapseBlockHeaderContainer.d.ts +8 -0
- package/dist/helperComponents/CollapseBlockHeaderContainer/CollapseBlockHeaderContainer.js +21 -0
- package/dist/helperComponents/CollapseBlockHeaderContainer/index.d.ts +1 -0
- package/dist/helperComponents/CollapseBlockHeaderContainer/index.js +1 -0
- package/dist/helperComponents/CollapseBlockHeaderContainer/styles.module.css +31 -0
- package/dist/helperComponents/CollapseBlockPrivate/CollapseBlockPrivate.d.ts +9 -0
- package/dist/helperComponents/CollapseBlockPrivate/CollapseBlockPrivate.js +22 -0
- package/dist/helperComponents/CollapseBlockPrivate/index.d.ts +1 -0
- package/dist/helperComponents/CollapseBlockPrivate/index.js +1 -0
- package/dist/helperComponents/CollapseBlockPrivate/styles.module.css +38 -0
- package/dist/helperComponents/index.d.ts +4 -0
- package/dist/helperComponents/index.js +4 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/testIds.d.ts +11 -0
- package/dist/testIds.js +11 -0
- package/dist/types.d.ts +39 -0
- package/dist/types.js +1 -0
- package/package.json +45 -0
- package/src/components/AccordionPrimary/AccordionPrimary.tsx +13 -0
- package/src/components/AccordionPrimary/index.ts +1 -0
- package/src/components/AccordionPrimary/styles.module.scss +11 -0
- package/src/components/AccordionSecondary/AccordionSecondary.tsx +13 -0
- package/src/components/AccordionSecondary/index.ts +1 -0
- package/src/components/AccordionSecondary/styles.module.scss +11 -0
- package/src/components/CollapseBlockPrimary/CollapseBlockPrimary.tsx +27 -0
- package/src/components/CollapseBlockPrimary/index.ts +1 -0
- package/src/components/CollapseBlockPrimary/styles.module.scss +14 -0
- package/src/components/CollapseBlockSecondary/CollapseBlockSecondary.tsx +27 -0
- package/src/components/CollapseBlockSecondary/index.ts +1 -0
- package/src/components/CollapseBlockSecondary/styles.module.scss +18 -0
- package/src/components/index.ts +21 -0
- package/src/helperComponents/Accordion/Accordion.tsx +29 -0
- package/src/helperComponents/Accordion/index.ts +1 -0
- package/src/helperComponents/CollapseBlockHeader/CollapseBlockHeader.tsx +35 -0
- package/src/helperComponents/CollapseBlockHeader/index.ts +1 -0
- package/src/helperComponents/CollapseBlockHeader/styles.module.scss +19 -0
- package/src/helperComponents/CollapseBlockHeaderContainer/CollapseBlockHeaderContainer.tsx +56 -0
- package/src/helperComponents/CollapseBlockHeaderContainer/index.ts +1 -0
- package/src/helperComponents/CollapseBlockHeaderContainer/styles.module.scss +47 -0
- package/src/helperComponents/CollapseBlockPrivate/CollapseBlockPrivate.tsx +34 -0
- package/src/helperComponents/CollapseBlockPrivate/index.ts +1 -0
- package/src/helperComponents/CollapseBlockPrivate/styles.module.scss +50 -0
- package/src/helperComponents/index.ts +4 -0
- package/src/index.ts +2 -0
- package/src/testIds.ts +11 -0
- package/src/types.ts +46 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
@import '@snack-uikit/figma-tokens/build/scss/components/styles-tokens-accordion';
|
|
2
|
+
|
|
3
|
+
.button {
|
|
4
|
+
&[data-expanded] {
|
|
5
|
+
svg {
|
|
6
|
+
transform: rotate(180deg);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.header {
|
|
12
|
+
@include composite-var($collapse-block-container-header-container);
|
|
13
|
+
|
|
14
|
+
cursor: pointer;
|
|
15
|
+
|
|
16
|
+
display: flex;
|
|
17
|
+
align-items: flex-start;
|
|
18
|
+
justify-content: space-between;
|
|
19
|
+
|
|
20
|
+
margin: calc(0px - var(--accordion-header-padding-vertical, 0px)) calc(0px - var(--accordion-header-padding-horizontal, 0px));
|
|
21
|
+
padding: var(--accordion-header-padding-vertical, 0px) var(--accordion-header-padding-horizontal, 0px);
|
|
22
|
+
|
|
23
|
+
> * {
|
|
24
|
+
cursor: pointer;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
&:hover {
|
|
28
|
+
.button {
|
|
29
|
+
span {
|
|
30
|
+
color: $sys-neutral-accent-hovered;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.text {
|
|
37
|
+
display: flex;
|
|
38
|
+
flex-direction: column;
|
|
39
|
+
max-width: calc(100% - var(--width, 0px) - $space-accordion-collapse-block-title-gap);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.functionLayout {
|
|
43
|
+
@include composite-var($collapse-block-container-header-function-layout);
|
|
44
|
+
|
|
45
|
+
display: flex;
|
|
46
|
+
flex-shrink: 0;
|
|
47
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import cn from 'classnames';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
import { extractSupportProps, WithSupportProps } from '@snack-uikit/utils';
|
|
5
|
+
|
|
6
|
+
import { TEST_IDS } from '../../testIds';
|
|
7
|
+
import styles from './styles.module.scss';
|
|
8
|
+
|
|
9
|
+
export type CollapseBlockPrivateProps = WithSupportProps<{
|
|
10
|
+
children: ReactNode;
|
|
11
|
+
header: ReactNode;
|
|
12
|
+
expanded: boolean;
|
|
13
|
+
className?: string;
|
|
14
|
+
}>;
|
|
15
|
+
|
|
16
|
+
export function CollapseBlockPrivate({ children, expanded, className, header, ...rest }: CollapseBlockPrivateProps) {
|
|
17
|
+
return (
|
|
18
|
+
<div
|
|
19
|
+
className={cn(styles.accordion, className)}
|
|
20
|
+
// eslint-disable-next-line jsx-a11y/aria-role
|
|
21
|
+
role='accordion'
|
|
22
|
+
aria-expanded={expanded}
|
|
23
|
+
{...extractSupportProps(rest)}
|
|
24
|
+
>
|
|
25
|
+
{header}
|
|
26
|
+
|
|
27
|
+
<div className={styles.contentWrapper} aria-hidden={!expanded} data-test-id={TEST_IDS.content}>
|
|
28
|
+
<div className={styles.content} data-content>
|
|
29
|
+
{children}
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
);
|
|
34
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './CollapseBlockPrivate';
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
$duration: 300ms;
|
|
2
|
+
|
|
3
|
+
.accordion {
|
|
4
|
+
display: flex;
|
|
5
|
+
flex-direction: column;
|
|
6
|
+
box-sizing: border-box;
|
|
7
|
+
transition: gap $duration;
|
|
8
|
+
|
|
9
|
+
&::-webkit-scrollbar {
|
|
10
|
+
width: 0;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
&[aria-expanded='false'] {
|
|
14
|
+
gap: 0
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.contentWrapper {
|
|
19
|
+
display: grid;
|
|
20
|
+
grid-template-rows: 0fr;
|
|
21
|
+
|
|
22
|
+
box-sizing: border-box;
|
|
23
|
+
width: 100%;
|
|
24
|
+
|
|
25
|
+
transition: grid-template-rows $duration;
|
|
26
|
+
|
|
27
|
+
&[aria-hidden='true'] {
|
|
28
|
+
overflow: hidden;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
&[aria-hidden='false'] {
|
|
32
|
+
grid-template-rows: 1fr;
|
|
33
|
+
|
|
34
|
+
>div[data-content] {
|
|
35
|
+
visibility: visible;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.content {
|
|
41
|
+
overflow: hidden;
|
|
42
|
+
|
|
43
|
+
box-sizing: border-box;
|
|
44
|
+
width: 100%;
|
|
45
|
+
min-height: 0;
|
|
46
|
+
|
|
47
|
+
visibility: hidden;
|
|
48
|
+
|
|
49
|
+
transition: visibility $duration;
|
|
50
|
+
}
|
package/src/index.ts
ADDED
package/src/testIds.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export const TEST_IDS = {
|
|
2
|
+
accordion: 'accordion',
|
|
3
|
+
tooltip: 'accordion__collapse-block__tooltip',
|
|
4
|
+
chevron: 'accordion__collapse-block__chevron',
|
|
5
|
+
title: 'accordion__collapse-block__title',
|
|
6
|
+
description: 'accordion__collapse-block__description',
|
|
7
|
+
content: 'accordion__collapse-block__content',
|
|
8
|
+
collapseBlock: 'accordion__collapse-block',
|
|
9
|
+
header: 'accordion__collapse-block__header',
|
|
10
|
+
actions: 'accordion__collapse-block__actions',
|
|
11
|
+
};
|
package/src/types.ts
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { ReactElement, ReactNode } from 'react';
|
|
2
|
+
|
|
3
|
+
import { ToggleGroup } from '@snack-uikit/toggles';
|
|
4
|
+
import { WithSupportProps } from '@snack-uikit/utils';
|
|
5
|
+
|
|
6
|
+
export type CollapseBlockProps = WithSupportProps<{
|
|
7
|
+
/** Уникальный id блока */
|
|
8
|
+
id: string;
|
|
9
|
+
/** Заголовок */
|
|
10
|
+
header: ReactNode;
|
|
11
|
+
/** Дополнительные действия */
|
|
12
|
+
actions?: ReactNode;
|
|
13
|
+
/** Вложенный контент */
|
|
14
|
+
children: ReactNode;
|
|
15
|
+
/** CSS-класс */
|
|
16
|
+
className?: string;
|
|
17
|
+
}>;
|
|
18
|
+
|
|
19
|
+
export type AccordionProps = WithSupportProps<{
|
|
20
|
+
/** Вложенный контент */
|
|
21
|
+
children: ReactElement<CollapseBlockProps> | ReactElement<CollapseBlockProps>[];
|
|
22
|
+
/** CSS-класс */
|
|
23
|
+
className?: string;
|
|
24
|
+
}> &
|
|
25
|
+
(
|
|
26
|
+
| {
|
|
27
|
+
/** Начальное состояние */
|
|
28
|
+
expandedDefault?: string;
|
|
29
|
+
/** Controlled состояние */
|
|
30
|
+
expanded?: string;
|
|
31
|
+
/** Controlled обработчик измения состояния */
|
|
32
|
+
onExpandedChange?(value: (string | undefined) | string): void;
|
|
33
|
+
/** Режим работы аккордиона */
|
|
34
|
+
selectionMode?: typeof ToggleGroup.selectionModes.Single;
|
|
35
|
+
}
|
|
36
|
+
| {
|
|
37
|
+
/** Начальное состояние */
|
|
38
|
+
expandedDefault?: string[];
|
|
39
|
+
/** Controlled состояние */
|
|
40
|
+
expanded?: string[];
|
|
41
|
+
/** Controlled обработчик измения состояния */
|
|
42
|
+
onExpandedChange?(value: (string[] | undefined) | string[]): void;
|
|
43
|
+
/** Режим работы аккордиона */
|
|
44
|
+
selectionMode: typeof ToggleGroup.selectionModes.Multiple;
|
|
45
|
+
}
|
|
46
|
+
);
|