@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.
Files changed (81) hide show
  1. package/CHANGELOG.md +104 -0
  2. package/LICENSE +201 -0
  3. package/README.md +57 -0
  4. package/dist/components/AccordionPrimary/AccordionPrimary.d.ts +5 -0
  5. package/dist/components/AccordionPrimary/AccordionPrimary.js +21 -0
  6. package/dist/components/AccordionPrimary/index.d.ts +1 -0
  7. package/dist/components/AccordionPrimary/index.js +1 -0
  8. package/dist/components/AccordionPrimary/styles.module.css +7 -0
  9. package/dist/components/AccordionSecondary/AccordionSecondary.d.ts +5 -0
  10. package/dist/components/AccordionSecondary/AccordionSecondary.js +21 -0
  11. package/dist/components/AccordionSecondary/index.d.ts +1 -0
  12. package/dist/components/AccordionSecondary/index.js +1 -0
  13. package/dist/components/AccordionSecondary/styles.module.css +7 -0
  14. package/dist/components/CollapseBlockPrimary/CollapseBlockPrimary.d.ts +2 -0
  15. package/dist/components/CollapseBlockPrimary/CollapseBlockPrimary.js +22 -0
  16. package/dist/components/CollapseBlockPrimary/index.d.ts +1 -0
  17. package/dist/components/CollapseBlockPrimary/index.js +1 -0
  18. package/dist/components/CollapseBlockPrimary/styles.module.css +14 -0
  19. package/dist/components/CollapseBlockSecondary/CollapseBlockSecondary.d.ts +2 -0
  20. package/dist/components/CollapseBlockSecondary/CollapseBlockSecondary.js +22 -0
  21. package/dist/components/CollapseBlockSecondary/index.d.ts +1 -0
  22. package/dist/components/CollapseBlockSecondary/index.js +1 -0
  23. package/dist/components/CollapseBlockSecondary/styles.module.css +18 -0
  24. package/dist/components/index.d.ts +13 -0
  25. package/dist/components/index.js +11 -0
  26. package/dist/helperComponents/Accordion/Accordion.d.ts +2 -0
  27. package/dist/helperComponents/Accordion/Accordion.js +21 -0
  28. package/dist/helperComponents/Accordion/index.d.ts +1 -0
  29. package/dist/helperComponents/Accordion/index.js +1 -0
  30. package/dist/helperComponents/CollapseBlockHeader/CollapseBlockHeader.d.ts +8 -0
  31. package/dist/helperComponents/CollapseBlockHeader/CollapseBlockHeader.js +9 -0
  32. package/dist/helperComponents/CollapseBlockHeader/index.d.ts +1 -0
  33. package/dist/helperComponents/CollapseBlockHeader/index.js +1 -0
  34. package/dist/helperComponents/CollapseBlockHeader/styles.module.css +16 -0
  35. package/dist/helperComponents/CollapseBlockHeaderContainer/CollapseBlockHeaderContainer.d.ts +8 -0
  36. package/dist/helperComponents/CollapseBlockHeaderContainer/CollapseBlockHeaderContainer.js +21 -0
  37. package/dist/helperComponents/CollapseBlockHeaderContainer/index.d.ts +1 -0
  38. package/dist/helperComponents/CollapseBlockHeaderContainer/index.js +1 -0
  39. package/dist/helperComponents/CollapseBlockHeaderContainer/styles.module.css +31 -0
  40. package/dist/helperComponents/CollapseBlockPrivate/CollapseBlockPrivate.d.ts +9 -0
  41. package/dist/helperComponents/CollapseBlockPrivate/CollapseBlockPrivate.js +22 -0
  42. package/dist/helperComponents/CollapseBlockPrivate/index.d.ts +1 -0
  43. package/dist/helperComponents/CollapseBlockPrivate/index.js +1 -0
  44. package/dist/helperComponents/CollapseBlockPrivate/styles.module.css +38 -0
  45. package/dist/helperComponents/index.d.ts +4 -0
  46. package/dist/helperComponents/index.js +4 -0
  47. package/dist/index.d.ts +2 -0
  48. package/dist/index.js +2 -0
  49. package/dist/testIds.d.ts +11 -0
  50. package/dist/testIds.js +11 -0
  51. package/dist/types.d.ts +39 -0
  52. package/dist/types.js +1 -0
  53. package/package.json +45 -0
  54. package/src/components/AccordionPrimary/AccordionPrimary.tsx +13 -0
  55. package/src/components/AccordionPrimary/index.ts +1 -0
  56. package/src/components/AccordionPrimary/styles.module.scss +11 -0
  57. package/src/components/AccordionSecondary/AccordionSecondary.tsx +13 -0
  58. package/src/components/AccordionSecondary/index.ts +1 -0
  59. package/src/components/AccordionSecondary/styles.module.scss +11 -0
  60. package/src/components/CollapseBlockPrimary/CollapseBlockPrimary.tsx +27 -0
  61. package/src/components/CollapseBlockPrimary/index.ts +1 -0
  62. package/src/components/CollapseBlockPrimary/styles.module.scss +14 -0
  63. package/src/components/CollapseBlockSecondary/CollapseBlockSecondary.tsx +27 -0
  64. package/src/components/CollapseBlockSecondary/index.ts +1 -0
  65. package/src/components/CollapseBlockSecondary/styles.module.scss +18 -0
  66. package/src/components/index.ts +21 -0
  67. package/src/helperComponents/Accordion/Accordion.tsx +29 -0
  68. package/src/helperComponents/Accordion/index.ts +1 -0
  69. package/src/helperComponents/CollapseBlockHeader/CollapseBlockHeader.tsx +35 -0
  70. package/src/helperComponents/CollapseBlockHeader/index.ts +1 -0
  71. package/src/helperComponents/CollapseBlockHeader/styles.module.scss +19 -0
  72. package/src/helperComponents/CollapseBlockHeaderContainer/CollapseBlockHeaderContainer.tsx +56 -0
  73. package/src/helperComponents/CollapseBlockHeaderContainer/index.ts +1 -0
  74. package/src/helperComponents/CollapseBlockHeaderContainer/styles.module.scss +47 -0
  75. package/src/helperComponents/CollapseBlockPrivate/CollapseBlockPrivate.tsx +34 -0
  76. package/src/helperComponents/CollapseBlockPrivate/index.ts +1 -0
  77. package/src/helperComponents/CollapseBlockPrivate/styles.module.scss +50 -0
  78. package/src/helperComponents/index.ts +4 -0
  79. package/src/index.ts +2 -0
  80. package/src/testIds.ts +11 -0
  81. 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
+ }
@@ -0,0 +1,4 @@
1
+ export * from './CollapseBlockPrivate';
2
+ export * from './CollapseBlockHeader';
3
+ export * from './Accordion';
4
+ export * from './CollapseBlockHeaderContainer';
package/src/index.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from './components';
2
+ export * from './types';
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
+ );