@vkontakte/vkui 5.0.1 → 5.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/Alert/Alert.d.ts +3 -3
- package/dist/cjs/components/Alert/Alert.js +13 -9
- package/dist/cjs/components/Alert/Alert.js.map +1 -1
- package/dist/cjs/components/ChipsSelect/ChipsSelect.js +2 -2
- package/dist/cjs/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/cjs/components/CustomScrollView/CustomScrollView.js +3 -1
- package/dist/cjs/components/CustomScrollView/CustomScrollView.js.map +1 -1
- package/dist/cjs/components/CustomSelect/CustomSelect.d.ts +4 -0
- package/dist/cjs/components/CustomSelect/CustomSelect.js +11 -6
- package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cjs/components/CustomSelectOption/CustomSelectOption.d.ts +1 -0
- package/dist/cjs/components/CustomSelectOption/CustomSelectOption.js +2 -1
- package/dist/cjs/components/CustomSelectOption/CustomSelectOption.js.map +1 -1
- package/dist/cjs/components/FocusVisible/FocusVisible.js +2 -2
- package/dist/cjs/components/PanelHeaderButton/PanelHeaderButton.js +3 -4
- package/dist/cjs/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
- package/dist/cjs/components/Popover/Popover.js +10 -1
- package/dist/cjs/components/Popover/Popover.js.map +1 -1
- package/dist/cjs/components/SegmentedControl/SegmentedControl.js +3 -2
- package/dist/cjs/components/SegmentedControl/SegmentedControl.js.map +1 -1
- package/dist/cjs/components/SplitCol/SplitCol.js +43 -26
- package/dist/cjs/components/SplitCol/SplitCol.js.map +1 -1
- package/dist/cjs/components/Tappable/Tappable.d.ts +2 -2
- package/dist/cjs/components/Tappable/Tappable.js.map +1 -1
- package/dist/cjs/components/Tooltip/Tooltip.d.ts +4 -0
- package/dist/cjs/components/Tooltip/Tooltip.js +3 -2
- package/dist/cjs/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/cjs/hooks/useEventListener.js +6 -4
- package/dist/cjs/hooks/useEventListener.js.map +1 -1
- package/dist/cjs/hooks/useMediaQueries.js +1 -0
- package/dist/cjs/hooks/useMediaQueries.js.map +1 -1
- package/dist/cjs/lib/adaptivity/types.d.ts +1 -1
- package/dist/cjs/lib/adaptivity/types.js.map +1 -1
- package/dist/cjs/lib/browser.js +0 -1
- package/dist/cjs/lib/browser.js.map +1 -1
- package/dist/cjs/lib/utils.d.ts +0 -1
- package/dist/cjs/lib/utils.js +0 -5
- package/dist/cjs/lib/utils.js.map +1 -1
- package/dist/cjs/shared/breakpoints.d.ts +1 -0
- package/dist/cjs/shared/breakpoints.js +1 -0
- package/dist/cjs/shared/breakpoints.js.map +1 -1
- package/dist/cjs/types.d.ts +6 -0
- package/dist/cjs/types.js.map +1 -1
- package/dist/components/Alert/Alert.d.ts +3 -3
- package/dist/components/Alert/Alert.js +13 -9
- package/dist/components/Alert/Alert.js.map +1 -1
- package/dist/components/ChipsSelect/ChipsSelect.js +2 -2
- package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/components/CustomScrollView/CustomScrollView.js +3 -1
- package/dist/components/CustomScrollView/CustomScrollView.js.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.d.ts +4 -0
- package/dist/components/CustomSelect/CustomSelect.js +11 -6
- package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/components/CustomSelectOption/CustomSelectOption.d.ts +1 -0
- package/dist/components/CustomSelectOption/CustomSelectOption.js +2 -1
- package/dist/components/CustomSelectOption/CustomSelectOption.js.map +1 -1
- package/dist/components/FocusVisible/FocusVisible.js +2 -2
- package/dist/components/PanelHeaderButton/PanelHeaderButton.js +3 -4
- package/dist/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
- package/dist/components/Popover/Popover.js +10 -1
- package/dist/components/Popover/Popover.js.map +1 -1
- package/dist/components/SegmentedControl/SegmentedControl.js +4 -3
- package/dist/components/SegmentedControl/SegmentedControl.js.map +1 -1
- package/dist/components/SplitCol/SplitCol.js +43 -26
- package/dist/components/SplitCol/SplitCol.js.map +1 -1
- package/dist/components/Tappable/Tappable.d.ts +2 -2
- package/dist/components/Tappable/Tappable.js.map +1 -1
- package/dist/components/Tooltip/Tooltip.d.ts +4 -0
- package/dist/components/Tooltip/Tooltip.js +3 -2
- package/dist/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/components.css +4 -4
- package/dist/components.css.map +1 -1
- package/dist/cssm/components/Alert/Alert.d.ts +3 -3
- package/dist/cssm/components/Alert/Alert.js +13 -9
- package/dist/cssm/components/Alert/Alert.js.map +1 -1
- package/dist/cssm/components/Alert/Alert.module.css +1 -1
- package/dist/cssm/components/Banner/Banner.module.css +1 -1
- package/dist/cssm/components/ChipsSelect/ChipsSelect.js +2 -2
- package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/cssm/components/ChipsSelect/ChipsSelect.module.css +1 -1
- package/dist/cssm/components/CustomScrollView/CustomScrollView.js +3 -1
- package/dist/cssm/components/CustomScrollView/CustomScrollView.js.map +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.d.ts +4 -0
- package/dist/cssm/components/CustomSelect/CustomSelect.js +11 -6
- package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.module.css +1 -1
- package/dist/cssm/components/CustomSelectOption/CustomSelectOption.d.ts +1 -0
- package/dist/cssm/components/CustomSelectOption/CustomSelectOption.js +2 -1
- package/dist/cssm/components/CustomSelectOption/CustomSelectOption.js.map +1 -1
- package/dist/cssm/components/FocusVisible/FocusVisible.js +2 -2
- package/dist/cssm/components/FocusVisible/FocusVisible.module.css +1 -1
- package/dist/cssm/components/FormField/FormField.module.css +1 -1
- package/dist/cssm/components/HorizontalScroll/HorizontalScrollArrow.module.css +1 -1
- package/dist/cssm/components/Input/Input.module.css +1 -1
- package/dist/cssm/components/PanelHeader/PanelHeader.module.css +1 -1
- package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.js +3 -4
- package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
- package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.module.css +1 -1
- package/dist/cssm/components/Popover/Popover.js +10 -1
- package/dist/cssm/components/Popover/Popover.js.map +1 -1
- package/dist/cssm/components/SegmentedControl/SegmentedControl.js +4 -3
- package/dist/cssm/components/SegmentedControl/SegmentedControl.js.map +1 -1
- package/dist/cssm/components/SimpleCell/SimpleCell.module.css +1 -1
- package/dist/cssm/components/SplitCol/SplitCol.js +43 -26
- package/dist/cssm/components/SplitCol/SplitCol.js.map +1 -1
- package/dist/cssm/components/SubnavigationButton/SubnavigationButton.module.css +1 -1
- package/dist/cssm/components/Tappable/Tappable.d.ts +2 -2
- package/dist/cssm/components/Tappable/Tappable.js.map +1 -1
- package/dist/cssm/components/Tappable/Tappable.module.css +1 -1
- package/dist/cssm/components/Textarea/Textarea.module.css +1 -1
- package/dist/cssm/components/Tooltip/Tooltip.d.ts +4 -0
- package/dist/cssm/components/Tooltip/Tooltip.js +3 -2
- package/dist/cssm/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/cssm/components/WriteBar/WriteBar.module.css +1 -1
- package/dist/cssm/hooks/useEventListener.js +6 -4
- package/dist/cssm/hooks/useEventListener.js.map +1 -1
- package/dist/cssm/hooks/useMediaQueries.js +1 -0
- package/dist/cssm/hooks/useMediaQueries.js.map +1 -1
- package/dist/cssm/lib/adaptivity/types.d.ts +1 -1
- package/dist/cssm/lib/adaptivity/types.js.map +1 -1
- package/dist/cssm/lib/browser.js +0 -1
- package/dist/cssm/lib/browser.js.map +1 -1
- package/dist/cssm/lib/utils.d.ts +0 -1
- package/dist/cssm/lib/utils.js +0 -3
- package/dist/cssm/lib/utils.js.map +1 -1
- package/dist/cssm/shared/breakpoints.d.ts +1 -0
- package/dist/cssm/shared/breakpoints.js +1 -0
- package/dist/cssm/shared/breakpoints.js.map +1 -1
- package/dist/cssm/styles/components.css +4 -4
- package/dist/cssm/types.d.ts +6 -0
- package/dist/cssm/types.js.map +1 -1
- package/dist/hooks/useEventListener.js +6 -4
- package/dist/hooks/useEventListener.js.map +1 -1
- package/dist/hooks/useMediaQueries.js +1 -0
- package/dist/hooks/useMediaQueries.js.map +1 -1
- package/dist/lib/adaptivity/types.d.ts +1 -1
- package/dist/lib/adaptivity/types.js.map +1 -1
- package/dist/lib/browser.js +0 -1
- package/dist/lib/browser.js.map +1 -1
- package/dist/lib/utils.d.ts +0 -1
- package/dist/lib/utils.js +0 -3
- package/dist/lib/utils.js.map +1 -1
- package/dist/shared/breakpoints.d.ts +1 -0
- package/dist/shared/breakpoints.js +1 -0
- package/dist/shared/breakpoints.js.map +1 -1
- package/dist/types.d.ts +6 -0
- package/dist/types.js.map +1 -1
- package/dist/vkui.css +4 -4
- package/dist/vkui.css.map +1 -1
- package/package.json +3 -3
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { ButtonProps } from "../Button/Button";
|
|
3
|
-
|
|
4
|
-
export interface
|
|
3
|
+
import { AnchorHTMLAttributesOnly } from "../../types";
|
|
4
|
+
export interface AlertActionInterface extends Pick<ButtonProps, "Component">, AnchorHTMLAttributesOnly {
|
|
5
5
|
title: string;
|
|
6
6
|
action?: VoidFunction;
|
|
7
7
|
autoClose?: boolean;
|
|
@@ -9,7 +9,7 @@ export interface AlertAction extends Pick<ButtonProps, "Component" | "href"> {
|
|
|
9
9
|
}
|
|
10
10
|
export interface AlertProps extends React.HTMLAttributes<HTMLElement> {
|
|
11
11
|
actionsLayout?: "vertical" | "horizontal";
|
|
12
|
-
actions?:
|
|
12
|
+
actions?: AlertActionInterface[];
|
|
13
13
|
header?: React.ReactNode;
|
|
14
14
|
text?: React.ReactNode;
|
|
15
15
|
onClose: VoidFunction;
|
|
@@ -2,7 +2,8 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
|
2
2
|
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
3
3
|
import _extends from "@babel/runtime/helpers/extends";
|
|
4
4
|
var _excluded = ["action", "onItemClick"],
|
|
5
|
-
_excluded2 = ["
|
|
5
|
+
_excluded2 = ["Component", "title", "action", "autoClose", "mode"],
|
|
6
|
+
_excluded3 = ["actions", "actionsLayout", "children", "className", "style", "text", "header", "onClose", "dismissLabel"];
|
|
6
7
|
import * as React from "react";
|
|
7
8
|
import { Tappable } from "../Tappable/Tappable";
|
|
8
9
|
import { PopoutWrapper } from "../PopoutWrapper/PopoutWrapper";
|
|
@@ -67,14 +68,17 @@ var AlertAction = function AlertAction(_ref) {
|
|
|
67
68
|
}, [onItemClick, action]);
|
|
68
69
|
if (platform === Platform.IOS) {
|
|
69
70
|
var _action$Component = action.Component,
|
|
70
|
-
Component = _action$Component === void 0 ? "button" : _action$Component
|
|
71
|
+
Component = _action$Component === void 0 ? "button" : _action$Component,
|
|
72
|
+
title = action.title,
|
|
73
|
+
actionProp = action.action,
|
|
74
|
+
autoClose = action.autoClose,
|
|
75
|
+
_mode = action.mode,
|
|
76
|
+
restActionProps = _objectWithoutProperties(action, _excluded2);
|
|
71
77
|
return /*#__PURE__*/React.createElement(Tappable, _extends({
|
|
72
|
-
Component:
|
|
73
|
-
className: classNamesString("vkuiAlert__action", styles["Alert__action--mode-".concat(
|
|
74
|
-
onClick: handleItemClick
|
|
75
|
-
|
|
76
|
-
target: action.target
|
|
77
|
-
}, restProps), action.title);
|
|
78
|
+
Component: restActionProps.href ? "a" : Component,
|
|
79
|
+
className: classNamesString("vkuiAlert__action", styles["Alert__action--mode-".concat(_mode)]),
|
|
80
|
+
onClick: handleItemClick
|
|
81
|
+
}, restActionProps, restProps), title);
|
|
78
82
|
}
|
|
79
83
|
var mode = "tertiary";
|
|
80
84
|
if (platform === Platform.VKCOM) {
|
|
@@ -107,7 +111,7 @@ export var Alert = function Alert(_ref2) {
|
|
|
107
111
|
onClose = _ref2.onClose,
|
|
108
112
|
_ref2$dismissLabel = _ref2.dismissLabel,
|
|
109
113
|
dismissLabel = _ref2$dismissLabel === void 0 ? "Закрыть предупреждение" : _ref2$dismissLabel,
|
|
110
|
-
restProps = _objectWithoutProperties(_ref2,
|
|
114
|
+
restProps = _objectWithoutProperties(_ref2, _excluded3);
|
|
111
115
|
var platform = usePlatform();
|
|
112
116
|
var _useAdaptivityWithJSM = useAdaptivityWithJSMediaQueries(),
|
|
113
117
|
isDesktop = _useAdaptivityWithJSM.isDesktop;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Alert.js","names":["React","Tappable","PopoutWrapper","classNamesString","Platform","Button","hasReactNode","stopPropagation","Title","Caption","Footnote","Text","ModalDismissButton","FocusTrap","useScrollLock","useWaitTransitionFinish","usePlatform","useAdaptivityWithJSMediaQueries","AlertHeader","props","platform","IOS","AlertText","VKCOM","AlertAction","action","onItemClick","restProps","handleItemClick","useCallback","Component","href","styles","mode","target","title","Alert","actions","actionsLayout","children","className","style","text","header","onClose","dismissLabel","isDesktop","waitTransitionFinish","useState","closing","setClosing","elementRef","useRef","resolvedActionsLayout","timeout","close","current","e","propertyName","item","autoClose","map","i"],"sources":["../../../../src/components/Alert/Alert.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Tappable } from \"../Tappable/Tappable\";\nimport { PopoutWrapper } from \"../PopoutWrapper/PopoutWrapper\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { Platform } from \"../../lib/platform\";\nimport { Button, ButtonProps } from \"../Button/Button\";\nimport { hasReactNode, stopPropagation } from \"../../lib/utils\";\nimport { Title } from \"../Typography/Title/Title\";\nimport { Caption } from \"../Typography/Caption/Caption\";\nimport { Footnote } from \"../Typography/Footnote/Footnote\";\nimport { Text } from \"../Typography/Text/Text\";\nimport { ModalDismissButton } from \"../ModalDismissButton/ModalDismissButton\";\nimport { FocusTrap } from \"../FocusTrap/FocusTrap\";\nimport { useScrollLock } from \"../AppRoot/ScrollContext\";\nimport { useWaitTransitionFinish } from \"../../hooks/useWaitTransitionFinish\";\nimport { usePlatform } from \"../../hooks/usePlatform\";\nimport { useAdaptivityWithJSMediaQueries } from \"../../hooks/useAdaptivityWithJSMediaQueries\";\nimport styles from \"./Alert.module.css\";\n\nexport type AlertActionInterface = AlertAction &\n React.AnchorHTMLAttributes<HTMLElement>;\n\nexport interface AlertAction extends Pick<ButtonProps, \"Component\" | \"href\"> {\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?: AlertAction[];\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 {\n id: string;\n children?: React.ReactNode;\n}\n\nconst AlertHeader = (props: AlertTypography) => {\n const platform = usePlatform();\n\n switch (platform) {\n case Platform.IOS:\n return (\n <Title\n className={styles[\"Alert__header\"]}\n weight=\"1\"\n level=\"3\"\n {...props}\n />\n );\n default:\n return (\n <Title\n className={styles[\"Alert__header\"]}\n weight=\"2\"\n level=\"2\"\n {...props}\n />\n );\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 (\n <Text\n Component=\"span\"\n className={styles[\"Alert__text\"]}\n weight=\"3\"\n {...props}\n />\n );\n }\n};\n\ninterface AlertActionProps {\n action: AlertActionInterface;\n onItemClick: ItemClickHandler;\n}\n\nconst AlertAction = ({\n action,\n onItemClick,\n ...restProps\n}: AlertActionProps) => {\n const platform = usePlatform();\n const handleItemClick = React.useCallback(\n () => onItemClick(action),\n [onItemClick, action]\n );\n\n if (platform === Platform.IOS) {\n const { Component = \"button\" } = action;\n return (\n <Tappable\n Component={action.href ? \"a\" : Component}\n className={classNamesString(\n styles[\"Alert__action\"],\n styles[`Alert__action--mode-${action.mode}`]\n )}\n onClick={handleItemClick}\n href={action.href}\n target={action.target}\n {...restProps}\n >\n {action.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={classNamesString(\n styles[\"Alert__button\"],\n styles[`Alert__button--mode-${action.mode}`]\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 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\n className={className}\n closing={closing}\n style={style}\n onClick={close}\n >\n <FocusTrap\n {...restProps}\n getRootRef={elementRef}\n onClick={stopPropagation}\n onClose={close}\n timeout={timeout}\n className={classNamesString(\n styles[\"Alert\"],\n platform === Platform.IOS && styles[\"Alert--ios\"],\n platform === Platform.VKCOM && styles[\"Alert--vkcom\"],\n resolvedActionsLayout === \"vertical\"\n ? styles[\"Alert--v\"]\n : styles[\"Alert--h\"],\n closing && styles[\"Alert--closing\"],\n isDesktop && styles[\"Alert--desktop\"]\n )}\n role=\"alertdialog\"\n aria-modal\n aria-labelledby=\"vkui--alert--title\"\n aria-describedby=\"vkui--alert--desc\"\n >\n <div className={styles[\"Alert__content\"]}>\n {hasReactNode(header) && (\n <AlertHeader id=\"vkui--alert--title\">{header}</AlertHeader>\n )}\n {hasReactNode(text) && (\n <AlertText id=\"vkui--alert--desc\">{text}</AlertText>\n )}\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 && (\n <ModalDismissButton onClick={close} aria-label={dismissLabel} />\n )}\n </FocusTrap>\n </PopoutWrapper>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Alert.js","names":["React","Tappable","PopoutWrapper","classNamesString","Platform","Button","hasReactNode","stopPropagation","Title","Caption","Footnote","Text","ModalDismissButton","FocusTrap","useScrollLock","useWaitTransitionFinish","usePlatform","useAdaptivityWithJSMediaQueries","AlertHeader","props","platform","IOS","AlertText","VKCOM","AlertAction","action","onItemClick","restProps","handleItemClick","useCallback","Component","title","actionProp","autoClose","mode","restActionProps","href","styles","target","Alert","actions","actionsLayout","children","className","style","text","header","onClose","dismissLabel","isDesktop","waitTransitionFinish","useState","closing","setClosing","elementRef","useRef","resolvedActionsLayout","timeout","close","current","e","propertyName","item","map","i"],"sources":["../../../../src/components/Alert/Alert.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Tappable } from \"../Tappable/Tappable\";\nimport { PopoutWrapper } from \"../PopoutWrapper/PopoutWrapper\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { Platform } from \"../../lib/platform\";\nimport { Button, ButtonProps } from \"../Button/Button\";\nimport { hasReactNode, stopPropagation } from \"../../lib/utils\";\nimport { Title } from \"../Typography/Title/Title\";\nimport { Caption } from \"../Typography/Caption/Caption\";\nimport { Footnote } from \"../Typography/Footnote/Footnote\";\nimport { Text } from \"../Typography/Text/Text\";\nimport { ModalDismissButton } from \"../ModalDismissButton/ModalDismissButton\";\nimport { FocusTrap } from \"../FocusTrap/FocusTrap\";\nimport { useScrollLock } from \"../AppRoot/ScrollContext\";\nimport { useWaitTransitionFinish } from \"../../hooks/useWaitTransitionFinish\";\nimport { usePlatform } from \"../../hooks/usePlatform\";\nimport { useAdaptivityWithJSMediaQueries } from \"../../hooks/useAdaptivityWithJSMediaQueries\";\nimport { AnchorHTMLAttributesOnly } from \"../../types\";\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 {\n id: string;\n children?: React.ReactNode;\n}\n\nconst AlertHeader = (props: AlertTypography) => {\n const platform = usePlatform();\n\n switch (platform) {\n case Platform.IOS:\n return (\n <Title\n className={styles[\"Alert__header\"]}\n weight=\"1\"\n level=\"3\"\n {...props}\n />\n );\n default:\n return (\n <Title\n className={styles[\"Alert__header\"]}\n weight=\"2\"\n level=\"2\"\n {...props}\n />\n );\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 (\n <Text\n Component=\"span\"\n className={styles[\"Alert__text\"]}\n weight=\"3\"\n {...props}\n />\n );\n }\n};\n\ninterface AlertActionProps {\n action: AlertActionInterface;\n onItemClick: ItemClickHandler;\n}\n\nconst AlertAction = ({\n action,\n onItemClick,\n ...restProps\n}: AlertActionProps) => {\n const platform = usePlatform();\n const handleItemClick = React.useCallback(\n () => onItemClick(action),\n [onItemClick, action]\n );\n\n if (platform === Platform.IOS) {\n const {\n Component = \"button\",\n title,\n action: actionProp,\n autoClose,\n mode,\n ...restActionProps\n } = action;\n\n return (\n <Tappable\n Component={restActionProps.href ? \"a\" : Component}\n className={classNamesString(\n styles[\"Alert__action\"],\n styles[`Alert__action--mode-${mode}`]\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={classNamesString(\n styles[\"Alert__button\"],\n styles[`Alert__button--mode-${action.mode}`]\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 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\n className={className}\n closing={closing}\n style={style}\n onClick={close}\n >\n <FocusTrap\n {...restProps}\n getRootRef={elementRef}\n onClick={stopPropagation}\n onClose={close}\n timeout={timeout}\n className={classNamesString(\n styles[\"Alert\"],\n platform === Platform.IOS && styles[\"Alert--ios\"],\n platform === Platform.VKCOM && styles[\"Alert--vkcom\"],\n resolvedActionsLayout === \"vertical\"\n ? styles[\"Alert--v\"]\n : styles[\"Alert--h\"],\n closing && styles[\"Alert--closing\"],\n isDesktop && styles[\"Alert--desktop\"]\n )}\n role=\"alertdialog\"\n aria-modal\n aria-labelledby=\"vkui--alert--title\"\n aria-describedby=\"vkui--alert--desc\"\n >\n <div className={styles[\"Alert__content\"]}>\n {hasReactNode(header) && (\n <AlertHeader id=\"vkui--alert--title\">{header}</AlertHeader>\n )}\n {hasReactNode(text) && (\n <AlertText id=\"vkui--alert--desc\">{text}</AlertText>\n )}\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 && (\n <ModalDismissButton onClick={close} aria-label={dismissLabel} />\n )}\n </FocusTrap>\n </PopoutWrapper>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.vkuiAlert{animation:vkui-animation-android-alert-intro .2s var(--vkui--animation_easing_platform);border-radius:var(--vkui--size_border_radius_paper--regular);box-shadow:var(--vkui--elevation4);color:var(--vkui--color_text_primary);margin:auto 24px;max-width:416px;min-width:280px;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vkuiAlert--desktop{width:100%}.vkuiAlert--closing{opacity:0;transform:scale(.95);transition:transform .2s var(--vkui--animation_easing_platform),opacity .2s var(--vkui--animation_easing_platform)}.vkuiAlert:before{background-color:var(--vkui--color_background_modal);border-radius:inherit;content:"";height:100%;left:0;position:absolute;top:0;width:100%;z-index:1}.vkuiAlert__content{padding:24px 24px 20px;position:relative;z-index:2}.vkuiAlert__action{background:transparent;white-space:nowrap}.vkuiAlert__actions{display:flex;max-width:100%;padding:0 16px 16px;position:relative;z-index:2}.vkuiAlert__header{margin-bottom:8px}.vkuiAlert__text{color:var(--vkui--color_text_secondary)}.vkuiAlert--h .vkuiAlert__actions{justify-content:flex-end}.vkuiAlert--h .vkuiAlert__button{margin-left:8px}.vkuiAlert--v .vkuiAlert__actions{align-items:flex-end;flex-direction:column}.vkuiAlert--v .vkuiAlert__button{margin-bottom:4px;margin-top:4px}.vkuiAlert--v .vkuiAlert__button:first-child{margin-top:0}.vkuiAlert--v .vkuiAlert__button:last-child{margin-bottom:0}.vkuiAlert--ios{animation:vkui-animation-ios-alert-intro .3s var(--vkui--animation_easing_platform);box-shadow:none;min-width:270px;overflow:hidden;width:270px}.vkuiAlert--ios.vkuiAlert--closing{opacity:0;transform:none;transition:opacity .3s var(--vkui--animation_easing_platform)}.vkuiAlert--ios .vkuiAlert__content{padding:19px 16px 20px;text-align:center}.vkuiAlert--ios .vkuiAlert__header:not(:last-child){margin-bottom:7px}.vkuiAlert--ios .vkuiAlert__text{color:inherit}.vkuiAlert--ios .vkuiAlert__content:after{background:var(--vkui--color_separator_primary_alpha);bottom:0;content:"";height:1px;left:0;position:absolute;right:0;transform-origin:center bottom}.vkuiAlert--ios .vkuiAlert__actions{padding:initial}.vkuiAlert--ios.vkuiAlert--v .vkuiAlert__actions{align-items:normal;flex-direction:column}.vkuiAlert--ios .vkuiAlert__action{border:0;border-radius:0;color:var(--vkui--color_text_accent);display:block;font-family:var(--vkui--font_family_base);font-size:17px;height:44px;line-height:44px;margin:0;overflow:hidden;padding:0 6px;position:relative;text-align:center;text-decoration:none;text-overflow:ellipsis}.vkuiAlert--ios .vkuiAlert__action:active{z-index:1}.vkuiAlert--ios .vkuiAlert__action:after{background:var(--vkui--color_separator_primary_alpha);content:"";position:absolute}.vkuiAlert--ios.vkuiAlert--h .vkuiAlert__action:after{height:100%;right:0;top:0;transform-origin:right center;width:1px}.vkuiAlert--ios.vkuiAlert--h .vkuiAlert__action:last-child:after{content:none}.vkuiAlert--ios.vkuiAlert--h .vkuiAlert__action{flex-basis:0;flex-grow:1;flex-shrink:1}.vkuiAlert--ios.vkuiAlert--h .vkuiAlert__action:first-child{border-bottom-left-radius:
|
|
1
|
+
.vkuiAlert{animation:vkui-animation-android-alert-intro .2s var(--vkui--animation_easing_platform);border-radius:var(--vkui--size_border_radius_paper--regular);box-shadow:var(--vkui--elevation4);color:var(--vkui--color_text_primary);margin:auto 24px;max-width:416px;min-width:280px;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vkuiAlert--desktop{width:100%}.vkuiAlert--closing{opacity:0;transform:scale(.95);transition:transform .2s var(--vkui--animation_easing_platform),opacity .2s var(--vkui--animation_easing_platform)}.vkuiAlert:before{background-color:var(--vkui--color_background_modal);border-radius:inherit;content:"";height:100%;left:0;position:absolute;top:0;width:100%;z-index:1}.vkuiAlert__content{padding:24px 24px 20px;position:relative;z-index:2}.vkuiAlert__action{background:transparent;white-space:nowrap}.vkuiAlert__actions{display:flex;max-width:100%;padding:0 16px 16px;position:relative;z-index:2}.vkuiAlert__header{margin-bottom:8px}.vkuiAlert__text{color:var(--vkui--color_text_secondary)}.vkuiAlert--h .vkuiAlert__actions{justify-content:flex-end}.vkuiAlert--h .vkuiAlert__button{margin-left:8px}.vkuiAlert--v .vkuiAlert__actions{align-items:flex-end;flex-direction:column}.vkuiAlert--v .vkuiAlert__button{margin-bottom:4px;margin-top:4px}.vkuiAlert--v .vkuiAlert__button:first-child{margin-top:0}.vkuiAlert--v .vkuiAlert__button:last-child{margin-bottom:0}.vkuiAlert--ios{animation:vkui-animation-ios-alert-intro .3s var(--vkui--animation_easing_platform);box-shadow:none;min-width:270px;overflow:hidden;width:270px}.vkuiAlert--ios.vkuiAlert--closing{opacity:0;transform:none;transition:opacity .3s var(--vkui--animation_easing_platform)}.vkuiAlert--ios .vkuiAlert__content{padding:19px 16px 20px;text-align:center}.vkuiAlert--ios .vkuiAlert__header:not(:last-child){margin-bottom:7px}.vkuiAlert--ios .vkuiAlert__text{color:inherit}.vkuiAlert--ios .vkuiAlert__content:after{background:var(--vkui--color_separator_primary_alpha);bottom:0;content:"";height:1px;left:0;position:absolute;right:0;transform-origin:center bottom}.vkuiAlert--ios .vkuiAlert__actions{padding:initial}.vkuiAlert--ios.vkuiAlert--v .vkuiAlert__actions{align-items:normal;flex-direction:column}.vkuiAlert--ios .vkuiAlert__action{border:0;border-radius:0;color:var(--vkui--color_text_accent);display:block;font-family:var(--vkui--font_family_base);font-size:17px;height:44px;line-height:44px;margin:0;overflow:hidden;padding:0 6px;position:relative;text-align:center;text-decoration:none;text-overflow:ellipsis}.vkuiAlert--ios .vkuiAlert__action:active{z-index:1}.vkuiAlert--ios .vkuiAlert__action:after{background:var(--vkui--color_separator_primary_alpha);content:"";position:absolute}.vkuiAlert--ios.vkuiAlert--h .vkuiAlert__action:after{height:100%;right:0;top:0;transform-origin:right center;width:1px}.vkuiAlert--ios.vkuiAlert--h .vkuiAlert__action:last-child:after{content:none}.vkuiAlert--ios.vkuiAlert--h .vkuiAlert__action{flex-basis:0;flex-grow:1;flex-shrink:1}.vkuiAlert--ios.vkuiAlert--h .vkuiAlert__action:first-child{border-bottom-left-radius:var(--vkui--size_border_radius_paper--regular)}.vkuiAlert--ios.vkuiAlert--h .vkuiAlert__action:last-child{border-bottom-right-radius:var(--vkui--size_border_radius_paper--regular)}.vkuiAlert--ios.vkuiAlert--v .vkuiAlert__action:after{bottom:0;height:1px;left:0;transform-origin:center bottom;width:100%}.vkuiAlert--ios.vkuiAlert--v .vkuiAlert__action:last-child:after{content:none}.vkuiAlert--ios.vkuiAlert--v .vkuiAlert__action:last-child{border-radius:0 0 12px 12px}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){.vkuiAlert--ios .vkuiAlert__content:after,.vkuiAlert--ios.vkuiAlert--v .vkuiAlert__action:after{transform:scaleY(.5)}.vkuiAlert--ios.vkuiAlert--h .vkuiAlert__action:after{transform:scaleX(.5)}}@media (-webkit-min-device-pixel-ratio:3),(min-resolution:3dppx){.vkuiAlert--ios .vkuiAlert__content:after,.vkuiAlert--ios.vkuiAlert--v .vkuiAlert__action:after{transform:scaleY(.33)}.vkuiAlert--ios.vkuiAlert--h .vkuiAlert__action:after{transform:scaleX(.33)}}.vkuiAlert--ios .vkuiAlert__action--mode-cancel{font-weight:600}.vkuiAlert--ios .vkuiAlert__action--mode-destructive{color:var(--vkui--color_text_negative)}.vkuiAlert--vkcom{box-shadow:0 0 2px rgba(0,0,0,.12),0 0 96px rgba(0,0,0,.16);width:400px}.vkuiAlert--vkcom .vkuiAlert__content{padding:24px}.vkuiAlert--vkcom .vkuiAlert__actions{padding:0 24px 16px}.vkuiAlert--vkcom .vkuiAlert__button{order:2}.vkuiAlert--vkcom .vkuiAlert__button--mode-cancel{order:1}@keyframes vkui-animation-ios-alert-intro{0%{opacity:0;transform:scale(1.05)}to{opacity:1;transform:scale(1)}}@keyframes vkui-animation-android-alert-intro{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.vkuiBanner{color:var(--vkui--color_text_primary);margin:12px 0;padding:0 var(--vkui--size_base_padding_horizontal--regular)}.vkuiBanner__in{align-items:stretch;background-color:var(--vkui--color_background_secondary);border-radius:var(--vkui--size_border_radius--regular);display:flex;flex-flow:row nowrap;overflow:hidden;padding:12px 12px 12px 16px;position:relative}.vkuiBanner__in:before{border:var(--vkui_internal--thin_border) solid var(--vkui--color_image_border_alpha);border-radius:inherit;box-sizing:border-box;content:"";display:block;height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%;z-index:2}.vkuiBanner__before{margin-right:12px;position:relative;z-index:2}.vkuiBanner__content{display:flex;flex:1;flex-direction:column;justify-content:center;min-width:0;position:relative;z-index:2}.vkuiBanner__header{display:block}.vkuiBanner__subheader{display:block}.vkuiBanner__subheader,.vkuiBanner__text{color:var(--vkui--color_text_subhead)}.vkuiBanner__bg{left:0;position:absolute;top:0;z-index:1}.vkuiBanner__bg,.vkuiBanner__bg>*{height:100%;width:100%}.vkuiBanner__aside{color:var(--vkui--color_icon_tertiary);justify-content:flex-end;width:28px}.vkuiBanner__aside,.vkuiBanner__dismiss{align-content:center;align-items:center;display:flex;flex-flow:row nowrap}.vkuiBanner__dismiss{color:var(--vkui--color_icon_secondary);justify-content:center;position:absolute;right:2px;top:2px;z-index:3}.vkuiBanner__actions{margin-top:12px}.vkuiBanner__subheader:not(:first-child),.vkuiBanner__text:not(:first-child){margin-top:2px}.vkuiBanner--mode-image .vkuiBanner__in{background-color:var(--vkui--color_background_secondary)}.vkuiBanner--inverted,.vkuiBanner--mode-image .vkuiBanner__dismiss{color:var(--vkui--color_text_contrast)}.vkuiBanner--inverted .vkuiBanner__subheader{color:var(--vkui--color_text_contrast);opacity:.72}.vkuiBanner--size-s .vkuiBanner__before{margin-left:-4px}.vkuiBanner--size-m .vkuiBanner__in{padding:16px}.vkuiBanner--size-m .vkuiBanner__subheader:not(:first-child),.vkuiBanner--size-m .vkuiBanner__text:not(:first-child){margin-top:4px}.vkuiBanner--ios .vkuiBanner__dismiss,.vkuiBanner--ios.vkuiBanner--mode-image .vkuiBanner__dismiss{color:var(--vkui--color_icon_tertiary)}.vkuiFormStatus .vkuiBanner__in:before{border:none}.vkuiFormStatus--mode-error .vkuiBanner__in{background-color:var(--vkui--color_background_negative_tint)}.vkuiFormStatus--mode-error .vkuiBanner__subheader{color:var(--vkui--color_background_negative)}
|
|
1
|
+
.vkuiBanner{color:var(--vkui--color_text_primary);isolation:isolate;margin:12px 0;padding:0 var(--vkui--size_base_padding_horizontal--regular)}.vkuiBanner__in{align-items:stretch;background-color:var(--vkui--color_background_secondary);border-radius:var(--vkui--size_border_radius--regular);display:flex;flex-flow:row nowrap;overflow:hidden;padding:12px 12px 12px 16px;position:relative}.vkuiBanner__in:before{border:var(--vkui_internal--thin_border) solid var(--vkui--color_image_border_alpha);border-radius:inherit;box-sizing:border-box;content:"";display:block;height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%;z-index:2}.vkuiBanner__before{margin-right:12px;position:relative;z-index:2}.vkuiBanner__content{display:flex;flex:1;flex-direction:column;justify-content:center;min-width:0;position:relative;z-index:2}.vkuiBanner__header{display:block}.vkuiBanner__subheader{display:block}.vkuiBanner__subheader,.vkuiBanner__text{color:var(--vkui--color_text_subhead)}.vkuiBanner__bg{left:0;position:absolute;top:0;z-index:1}.vkuiBanner__bg,.vkuiBanner__bg>*{height:100%;width:100%}.vkuiBanner__aside{color:var(--vkui--color_icon_tertiary);justify-content:flex-end;width:28px}.vkuiBanner__aside,.vkuiBanner__dismiss{align-content:center;align-items:center;display:flex;flex-flow:row nowrap}.vkuiBanner__dismiss{color:var(--vkui--color_icon_secondary);justify-content:center;position:absolute;right:2px;top:2px;z-index:3}.vkuiBanner__actions{margin-top:12px}.vkuiBanner__subheader:not(:first-child),.vkuiBanner__text:not(:first-child){margin-top:2px}.vkuiBanner--mode-image .vkuiBanner__in{background-color:var(--vkui--color_background_secondary)}.vkuiBanner--inverted,.vkuiBanner--mode-image .vkuiBanner__dismiss{color:var(--vkui--color_text_contrast)}.vkuiBanner--inverted .vkuiBanner__subheader{color:var(--vkui--color_text_contrast);opacity:.72}.vkuiBanner--size-s .vkuiBanner__before{margin-left:-4px}.vkuiBanner--size-m .vkuiBanner__in{padding:16px}.vkuiBanner--size-m .vkuiBanner__subheader:not(:first-child),.vkuiBanner--size-m .vkuiBanner__text:not(:first-child){margin-top:4px}.vkuiBanner--ios .vkuiBanner__dismiss,.vkuiBanner--ios.vkuiBanner--mode-image .vkuiBanner__dismiss{color:var(--vkui--color_icon_tertiary)}.vkuiFormStatus .vkuiBanner__in:before{border:none}.vkuiFormStatus--mode-error .vkuiBanner__in{background-color:var(--vkui--color_background_negative_tint)}.vkuiFormStatus--mode-error .vkuiBanner__subheader{color:var(--vkui--color_background_negative)}
|
|
@@ -235,7 +235,7 @@ export var ChipsSelect = function ChipsSelect(props) {
|
|
|
235
235
|
return !prevOpened;
|
|
236
236
|
});
|
|
237
237
|
};
|
|
238
|
-
return /*#__PURE__*/React.createElement(FormField, {
|
|
238
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(FormField, {
|
|
239
239
|
getRootRef: rootRef,
|
|
240
240
|
style: style,
|
|
241
241
|
className: classNamesString("vkuiChipsSelect", opened && (isPopperDirectionTop ? "vkuiChipsSelect--pop-up" : "vkuiChipsSelect--pop-down"), className),
|
|
@@ -270,7 +270,7 @@ export var ChipsSelect = function ChipsSelect(props) {
|
|
|
270
270
|
getRef: getRef,
|
|
271
271
|
disabled: disabled,
|
|
272
272
|
onInputChange: handleInputChange
|
|
273
|
-
})), opened && /*#__PURE__*/React.createElement(CustomSelectDropdown, {
|
|
273
|
+
}))), opened && /*#__PURE__*/React.createElement(CustomSelectDropdown, {
|
|
274
274
|
targetRef: rootRef,
|
|
275
275
|
placement: popupDirection,
|
|
276
276
|
scrollBoxRef: scrollBoxRef,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChipsSelect.js","names":["React","DropdownIcon","classNamesString","ChipsInputBase","chipsInputDefaultProps","CustomSelectOption","useChipsSelect","noop","useDOM","Footnote","useExternRef","useGlobalEventListener","defaultFilterFn","CustomSelectDropdown","FormField","IconButton","FOCUS_ACTION_NEXT","FOCUS_ACTION_PREV","chipsSelectDefaultProps","emptyText","creatableText","onChangeStart","creatable","fetching","showSelected","closeAfterSelect","options","filterFn","renderOption","props","ChipsSelect","propsWithDefault","style","onFocus","onKeyDown","className","getRef","getRootRef","disabled","placeholder","tabIndex","getOptionValue","getOptionLabel","getNewOptionData","renderChip","popupDirection","inputValue","before","fixDropdownWidth","forceDropdownPortal","restProps","document","useState","undefined","popperPlacement","setPopperPlacement","scrollBoxRef","useRef","rootRef","fieldValue","selectedOptions","opened","setOpened","addOptionFromInput","filteredOptions","addOption","handleInputChange","clearInput","focusedOption","setFocusedOption","focusedOptionIndex","setFocusedOptionIndex","showCreatable","Boolean","length","handleFocus","e","handleClickOutside","target","current","contains","chipsSelectOptions","scrollToElement","index","center","dropdown","item","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","oldIndex","focusOption","nextIndex","type","handleKeyDown","key","defaultPrevented","preventDefault","option","includes","useEffect","findIndex","value","renderChipWrapper","renderChipProps","onRemoveWrapper","stopPropagation","onRemove","isPopperDirectionTop","onPlacementChange","useCallback","placement","onDropdownMouseLeave","observableRefs","useMemo","toggleOpened","prevOpened","readOnly","map","label","hovered","selected","find","selectedOption","children","onMouseDown","onMouseEnter"],"sources":["../../../../src/components/ChipsSelect/ChipsSelect.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { DropdownIcon } from \"../DropdownIcon/DropdownIcon\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { ChipOption, ChipValue, RenderChip } from \"../Chip/Chip\";\nimport { ChipsInputProps } from \"../ChipsInput/ChipsInput\";\nimport {\n ChipsInputBase,\n chipsInputDefaultProps,\n} from \"../ChipsInputBase/ChipsInputBase\";\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from \"../CustomSelectOption/CustomSelectOption\";\nimport { useChipsSelect } from \"../../hooks/useChipsSelect\";\nimport { noop } from \"../../lib/utils\";\nimport { useDOM } from \"../../lib/dom\";\nimport { Footnote } from \"../Typography/Footnote/Footnote\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { useGlobalEventListener } from \"../../hooks/useGlobalEventListener\";\nimport { defaultFilterFn } from \"../../lib/select\";\nimport { Placement } from \"../Popper/Popper\";\nimport { CustomSelectDropdown } from \"../CustomSelectDropdown/CustomSelectDropdown\";\nimport { FormField } from \"../FormField/FormField\";\nimport { IconButton } from \"../IconButton/IconButton\";\nimport styles from \"./ChipsSelect.module.css\";\n\nexport interface ChipsSelectProps<Option extends ChipOption>\n extends Omit<ChipsInputProps<Option>, \"after\"> {\n popupDirection?: \"top\" | \"bottom\";\n options?: Option[];\n filterFn?:\n | false\n | ((\n value?: string,\n option?: Option,\n getOptionLabel?: Pick<\n ChipsInputProps<Option>,\n \"getOptionLabel\"\n >[\"getOptionLabel\"]\n ) => boolean);\n /**\n * Возможность создавать чипы которых нет в списке (по enter или с помощью пункта в меню, см creatableText)\n */\n creatable?: boolean;\n /**\n * Отрисовка лоадера вместо списка опций в выпадающем списке\n */\n fetching?: boolean;\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Показывать или скрывать уже выбранные опции\n */\n showSelected?: boolean;\n /**\n * Текст для пункта создающего чипы при клике, так же отвечает за то будет ли показан этот пункт (показывается после того как в списке не отсанется опций)\n */\n creatableText?: string;\n /**\n * Текст который показывается если список опций пуст\n */\n emptyText?: string;\n /**\n * Событие срабатывающее перед onChange\n */\n onChangeStart?: (\n e: React.MouseEvent | React.KeyboardEvent,\n option: Option\n ) => void;\n /**\n * Закрытие выпадающего списка после выбора элемента\n */\n closeAfterSelect?: boolean;\n fixDropdownWidth?: boolean;\n forceDropdownPortal?: boolean;\n}\n\ntype FocusActionType = \"next\" | \"prev\";\n\nconst FOCUS_ACTION_NEXT: FocusActionType = \"next\";\nconst FOCUS_ACTION_PREV: FocusActionType = \"prev\";\n\nconst chipsSelectDefaultProps: ChipsSelectProps<any> = {\n ...chipsInputDefaultProps,\n emptyText: \"Ничего не найдено\",\n creatableText: \"Создать значение\",\n onChangeStart: noop,\n creatable: false,\n fetching: false,\n showSelected: true,\n closeAfterSelect: true,\n options: [],\n filterFn: defaultFilterFn,\n renderOption(props) {\n return <CustomSelectOption {...props} />;\n },\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ChipsSelect\n */\nexport const ChipsSelect = <Option extends ChipOption>(\n props: ChipsSelectProps<Option>\n) => {\n const propsWithDefault = { ...chipsSelectDefaultProps, ...props };\n const {\n style,\n onFocus,\n onKeyDown,\n className,\n fetching,\n renderOption,\n emptyText,\n getRef,\n getRootRef,\n disabled,\n placeholder,\n tabIndex,\n getOptionValue,\n getOptionLabel,\n showSelected,\n getNewOptionData,\n renderChip,\n popupDirection,\n creatable,\n filterFn,\n inputValue,\n creatableText,\n closeAfterSelect,\n onChangeStart,\n before,\n options,\n fixDropdownWidth,\n forceDropdownPortal,\n ...restProps\n } = propsWithDefault;\n\n const { document } = useDOM();\n\n const [popperPlacement, setPopperPlacement] = React.useState<\n Placement | undefined\n >(undefined);\n\n const scrollBoxRef = React.useRef<HTMLDivElement>(null);\n const rootRef = useExternRef(getRef);\n const {\n fieldValue,\n selectedOptions = [],\n opened,\n setOpened,\n addOptionFromInput,\n filteredOptions,\n addOption,\n handleInputChange,\n clearInput,\n focusedOption,\n setFocusedOption,\n focusedOptionIndex,\n setFocusedOptionIndex,\n } = useChipsSelect(propsWithDefault);\n\n const showCreatable = Boolean(\n creatable && creatableText && !filteredOptions.length && fieldValue\n );\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setOpened(true);\n setFocusedOptionIndex(0);\n onFocus!(e);\n };\n\n const handleClickOutside = (e: MouseEvent) => {\n if (\n e.target !== rootRef.current &&\n !rootRef.current?.contains(e.target as Node)\n ) {\n setOpened(false);\n }\n };\n\n const chipsSelectOptions = React.useRef<HTMLElement[]>([]).current;\n\n const scrollToElement = (index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const item = chipsSelectOptions[index];\n\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n };\n\n const focusOptionByIndex = (index: number, oldIndex: number) => {\n const { length } = filteredOptions;\n\n if (index < 0) {\n index = length - 1;\n } else if (index >= length) {\n index = 0;\n }\n\n if (index === oldIndex) {\n return;\n }\n\n scrollToElement(index);\n setFocusedOptionIndex(index);\n };\n\n const focusOption = (nextIndex: number | null, type: FocusActionType) => {\n let index = typeof nextIndex !== \"number\" ? -1 : nextIndex;\n\n if (type === FOCUS_ACTION_NEXT) {\n index = index + 1;\n } else if (type === FOCUS_ACTION_PREV) {\n index = index - 1;\n }\n\n if (focusedOptionIndex != null) {\n focusOptionByIndex(index, focusedOptionIndex);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n onKeyDown!(e);\n\n if (e.key === \"ArrowUp\" && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_PREV);\n }\n }\n\n if (e.key === \"ArrowDown\" && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_NEXT);\n }\n }\n\n if (\n e.key === \"Enter\" &&\n !e.defaultPrevented &&\n opened &&\n focusedOptionIndex != null\n ) {\n const option = filteredOptions[focusedOptionIndex];\n\n if (option) {\n onChangeStart!(e, option);\n\n if (!e.defaultPrevented) {\n addOption(option);\n setFocusedOptionIndex(null);\n clearInput();\n closeAfterSelect && setOpened(false);\n e.preventDefault();\n }\n } else if (!creatable) {\n e.preventDefault();\n }\n }\n\n if ([\"Escape\", \"Tab\"].includes(e.key) && !e.defaultPrevented && opened) {\n setOpened(false);\n }\n };\n\n React.useEffect(() => {\n if (focusedOptionIndex != null && filteredOptions[focusedOptionIndex]) {\n setFocusedOption(filteredOptions[focusedOptionIndex]);\n } else if (focusedOptionIndex === null || focusedOptionIndex === 0) {\n setFocusedOption(null);\n }\n }, [focusedOptionIndex, filteredOptions, setFocusedOption]);\n\n React.useEffect(() => {\n const index = focusedOption\n ? filteredOptions.findIndex(({ value }) => value === focusedOption.value)\n : -1;\n\n if (\n index === -1 &&\n !!filteredOptions.length &&\n !showCreatable &&\n closeAfterSelect\n ) {\n setFocusedOption(filteredOptions[0]);\n }\n }, [\n filteredOptions,\n focusedOption,\n showCreatable,\n closeAfterSelect,\n setFocusedOption,\n ]);\n\n useGlobalEventListener(document, \"click\", handleClickOutside);\n\n const renderChipWrapper = (\n renderChipProps: RenderChip<Option> | undefined\n ) => {\n if (renderChipProps === undefined) {\n return null;\n }\n const onRemoveWrapper = (\n e: React.MouseEvent | undefined,\n value: ChipValue | undefined\n ) => {\n e?.preventDefault();\n e?.stopPropagation();\n\n renderChipProps.onRemove?.(e, value);\n };\n\n return renderChip!({\n ...renderChipProps,\n onRemove: onRemoveWrapper,\n });\n };\n\n const isPopperDirectionTop = popperPlacement?.includes(\"top\");\n\n const onPlacementChange = React.useCallback(\n (placement?: Placement) => {\n setPopperPlacement(placement);\n },\n [setPopperPlacement]\n );\n\n const onDropdownMouseLeave = React.useCallback(() => {\n setFocusedOptionIndex(null);\n }, [setFocusedOptionIndex]);\n\n const observableRefs = React.useMemo(\n () => [scrollBoxRef, rootRef],\n [rootRef, scrollBoxRef]\n );\n\n const toggleOpened = () => {\n setOpened((prevOpened) => !prevOpened);\n };\n\n return (\n <FormField\n getRootRef={rootRef}\n style={style}\n className={classNamesString(\n styles[\"ChipsSelect\"],\n opened &&\n (isPopperDirectionTop\n ? styles[\"ChipsSelect--pop-up\"]\n : styles[\"ChipsSelect--pop-down\"]),\n className\n )}\n disabled={disabled}\n role=\"application\"\n aria-disabled={disabled}\n aria-readonly={restProps.readOnly}\n after={\n <IconButton\n className={styles[\"ChipsSelect__dropdown\"]}\n activeMode=\"\"\n hoverMode=\"\"\n // TODO: add label customization\n aria-label={opened ? \"Скрыть\" : \"Развернуть\"}\n onClick={toggleOpened}\n >\n <DropdownIcon\n className={styles[\"ChipsSelect__icon\"]}\n opened={opened}\n />\n </IconButton>\n }\n before={before}\n >\n <ChipsInputBase\n {...restProps}\n tabIndex={tabIndex}\n value={selectedOptions}\n inputValue={fieldValue}\n getNewOptionData={getNewOptionData}\n getOptionLabel={getOptionLabel}\n getOptionValue={getOptionValue}\n renderChip={renderChipWrapper}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n getRef={getRef}\n disabled={disabled}\n onInputChange={handleInputChange}\n />\n {opened && (\n <CustomSelectDropdown\n targetRef={rootRef}\n placement={popupDirection}\n scrollBoxRef={scrollBoxRef}\n observableRefs={observableRefs}\n onPlacementChange={onPlacementChange}\n onMouseLeave={onDropdownMouseLeave}\n fetching={fetching}\n className={styles[\"ChipsSelect__options\"]}\n sameWidth={fixDropdownWidth}\n forcePortal={forceDropdownPortal}\n >\n {showCreatable && (\n <CustomSelectOption\n hovered={focusedOptionIndex === 0}\n onMouseDown={addOptionFromInput}\n onMouseEnter={() => setFocusedOptionIndex(0)}\n >\n {creatableText}\n </CustomSelectOption>\n )}\n {!filteredOptions?.length && !showCreatable && emptyText ? (\n <Footnote className={styles[\"ChipsSelect__empty\"]}>\n {emptyText}\n </Footnote>\n ) : (\n filteredOptions.map((option: Option, index: number) => {\n const label = getOptionLabel!(option);\n const hovered =\n focusedOption &&\n getOptionValue!(option) === getOptionValue!(focusedOption);\n const selected = selectedOptions.find(\n (selectedOption: Option) => {\n return (\n getOptionValue!(selectedOption) === getOptionValue!(option)\n );\n }\n );\n const value = getOptionValue!(option);\n\n return (\n <React.Fragment key={`${typeof value}-${value}`}>\n {renderOption!({\n className: styles[\"ChipsSelect__option\"],\n option,\n hovered: Boolean(hovered),\n children: label,\n selected: !!selected,\n getRootRef: (e) => {\n if (e) {\n return (chipsSelectOptions[index] = e);\n }\n return undefined;\n },\n onMouseDown: (e: React.MouseEvent<HTMLDivElement>) => {\n onChangeStart?.(e, option);\n\n if (!e.defaultPrevented) {\n closeAfterSelect && setOpened(false);\n addOption(option);\n clearInput();\n }\n },\n onMouseEnter: () => setFocusedOptionIndex(index),\n })}\n </React.Fragment>\n );\n })\n )}\n </CustomSelectDropdown>\n )}\n </FormField>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChipsSelect.js","names":["React","DropdownIcon","classNamesString","ChipsInputBase","chipsInputDefaultProps","CustomSelectOption","useChipsSelect","noop","useDOM","Footnote","useExternRef","useGlobalEventListener","defaultFilterFn","CustomSelectDropdown","FormField","IconButton","FOCUS_ACTION_NEXT","FOCUS_ACTION_PREV","chipsSelectDefaultProps","emptyText","creatableText","onChangeStart","creatable","fetching","showSelected","closeAfterSelect","options","filterFn","renderOption","props","ChipsSelect","propsWithDefault","style","onFocus","onKeyDown","className","getRef","getRootRef","disabled","placeholder","tabIndex","getOptionValue","getOptionLabel","getNewOptionData","renderChip","popupDirection","inputValue","before","fixDropdownWidth","forceDropdownPortal","restProps","document","useState","undefined","popperPlacement","setPopperPlacement","scrollBoxRef","useRef","rootRef","fieldValue","selectedOptions","opened","setOpened","addOptionFromInput","filteredOptions","addOption","handleInputChange","clearInput","focusedOption","setFocusedOption","focusedOptionIndex","setFocusedOptionIndex","showCreatable","Boolean","length","handleFocus","e","handleClickOutside","target","current","contains","chipsSelectOptions","scrollToElement","index","center","dropdown","item","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","oldIndex","focusOption","nextIndex","type","handleKeyDown","key","defaultPrevented","preventDefault","option","includes","useEffect","findIndex","value","renderChipWrapper","renderChipProps","onRemoveWrapper","stopPropagation","onRemove","isPopperDirectionTop","onPlacementChange","useCallback","placement","onDropdownMouseLeave","observableRefs","useMemo","toggleOpened","prevOpened","readOnly","map","label","hovered","selected","find","selectedOption","children","onMouseDown","onMouseEnter"],"sources":["../../../../src/components/ChipsSelect/ChipsSelect.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { DropdownIcon } from \"../DropdownIcon/DropdownIcon\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { ChipOption, ChipValue, RenderChip } from \"../Chip/Chip\";\nimport { ChipsInputProps } from \"../ChipsInput/ChipsInput\";\nimport {\n ChipsInputBase,\n chipsInputDefaultProps,\n} from \"../ChipsInputBase/ChipsInputBase\";\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from \"../CustomSelectOption/CustomSelectOption\";\nimport { useChipsSelect } from \"../../hooks/useChipsSelect\";\nimport { noop } from \"../../lib/utils\";\nimport { useDOM } from \"../../lib/dom\";\nimport { Footnote } from \"../Typography/Footnote/Footnote\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { useGlobalEventListener } from \"../../hooks/useGlobalEventListener\";\nimport { defaultFilterFn } from \"../../lib/select\";\nimport { Placement } from \"../Popper/Popper\";\nimport { CustomSelectDropdown } from \"../CustomSelectDropdown/CustomSelectDropdown\";\nimport { FormField } from \"../FormField/FormField\";\nimport { IconButton } from \"../IconButton/IconButton\";\nimport styles from \"./ChipsSelect.module.css\";\n\nexport interface ChipsSelectProps<Option extends ChipOption>\n extends Omit<ChipsInputProps<Option>, \"after\"> {\n popupDirection?: \"top\" | \"bottom\";\n options?: Option[];\n filterFn?:\n | false\n | ((\n value?: string,\n option?: Option,\n getOptionLabel?: Pick<\n ChipsInputProps<Option>,\n \"getOptionLabel\"\n >[\"getOptionLabel\"]\n ) => boolean);\n /**\n * Возможность создавать чипы которых нет в списке (по enter или с помощью пункта в меню, см creatableText)\n */\n creatable?: boolean;\n /**\n * Отрисовка лоадера вместо списка опций в выпадающем списке\n */\n fetching?: boolean;\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Показывать или скрывать уже выбранные опции\n */\n showSelected?: boolean;\n /**\n * Текст для пункта создающего чипы при клике, так же отвечает за то будет ли показан этот пункт (показывается после того как в списке не отсанется опций)\n */\n creatableText?: string;\n /**\n * Текст который показывается если список опций пуст\n */\n emptyText?: string;\n /**\n * Событие срабатывающее перед onChange\n */\n onChangeStart?: (\n e: React.MouseEvent | React.KeyboardEvent,\n option: Option\n ) => void;\n /**\n * Закрытие выпадающего списка после выбора элемента\n */\n closeAfterSelect?: boolean;\n fixDropdownWidth?: boolean;\n forceDropdownPortal?: boolean;\n}\n\ntype FocusActionType = \"next\" | \"prev\";\n\nconst FOCUS_ACTION_NEXT: FocusActionType = \"next\";\nconst FOCUS_ACTION_PREV: FocusActionType = \"prev\";\n\nconst chipsSelectDefaultProps: ChipsSelectProps<any> = {\n ...chipsInputDefaultProps,\n emptyText: \"Ничего не найдено\",\n creatableText: \"Создать значение\",\n onChangeStart: noop,\n creatable: false,\n fetching: false,\n showSelected: true,\n closeAfterSelect: true,\n options: [],\n filterFn: defaultFilterFn,\n renderOption(props) {\n return <CustomSelectOption {...props} />;\n },\n};\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ChipsSelect\n */\nexport const ChipsSelect = <Option extends ChipOption>(\n props: ChipsSelectProps<Option>\n) => {\n const propsWithDefault = { ...chipsSelectDefaultProps, ...props };\n const {\n style,\n onFocus,\n onKeyDown,\n className,\n fetching,\n renderOption,\n emptyText,\n getRef,\n getRootRef,\n disabled,\n placeholder,\n tabIndex,\n getOptionValue,\n getOptionLabel,\n showSelected,\n getNewOptionData,\n renderChip,\n popupDirection,\n creatable,\n filterFn,\n inputValue,\n creatableText,\n closeAfterSelect,\n onChangeStart,\n before,\n options,\n fixDropdownWidth,\n forceDropdownPortal,\n ...restProps\n } = propsWithDefault;\n\n const { document } = useDOM();\n\n const [popperPlacement, setPopperPlacement] = React.useState<\n Placement | undefined\n >(undefined);\n\n const scrollBoxRef = React.useRef<HTMLDivElement>(null);\n const rootRef = useExternRef(getRef);\n const {\n fieldValue,\n selectedOptions = [],\n opened,\n setOpened,\n addOptionFromInput,\n filteredOptions,\n addOption,\n handleInputChange,\n clearInput,\n focusedOption,\n setFocusedOption,\n focusedOptionIndex,\n setFocusedOptionIndex,\n } = useChipsSelect(propsWithDefault);\n\n const showCreatable = Boolean(\n creatable && creatableText && !filteredOptions.length && fieldValue\n );\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setOpened(true);\n setFocusedOptionIndex(0);\n onFocus!(e);\n };\n\n const handleClickOutside = (e: MouseEvent) => {\n if (\n e.target !== rootRef.current &&\n !rootRef.current?.contains(e.target as Node)\n ) {\n setOpened(false);\n }\n };\n\n const chipsSelectOptions = React.useRef<HTMLElement[]>([]).current;\n\n const scrollToElement = (index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const item = chipsSelectOptions[index];\n\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n };\n\n const focusOptionByIndex = (index: number, oldIndex: number) => {\n const { length } = filteredOptions;\n\n if (index < 0) {\n index = length - 1;\n } else if (index >= length) {\n index = 0;\n }\n\n if (index === oldIndex) {\n return;\n }\n\n scrollToElement(index);\n setFocusedOptionIndex(index);\n };\n\n const focusOption = (nextIndex: number | null, type: FocusActionType) => {\n let index = typeof nextIndex !== \"number\" ? -1 : nextIndex;\n\n if (type === FOCUS_ACTION_NEXT) {\n index = index + 1;\n } else if (type === FOCUS_ACTION_PREV) {\n index = index - 1;\n }\n\n if (focusedOptionIndex != null) {\n focusOptionByIndex(index, focusedOptionIndex);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n onKeyDown!(e);\n\n if (e.key === \"ArrowUp\" && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_PREV);\n }\n }\n\n if (e.key === \"ArrowDown\" && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_NEXT);\n }\n }\n\n if (\n e.key === \"Enter\" &&\n !e.defaultPrevented &&\n opened &&\n focusedOptionIndex != null\n ) {\n const option = filteredOptions[focusedOptionIndex];\n\n if (option) {\n onChangeStart!(e, option);\n\n if (!e.defaultPrevented) {\n addOption(option);\n setFocusedOptionIndex(null);\n clearInput();\n closeAfterSelect && setOpened(false);\n e.preventDefault();\n }\n } else if (!creatable) {\n e.preventDefault();\n }\n }\n\n if ([\"Escape\", \"Tab\"].includes(e.key) && !e.defaultPrevented && opened) {\n setOpened(false);\n }\n };\n\n React.useEffect(() => {\n if (focusedOptionIndex != null && filteredOptions[focusedOptionIndex]) {\n setFocusedOption(filteredOptions[focusedOptionIndex]);\n } else if (focusedOptionIndex === null || focusedOptionIndex === 0) {\n setFocusedOption(null);\n }\n }, [focusedOptionIndex, filteredOptions, setFocusedOption]);\n\n React.useEffect(() => {\n const index = focusedOption\n ? filteredOptions.findIndex(({ value }) => value === focusedOption.value)\n : -1;\n\n if (\n index === -1 &&\n !!filteredOptions.length &&\n !showCreatable &&\n closeAfterSelect\n ) {\n setFocusedOption(filteredOptions[0]);\n }\n }, [\n filteredOptions,\n focusedOption,\n showCreatable,\n closeAfterSelect,\n setFocusedOption,\n ]);\n\n useGlobalEventListener(document, \"click\", handleClickOutside);\n\n const renderChipWrapper = (\n renderChipProps: RenderChip<Option> | undefined\n ) => {\n if (renderChipProps === undefined) {\n return null;\n }\n const onRemoveWrapper = (\n e: React.MouseEvent | undefined,\n value: ChipValue | undefined\n ) => {\n e?.preventDefault();\n e?.stopPropagation();\n\n renderChipProps.onRemove?.(e, value);\n };\n\n return renderChip!({\n ...renderChipProps,\n onRemove: onRemoveWrapper,\n });\n };\n\n const isPopperDirectionTop = popperPlacement?.includes(\"top\");\n\n const onPlacementChange = React.useCallback(\n (placement?: Placement) => {\n setPopperPlacement(placement);\n },\n [setPopperPlacement]\n );\n\n const onDropdownMouseLeave = React.useCallback(() => {\n setFocusedOptionIndex(null);\n }, [setFocusedOptionIndex]);\n\n const observableRefs = React.useMemo(\n () => [scrollBoxRef, rootRef],\n [rootRef, scrollBoxRef]\n );\n\n const toggleOpened = () => {\n setOpened((prevOpened) => !prevOpened);\n };\n\n return (\n <>\n <FormField\n getRootRef={rootRef}\n style={style}\n className={classNamesString(\n styles[\"ChipsSelect\"],\n opened &&\n (isPopperDirectionTop\n ? styles[\"ChipsSelect--pop-up\"]\n : styles[\"ChipsSelect--pop-down\"]),\n className\n )}\n disabled={disabled}\n role=\"application\"\n aria-disabled={disabled}\n aria-readonly={restProps.readOnly}\n after={\n <IconButton\n className={styles[\"ChipsSelect__dropdown\"]}\n activeMode=\"\"\n hoverMode=\"\"\n // TODO: add label customization\n aria-label={opened ? \"Скрыть\" : \"Развернуть\"}\n onClick={toggleOpened}\n >\n <DropdownIcon\n className={styles[\"ChipsSelect__icon\"]}\n opened={opened}\n />\n </IconButton>\n }\n before={before}\n >\n <ChipsInputBase\n {...restProps}\n tabIndex={tabIndex}\n value={selectedOptions}\n inputValue={fieldValue}\n getNewOptionData={getNewOptionData}\n getOptionLabel={getOptionLabel}\n getOptionValue={getOptionValue}\n renderChip={renderChipWrapper}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n getRef={getRef}\n disabled={disabled}\n onInputChange={handleInputChange}\n />\n </FormField>\n {opened && (\n <CustomSelectDropdown\n targetRef={rootRef}\n placement={popupDirection}\n scrollBoxRef={scrollBoxRef}\n observableRefs={observableRefs}\n onPlacementChange={onPlacementChange}\n onMouseLeave={onDropdownMouseLeave}\n fetching={fetching}\n className={styles[\"ChipsSelect__options\"]}\n sameWidth={fixDropdownWidth}\n forcePortal={forceDropdownPortal}\n >\n {showCreatable && (\n <CustomSelectOption\n hovered={focusedOptionIndex === 0}\n onMouseDown={addOptionFromInput}\n onMouseEnter={() => setFocusedOptionIndex(0)}\n >\n {creatableText}\n </CustomSelectOption>\n )}\n {!filteredOptions?.length && !showCreatable && emptyText ? (\n <Footnote className={styles[\"ChipsSelect__empty\"]}>\n {emptyText}\n </Footnote>\n ) : (\n filteredOptions.map((option: Option, index: number) => {\n const label = getOptionLabel!(option);\n const hovered =\n focusedOption &&\n getOptionValue!(option) === getOptionValue!(focusedOption);\n const selected = selectedOptions.find(\n (selectedOption: Option) => {\n return (\n getOptionValue!(selectedOption) === getOptionValue!(option)\n );\n }\n );\n const value = getOptionValue!(option);\n\n return (\n <React.Fragment key={`${typeof value}-${value}`}>\n {renderOption!({\n className: styles[\"ChipsSelect__option\"],\n option,\n hovered: Boolean(hovered),\n children: label,\n selected: !!selected,\n getRootRef: (e) => {\n if (e) {\n return (chipsSelectOptions[index] = e);\n }\n return undefined;\n },\n onMouseDown: (e: React.MouseEvent<HTMLDivElement>) => {\n onChangeStart?.(e, option);\n\n if (!e.defaultPrevented) {\n closeAfterSelect && setOpened(false);\n addOption(option);\n clearInput();\n }\n },\n onMouseEnter: () => setFocusedOptionIndex(index),\n })}\n </React.Fragment>\n );\n })\n )}\n </CustomSelectDropdown>\n )}\n </>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.vkuiChipsSelect{position:relative}.vkuiChipsSelect__dropdown{cursor:pointer}.vkuiChipsSelect__icon{pointer-events:none}.vkuiChipsSelect__empty{color:var(--vkui--color_text_secondary);padding:12px 0;text-align:center}
|
|
1
|
+
.vkuiChipsSelect{position:relative}.vkuiChipsSelect__dropdown{cursor:pointer}.vkuiChipsSelect__icon{pointer-events:none}.vkuiChipsSelect__empty{color:var(--vkui--color_text_secondary);padding:12px 0;text-align:center}.vkuiChipsSelect--pop-down{border-bottom-left-radius:0;border-bottom-right-radius:0}.vkuiChipsSelect--pop-up{border-top-left-radius:0;border-top-right-radius:0}
|
|
@@ -5,6 +5,7 @@ import { useIsomorphicLayoutEffect } from "../../lib/useIsomorphicLayoutEffect";
|
|
|
5
5
|
import { useExternRef } from "../../hooks/useExternRef";
|
|
6
6
|
import { useEventListener } from "../../hooks/useEventListener";
|
|
7
7
|
import { useTrackerVisibility } from "./useTrackerVisibility";
|
|
8
|
+
import { stopPropagation } from "../../lib/utils";
|
|
8
9
|
import "./CustomScrollView.module.css";
|
|
9
10
|
export var CustomScrollView = function CustomScrollView(_ref) {
|
|
10
11
|
var className = _ref.className,
|
|
@@ -139,7 +140,8 @@ export var CustomScrollView = function CustomScrollView(_ref) {
|
|
|
139
140
|
className: classNamesString("vkuiCustomScrollView", className)
|
|
140
141
|
}, /*#__PURE__*/React.createElement("div", {
|
|
141
142
|
className: "vkuiCustomScrollView__barY",
|
|
142
|
-
ref: barY
|
|
143
|
+
ref: barY,
|
|
144
|
+
onClick: stopPropagation
|
|
143
145
|
}, /*#__PURE__*/React.createElement("div", {
|
|
144
146
|
className: classNamesString("vkuiCustomScrollView__trackerY", !trackerVisible && "vkuiCustomScrollView__trackerY--hidden"),
|
|
145
147
|
onMouseEnter: autoHideScrollbar ? onTrackerMouseEnter : undefined,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomScrollView.js","names":["React","useDOM","classNamesString","useIsomorphicLayoutEffect","useExternRef","useEventListener","useTrackerVisibility","CustomScrollView","className","children","externalBoxRef","boxRef","windowResize","autoHideScrollbar","autoHideScrollbarDelay","document","window","ratio","useRef","NaN","lastTrackerTop","clientHeight","trackerHeight","scrollHeight","transformProp","startY","trackerTop","barY","trackerY","setTrackerPosition","scrollTop","current","style","setTrackerPositionFromScroll","progress","resize","localClientHeight","localScrollHeight","localRatio","localTrackerHeight","Math","max","display","height","resizeHandler","add","prop","undefined","setScrollPositionFromTracker","onMove","e","preventDefault","diff","clientY","position","min","trackerVisible","onTargetScroll","onTrackerDragStart","onTrackerDragStop","onTrackerMouseEnter","onTrackerMouseLeave","onUp","unsubscribe","scroll","listeners","subscribe","el","forEach","l","remove","onDragStart"],"sources":["../../../../src/components/CustomScrollView/CustomScrollView.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { DOMProps, useDOM } from \"../../lib/dom\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { useIsomorphicLayoutEffect } from \"../../lib/useIsomorphicLayoutEffect\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { useEventListener } from \"../../hooks/useEventListener\";\nimport {\n TrackerOptionsProps,\n useTrackerVisibility,\n} from \"./useTrackerVisibility\";\nimport styles from \"./CustomScrollView.module.css\";\n\nexport interface CustomScrollViewProps extends DOMProps, TrackerOptionsProps {\n windowResize?: boolean;\n boxRef?: React.Ref<HTMLDivElement>;\n className?: HTMLDivElement[\"className\"];\n children: React.ReactNode;\n}\n\nexport const CustomScrollView = ({\n className,\n children,\n boxRef: externalBoxRef,\n windowResize,\n autoHideScrollbar = false,\n autoHideScrollbarDelay,\n}: CustomScrollViewProps) => {\n const { document, window } = useDOM();\n\n const ratio = React.useRef(NaN);\n const lastTrackerTop = React.useRef(0);\n const clientHeight = React.useRef(0);\n const trackerHeight = React.useRef(0);\n const scrollHeight = React.useRef(0);\n const transformProp = React.useRef(\"\");\n const startY = React.useRef(0);\n const trackerTop = React.useRef(0);\n\n const boxRef = useExternRef(externalBoxRef);\n\n const barY = React.useRef<HTMLDivElement>(null);\n const trackerY = React.useRef<HTMLDivElement>(null);\n\n const setTrackerPosition = (scrollTop: number) => {\n lastTrackerTop.current = scrollTop;\n if (trackerY.current !== null) {\n (trackerY.current.style as any)[\n transformProp.current\n ] = `translate(0, ${scrollTop}px)`;\n }\n };\n\n const setTrackerPositionFromScroll = (scrollTop: number) => {\n const progress = scrollTop / (scrollHeight.current - clientHeight.current);\n setTrackerPosition(\n (clientHeight.current - trackerHeight.current) * progress\n );\n };\n\n const resize = () => {\n if (!boxRef.current || !barY.current || !trackerY.current) {\n return;\n }\n const localClientHeight = boxRef.current.clientHeight;\n const localScrollHeight = boxRef.current.scrollHeight;\n const localRatio = localClientHeight / localScrollHeight;\n const localTrackerHeight = Math.max(localClientHeight * localRatio, 40);\n\n ratio.current = localRatio;\n clientHeight.current = localClientHeight;\n scrollHeight.current = localScrollHeight;\n trackerHeight.current = localTrackerHeight;\n\n if (localRatio >= 1) {\n barY.current.style.display = \"none\";\n } else {\n barY.current.style.display = \"\";\n trackerY.current.style.height = `${localTrackerHeight}px`;\n setTrackerPositionFromScroll(boxRef.current.scrollTop);\n }\n };\n\n const resizeHandler = useEventListener(\"resize\", resize);\n\n useIsomorphicLayoutEffect(() => {\n if (windowResize && window) {\n resizeHandler.add(window);\n }\n }, [windowResize, window]);\n\n useIsomorphicLayoutEffect(() => {\n let style = trackerY.current?.style;\n let prop = \"\";\n if (style !== undefined) {\n if (\"transform\" in style) {\n prop = \"transform\";\n } else if (\"webkitTransform\" in style) {\n prop = \"webkitTransform\";\n }\n }\n transformProp.current = prop;\n }, []);\n\n useIsomorphicLayoutEffect(resize);\n\n const setScrollPositionFromTracker = (trackerTop: number) => {\n const progress =\n trackerTop / (clientHeight.current - trackerHeight.current);\n if (boxRef.current !== null) {\n boxRef.current.scrollTop =\n (scrollHeight.current - clientHeight.current) * progress;\n }\n };\n\n const onMove = (e: MouseEvent) => {\n e.preventDefault();\n const diff = e.clientY - startY.current;\n const position = Math.min(\n Math.max(trackerTop.current + diff, 0),\n clientHeight.current - trackerHeight.current\n );\n\n setScrollPositionFromTracker(position);\n };\n\n const {\n trackerVisible,\n onTargetScroll,\n onTrackerDragStart,\n onTrackerDragStop,\n onTrackerMouseEnter,\n onTrackerMouseLeave,\n } = useTrackerVisibility(autoHideScrollbar, autoHideScrollbarDelay);\n\n const onUp = (e: MouseEvent) => {\n e.preventDefault();\n\n if (autoHideScrollbar) {\n onTrackerDragStop();\n }\n\n unsubscribe();\n };\n\n const scroll = () => {\n if (ratio.current >= 1 || !boxRef.current) {\n return;\n }\n\n if (autoHideScrollbar) {\n onTargetScroll();\n }\n\n setTrackerPositionFromScroll(boxRef.current.scrollTop);\n };\n\n const listeners = [\n useEventListener(\"mousemove\", onMove),\n useEventListener(\"mouseup\", onUp),\n ];\n\n function subscribe(el: Document | undefined) {\n if (el) {\n listeners.forEach((l) => l.add(el));\n }\n }\n\n function unsubscribe() {\n listeners.forEach((l) => l.remove());\n }\n\n const onDragStart = (e: React.MouseEvent) => {\n e.preventDefault();\n startY.current = e.clientY;\n trackerTop.current = lastTrackerTop.current;\n\n if (autoHideScrollbar) {\n onTrackerDragStart();\n }\n\n subscribe(document);\n };\n\n return (\n <div className={classNamesString(styles[\"CustomScrollView\"], className)}>\n <div className={styles[\"CustomScrollView__barY\"]} ref={barY}>\n <div\n className={classNamesString(\n styles[\"CustomScrollView__trackerY\"],\n !trackerVisible && styles[`CustomScrollView__trackerY--hidden`]\n )}\n onMouseEnter={autoHideScrollbar ? onTrackerMouseEnter : undefined}\n onMouseLeave={autoHideScrollbar ? onTrackerMouseLeave : undefined}\n ref={trackerY}\n onMouseDown={onDragStart}\n />\n </div>\n\n <div\n className={styles[\"CustomScrollView__box\"]}\n tabIndex={-1}\n ref={boxRef}\n onScroll={scroll}\n >\n {children}\n </div>\n </div>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CustomScrollView.js","names":["React","useDOM","classNamesString","useIsomorphicLayoutEffect","useExternRef","useEventListener","useTrackerVisibility","stopPropagation","CustomScrollView","className","children","externalBoxRef","boxRef","windowResize","autoHideScrollbar","autoHideScrollbarDelay","document","window","ratio","useRef","NaN","lastTrackerTop","clientHeight","trackerHeight","scrollHeight","transformProp","startY","trackerTop","barY","trackerY","setTrackerPosition","scrollTop","current","style","setTrackerPositionFromScroll","progress","resize","localClientHeight","localScrollHeight","localRatio","localTrackerHeight","Math","max","display","height","resizeHandler","add","prop","undefined","setScrollPositionFromTracker","onMove","e","preventDefault","diff","clientY","position","min","trackerVisible","onTargetScroll","onTrackerDragStart","onTrackerDragStop","onTrackerMouseEnter","onTrackerMouseLeave","onUp","unsubscribe","scroll","listeners","subscribe","el","forEach","l","remove","onDragStart"],"sources":["../../../../src/components/CustomScrollView/CustomScrollView.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { DOMProps, useDOM } from \"../../lib/dom\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { useIsomorphicLayoutEffect } from \"../../lib/useIsomorphicLayoutEffect\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { useEventListener } from \"../../hooks/useEventListener\";\nimport {\n TrackerOptionsProps,\n useTrackerVisibility,\n} from \"./useTrackerVisibility\";\nimport { stopPropagation } from \"../../lib/utils\";\nimport styles from \"./CustomScrollView.module.css\";\n\nexport interface CustomScrollViewProps extends DOMProps, TrackerOptionsProps {\n windowResize?: boolean;\n boxRef?: React.Ref<HTMLDivElement>;\n className?: HTMLDivElement[\"className\"];\n children: React.ReactNode;\n}\n\nexport const CustomScrollView = ({\n className,\n children,\n boxRef: externalBoxRef,\n windowResize,\n autoHideScrollbar = false,\n autoHideScrollbarDelay,\n}: CustomScrollViewProps) => {\n const { document, window } = useDOM();\n\n const ratio = React.useRef(NaN);\n const lastTrackerTop = React.useRef(0);\n const clientHeight = React.useRef(0);\n const trackerHeight = React.useRef(0);\n const scrollHeight = React.useRef(0);\n const transformProp = React.useRef(\"\");\n const startY = React.useRef(0);\n const trackerTop = React.useRef(0);\n\n const boxRef = useExternRef(externalBoxRef);\n\n const barY = React.useRef<HTMLDivElement>(null);\n const trackerY = React.useRef<HTMLDivElement>(null);\n\n const setTrackerPosition = (scrollTop: number) => {\n lastTrackerTop.current = scrollTop;\n if (trackerY.current !== null) {\n (trackerY.current.style as any)[\n transformProp.current\n ] = `translate(0, ${scrollTop}px)`;\n }\n };\n\n const setTrackerPositionFromScroll = (scrollTop: number) => {\n const progress = scrollTop / (scrollHeight.current - clientHeight.current);\n setTrackerPosition(\n (clientHeight.current - trackerHeight.current) * progress\n );\n };\n\n const resize = () => {\n if (!boxRef.current || !barY.current || !trackerY.current) {\n return;\n }\n const localClientHeight = boxRef.current.clientHeight;\n const localScrollHeight = boxRef.current.scrollHeight;\n const localRatio = localClientHeight / localScrollHeight;\n const localTrackerHeight = Math.max(localClientHeight * localRatio, 40);\n\n ratio.current = localRatio;\n clientHeight.current = localClientHeight;\n scrollHeight.current = localScrollHeight;\n trackerHeight.current = localTrackerHeight;\n\n if (localRatio >= 1) {\n barY.current.style.display = \"none\";\n } else {\n barY.current.style.display = \"\";\n trackerY.current.style.height = `${localTrackerHeight}px`;\n setTrackerPositionFromScroll(boxRef.current.scrollTop);\n }\n };\n\n const resizeHandler = useEventListener(\"resize\", resize);\n\n useIsomorphicLayoutEffect(() => {\n if (windowResize && window) {\n resizeHandler.add(window);\n }\n }, [windowResize, window]);\n\n useIsomorphicLayoutEffect(() => {\n let style = trackerY.current?.style;\n let prop = \"\";\n if (style !== undefined) {\n if (\"transform\" in style) {\n prop = \"transform\";\n } else if (\"webkitTransform\" in style) {\n prop = \"webkitTransform\";\n }\n }\n transformProp.current = prop;\n }, []);\n\n useIsomorphicLayoutEffect(resize);\n\n const setScrollPositionFromTracker = (trackerTop: number) => {\n const progress =\n trackerTop / (clientHeight.current - trackerHeight.current);\n if (boxRef.current !== null) {\n boxRef.current.scrollTop =\n (scrollHeight.current - clientHeight.current) * progress;\n }\n };\n\n const onMove = (e: MouseEvent) => {\n e.preventDefault();\n const diff = e.clientY - startY.current;\n const position = Math.min(\n Math.max(trackerTop.current + diff, 0),\n clientHeight.current - trackerHeight.current\n );\n\n setScrollPositionFromTracker(position);\n };\n\n const {\n trackerVisible,\n onTargetScroll,\n onTrackerDragStart,\n onTrackerDragStop,\n onTrackerMouseEnter,\n onTrackerMouseLeave,\n } = useTrackerVisibility(autoHideScrollbar, autoHideScrollbarDelay);\n\n const onUp = (e: MouseEvent) => {\n e.preventDefault();\n\n if (autoHideScrollbar) {\n onTrackerDragStop();\n }\n\n unsubscribe();\n };\n\n const scroll = () => {\n if (ratio.current >= 1 || !boxRef.current) {\n return;\n }\n\n if (autoHideScrollbar) {\n onTargetScroll();\n }\n\n setTrackerPositionFromScroll(boxRef.current.scrollTop);\n };\n\n const listeners = [\n useEventListener(\"mousemove\", onMove),\n useEventListener(\"mouseup\", onUp),\n ];\n\n function subscribe(el: Document | undefined) {\n if (el) {\n listeners.forEach((l) => l.add(el));\n }\n }\n\n function unsubscribe() {\n listeners.forEach((l) => l.remove());\n }\n\n const onDragStart = (e: React.MouseEvent) => {\n e.preventDefault();\n startY.current = e.clientY;\n trackerTop.current = lastTrackerTop.current;\n\n if (autoHideScrollbar) {\n onTrackerDragStart();\n }\n\n subscribe(document);\n };\n\n return (\n <div className={classNamesString(styles[\"CustomScrollView\"], className)}>\n <div\n className={styles[\"CustomScrollView__barY\"]}\n ref={barY}\n onClick={stopPropagation}\n >\n <div\n className={classNamesString(\n styles[\"CustomScrollView__trackerY\"],\n !trackerVisible && styles[`CustomScrollView__trackerY--hidden`]\n )}\n onMouseEnter={autoHideScrollbar ? onTrackerMouseEnter : undefined}\n onMouseLeave={autoHideScrollbar ? onTrackerMouseLeave : undefined}\n ref={trackerY}\n onMouseDown={onDragStart}\n />\n </div>\n\n <div\n className={styles[\"CustomScrollView__box\"]}\n tabIndex={-1}\n ref={boxRef}\n onScroll={scroll}\n >\n {children}\n </div>\n </div>\n );\n};\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SAAmBC,MAAM,QAAQ,eAAe;AAChD,SAASC,gBAAgB,QAAQ,sBAAsB;AACvD,SAASC,yBAAyB,QAAQ,qCAAqC;AAC/E,SAASC,YAAY,QAAQ,0BAA0B;AACvD,SAASC,gBAAgB,QAAQ,8BAA8B;AAC/D,SAEEC,oBAAoB,QACf,wBAAwB;AAC/B,SAASC,eAAe,QAAQ,iBAAiB;AAAC;AAUlD,OAAO,IAAMC,gBAAgB,GAAG,SAAnBA,gBAAgB,OAOA;EAAA,IAN3BC,SAAS,QAATA,SAAS;IACTC,QAAQ,QAARA,QAAQ;IACAC,cAAc,QAAtBC,MAAM;IACNC,YAAY,QAAZA,YAAY;IAAA,6BACZC,iBAAiB;IAAjBA,iBAAiB,sCAAG,KAAK;IACzBC,sBAAsB,QAAtBA,sBAAsB;EAEtB,cAA6Bd,MAAM,EAAE;IAA7Be,QAAQ,WAARA,QAAQ;IAAEC,MAAM,WAANA,MAAM;EAExB,IAAMC,KAAK,GAAGlB,KAAK,CAACmB,MAAM,CAACC,GAAG,CAAC;EAC/B,IAAMC,cAAc,GAAGrB,KAAK,CAACmB,MAAM,CAAC,CAAC,CAAC;EACtC,IAAMG,YAAY,GAAGtB,KAAK,CAACmB,MAAM,CAAC,CAAC,CAAC;EACpC,IAAMI,aAAa,GAAGvB,KAAK,CAACmB,MAAM,CAAC,CAAC,CAAC;EACrC,IAAMK,YAAY,GAAGxB,KAAK,CAACmB,MAAM,CAAC,CAAC,CAAC;EACpC,IAAMM,aAAa,GAAGzB,KAAK,CAACmB,MAAM,CAAC,EAAE,CAAC;EACtC,IAAMO,MAAM,GAAG1B,KAAK,CAACmB,MAAM,CAAC,CAAC,CAAC;EAC9B,IAAMQ,UAAU,GAAG3B,KAAK,CAACmB,MAAM,CAAC,CAAC,CAAC;EAElC,IAAMP,MAAM,GAAGR,YAAY,CAACO,cAAc,CAAC;EAE3C,IAAMiB,IAAI,GAAG5B,KAAK,CAACmB,MAAM,CAAiB,IAAI,CAAC;EAC/C,IAAMU,QAAQ,GAAG7B,KAAK,CAACmB,MAAM,CAAiB,IAAI,CAAC;EAEnD,IAAMW,kBAAkB,GAAG,SAArBA,kBAAkB,CAAIC,SAAiB,EAAK;IAChDV,cAAc,CAACW,OAAO,GAAGD,SAAS;IAClC,IAAIF,QAAQ,CAACG,OAAO,KAAK,IAAI,EAAE;MAC5BH,QAAQ,CAACG,OAAO,CAACC,KAAK,CACrBR,aAAa,CAACO,OAAO,CACtB,0BAAmBD,SAAS,QAAK;IACpC;EACF,CAAC;EAED,IAAMG,4BAA4B,GAAG,SAA/BA,4BAA4B,CAAIH,SAAiB,EAAK;IAC1D,IAAMI,QAAQ,GAAGJ,SAAS,IAAIP,YAAY,CAACQ,OAAO,GAAGV,YAAY,CAACU,OAAO,CAAC;IAC1EF,kBAAkB,CAChB,CAACR,YAAY,CAACU,OAAO,GAAGT,aAAa,CAACS,OAAO,IAAIG,QAAQ,CAC1D;EACH,CAAC;EAED,IAAMC,MAAM,GAAG,SAATA,MAAM,GAAS;IACnB,IAAI,CAACxB,MAAM,CAACoB,OAAO,IAAI,CAACJ,IAAI,CAACI,OAAO,IAAI,CAACH,QAAQ,CAACG,OAAO,EAAE;MACzD;IACF;IACA,IAAMK,iBAAiB,GAAGzB,MAAM,CAACoB,OAAO,CAACV,YAAY;IACrD,IAAMgB,iBAAiB,GAAG1B,MAAM,CAACoB,OAAO,CAACR,YAAY;IACrD,IAAMe,UAAU,GAAGF,iBAAiB,GAAGC,iBAAiB;IACxD,IAAME,kBAAkB,GAAGC,IAAI,CAACC,GAAG,CAACL,iBAAiB,GAAGE,UAAU,EAAE,EAAE,CAAC;IAEvErB,KAAK,CAACc,OAAO,GAAGO,UAAU;IAC1BjB,YAAY,CAACU,OAAO,GAAGK,iBAAiB;IACxCb,YAAY,CAACQ,OAAO,GAAGM,iBAAiB;IACxCf,aAAa,CAACS,OAAO,GAAGQ,kBAAkB;IAE1C,IAAID,UAAU,IAAI,CAAC,EAAE;MACnBX,IAAI,CAACI,OAAO,CAACC,KAAK,CAACU,OAAO,GAAG,MAAM;IACrC,CAAC,MAAM;MACLf,IAAI,CAACI,OAAO,CAACC,KAAK,CAACU,OAAO,GAAG,EAAE;MAC/Bd,QAAQ,CAACG,OAAO,CAACC,KAAK,CAACW,MAAM,aAAMJ,kBAAkB,OAAI;MACzDN,4BAA4B,CAACtB,MAAM,CAACoB,OAAO,CAACD,SAAS,CAAC;IACxD;EACF,CAAC;EAED,IAAMc,aAAa,GAAGxC,gBAAgB,CAAC,QAAQ,EAAE+B,MAAM,CAAC;EAExDjC,yBAAyB,CAAC,YAAM;IAC9B,IAAIU,YAAY,IAAII,MAAM,EAAE;MAC1B4B,aAAa,CAACC,GAAG,CAAC7B,MAAM,CAAC;IAC3B;EACF,CAAC,EAAE,CAACJ,YAAY,EAAEI,MAAM,CAAC,CAAC;EAE1Bd,yBAAyB,CAAC,YAAM;IAAA;IAC9B,IAAI8B,KAAK,wBAAGJ,QAAQ,CAACG,OAAO,sDAAhB,kBAAkBC,KAAK;IACnC,IAAIc,IAAI,GAAG,EAAE;IACb,IAAId,KAAK,KAAKe,SAAS,EAAE;MACvB,IAAI,WAAW,IAAIf,KAAK,EAAE;QACxBc,IAAI,GAAG,WAAW;MACpB,CAAC,MAAM,IAAI,iBAAiB,IAAId,KAAK,EAAE;QACrCc,IAAI,GAAG,iBAAiB;MAC1B;IACF;IACAtB,aAAa,CAACO,OAAO,GAAGe,IAAI;EAC9B,CAAC,EAAE,EAAE,CAAC;EAEN5C,yBAAyB,CAACiC,MAAM,CAAC;EAEjC,IAAMa,4BAA4B,GAAG,SAA/BA,4BAA4B,CAAItB,UAAkB,EAAK;IAC3D,IAAMQ,QAAQ,GACZR,UAAU,IAAIL,YAAY,CAACU,OAAO,GAAGT,aAAa,CAACS,OAAO,CAAC;IAC7D,IAAIpB,MAAM,CAACoB,OAAO,KAAK,IAAI,EAAE;MAC3BpB,MAAM,CAACoB,OAAO,CAACD,SAAS,GACtB,CAACP,YAAY,CAACQ,OAAO,GAAGV,YAAY,CAACU,OAAO,IAAIG,QAAQ;IAC5D;EACF,CAAC;EAED,IAAMe,MAAM,GAAG,SAATA,MAAM,CAAIC,CAAa,EAAK;IAChCA,CAAC,CAACC,cAAc,EAAE;IAClB,IAAMC,IAAI,GAAGF,CAAC,CAACG,OAAO,GAAG5B,MAAM,CAACM,OAAO;IACvC,IAAMuB,QAAQ,GAAGd,IAAI,CAACe,GAAG,CACvBf,IAAI,CAACC,GAAG,CAACf,UAAU,CAACK,OAAO,GAAGqB,IAAI,EAAE,CAAC,CAAC,EACtC/B,YAAY,CAACU,OAAO,GAAGT,aAAa,CAACS,OAAO,CAC7C;IAEDiB,4BAA4B,CAACM,QAAQ,CAAC;EACxC,CAAC;EAED,4BAOIjD,oBAAoB,CAACQ,iBAAiB,EAAEC,sBAAsB,CAAC;IANjE0C,cAAc,yBAAdA,cAAc;IACdC,cAAc,yBAAdA,cAAc;IACdC,kBAAkB,yBAAlBA,kBAAkB;IAClBC,iBAAiB,yBAAjBA,iBAAiB;IACjBC,mBAAmB,yBAAnBA,mBAAmB;IACnBC,mBAAmB,yBAAnBA,mBAAmB;EAGrB,IAAMC,IAAI,GAAG,SAAPA,IAAI,CAAIZ,CAAa,EAAK;IAC9BA,CAAC,CAACC,cAAc,EAAE;IAElB,IAAItC,iBAAiB,EAAE;MACrB8C,iBAAiB,EAAE;IACrB;IAEAI,WAAW,EAAE;EACf,CAAC;EAED,IAAMC,MAAM,GAAG,SAATA,MAAM,GAAS;IACnB,IAAI/C,KAAK,CAACc,OAAO,IAAI,CAAC,IAAI,CAACpB,MAAM,CAACoB,OAAO,EAAE;MACzC;IACF;IAEA,IAAIlB,iBAAiB,EAAE;MACrB4C,cAAc,EAAE;IAClB;IAEAxB,4BAA4B,CAACtB,MAAM,CAACoB,OAAO,CAACD,SAAS,CAAC;EACxD,CAAC;EAED,IAAMmC,SAAS,GAAG,CAChB7D,gBAAgB,CAAC,WAAW,EAAE6C,MAAM,CAAC,EACrC7C,gBAAgB,CAAC,SAAS,EAAE0D,IAAI,CAAC,CAClC;EAED,SAASI,SAAS,CAACC,EAAwB,EAAE;IAC3C,IAAIA,EAAE,EAAE;MACNF,SAAS,CAACG,OAAO,CAAC,UAACC,CAAC;QAAA,OAAKA,CAAC,CAACxB,GAAG,CAACsB,EAAE,CAAC;MAAA,EAAC;IACrC;EACF;EAEA,SAASJ,WAAW,GAAG;IACrBE,SAAS,CAACG,OAAO,CAAC,UAACC,CAAC;MAAA,OAAKA,CAAC,CAACC,MAAM,EAAE;IAAA,EAAC;EACtC;EAEA,IAAMC,WAAW,GAAG,SAAdA,WAAW,CAAIrB,CAAmB,EAAK;IAC3CA,CAAC,CAACC,cAAc,EAAE;IAClB1B,MAAM,CAACM,OAAO,GAAGmB,CAAC,CAACG,OAAO;IAC1B3B,UAAU,CAACK,OAAO,GAAGX,cAAc,CAACW,OAAO;IAE3C,IAAIlB,iBAAiB,EAAE;MACrB6C,kBAAkB,EAAE;IACtB;IAEAQ,SAAS,CAACnD,QAAQ,CAAC;EACrB,CAAC;EAED,oBACE;IAAK,SAAS,EAAEd,gBAAgB,yBAA6BO,SAAS;EAAE,gBACtE;IACE,SAAS,8BAAmC;IAC5C,GAAG,EAAEmB,IAAK;IACV,OAAO,EAAErB;EAAgB,gBAEzB;IACE,SAAS,EAAEL,gBAAgB,mCAEzB,CAACuD,cAAc,4CAAgD,CAC/D;IACF,YAAY,EAAE3C,iBAAiB,GAAG+C,mBAAmB,GAAGb,SAAU;IAClE,YAAY,EAAElC,iBAAiB,GAAGgD,mBAAmB,GAAGd,SAAU;IAClE,GAAG,EAAEnB,QAAS;IACd,WAAW,EAAE2C;EAAY,EACzB,CACE,eAEN;IACE,SAAS,6BAAkC;IAC3C,QAAQ,EAAE,CAAC,CAAE;IACb,GAAG,EAAE5D,MAAO;IACZ,QAAQ,EAAEqD;EAAO,GAEhBvD,QAAQ,CACL,CACF;AAEV,CAAC"}
|
|
@@ -21,6 +21,10 @@ export interface SelectProps extends NativeSelectProps, FormFieldProps, TrackerO
|
|
|
21
21
|
* Текст, который будет отображен, если приходит пустой `options`.
|
|
22
22
|
*/
|
|
23
23
|
emptyText?: string;
|
|
24
|
+
/**
|
|
25
|
+
* > ⚠️ В v6 из возвращаемых типов будет удалён `CustomSelectOptionInterface[]`. Для кастомной фильтрации используйте
|
|
26
|
+
* > `filterFn`.
|
|
27
|
+
*/
|
|
24
28
|
onInputChange?: (e: React.ChangeEvent, options: CustomSelectOptionInterface[]) => void | CustomSelectOptionInterface[];
|
|
25
29
|
options: CustomSelectOptionInterface[];
|
|
26
30
|
/**
|
|
@@ -248,14 +248,18 @@ export function CustomSelect(props) {
|
|
|
248
248
|
}
|
|
249
249
|
setKeyboardInput(fullInput);
|
|
250
250
|
}, [focusOptionByIndex, keyboardInput, options]);
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Note: сбрасывать `options` через `setOptions(optionsProp)` не нужно.
|
|
254
|
+
* Сброс происходит в одном из эффекте `updateOptionsAndSelectedOptionIndex()`.
|
|
255
|
+
*/
|
|
251
256
|
var close = React.useCallback(function () {
|
|
252
257
|
resetKeyboardInput();
|
|
253
258
|
setInputValue("");
|
|
254
259
|
setOpened(false);
|
|
255
260
|
setFocusedOptionIndex(-1);
|
|
256
|
-
setOptions(optionsProp);
|
|
257
261
|
onClose === null || onClose === void 0 ? void 0 : onClose();
|
|
258
|
-
}, [onClose,
|
|
262
|
+
}, [onClose, resetKeyboardInput]);
|
|
259
263
|
var selectFocused = React.useCallback(function () {
|
|
260
264
|
if (focusedOptionIndex !== undefined && isValidIndex(focusedOptionIndex)) {
|
|
261
265
|
var item = options[focusedOptionIndex];
|
|
@@ -306,7 +310,7 @@ export function CustomSelect(props) {
|
|
|
306
310
|
|
|
307
311
|
focusOptionByIndex(index);
|
|
308
312
|
}, [focusOptionByIndex, focusedOptionIndex, options]);
|
|
309
|
-
React.useEffect(function () {
|
|
313
|
+
React.useEffect(function updateOptionsAndSelectedOptionIndex() {
|
|
310
314
|
var _ref2, _props$value4;
|
|
311
315
|
var value = (_ref2 = (_props$value4 = props.value) !== null && _props$value4 !== void 0 ? _props$value4 : nativeSelectValue) !== null && _ref2 !== void 0 ? _ref2 : props.defaultValue;
|
|
312
316
|
var options = searchable && inputValue !== undefined ? filter(optionsProp, inputValue, filterFn) : optionsProp;
|
|
@@ -324,7 +328,7 @@ export function CustomSelect(props) {
|
|
|
324
328
|
e.preventDefault();
|
|
325
329
|
}
|
|
326
330
|
}, []);
|
|
327
|
-
var onNativeSelectChange =
|
|
331
|
+
var onNativeSelectChange = function onNativeSelectChange(e) {
|
|
328
332
|
var newSelectedOptionIndex = findSelectedIndex(options, e.currentTarget.value);
|
|
329
333
|
if (selectedOptionIndex !== newSelectedOptionIndex) {
|
|
330
334
|
if (!isControlledOutside) {
|
|
@@ -332,7 +336,7 @@ export function CustomSelect(props) {
|
|
|
332
336
|
}
|
|
333
337
|
onChange === null || onChange === void 0 ? void 0 : onChange(e);
|
|
334
338
|
}
|
|
335
|
-
}
|
|
339
|
+
};
|
|
336
340
|
var onInputKeyDown = React.useCallback(function (event) {
|
|
337
341
|
["ArrowUp", "ArrowDown", "Escape", "Enter"].includes(event.key) && areOptionsShown() && event.preventDefault();
|
|
338
342
|
switch (event.key) {
|
|
@@ -351,11 +355,12 @@ export function CustomSelect(props) {
|
|
|
351
355
|
}
|
|
352
356
|
}, [areOptionsShown, close, focusOption, selectFocused]);
|
|
353
357
|
var onInputChange = React.useCallback(function (e) {
|
|
358
|
+
// TODO v6 удалить `onInputChangeProp`.
|
|
354
359
|
if (onInputChangeProp) {
|
|
355
360
|
var _options = onInputChangeProp(e, optionsProp);
|
|
356
361
|
if (_options) {
|
|
357
362
|
if (process.env.NODE_ENV === "development") {
|
|
358
|
-
warn("Этот метод фильтрации устарел. Возвращаемое значение onInputChange будет " + "проигнорировано в
|
|
363
|
+
warn("Этот метод фильтрации устарел. Возвращаемое значение onInputChange будет " + "проигнорировано в v6.0.0. Для фильтрации обновляйте props.options самостоятельно или используйте свойство filterFn.");
|
|
359
364
|
}
|
|
360
365
|
setOptions(_options);
|
|
361
366
|
setSelectedOptionIndex(findSelectedIndex(_options, nativeSelectValue));
|