@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.
Files changed (81) hide show
  1. package/dist/components/CellButton/CellButton.d.ts +67 -4
  2. package/dist/components/CellButton/CellButton.d.ts.map +1 -1
  3. package/dist/components/CellButton/CellButton.js +115 -6
  4. package/dist/components/CellButton/CellButton.js.map +1 -1
  5. package/dist/components/Clickable/useState.js +3 -2
  6. package/dist/components/Clickable/useState.js.map +1 -1
  7. package/dist/components/Flex/Flex.d.ts +0 -4
  8. package/dist/components/Flex/Flex.d.ts.map +1 -1
  9. package/dist/components/Flex/Flex.js +2 -9
  10. package/dist/components/Flex/Flex.js.map +1 -1
  11. package/dist/components/Flex/FlexItem/FlexItem.d.ts +4 -11
  12. package/dist/components/Flex/FlexItem/FlexItem.d.ts.map +1 -1
  13. package/dist/components/Flex/FlexItem/FlexItem.js +5 -14
  14. package/dist/components/Flex/FlexItem/FlexItem.js.map +1 -1
  15. package/dist/components/FormItem/FormItemTop/FormItemTopAside.d.ts +1 -1
  16. package/dist/components/FormItem/FormItemTop/FormItemTopAside.d.ts.map +1 -1
  17. package/dist/components/FormItem/FormItemTop/FormItemTopAside.js +3 -2
  18. package/dist/components/FormItem/FormItemTop/FormItemTopAside.js.map +1 -1
  19. package/dist/components/FormItem/FormItemTop/FormItemTopLabel.d.ts +1 -1
  20. package/dist/components/FormItem/FormItemTop/FormItemTopLabel.d.ts.map +1 -1
  21. package/dist/components/FormItem/FormItemTop/FormItemTopLabel.js +2 -2
  22. package/dist/components/FormItem/FormItemTop/FormItemTopLabel.js.map +1 -1
  23. package/dist/components/Input/Input.d.ts +2 -2
  24. package/dist/components/Input/Input.d.ts.map +1 -1
  25. package/dist/components/Input/Input.js +2 -1
  26. package/dist/components/Input/Input.js.map +1 -1
  27. package/dist/components/Search/Search.d.ts +2 -2
  28. package/dist/components/Search/Search.d.ts.map +1 -1
  29. package/dist/components/Search/Search.js +2 -1
  30. package/dist/components/Search/Search.js.map +1 -1
  31. package/dist/components.css +1 -1
  32. package/dist/components.css.map +1 -1
  33. package/dist/cssm/components/CellButton/CellButton.js +115 -7
  34. package/dist/cssm/components/CellButton/CellButton.js.map +1 -1
  35. package/dist/cssm/components/CellButton/CellButton.module.css +165 -7
  36. package/dist/cssm/components/Clickable/useState.js +3 -2
  37. package/dist/cssm/components/Clickable/useState.js.map +1 -1
  38. package/dist/cssm/components/Flex/Flex.js +2 -10
  39. package/dist/cssm/components/Flex/Flex.js.map +1 -1
  40. package/dist/cssm/components/Flex/FlexItem/FlexItem.js +5 -14
  41. package/dist/cssm/components/Flex/FlexItem/FlexItem.js.map +1 -1
  42. package/dist/cssm/components/Flex/FlexItem/FlexItem.module.css +0 -22
  43. package/dist/cssm/components/FormItem/FormItemTop/FormItemTopAside.js +3 -2
  44. package/dist/cssm/components/FormItem/FormItemTop/FormItemTopAside.js.map +1 -1
  45. package/dist/cssm/components/FormItem/FormItemTop/FormItemTopLabel.js +2 -2
  46. package/dist/cssm/components/FormItem/FormItemTop/FormItemTopLabel.js.map +1 -1
  47. package/dist/cssm/components/Input/Input.js +2 -1
  48. package/dist/cssm/components/Input/Input.js.map +1 -1
  49. package/dist/cssm/components/Search/Search.js +2 -1
  50. package/dist/cssm/components/Search/Search.js.map +1 -1
  51. package/dist/cssm/components/SimpleCell/SimpleCell.module.css +3 -5
  52. package/dist/cssm/lib/layouts/layoutProps.js +17 -0
  53. package/dist/cssm/lib/layouts/layoutProps.js.map +1 -1
  54. package/dist/cssm/lib/layouts/types.js.map +1 -1
  55. package/dist/cssm/styles/layout.css +36 -0
  56. package/dist/lib/layouts/layoutProps.d.ts +2 -0
  57. package/dist/lib/layouts/layoutProps.d.ts.map +1 -1
  58. package/dist/lib/layouts/layoutProps.js +17 -0
  59. package/dist/lib/layouts/layoutProps.js.map +1 -1
  60. package/dist/lib/layouts/types.d.ts +12 -0
  61. package/dist/lib/layouts/types.d.ts.map +1 -1
  62. package/dist/lib/layouts/types.js.map +1 -1
  63. package/dist/vkui.css +1 -1
  64. package/dist/vkui.css.map +1 -1
  65. package/package.json +1 -1
  66. package/src/components/CellButton/CellButton.module.css +159 -7
  67. package/src/components/CellButton/CellButton.module.css.d.ts.map +1 -1
  68. package/src/components/CellButton/CellButton.tsx +152 -9
  69. package/src/components/Clickable/useState.tsx +3 -3
  70. package/src/components/Flex/Flex.tsx +0 -15
  71. package/src/components/Flex/FlexItem/FlexItem.module.css +0 -22
  72. package/src/components/Flex/FlexItem/FlexItem.module.css.d.ts.map +1 -1
  73. package/src/components/Flex/FlexItem/FlexItem.tsx +17 -44
  74. package/src/components/FormItem/FormItemTop/FormItemTopAside.tsx +3 -2
  75. package/src/components/FormItem/FormItemTop/FormItemTopLabel.tsx +2 -1
  76. package/src/components/Input/Input.tsx +3 -0
  77. package/src/components/Search/Search.tsx +4 -1
  78. package/src/components/SimpleCell/SimpleCell.module.css +3 -5
  79. package/src/components/SimpleCell/SimpleCell.module.css.d.ts.map +1 -1
  80. package/src/lib/layouts/layoutProps.ts +5 -0
  81. package/src/lib/layouts/types.ts +13 -0
