@vkontakte/vkui 8.0.0 → 8.0.1
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/dist/components/CellButton/CellButton.d.ts +67 -4
- package/dist/components/CellButton/CellButton.d.ts.map +1 -1
- package/dist/components/CellButton/CellButton.js +115 -6
- package/dist/components/CellButton/CellButton.js.map +1 -1
- package/dist/components/Clickable/useState.js +3 -2
- package/dist/components/Clickable/useState.js.map +1 -1
- package/dist/components/Flex/Flex.d.ts +0 -4
- package/dist/components/Flex/Flex.d.ts.map +1 -1
- package/dist/components/Flex/Flex.js +2 -9
- package/dist/components/Flex/Flex.js.map +1 -1
- package/dist/components/Flex/FlexItem/FlexItem.d.ts +4 -11
- package/dist/components/Flex/FlexItem/FlexItem.d.ts.map +1 -1
- package/dist/components/Flex/FlexItem/FlexItem.js +5 -14
- package/dist/components/Flex/FlexItem/FlexItem.js.map +1 -1
- package/dist/components/FormItem/FormItemTop/FormItemTopAside.d.ts +1 -1
- package/dist/components/FormItem/FormItemTop/FormItemTopAside.d.ts.map +1 -1
- package/dist/components/FormItem/FormItemTop/FormItemTopAside.js +3 -2
- package/dist/components/FormItem/FormItemTop/FormItemTopAside.js.map +1 -1
- package/dist/components/FormItem/FormItemTop/FormItemTopLabel.d.ts +1 -1
- package/dist/components/FormItem/FormItemTop/FormItemTopLabel.d.ts.map +1 -1
- package/dist/components/FormItem/FormItemTop/FormItemTopLabel.js +2 -2
- package/dist/components/FormItem/FormItemTop/FormItemTopLabel.js.map +1 -1
- package/dist/components/Input/Input.d.ts +2 -2
- package/dist/components/Input/Input.d.ts.map +1 -1
- package/dist/components/Input/Input.js +2 -1
- package/dist/components/Input/Input.js.map +1 -1
- package/dist/components/Search/Search.d.ts +2 -2
- package/dist/components/Search/Search.d.ts.map +1 -1
- package/dist/components/Search/Search.js +2 -1
- package/dist/components/Search/Search.js.map +1 -1
- package/dist/components.css +1 -1
- package/dist/components.css.map +1 -1
- package/dist/cssm/components/CellButton/CellButton.js +115 -7
- package/dist/cssm/components/CellButton/CellButton.js.map +1 -1
- package/dist/cssm/components/CellButton/CellButton.module.css +165 -7
- package/dist/cssm/components/Clickable/useState.js +3 -2
- package/dist/cssm/components/Clickable/useState.js.map +1 -1
- package/dist/cssm/components/Flex/Flex.js +2 -10
- package/dist/cssm/components/Flex/Flex.js.map +1 -1
- package/dist/cssm/components/Flex/FlexItem/FlexItem.js +5 -14
- package/dist/cssm/components/Flex/FlexItem/FlexItem.js.map +1 -1
- package/dist/cssm/components/Flex/FlexItem/FlexItem.module.css +0 -22
- package/dist/cssm/components/FormItem/FormItemTop/FormItemTopAside.js +3 -2
- package/dist/cssm/components/FormItem/FormItemTop/FormItemTopAside.js.map +1 -1
- package/dist/cssm/components/FormItem/FormItemTop/FormItemTopLabel.js +2 -2
- package/dist/cssm/components/FormItem/FormItemTop/FormItemTopLabel.js.map +1 -1
- package/dist/cssm/components/Input/Input.js +2 -1
- package/dist/cssm/components/Input/Input.js.map +1 -1
- package/dist/cssm/components/Search/Search.js +2 -1
- package/dist/cssm/components/Search/Search.js.map +1 -1
- package/dist/cssm/components/SimpleCell/SimpleCell.module.css +3 -5
- package/dist/cssm/lib/layouts/layoutProps.js +17 -0
- package/dist/cssm/lib/layouts/layoutProps.js.map +1 -1
- package/dist/cssm/lib/layouts/types.js.map +1 -1
- package/dist/cssm/styles/layout.css +36 -0
- package/dist/lib/layouts/layoutProps.d.ts +2 -0
- package/dist/lib/layouts/layoutProps.d.ts.map +1 -1
- package/dist/lib/layouts/layoutProps.js +17 -0
- package/dist/lib/layouts/layoutProps.js.map +1 -1
- package/dist/lib/layouts/types.d.ts +12 -0
- package/dist/lib/layouts/types.d.ts.map +1 -1
- package/dist/lib/layouts/types.js.map +1 -1
- package/dist/vkui.css +1 -1
- package/dist/vkui.css.map +1 -1
- package/package.json +1 -1
- package/src/components/CellButton/CellButton.module.css +159 -7
- package/src/components/CellButton/CellButton.module.css.d.ts.map +1 -1
- package/src/components/CellButton/CellButton.tsx +152 -9
- package/src/components/Clickable/useState.tsx +3 -3
- package/src/components/Flex/Flex.tsx +0 -15
- package/src/components/Flex/FlexItem/FlexItem.module.css +0 -22
- package/src/components/Flex/FlexItem/FlexItem.module.css.d.ts.map +1 -1
- package/src/components/Flex/FlexItem/FlexItem.tsx +17 -44
- package/src/components/FormItem/FormItemTop/FormItemTopAside.tsx +3 -2
- package/src/components/FormItem/FormItemTop/FormItemTopLabel.tsx +2 -1
- package/src/components/Input/Input.tsx +3 -0
- package/src/components/Search/Search.tsx +4 -1
- package/src/components/SimpleCell/SimpleCell.module.css +3 -5
- package/src/components/SimpleCell/SimpleCell.module.css.d.ts.map +1 -1
- package/src/lib/layouts/layoutProps.ts +5 -0
- package/src/lib/layouts/types.ts +13 -0
|
@@ -1,11 +1,71 @@
|
|
|
1
|
-
import
|
|
2
|
-
import '
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { HasComponent } from '../../types';
|
|
3
|
+
import { type TappableOmitProps } from '../Tappable/Tappable';
|
|
3
4
|
export declare const appearanceClassNames: {
|
|
4
5
|
accent: string;
|
|
5
6
|
neutral: string;
|
|
6
7
|
negative: string;
|
|
7
8
|
};
|
|
8
|
-
|
|
9
|
+
interface CellButtonOwnProps extends HasComponent {
|
|
10
|
+
/**
|
|
11
|
+
* Иконка 28 или `<Avatar size={28|32|40|48|72} />`.
|
|
12
|
+
*/
|
|
13
|
+
before?: React.ReactNode;
|
|
14
|
+
/**
|
|
15
|
+
* Иконка 12 или `<Badge />`. Добавится слева от текста `children`.
|
|
16
|
+
*/
|
|
17
|
+
badgeBeforeTitle?: React.ReactNode;
|
|
18
|
+
/**
|
|
19
|
+
* Иконка 12 или `<Badge />`. Добавится справа от текста `children`.
|
|
20
|
+
*/
|
|
21
|
+
badgeAfterTitle?: React.ReactNode;
|
|
22
|
+
/**
|
|
23
|
+
* Иконка 12. Добавится слева от текста `subtitle`.
|
|
24
|
+
*/
|
|
25
|
+
badgeBeforeSubtitle?: React.ReactNode;
|
|
26
|
+
/**
|
|
27
|
+
* Иконка 12. Добавится справа от текста `subtitle`.
|
|
28
|
+
*/
|
|
29
|
+
badgeAfterSubtitle?: React.ReactNode;
|
|
30
|
+
/**
|
|
31
|
+
* Контейнер для текста справа от `children`.
|
|
32
|
+
*/
|
|
33
|
+
indicator?: React.ReactNode;
|
|
34
|
+
/**
|
|
35
|
+
* Дополнительная строка текста над `children`.
|
|
36
|
+
*/
|
|
37
|
+
overTitle?: React.ReactNode;
|
|
38
|
+
/**
|
|
39
|
+
* Дополнительная строка текста под `children`.
|
|
40
|
+
*/
|
|
41
|
+
subtitle?: React.ReactNode;
|
|
42
|
+
/**
|
|
43
|
+
* Дополнительная строка текста под `children` и `subtitle`.
|
|
44
|
+
*/
|
|
45
|
+
extraSubtitle?: React.ReactNode;
|
|
46
|
+
/**
|
|
47
|
+
* Иконка 24|28 или `<Switch />`. Располагается справа от `indicator`.
|
|
48
|
+
*/
|
|
49
|
+
after?: React.ReactNode;
|
|
50
|
+
/**
|
|
51
|
+
* Блокировка взаимодействия с компонентом.
|
|
52
|
+
*/
|
|
53
|
+
disabled?: boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Управляет видимостью иконки шеврона `›`.
|
|
56
|
+
*
|
|
57
|
+
* - `auto` - добавляет шеврон справа только для платформы `ios`;
|
|
58
|
+
* - `always` - всегда показывает шеврон.
|
|
59
|
+
*/
|
|
60
|
+
chevron?: 'auto' | 'always';
|
|
61
|
+
/**
|
|
62
|
+
* Размер chevron.
|
|
63
|
+
*/
|
|
64
|
+
chevronSize?: 's' | 'm';
|
|
65
|
+
/**
|
|
66
|
+
* Включает многострочный режим для отображения текста.
|
|
67
|
+
*/
|
|
68
|
+
multiline?: boolean;
|
|
9
69
|
/**
|
|
10
70
|
* > Режим `centered` переопределяет токен для темы `"accent"`.
|
|
11
71
|
*/
|
|
@@ -15,8 +75,11 @@ export interface CellButtonProps extends SimpleCellProps {
|
|
|
15
75
|
*/
|
|
16
76
|
centered?: boolean;
|
|
17
77
|
}
|
|
78
|
+
export interface CellButtonProps extends CellButtonOwnProps, TappableOmitProps {
|
|
79
|
+
}
|
|
18
80
|
/**
|
|
19
81
|
* @see https://vkui.io/components/cell-button
|
|
20
82
|
*/
|
|
21
|
-
export declare const CellButton: ({ centered, appearance,
|
|
83
|
+
export declare const CellButton: ({ badgeBeforeTitle, badgeAfterTitle, badgeBeforeSubtitle, badgeAfterSubtitle, before, indicator, children, after, chevron, multiline, overTitle, subtitle, extraSubtitle, chevronSize, centered, appearance, ...restProps }: CellButtonProps) => React.ReactNode;
|
|
84
|
+
export {};
|
|
22
85
|
//# sourceMappingURL=CellButton.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CellButton.d.ts","sourceRoot":"","sources":["../../../src/components/CellButton/CellButton.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CellButton.d.ts","sourceRoot":"","sources":["../../../src/components/CellButton/CellButton.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAY,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAYxE,eAAO,MAAM,oBAAoB;;;;CAIhC,CAAC;AAEF,UAAU,kBAAmB,SAAQ,YAAY;IAC/C;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB;;OAEG;IACH,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACnC;;OAEG;IACH,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAClC;;OAEG;IACH,mBAAmB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACtC;;OAEG;IACH,kBAAkB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACrC;;OAEG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B;;OAEG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;OAEG;IACH,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAChC;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC5B;;OAEG;IACH,WAAW,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;IACxB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;IAC/C;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,eAAgB,SAAQ,kBAAkB,EAAE,iBAAiB;CAAG;AAEjF;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,6NAkBxB,eAAe,KAAG,KAAK,CAAC,SAkE1B,CAAC"}
|
|
@@ -1,6 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { classNames, hasReactNode } from "@vkontakte/vkjs";
|
|
5
|
+
import { useAdaptivity } from "../../hooks/useAdaptivity.js";
|
|
6
|
+
import { usePlatform } from "../../hooks/usePlatform.js";
|
|
7
|
+
import { Chevron } from "../SimpleCell/Chevron/Chevron.js";
|
|
8
|
+
import { Tappable } from "../Tappable/Tappable.js";
|
|
9
|
+
import { Footnote } from "../Typography/Footnote/Footnote.js";
|
|
10
|
+
import { Headline } from "../Typography/Headline/Headline.js";
|
|
11
|
+
import { Subhead } from "../Typography/Subhead/Subhead.js";
|
|
12
|
+
import { VisuallyHidden } from "../VisuallyHidden/VisuallyHidden.js";
|
|
13
|
+
const densityClassNames = {
|
|
14
|
+
none: "vkuiCellButton__densityNone",
|
|
15
|
+
compact: "vkuiCellButton__densityCompact"
|
|
16
|
+
};
|
|
4
17
|
export const appearanceClassNames = {
|
|
5
18
|
accent: "vkuiCellButton__appearanceAccent",
|
|
6
19
|
neutral: "vkuiCellButton__appearanceNeutral",
|
|
@@ -8,10 +21,106 @@ export const appearanceClassNames = {
|
|
|
8
21
|
};
|
|
9
22
|
/**
|
|
10
23
|
* @see https://vkui.io/components/cell-button
|
|
11
|
-
*/ export const CellButton = ({ centered = false, appearance = 'accent',
|
|
12
|
-
|
|
24
|
+
*/ export const CellButton = ({ badgeBeforeTitle, badgeAfterTitle, badgeBeforeSubtitle, badgeAfterSubtitle, before, indicator, children, after, chevron, multiline, overTitle, subtitle, extraSubtitle, chevronSize = 'm', centered = false, appearance = 'accent', ...restProps })=>{
|
|
25
|
+
const platform = usePlatform();
|
|
26
|
+
const hasChevron = chevron === 'always' || chevron === 'auto' && platform === 'ios';
|
|
27
|
+
const hasAfter = hasReactNode(after) || hasChevron;
|
|
28
|
+
const { density = 'none' } = useAdaptivity();
|
|
29
|
+
return /*#__PURE__*/ _jsxs(Tappable, {
|
|
13
30
|
...restProps,
|
|
14
|
-
|
|
31
|
+
baseClassName: classNames("vkuiCellButton__host", restProps.disabled && "vkuiCellButton__disabled", density !== 'regular' && densityClassNames[density], multiline && "vkuiCellButton__mult", appearanceClassNames[appearance], centered && "vkuiCellButton__centered"),
|
|
32
|
+
children: [
|
|
33
|
+
/*#__PURE__*/ _jsx("div", {
|
|
34
|
+
className: "vkuiCellButton__before",
|
|
35
|
+
children: before
|
|
36
|
+
}),
|
|
37
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
38
|
+
className: "vkuiCellButton__middle",
|
|
39
|
+
children: [
|
|
40
|
+
overTitle && /*#__PURE__*/ _jsxs(Subhead, {
|
|
41
|
+
Component: "span",
|
|
42
|
+
className: classNames("vkuiCellButton__text", "vkuiCellButton__overTitle"),
|
|
43
|
+
children: [
|
|
44
|
+
overTitle,
|
|
45
|
+
/*#__PURE__*/ _jsx(VisuallyHidden, {
|
|
46
|
+
children: " "
|
|
47
|
+
})
|
|
48
|
+
]
|
|
49
|
+
}),
|
|
50
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
51
|
+
className: "vkuiCellButton__content",
|
|
52
|
+
children: [
|
|
53
|
+
badgeBeforeTitle && /*#__PURE__*/ _jsx("span", {
|
|
54
|
+
className: "vkuiCellButton__badge",
|
|
55
|
+
children: badgeBeforeTitle
|
|
56
|
+
}),
|
|
57
|
+
/*#__PURE__*/ _jsxs(Headline, {
|
|
58
|
+
Component: "span",
|
|
59
|
+
className: "vkuiCellButton__children",
|
|
60
|
+
weight: "3",
|
|
61
|
+
children: [
|
|
62
|
+
children,
|
|
63
|
+
/*#__PURE__*/ _jsx(VisuallyHidden, {
|
|
64
|
+
children: " "
|
|
65
|
+
})
|
|
66
|
+
]
|
|
67
|
+
}),
|
|
68
|
+
hasReactNode(badgeAfterTitle) && /*#__PURE__*/ _jsx("span", {
|
|
69
|
+
className: "vkuiCellButton__badge",
|
|
70
|
+
children: badgeAfterTitle
|
|
71
|
+
})
|
|
72
|
+
]
|
|
73
|
+
}),
|
|
74
|
+
subtitle && /*#__PURE__*/ _jsxs("div", {
|
|
75
|
+
className: "vkuiCellButton__content",
|
|
76
|
+
children: [
|
|
77
|
+
badgeBeforeSubtitle && /*#__PURE__*/ _jsx("span", {
|
|
78
|
+
className: "vkuiCellButton__badge",
|
|
79
|
+
children: badgeBeforeSubtitle
|
|
80
|
+
}),
|
|
81
|
+
/*#__PURE__*/ _jsxs(Footnote, {
|
|
82
|
+
normalize: false,
|
|
83
|
+
className: classNames("vkuiCellButton__text", "vkuiCellButton__subtitle"),
|
|
84
|
+
children: [
|
|
85
|
+
subtitle,
|
|
86
|
+
/*#__PURE__*/ _jsx(VisuallyHidden, {
|
|
87
|
+
children: " "
|
|
88
|
+
})
|
|
89
|
+
]
|
|
90
|
+
}),
|
|
91
|
+
badgeAfterSubtitle && /*#__PURE__*/ _jsx("span", {
|
|
92
|
+
className: "vkuiCellButton__badge",
|
|
93
|
+
children: badgeAfterSubtitle
|
|
94
|
+
})
|
|
95
|
+
]
|
|
96
|
+
}),
|
|
97
|
+
extraSubtitle && /*#__PURE__*/ _jsxs(Footnote, {
|
|
98
|
+
className: classNames("vkuiCellButton__text", "vkuiCellButton__extraSubtitle"),
|
|
99
|
+
children: [
|
|
100
|
+
extraSubtitle,
|
|
101
|
+
/*#__PURE__*/ _jsx(VisuallyHidden, {
|
|
102
|
+
children: " "
|
|
103
|
+
})
|
|
104
|
+
]
|
|
105
|
+
})
|
|
106
|
+
]
|
|
107
|
+
}),
|
|
108
|
+
hasReactNode(indicator) && /*#__PURE__*/ _jsx(Headline, {
|
|
109
|
+
Component: "span",
|
|
110
|
+
weight: "3",
|
|
111
|
+
className: "vkuiCellButton__indicator",
|
|
112
|
+
children: indicator
|
|
113
|
+
}),
|
|
114
|
+
hasAfter && /*#__PURE__*/ _jsxs("div", {
|
|
115
|
+
className: "vkuiCellButton__after",
|
|
116
|
+
children: [
|
|
117
|
+
after,
|
|
118
|
+
hasChevron && /*#__PURE__*/ _jsx(Chevron, {
|
|
119
|
+
size: chevronSize
|
|
120
|
+
})
|
|
121
|
+
]
|
|
122
|
+
})
|
|
123
|
+
]
|
|
15
124
|
});
|
|
16
125
|
};
|
|
17
126
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/CellButton/CellButton.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../src/components/CellButton/CellButton.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport type { HasComponent } from '../../types';\nimport { Chevron } from '../SimpleCell/Chevron/Chevron';\nimport { Tappable, type TappableOmitProps } from '../Tappable/Tappable';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { Headline } from '../Typography/Headline/Headline';\nimport { Subhead } from '../Typography/Subhead/Subhead';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport styles from './CellButton.module.css';\n\nconst densityClassNames = {\n none: styles.densityNone,\n compact: styles.densityCompact,\n};\n\nexport const appearanceClassNames = {\n accent: styles.appearanceAccent,\n neutral: styles.appearanceNeutral,\n negative: styles.appearanceNegative,\n};\n\ninterface CellButtonOwnProps extends HasComponent {\n /**\n * Иконка 28 или `<Avatar size={28|32|40|48|72} />`.\n */\n before?: React.ReactNode;\n /**\n * Иконка 12 или `<Badge />`. Добавится слева от текста `children`.\n */\n badgeBeforeTitle?: React.ReactNode;\n /**\n * Иконка 12 или `<Badge />`. Добавится справа от текста `children`.\n */\n badgeAfterTitle?: React.ReactNode;\n /**\n * Иконка 12. Добавится слева от текста `subtitle`.\n */\n badgeBeforeSubtitle?: React.ReactNode;\n /**\n * Иконка 12. Добавится справа от текста `subtitle`.\n */\n badgeAfterSubtitle?: React.ReactNode;\n /**\n * Контейнер для текста справа от `children`.\n */\n indicator?: React.ReactNode;\n /**\n * Дополнительная строка текста над `children`.\n */\n overTitle?: React.ReactNode;\n /**\n * Дополнительная строка текста под `children`.\n */\n subtitle?: React.ReactNode;\n /**\n * Дополнительная строка текста под `children` и `subtitle`.\n */\n extraSubtitle?: React.ReactNode;\n /**\n * Иконка 24|28 или `<Switch />`. Располагается справа от `indicator`.\n */\n after?: React.ReactNode;\n /**\n * Блокировка взаимодействия с компонентом.\n */\n disabled?: boolean;\n /**\n * Управляет видимостью иконки шеврона `›`.\n *\n * - `auto` - добавляет шеврон справа только для платформы `ios`;\n * - `always` - всегда показывает шеврон.\n */\n chevron?: 'auto' | 'always';\n /**\n * Размер chevron.\n */\n chevronSize?: 's' | 'm';\n /**\n * Включает многострочный режим для отображения текста.\n */\n multiline?: boolean;\n /**\n * > Режим `centered` переопределяет токен для темы `\"accent\"`.\n */\n appearance?: 'accent' | 'neutral' | 'negative';\n /**\n * Возможность центрирования содержимого компонента.\n */\n centered?: boolean;\n}\n\nexport interface CellButtonProps extends CellButtonOwnProps, TappableOmitProps {}\n\n/**\n * @see https://vkui.io/components/cell-button\n */\nexport const CellButton = ({\n badgeBeforeTitle,\n badgeAfterTitle,\n badgeBeforeSubtitle,\n badgeAfterSubtitle,\n before,\n indicator,\n children,\n after,\n chevron,\n multiline,\n overTitle,\n subtitle,\n extraSubtitle,\n chevronSize = 'm',\n centered = false,\n appearance = 'accent',\n ...restProps\n}: CellButtonProps): React.ReactNode => {\n const platform = usePlatform();\n\n const hasChevron = chevron === 'always' || (chevron === 'auto' && platform === 'ios');\n\n const hasAfter = hasReactNode(after) || hasChevron;\n const { density = 'none' } = useAdaptivity();\n\n return (\n <Tappable\n {...restProps}\n baseClassName={classNames(\n styles.host,\n restProps.disabled && styles.disabled,\n density !== 'regular' && densityClassNames[density],\n multiline && styles.mult,\n appearanceClassNames[appearance],\n centered && styles.centered,\n )}\n >\n <div className={styles.before}>{before}</div>\n <div className={styles.middle}>\n {overTitle && (\n <Subhead Component=\"span\" className={classNames(styles.text, styles.overTitle)}>\n {overTitle}\n <VisuallyHidden> </VisuallyHidden>\n </Subhead>\n )}\n <div className={styles.content}>\n {badgeBeforeTitle && <span className={styles.badge}>{badgeBeforeTitle}</span>}\n <Headline Component=\"span\" className={styles.children} weight=\"3\">\n {children}\n <VisuallyHidden> </VisuallyHidden>\n </Headline>\n {hasReactNode(badgeAfterTitle) && <span className={styles.badge}>{badgeAfterTitle}</span>}\n </div>\n {subtitle && (\n <div className={styles.content}>\n {badgeBeforeSubtitle && <span className={styles.badge}>{badgeBeforeSubtitle}</span>}\n <Footnote normalize={false} className={classNames(styles.text, styles.subtitle)}>\n {subtitle}\n <VisuallyHidden> </VisuallyHidden>\n </Footnote>\n {badgeAfterSubtitle && <span className={styles.badge}>{badgeAfterSubtitle}</span>}\n </div>\n )}\n {extraSubtitle && (\n <Footnote className={classNames(styles.text, styles.extraSubtitle)}>\n {extraSubtitle}\n <VisuallyHidden> </VisuallyHidden>\n </Footnote>\n )}\n </div>\n {hasReactNode(indicator) && (\n <Headline Component=\"span\" weight=\"3\" className={styles.indicator}>\n {indicator}\n </Headline>\n )}\n {hasAfter && (\n <div className={styles.after}>\n {after}\n {hasChevron && <Chevron size={chevronSize} />}\n </div>\n )}\n </Tappable>\n );\n};\n"],"names":["React","classNames","hasReactNode","useAdaptivity","usePlatform","Chevron","Tappable","Footnote","Headline","Subhead","VisuallyHidden","densityClassNames","none","compact","appearanceClassNames","accent","neutral","negative","CellButton","badgeBeforeTitle","badgeAfterTitle","badgeBeforeSubtitle","badgeAfterSubtitle","before","indicator","children","after","chevron","multiline","overTitle","subtitle","extraSubtitle","chevronSize","centered","appearance","restProps","platform","hasChevron","hasAfter","density","baseClassName","disabled","div","className","Component","span","weight","normalize","size"],"mappings":"AAAA;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,EAAEC,YAAY,QAAQ,kBAAkB;AAC3D,SAASC,aAAa,QAAQ,+BAA4B;AAC1D,SAASC,WAAW,QAAQ,6BAA0B;AAEtD,SAASC,OAAO,QAAQ,mCAAgC;AACxD,SAASC,QAAQ,QAAgC,0BAAuB;AACxE,SAASC,QAAQ,QAAQ,qCAAkC;AAC3D,SAASC,QAAQ,QAAQ,qCAAkC;AAC3D,SAASC,OAAO,QAAQ,mCAAgC;AACxD,SAASC,cAAc,QAAQ,sCAAmC;AAGlE,MAAMC,oBAAoB;IACxBC,IAAI;IACJC,OAAO;AACT;AAEA,OAAO,MAAMC,uBAAuB;IAClCC,MAAM;IACNC,OAAO;IACPC,QAAQ;AACV,EAAE;AA0EF;;CAEC,GACD,OAAO,MAAMC,aAAa,CAAC,EACzBC,gBAAgB,EAChBC,eAAe,EACfC,mBAAmB,EACnBC,kBAAkB,EAClBC,MAAM,EACNC,SAAS,EACTC,QAAQ,EACRC,KAAK,EACLC,OAAO,EACPC,SAAS,EACTC,SAAS,EACTC,QAAQ,EACRC,aAAa,EACbC,cAAc,GAAG,EACjBC,WAAW,KAAK,EAChBC,aAAa,QAAQ,EACrB,GAAGC,WACa;IAChB,MAAMC,WAAWhC;IAEjB,MAAMiC,aAAaV,YAAY,YAAaA,YAAY,UAAUS,aAAa;IAE/E,MAAME,WAAWpC,aAAawB,UAAUW;IACxC,MAAM,EAAEE,UAAU,MAAM,EAAE,GAAGpC;IAE7B,qBACE,MAACG;QACE,GAAG6B,SAAS;QACbK,eAAevC,mCAEbkC,UAAUM,QAAQ,gCAClBF,YAAY,aAAa5B,iBAAiB,CAAC4B,QAAQ,EACnDX,qCACAd,oBAAoB,CAACoB,WAAW,EAChCD;;0BAGF,KAACS;gBAAIC,SAAS;0BAAkBpB;;0BAChC,MAACmB;gBAAIC,SAAS;;oBACXd,2BACC,MAACpB;wBAAQmC,WAAU;wBAAOD,WAAW1C;;4BAClC4B;0CACD,KAACnB;0CAAe;;;;kCAGpB,MAACgC;wBAAIC,SAAS;;4BACXxB,kCAAoB,KAAC0B;gCAAKF,SAAS;0CAAiBxB;;0CACrD,MAACX;gCAASoC,WAAU;gCAAOD,SAAS;gCAAmBG,QAAO;;oCAC3DrB;kDACD,KAACf;kDAAe;;;;4BAEjBR,aAAakB,kCAAoB,KAACyB;gCAAKF,SAAS;0CAAiBvB;;;;oBAEnEU,0BACC,MAACY;wBAAIC,SAAS;;4BACXtB,qCAAuB,KAACwB;gCAAKF,SAAS;0CAAiBtB;;0CACxD,MAACd;gCAASwC,WAAW;gCAAOJ,WAAW1C;;oCACpC6B;kDACD,KAACpB;kDAAe;;;;4BAEjBY,oCAAsB,KAACuB;gCAAKF,SAAS;0CAAiBrB;;;;oBAG1DS,+BACC,MAACxB;wBAASoC,WAAW1C;;4BAClB8B;0CACD,KAACrB;0CAAe;;;;;;YAIrBR,aAAasB,4BACZ,KAAChB;gBAASoC,WAAU;gBAAOE,QAAO;gBAAIH,SAAS;0BAC5CnB;;YAGJc,0BACC,MAACI;gBAAIC,SAAS;;oBACXjB;oBACAW,4BAAc,KAAChC;wBAAQ2C,MAAMhB;;;;;;AAKxC,EAAE"}
|
|
@@ -70,12 +70,13 @@ const ACTIVE_DELAY = 70;
|
|
|
70
70
|
pointersUpRef.current = new Set();
|
|
71
71
|
}
|
|
72
72
|
React.useEffect(()=>{
|
|
73
|
-
if (lockState) {
|
|
74
|
-
// Сбрасываем setActivated если обнаруживаем lockState
|
|
73
|
+
if (lockState || !hasActive) {
|
|
74
|
+
// Сбрасываем setActivated если обнаруживаем lockState или !hasActive
|
|
75
75
|
setActivated(false);
|
|
76
76
|
}
|
|
77
77
|
}, [
|
|
78
78
|
lockState,
|
|
79
|
+
hasActive,
|
|
79
80
|
setActivated
|
|
80
81
|
]);
|
|
81
82
|
const onPointerDown = ()=>{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/Clickable/useState.tsx"],"sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\n\nimport * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { mergeCalls } from '../../lib/mergeCalls';\nimport { useStateWithDelay } from './useStateWithDelay';\n\nexport interface StateProps {\n /**\n * Указывает, должен ли компонент реагировать на `hover`-состояние.\n */\n hasHover?: boolean;\n /**\n * Позволяет управлять `hovered`-состоянием извне.\n */\n hovered?: boolean;\n /**\n * Позволяет управлять `activated`-состоянием извне.\n */\n activated?: boolean;\n /**\n * Указывает, должен ли компонент реагировать на `active`-состояние.\n */\n hasActive?: boolean;\n\n /**\n * Позволяет родительскому компоненту\n * иметь `hovered`-cостояние при наведении\n * на любой дочерний элемент.\n * По умолчанию состояние hovered у родителя сбрасывается.\n *\n * Присваивается родителькому компоненту.\n *\n * @example\n * <Tappable hasHoverWithChildren>\n * <IconButton />\n * <IconButton />\n * <IconButton />\n * </Tappable>\n */\n hasHoverWithChildren?: boolean;\n\n /**\n * Позволяет родительскому компоненту показывать hovered-состояние при наведении\n * на текущий дочерний компонент.\n *\n * Присваивается дочернему компоненту.\n *\n * @example\n * <Tappable>\n * <IconButton unlockParentHover />\n * <IconButton unlockParentHover />\n * <IconButton />\n * </Tappable>\n */\n unlockParentHover?: boolean;\n\n /**\n * Длительность показа `active`-состояния.\n */\n activeEffectDelay?: number;\n\n /**\n * Стиль подсветки `active`-состояния.\n */\n activeClassName?: string;\n\n /**\n * Стиль подсветки `hover`-состояния.\n */\n hoverClassName?: string;\n}\n\nexport const DEFAULT_ACTIVE_EFFECT_DELAY = 600;\n\nconst ACTIVE_DELAY = 70;\n\ninterface UseHoverProps extends Pick<StateProps, 'hovered' | 'hasHover'> {\n /**\n * Блокирование активации состояний.\n */\n lockState?: boolean;\n setParentStateLock?: (v: boolean) => void;\n}\n\n/**\n * Управляет наведением на компонент, игнорирует тач события.\n */\nexport function useHover({\n hovered,\n hasHover = true,\n lockState = false,\n setParentStateLock = noop,\n}: UseHoverProps = {}) {\n const [hoveredStateLocal, setHoveredStateLocal] = React.useState(false);\n\n const prevIsHoveredRef = React.useRef<boolean | undefined>(undefined);\n\n React.useEffect(() => {\n if (!hasHover) {\n setHoveredStateLocal(false);\n prevIsHoveredRef.current = false;\n setParentStateLock(false);\n }\n }, [hasHover, setParentStateLock]);\n\n const handleHover = React.useCallback(\n (isHover: boolean) => {\n setHoveredStateLocal(isHover);\n\n const isHovered =\n hovered ??\n calculateStateValue({\n hasState: hasHover,\n isLocked: lockState,\n stateValueLocal: isHover,\n });\n\n // проверка сделана чтобы реже вызывать обновление состояния\n // контекста родителя\n if (isHovered !== prevIsHoveredRef.current) {\n prevIsHoveredRef.current = isHovered;\n setParentStateLock(isHovered);\n }\n },\n [setParentStateLock, hasHover, hovered, lockState],\n );\n\n const onPointerEnter: React.PointerEventHandler<any> = (e) => {\n if (e.pointerType === 'touch') {\n return;\n }\n\n handleHover(true);\n };\n\n const onPointerLeave = () => {\n handleHover(false);\n };\n\n const isHovered =\n hovered ??\n calculateStateValue({\n hasState: hasHover,\n isLocked: lockState,\n stateValueLocal: hoveredStateLocal,\n });\n\n return {\n isHovered,\n onPointerEnter: hasHover ? onPointerEnter : noop,\n onPointerLeave: hasHover ? onPointerLeave : noop,\n };\n}\n\ninterface UseActiveProps extends Pick<StateProps, 'activated' | 'activeEffectDelay' | 'hasActive'> {\n /**\n * Блокирование активации состояний.\n */\n lockState: boolean;\n setParentStateLock: (v: boolean) => void;\n}\n\n/**\n * Управляет активацией компонента.\n */\nfunction useActive({\n activated,\n activeEffectDelay,\n hasActive = true,\n lockState,\n setParentStateLock,\n}: UseActiveProps) {\n // передаём setParentStateLock, чтобы функция вызывалась вместе с установкой стейта,\n // если установка отложена c помощью delay, то и вызов будет отложен\n const [activatedState, setActivated] = useStateWithDelay<boolean>(false, 0, setParentStateLock);\n\n // Список нажатий которые не требуется отменять\n const pointersUpRef = React.useRef<Set<number>>(null);\n if (pointersUpRef.current === null) {\n pointersUpRef.current = new Set<number>();\n }\n\n React.useEffect(() => {\n if (lockState) {\n // Сбрасываем setActivated если обнаруживаем lockState\n setActivated(false);\n }\n }, [lockState, setActivated]);\n\n const onPointerDown = () => {\n if (lockState) {\n return;\n }\n\n setActivated(true, ACTIVE_DELAY);\n // намеренно выставляем lock, так как setActivated вызов отложен\n // а у отложенного setActivated setParentStateLock тоже вызовется отложено\n // родитель сейчас тоже обработает это же событие PointerDown\n // если мы не залочим activatedState у родителя сейчас, то родитель выставит active состояние\n setParentStateLock(true);\n };\n\n const onPointerCancel: React.PointerEventHandler = (e) => {\n if (pointersUpRef.current!.has(e.pointerId)) {\n pointersUpRef.current!.delete(e.pointerId);\n return;\n }\n\n setActivated(false);\n };\n\n const onPointerUp: React.PointerEventHandler = (e) => {\n pointersUpRef.current!.add(e.pointerId);\n\n if (lockState) {\n return;\n }\n\n setActivated(true);\n setActivated(false, activeEffectDelay);\n };\n\n const isActivated =\n activated ??\n calculateStateValue({\n hasState: hasActive,\n isLocked: lockState,\n stateValueLocal: activatedState,\n });\n\n return {\n isActivated,\n onPointerLeave: hasActive ? onPointerCancel : noop,\n onPointerDown: hasActive ? onPointerDown : noop,\n onPointerCancel: hasActive ? onPointerCancel : noop,\n onPointerUp: hasActive ? onPointerUp : noop,\n };\n}\n\ninterface ClickableLockStateContextInterface {\n lockHoverStateBubbling?: (v: boolean) => void;\n lockActiveStateBubbling?: (v: boolean) => void;\n}\n\nexport const ClickableLockStateContext: React.Context<ClickableLockStateContextInterface> =\n React.createContext<ClickableLockStateContextInterface>({\n lockHoverStateBubbling: undefined,\n lockActiveStateBubbling: undefined,\n });\n\n/**\n * Блокирует стейт на всплытие.\n */\nfunction useLockState(\n setParentStateLockBubbling: (v: boolean) => void,\n): readonly [boolean, (v: boolean) => void, (...args: any[]) => void] {\n const [lockState, setLockState] = React.useState(false);\n\n const setStateLockBubblingImmediate = React.useCallback(\n (isLock: boolean) => {\n setLockState(isLock);\n setParentStateLockBubbling(isLock);\n },\n [setParentStateLockBubbling],\n );\n\n return [lockState, setParentStateLockBubbling, setStateLockBubblingImmediate] as const;\n}\n\n/**\n * Управляет состоянием компонента.\n */\nexport function useState({\n hovered,\n hasHover,\n activated,\n hasActive,\n activeEffectDelay,\n unlockParentHover,\n hoverClassName,\n activeClassName,\n}: StateProps): {\n stateClassName: string;\n setLockHoverBubblingImmediate: (...args: any[]) => void;\n setLockActiveBubblingImmediate: (...args: any[]) => void;\n} {\n const { lockHoverStateBubbling = noop, lockActiveStateBubbling = noop } =\n React.useContext(ClickableLockStateContext);\n\n const [lockHoverState, setParentStateLockHoverBubbling, setLockHoverBubblingImmediate] =\n useLockState(unlockParentHover ? noop : lockHoverStateBubbling);\n const [lockActiveState, setParentStateLockActiveBubbling, setLockActiveBubblingImmediate] =\n useLockState(lockActiveStateBubbling);\n\n const { isHovered, ...hoverEvent } = useHover({\n hasHover,\n hovered,\n lockState: lockHoverState,\n setParentStateLock: setParentStateLockHoverBubbling,\n });\n\n const { isActivated, ...activeEvent } = useActive({\n activated,\n hasActive,\n activeEffectDelay,\n lockState: lockActiveState,\n setParentStateLock: setParentStateLockActiveBubbling,\n });\n\n const stateClassName = classNames(isHovered && hoverClassName, isActivated && activeClassName);\n const handlers = mergeCalls(hoverEvent, activeEvent);\n\n return {\n stateClassName,\n setLockHoverBubblingImmediate,\n setLockActiveBubblingImmediate,\n ...handlers,\n };\n}\n\n// Общая функция для определения конечного состояния active/hovered\nfunction calculateStateValue({\n hasState,\n isLocked,\n stateValueLocal,\n}: {\n hasState: boolean;\n isLocked: boolean;\n stateValueLocal: boolean;\n}): boolean {\n return hasState && !isLocked && stateValueLocal;\n}\n"],"names":["React","classNames","noop","mergeCalls","useStateWithDelay","DEFAULT_ACTIVE_EFFECT_DELAY","ACTIVE_DELAY","useHover","hovered","hasHover","lockState","setParentStateLock","hoveredStateLocal","setHoveredStateLocal","useState","prevIsHoveredRef","useRef","undefined","useEffect","current","handleHover","useCallback","isHover","isHovered","calculateStateValue","hasState","isLocked","stateValueLocal","onPointerEnter","e","pointerType","onPointerLeave","useActive","activated","activeEffectDelay","hasActive","activatedState","setActivated","pointersUpRef","Set","onPointerDown","onPointerCancel","has","pointerId","delete","onPointerUp","add","isActivated","ClickableLockStateContext","createContext","lockHoverStateBubbling","lockActiveStateBubbling","useLockState","setParentStateLockBubbling","setLockState","setStateLockBubblingImmediate","isLock","unlockParentHover","hoverClassName","activeClassName","useContext","lockHoverState","setParentStateLockHoverBubbling","setLockHoverBubblingImmediate","lockActiveState","setParentStateLockActiveBubbling","setLockActiveBubblingImmediate","hoverEvent","activeEvent","stateClassName","handlers"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/Clickable/useState.tsx"],"sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\n\nimport * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { mergeCalls } from '../../lib/mergeCalls';\nimport { useStateWithDelay } from './useStateWithDelay';\n\nexport interface StateProps {\n /**\n * Указывает, должен ли компонент реагировать на `hover`-состояние.\n */\n hasHover?: boolean;\n /**\n * Позволяет управлять `hovered`-состоянием извне.\n */\n hovered?: boolean;\n /**\n * Позволяет управлять `activated`-состоянием извне.\n */\n activated?: boolean;\n /**\n * Указывает, должен ли компонент реагировать на `active`-состояние.\n */\n hasActive?: boolean;\n\n /**\n * Позволяет родительскому компоненту\n * иметь `hovered`-cостояние при наведении\n * на любой дочерний элемент.\n * По умолчанию состояние hovered у родителя сбрасывается.\n *\n * Присваивается родителькому компоненту.\n *\n * @example\n * <Tappable hasHoverWithChildren>\n * <IconButton />\n * <IconButton />\n * <IconButton />\n * </Tappable>\n */\n hasHoverWithChildren?: boolean;\n\n /**\n * Позволяет родительскому компоненту показывать hovered-состояние при наведении\n * на текущий дочерний компонент.\n *\n * Присваивается дочернему компоненту.\n *\n * @example\n * <Tappable>\n * <IconButton unlockParentHover />\n * <IconButton unlockParentHover />\n * <IconButton />\n * </Tappable>\n */\n unlockParentHover?: boolean;\n\n /**\n * Длительность показа `active`-состояния.\n */\n activeEffectDelay?: number;\n\n /**\n * Стиль подсветки `active`-состояния.\n */\n activeClassName?: string;\n\n /**\n * Стиль подсветки `hover`-состояния.\n */\n hoverClassName?: string;\n}\n\nexport const DEFAULT_ACTIVE_EFFECT_DELAY = 600;\n\nconst ACTIVE_DELAY = 70;\n\ninterface UseHoverProps extends Pick<StateProps, 'hovered' | 'hasHover'> {\n /**\n * Блокирование активации состояний.\n */\n lockState?: boolean;\n setParentStateLock?: (v: boolean) => void;\n}\n\n/**\n * Управляет наведением на компонент, игнорирует тач события.\n */\nexport function useHover({\n hovered,\n hasHover = true,\n lockState = false,\n setParentStateLock = noop,\n}: UseHoverProps = {}) {\n const [hoveredStateLocal, setHoveredStateLocal] = React.useState(false);\n\n const prevIsHoveredRef = React.useRef<boolean | undefined>(undefined);\n\n React.useEffect(() => {\n if (!hasHover) {\n setHoveredStateLocal(false);\n prevIsHoveredRef.current = false;\n setParentStateLock(false);\n }\n }, [hasHover, setParentStateLock]);\n\n const handleHover = React.useCallback(\n (isHover: boolean) => {\n setHoveredStateLocal(isHover);\n\n const isHovered =\n hovered ??\n calculateStateValue({\n hasState: hasHover,\n isLocked: lockState,\n stateValueLocal: isHover,\n });\n\n // проверка сделана чтобы реже вызывать обновление состояния\n // контекста родителя\n if (isHovered !== prevIsHoveredRef.current) {\n prevIsHoveredRef.current = isHovered;\n setParentStateLock(isHovered);\n }\n },\n [setParentStateLock, hasHover, hovered, lockState],\n );\n\n const onPointerEnter: React.PointerEventHandler<any> = (e) => {\n if (e.pointerType === 'touch') {\n return;\n }\n\n handleHover(true);\n };\n\n const onPointerLeave = () => {\n handleHover(false);\n };\n\n const isHovered =\n hovered ??\n calculateStateValue({\n hasState: hasHover,\n isLocked: lockState,\n stateValueLocal: hoveredStateLocal,\n });\n\n return {\n isHovered,\n onPointerEnter: hasHover ? onPointerEnter : noop,\n onPointerLeave: hasHover ? onPointerLeave : noop,\n };\n}\n\ninterface UseActiveProps extends Pick<StateProps, 'activated' | 'activeEffectDelay' | 'hasActive'> {\n /**\n * Блокирование активации состояний.\n */\n lockState: boolean;\n setParentStateLock: (v: boolean) => void;\n}\n\n/**\n * Управляет активацией компонента.\n */\nfunction useActive({\n activated,\n activeEffectDelay,\n hasActive = true,\n lockState,\n setParentStateLock,\n}: UseActiveProps) {\n // передаём setParentStateLock, чтобы функция вызывалась вместе с установкой стейта,\n // если установка отложена c помощью delay, то и вызов будет отложен\n const [activatedState, setActivated] = useStateWithDelay<boolean>(false, 0, setParentStateLock);\n\n // Список нажатий которые не требуется отменять\n const pointersUpRef = React.useRef<Set<number>>(null);\n if (pointersUpRef.current === null) {\n pointersUpRef.current = new Set<number>();\n }\n\n React.useEffect(() => {\n if (lockState || !hasActive) {\n // Сбрасываем setActivated если обнаруживаем lockState или !hasActive\n setActivated(false);\n }\n }, [lockState, hasActive, setActivated]);\n\n const onPointerDown = () => {\n if (lockState) {\n return;\n }\n\n setActivated(true, ACTIVE_DELAY);\n // намеренно выставляем lock, так как setActivated вызов отложен\n // а у отложенного setActivated setParentStateLock тоже вызовется отложено\n // родитель сейчас тоже обработает это же событие PointerDown\n // если мы не залочим activatedState у родителя сейчас, то родитель выставит active состояние\n setParentStateLock(true);\n };\n\n const onPointerCancel: React.PointerEventHandler = (e) => {\n if (pointersUpRef.current!.has(e.pointerId)) {\n pointersUpRef.current!.delete(e.pointerId);\n return;\n }\n\n setActivated(false);\n };\n\n const onPointerUp: React.PointerEventHandler = (e) => {\n pointersUpRef.current!.add(e.pointerId);\n\n if (lockState) {\n return;\n }\n\n setActivated(true);\n setActivated(false, activeEffectDelay);\n };\n\n const isActivated =\n activated ??\n calculateStateValue({\n hasState: hasActive,\n isLocked: lockState,\n stateValueLocal: activatedState,\n });\n\n return {\n isActivated,\n onPointerLeave: hasActive ? onPointerCancel : noop,\n onPointerDown: hasActive ? onPointerDown : noop,\n onPointerCancel: hasActive ? onPointerCancel : noop,\n onPointerUp: hasActive ? onPointerUp : noop,\n };\n}\n\ninterface ClickableLockStateContextInterface {\n lockHoverStateBubbling?: (v: boolean) => void;\n lockActiveStateBubbling?: (v: boolean) => void;\n}\n\nexport const ClickableLockStateContext: React.Context<ClickableLockStateContextInterface> =\n React.createContext<ClickableLockStateContextInterface>({\n lockHoverStateBubbling: undefined,\n lockActiveStateBubbling: undefined,\n });\n\n/**\n * Блокирует стейт на всплытие.\n */\nfunction useLockState(\n setParentStateLockBubbling: (v: boolean) => void,\n): readonly [boolean, (v: boolean) => void, (...args: any[]) => void] {\n const [lockState, setLockState] = React.useState(false);\n\n const setStateLockBubblingImmediate = React.useCallback(\n (isLock: boolean) => {\n setLockState(isLock);\n setParentStateLockBubbling(isLock);\n },\n [setParentStateLockBubbling],\n );\n\n return [lockState, setParentStateLockBubbling, setStateLockBubblingImmediate] as const;\n}\n\n/**\n * Управляет состоянием компонента.\n */\nexport function useState({\n hovered,\n hasHover,\n activated,\n hasActive,\n activeEffectDelay,\n unlockParentHover,\n hoverClassName,\n activeClassName,\n}: StateProps): {\n stateClassName: string;\n setLockHoverBubblingImmediate: (...args: any[]) => void;\n setLockActiveBubblingImmediate: (...args: any[]) => void;\n} {\n const { lockHoverStateBubbling = noop, lockActiveStateBubbling = noop } =\n React.useContext(ClickableLockStateContext);\n\n const [lockHoverState, setParentStateLockHoverBubbling, setLockHoverBubblingImmediate] =\n useLockState(unlockParentHover ? noop : lockHoverStateBubbling);\n const [lockActiveState, setParentStateLockActiveBubbling, setLockActiveBubblingImmediate] =\n useLockState(lockActiveStateBubbling);\n\n const { isHovered, ...hoverEvent } = useHover({\n hasHover,\n hovered,\n lockState: lockHoverState,\n setParentStateLock: setParentStateLockHoverBubbling,\n });\n\n const { isActivated, ...activeEvent } = useActive({\n activated,\n hasActive,\n activeEffectDelay,\n lockState: lockActiveState,\n setParentStateLock: setParentStateLockActiveBubbling,\n });\n\n const stateClassName = classNames(isHovered && hoverClassName, isActivated && activeClassName);\n const handlers = mergeCalls(hoverEvent, activeEvent);\n\n return {\n stateClassName,\n setLockHoverBubblingImmediate,\n setLockActiveBubblingImmediate,\n ...handlers,\n };\n}\n\n// Общая функция для определения конечного состояния active/hovered\nfunction calculateStateValue({\n hasState,\n isLocked,\n stateValueLocal,\n}: {\n hasState: boolean;\n isLocked: boolean;\n stateValueLocal: boolean;\n}): boolean {\n return hasState && !isLocked && stateValueLocal;\n}\n"],"names":["React","classNames","noop","mergeCalls","useStateWithDelay","DEFAULT_ACTIVE_EFFECT_DELAY","ACTIVE_DELAY","useHover","hovered","hasHover","lockState","setParentStateLock","hoveredStateLocal","setHoveredStateLocal","useState","prevIsHoveredRef","useRef","undefined","useEffect","current","handleHover","useCallback","isHover","isHovered","calculateStateValue","hasState","isLocked","stateValueLocal","onPointerEnter","e","pointerType","onPointerLeave","useActive","activated","activeEffectDelay","hasActive","activatedState","setActivated","pointersUpRef","Set","onPointerDown","onPointerCancel","has","pointerId","delete","onPointerUp","add","isActivated","ClickableLockStateContext","createContext","lockHoverStateBubbling","lockActiveStateBubbling","useLockState","setParentStateLockBubbling","setLockState","setStateLockBubblingImmediate","isLock","unlockParentHover","hoverClassName","activeClassName","useContext","lockHoverState","setParentStateLockHoverBubbling","setLockHoverBubblingImmediate","lockActiveState","setParentStateLockActiveBubbling","setLockActiveBubblingImmediate","hoverEvent","activeEvent","stateClassName","handlers"],"mappings":"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"}
|
|
@@ -35,10 +35,6 @@ export interface FlexProps extends RootComponentProps<HTMLElement>, LayoutProps
|
|
|
35
35
|
* Для инвертирования направления, эквивалентно `row-reverse` `column-reverse`.
|
|
36
36
|
*/
|
|
37
37
|
reverse?: boolean;
|
|
38
|
-
/**
|
|
39
|
-
* Для задания выравнивания, отличного от установленного на родителе, эквивалентно `align-self`.
|
|
40
|
-
*/
|
|
41
|
-
alignSelf?: 'start' | 'end' | 'center' | 'baseline' | 'stretch';
|
|
42
38
|
/**
|
|
43
39
|
* Возможность задать css-свойство `display`.
|
|
44
40
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Flex.d.ts","sourceRoot":"","sources":["../../../src/components/Flex/Flex.tsx"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,QAAQ,EAGd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"Flex.d.ts","sourceRoot":"","sources":["../../../src/components/Flex/Flex.tsx"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,QAAQ,EAGd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGnE,YAAY,EAAE,aAAa,EAAE,CAAC;AAwB9B,KAAK,gBAAgB,GACjB,OAAO,GACP,KAAK,GACL,QAAQ,GACR,cAAc,GACd,eAAe,GACf,cAAc,CAAC;AAEnB,MAAM,WAAW,SAAU,SAAQ,kBAAkB,CAAC,WAAW,CAAC,EAAE,WAAW;IAC7E;;OAEG;IACH,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IAC7B;;;;OAIG;IACH,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;IAC5D;;OAEG;IACH,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC;CAC3C;AAED;;GAEG;AACH,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG;IACvC;;;OAGG;IACH,IAAI,EAAE,OAAO,QAAQ,CAAC;CAgCvB,CAAC"}
|
|
@@ -18,24 +18,17 @@ const alignClassNames = {
|
|
|
18
18
|
stretch: "vkuiFlex__alignStretch",
|
|
19
19
|
baseline: "vkuiFlex__alignBaseline"
|
|
20
20
|
};
|
|
21
|
-
const alignSelfClassNames = {
|
|
22
|
-
start: "vkuiFlexItem__alignSelfStart",
|
|
23
|
-
end: "vkuiFlexItem__alignSelfEnd",
|
|
24
|
-
center: "vkuiFlexItem__alignSelfCenter",
|
|
25
|
-
baseline: "vkuiFlexItem__alignSelfBaseline",
|
|
26
|
-
stretch: "vkuiFlexItem__alignSelfStretch"
|
|
27
|
-
};
|
|
28
21
|
const displayClassNames = {
|
|
29
22
|
'none': "vkuiFlex__displayNone",
|
|
30
23
|
'inline-flex': "vkuiFlex__displayInlineFlex"
|
|
31
24
|
};
|
|
32
25
|
/**
|
|
33
26
|
* @see https://vkui.io/components/flex
|
|
34
|
-
*/ export const Flex = ({ gap = 0, align, justify, margin = 'none', noWrap = false, direction = 'row', reverse = false,
|
|
27
|
+
*/ export const Flex = ({ gap = 0, align, justify, margin = 'none', noWrap = false, direction = 'row', reverse = false, display = 'flex', ...restProps })=>{
|
|
35
28
|
const [rowGap, columnGap] = calculateGap(gap);
|
|
36
29
|
const resolvedProps = resolveLayoutProps(restProps);
|
|
37
30
|
return /*#__PURE__*/ _jsx(RootComponent, {
|
|
38
|
-
baseClassName: classNames("vkuiFlex__host", !noWrap && "vkuiFlex__wrap", reverse && "vkuiFlex__reverse", direction !== 'row' && "vkuiFlex__directionColumn", margin !== 'none' && "vkuiFlex__marginAuto", align && alignClassNames[align],
|
|
31
|
+
baseClassName: classNames("vkuiFlex__host", !noWrap && "vkuiFlex__wrap", reverse && "vkuiFlex__reverse", direction !== 'row' && "vkuiFlex__directionColumn", margin !== 'none' && "vkuiFlex__marginAuto", align && alignClassNames[align], justify && justifyClassNames[justify], getGapsPresets(rowGap, columnGap), display !== 'flex' && displayClassNames[display]),
|
|
39
32
|
baseStyle: getGapsByUser(rowGap, columnGap),
|
|
40
33
|
...resolvedProps
|
|
41
34
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/Flex/Flex.tsx"],"sourcesContent":["import { classNames } from '@vkontakte/vkjs';\nimport {\n calculateGap,\n columnGapClassNames,\n type GapProp,\n type GapsProp,\n resolveLayoutProps,\n rowGapClassNames,\n} from '../../lib/layouts';\nimport type { LayoutProps } from '../../lib/layouts/types';\nimport type { CSSCustomProperties } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport type { RootComponentProps } from '../RootComponent/RootComponent';\nimport { FlexItem, type FlexItemProps } from './FlexItem/FlexItem';\nimport styles from './Flex.module.css';\
|
|
1
|
+
{"version":3,"sources":["../../../src/components/Flex/Flex.tsx"],"sourcesContent":["import { classNames } from '@vkontakte/vkjs';\nimport {\n calculateGap,\n columnGapClassNames,\n type GapProp,\n type GapsProp,\n resolveLayoutProps,\n rowGapClassNames,\n} from '../../lib/layouts';\nimport type { LayoutProps } from '../../lib/layouts/types';\nimport type { CSSCustomProperties } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport type { RootComponentProps } from '../RootComponent/RootComponent';\nimport { FlexItem, type FlexItemProps } from './FlexItem/FlexItem';\nimport styles from './Flex.module.css';\n\nexport type { FlexItemProps };\n\nconst justifyClassNames = {\n 'start': styles.justifyStart,\n 'end': styles.justifyEnd,\n 'center': styles.justifyCenter,\n 'space-around': styles.justifySpaceAround,\n 'space-between': styles.justifySpaceBetween,\n 'space-evenly': styles.justifySpaceEvenly,\n};\n\nconst alignClassNames = {\n start: styles.alignStart,\n end: styles.alignEnd,\n center: styles.alignCenter,\n stretch: styles.alignStretch,\n baseline: styles.alignBaseline,\n};\n\nconst displayClassNames = {\n 'none': styles.displayNone,\n 'inline-flex': styles.displayInlineFlex,\n};\n\ntype FlexContentProps =\n | 'start'\n | 'end'\n | 'center'\n | 'space-around'\n | 'space-between'\n | 'space-evenly';\n\nexport interface FlexProps extends RootComponentProps<HTMLElement>, LayoutProps {\n /**\n * Направление осей, эквивалентно `flex-direction`.\n */\n direction?: 'row' | 'column';\n /**\n * Отступы между элементами.\n * Значение из списка предопределённых пресетов или число, которое будет приведено к пикселям.\n * Через массив можно задать отступ между столбцами и строками [row, column], если они отличаются.\n */\n gap?: GapsProp;\n /**\n * Отключает перенос контента, эквивалентно `flex-wrap=nowrap`.\n */\n noWrap?: boolean;\n /**\n * Выравнивание элементов по вспомогательной оси, эквивалентно `align-items`.\n */\n align?: 'start' | 'end' | 'center' | 'stretch' | 'baseline';\n /**\n * Выравнивание элементов по главной оси, эквивалентно `justify-content`.\n */\n justify?: FlexContentProps;\n /**\n * Значение `auto` позволяет задать платформенные отступы вокруг контейнера.\n */\n margin?: 'none' | 'auto';\n /**\n * Для инвертирования направления, эквивалентно `row-reverse` `column-reverse`.\n */\n reverse?: boolean;\n /**\n * Возможность задать css-свойство `display`.\n */\n display?: 'none' | 'flex' | 'inline-flex';\n}\n\n/**\n * @see https://vkui.io/components/flex\n */\nexport const Flex: React.FC<FlexProps> & {\n /**\n * @deprecated Since 7.11.0. Будет удалено в **VKUI v9**.\n * Используйте компонент `Box`.\n */\n Item: typeof FlexItem;\n} = ({\n gap = 0,\n align,\n justify,\n margin = 'none',\n noWrap = false,\n direction = 'row',\n reverse = false,\n display = 'flex',\n ...restProps\n}: FlexProps) => {\n const [rowGap, columnGap] = calculateGap(gap);\n const resolvedProps = resolveLayoutProps(restProps);\n\n return (\n <RootComponent\n baseClassName={classNames(\n styles.host,\n !noWrap && styles.wrap,\n reverse && styles.reverse,\n direction !== 'row' && styles.directionColumn,\n margin !== 'none' && styles.marginAuto,\n align && alignClassNames[align],\n justify && justifyClassNames[justify],\n getGapsPresets(rowGap, columnGap),\n display !== 'flex' && displayClassNames[display],\n )}\n baseStyle={getGapsByUser(rowGap, columnGap)}\n {...resolvedProps}\n />\n );\n};\n\nfunction getGapsPresets(rowGap: GapProp, columnGap: GapProp) {\n return classNames(\n typeof rowGap === 'string' && rowGapClassNames[rowGap],\n typeof columnGap === 'string' && columnGapClassNames[columnGap],\n );\n}\n\nfunction getGapsByUser(rowGap: GapProp, columnGap: GapProp) {\n const style: CSSCustomProperties = {};\n\n if (typeof rowGap === 'number') {\n style['--vkui_internal--row_gap'] = `${rowGap}px`;\n }\n if (typeof columnGap === 'number') {\n style['--vkui_internal--column_gap'] = `${columnGap}px`;\n }\n\n return style;\n}\n\nFlex.Item = FlexItem;\n"],"names":["classNames","calculateGap","columnGapClassNames","resolveLayoutProps","rowGapClassNames","RootComponent","FlexItem","justifyClassNames","alignClassNames","start","end","center","stretch","baseline","displayClassNames","Flex","gap","align","justify","margin","noWrap","direction","reverse","display","restProps","rowGap","columnGap","resolvedProps","baseClassName","getGapsPresets","baseStyle","getGapsByUser","style","Item"],"mappings":";AAAA,SAASA,UAAU,QAAQ,kBAAkB;AAC7C,SACEC,YAAY,EACZC,mBAAmB,EAGnBC,kBAAkB,EAClBC,gBAAgB,QACX,6BAAoB;AAG3B,SAASC,aAAa,QAAQ,oCAAiC;AAE/D,SAASC,QAAQ,QAA4B,yBAAsB;AAKnE,MAAMC,oBAAoB;IACxB,OAAO;IACP,KAAK;IACL,QAAQ;IACR,cAAc;IACd,eAAe;IACf,cAAc;AAChB;AAEA,MAAMC,kBAAkB;IACtBC,KAAK;IACLC,GAAG;IACHC,MAAM;IACNC,OAAO;IACPC,QAAQ;AACV;AAEA,MAAMC,oBAAoB;IACxB,MAAM;IACN,aAAa;AACf;AA+CA;;CAEC,GACD,OAAO,MAAMC,OAMT,CAAC,EACHC,MAAM,CAAC,EACPC,KAAK,EACLC,OAAO,EACPC,SAAS,MAAM,EACfC,SAAS,KAAK,EACdC,YAAY,KAAK,EACjBC,UAAU,KAAK,EACfC,UAAU,MAAM,EAChB,GAAGC,WACO;IACV,MAAM,CAACC,QAAQC,UAAU,GAAGzB,aAAae;IACzC,MAAMW,gBAAgBxB,mBAAmBqB;IAEzC,qBACE,KAACnB;QACCuB,eAAe5B,6BAEb,CAACoB,4BACDE,gCACAD,cAAc,sCACdF,WAAW,kCACXF,SAAST,eAAe,CAACS,MAAM,EAC/BC,WAAWX,iBAAiB,CAACW,QAAQ,EACrCW,eAAeJ,QAAQC,YACvBH,YAAY,UAAUT,iBAAiB,CAACS,QAAQ;QAElDO,WAAWC,cAAcN,QAAQC;QAChC,GAAGC,aAAa;;AAGvB,EAAE;AAEF,SAASE,eAAeJ,MAAe,EAAEC,SAAkB;IACzD,OAAO1B,WACL,OAAOyB,WAAW,YAAYrB,gBAAgB,CAACqB,OAAO,EACtD,OAAOC,cAAc,YAAYxB,mBAAmB,CAACwB,UAAU;AAEnE;AAEA,SAASK,cAAcN,MAAe,EAAEC,SAAkB;IACxD,MAAMM,QAA6B,CAAC;IAEpC,IAAI,OAAOP,WAAW,UAAU;QAC9BO,KAAK,CAAC,2BAA2B,GAAG,GAAGP,OAAO,EAAE,CAAC;IACnD;IACA,IAAI,OAAOC,cAAc,UAAU;QACjCM,KAAK,CAAC,8BAA8B,GAAG,GAAGN,UAAU,EAAE,CAAC;IACzD;IAEA,OAAOM;AACT;AAEAjB,KAAKkB,IAAI,GAAG3B"}
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
+
import { type LayoutProps } from '../../../lib/layouts';
|
|
1
2
|
import type { RootComponentProps } from '../../RootComponent/RootComponent';
|
|
2
|
-
export
|
|
3
|
-
/**
|
|
4
|
-
* Для задания выравнивания, отлично от родительского, эквивалентно `align-self`.
|
|
5
|
-
*/
|
|
6
|
-
alignSelf?: 'start' | 'end' | 'center' | 'baseline' | 'stretch';
|
|
3
|
+
export type FlexItemProps = RootComponentProps<HTMLElement> & Pick<LayoutProps, 'alignSelf' | 'justifySelf' | 'flexBasis'> & {
|
|
7
4
|
/**
|
|
8
5
|
* Позволяет задать предопределенные значения свойства `flex`:
|
|
9
6
|
*
|
|
@@ -13,10 +10,6 @@ export interface FlexItemProps extends RootComponentProps<HTMLElement> {
|
|
|
13
10
|
* - `fixed` соответствует значению `0 0 auto`.
|
|
14
11
|
*/
|
|
15
12
|
flex?: 'grow' | 'shrink' | 'content' | 'fixed';
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
*/
|
|
19
|
-
flexBasis?: number | string;
|
|
20
|
-
}
|
|
21
|
-
export declare const FlexItem: ({ alignSelf, flex, flexBasis, ...restProps }: FlexItemProps) => React.ReactNode;
|
|
13
|
+
};
|
|
14
|
+
export declare const FlexItem: ({ flex, ...restProps }: FlexItemProps) => React.ReactNode;
|
|
22
15
|
//# sourceMappingURL=FlexItem.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlexItem.d.ts","sourceRoot":"","sources":["../../../../src/components/Flex/FlexItem/FlexItem.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FlexItem.d.ts","sourceRoot":"","sources":["../../../../src/components/Flex/FlexItem/FlexItem.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAsB,MAAM,sBAAsB,CAAC;AAG5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAU5E,MAAM,MAAM,aAAa,GAAG,kBAAkB,CAAC,WAAW,CAAC,GACzD,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,aAAa,GAAG,WAAW,CAAC,GAAG;IAC7D;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;CAChD,CAAC;AAIJ,eAAO,MAAM,QAAQ,GAAI,wBAAwB,aAAa,KAAG,KAAK,CAAC,SAQtE,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
2
|
+
import { resolveLayoutProps } from "../../../lib/layouts/index.js";
|
|
3
3
|
import { warnOnce } from "../../../lib/warnOnce.js";
|
|
4
4
|
import { RootComponent } from "../../RootComponent/RootComponent.js";
|
|
5
5
|
const flexClassNames = {
|
|
@@ -8,24 +8,15 @@ const flexClassNames = {
|
|
|
8
8
|
content: "vkuiFlexItem__flexContent",
|
|
9
9
|
fixed: "vkuiFlexItem__flexFixed"
|
|
10
10
|
};
|
|
11
|
-
const alignSelfClassNames = {
|
|
12
|
-
start: "vkuiFlexItem__alignSelfStart",
|
|
13
|
-
end: "vkuiFlexItem__alignSelfEnd",
|
|
14
|
-
center: "vkuiFlexItem__alignSelfCenter",
|
|
15
|
-
baseline: "vkuiFlexItem__alignSelfBaseline",
|
|
16
|
-
stretch: "vkuiFlexItem__alignSelfStretch"
|
|
17
|
-
};
|
|
18
11
|
const warn = warnOnce('Flex.Item');
|
|
19
|
-
export const FlexItem = ({
|
|
12
|
+
export const FlexItem = ({ flex, ...restProps })=>{
|
|
20
13
|
if (process.env.NODE_ENV === 'development') {
|
|
21
14
|
warn('Компонент Flex.Item устарел, используйте компонент Box в качестве альтернативы.');
|
|
22
15
|
}
|
|
16
|
+
const resolvedProps = resolveLayoutProps(restProps);
|
|
23
17
|
return /*#__PURE__*/ _jsx(RootComponent, {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
},
|
|
27
|
-
baseClassName: classNames(alignSelf && alignSelfClassNames[alignSelf], flex && flexClassNames[flex]),
|
|
28
|
-
...restProps
|
|
18
|
+
baseClassName: flex && flexClassNames[flex],
|
|
19
|
+
...resolvedProps
|
|
29
20
|
});
|
|
30
21
|
};
|
|
31
22
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/Flex/FlexItem/FlexItem.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/Flex/FlexItem/FlexItem.tsx"],"sourcesContent":["import { type LayoutProps, resolveLayoutProps } from '../../../lib/layouts';\nimport { warnOnce } from '../../../lib/warnOnce';\nimport { RootComponent } from '../../RootComponent/RootComponent';\nimport type { RootComponentProps } from '../../RootComponent/RootComponent';\nimport styles from './FlexItem.module.css';\n\nconst flexClassNames = {\n grow: styles.flexGrow,\n shrink: styles.flexShrink,\n content: styles.flexContent,\n fixed: styles.flexFixed,\n};\n\nexport type FlexItemProps = RootComponentProps<HTMLElement> &\n Pick<LayoutProps, 'alignSelf' | 'justifySelf' | 'flexBasis'> & {\n /**\n * Позволяет задать предопределенные значения свойства `flex`:\n *\n * - `grow` соответствует значению `1 0 auto`\n * - `shrink` соответствует значению `0 1 auto`\n * - `content` соответствует значению `1 1 auto`\n * - `fixed` соответствует значению `0 0 auto`.\n */\n flex?: 'grow' | 'shrink' | 'content' | 'fixed';\n };\n\nconst warn = warnOnce('Flex.Item');\n\nexport const FlexItem = ({ flex, ...restProps }: FlexItemProps): React.ReactNode => {\n if (process.env.NODE_ENV === 'development') {\n warn('Компонент Flex.Item устарел, используйте компонент Box в качестве альтернативы.');\n }\n\n const resolvedProps = resolveLayoutProps(restProps);\n\n return <RootComponent baseClassName={flex && flexClassNames[flex]} {...resolvedProps} />;\n};\n"],"names":["resolveLayoutProps","warnOnce","RootComponent","flexClassNames","grow","shrink","content","fixed","warn","FlexItem","flex","restProps","process","env","NODE_ENV","resolvedProps","baseClassName"],"mappings":";AAAA,SAA2BA,kBAAkB,QAAQ,gCAAuB;AAC5E,SAASC,QAAQ,QAAQ,2BAAwB;AACjD,SAASC,aAAa,QAAQ,uCAAoC;AAIlE,MAAMC,iBAAiB;IACrBC,IAAI;IACJC,MAAM;IACNC,OAAO;IACPC,KAAK;AACP;AAeA,MAAMC,OAAOP,SAAS;AAEtB,OAAO,MAAMQ,WAAW,CAAC,EAAEC,IAAI,EAAE,GAAGC,WAA0B;IAC5D,IAAIC,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;QAC1CN,KAAK;IACP;IAEA,MAAMO,gBAAgBf,mBAAmBW;IAEzC,qBAAO,KAACT;QAAcc,eAAeN,QAAQP,cAAc,CAACO,KAAK;QAAG,GAAGK,aAAa;;AACtF,EAAE"}
|
|
@@ -8,5 +8,5 @@ export interface FormItemTopAsideProps extends React.AllHTMLAttributes<HTMLEleme
|
|
|
8
8
|
* @since 6.1.0
|
|
9
9
|
*
|
|
10
10
|
*/
|
|
11
|
-
export declare const FormItemTopAside: ({ children, ...restProps }: FormItemTopAsideProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export declare const FormItemTopAside: ({ children, className, ...restProps }: FormItemTopAsideProps) => import("react/jsx-runtime").JSX.Element;
|
|
12
12
|
//# sourceMappingURL=FormItemTopAside.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormItemTopAside.d.ts","sourceRoot":"","sources":["../../../../src/components/FormItem/FormItemTop/FormItemTopAside.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"FormItemTopAside.d.ts","sourceRoot":"","sources":["../../../../src/components/FormItem/FormItemTop/FormItemTopAside.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAEpC,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAI/D,MAAM,WAAW,qBACf,SAAQ,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAC1C,UAAU,CAAC,WAAW,CAAC,EACvB,YAAY;CAAG;AAEnB;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAI,uCAAuC,qBAAqB,4CAM5F,CAAC"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { classNames } from "@vkontakte/vkjs";
|
|
2
3
|
import { Subhead } from "../../Typography/Subhead/Subhead.js";
|
|
3
4
|
/**
|
|
4
5
|
* Отвечает за отрисовку дополнительного контента справа от заголовка поля.
|
|
5
6
|
*
|
|
6
7
|
* @since 6.1.0
|
|
7
8
|
*
|
|
8
|
-
*/ export const FormItemTopAside = ({ children, ...restProps })=>{
|
|
9
|
+
*/ export const FormItemTopAside = ({ children, className, ...restProps })=>{
|
|
9
10
|
return /*#__PURE__*/ _jsx(Subhead, {
|
|
10
|
-
className: "vkuiFormItem__aside",
|
|
11
|
+
className: classNames(className, "vkuiFormItem__aside"),
|
|
11
12
|
...restProps,
|
|
12
13
|
children: children
|
|
13
14
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/FormItem/FormItemTop/FormItemTopAside.tsx"],"sourcesContent":["import type * as React from 'react';\nimport type { HasComponent, HasRootRef } from '../../../types';\nimport { Subhead } from '../../Typography/Subhead/Subhead';\nimport styles from '../FormItem.module.css';\n\nexport interface FormItemTopAsideProps\n extends React.AllHTMLAttributes<HTMLElement>,\n HasRootRef<HTMLElement>,\n HasComponent {}\n\n/**\n * Отвечает за отрисовку дополнительного контента справа от заголовка поля.\n *\n * @since 6.1.0\n *\n */\nexport const FormItemTopAside = ({ children, ...restProps }: FormItemTopAsideProps) => {\n return (\n <Subhead className={styles.aside} {...restProps}>\n {children}\n </Subhead>\n );\n};\n"],"names":["Subhead","FormItemTopAside","children","
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/FormItem/FormItemTop/FormItemTopAside.tsx"],"sourcesContent":["import type * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport type { HasComponent, HasRootRef } from '../../../types';\nimport { Subhead } from '../../Typography/Subhead/Subhead';\nimport styles from '../FormItem.module.css';\n\nexport interface FormItemTopAsideProps\n extends React.AllHTMLAttributes<HTMLElement>,\n HasRootRef<HTMLElement>,\n HasComponent {}\n\n/**\n * Отвечает за отрисовку дополнительного контента справа от заголовка поля.\n *\n * @since 6.1.0\n *\n */\nexport const FormItemTopAside = ({ children, className, ...restProps }: FormItemTopAsideProps) => {\n return (\n <Subhead className={classNames(className, styles.aside)} {...restProps}>\n {children}\n </Subhead>\n );\n};\n"],"names":["classNames","Subhead","FormItemTopAside","children","className","restProps"],"mappings":";AACA,SAASA,UAAU,QAAQ,kBAAkB;AAE7C,SAASC,OAAO,QAAQ,sCAAmC;AAQ3D;;;;;CAKC,GACD,OAAO,MAAMC,mBAAmB,CAAC,EAAEC,QAAQ,EAAEC,SAAS,EAAE,GAAGC,WAAkC;IAC3F,qBACE,KAACJ;QAAQG,WAAWJ,WAAWI;QAA2B,GAAGC,SAAS;kBACnEF;;AAGP,EAAE"}
|
|
@@ -9,5 +9,5 @@ export interface FormItemTopLabelProps extends React.AllHTMLAttributes<HTMLEleme
|
|
|
9
9
|
* @since 6.1.0
|
|
10
10
|
*
|
|
11
11
|
*/
|
|
12
|
-
export declare const FormItemTopLabel: ({ children, Component: componentProp, htmlFor, ...restProps }: FormItemTopLabelProps) => import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export declare const FormItemTopLabel: ({ children, Component: componentProp, htmlFor, className, ...restProps }: FormItemTopLabelProps) => import("react/jsx-runtime").JSX.Element;
|
|
13
13
|
//# sourceMappingURL=FormItemTopLabel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormItemTopLabel.d.ts","sourceRoot":"","sources":["../../../../src/components/FormItem/FormItemTop/FormItemTopLabel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAK/D,MAAM,WAAW,qBACf,SAAQ,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAC1C,UAAU,CAAC,WAAW,CAAC,EACvB,YAAY;CAAG;AAEnB;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAAI
|
|
1
|
+
{"version":3,"file":"FormItemTopLabel.d.ts","sourceRoot":"","sources":["../../../../src/components/FormItem/FormItemTop/FormItemTopLabel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAK/D,MAAM,WAAW,qBACf,SAAQ,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAC1C,UAAU,CAAC,WAAW,CAAC,EACvB,YAAY;CAAG;AAEnB;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAAI,0EAM9B,qBAAqB,4CAmBvB,CAAC"}
|
|
@@ -10,11 +10,11 @@ import { FormItemContext } from "../context.js";
|
|
|
10
10
|
*
|
|
11
11
|
* @since 6.1.0
|
|
12
12
|
*
|
|
13
|
-
*/ export const FormItemTopLabel = ({ children, Component: componentProp, htmlFor, ...restProps })=>{
|
|
13
|
+
*/ export const FormItemTopLabel = ({ children, Component: componentProp, htmlFor, className, ...restProps })=>{
|
|
14
14
|
const component = componentProp || htmlFor && 'label' || 'span';
|
|
15
15
|
const { required, topMultiline } = React.useContext(FormItemContext);
|
|
16
16
|
return /*#__PURE__*/ _jsxs(Subhead, {
|
|
17
|
-
className: classNames("vkuiFormItem__label", topMultiline && "vkuiFormItem__labelMultiline"),
|
|
17
|
+
className: classNames(className, "vkuiFormItem__label", topMultiline && "vkuiFormItem__labelMultiline"),
|
|
18
18
|
Component: component,
|
|
19
19
|
htmlFor: htmlFor,
|
|
20
20
|
...restProps,
|