@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;
|
|
@@ -27,7 +27,8 @@ var _useWaitTransitionFinish = require("../../hooks/useWaitTransitionFinish");
|
|
|
27
27
|
var _usePlatform = require("../../hooks/usePlatform");
|
|
28
28
|
var _useAdaptivityWithJSMediaQueries = require("../../hooks/useAdaptivityWithJSMediaQueries");
|
|
29
29
|
var _excluded = ["action", "onItemClick"],
|
|
30
|
-
_excluded2 = ["
|
|
30
|
+
_excluded2 = ["Component", "title", "action", "autoClose", "mode"],
|
|
31
|
+
_excluded3 = ["actions", "actionsLayout", "children", "className", "style", "text", "header", "onClose", "dismissLabel"];
|
|
31
32
|
var AlertHeader = function AlertHeader(props) {
|
|
32
33
|
var platform = (0, _usePlatform.usePlatform)();
|
|
33
34
|
switch (platform) {
|
|
@@ -74,14 +75,17 @@ var AlertAction = function AlertAction(_ref) {
|
|
|
74
75
|
}, [onItemClick, action]);
|
|
75
76
|
if (platform === _platform.Platform.IOS) {
|
|
76
77
|
var _action$Component = action.Component,
|
|
77
|
-
Component = _action$Component === void 0 ? "button" : _action$Component
|
|
78
|
+
Component = _action$Component === void 0 ? "button" : _action$Component,
|
|
79
|
+
title = action.title,
|
|
80
|
+
actionProp = action.action,
|
|
81
|
+
autoClose = action.autoClose,
|
|
82
|
+
_mode = action.mode,
|
|
83
|
+
restActionProps = (0, _objectWithoutProperties2.default)(action, _excluded2);
|
|
78
84
|
return /*#__PURE__*/React.createElement(_Tappable.Tappable, (0, _extends2.default)({
|
|
79
|
-
Component:
|
|
80
|
-
className: (0, _classNames.classNamesString)("vkuiAlert__action", styles["Alert__action--mode-".concat(
|
|
81
|
-
onClick: handleItemClick
|
|
82
|
-
|
|
83
|
-
target: action.target
|
|
84
|
-
}, restProps), action.title);
|
|
85
|
+
Component: restActionProps.href ? "a" : Component,
|
|
86
|
+
className: (0, _classNames.classNamesString)("vkuiAlert__action", styles["Alert__action--mode-".concat(_mode)]),
|
|
87
|
+
onClick: handleItemClick
|
|
88
|
+
}, restActionProps, restProps), title);
|
|
85
89
|
}
|
|
86
90
|
var mode = "tertiary";
|
|
87
91
|
if (platform === _platform.Platform.VKCOM) {
|
|
@@ -114,7 +118,7 @@ var Alert = function Alert(_ref2) {
|
|
|
114
118
|
onClose = _ref2.onClose,
|
|
115
119
|
_ref2$dismissLabel = _ref2.dismissLabel,
|
|
116
120
|
dismissLabel = _ref2$dismissLabel === void 0 ? "Закрыть предупреждение" : _ref2$dismissLabel,
|
|
117
|
-
restProps = (0, _objectWithoutProperties2.default)(_ref2,
|
|
121
|
+
restProps = (0, _objectWithoutProperties2.default)(_ref2, _excluded3);
|
|
118
122
|
var platform = (0, _usePlatform.usePlatform)();
|
|
119
123
|
var _useAdaptivityWithJSM = (0, _useAdaptivityWithJSMediaQueries.useAdaptivityWithJSMediaQueries)(),
|
|
120
124
|
isDesktop = _useAdaptivityWithJSM.isDesktop;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Alert.js","names":["AlertHeader","props","platform","usePlatform","Platform","IOS","AlertText","VKCOM","AlertAction","action","onItemClick","restProps","handleItemClick","React","useCallback","Component","href","classNamesString","styles","mode","target","title","Alert","actions","actionsLayout","children","className","style","text","header","onClose","dismissLabel","useAdaptivityWithJSMediaQueries","isDesktop","useWaitTransitionFinish","waitTransitionFinish","useState","closing","setClosing","elementRef","useRef","resolvedActionsLayout","timeout","close","current","e","propertyName","item","autoClose","useScrollLock","stopPropagation","hasReactNode","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":["AlertHeader","props","platform","usePlatform","Platform","IOS","AlertText","VKCOM","AlertAction","action","onItemClick","restProps","handleItemClick","React","useCallback","Component","title","actionProp","autoClose","mode","restActionProps","href","classNamesString","styles","target","Alert","actions","actionsLayout","children","className","style","text","header","onClose","dismissLabel","useAdaptivityWithJSMediaQueries","isDesktop","useWaitTransitionFinish","waitTransitionFinish","useState","closing","setClosing","elementRef","useRef","resolvedActionsLayout","timeout","close","current","e","propertyName","item","useScrollLock","stopPropagation","hasReactNode","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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"}
|
|
@@ -242,7 +242,7 @@ var ChipsSelect = function ChipsSelect(props) {
|
|
|
242
242
|
return !prevOpened;
|
|
243
243
|
});
|
|
244
244
|
};
|
|
245
|
-
return /*#__PURE__*/React.createElement(_FormField.FormField, {
|
|
245
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_FormField.FormField, {
|
|
246
246
|
getRootRef: rootRef,
|
|
247
247
|
style: style,
|
|
248
248
|
className: (0, _classNames.classNamesString)("vkuiChipsSelect", opened && (isPopperDirectionTop ? "vkuiChipsSelect--pop-up" : "vkuiChipsSelect--pop-down"), className),
|
|
@@ -277,7 +277,7 @@ var ChipsSelect = function ChipsSelect(props) {
|
|
|
277
277
|
getRef: getRef,
|
|
278
278
|
disabled: disabled,
|
|
279
279
|
onInputChange: handleInputChange
|
|
280
|
-
})), opened && /*#__PURE__*/React.createElement(_CustomSelectDropdown.CustomSelectDropdown, {
|
|
280
|
+
}))), opened && /*#__PURE__*/React.createElement(_CustomSelectDropdown.CustomSelectDropdown, {
|
|
281
281
|
targetRef: rootRef,
|
|
282
282
|
placement: popupDirection,
|
|
283
283
|
scrollBoxRef: scrollBoxRef,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChipsSelect.js","names":["FOCUS_ACTION_NEXT","FOCUS_ACTION_PREV","chipsSelectDefaultProps","chipsInputDefaultProps","emptyText","creatableText","onChangeStart","noop","creatable","fetching","showSelected","closeAfterSelect","options","filterFn","defaultFilterFn","renderOption","props","ChipsSelect","propsWithDefault","style","onFocus","onKeyDown","className","getRef","getRootRef","disabled","placeholder","tabIndex","getOptionValue","getOptionLabel","getNewOptionData","renderChip","popupDirection","inputValue","before","fixDropdownWidth","forceDropdownPortal","restProps","useDOM","document","React","useState","undefined","popperPlacement","setPopperPlacement","scrollBoxRef","useRef","rootRef","useExternRef","useChipsSelect","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","useGlobalEventListener","renderChipWrapper","renderChipProps","onRemoveWrapper","stopPropagation","onRemove","isPopperDirectionTop","onPlacementChange","useCallback","placement","onDropdownMouseLeave","observableRefs","useMemo","toggleOpened","prevOpened","classNamesString","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":["FOCUS_ACTION_NEXT","FOCUS_ACTION_PREV","chipsSelectDefaultProps","chipsInputDefaultProps","emptyText","creatableText","onChangeStart","noop","creatable","fetching","showSelected","closeAfterSelect","options","filterFn","defaultFilterFn","renderOption","props","ChipsSelect","propsWithDefault","style","onFocus","onKeyDown","className","getRef","getRootRef","disabled","placeholder","tabIndex","getOptionValue","getOptionLabel","getNewOptionData","renderChip","popupDirection","inputValue","before","fixDropdownWidth","forceDropdownPortal","restProps","useDOM","document","React","useState","undefined","popperPlacement","setPopperPlacement","scrollBoxRef","useRef","rootRef","useExternRef","useChipsSelect","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","useGlobalEventListener","renderChipWrapper","renderChipProps","onRemoveWrapper","stopPropagation","onRemove","isPopperDirectionTop","onPlacementChange","useCallback","placement","onDropdownMouseLeave","observableRefs","useMemo","toggleOpened","prevOpened","classNamesString","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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"}
|
|
@@ -12,6 +12,7 @@ var _useIsomorphicLayoutEffect = require("../../lib/useIsomorphicLayoutEffect");
|
|
|
12
12
|
var _useExternRef = require("../../hooks/useExternRef");
|
|
13
13
|
var _useEventListener = require("../../hooks/useEventListener");
|
|
14
14
|
var _useTrackerVisibility2 = require("./useTrackerVisibility");
|
|
15
|
+
var _utils = require("../../lib/utils");
|
|
15
16
|
var CustomScrollView = function CustomScrollView(_ref) {
|
|
16
17
|
var className = _ref.className,
|
|
17
18
|
children = _ref.children,
|
|
@@ -145,7 +146,8 @@ var CustomScrollView = function CustomScrollView(_ref) {
|
|
|
145
146
|
className: (0, _classNames.classNamesString)("vkuiCustomScrollView", className)
|
|
146
147
|
}, /*#__PURE__*/React.createElement("div", {
|
|
147
148
|
className: "vkuiCustomScrollView__barY",
|
|
148
|
-
ref: barY
|
|
149
|
+
ref: barY,
|
|
150
|
+
onClick: _utils.stopPropagation
|
|
149
151
|
}, /*#__PURE__*/React.createElement("div", {
|
|
150
152
|
className: (0, _classNames.classNamesString)("vkuiCustomScrollView__trackerY", !trackerVisible && "vkuiCustomScrollView__trackerY--hidden"),
|
|
151
153
|
onMouseEnter: autoHideScrollbar ? onTrackerMouseEnter : undefined,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomScrollView.js","names":["CustomScrollView","className","children","externalBoxRef","boxRef","windowResize","autoHideScrollbar","autoHideScrollbarDelay","useDOM","document","window","ratio","React","useRef","NaN","lastTrackerTop","clientHeight","trackerHeight","scrollHeight","transformProp","startY","trackerTop","useExternRef","barY","trackerY","setTrackerPosition","scrollTop","current","style","setTrackerPositionFromScroll","progress","resize","localClientHeight","localScrollHeight","localRatio","localTrackerHeight","Math","max","display","height","resizeHandler","useEventListener","useIsomorphicLayoutEffect","add","prop","undefined","setScrollPositionFromTracker","onMove","e","preventDefault","diff","clientY","position","min","useTrackerVisibility","trackerVisible","onTargetScroll","onTrackerDragStart","onTrackerDragStop","onTrackerMouseEnter","onTrackerMouseLeave","onUp","unsubscribe","scroll","listeners","subscribe","el","forEach","l","remove","onDragStart","classNamesString"],"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":["CustomScrollView","className","children","externalBoxRef","boxRef","windowResize","autoHideScrollbar","autoHideScrollbarDelay","useDOM","document","window","ratio","React","useRef","NaN","lastTrackerTop","clientHeight","trackerHeight","scrollHeight","transformProp","startY","trackerTop","useExternRef","barY","trackerY","setTrackerPosition","scrollTop","current","style","setTrackerPositionFromScroll","progress","resize","localClientHeight","localScrollHeight","localRatio","localTrackerHeight","Math","max","display","height","resizeHandler","useEventListener","useIsomorphicLayoutEffect","add","prop","undefined","setScrollPositionFromTracker","onMove","e","preventDefault","diff","clientY","position","min","useTrackerVisibility","trackerVisible","onTargetScroll","onTrackerDragStart","onTrackerDragStop","onTrackerMouseEnter","onTrackerMouseLeave","onUp","unsubscribe","scroll","listeners","subscribe","el","forEach","l","remove","onDragStart","classNamesString","stopPropagation"],"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":"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"}
|
|
@@ -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
|
/**
|
|
@@ -255,14 +255,18 @@ function CustomSelect(props) {
|
|
|
255
255
|
}
|
|
256
256
|
setKeyboardInput(fullInput);
|
|
257
257
|
}, [focusOptionByIndex, keyboardInput, options]);
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* Note: сбрасывать `options` через `setOptions(optionsProp)` не нужно.
|
|
261
|
+
* Сброс происходит в одном из эффекте `updateOptionsAndSelectedOptionIndex()`.
|
|
262
|
+
*/
|
|
258
263
|
var close = React.useCallback(function () {
|
|
259
264
|
resetKeyboardInput();
|
|
260
265
|
setInputValue("");
|
|
261
266
|
setOpened(false);
|
|
262
267
|
setFocusedOptionIndex(-1);
|
|
263
|
-
setOptions(optionsProp);
|
|
264
268
|
onClose === null || onClose === void 0 ? void 0 : onClose();
|
|
265
|
-
}, [onClose,
|
|
269
|
+
}, [onClose, resetKeyboardInput]);
|
|
266
270
|
var selectFocused = React.useCallback(function () {
|
|
267
271
|
if (focusedOptionIndex !== undefined && isValidIndex(focusedOptionIndex)) {
|
|
268
272
|
var item = options[focusedOptionIndex];
|
|
@@ -313,7 +317,7 @@ function CustomSelect(props) {
|
|
|
313
317
|
|
|
314
318
|
focusOptionByIndex(index);
|
|
315
319
|
}, [focusOptionByIndex, focusedOptionIndex, options]);
|
|
316
|
-
React.useEffect(function () {
|
|
320
|
+
React.useEffect(function updateOptionsAndSelectedOptionIndex() {
|
|
317
321
|
var _ref2, _props$value4;
|
|
318
322
|
var value = (_ref2 = (_props$value4 = props.value) !== null && _props$value4 !== void 0 ? _props$value4 : nativeSelectValue) !== null && _ref2 !== void 0 ? _ref2 : props.defaultValue;
|
|
319
323
|
var options = searchable && inputValue !== undefined ? filter(optionsProp, inputValue, filterFn) : optionsProp;
|
|
@@ -331,7 +335,7 @@ function CustomSelect(props) {
|
|
|
331
335
|
e.preventDefault();
|
|
332
336
|
}
|
|
333
337
|
}, []);
|
|
334
|
-
var onNativeSelectChange =
|
|
338
|
+
var onNativeSelectChange = function onNativeSelectChange(e) {
|
|
335
339
|
var newSelectedOptionIndex = findSelectedIndex(options, e.currentTarget.value);
|
|
336
340
|
if (selectedOptionIndex !== newSelectedOptionIndex) {
|
|
337
341
|
if (!isControlledOutside) {
|
|
@@ -339,7 +343,7 @@ function CustomSelect(props) {
|
|
|
339
343
|
}
|
|
340
344
|
onChange === null || onChange === void 0 ? void 0 : onChange(e);
|
|
341
345
|
}
|
|
342
|
-
}
|
|
346
|
+
};
|
|
343
347
|
var onInputKeyDown = React.useCallback(function (event) {
|
|
344
348
|
["ArrowUp", "ArrowDown", "Escape", "Enter"].includes(event.key) && areOptionsShown() && event.preventDefault();
|
|
345
349
|
switch (event.key) {
|
|
@@ -358,11 +362,12 @@ function CustomSelect(props) {
|
|
|
358
362
|
}
|
|
359
363
|
}, [areOptionsShown, close, focusOption, selectFocused]);
|
|
360
364
|
var onInputChange = React.useCallback(function (e) {
|
|
365
|
+
// TODO v6 удалить `onInputChangeProp`.
|
|
361
366
|
if (onInputChangeProp) {
|
|
362
367
|
var _options = onInputChangeProp(e, optionsProp);
|
|
363
368
|
if (_options) {
|
|
364
369
|
if (process.env.NODE_ENV === "development") {
|
|
365
|
-
warn("Этот метод фильтрации устарел. Возвращаемое значение onInputChange будет " + "проигнорировано в
|
|
370
|
+
warn("Этот метод фильтрации устарел. Возвращаемое значение onInputChange будет " + "проигнорировано в v6.0.0. Для фильтрации обновляйте props.options самостоятельно или используйте свойство filterFn.");
|
|
366
371
|
}
|
|
367
372
|
setOptions(_options);
|
|
368
373
|
setSelectedOptionIndex(findSelectedIndex(_options, nativeSelectValue));
|