@@ -1,11 +1,71 @@
1
- import { type SimpleCellProps } from '../SimpleCell/SimpleCell';
2
- import '../SimpleCell/SimpleCell.module.css';
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
- export interface CellButtonProps extends SimpleCellProps {
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, className, ...restProps }: CellButtonProps) => React.ReactNode;
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":"AACA,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,qCAAqC,CAAC;AAG7C,eAAO,MAAM,oBAAoB;;;;CAIhC,CAAC;AAEF,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD;;OAEG;IACH,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;IAC/C;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,mDAKxB,eAAe,KAAG,KAAK,CAAC,SAY1B,CAAC"}
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
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { classNames } from "@vkontakte/vkjs";
3
- import { SimpleCell } from "../SimpleCell/SimpleCell.js";
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', className, ...restProps })=>{
12
- return /*#__PURE__*/ _jsx(SimpleCell, {
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
- className: classNames("vkuiCellButton__host", appearanceClassNames[appearance], centered && "vkuiCellButton__centered", className)
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":["import { classNames } from '@vkontakte/vkjs';\nimport { SimpleCell, type SimpleCellProps } from '../SimpleCell/SimpleCell';\nimport '../SimpleCell/SimpleCell.module.css';\nimport styles from './CellButton.module.css';\n\nexport const appearanceClassNames = {\n accent: styles.appearanceAccent,\n neutral: styles.appearanceNeutral,\n negative: styles.appearanceNegative,\n};\n\nexport interface CellButtonProps extends SimpleCellProps {\n /**\n * > Режим `centered` переопределяет токен для темы `\"accent\"`.\n */\n appearance?: 'accent' | 'neutral' | 'negative';\n /**\n * Возможность центрирования содержимого компонента.\n */\n centered?: boolean;\n}\n\n/**\n * @see https://vkui.io/components/cell-button\n */\nexport const CellButton = ({\n centered = false,\n appearance = 'accent',\n className,\n ...restProps\n}: CellButtonProps): React.ReactNode => {\n return (\n <SimpleCell\n {...restProps}\n className={classNames(\n styles.host,\n appearanceClassNames[appearance],\n centered && styles.centered,\n className,\n )}\n />\n );\n};\n"],"names":["classNames","SimpleCell","appearanceClassNames","accent","neutral","negative","CellButton","centered","appearance","className","restProps"],"mappings":";AAAA,SAASA,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,UAAU,QAA8B,8BAA2B;AAI5E,OAAO,MAAMC,uBAAuB;IAClCC,MAAM;IACNC,OAAO;IACPC,QAAQ;AACV,EAAE;AAaF;;CAEC,GACD,OAAO,MAAMC,aAAa,CAAC,EACzBC,WAAW,KAAK,EAChBC,aAAa,QAAQ,EACrBC,SAAS,EACT,GAAGC,WACa;IAChB,qBACE,KAACT;QACE,GAAGS,SAAS;QACbD,WAAWT,mCAETE,oBAAoB,CAACM,WAAW,EAChCD,wCACAE;;AAIR,EAAE"}
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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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":"AAAA,sCAAsC,GAEtC,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,EAAEC,IAAI,QAAQ,kBAAkB;AACnD,SAASC,UAAU,QAAQ,0BAAuB;AAClD,SAASC,iBAAiB,QAAQ,yBAAsB;AAoExD,OAAO,MAAMC,8BAA8B,IAAI;AAE/C,MAAMC,eAAe;AAUrB;;CAEC,GACD,OAAO,SAASC,SAAS,EACvBC,OAAO,EACPC,WAAW,IAAI,EACfC,YAAY,KAAK,EACjBC,qBAAqBT,IAAI,EACX,GAAG,CAAC,CAAC;IACnB,MAAM,CAACU,mBAAmBC,qBAAqB,GAAGb,MAAMc,QAAQ,CAAC;IAEjE,MAAMC,mBAAmBf,MAAMgB,MAAM,CAAsBC;IAE3DjB,MAAMkB,SAAS,CAAC;QACd,IAAI,CAACT,UAAU;YACbI,qBAAqB;YACrBE,iBAAiBI,OAAO,GAAG;YAC3BR,mBAAmB;QACrB;IACF,GAAG;QAACF;QAAUE;KAAmB;IAEjC,MAAMS,cAAcpB,MAAMqB,WAAW,CACnC,CAACC;QACCT,qBAAqBS;QAErB,MAAMC,YACJf,WACAgB,oBAAoB;YAClBC,UAAUhB;YACViB,UAAUhB;YACViB,iBAAiBL;QACnB;QAEF,4DAA4D;QAC5D,qBAAqB;QACrB,IAAIC,cAAcR,iBAAiBI,OAAO,EAAE;YAC1CJ,iBAAiBI,OAAO,GAAGI;YAC3BZ,mBAAmBY;QACrB;IACF,GACA;QAACZ;QAAoBF;QAAUD;QAASE;KAAU;IAGpD,MAAMkB,iBAAiD,CAACC;QACtD,IAAIA,EAAEC,WAAW,KAAK,SAAS;YAC7B;QACF;QAEAV,YAAY;IACd;IAEA,MAAMW,iBAAiB;QACrBX,YAAY;IACd;IAEA,MAAMG,YACJf,WACAgB,oBAAoB;QAClBC,UAAUhB;QACViB,UAAUhB;QACViB,iBAAiBf;IACnB;IAEF,OAAO;QACLW;QACAK,gBAAgBnB,WAAWmB,iBAAiB1B;QAC5C6B,gBAAgBtB,WAAWsB,iBAAiB7B;IAC9C;AACF;AAUA;;CAEC,GACD,SAAS8B,UAAU,EACjBC,SAAS,EACTC,iBAAiB,EACjBC,YAAY,IAAI,EAChBzB,SAAS,EACTC,kBAAkB,EACH;IACf,oFAAoF;IACpF,oEAAoE;IACpE,MAAM,CAACyB,gBAAgBC,aAAa,GAAGjC,kBAA2B,OAAO,GAAGO;IAE5E,+CAA+C;IAC/C,MAAM2B,gBAAgBtC,MAAMgB,MAAM,CAAc;IAChD,IAAIsB,cAAcnB,OAAO,KAAK,MAAM;QAClCmB,cAAcnB,OAAO,GAAG,IAAIoB;IAC9B;IAEAvC,MAAMkB,SAAS,CAAC;QACd,IAAIR,aAAa,CAACyB,WAAW;YAC3B,qEAAqE;YACrEE,aAAa;QACf;IACF,GAAG;QAAC3B;QAAWyB;QAAWE;KAAa;IAEvC,MAAMG,gBAAgB;QACpB,IAAI9B,WAAW;YACb;QACF;QAEA2B,aAAa,MAAM/B;QACnB,gEAAgE;QAChE,0EAA0E;QAC1E,6DAA6D;QAC7D,6FAA6F;QAC7FK,mBAAmB;IACrB;IAEA,MAAM8B,kBAA6C,CAACZ;QAClD,IAAIS,cAAcnB,OAAO,CAAEuB,GAAG,CAACb,EAAEc,SAAS,GAAG;YAC3CL,cAAcnB,OAAO,CAAEyB,MAAM,CAACf,EAAEc,SAAS;YACzC;QACF;QAEAN,aAAa;IACf;IAEA,MAAMQ,cAAyC,CAAChB;QAC9CS,cAAcnB,OAAO,CAAE2B,GAAG,CAACjB,EAAEc,SAAS;QAEtC,IAAIjC,WAAW;YACb;QACF;QAEA2B,aAAa;QACbA,aAAa,OAAOH;IACtB;IAEA,MAAMa,cACJd,aACAT,oBAAoB;QAClBC,UAAUU;QACVT,UAAUhB;QACViB,iBAAiBS;IACnB;IAEF,OAAO;QACLW;QACAhB,gBAAgBI,YAAYM,kBAAkBvC;QAC9CsC,eAAeL,YAAYK,gBAAgBtC;QAC3CuC,iBAAiBN,YAAYM,kBAAkBvC;QAC/C2C,aAAaV,YAAYU,cAAc3C;IACzC;AACF;AAOA,OAAO,MAAM8C,0CACXhD,MAAMiD,aAAa,CAAqC;IACtDC,wBAAwBjC;IACxBkC,yBAAyBlC;AAC3B,GAAG;AAEL;;CAEC,GACD,SAASmC,aACPC,0BAAgD;IAEhD,MAAM,CAAC3C,WAAW4C,aAAa,GAAGtD,MAAMc,QAAQ,CAAC;IAEjD,MAAMyC,gCAAgCvD,MAAMqB,WAAW,CACrD,CAACmC;QACCF,aAAaE;QACbH,2BAA2BG;IAC7B,GACA;QAACH;KAA2B;IAG9B,OAAO;QAAC3C;QAAW2C;QAA4BE;KAA8B;AAC/E;AAEA;;CAEC,GACD,OAAO,SAASzC,SAAS,EACvBN,OAAO,EACPC,QAAQ,EACRwB,SAAS,EACTE,SAAS,EACTD,iBAAiB,EACjBuB,iBAAiB,EACjBC,cAAc,EACdC,eAAe,EACJ;IAKX,MAAM,EAAET,yBAAyBhD,IAAI,EAAEiD,0BAA0BjD,IAAI,EAAE,GACrEF,MAAM4D,UAAU,CAACZ;IAEnB,MAAM,CAACa,gBAAgBC,iCAAiCC,8BAA8B,GACpFX,aAAaK,oBAAoBvD,OAAOgD;IAC1C,MAAM,CAACc,iBAAiBC,kCAAkCC,+BAA+B,GACvFd,aAAaD;IAEf,MAAM,EAAE5B,SAAS,EAAE,GAAG4C,YAAY,GAAG5D,SAAS;QAC5CE;QACAD;QACAE,WAAWmD;QACXlD,oBAAoBmD;IACtB;IAEA,MAAM,EAAEf,WAAW,EAAE,GAAGqB,aAAa,GAAGpC,UAAU;QAChDC;QACAE;QACAD;QACAxB,WAAWsD;QACXrD,oBAAoBsD;IACtB;IAEA,MAAMI,iBAAiBpE,WAAWsB,aAAamC,gBAAgBX,eAAeY;IAC9E,MAAMW,WAAWnE,WAAWgE,YAAYC;IAExC,OAAO;QACLC;QACAN;QACAG;QACA,GAAGI,QAAQ;IACb;AACF;AAEA,mEAAmE;AACnE,SAAS9C,oBAAoB,EAC3BC,QAAQ,EACRC,QAAQ,EACRC,eAAe,EAKhB;IACC,OAAOF,YAAY,CAACC,YAAYC;AAClC"}
@@ -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;AAInE,YAAY,EAAE,aAAa,EAAE,CAAC;AAgC9B,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,SAAS,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;IAChE;;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;CAkCvB,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, alignSelf, display = 'flex', ...restProps })=>{
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], alignSelf && alignSelfClassNames[alignSelf], justify && justifyClassNames[justify], getGapsPresets(rowGap, columnGap), display !== 'flex' && displayClassNames[display]),
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';\nimport flexItemStyles from './FlexItem/FlexItem.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 alignSelfClassNames = {\n start: flexItemStyles.alignSelfStart,\n end: flexItemStyles.alignSelfEnd,\n center: flexItemStyles.alignSelfCenter,\n baseline: flexItemStyles.alignSelfBaseline,\n stretch: flexItemStyles.alignSelfStretch,\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 * Для задания выравнивания, отличного от установленного на родителе, эквивалентно `align-self`.\n */\n alignSelf?: 'start' | 'end' | 'center' | 'baseline' | 'stretch';\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 alignSelf,\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 alignSelf && alignSelfClassNames[alignSelf],\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","alignSelfClassNames","displayClassNames","Flex","gap","align","justify","margin","noWrap","direction","reverse","alignSelf","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;AAMnE,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,sBAAsB;IAC1BL,KAAK;IACLC,GAAG;IACHC,MAAM;IACNE,QAAQ;IACRD,OAAO;AACT;AAEA,MAAMG,oBAAoB;IACxB,MAAM;IACN,aAAa;AACf;AAmDA;;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,SAAS,EACTC,UAAU,MAAM,EAChB,GAAGC,WACO;IACV,MAAM,CAACC,QAAQC,UAAU,GAAG3B,aAAagB;IACzC,MAAMY,gBAAgB1B,mBAAmBuB;IAEzC,qBACE,KAACrB;QACCyB,eAAe9B,6BAEb,CAACqB,4BACDE,gCACAD,cAAc,sCACdF,WAAW,kCACXF,SAASV,eAAe,CAACU,MAAM,EAC/BM,aAAaV,mBAAmB,CAACU,UAAU,EAC3CL,WAAWZ,iBAAiB,CAACY,QAAQ,EACrCY,eAAeJ,QAAQC,YACvBH,YAAY,UAAUV,iBAAiB,CAACU,QAAQ;QAElDO,WAAWC,cAAcN,QAAQC;QAChC,GAAGC,aAAa;;AAGvB,EAAE;AAEF,SAASE,eAAeJ,MAAe,EAAEC,SAAkB;IACzD,OAAO5B,WACL,OAAO2B,WAAW,YAAYvB,gBAAgB,CAACuB,OAAO,EACtD,OAAOC,cAAc,YAAY1B,mBAAmB,CAAC0B,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;AAEAlB,KAAKmB,IAAI,GAAG7B"}
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 interface FlexItemProps extends RootComponentProps<HTMLElement> {
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
- * Изначальный размер элемента, эквивалентно `flex-basis`.
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":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAkB5E,MAAM,WAAW,aAAc,SAAQ,kBAAkB,CAAC,WAAW,CAAC;IACpE;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;IAChE;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;IAC/C;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC7B;AAID,eAAO,MAAM,QAAQ,GAAI,8CAKtB,aAAa,KAAG,KAAK,CAAC,SAexB,CAAC"}
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 { classNames } from "@vkontakte/vkjs";
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 = ({ alignSelf, flex, flexBasis, ...restProps })=>{
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
- baseStyle: {
25
- flexBasis
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 { classNames } from '@vkontakte/vkjs';\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\nconst alignSelfClassNames = {\n start: styles.alignSelfStart,\n end: styles.alignSelfEnd,\n center: styles.alignSelfCenter,\n baseline: styles.alignSelfBaseline,\n stretch: styles.alignSelfStretch,\n};\n\nexport interface FlexItemProps extends RootComponentProps<HTMLElement> {\n /**\n * Для задания выравнивания, отлично от родительского, эквивалентно `align-self`.\n */\n alignSelf?: 'start' | 'end' | 'center' | 'baseline' | 'stretch';\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 * Изначальный размер элемента, эквивалентно `flex-basis`.\n */\n flexBasis?: number | string;\n}\n\nconst warn = warnOnce('Flex.Item');\n\nexport const FlexItem = ({\n alignSelf,\n flex,\n flexBasis,\n ...restProps\n}: FlexItemProps): React.ReactNode => {\n if (process.env.NODE_ENV === 'development') {\n warn('Компонент Flex.Item устарел, используйте компонент Box в качестве альтернативы.');\n }\n\n return (\n <RootComponent\n baseStyle={{ flexBasis }}\n baseClassName={classNames(\n alignSelf && alignSelfClassNames[alignSelf],\n flex && flexClassNames[flex],\n )}\n {...restProps}\n />\n );\n};\n"],"names":["classNames","warnOnce","RootComponent","flexClassNames","grow","shrink","content","fixed","alignSelfClassNames","start","end","center","baseline","stretch","warn","FlexItem","alignSelf","flex","flexBasis","restProps","process","env","NODE_ENV","baseStyle","baseClassName"],"mappings":";AAAA,SAASA,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,QAAQ,QAAQ,2BAAwB;AACjD,SAASC,aAAa,QAAQ,uCAAoC;AAIlE,MAAMC,iBAAiB;IACrBC,IAAI;IACJC,MAAM;IACNC,OAAO;IACPC,KAAK;AACP;AAEA,MAAMC,sBAAsB;IAC1BC,KAAK;IACLC,GAAG;IACHC,MAAM;IACNC,QAAQ;IACRC,OAAO;AACT;AAsBA,MAAMC,OAAOb,SAAS;AAEtB,OAAO,MAAMc,WAAW,CAAC,EACvBC,SAAS,EACTC,IAAI,EACJC,SAAS,EACT,GAAGC,WACW;IACd,IAAIC,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;QAC1CR,KAAK;IACP;IAEA,qBACE,KAACZ;QACCqB,WAAW;YAAEL;QAAU;QACvBM,eAAexB,WACbgB,aAAaR,mBAAmB,CAACQ,UAAU,EAC3CC,QAAQd,cAAc,CAACc,KAAK;QAE7B,GAAGE,SAAS;;AAGnB,EAAE"}
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;AACpC,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,4BAA4B,qBAAqB,4CAMjF,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","restProps","className"],"mappings":";AAEA,SAASA,OAAO,QAAQ,sCAAmC;AAQ3D;;;;;CAKC,GACD,OAAO,MAAMC,mBAAmB,CAAC,EAAEC,QAAQ,EAAE,GAAGC,WAAkC;IAChF,qBACE,KAACH;QAAQI,SAAS;QAAiB,GAAGD,SAAS;kBAC5CD;;AAGP,EAAE"}
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,+DAK9B,qBAAqB,4CAmBvB,CAAC"}
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,