@vkontakte/vkui 5.6.2 → 5.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/dist/cjs/components/ActionSheet/ActionSheet.d.ts +4 -4
  2. package/dist/cjs/components/ActionSheet/ActionSheet.js +14 -4
  3. package/dist/cjs/components/ActionSheet/ActionSheet.js.map +1 -1
  4. package/dist/cjs/components/ActionSheet/ActionSheetDropdown.d.ts +1 -1
  5. package/dist/cjs/components/ActionSheet/ActionSheetDropdown.js.map +1 -1
  6. package/dist/cjs/components/ActionSheet/ActionSheetDropdownDesktop.d.ts +1 -1
  7. package/dist/cjs/components/ActionSheet/ActionSheetDropdownDesktop.js +5 -3
  8. package/dist/cjs/components/ActionSheet/ActionSheetDropdownDesktop.js.map +1 -1
  9. package/dist/cjs/components/ActionSheet/types.d.ts +9 -0
  10. package/dist/cjs/components/ActionSheet/types.js.map +1 -1
  11. package/dist/cjs/components/Alert/Alert.d.ts +8 -3
  12. package/dist/cjs/components/Alert/Alert.js +16 -96
  13. package/dist/cjs/components/Alert/Alert.js.map +1 -1
  14. package/dist/cjs/components/Alert/AlertAction.d.ts +8 -0
  15. package/dist/cjs/components/Alert/AlertAction.js +52 -0
  16. package/dist/cjs/components/Alert/AlertAction.js.map +1 -0
  17. package/dist/cjs/components/Alert/AlertActions.d.ts +8 -0
  18. package/dist/cjs/components/Alert/AlertActions.js +54 -0
  19. package/dist/cjs/components/Alert/AlertActions.js.map +1 -0
  20. package/dist/cjs/components/Alert/AlertTypography.d.ts +8 -0
  21. package/dist/cjs/components/Alert/AlertTypography.js +65 -0
  22. package/dist/cjs/components/Alert/AlertTypography.js.map +1 -0
  23. package/dist/cjs/components/NativeSelect/NativeSelect.js +3 -1
  24. package/dist/cjs/components/NativeSelect/NativeSelect.js.map +1 -1
  25. package/dist/cjs/components/PopoutWrapper/PopoutWrapper.js +1 -1
  26. package/dist/cjs/components/PopoutWrapper/PopoutWrapper.js.map +1 -1
  27. package/dist/cjs/components/Popover/Popover.js +1 -1
  28. package/dist/cjs/components/Popover/Popover.js.map +1 -1
  29. package/dist/cjs/components/PopperArrow/PopperArrow.d.ts +1 -2
  30. package/dist/cjs/components/PopperArrow/PopperArrow.js.map +1 -1
  31. package/dist/cjs/components/Progress/Progress.d.ts +5 -1
  32. package/dist/cjs/components/Progress/Progress.js +18 -3
  33. package/dist/cjs/components/Progress/Progress.js.map +1 -1
  34. package/dist/cjs/components/Root/Root.js +4 -4
  35. package/dist/cjs/components/Search/Search.d.ts +5 -1
  36. package/dist/cjs/components/Search/Search.js +10 -4
  37. package/dist/cjs/components/Search/Search.js.map +1 -1
  38. package/dist/cjs/components/Snackbar/Snackbar.d.ts +5 -1
  39. package/dist/cjs/components/Snackbar/Snackbar.js +8 -3
  40. package/dist/cjs/components/Snackbar/Snackbar.js.map +1 -1
  41. package/dist/cjs/components/SubnavigationButton/SubnavigationButton.d.ts +2 -1
  42. package/dist/cjs/components/SubnavigationButton/SubnavigationButton.js +17 -10
  43. package/dist/cjs/components/SubnavigationButton/SubnavigationButton.js.map +1 -1
  44. package/dist/cjs/components/Tooltip/Tooltip.d.ts +3 -37
  45. package/dist/cjs/components/Tooltip/Tooltip.js +14 -39
  46. package/dist/cjs/components/Tooltip/Tooltip.js.map +1 -1
  47. package/dist/cjs/components/TooltipBase/TooltipBase.d.ts +49 -0
  48. package/dist/cjs/components/TooltipBase/TooltipBase.js +58 -0
  49. package/dist/cjs/components/TooltipBase/TooltipBase.js.map +1 -0
  50. package/dist/cjs/components/View/View.js +4 -4
  51. package/dist/cjs/components/View/ViewInfinite.js +4 -4
  52. package/dist/components/ActionSheet/ActionSheet.d.ts +4 -4
  53. package/dist/components/ActionSheet/ActionSheet.js +14 -4
  54. package/dist/components/ActionSheet/ActionSheet.js.map +1 -1
  55. package/dist/components/ActionSheet/ActionSheetDropdown.d.ts +1 -1
  56. package/dist/components/ActionSheet/ActionSheetDropdown.js.map +1 -1
  57. package/dist/components/ActionSheet/ActionSheetDropdownDesktop.d.ts +1 -1
  58. package/dist/components/ActionSheet/ActionSheetDropdownDesktop.js +5 -3
  59. package/dist/components/ActionSheet/ActionSheetDropdownDesktop.js.map +1 -1
  60. package/dist/components/ActionSheet/types.d.ts +9 -0
  61. package/dist/components/ActionSheet/types.js.map +1 -1
  62. package/dist/components/Alert/Alert.d.ts +8 -3
  63. package/dist/components/Alert/Alert.js +14 -94
  64. package/dist/components/Alert/Alert.js.map +1 -1
  65. package/dist/components/Alert/AlertAction.d.ts +8 -0
  66. package/dist/components/Alert/AlertAction.js +41 -0
  67. package/dist/components/Alert/AlertAction.js.map +1 -0
  68. package/dist/components/Alert/AlertActions.d.ts +8 -0
  69. package/dist/components/Alert/AlertActions.js +43 -0
  70. package/dist/components/Alert/AlertActions.js.map +1 -0
  71. package/dist/components/Alert/AlertTypography.d.ts +8 -0
  72. package/dist/components/Alert/AlertTypography.js +46 -0
  73. package/dist/components/Alert/AlertTypography.js.map +1 -0
  74. package/dist/components/NativeSelect/NativeSelect.js +3 -1
  75. package/dist/components/NativeSelect/NativeSelect.js.map +1 -1
  76. package/dist/components/PopoutWrapper/PopoutWrapper.js +1 -1
  77. package/dist/components/PopoutWrapper/PopoutWrapper.js.map +1 -1
  78. package/dist/components/Popover/Popover.js +1 -1
  79. package/dist/components/Popover/Popover.js.map +1 -1
  80. package/dist/components/PopperArrow/PopperArrow.d.ts +1 -2
  81. package/dist/components/PopperArrow/PopperArrow.js.map +1 -1
  82. package/dist/components/Progress/Progress.d.ts +5 -1
  83. package/dist/components/Progress/Progress.js +18 -3
  84. package/dist/components/Progress/Progress.js.map +1 -1
  85. package/dist/components/Root/Root.js +4 -4
  86. package/dist/components/Search/Search.d.ts +5 -1
  87. package/dist/components/Search/Search.js +10 -4
  88. package/dist/components/Search/Search.js.map +1 -1
  89. package/dist/components/Snackbar/Snackbar.d.ts +5 -1
  90. package/dist/components/Snackbar/Snackbar.js +8 -3
  91. package/dist/components/Snackbar/Snackbar.js.map +1 -1
  92. package/dist/components/SubnavigationButton/SubnavigationButton.d.ts +2 -1
  93. package/dist/components/SubnavigationButton/SubnavigationButton.js +17 -10
  94. package/dist/components/SubnavigationButton/SubnavigationButton.js.map +1 -1
  95. package/dist/components/Tooltip/Tooltip.d.ts +3 -37
  96. package/dist/components/Tooltip/Tooltip.js +15 -40
  97. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  98. package/dist/components/TooltipBase/TooltipBase.d.ts +49 -0
  99. package/dist/components/TooltipBase/TooltipBase.js +51 -0
  100. package/dist/components/TooltipBase/TooltipBase.js.map +1 -0
  101. package/dist/components/View/View.js +4 -4
  102. package/dist/components/View/ViewInfinite.js +4 -4
  103. package/dist/components.css +10 -9
  104. package/dist/components.css.map +1 -1
  105. package/dist/components.js.tmp +1490 -1085
  106. package/dist/cssm/components/ActionSheet/ActionSheet.d.ts +4 -4
  107. package/dist/cssm/components/ActionSheet/ActionSheet.js +12 -3
  108. package/dist/cssm/components/ActionSheet/ActionSheet.js.map +1 -1
  109. package/dist/cssm/components/ActionSheet/ActionSheet.module.css +0 -1
  110. package/dist/cssm/components/ActionSheet/ActionSheetDropdown.d.ts +1 -1
  111. package/dist/cssm/components/ActionSheet/ActionSheetDropdown.js.map +1 -1
  112. package/dist/cssm/components/ActionSheet/ActionSheetDropdownDesktop.d.ts +1 -1
  113. package/dist/cssm/components/ActionSheet/ActionSheetDropdownDesktop.js +3 -2
  114. package/dist/cssm/components/ActionSheet/ActionSheetDropdownDesktop.js.map +1 -1
  115. package/dist/cssm/components/ActionSheet/types.d.ts +9 -0
  116. package/dist/cssm/components/ActionSheet/types.js.map +1 -1
  117. package/dist/cssm/components/Alert/Alert.d.ts +8 -3
  118. package/dist/cssm/components/Alert/Alert.js +11 -87
  119. package/dist/cssm/components/Alert/Alert.js.map +1 -1
  120. package/dist/cssm/components/Alert/Alert.module.css +36 -30
  121. package/dist/cssm/components/Alert/AlertAction.d.ts +8 -0
  122. package/dist/cssm/components/Alert/AlertAction.js +36 -0
  123. package/dist/cssm/components/Alert/AlertAction.js.map +1 -0
  124. package/dist/cssm/components/Alert/AlertActions.d.ts +8 -0
  125. package/dist/cssm/components/Alert/AlertActions.js +34 -0
  126. package/dist/cssm/components/Alert/AlertActions.js.map +1 -0
  127. package/dist/cssm/components/Alert/AlertTypography.d.ts +8 -0
  128. package/dist/cssm/components/Alert/AlertTypography.js +51 -0
  129. package/dist/cssm/components/Alert/AlertTypography.js.map +1 -0
  130. package/dist/cssm/components/Button/Button.module.css +1 -1
  131. package/dist/cssm/components/Link/Link.module.css +1 -0
  132. package/dist/cssm/components/NativeSelect/NativeSelect.js +3 -1
  133. package/dist/cssm/components/NativeSelect/NativeSelect.js.map +1 -1
  134. package/dist/cssm/components/PopoutWrapper/PopoutWrapper.module.css +1 -0
  135. package/dist/cssm/components/Popover/Popover.js +1 -1
  136. package/dist/cssm/components/Popover/Popover.js.map +1 -1
  137. package/dist/cssm/components/Popover/Popover.module.css +4 -0
  138. package/dist/cssm/components/PopperArrow/PopperArrow.d.ts +1 -2
  139. package/dist/cssm/components/PopperArrow/PopperArrow.js.map +1 -1
  140. package/dist/cssm/components/Progress/Progress.d.ts +5 -1
  141. package/dist/cssm/components/Progress/Progress.js +17 -1
  142. package/dist/cssm/components/Progress/Progress.js.map +1 -1
  143. package/dist/cssm/components/Search/Search.d.ts +5 -1
  144. package/dist/cssm/components/Search/Search.js +8 -3
  145. package/dist/cssm/components/Search/Search.js.map +1 -1
  146. package/dist/cssm/components/Search/Search.module.css +4 -1
  147. package/dist/cssm/components/Snackbar/Snackbar.d.ts +5 -1
  148. package/dist/cssm/components/Snackbar/Snackbar.js +6 -2
  149. package/dist/cssm/components/Snackbar/Snackbar.js.map +1 -1
  150. package/dist/cssm/components/SubnavigationButton/SubnavigationButton.d.ts +2 -1
  151. package/dist/cssm/components/SubnavigationButton/SubnavigationButton.js +16 -10
  152. package/dist/cssm/components/SubnavigationButton/SubnavigationButton.js.map +1 -1
  153. package/dist/cssm/components/SubnavigationButton/SubnavigationButton.module.css +25 -4
  154. package/dist/cssm/components/Tooltip/Tooltip.d.ts +3 -37
  155. package/dist/cssm/components/Tooltip/Tooltip.js +13 -33
  156. package/dist/cssm/components/Tooltip/Tooltip.js.map +1 -1
  157. package/dist/cssm/components/Tooltip/Tooltip.module.css +3 -53
  158. package/dist/cssm/components/TooltipBase/TooltipBase.d.ts +49 -0
  159. package/dist/cssm/components/TooltipBase/TooltipBase.js +37 -0
  160. package/dist/cssm/components/TooltipBase/TooltipBase.js.map +1 -0
  161. package/dist/cssm/components/TooltipBase/TooltipBase.module.css +57 -0
  162. package/dist/vkui.css +10 -9
  163. package/dist/vkui.css.map +1 -1
  164. package/dist/vkui.js.tmp +1490 -1085
  165. package/package.json +1 -1
