@cloud-ru/ds-accordion 1.1.7-preview-5c9b8135.0 → 1.2.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 +6 -0
- package/README.md +4 -0
- package/dist/cjs/Accordion.d.ts +2 -0
- package/dist/cjs/components/CollapseBlock/CollapseBlock.d.ts +6 -1
- package/dist/cjs/components/CollapseBlock/CollapseBlock.js +8 -4
- package/dist/esm/Accordion.d.ts +2 -0
- package/dist/esm/components/CollapseBlock/CollapseBlock.d.ts +6 -1
- package/dist/esm/components/CollapseBlock/CollapseBlock.js +8 -4
- package/dist/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +7 -7
- package/src/components/CollapseBlock/CollapseBlock.tsx +17 -3
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# 1.2.0 (2026-10-05)
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
- **FF-9218:** add stopSlotsClickPropagation prop ([0284a62](https://github.com/cloud-ru-tech/snack-v2/commit/0284a62cd9bbc2193627f627e3d366cd84dcf989))
|
|
11
|
+
|
|
6
12
|
## 1.1.6 (2026-10-02)
|
|
7
13
|
|
|
8
14
|
### Bug Fixes
|
package/README.md
CHANGED
|
@@ -315,6 +315,7 @@ export function NestedLevels() {
|
|
|
315
315
|
| `id` | `string` | — | Уникальный идентификатор блока в группе переключателей |
|
|
316
316
|
| `keepMounted` | `boolean` | `false` | Оставлять ли контент в DOM при сворачивании |
|
|
317
317
|
| `showChevron` | `boolean` | `true` | Показывать ли шеврон-раскрытия рядом с заголовком (по умолчанию `true`) |
|
|
318
|
+
| `stopSlotsClickPropagation` | `boolean` | `false` | Клики в слотах afterTitle и subTitle не тригерять расскрытие/закрытие блока |
|
|
318
319
|
| `subTitle` | `ReactNode` | — | Подзаголовок под строкой заголовка |
|
|
319
320
|
| `title` | `string` | — | Заголовок блока |
|
|
320
321
|
| `view` | `"elevated"` \| `"outline"` \| `"simple"` | `simple` | Визуальный вариант обложки (`simple`, `outline`, `elevated`) |
|
|
@@ -364,6 +365,7 @@ export function AfterTitle() {
|
|
|
364
365
|
| `id` | `string` | — | Уникальный идентификатор блока в группе переключателей |
|
|
365
366
|
| `keepMounted` | `boolean` | — | Оставлять ли контент в DOM при сворачивании |
|
|
366
367
|
| `showChevron` | `boolean` | — | Показывать ли шеврон-раскрытия рядом с заголовком (по умолчанию `true`) |
|
|
368
|
+
| `stopSlotsClickPropagation` | `boolean` | `false` | Клики в слотах afterTitle и subTitle не тригерять расскрытие/закрытие блока |
|
|
367
369
|
| `subTitle` | `ReactNode` | — | Подзаголовок под строкой заголовка |
|
|
368
370
|
| `title` | `string` | — | Заголовок блока |
|
|
369
371
|
| `view` | `"elevated"` \| `"outline"` \| `"simple"` | — | Визуальный вариант обложки (`simple`, `outline`, `elevated`) |
|
|
@@ -421,6 +423,7 @@ export function ChevronBefore() {
|
|
|
421
423
|
| `id` | `string` | — | Уникальный идентификатор блока в группе переключателей |
|
|
422
424
|
| `keepMounted` | `boolean` | — | Оставлять ли контент в DOM при сворачивании |
|
|
423
425
|
| `showChevron` | `boolean` | — | Показывать ли шеврон-раскрытия рядом с заголовком (по умолчанию `true`) |
|
|
426
|
+
| `stopSlotsClickPropagation` | `boolean` | `false` | Клики в слотах afterTitle и subTitle не тригерять расскрытие/закрытие блока |
|
|
424
427
|
| `subTitle` | `ReactNode` | — | Подзаголовок под строкой заголовка |
|
|
425
428
|
| `title` | `string` | — | Заголовок блока |
|
|
426
429
|
| `view` | `"elevated"` \| `"outline"` \| `"simple"` | — | Визуальный вариант обложки (`simple`, `outline`, `elevated`) |
|
|
@@ -476,6 +479,7 @@ export function NestedLevels() {
|
|
|
476
479
|
| `id` | `string` | — | Уникальный идентификатор блока в группе переключателей |
|
|
477
480
|
| `keepMounted` | `boolean` | — | Оставлять ли контент в DOM при сворачивании |
|
|
478
481
|
| `showChevron` | `boolean` | — | Показывать ли шеврон-раскрытия рядом с заголовком (по умолчанию `true`) |
|
|
482
|
+
| `stopSlotsClickPropagation` | `boolean` | `false` | Клики в слотах afterTitle и subTitle не тригерять расскрытие/закрытие блока |
|
|
479
483
|
| `subTitle` | `ReactNode` | — | Подзаголовок под строкой заголовка |
|
|
480
484
|
| `title` | `string` | — | Заголовок блока |
|
|
481
485
|
|
package/dist/cjs/Accordion.d.ts
CHANGED
|
@@ -87,6 +87,7 @@ export declare const Accordion: typeof AccordionBase & {
|
|
|
87
87
|
chevronPosition?: import("./types").ChevronPosition | undefined;
|
|
88
88
|
backgroundPredefined?: import("@cloud-ru/ds-materials").BackgroundPredefinedFill | undefined;
|
|
89
89
|
showChevron?: boolean | undefined;
|
|
90
|
+
stopSlotsClickPropagation?: boolean | undefined;
|
|
90
91
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
91
92
|
CollapseBlockSecondary: (props: {
|
|
92
93
|
'data-test-id'?: string | undefined;
|
|
@@ -154,6 +155,7 @@ export declare const Accordion: typeof AccordionBase & {
|
|
|
154
155
|
chevronPosition?: import("./types").ChevronPosition | undefined;
|
|
155
156
|
backgroundPredefined?: import("@cloud-ru/ds-materials").BackgroundPredefinedFill | undefined;
|
|
156
157
|
showChevron?: boolean | undefined;
|
|
158
|
+
stopSlotsClickPropagation?: boolean | undefined;
|
|
157
159
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
158
160
|
CollapseBlockTertiary: (props: import("./components/CollapseBlock").CollapseBlockTertiaryProps) => import("react/jsx-runtime").JSX.Element;
|
|
159
161
|
};
|
|
@@ -32,11 +32,16 @@ export type CollapseBlockProps = PropsWithChildren<WithSupportProps<{
|
|
|
32
32
|
component: Component;
|
|
33
33
|
/** Оставлять ли контент в DOM при сворачивании */
|
|
34
34
|
keepMounted?: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Клики в слотах afterTitle и subTitle не тригерять расскрытие/закрытие блока
|
|
37
|
+
* @default false
|
|
38
|
+
*/
|
|
39
|
+
stopSlotsClickPropagation?: boolean;
|
|
35
40
|
}>>;
|
|
36
41
|
/**
|
|
37
42
|
* Элемент аккордеона: заголовок, шеврон и раскрываемая область с контентом.
|
|
38
43
|
*/
|
|
39
|
-
export declare function CollapseBlock({ id, title, afterTitle, subTitle, children, className, view, chevronPosition, backgroundPredefined, keepMounted, component, showChevron, 'data-test-id': dataTestId, ...rest }: CollapseBlockProps): import("react/jsx-runtime").JSX.Element;
|
|
44
|
+
export declare function CollapseBlock({ id, title, afterTitle, subTitle, children, className, view, chevronPosition, backgroundPredefined, keepMounted, component, showChevron, stopSlotsClickPropagation, 'data-test-id': dataTestId, ...rest }: CollapseBlockProps): import("react/jsx-runtime").JSX.Element;
|
|
40
45
|
export type CollapseBlockComponent = CollapseBlockProps['component'];
|
|
41
46
|
type CollapseBlockPropsWithoutComponent = Omit<CollapseBlockProps, 'component'>;
|
|
42
47
|
export type CollapseBlockPrimaryProps = CollapseBlockPropsWithoutComponent;
|
|
@@ -16,7 +16,11 @@ const constants_1 = require("../../constants");
|
|
|
16
16
|
const helperComponents_1 = require("../../helperComponents");
|
|
17
17
|
const hooks_1 = require("./hooks");
|
|
18
18
|
const styles_module_scss_1 = __importDefault(require('./styles.module.css'));
|
|
19
|
-
const
|
|
19
|
+
const getStopPropagationHandler = (stopPropagation) => (e) => {
|
|
20
|
+
if (stopPropagation) {
|
|
21
|
+
e.stopPropagation();
|
|
22
|
+
}
|
|
23
|
+
};
|
|
20
24
|
const MAP_COMPONENT_TO_TILE_SIZE = {
|
|
21
25
|
accordionPrimary: 'l',
|
|
22
26
|
accordionSecondary: 'm',
|
|
@@ -25,7 +29,7 @@ const MAP_COMPONENT_TO_TILE_SIZE = {
|
|
|
25
29
|
/**
|
|
26
30
|
* Элемент аккордеона: заголовок, шеврон и раскрываемая область с контентом.
|
|
27
31
|
*/
|
|
28
|
-
function CollapseBlock({ id, title, afterTitle, subTitle, children, className, view = constants_1.VIEW.Simple, chevronPosition = constants_1.CHEVRON_POSITION.After, backgroundPredefined = materials_1.BACKGROUND_PREDEFINED_FILL.NeutralBackground1Level, keepMounted = false, component, showChevron = true, 'data-test-id': dataTestId, ...rest }) {
|
|
32
|
+
function CollapseBlock({ id, title, afterTitle, subTitle, children, className, view = constants_1.VIEW.Simple, chevronPosition = constants_1.CHEVRON_POSITION.After, backgroundPredefined = materials_1.BACKGROUND_PREDEFINED_FILL.NeutralBackground1Level, keepMounted = false, component, showChevron = true, stopSlotsClickPropagation = false, 'data-test-id': dataTestId, ...rest }) {
|
|
29
33
|
const { isOpen, isMounted, toggleOpen, isCompletelyOpen, isCompletelyClose } = (0, hooks_1.useCollapseState)({
|
|
30
34
|
id,
|
|
31
35
|
keepMounted,
|
|
@@ -39,9 +43,9 @@ function CollapseBlock({ id, title, afterTitle, subTitle, children, className, v
|
|
|
39
43
|
'--sn-collapse-block-animation-duration': `${constants_1.ANIMATION_DURATION}ms`,
|
|
40
44
|
}, children: [component !== 'accordionTertiary' && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.acrylic }), view === constants_1.VIEW.Outline && (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.stateLayer, "data-state": 'borderOnBackground' })] })), (0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.titleContent, "data-expanded": isOpen || undefined, "data-completely-close": isCompletelyClose || undefined, "data-chevron-position": chevronPosition, onClick: toggleOpen, children: [(0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.titleWrapper, children: [(0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.titleLine, children: [title && ((0, jsx_runtime_1.jsx)(typography_1.Typography, { size: MAP_COMPONENT_TO_TILE_SIZE[component], variant: 'title', className: styles_module_scss_1.default.title, id: titleId, "data-test-id": constants_1.TEST_IDS.title, children: (0, jsx_runtime_1.jsx)(truncate_string_1.TruncateString, { text: title, variant: 'end' }) })), afterTitle && (
|
|
41
45
|
/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */
|
|
42
|
-
(0, jsx_runtime_1.jsx)("div", { id: afterTitleId, "data-test-id": constants_1.TEST_IDS.afterTitle, className: styles_module_scss_1.default.afterTitle, onClick:
|
|
46
|
+
(0, jsx_runtime_1.jsx)("div", { id: afterTitleId, "data-test-id": constants_1.TEST_IDS.afterTitle, className: styles_module_scss_1.default.afterTitle, onClick: getStopPropagationHandler(stopSlotsClickPropagation), children: afterTitle }))] }), subTitle && (
|
|
43
47
|
/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */
|
|
44
|
-
(0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.subTitle, "data-test-id": constants_1.TEST_IDS.subTitle, onClick:
|
|
48
|
+
(0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.subTitle, "data-test-id": constants_1.TEST_IDS.subTitle, onClick: getStopPropagationHandler(stopSlotsClickPropagation), children: subTitle }))] }), showChevron && ((0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.chevronWrapper, children: (0, jsx_runtime_1.jsx)(helperComponents_1.ChevronButton, { expanded: isOpen, contentId: contentId, labelledBy: chevronLabelledBy, "data-test-id": constants_1.TEST_IDS.chevron }) }))] }), (0, jsx_runtime_1.jsx)("div", { id: contentId, className: styles_module_scss_1.default.collapse, "data-expanded": isOpen || undefined, "aria-hidden": !isOpen, children: (0, jsx_runtime_1.jsxs)("div", { className: (0, classnames_1.default)(styles_module_scss_1.default.container, isCompletelyOpen && styles_module_scss_1.default.containerCompletelyOpen), "data-completely-close": isCompletelyClose || undefined, "data-expanded": isOpen || undefined, children: [(0, jsx_runtime_1.jsx)("div", {}), isMounted ? (0, jsx_runtime_1.jsx)("div", { "data-test-id": constants_1.TEST_IDS.content, children: children }) : null] }) })] }));
|
|
45
49
|
}
|
|
46
50
|
function getCollapseBlock(component) {
|
|
47
51
|
return function CollapseBlockWithComponent(props) {
|
package/dist/esm/Accordion.d.ts
CHANGED
|
@@ -87,6 +87,7 @@ export declare const Accordion: typeof AccordionBase & {
|
|
|
87
87
|
chevronPosition?: import("./types").ChevronPosition | undefined;
|
|
88
88
|
backgroundPredefined?: import("@cloud-ru/ds-materials").BackgroundPredefinedFill | undefined;
|
|
89
89
|
showChevron?: boolean | undefined;
|
|
90
|
+
stopSlotsClickPropagation?: boolean | undefined;
|
|
90
91
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
91
92
|
CollapseBlockSecondary: (props: {
|
|
92
93
|
'data-test-id'?: string | undefined;
|
|
@@ -154,6 +155,7 @@ export declare const Accordion: typeof AccordionBase & {
|
|
|
154
155
|
chevronPosition?: import("./types").ChevronPosition | undefined;
|
|
155
156
|
backgroundPredefined?: import("@cloud-ru/ds-materials").BackgroundPredefinedFill | undefined;
|
|
156
157
|
showChevron?: boolean | undefined;
|
|
158
|
+
stopSlotsClickPropagation?: boolean | undefined;
|
|
157
159
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
158
160
|
CollapseBlockTertiary: (props: import("./components").CollapseBlockTertiaryProps) => import("react/jsx-runtime").JSX.Element;
|
|
159
161
|
};
|
|
@@ -32,11 +32,16 @@ export type CollapseBlockProps = PropsWithChildren<WithSupportProps<{
|
|
|
32
32
|
component: Component;
|
|
33
33
|
/** Оставлять ли контент в DOM при сворачивании */
|
|
34
34
|
keepMounted?: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Клики в слотах afterTitle и subTitle не тригерять расскрытие/закрытие блока
|
|
37
|
+
* @default false
|
|
38
|
+
*/
|
|
39
|
+
stopSlotsClickPropagation?: boolean;
|
|
35
40
|
}>>;
|
|
36
41
|
/**
|
|
37
42
|
* Элемент аккордеона: заголовок, шеврон и раскрываемая область с контентом.
|
|
38
43
|
*/
|
|
39
|
-
export declare function CollapseBlock({ id, title, afterTitle, subTitle, children, className, view, chevronPosition, backgroundPredefined, keepMounted, component, showChevron, 'data-test-id': dataTestId, ...rest }: CollapseBlockProps): import("react/jsx-runtime").JSX.Element;
|
|
44
|
+
export declare function CollapseBlock({ id, title, afterTitle, subTitle, children, className, view, chevronPosition, backgroundPredefined, keepMounted, component, showChevron, stopSlotsClickPropagation, 'data-test-id': dataTestId, ...rest }: CollapseBlockProps): import("react/jsx-runtime").JSX.Element;
|
|
40
45
|
export type CollapseBlockComponent = CollapseBlockProps['component'];
|
|
41
46
|
type CollapseBlockPropsWithoutComponent = Omit<CollapseBlockProps, 'component'>;
|
|
42
47
|
export type CollapseBlockPrimaryProps = CollapseBlockPropsWithoutComponent;
|
|
@@ -9,7 +9,11 @@ import { ANIMATION_DURATION, CHEVRON_POSITION, TEST_IDS, VIEW } from '../../cons
|
|
|
9
9
|
import { ChevronButton } from '../../helperComponents/index.js';
|
|
10
10
|
import { useCollapseState } from './hooks.js';
|
|
11
11
|
import styles from './styles.module.css';
|
|
12
|
-
const
|
|
12
|
+
const getStopPropagationHandler = (stopPropagation) => (e) => {
|
|
13
|
+
if (stopPropagation) {
|
|
14
|
+
e.stopPropagation();
|
|
15
|
+
}
|
|
16
|
+
};
|
|
13
17
|
const MAP_COMPONENT_TO_TILE_SIZE = {
|
|
14
18
|
accordionPrimary: 'l',
|
|
15
19
|
accordionSecondary: 'm',
|
|
@@ -18,7 +22,7 @@ const MAP_COMPONENT_TO_TILE_SIZE = {
|
|
|
18
22
|
/**
|
|
19
23
|
* Элемент аккордеона: заголовок, шеврон и раскрываемая область с контентом.
|
|
20
24
|
*/
|
|
21
|
-
export function CollapseBlock({ id, title, afterTitle, subTitle, children, className, view = VIEW.Simple, chevronPosition = CHEVRON_POSITION.After, backgroundPredefined = BACKGROUND_PREDEFINED_FILL.NeutralBackground1Level, keepMounted = false, component, showChevron = true, 'data-test-id': dataTestId, ...rest }) {
|
|
25
|
+
export function CollapseBlock({ id, title, afterTitle, subTitle, children, className, view = VIEW.Simple, chevronPosition = CHEVRON_POSITION.After, backgroundPredefined = BACKGROUND_PREDEFINED_FILL.NeutralBackground1Level, keepMounted = false, component, showChevron = true, stopSlotsClickPropagation = false, 'data-test-id': dataTestId, ...rest }) {
|
|
22
26
|
const { isOpen, isMounted, toggleOpen, isCompletelyOpen, isCompletelyClose } = useCollapseState({
|
|
23
27
|
id,
|
|
24
28
|
keepMounted,
|
|
@@ -32,9 +36,9 @@ export function CollapseBlock({ id, title, afterTitle, subTitle, children, class
|
|
|
32
36
|
'--sn-collapse-block-animation-duration': `${ANIMATION_DURATION}ms`,
|
|
33
37
|
}, children: [component !== 'accordionTertiary' && (_jsxs(_Fragment, { children: [_jsx("div", { className: styles.acrylic }), view === VIEW.Outline && _jsx("div", { className: styles.stateLayer, "data-state": 'borderOnBackground' })] })), _jsxs("div", { className: styles.titleContent, "data-expanded": isOpen || undefined, "data-completely-close": isCompletelyClose || undefined, "data-chevron-position": chevronPosition, onClick: toggleOpen, children: [_jsxs("div", { className: styles.titleWrapper, children: [_jsxs("div", { className: styles.titleLine, children: [title && (_jsx(Typography, { size: MAP_COMPONENT_TO_TILE_SIZE[component], variant: 'title', className: styles.title, id: titleId, "data-test-id": TEST_IDS.title, children: _jsx(TruncateString, { text: title, variant: 'end' }) })), afterTitle && (
|
|
34
38
|
/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */
|
|
35
|
-
_jsx("div", { id: afterTitleId, "data-test-id": TEST_IDS.afterTitle, className: styles.afterTitle, onClick:
|
|
39
|
+
_jsx("div", { id: afterTitleId, "data-test-id": TEST_IDS.afterTitle, className: styles.afterTitle, onClick: getStopPropagationHandler(stopSlotsClickPropagation), children: afterTitle }))] }), subTitle && (
|
|
36
40
|
/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */
|
|
37
|
-
_jsx("div", { className: styles.subTitle, "data-test-id": TEST_IDS.subTitle, onClick:
|
|
41
|
+
_jsx("div", { className: styles.subTitle, "data-test-id": TEST_IDS.subTitle, onClick: getStopPropagationHandler(stopSlotsClickPropagation), children: subTitle }))] }), showChevron && (_jsx("div", { className: styles.chevronWrapper, children: _jsx(ChevronButton, { expanded: isOpen, contentId: contentId, labelledBy: chevronLabelledBy, "data-test-id": TEST_IDS.chevron }) }))] }), _jsx("div", { id: contentId, className: styles.collapse, "data-expanded": isOpen || undefined, "aria-hidden": !isOpen, children: _jsxs("div", { className: cn(styles.container, isCompletelyOpen && styles.containerCompletelyOpen), "data-completely-close": isCompletelyClose || undefined, "data-expanded": isOpen || undefined, children: [_jsx("div", {}), isMounted ? _jsx("div", { "data-test-id": TEST_IDS.content, children: children }) : null] }) })] }));
|
|
38
42
|
}
|
|
39
43
|
function getCollapseBlock(component) {
|
|
40
44
|
return function CollapseBlockWithComponent(props) {
|