@@ -56,10 +56,10 @@ var ViewInfiniteComponent = /*#__PURE__*/ function(_superClass) {
56
56
  _define_property._(_assert_this_initialized._(_this), "panelNodes", {});
57
57
  _define_property._(_assert_this_initialized._(_this), "transitionEndHandler", function(e) {
58
58
  if ((!e || [
59
- "vkui-animation-ios-next-forward",
60
- "vkui-animation-ios-prev-back",
61
- "vkui-animation-view-next-forward",
62
- "vkui-animation-view-prev-back"
59
+ "vkuivkui-animation-ios-next-forward",
60
+ "vkuivkui-animation-ios-prev-back",
61
+ "vkuivkui-animation-view-next-forward",
62
+ "vkuivkui-animation-view-prev-back"
63
63
  ].includes(e.animationName)) && _this.state.prevPanel !== null) {
64
64
  _this.flushTransition(_this.state.prevPanel, Boolean(_this.state.isBack));
65
65
  }
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { SharedDropdownProps } from './types';
3
- export interface ActionSheetProps extends Pick<SharedDropdownProps, 'toggleRef' | 'popupDirection' | 'popupOffsetDistance'>, React.HTMLAttributes<HTMLDivElement> {
3
+ export interface ActionSheetProps extends Pick<SharedDropdownProps, 'toggleRef' | 'popupDirection' | 'popupOffsetDistance' | 'placement'>, React.HTMLAttributes<HTMLDivElement> {
4
4
  header?: React.ReactNode;
5
5
  text?: React.ReactNode;
6
6
  /**
@@ -8,11 +8,11 @@ export interface ActionSheetProps extends Pick<SharedDropdownProps, 'toggleRef'
8
8
  */
9
9
  onClose: VoidFunction;
10
10
  /**
11
- * Только iOS.
11
+ * Только мобильный iOS.
12
12
  */
13
- iosCloseItem: React.ReactNode;
13
+ iosCloseItem?: React.ReactNode;
14
14
  }
15
15
  /**
16
16
  * @see https://vkcom.github.io/VKUI/#/ActionSheet
17
17
  */
18
- export declare const ActionSheet: ({ children, className, header, text, style, iosCloseItem, popupDirection, popupOffsetDistance, ...restProps }: ActionSheetProps) => React.JSX.Element;
18
+ export declare const ActionSheet: ({ children, className, header, text, style, iosCloseItem, popupDirection, popupOffsetDistance, placement, ...restProps }: ActionSheetProps) => React.JSX.Element;
@@ -9,16 +9,19 @@ import { useObjectMemo } from "../../hooks/useObjectMemo";
9
9
  import { usePlatform } from "../../hooks/usePlatform";
10
10
  import { useTimeout } from "../../hooks/useTimeout";
11
11
  import { Platform } from "../../lib/platform";
12
+ import { warnOnce } from "../../lib/warnOnce";
12
13
  import { useScrollLock } from "../AppRoot/ScrollContext";
13
14
  import { PopoutWrapper } from "../PopoutWrapper/PopoutWrapper";
14
15
  import { Footnote } from "../Typography/Footnote/Footnote";
15
16
  import { ActionSheetContext } from "./ActionSheetContext";
17
+ import { ActionSheetDefaultIosCloseItem } from "./ActionSheetDefaultIosCloseItem";
16
18
  import { ActionSheetDropdown } from "./ActionSheetDropdown";
17
19
  import { ActionSheetDropdownDesktop } from "./ActionSheetDropdownDesktop";
20
+ var warn = warnOnce("ActionSheet");
18
21
  /**
19
22
  * @see https://vkcom.github.io/VKUI/#/ActionSheet
20
23
  */ export var ActionSheet = function(_param) {
21
- var children = _param.children, className = _param.className, header = _param.header, text = _param.text, style = _param.style, iosCloseItem = _param.iosCloseItem, _param_popupDirection = _param.popupDirection, popupDirection = _param_popupDirection === void 0 ? "bottom" : _param_popupDirection, popupOffsetDistance = _param.popupOffsetDistance, restProps = _object_without_properties(_param, [
24
+ var children = _param.children, className = _param.className, header = _param.header, text = _param.text, style = _param.style, iosCloseItem = _param.iosCloseItem, popupDirection = _param.popupDirection, popupOffsetDistance = _param.popupOffsetDistance, placement = _param.placement, restProps = _object_without_properties(_param, [
22
25
  "children",
23
26
  "className",
24
27
  "header",
@@ -26,7 +29,8 @@ import { ActionSheetDropdownDesktop } from "./ActionSheetDropdownDesktop";
26
29
  "style",
27
30
  "iosCloseItem",
28
31
  "popupDirection",
29
- "popupOffsetDistance"
32
+ "popupOffsetDistance",
33
+ "placement"
30
34
  ]);
31
35
  var platform = usePlatform();
32
36
  var _React_useState = _sliced_to_array(React.useState(false), 2), closing = _React_useState[0], setClosing = _React_useState[1];
@@ -75,9 +79,15 @@ import { ActionSheetDropdownDesktop } from "./ActionSheetDropdownDesktop";
75
79
  isDesktop: isDesktop
76
80
  });
77
81
  var DropdownComponent = isDesktop ? ActionSheetDropdownDesktop : ActionSheetDropdown;
82
+ if (process.env.NODE_ENV === "development" && popupDirection) {
83
+ // TODO [>=6]: popupDirection
84
+ warn('Свойство "popupDirection" будет удалено в v6. Используйте свойство "placement"');
85
+ }
86
+ popupDirection = popupDirection !== undefined ? popupDirection : "bottom";
78
87
  var dropdownProps = isDesktop ? Object.assign(restProps, {
79
88
  popupOffsetDistance: popupOffsetDistance,
80
- popupDirection: popupDirection
89
+ popupDirection: popupDirection,
90
+ placement: placement
81
91
  }) : restProps;
82
92
  var actionSheet = /*#__PURE__*/ React.createElement(ActionSheetContext.Provider, {
83
93
  value: contextValue
@@ -95,7 +105,7 @@ import { ActionSheetDropdownDesktop } from "./ActionSheetDropdownDesktop";
95
105
  className: "vkuiActionSheet__title"
96
106
  }, header), text && /*#__PURE__*/ React.createElement(Footnote, {
97
107
  className: "vkuiActionSheet__text"
98
- }, text)), children, platform === Platform.IOS && !isDesktop && iosCloseItem));
108
+ }, text)), children, platform === Platform.IOS && !isDesktop && (iosCloseItem !== null && iosCloseItem !== void 0 ? iosCloseItem : /*#__PURE__*/ React.createElement(ActionSheetDefaultIosCloseItem, null))));
99
109
  if (isDesktop) {
100
110
  return actionSheet;
101
111
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/ActionSheet/ActionSheet.tsx"],"sourcesContent":["import * as React from 'react';\nimport { noop } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { useObjectMemo } from '../../hooks/useObjectMemo';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useTimeout } from '../../hooks/useTimeout';\nimport { Platform } from '../../lib/platform';\nimport { useScrollLock } from '../AppRoot/ScrollContext';\nimport { PopoutWrapper } from '../PopoutWrapper/PopoutWrapper';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { ActionSheetContext, ItemClickHandler } from './ActionSheetContext';\nimport { ActionSheetDropdown } from './ActionSheetDropdown';\nimport { ActionSheetDropdownDesktop } from './ActionSheetDropdownDesktop';\nimport { SharedDropdownProps } from './types';\nimport styles from './ActionSheet.module.css';\n\nexport interface ActionSheetProps\n extends Pick<SharedDropdownProps, 'toggleRef' | 'popupDirection' | 'popupOffsetDistance'>,\n React.HTMLAttributes<HTMLDivElement> {\n header?: React.ReactNode;\n text?: React.ReactNode;\n /**\n * Закрыть попап по клику снаружи.\n */\n onClose: VoidFunction;\n /**\n * Только iOS.\n */\n iosCloseItem: React.ReactNode;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ActionSheet\n */\nexport const ActionSheet = ({\n children,\n className,\n header,\n text,\n style,\n iosCloseItem,\n popupDirection = 'bottom',\n popupOffsetDistance,\n ...restProps\n}: ActionSheetProps) => {\n const platform = usePlatform();\n const [closing, setClosing] = React.useState(false);\n const onClose = () => setClosing(true);\n const _action = React.useRef(noop);\n\n const afterClose = () => {\n restProps.onClose();\n _action.current();\n _action.current = noop;\n };\n\n const { isDesktop } = useAdaptivityWithJSMediaQueries();\n\n useScrollLock(!isDesktop);\n\n let timeout = platform === Platform.IOS ? 300 : 200;\n\n if (isDesktop) {\n timeout = 0;\n }\n\n const fallbackTransitionFinish = useTimeout(afterClose, timeout);\n React.useEffect(() => {\n if (closing) {\n fallbackTransitionFinish.set();\n } else {\n fallbackTransitionFinish.clear();\n }\n }, [closing, fallbackTransitionFinish]);\n\n const onItemClick = React.useCallback<ItemClickHandler>(\n (action, immediateAction, autoClose) => (event) => {\n event.persist();\n immediateAction && immediateAction(event);\n if (autoClose) {\n _action.current = () => action && action(event);\n setClosing(true);\n } else {\n action && action(event);\n }\n },\n [],\n );\n const contextValue = useObjectMemo({ onItemClick, isDesktop });\n\n const DropdownComponent = isDesktop ? ActionSheetDropdownDesktop : ActionSheetDropdown;\n\n const dropdownProps = isDesktop\n ? Object.assign(restProps, { popupOffsetDistance, popupDirection })\n : restProps;\n\n const actionSheet = (\n <ActionSheetContext.Provider value={contextValue}>\n <DropdownComponent\n closing={closing}\n timeout={timeout}\n {...dropdownProps}\n onClose={onClose}\n className={isDesktop ? className : undefined}\n style={isDesktop ? style : undefined}\n >\n {(header || text) && (\n <header className={styles['ActionSheet__header']}>\n {header && (\n <Footnote weight=\"2\" className={styles['ActionSheet__title']}>\n {header}\n </Footnote>\n )}\n {text && <Footnote className={styles['ActionSheet__text']}>{text}</Footnote>}\n </header>\n )}\n {children}\n {platform === Platform.IOS && !isDesktop && iosCloseItem}\n </DropdownComponent>\n </ActionSheetContext.Provider>\n );\n\n if (isDesktop) {\n return actionSheet;\n }\n\n return (\n <PopoutWrapper\n closing={closing}\n alignY=\"bottom\"\n className={className}\n style={style}\n onClick={onClose}\n hasMask\n fixed\n >\n {actionSheet}\n </PopoutWrapper>\n );\n};\n"],"names":["React","noop","useAdaptivityWithJSMediaQueries","useObjectMemo","usePlatform","useTimeout","Platform","useScrollLock","PopoutWrapper","Footnote","ActionSheetContext","ActionSheetDropdown","ActionSheetDropdownDesktop","ActionSheet","children","className","header","text","style","iosCloseItem","popupDirection","popupOffsetDistance","restProps","platform","useState","closing","setClosing","onClose","_action","useRef","afterClose","current","isDesktop","timeout","IOS","fallbackTransitionFinish","useEffect","set","clear","onItemClick","useCallback","action","immediateAction","autoClose","event","persist","contextValue","DropdownComponent","dropdownProps","Object","assign","actionSheet","Provider","value","undefined","weight","alignY","onClick","hasMask","fixed"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/ActionSheet/ActionSheet.tsx"],"sourcesContent":["import * as React from 'react';\nimport { noop } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { useObjectMemo } from '../../hooks/useObjectMemo';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useTimeout } from '../../hooks/useTimeout';\nimport { Platform } from '../../lib/platform';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { useScrollLock } from '../AppRoot/ScrollContext';\nimport { PopoutWrapper } from '../PopoutWrapper/PopoutWrapper';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { ActionSheetContext, ItemClickHandler } from './ActionSheetContext';\nimport { ActionSheetDefaultIosCloseItem } from './ActionSheetDefaultIosCloseItem';\nimport { ActionSheetDropdown } from './ActionSheetDropdown';\nimport { ActionSheetDropdownDesktop } from './ActionSheetDropdownDesktop';\nimport { SharedDropdownProps } from './types';\nimport styles from './ActionSheet.module.css';\n\nconst warn = warnOnce('ActionSheet');\n\nexport interface ActionSheetProps\n extends Pick<\n SharedDropdownProps,\n 'toggleRef' | 'popupDirection' | 'popupOffsetDistance' | 'placement'\n >,\n React.HTMLAttributes<HTMLDivElement> {\n header?: React.ReactNode;\n text?: React.ReactNode;\n /**\n * Закрыть попап по клику снаружи.\n */\n onClose: VoidFunction;\n /**\n * Только мобильный iOS.\n */\n iosCloseItem?: React.ReactNode;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ActionSheet\n */\nexport const ActionSheet = ({\n children,\n className,\n header,\n text,\n style,\n iosCloseItem,\n popupDirection,\n popupOffsetDistance,\n placement,\n ...restProps\n}: ActionSheetProps) => {\n const platform = usePlatform();\n const [closing, setClosing] = React.useState(false);\n const onClose = () => setClosing(true);\n const _action = React.useRef(noop);\n\n const afterClose = () => {\n restProps.onClose();\n _action.current();\n _action.current = noop;\n };\n\n const { isDesktop } = useAdaptivityWithJSMediaQueries();\n\n useScrollLock(!isDesktop);\n\n let timeout = platform === Platform.IOS ? 300 : 200;\n\n if (isDesktop) {\n timeout = 0;\n }\n\n const fallbackTransitionFinish = useTimeout(afterClose, timeout);\n React.useEffect(() => {\n if (closing) {\n fallbackTransitionFinish.set();\n } else {\n fallbackTransitionFinish.clear();\n }\n }, [closing, fallbackTransitionFinish]);\n\n const onItemClick = React.useCallback<ItemClickHandler>(\n (action, immediateAction, autoClose) => (event) => {\n event.persist();\n immediateAction && immediateAction(event);\n if (autoClose) {\n _action.current = () => action && action(event);\n setClosing(true);\n } else {\n action && action(event);\n }\n },\n [],\n );\n const contextValue = useObjectMemo({ onItemClick, isDesktop });\n\n const DropdownComponent = isDesktop ? ActionSheetDropdownDesktop : ActionSheetDropdown;\n\n if (process.env.NODE_ENV === 'development' && popupDirection) {\n // TODO [>=6]: popupDirection\n warn('Свойство \"popupDirection\" будет удалено в v6. Используйте свойство \"placement\"');\n }\n\n popupDirection = popupDirection !== undefined ? popupDirection : 'bottom';\n\n const dropdownProps = isDesktop\n ? Object.assign(restProps, { popupOffsetDistance, popupDirection, placement })\n : restProps;\n\n const actionSheet = (\n <ActionSheetContext.Provider value={contextValue}>\n <DropdownComponent\n closing={closing}\n timeout={timeout}\n {...dropdownProps}\n onClose={onClose}\n className={isDesktop ? className : undefined}\n style={isDesktop ? style : undefined}\n >\n {(header || text) && (\n <header className={styles['ActionSheet__header']}>\n {header && (\n <Footnote weight=\"2\" className={styles['ActionSheet__title']}>\n {header}\n </Footnote>\n )}\n {text && <Footnote className={styles['ActionSheet__text']}>{text}</Footnote>}\n </header>\n )}\n {children}\n {platform === Platform.IOS &&\n !isDesktop &&\n (iosCloseItem ?? <ActionSheetDefaultIosCloseItem />)}\n </DropdownComponent>\n </ActionSheetContext.Provider>\n );\n\n if (isDesktop) {\n return actionSheet;\n }\n\n return (\n <PopoutWrapper\n closing={closing}\n alignY=\"bottom\"\n className={className}\n style={style}\n onClick={onClose}\n hasMask\n fixed\n >\n {actionSheet}\n </PopoutWrapper>\n );\n};\n"],"names":["React","noop","useAdaptivityWithJSMediaQueries","useObjectMemo","usePlatform","useTimeout","Platform","warnOnce","useScrollLock","PopoutWrapper","Footnote","ActionSheetContext","ActionSheetDefaultIosCloseItem","ActionSheetDropdown","ActionSheetDropdownDesktop","warn","ActionSheet","children","className","header","text","style","iosCloseItem","popupDirection","popupOffsetDistance","placement","restProps","platform","useState","closing","setClosing","onClose","_action","useRef","afterClose","current","isDesktop","timeout","IOS","fallbackTransitionFinish","useEffect","set","clear","onItemClick","useCallback","action","immediateAction","autoClose","event","persist","contextValue","DropdownComponent","process","env","NODE_ENV","undefined","dropdownProps","Object","assign","actionSheet","Provider","value","weight","alignY","onClick","hasMask","fixed"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import * as React from 'react';
2
2
  import { SharedDropdownProps } from './types';
3
- export type ActionSheetDropdownProps = Omit<SharedDropdownProps, 'popupDirection' | 'popupOffsetDistance'>;
3
+ export type ActionSheetDropdownProps = Omit<SharedDropdownProps, 'popupDirection' | 'popupOffsetDistance' | 'placement'>;
4
4
  export declare const ActionSheetDropdown: ({ children, closing, toggleRef, className, ...restProps }: SharedDropdownProps) => React.JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/ActionSheet/ActionSheetDropdown.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { SizeType } from '../../lib/adaptivity';\nimport { Platform } from '../../lib/platform';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { SharedDropdownProps } from './types';\nimport styles from './ActionSheet.module.css';\n\nconst stopPropagation: React.MouseEventHandler = (e) => e.stopPropagation();\n\nexport type ActionSheetDropdownProps = Omit<\n SharedDropdownProps,\n 'popupDirection' | 'popupOffsetDistance'\n>;\n\nexport const ActionSheetDropdown = ({\n children,\n closing,\n // these 2 props are only omitted - ActionSheetDesktop compat\n toggleRef,\n className,\n ...restProps\n}: SharedDropdownProps) => {\n const { sizeY } = useAdaptivityWithJSMediaQueries();\n const platform = usePlatform();\n\n return (\n <FocusTrap\n {...restProps}\n onClick={stopPropagation}\n className={classNames(\n styles['ActionSheet'],\n platform === Platform.IOS && styles['ActionSheet--ios'],\n closing && styles['ActionSheet--closing'],\n sizeY === SizeType.COMPACT && styles['ActionSheet--sizeY-compact'],\n className,\n )}\n >\n {children}\n </FocusTrap>\n );\n};\n"],"names":["React","classNames","useAdaptivityWithJSMediaQueries","usePlatform","SizeType","Platform","FocusTrap","stopPropagation","e","ActionSheetDropdown","children","closing","toggleRef","className","restProps","sizeY","platform","onClick","IOS","COMPACT"],"mappings":";;;AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,+BAA+B,QAAQ,8CAA8C;AAC9F,SAASC,WAAW,QAAQ,0BAA0B;AACtD,SAASC,QAAQ,QAAQ,uBAAuB;AAChD,SAASC,QAAQ,QAAQ,qBAAqB;AAC9C,SAASC,SAAS,QAAQ,yBAAyB;AAInD,IAAMC,kBAA2C,SAACC;WAAMA,EAAED,eAAe;;AAOzE,OAAO,IAAME,sBAAsB;QACjCC,kBAAAA,UACAC,iBAAAA,SACA,6DAA6D;IAC7DC,mBAAAA,WACAC,mBAAAA,WACGC;QALHJ;QACAC;QAEAC;QACAC;;IAGA,IAAM,AAAEE,QAAUb,kCAAVa;IACR,IAAMC,WAAWb;IAEjB,qBACE,oBAACG,mDACKQ;QACJG,SAASV;QACTM,WAAWZ,8BAETe,aAAaX,SAASa,GAAG,4BACzBP,uCACAI,UAAUX,SAASe,OAAO,sCAC1BN;QAGDH;AAGP,EAAE"}
1
+ {"version":3,"sources":["../../../src/components/ActionSheet/ActionSheetDropdown.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { SizeType } from '../../lib/adaptivity';\nimport { Platform } from '../../lib/platform';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { SharedDropdownProps } from './types';\nimport styles from './ActionSheet.module.css';\n\nconst stopPropagation: React.MouseEventHandler = (e) => e.stopPropagation();\n\nexport type ActionSheetDropdownProps = Omit<\n SharedDropdownProps,\n 'popupDirection' | 'popupOffsetDistance' | 'placement'\n>;\n\nexport const ActionSheetDropdown = ({\n children,\n closing,\n // these 2 props are only omitted - ActionSheetDesktop compat\n toggleRef,\n className,\n ...restProps\n}: SharedDropdownProps) => {\n const { sizeY } = useAdaptivityWithJSMediaQueries();\n const platform = usePlatform();\n\n return (\n <FocusTrap\n {...restProps}\n onClick={stopPropagation}\n className={classNames(\n styles['ActionSheet'],\n platform === Platform.IOS && styles['ActionSheet--ios'],\n closing && styles['ActionSheet--closing'],\n sizeY === SizeType.COMPACT && styles['ActionSheet--sizeY-compact'],\n className,\n )}\n >\n {children}\n </FocusTrap>\n );\n};\n"],"names":["React","classNames","useAdaptivityWithJSMediaQueries","usePlatform","SizeType","Platform","FocusTrap","stopPropagation","e","ActionSheetDropdown","children","closing","toggleRef","className","restProps","sizeY","platform","onClick","IOS","COMPACT"],"mappings":";;;AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,+BAA+B,QAAQ,8CAA8C;AAC9F,SAASC,WAAW,QAAQ,0BAA0B;AACtD,SAASC,QAAQ,QAAQ,uBAAuB;AAChD,SAASC,QAAQ,QAAQ,qBAAqB;AAC9C,SAASC,SAAS,QAAQ,yBAAyB;AAInD,IAAMC,kBAA2C,SAACC;WAAMA,EAAED,eAAe;;AAOzE,OAAO,IAAME,sBAAsB;QACjCC,kBAAAA,UACAC,iBAAAA,SACA,6DAA6D;IAC7DC,mBAAAA,WACAC,mBAAAA,WACGC;QALHJ;QACAC;QAEAC;QACAC;;IAGA,IAAM,AAAEE,QAAUb,kCAAVa;IACR,IAAMC,WAAWb;IAEjB,qBACE,oBAACG,mDACKQ;QACJG,SAASV;QACTM,WAAWZ,8BAETe,aAAaX,SAASa,GAAG,4BACzBP,uCACAI,UAAUX,SAASe,OAAO,sCAC1BN;QAGDH;AAGP,EAAE"}
@@ -1,3 +1,3 @@
1
1
  import * as React from 'react';
2
2
  import { SharedDropdownProps } from './types';
3
- export declare const ActionSheetDropdownDesktop: ({ children, toggleRef, closing, popupDirection, onClose, className, style, popupOffsetDistance, ...restProps }: SharedDropdownProps) => React.JSX.Element;
3
+ export declare const ActionSheetDropdownDesktop: ({ children, toggleRef, closing, popupDirection, onClose, className, style, popupOffsetDistance, placement: placementProp, ...restProps }: SharedDropdownProps) => React.JSX.Element;
@@ -19,7 +19,7 @@ function getEl(ref) {
19
19
  return ref && "current" in ref ? ref.current : ref;
20
20
  }
21
21
  export var ActionSheetDropdownDesktop = function(_param) {
22
- var children = _param.children, toggleRef = _param.toggleRef, closing = _param.closing, popupDirection = _param.popupDirection, onClose = _param.onClose, className = _param.className, style = _param.style, _param_popupOffsetDistance = _param.popupOffsetDistance, popupOffsetDistance = _param_popupOffsetDistance === void 0 ? 0 : _param_popupOffsetDistance, restProps = _object_without_properties(_param, [
22
+ var children = _param.children, toggleRef = _param.toggleRef, closing = _param.closing, popupDirection = _param.popupDirection, onClose = _param.onClose, className = _param.className, style = _param.style, _param_popupOffsetDistance = _param.popupOffsetDistance, popupOffsetDistance = _param_popupOffsetDistance === void 0 ? 0 : _param_popupOffsetDistance, placementProp = _param.placement, restProps = _object_without_properties(_param, [
23
23
  "children",
24
24
  "toggleRef",
25
25
  "closing",
@@ -27,7 +27,8 @@ export var ActionSheetDropdownDesktop = function(_param) {
27
27
  "onClose",
28
28
  "className",
29
29
  "style",
30
- "popupOffsetDistance"
30
+ "popupOffsetDistance",
31
+ "placement"
31
32
  ]);
32
33
  var document = useDOM().document;
33
34
  var platform = usePlatform();
@@ -47,6 +48,7 @@ export var ActionSheetDropdownDesktop = function(_param) {
47
48
  popupDirection,
48
49
  elementRef
49
50
  ]);
51
+ var placement = placementProp !== null && placementProp !== void 0 ? placementProp : isPopupDirectionTop ? "top-end" : "bottom-end";
50
52
  var bodyClickListener = useEventListener("click", function(e) {
51
53
  var _elementRef;
52
54
  var dropdownElement = (_elementRef = elementRef) === null || _elementRef === void 0 ? void 0 : _elementRef.current;
@@ -79,7 +81,7 @@ export var ActionSheetDropdownDesktop = function(_param) {
79
81
  return /*#__PURE__*/ React.createElement(Popper, {
80
82
  targetRef: targetRef,
81
83
  offsetDistance: popupOffsetDistance,
82
- placement: isPopupDirectionTop ? "top-end" : "bottom-end",
84
+ placement: placement,
83
85
  className: classNames("vkuiActionSheet", platform === Platform.IOS && "vkuiActionSheet--ios", "vkuiActionSheet--desktop", sizeY === SizeType.COMPACT && "vkuiActionSheet--sizeY-compact", className),
84
86
  style: style,
85
87
  getRef: elementRef,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/ActionSheet/ActionSheetDropdownDesktop.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { useEffectDev } from '../../hooks/useEffectDev';\nimport { useEventListener } from '../../hooks/useEventListener';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { SizeType } from '../../lib/adaptivity';\nimport { useDOM } from '../../lib/dom';\nimport { isRefObject } from '../../lib/isRefObject';\nimport { Platform } from '../../lib/platform';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { Popper } from '../Popper/Popper';\nimport { SharedDropdownProps } from './types';\nimport styles from './ActionSheet.module.css';\n\nconst warn = warnOnce('ActionSheet');\nfunction getEl(ref: SharedDropdownProps['toggleRef']): Element | null | undefined {\n return ref && 'current' in ref ? ref.current : ref;\n}\n\nexport const ActionSheetDropdownDesktop = ({\n children,\n toggleRef,\n closing,\n popupDirection,\n onClose,\n className,\n style,\n popupOffsetDistance = 0,\n ...restProps\n}: SharedDropdownProps) => {\n const { document } = useDOM();\n const platform = usePlatform();\n const { sizeY } = useAdaptivityWithJSMediaQueries();\n const elementRef = React.useRef<HTMLDivElement | null>(null);\n\n useEffectDev(() => {\n const toggleEl = getEl(toggleRef);\n if (!toggleEl) {\n warn(`Свойство \"toggleRef\" не передано`, 'error');\n }\n }, [toggleRef]);\n\n const isPopupDirectionTop = React.useMemo(\n () =>\n popupDirection === 'top' ||\n (typeof popupDirection === 'function' && popupDirection(elementRef) === 'top'),\n [popupDirection, elementRef],\n );\n\n const bodyClickListener = useEventListener('click', (e: MouseEvent) => {\n const dropdownElement = elementRef?.current;\n if (dropdownElement && !dropdownElement.contains(e.target as Node)) {\n onClose?.();\n }\n });\n\n React.useEffect(() => {\n setTimeout(() => {\n bodyClickListener.add(document!.body);\n });\n }, [bodyClickListener, document]);\n\n const onClick = React.useCallback((e: React.MouseEvent<HTMLElement>) => e.stopPropagation(), []);\n\n const targetRef = React.useMemo(() => {\n if (isRefObject<SharedDropdownProps['toggleRef'], HTMLElement>(toggleRef)) {\n return toggleRef;\n }\n\n return { current: toggleRef as HTMLElement };\n }, [toggleRef]);\n\n return (\n <Popper\n targetRef={targetRef}\n offsetDistance={popupOffsetDistance}\n placement={isPopupDirectionTop ? 'top-end' : 'bottom-end'}\n className={classNames(\n styles['ActionSheet'],\n platform === Platform.IOS && styles['ActionSheet--ios'],\n styles['ActionSheet--desktop'],\n sizeY === SizeType.COMPACT && styles['ActionSheet--sizeY-compact'],\n className,\n )}\n style={style}\n getRef={elementRef}\n forcePortal={false}\n >\n <FocusTrap onClose={onClose} {...restProps} onClick={onClick}>\n {children}\n </FocusTrap>\n </Popper>\n );\n};\n"],"names":["React","classNames","useAdaptivityWithJSMediaQueries","useEffectDev","useEventListener","usePlatform","SizeType","useDOM","isRefObject","Platform","warnOnce","FocusTrap","Popper","warn","getEl","ref","current","ActionSheetDropdownDesktop","children","toggleRef","closing","popupDirection","onClose","className","style","popupOffsetDistance","restProps","document","platform","sizeY","elementRef","useRef","toggleEl","isPopupDirectionTop","useMemo","bodyClickListener","e","dropdownElement","contains","target","useEffect","setTimeout","add","body","onClick","useCallback","stopPropagation","targetRef","offsetDistance","placement","IOS","COMPACT","getRef","forcePortal"],"mappings":";;;AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,+BAA+B,QAAQ,8CAA8C;AAC9F,SAASC,YAAY,QAAQ,2BAA2B;AACxD,SAASC,gBAAgB,QAAQ,+BAA+B;AAChE,SAASC,WAAW,QAAQ,0BAA0B;AACtD,SAASC,QAAQ,QAAQ,uBAAuB;AAChD,SAASC,MAAM,QAAQ,gBAAgB;AACvC,SAASC,WAAW,QAAQ,wBAAwB;AACpD,SAASC,QAAQ,QAAQ,qBAAqB;AAC9C,SAASC,QAAQ,QAAQ,qBAAqB;AAC9C,SAASC,SAAS,QAAQ,yBAAyB;AACnD,SAASC,MAAM,QAAQ,mBAAmB;AAI1C,IAAMC,OAAOH,SAAS;AACtB,SAASI,MAAMC,GAAqC;IAClD,OAAOA,OAAO,aAAaA,MAAMA,IAAIC,OAAO,GAAGD;AACjD;AAEA,OAAO,IAAME,6BAA6B;QACxCC,kBAAAA,UACAC,mBAAAA,WACAC,iBAAAA,SACAC,wBAAAA,gBACAC,iBAAAA,SACAC,mBAAAA,WACAC,eAAAA,2CACAC,qBAAAA,8DAAsB,gCACnBC;QARHR;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,IAAM,AAAEE,WAAapB,SAAboB;IACR,IAAMC,WAAWvB;IACjB,IAAM,AAAEwB,QAAU3B,kCAAV2B;IACR,IAAMC,aAAa9B,MAAM+B,MAAM,CAAwB;IAEvD5B,aAAa;QACX,IAAM6B,WAAWlB,MAAMK;QACvB,IAAI,CAACa,UAAU;YACbnB,KAAM,oCAAmC;QAC3C;IACF,GAAG;QAACM;KAAU;IAEd,IAAMc,sBAAsBjC,MAAMkC,OAAO,CACvC;eACEb,mBAAmB,SAClB,OAAOA,mBAAmB,cAAcA,eAAeS,gBAAgB;OAC1E;QAACT;QAAgBS;KAAW;IAG9B,IAAMK,oBAAoB/B,iBAAiB,SAAS,SAACgC;YAC3BN;QAAxB,IAAMO,mBAAkBP,cAAAA,wBAAAA,kCAAAA,YAAYd,OAAO;QAC3C,IAAIqB,mBAAmB,CAACA,gBAAgBC,QAAQ,CAACF,EAAEG,MAAM,GAAW;gBAClEjB;aAAAA,WAAAA,qBAAAA,+BAAAA;QACF;IACF;IAEAtB,MAAMwC,SAAS,CAAC;QACdC,WAAW;YACTN,kBAAkBO,GAAG,CAACf,SAAUgB,IAAI;QACtC;IACF,GAAG;QAACR;QAAmBR;KAAS;IAEhC,IAAMiB,UAAU5C,MAAM6C,WAAW,CAAC,SAACT;eAAqCA,EAAEU,eAAe;OAAI,EAAE;IAE/F,IAAMC,YAAY/C,MAAMkC,OAAO,CAAC;QAC9B,IAAI1B,YAA2DW,YAAY;YACzE,OAAOA;QACT;QAEA,OAAO;YAAEH,SAASG;QAAyB;IAC7C,GAAG;QAACA;KAAU;IAEd,qBACE,oBAACP;QACCmC,WAAWA;QACXC,gBAAgBvB;QAChBwB,WAAWhB,sBAAsB,YAAY;QAC7CV,WAAWtB,8BAET2B,aAAanB,SAASyC,GAAG,wDAEzBrB,UAAUvB,SAAS6C,OAAO,sCAC1B5B;QAEFC,OAAOA;QACP4B,QAAQtB;QACRuB,aAAa;qBAEb,oBAAC1C;QAAUW,SAASA;OAAaI;QAAWkB,SAASA;QAClD1B;AAIT,EAAE"}
1
+ {"version":3,"sources":["../../../src/components/ActionSheet/ActionSheetDropdownDesktop.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { useEffectDev } from '../../hooks/useEffectDev';\nimport { useEventListener } from '../../hooks/useEventListener';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { SizeType } from '../../lib/adaptivity';\nimport { useDOM } from '../../lib/dom';\nimport { isRefObject } from '../../lib/isRefObject';\nimport { Platform } from '../../lib/platform';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { Popper } from '../Popper/Popper';\nimport { SharedDropdownProps } from './types';\nimport styles from './ActionSheet.module.css';\n\nconst warn = warnOnce('ActionSheet');\nfunction getEl(ref: SharedDropdownProps['toggleRef']): Element | null | undefined {\n return ref && 'current' in ref ? ref.current : ref;\n}\n\nexport const ActionSheetDropdownDesktop = ({\n children,\n toggleRef,\n closing,\n popupDirection,\n onClose,\n className,\n style,\n popupOffsetDistance = 0,\n placement: placementProp,\n ...restProps\n}: SharedDropdownProps) => {\n const { document } = useDOM();\n const platform = usePlatform();\n const { sizeY } = useAdaptivityWithJSMediaQueries();\n const elementRef = React.useRef<HTMLDivElement | null>(null);\n\n useEffectDev(() => {\n const toggleEl = getEl(toggleRef);\n if (!toggleEl) {\n warn(`Свойство \"toggleRef\" не передано`, 'error');\n }\n }, [toggleRef]);\n\n const isPopupDirectionTop = React.useMemo(\n () =>\n popupDirection === 'top' ||\n (typeof popupDirection === 'function' && popupDirection(elementRef) === 'top'),\n [popupDirection, elementRef],\n );\n\n const placement = placementProp ?? (isPopupDirectionTop ? 'top-end' : 'bottom-end');\n\n const bodyClickListener = useEventListener('click', (e: MouseEvent) => {\n const dropdownElement = elementRef?.current;\n if (dropdownElement && !dropdownElement.contains(e.target as Node)) {\n onClose?.();\n }\n });\n\n React.useEffect(() => {\n setTimeout(() => {\n bodyClickListener.add(document!.body);\n });\n }, [bodyClickListener, document]);\n\n const onClick = React.useCallback((e: React.MouseEvent<HTMLElement>) => e.stopPropagation(), []);\n\n const targetRef = React.useMemo(() => {\n if (isRefObject<SharedDropdownProps['toggleRef'], HTMLElement>(toggleRef)) {\n return toggleRef;\n }\n\n return { current: toggleRef as HTMLElement };\n }, [toggleRef]);\n\n return (\n <Popper\n targetRef={targetRef}\n offsetDistance={popupOffsetDistance}\n placement={placement}\n className={classNames(\n styles['ActionSheet'],\n platform === Platform.IOS && styles['ActionSheet--ios'],\n styles['ActionSheet--desktop'],\n sizeY === SizeType.COMPACT && styles['ActionSheet--sizeY-compact'],\n className,\n )}\n style={style}\n getRef={elementRef}\n forcePortal={false}\n >\n <FocusTrap onClose={onClose} {...restProps} onClick={onClick}>\n {children}\n </FocusTrap>\n </Popper>\n );\n};\n"],"names":["React","classNames","useAdaptivityWithJSMediaQueries","useEffectDev","useEventListener","usePlatform","SizeType","useDOM","isRefObject","Platform","warnOnce","FocusTrap","Popper","warn","getEl","ref","current","ActionSheetDropdownDesktop","children","toggleRef","closing","popupDirection","onClose","className","style","popupOffsetDistance","placement","placementProp","restProps","document","platform","sizeY","elementRef","useRef","toggleEl","isPopupDirectionTop","useMemo","bodyClickListener","e","dropdownElement","contains","target","useEffect","setTimeout","add","body","onClick","useCallback","stopPropagation","targetRef","offsetDistance","IOS","COMPACT","getRef","forcePortal"],"mappings":";;;AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,+BAA+B,QAAQ,8CAA8C;AAC9F,SAASC,YAAY,QAAQ,2BAA2B;AACxD,SAASC,gBAAgB,QAAQ,+BAA+B;AAChE,SAASC,WAAW,QAAQ,0BAA0B;AACtD,SAASC,QAAQ,QAAQ,uBAAuB;AAChD,SAASC,MAAM,QAAQ,gBAAgB;AACvC,SAASC,WAAW,QAAQ,wBAAwB;AACpD,SAASC,QAAQ,QAAQ,qBAAqB;AAC9C,SAASC,QAAQ,QAAQ,qBAAqB;AAC9C,SAASC,SAAS,QAAQ,yBAAyB;AACnD,SAASC,MAAM,QAAQ,mBAAmB;AAI1C,IAAMC,OAAOH,SAAS;AACtB,SAASI,MAAMC,GAAqC;IAClD,OAAOA,OAAO,aAAaA,MAAMA,IAAIC,OAAO,GAAGD;AACjD;AAEA,OAAO,IAAME,6BAA6B;QACxCC,kBAAAA,UACAC,mBAAAA,WACAC,iBAAAA,SACAC,wBAAAA,gBACAC,iBAAAA,SACAC,mBAAAA,WACAC,eAAAA,2CACAC,qBAAAA,8DAAsB,gCACtBC,AAAWC,uBAAXD,WACGE;QATHV;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,IAAM,AAAEG,WAAatB,SAAbsB;IACR,IAAMC,WAAWzB;IACjB,IAAM,AAAE0B,QAAU7B,kCAAV6B;IACR,IAAMC,aAAahC,MAAMiC,MAAM,CAAwB;IAEvD9B,aAAa;QACX,IAAM+B,WAAWpB,MAAMK;QACvB,IAAI,CAACe,UAAU;YACbrB,KAAM,oCAAmC;QAC3C;IACF,GAAG;QAACM;KAAU;IAEd,IAAMgB,sBAAsBnC,MAAMoC,OAAO,CACvC;eACEf,mBAAmB,SAClB,OAAOA,mBAAmB,cAAcA,eAAeW,gBAAgB;OAC1E;QAACX;QAAgBW;KAAW;IAG9B,IAAMN,YAAYC,0BAAAA,2BAAAA,gBAAkBQ,sBAAsB,YAAY;IAEtE,IAAME,oBAAoBjC,iBAAiB,SAAS,SAACkC;YAC3BN;QAAxB,IAAMO,mBAAkBP,cAAAA,wBAAAA,kCAAAA,YAAYhB,OAAO;QAC3C,IAAIuB,mBAAmB,CAACA,gBAAgBC,QAAQ,CAACF,EAAEG,MAAM,GAAW;gBAClEnB;aAAAA,WAAAA,qBAAAA,+BAAAA;QACF;IACF;IAEAtB,MAAM0C,SAAS,CAAC;QACdC,WAAW;YACTN,kBAAkBO,GAAG,CAACf,SAAUgB,IAAI;QACtC;IACF,GAAG;QAACR;QAAmBR;KAAS;IAEhC,IAAMiB,UAAU9C,MAAM+C,WAAW,CAAC,SAACT;eAAqCA,EAAEU,eAAe;OAAI,EAAE;IAE/F,IAAMC,YAAYjD,MAAMoC,OAAO,CAAC;QAC9B,IAAI5B,YAA2DW,YAAY;YACzE,OAAOA;QACT;QAEA,OAAO;YAAEH,SAASG;QAAyB;IAC7C,GAAG;QAACA;KAAU;IAEd,qBACE,oBAACP;QACCqC,WAAWA;QACXC,gBAAgBzB;QAChBC,WAAWA;QACXH,WAAWtB,8BAET6B,aAAarB,SAAS0C,GAAG,wDAEzBpB,UAAUzB,SAAS8C,OAAO,sCAC1B7B;QAEFC,OAAOA;QACP6B,QAAQrB;QACRsB,aAAa;qBAEb,oBAAC3C;QAAUW,SAASA;OAAaM;QAAWkB,SAASA;QAClD5B;AAIT,EAAE"}
@@ -1,4 +1,5 @@
1
1
  import * as React from 'react';
2
+ import type { PlacementWithAuto } from '../../lib/floating/types';
2
3
  import { FocusTrapProps } from '../FocusTrap/FocusTrap';
3
4
  export type PopupDirection = 'top' | 'bottom' | ((elRef: React.RefObject<HTMLDivElement>) => 'top' | 'bottom');
4
5
  export type ToggleRef = Element | null | undefined | React.RefObject<Element>;
@@ -12,8 +13,16 @@ export interface SharedDropdownProps extends FocusTrapProps {
12
13
  toggleRef?: ToggleRef;
13
14
  /**
14
15
  * Направление на десктопе
16
+ * @deprecated v5.7.0
17
+ *
18
+ * Используйте `placement` для позиционирования
15
19
  */
16
20
  popupDirection?: PopupDirection;
21
+ /**
22
+ * Позиционирование всплывающего окна для десктопа.
23
+ * Компонент выберет наилучшее расположение сам, но можно задать приоритетное направление с помощью этого свойства
24
+ */
25
+ placement?: PlacementWithAuto;
17
26
  /**
18
27
  * Отступ, где заданное кол-во единиц равняется пикселям
19
28
  * */
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/ActionSheet/types.ts"],"sourcesContent":["import * as React from 'react';\nimport { FocusTrapProps } from '../FocusTrap/FocusTrap';\n\nexport type PopupDirection =\n | 'top'\n | 'bottom'\n | ((elRef: React.RefObject<HTMLDivElement>) => 'top' | 'bottom');\nexport type ToggleRef = Element | null | undefined | React.RefObject<Element>;\n\nexport interface SharedDropdownProps extends FocusTrapProps {\n closing: boolean;\n /**\n * Элемент, рядом с которым вылезает попап на десктопе.\n * Лучше передавать RefObject c current.\n * В v6 будет обязательным.\n */\n toggleRef?: ToggleRef; // TODO [>=6]: сделать обязательным\n /**\n * Направление на десктопе\n */\n popupDirection?: PopupDirection;\n /**\n * Отступ, где заданное кол-во единиц равняется пикселям\n * */\n popupOffsetDistance?: number;\n}\n"],"names":["React"],"mappings":"AAAA,YAAYA,WAAW,QAAQ"}
1
+ {"version":3,"sources":["../../../src/components/ActionSheet/types.ts"],"sourcesContent":["import * as React from 'react';\nimport type { PlacementWithAuto } from '../../lib/floating/types';\nimport { FocusTrapProps } from '../FocusTrap/FocusTrap';\n\nexport type PopupDirection =\n | 'top'\n | 'bottom'\n | ((elRef: React.RefObject<HTMLDivElement>) => 'top' | 'bottom');\nexport type ToggleRef = Element | null | undefined | React.RefObject<Element>;\n\nexport interface SharedDropdownProps extends FocusTrapProps {\n closing: boolean;\n /**\n * Элемент, рядом с которым вылезает попап на десктопе.\n * Лучше передавать RefObject c current.\n * В v6 будет обязательным.\n */\n toggleRef?: ToggleRef; // TODO [>=6]: сделать обязательным\n /**\n * Направление на десктопе\n * @deprecated v5.7.0\n *\n * Используйте `placement` для позиционирования\n */\n popupDirection?: PopupDirection;\n /**\n * Позиционирование всплывающего окна для десктопа.\n * Компонент выберет наилучшее расположение сам, но можно задать приоритетное направление с помощью этого свойства\n */\n placement?: PlacementWithAuto;\n /**\n * Отступ, где заданное кол-во единиц равняется пикселям\n * */\n popupOffsetDistance?: number;\n}\n"],"names":["React"],"mappings":"AAAA,YAAYA,WAAW,QAAQ"}
@@ -1,15 +1,19 @@
1
1
  import * as React from 'react';
2
- import { AnchorHTMLAttributesOnly } from '../../types';
2
+ import { AlignType, AnchorHTMLAttributesOnly } from '../../types';
3
3
  import { ButtonProps } from '../Button/Button';
4
+ import { AlertActionProps } from './AlertAction';
5
+ type AlertActionMode = 'cancel' | 'destructive' | 'default';
4
6
  export interface AlertActionInterface extends Pick<ButtonProps, 'Component'>, AnchorHTMLAttributesOnly {
5
7
  title: string;
6
8
  action?: VoidFunction;
7
9
  autoClose?: boolean;
8
- mode: 'cancel' | 'destructive' | 'default';
10
+ mode: AlertActionMode;
9
11
  }
10
12
  export interface AlertProps extends React.HTMLAttributes<HTMLElement> {
11
13
  actionsLayout?: 'vertical' | 'horizontal';
14
+ actionsAlign?: AlignType;
12
15
  actions?: AlertActionInterface[];
16
+ renderAction?: (props: AlertActionProps) => React.ReactNode;
13
17
  header?: React.ReactNode;
14
18
  text?: React.ReactNode;
15
19
  onClose: VoidFunction;
@@ -21,4 +25,5 @@ export interface AlertProps extends React.HTMLAttributes<HTMLElement> {
21
25
  /**
22
26
  * @see https://vkcom.github.io/VKUI/#/Alert
23
27
  */
24
- export declare const Alert: ({ actions, actionsLayout, children, className, style, text, header, onClose, dismissLabel, ...restProps }: AlertProps) => React.JSX.Element;
28
+ export declare const Alert: ({ actions, actionsLayout, children, className, style, text, header, onClose, dismissLabel, renderAction, actionsAlign, ...restProps }: AlertProps) => React.JSX.Element;
29
+ export {};
@@ -11,94 +11,15 @@ import { useWaitTransitionFinish } from "../../hooks/useWaitTransitionFinish";
11
11
  import { Platform } from "../../lib/platform";
12
12
  import { stopPropagation } from "../../lib/utils";
13
13
  import { useScrollLock } from "../AppRoot/ScrollContext";
14
- import { Button } from "../Button/Button";
15
14
  import { FocusTrap } from "../FocusTrap/FocusTrap";
16
15
  import { ModalDismissButton } from "../ModalDismissButton/ModalDismissButton";
17
16
  import { PopoutWrapper } from "../PopoutWrapper/PopoutWrapper";
18
- import { Tappable } from "../Tappable/Tappable";
19
- import { Caption } from "../Typography/Caption/Caption";
20
- import { Footnote } from "../Typography/Footnote/Footnote";
21
- import { Text } from "../Typography/Text/Text";
22
- import { Title } from "../Typography/Title/Title";
23
- var AlertHeader = function(props) {
24
- var platform = usePlatform();
25
- switch(platform){
26
- case Platform.IOS:
27
- return /*#__PURE__*/ React.createElement(Title, _object_spread({
28
- className: "vkuiAlert__header",
29
- weight: "1",
30
- level: "3"
31
- }, props));
32
- default:
33
- return /*#__PURE__*/ React.createElement(Title, _object_spread({
34
- className: "vkuiAlert__header",
35
- weight: "2",
36
- level: "2"
37
- }, props));
38
- }
39
- };
40
- var AlertText = function(props) {
41
- var platform = usePlatform();
42
- switch(platform){
43
- case Platform.VKCOM:
44
- return /*#__PURE__*/ React.createElement(Footnote, _object_spread({
45
- className: "vkuiAlert__text"
46
- }, props));
47
- case Platform.IOS:
48
- return /*#__PURE__*/ React.createElement(Caption, _object_spread({
49
- className: "vkuiAlert__text"
50
- }, props));
51
- default:
52
- return /*#__PURE__*/ React.createElement(Text, _object_spread({
53
- Component: "span",
54
- className: "vkuiAlert__text",
55
- weight: "3"
56
- }, props));
57
- }
58
- };
59
- var AlertAction = function(_param) {
60
- var action = _param.action, onItemClick = _param.onItemClick, restProps = _object_without_properties(_param, [
61
- "action",
62
- "onItemClick"
63
- ]);
64
- var platform = usePlatform();
65
- var handleItemClick = React.useCallback(function() {
66
- return onItemClick(action);
67
- }, [
68
- onItemClick,
69
- action
70
- ]);
71
- if (platform === Platform.IOS) {
72
- var title = action.title, actionProp = action.action, autoClose = action.autoClose, mode = action.mode, restActionProps = _object_without_properties(action, [
73
- "title",
74
- "action",
75
- "autoClose",
76
- "mode"
77
- ]);
78
- return /*#__PURE__*/ React.createElement(Tappable, _object_spread({
79
- Component: restActionProps.href ? "a" : "button",
80
- className: classNames("vkuiAlert__action", mode === "destructive" && "vkuiAlert__action--mode-destructive", mode === "cancel" && "vkuiAlert__action--mode-cancel"),
81
- onClick: handleItemClick
82
- }, restActionProps, restProps), title);
83
- }
84
- var mode1 = "tertiary";
85
- if (platform === Platform.VKCOM) {
86
- mode1 = action.mode === "cancel" ? "secondary" : "primary";
87
- }
88
- return /*#__PURE__*/ React.createElement(Button, {
89
- className: classNames("vkuiAlert__button", action.mode === "cancel" && "vkuiAlert__button--mode-cancel"),
90
- mode: mode1,
91
- size: "m",
92
- onClick: handleItemClick,
93
- Component: action.Component,
94
- href: action.href,
95
- target: action.target
96
- }, action.title);
97
- };
17
+ import { AlertActions } from "./AlertActions";
18
+ import { AlertHeader, AlertText } from "./AlertTypography";
98
19
  /**
99
20
  * @see https://vkcom.github.io/VKUI/#/Alert
100
21
  */ export var Alert = function(_param) {
101
- var _param_actions = _param.actions, actions = _param_actions === void 0 ? [] : _param_actions, _param_actionsLayout = _param.actionsLayout, actionsLayout = _param_actionsLayout === void 0 ? "horizontal" : _param_actionsLayout, children = _param.children, className = _param.className, style = _param.style, text = _param.text, header = _param.header, onClose = _param.onClose, _param_dismissLabel = _param.dismissLabel, dismissLabel = _param_dismissLabel === void 0 ? "Закрыть предупреждение" : _param_dismissLabel, restProps = _object_without_properties(_param, [
22
+ var _param_actions = _param.actions, actions = _param_actions === void 0 ? [] : _param_actions, _param_actionsLayout = _param.actionsLayout, actionsLayout = _param_actionsLayout === void 0 ? "horizontal" : _param_actionsLayout, children = _param.children, className = _param.className, style = _param.style, text = _param.text, header = _param.header, onClose = _param.onClose, _param_dismissLabel = _param.dismissLabel, dismissLabel = _param_dismissLabel === void 0 ? "Закрыть предупреждение" : _param_dismissLabel, renderAction = _param.renderAction, actionsAlign = _param.actionsAlign, restProps = _object_without_properties(_param, [
102
23
  "actions",
103
24
  "actionsLayout",
104
25
  "children",
@@ -107,7 +28,9 @@ var AlertAction = function(_param) {
107
28
  "text",
108
29
  "header",
109
30
  "onClose",
110
- "dismissLabel"
31
+ "dismissLabel",
32
+ "renderAction",
33
+ "actionsAlign"
111
34
  ]);
112
35
  var generatedId = useId();
113
36
  var headerId = "vkui-alert-".concat(generatedId, "-header");
@@ -117,7 +40,6 @@ var AlertAction = function(_param) {
117
40
  var waitTransitionFinish = useWaitTransitionFinish().waitTransitionFinish;
118
41
  var _React_useState = _sliced_to_array(React.useState(false), 2), closing = _React_useState[0], setClosing = _React_useState[1];
119
42
  var elementRef = React.useRef(null);
120
- var resolvedActionsLayout = platform === Platform.VKCOM ? "horizontal" : actionsLayout;
121
43
  var timeout = platform === Platform.IOS ? 300 : 200;
122
44
  var close = React.useCallback(function() {
123
45
  setClosing(true);
@@ -162,7 +84,7 @@ var AlertAction = function(_param) {
162
84
  onClick: stopPropagation,
163
85
  onClose: close,
164
86
  timeout: timeout,
165
- className: classNames("vkuiAlert", platform === Platform.IOS && "vkuiAlert--ios", platform === Platform.VKCOM && "vkuiAlert--vkcom", resolvedActionsLayout === "vertical" ? "vkuiAlert--v" : "vkuiAlert--h", closing && "vkuiAlert--closing", isDesktop && "vkuiAlert--desktop"),
87
+ className: classNames("vkuiAlert", platform === Platform.IOS && "vkuiAlert--ios", platform === Platform.VKCOM && "vkuiAlert--vkcom", closing && "vkuiAlert--closing", isDesktop && "vkuiAlert--desktop"),
166
88
  role: "alertdialog",
167
89
  "aria-modal": true,
168
90
  "aria-labelledby": headerId,
@@ -173,15 +95,13 @@ var AlertAction = function(_param) {
173
95
  id: headerId
174
96
  }, header), hasReactNode(text) && /*#__PURE__*/ React.createElement(AlertText, {
175
97
  id: textId
176
- }, text), children), /*#__PURE__*/ React.createElement("div", {
177
- className: "vkuiAlert__actions"
178
- }, actions.map(function(action, i) {
179
- return /*#__PURE__*/ React.createElement(AlertAction, {
180
- key: i,
181
- action: action,
182
- onItemClick: onItemClick
183
- });
184
- })), isDesktop && /*#__PURE__*/ React.createElement(ModalDismissButton, {
98
+ }, text), children), /*#__PURE__*/ React.createElement(AlertActions, {
99
+ actions: actions,
100
+ actionsAlign: actionsAlign,
101
+ actionsLayout: actionsLayout,
102
+ renderAction: renderAction,
103
+ onItemClick: onItemClick
104
+ }), isDesktop && /*#__PURE__*/ React.createElement(ModalDismissButton, {
185
105
  onClick: close,
186
106
  "aria-label": dismissLabel
187
107
  })));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Alert/Alert.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { useId } from '../../hooks/useId';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useWaitTransitionFinish } from '../../hooks/useWaitTransitionFinish';\nimport { Platform } from '../../lib/platform';\nimport { stopPropagation } from '../../lib/utils';\nimport { AnchorHTMLAttributesOnly, HasChildren } from '../../types';\nimport { useScrollLock } from '../AppRoot/ScrollContext';\nimport { Button, ButtonProps } from '../Button/Button';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { ModalDismissButton } from '../ModalDismissButton/ModalDismissButton';\nimport { PopoutWrapper } from '../PopoutWrapper/PopoutWrapper';\nimport { Tappable } from '../Tappable/Tappable';\nimport { Caption } from '../Typography/Caption/Caption';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { Text } from '../Typography/Text/Text';\nimport { Title } from '../Typography/Title/Title';\nimport styles from './Alert.module.css';\n\nexport interface AlertActionInterface\n extends Pick<ButtonProps, 'Component'>,\n AnchorHTMLAttributesOnly {\n title: string;\n action?: VoidFunction;\n autoClose?: boolean;\n mode: 'cancel' | 'destructive' | 'default';\n}\n\nexport interface AlertProps extends React.HTMLAttributes<HTMLElement> {\n actionsLayout?: 'vertical' | 'horizontal';\n actions?: AlertActionInterface[];\n header?: React.ReactNode;\n text?: React.ReactNode;\n onClose: VoidFunction;\n\n /**\n * `aria-label` для кнопки закрытия. Необходим, чтобы кнопка была доступной.\n */\n dismissLabel?: string;\n}\n\ntype ItemClickHandler = (item: AlertActionInterface) => void;\n\ninterface AlertTypography extends HasChildren {\n id: string;\n}\n\nconst AlertHeader = (props: AlertTypography) => {\n const platform = usePlatform();\n\n switch (platform) {\n case Platform.IOS:\n return <Title className={styles['Alert__header']} weight=\"1\" level=\"3\" {...props} />;\n default:\n return <Title className={styles['Alert__header']} weight=\"2\" level=\"2\" {...props} />;\n }\n};\n\nconst AlertText = (props: AlertTypography) => {\n const platform = usePlatform();\n\n switch (platform) {\n case Platform.VKCOM:\n return <Footnote className={styles['Alert__text']} {...props} />;\n case Platform.IOS:\n return <Caption className={styles['Alert__text']} {...props} />;\n default:\n return <Text Component=\"span\" className={styles['Alert__text']} weight=\"3\" {...props} />;\n }\n};\n\ninterface AlertActionProps {\n action: AlertActionInterface;\n onItemClick: ItemClickHandler;\n}\n\nconst AlertAction = ({ action, onItemClick, ...restProps }: AlertActionProps) => {\n const platform = usePlatform();\n const handleItemClick = React.useCallback(() => onItemClick(action), [onItemClick, action]);\n\n if (platform === Platform.IOS) {\n const { title, action: actionProp, autoClose, mode, ...restActionProps } = action;\n\n return (\n <Tappable\n Component={restActionProps.href ? 'a' : 'button'}\n className={classNames(\n styles['Alert__action'],\n mode === 'destructive' && styles['Alert__action--mode-destructive'],\n mode === 'cancel' && styles['Alert__action--mode-cancel'],\n )}\n onClick={handleItemClick}\n {...restActionProps}\n {...restProps}\n >\n {title}\n </Tappable>\n );\n }\n\n let mode: ButtonProps['mode'] = 'tertiary';\n\n if (platform === Platform.VKCOM) {\n mode = action.mode === 'cancel' ? 'secondary' : 'primary';\n }\n\n return (\n <Button\n className={classNames(\n styles['Alert__button'],\n action.mode === 'cancel' && styles['Alert__button--mode-cancel'],\n )}\n mode={mode}\n size=\"m\"\n onClick={handleItemClick}\n Component={action.Component}\n href={action.href}\n target={action.target}\n >\n {action.title}\n </Button>\n );\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Alert\n */\nexport const Alert = ({\n actions = [],\n actionsLayout = 'horizontal',\n children,\n className,\n style,\n text,\n header,\n onClose,\n dismissLabel = 'Закрыть предупреждение',\n ...restProps\n}: AlertProps) => {\n const generatedId = useId();\n\n const headerId = `vkui-alert-${generatedId}-header`;\n const textId = `vkui-alert-${generatedId}-text`;\n\n const platform = usePlatform();\n const { isDesktop } = useAdaptivityWithJSMediaQueries();\n const { waitTransitionFinish } = useWaitTransitionFinish();\n\n const [closing, setClosing] = React.useState(false);\n\n const elementRef = React.useRef<HTMLDivElement>(null);\n\n const resolvedActionsLayout: AlertProps['actionsLayout'] =\n platform === Platform.VKCOM ? 'horizontal' : actionsLayout;\n\n const timeout = platform === Platform.IOS ? 300 : 200;\n\n const close = React.useCallback(() => {\n setClosing(true);\n waitTransitionFinish(\n elementRef.current,\n (e?: TransitionEvent) => {\n if (!e || e.propertyName === 'opacity') {\n onClose();\n }\n },\n timeout,\n );\n }, [elementRef, waitTransitionFinish, onClose, timeout]);\n\n const onItemClick: ItemClickHandler = React.useCallback(\n (item: AlertActionInterface) => {\n const { action, autoClose } = item;\n\n if (autoClose) {\n setClosing(true);\n waitTransitionFinish(\n elementRef.current,\n (e?: TransitionEvent) => {\n if (!e || e.propertyName === 'opacity') {\n onClose();\n action && action();\n }\n },\n timeout,\n );\n } else {\n action && action();\n }\n },\n [elementRef, waitTransitionFinish, onClose, timeout],\n );\n\n useScrollLock();\n\n return (\n <PopoutWrapper className={className} closing={closing} style={style} onClick={close}>\n <FocusTrap\n {...restProps}\n getRootRef={elementRef}\n onClick={stopPropagation}\n onClose={close}\n timeout={timeout}\n className={classNames(\n styles['Alert'],\n platform === Platform.IOS && styles['Alert--ios'],\n platform === Platform.VKCOM && styles['Alert--vkcom'],\n resolvedActionsLayout === 'vertical' ? styles['Alert--v'] : styles['Alert--h'],\n closing && styles['Alert--closing'],\n isDesktop && styles['Alert--desktop'],\n )}\n role=\"alertdialog\"\n aria-modal\n aria-labelledby={headerId}\n aria-describedby={textId}\n >\n <div className={styles['Alert__content']}>\n {hasReactNode(header) && <AlertHeader id={headerId}>{header}</AlertHeader>}\n {hasReactNode(text) && <AlertText id={textId}>{text}</AlertText>}\n {children}\n </div>\n <div className={styles['Alert__actions']}>\n {actions.map((action, i) => (\n <AlertAction key={i} action={action} onItemClick={onItemClick} />\n ))}\n </div>\n {isDesktop && <ModalDismissButton onClick={close} aria-label={dismissLabel} />}\n </FocusTrap>\n </PopoutWrapper>\n );\n};\n"],"names":["React","classNames","hasReactNode","useAdaptivityWithJSMediaQueries","useId","usePlatform","useWaitTransitionFinish","Platform","stopPropagation","useScrollLock","Button","FocusTrap","ModalDismissButton","PopoutWrapper","Tappable","Caption","Footnote","Text","Title","AlertHeader","props","platform","IOS","className","weight","level","AlertText","VKCOM","Component","AlertAction","action","onItemClick","restProps","handleItemClick","useCallback","title","actionProp","autoClose","mode","restActionProps","href","onClick","size","target","Alert","actions","actionsLayout","children","style","text","header","onClose","dismissLabel","generatedId","headerId","textId","isDesktop","waitTransitionFinish","useState","closing","setClosing","elementRef","useRef","resolvedActionsLayout","timeout","close","current","e","propertyName","item","getRootRef","role","aria-modal","aria-labelledby","aria-describedby","div","id","map","i","key","aria-label"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/Alert/Alert.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { useId } from '../../hooks/useId';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useWaitTransitionFinish } from '../../hooks/useWaitTransitionFinish';\nimport { Platform } from '../../lib/platform';\nimport { stopPropagation } from '../../lib/utils';\nimport { AlignType, AnchorHTMLAttributesOnly } from '../../types';\nimport { useScrollLock } from '../AppRoot/ScrollContext';\nimport { ButtonProps } from '../Button/Button';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { ModalDismissButton } from '../ModalDismissButton/ModalDismissButton';\nimport { PopoutWrapper } from '../PopoutWrapper/PopoutWrapper';\nimport { AlertActionProps } from './AlertAction';\nimport { AlertActions } from './AlertActions';\nimport { AlertHeader, AlertText } from './AlertTypography';\nimport styles from './Alert.module.css';\n\ntype AlertActionMode = 'cancel' | 'destructive' | 'default';\n\nexport interface AlertActionInterface\n extends Pick<ButtonProps, 'Component'>,\n AnchorHTMLAttributesOnly {\n title: string;\n action?: VoidFunction;\n autoClose?: boolean;\n mode: AlertActionMode;\n}\n\nexport interface AlertProps extends React.HTMLAttributes<HTMLElement> {\n actionsLayout?: 'vertical' | 'horizontal';\n actionsAlign?: AlignType;\n actions?: AlertActionInterface[];\n renderAction?: (props: AlertActionProps) => React.ReactNode;\n header?: React.ReactNode;\n text?: React.ReactNode;\n onClose: VoidFunction;\n\n /**\n * `aria-label` для кнопки закрытия. Необходим, чтобы кнопка была доступной.\n */\n dismissLabel?: string;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Alert\n */\nexport const Alert = ({\n actions = [],\n actionsLayout = 'horizontal',\n children,\n className,\n style,\n text,\n header,\n onClose,\n dismissLabel = 'Закрыть предупреждение',\n renderAction,\n actionsAlign,\n ...restProps\n}: AlertProps) => {\n const generatedId = useId();\n\n const headerId = `vkui-alert-${generatedId}-header`;\n const textId = `vkui-alert-${generatedId}-text`;\n\n const platform = usePlatform();\n const { isDesktop } = useAdaptivityWithJSMediaQueries();\n const { waitTransitionFinish } = useWaitTransitionFinish();\n\n const [closing, setClosing] = React.useState(false);\n\n const elementRef = React.useRef<HTMLDivElement>(null);\n\n const timeout = platform === Platform.IOS ? 300 : 200;\n\n const close = React.useCallback(() => {\n setClosing(true);\n waitTransitionFinish(\n elementRef.current,\n (e?: TransitionEvent) => {\n if (!e || e.propertyName === 'opacity') {\n onClose();\n }\n },\n timeout,\n );\n }, [elementRef, waitTransitionFinish, onClose, timeout]);\n\n const onItemClick = React.useCallback(\n (item: AlertActionInterface) => {\n const { action, autoClose } = item;\n\n if (autoClose) {\n setClosing(true);\n waitTransitionFinish(\n elementRef.current,\n (e?: TransitionEvent) => {\n if (!e || e.propertyName === 'opacity') {\n onClose();\n action && action();\n }\n },\n timeout,\n );\n } else {\n action && action();\n }\n },\n [elementRef, waitTransitionFinish, onClose, timeout],\n );\n\n useScrollLock();\n\n return (\n <PopoutWrapper className={className} closing={closing} style={style} onClick={close}>\n <FocusTrap\n {...restProps}\n getRootRef={elementRef}\n onClick={stopPropagation}\n onClose={close}\n timeout={timeout}\n className={classNames(\n styles['Alert'],\n platform === Platform.IOS && styles['Alert--ios'],\n platform === Platform.VKCOM && styles['Alert--vkcom'],\n closing && styles['Alert--closing'],\n isDesktop && styles['Alert--desktop'],\n )}\n role=\"alertdialog\"\n aria-modal\n aria-labelledby={headerId}\n aria-describedby={textId}\n >\n <div className={styles['Alert__content']}>\n {hasReactNode(header) && <AlertHeader id={headerId}>{header}</AlertHeader>}\n {hasReactNode(text) && <AlertText id={textId}>{text}</AlertText>}\n {children}\n </div>\n <AlertActions\n actions={actions}\n actionsAlign={actionsAlign}\n actionsLayout={actionsLayout}\n renderAction={renderAction}\n onItemClick={onItemClick}\n />\n {isDesktop && <ModalDismissButton onClick={close} aria-label={dismissLabel} />}\n </FocusTrap>\n </PopoutWrapper>\n );\n};\n"],"names":["React","classNames","hasReactNode","useAdaptivityWithJSMediaQueries","useId","usePlatform","useWaitTransitionFinish","Platform","stopPropagation","useScrollLock","FocusTrap","ModalDismissButton","PopoutWrapper","AlertActions","AlertHeader","AlertText","Alert","actions","actionsLayout","children","className","style","text","header","onClose","dismissLabel","renderAction","actionsAlign","restProps","generatedId","headerId","textId","platform","isDesktop","waitTransitionFinish","useState","closing","setClosing","elementRef","useRef","timeout","IOS","close","useCallback","current","e","propertyName","onItemClick","item","action","autoClose","onClick","getRootRef","VKCOM","role","aria-modal","aria-labelledby","aria-describedby","div","id","aria-label"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import * as React from 'react';
2
+ import { AnchorHTMLAttributesOnly } from '../../types';
3
+ import { AlertActionInterface } from './Alert';
4
+ export interface AlertActionProps extends Pick<AlertActionInterface, 'Component' | 'mode'>, AnchorHTMLAttributesOnly {
5
+ children: string;
6
+ onClick: React.MouseEventHandler<HTMLElement>;
7
+ }
8
+ export declare const AlertAction: (props: AlertActionProps) => React.JSX.Element;
@@ -0,0 +1,41 @@
1
+ import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
2
+ import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_properties";
3
+ import * as React from "react";
4
+ import { classNames } from "@vkontakte/vkjs";
5
+ import { usePlatform } from "../../hooks/usePlatform";
6
+ import { Platform } from "../../lib/platform";
7
+ import { Button } from "../Button/Button";
8
+ import { Tappable } from "../Tappable/Tappable";
9
+ var AlertActionIos = function(_param) {
10
+ var mode = _param.mode, restProps = _object_without_properties(_param, [
11
+ "mode"
12
+ ]);
13
+ return /*#__PURE__*/ React.createElement(Tappable, _object_spread({
14
+ Component: restProps.href ? "a" : "button",
15
+ className: classNames("vkuiAlert__action", mode === "destructive" && "vkuiAlert__action--mode-destructive", mode === "cancel" && "vkuiAlert__action--mode-cancel")
16
+ }, restProps));
17
+ };
18
+ var AlertActionBase = function(_param) {
19
+ var mode = _param.mode, restProps = _object_without_properties(_param, [
20
+ "mode"
21
+ ]);
22
+ var platform = usePlatform();
23
+ var buttonMode = "tertiary";
24
+ if (platform === Platform.VKCOM) {
25
+ buttonMode = mode === "cancel" ? "secondary" : "primary";
26
+ }
27
+ return /*#__PURE__*/ React.createElement(Button, _object_spread({
28
+ className: classNames("vkuiAlert__button", mode === "cancel" && "vkuiAlert__button--mode-cancel"),
29
+ mode: buttonMode,
30
+ size: "m"
31
+ }, restProps));
32
+ };
33
+ export var AlertAction = function(props) {
34
+ var platform = usePlatform();
35
+ if (platform === Platform.IOS) {
36
+ return /*#__PURE__*/ React.createElement(AlertActionIos, props);
37
+ }
38
+ return /*#__PURE__*/ React.createElement(AlertActionBase, props);
39
+ };
40
+
41
+ //# sourceMappingURL=AlertAction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/Alert/AlertAction.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { Platform } from '../../lib/platform';\nimport { AnchorHTMLAttributesOnly } from '../../types';\nimport { Button, ButtonProps } from '../Button/Button';\nimport { Tappable } from '../Tappable/Tappable';\nimport { AlertActionInterface } from './Alert';\nimport styles from './Alert.module.css';\n\nexport interface AlertActionProps\n extends Pick<AlertActionInterface, 'Component' | 'mode'>,\n AnchorHTMLAttributesOnly {\n children: string;\n onClick: React.MouseEventHandler<HTMLElement>;\n}\n\nconst AlertActionIos = ({ mode, ...restProps }: AlertActionProps) => {\n return (\n <Tappable\n Component={restProps.href ? 'a' : 'button'}\n className={classNames(\n styles['Alert__action'],\n mode === 'destructive' && styles['Alert__action--mode-destructive'],\n mode === 'cancel' && styles['Alert__action--mode-cancel'],\n )}\n {...restProps}\n />\n );\n};\n\nconst AlertActionBase = ({ mode, ...restProps }: AlertActionProps) => {\n const platform = usePlatform();\n\n let buttonMode: ButtonProps['mode'] = 'tertiary';\n\n if (platform === Platform.VKCOM) {\n buttonMode = mode === 'cancel' ? 'secondary' : 'primary';\n }\n\n return (\n <Button\n className={classNames(\n styles['Alert__button'],\n mode === 'cancel' && styles['Alert__button--mode-cancel'],\n )}\n mode={buttonMode}\n size=\"m\"\n {...restProps}\n />\n );\n};\n\nexport const AlertAction = (props: AlertActionProps) => {\n const platform = usePlatform();\n\n if (platform === Platform.IOS) {\n return <AlertActionIos {...props} />;\n }\n\n return <AlertActionBase {...props} />;\n};\n"],"names":["React","classNames","usePlatform","Platform","Button","Tappable","AlertActionIos","mode","restProps","Component","href","className","AlertActionBase","platform","buttonMode","VKCOM","size","AlertAction","props","IOS"],"mappings":";;AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,WAAW,QAAQ,0BAA0B;AACtD,SAASC,QAAQ,QAAQ,qBAAqB;AAE9C,SAASC,MAAM,QAAqB,mBAAmB;AACvD,SAASC,QAAQ,QAAQ,uBAAuB;AAWhD,IAAMC,iBAAiB;QAAGC,cAAAA,MAASC;QAATD;;IACxB,qBACE,oBAACF;QACCI,WAAWD,UAAUE,IAAI,GAAG,MAAM;QAClCC,WAAWV,gCAETM,SAAS,wDACTA,SAAS;OAEPC;AAGV;AAEA,IAAMI,kBAAkB;QAAGL,cAAAA,MAASC;QAATD;;IACzB,IAAMM,WAAWX;IAEjB,IAAIY,aAAkC;IAEtC,IAAID,aAAaV,SAASY,KAAK,EAAE;QAC/BD,aAAaP,SAAS,WAAW,cAAc;IACjD;IAEA,qBACE,oBAACH;QACCO,WAAWV,gCAETM,SAAS;QAEXA,MAAMO;QACNE,MAAK;OACDR;AAGV;AAEA,OAAO,IAAMS,cAAc,SAACC;IAC1B,IAAML,WAAWX;IAEjB,IAAIW,aAAaV,SAASgB,GAAG,EAAE;QAC7B,qBAAO,oBAACb,gBAAmBY;IAC7B;IAEA,qBAAO,oBAACN,iBAAoBM;AAC9B,EAAE"}
@@ -0,0 +1,8 @@
1
+ import * as React from 'react';
2
+ import { AlertActionInterface, AlertProps } from './Alert';
3
+ type ItemClickHandler = (item: AlertActionInterface) => void;
4
+ interface AlertActionsProps extends Pick<AlertProps, 'actions' | 'actionsAlign' | 'renderAction' | 'actionsLayout'> {
5
+ onItemClick: ItemClickHandler;
6
+ }
7
+ export declare const AlertActions: ({ actions, renderAction, onItemClick, actionsAlign, actionsLayout, }: AlertActionsProps) => React.JSX.Element;
8
+ export {};