@vkontakte/vkui 5.9.2 → 5.9.4
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/ActionSheet/ActionSheet.js +1 -1
- package/dist/cjs/components/ActionSheet/ActionSheet.js.map +1 -1
- package/dist/cjs/components/CustomSelect/CustomSelect.d.ts +1 -1
- package/dist/cjs/components/CustomSelect/CustomSelect.d.ts.map +1 -1
- package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cjs/components/Header/Header.d.ts +3 -3
- package/dist/cjs/components/Header/Header.d.ts.map +1 -1
- package/dist/cjs/components/Header/Header.js +4 -5
- package/dist/cjs/components/Header/Header.js.map +1 -1
- package/dist/cjs/components/HorizontalScroll/HorizontalScroll.d.ts.map +1 -1
- package/dist/cjs/components/HorizontalScroll/HorizontalScroll.js +4 -0
- package/dist/cjs/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
- package/dist/cjs/components/ModalRoot/ModalRoot.d.ts.map +1 -1
- package/dist/cjs/components/ModalRoot/ModalRoot.js +7 -1
- package/dist/cjs/components/ModalRoot/ModalRoot.js.map +1 -1
- package/dist/cjs/components/PullToRefresh/PullToRefresh.d.ts.map +1 -1
- package/dist/cjs/components/PullToRefresh/PullToRefresh.js +35 -7
- package/dist/cjs/components/PullToRefresh/PullToRefresh.js.map +1 -1
- package/dist/cjs/components/Tappable/Tappable.d.ts.map +1 -1
- package/dist/cjs/components/Tappable/Tappable.js +1 -3
- package/dist/cjs/components/Tappable/Tappable.js.map +1 -1
- package/dist/cjs/components/Typography/Caption/Caption.d.ts +2 -0
- package/dist/cjs/components/Typography/Caption/Caption.d.ts.map +1 -1
- package/dist/cjs/components/Typography/Caption/Caption.js.map +1 -1
- package/dist/cjs/components/Typography/Footnote/Footnote.d.ts +2 -0
- package/dist/cjs/components/Typography/Footnote/Footnote.d.ts.map +1 -1
- package/dist/cjs/components/Typography/Footnote/Footnote.js.map +1 -1
- package/dist/cjs/components/Typography/Headline/Headline.d.ts +2 -0
- package/dist/cjs/components/Typography/Headline/Headline.d.ts.map +1 -1
- package/dist/cjs/components/Typography/Headline/Headline.js.map +1 -1
- package/dist/cjs/components/Typography/Paragraph/Paragraph.d.ts +2 -0
- package/dist/cjs/components/Typography/Paragraph/Paragraph.d.ts.map +1 -1
- package/dist/cjs/components/Typography/Paragraph/Paragraph.js.map +1 -1
- package/dist/cjs/components/Typography/Subhead/Subhead.d.ts +2 -0
- package/dist/cjs/components/Typography/Subhead/Subhead.d.ts.map +1 -1
- package/dist/cjs/components/Typography/Subhead/Subhead.js.map +1 -1
- package/dist/cjs/components/Typography/Text/Text.d.ts +2 -0
- package/dist/cjs/components/Typography/Text/Text.d.ts.map +1 -1
- package/dist/cjs/components/Typography/Text/Text.js.map +1 -1
- package/dist/cjs/components/Typography/Title/Title.d.ts +2 -0
- package/dist/cjs/components/Typography/Title/Title.d.ts.map +1 -1
- package/dist/cjs/components/Typography/Title/Title.js.map +1 -1
- package/dist/components/ActionSheet/ActionSheet.js +1 -1
- package/dist/components/ActionSheet/ActionSheet.js.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.d.ts +1 -1
- package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/components/Header/Header.d.ts +3 -3
- package/dist/components/Header/Header.d.ts.map +1 -1
- package/dist/components/Header/Header.js +4 -5
- package/dist/components/Header/Header.js.map +1 -1
- package/dist/components/HorizontalScroll/HorizontalScroll.d.ts.map +1 -1
- package/dist/components/HorizontalScroll/HorizontalScroll.js +4 -0
- package/dist/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
- package/dist/components/ModalRoot/ModalRoot.d.ts.map +1 -1
- package/dist/components/ModalRoot/ModalRoot.js +7 -1
- package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
- package/dist/components/PullToRefresh/PullToRefresh.d.ts.map +1 -1
- package/dist/components/PullToRefresh/PullToRefresh.js +35 -7
- package/dist/components/PullToRefresh/PullToRefresh.js.map +1 -1
- package/dist/components/Tappable/Tappable.d.ts.map +1 -1
- package/dist/components/Tappable/Tappable.js +1 -3
- package/dist/components/Tappable/Tappable.js.map +1 -1
- package/dist/components/Typography/Caption/Caption.d.ts +2 -0
- package/dist/components/Typography/Caption/Caption.d.ts.map +1 -1
- package/dist/components/Typography/Caption/Caption.js +2 -0
- package/dist/components/Typography/Caption/Caption.js.map +1 -1
- package/dist/components/Typography/Footnote/Footnote.d.ts +2 -0
- package/dist/components/Typography/Footnote/Footnote.d.ts.map +1 -1
- package/dist/components/Typography/Footnote/Footnote.js +2 -0
- package/dist/components/Typography/Footnote/Footnote.js.map +1 -1
- package/dist/components/Typography/Headline/Headline.d.ts +2 -0
- package/dist/components/Typography/Headline/Headline.d.ts.map +1 -1
- package/dist/components/Typography/Headline/Headline.js +2 -0
- package/dist/components/Typography/Headline/Headline.js.map +1 -1
- package/dist/components/Typography/Paragraph/Paragraph.d.ts +2 -0
- package/dist/components/Typography/Paragraph/Paragraph.d.ts.map +1 -1
- package/dist/components/Typography/Paragraph/Paragraph.js +2 -0
- package/dist/components/Typography/Paragraph/Paragraph.js.map +1 -1
- package/dist/components/Typography/Subhead/Subhead.d.ts +2 -0
- package/dist/components/Typography/Subhead/Subhead.d.ts.map +1 -1
- package/dist/components/Typography/Subhead/Subhead.js +2 -0
- package/dist/components/Typography/Subhead/Subhead.js.map +1 -1
- package/dist/components/Typography/Text/Text.d.ts +2 -0
- package/dist/components/Typography/Text/Text.d.ts.map +1 -1
- package/dist/components/Typography/Text/Text.js +2 -0
- package/dist/components/Typography/Text/Text.js.map +1 -1
- package/dist/components/Typography/Title/Title.d.ts +2 -0
- package/dist/components/Typography/Title/Title.d.ts.map +1 -1
- package/dist/components/Typography/Title/Title.js +2 -0
- package/dist/components/Typography/Title/Title.js.map +1 -1
- package/dist/components.css +2 -2
- package/dist/components.css.map +1 -1
- package/dist/components.js.tmp +1557 -1538
- package/dist/cssm/components/ActionSheet/ActionSheet.js +1 -1
- package/dist/cssm/components/ActionSheet/ActionSheet.js.map +1 -1
- package/dist/cssm/components/Alert/Alert.module.css +5 -0
- package/dist/cssm/components/CustomSelect/CustomSelect.d.ts +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.d.ts.map +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cssm/components/Header/Header.d.ts +3 -3
- package/dist/cssm/components/Header/Header.d.ts.map +1 -1
- package/dist/cssm/components/Header/Header.js +2 -3
- package/dist/cssm/components/Header/Header.js.map +1 -1
- package/dist/cssm/components/HorizontalScroll/HorizontalScroll.d.ts.map +1 -1
- package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js +4 -0
- package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
- package/dist/cssm/components/ModalRoot/ModalRoot.d.ts.map +1 -1
- package/dist/cssm/components/ModalRoot/ModalRoot.js +7 -1
- package/dist/cssm/components/ModalRoot/ModalRoot.js.map +1 -1
- package/dist/cssm/components/PullToRefresh/PullToRefresh.d.ts.map +1 -1
- package/dist/cssm/components/PullToRefresh/PullToRefresh.js +35 -7
- package/dist/cssm/components/PullToRefresh/PullToRefresh.js.map +1 -1
- package/dist/cssm/components/Tappable/Tappable.d.ts.map +1 -1
- package/dist/cssm/components/Tappable/Tappable.js +1 -3
- package/dist/cssm/components/Tappable/Tappable.js.map +1 -1
- package/dist/cssm/components/Typography/Caption/Caption.d.ts +2 -0
- package/dist/cssm/components/Typography/Caption/Caption.d.ts.map +1 -1
- package/dist/cssm/components/Typography/Caption/Caption.js +2 -0
- package/dist/cssm/components/Typography/Caption/Caption.js.map +1 -1
- package/dist/cssm/components/Typography/Footnote/Footnote.d.ts +2 -0
- package/dist/cssm/components/Typography/Footnote/Footnote.d.ts.map +1 -1
- package/dist/cssm/components/Typography/Footnote/Footnote.js +2 -0
- package/dist/cssm/components/Typography/Footnote/Footnote.js.map +1 -1
- package/dist/cssm/components/Typography/Headline/Headline.d.ts +2 -0
- package/dist/cssm/components/Typography/Headline/Headline.d.ts.map +1 -1
- package/dist/cssm/components/Typography/Headline/Headline.js +2 -0
- package/dist/cssm/components/Typography/Headline/Headline.js.map +1 -1
- package/dist/cssm/components/Typography/Paragraph/Paragraph.d.ts +2 -0
- package/dist/cssm/components/Typography/Paragraph/Paragraph.d.ts.map +1 -1
- package/dist/cssm/components/Typography/Paragraph/Paragraph.js +2 -0
- package/dist/cssm/components/Typography/Paragraph/Paragraph.js.map +1 -1
- package/dist/cssm/components/Typography/Subhead/Subhead.d.ts +2 -0
- package/dist/cssm/components/Typography/Subhead/Subhead.d.ts.map +1 -1
- package/dist/cssm/components/Typography/Subhead/Subhead.js +2 -0
- package/dist/cssm/components/Typography/Subhead/Subhead.js.map +1 -1
- package/dist/cssm/components/Typography/Text/Text.d.ts +2 -0
- package/dist/cssm/components/Typography/Text/Text.d.ts.map +1 -1
- package/dist/cssm/components/Typography/Text/Text.js +2 -0
- package/dist/cssm/components/Typography/Text/Text.js.map +1 -1
- package/dist/cssm/components/Typography/Title/Title.d.ts +2 -0
- package/dist/cssm/components/Typography/Title/Title.d.ts.map +1 -1
- package/dist/cssm/components/Typography/Title/Title.js +2 -0
- package/dist/cssm/components/Typography/Title/Title.js.map +1 -1
- package/dist/cssm/styles/common.css +5 -0
- package/dist/vkui.css +2 -2
- package/dist/vkui.css.map +1 -1
- package/dist/vkui.js.tmp +1557 -1538
- package/package.json +1 -1
- package/src/components/ActionSheet/ActionSheet.tsx +2 -2
- package/src/components/Alert/Alert.module.css +5 -0
- package/src/components/CustomSelect/CustomSelect.tsx +1 -1
- package/src/components/Header/Header.tsx +3 -3
- package/src/components/HorizontalScroll/HorizontalScroll.tsx +4 -0
- package/src/components/ModalRoot/ModalRoot.tsx +9 -1
- package/src/components/PullToRefresh/PullToRefresh.tsx +43 -9
- package/src/components/Tappable/Tappable.tsx +1 -3
- package/src/components/Typography/Caption/Caption.tsx +2 -0
- package/src/components/Typography/Footnote/Footnote.tsx +2 -0
- package/src/components/Typography/Headline/Headline.tsx +2 -0
- package/src/components/Typography/Paragraph/Paragraph.tsx +2 -0
- package/src/components/Typography/Subhead/Subhead.tsx +2 -0
- package/src/components/Typography/Text/Text.tsx +2 -0
- package/src/components/Typography/Title/Title.tsx +2 -0
- package/src/styles/common.css +6 -0
- package/dist/cjs/hooks/useAdaptivityHasHover.d.ts +0 -9
- package/dist/cjs/hooks/useAdaptivityHasHover.d.ts.map +0 -1
- package/dist/cjs/hooks/useAdaptivityHasHover.js +0 -28
- package/dist/cjs/hooks/useAdaptivityHasHover.js.map +0 -1
- package/dist/cssm/hooks/useAdaptivityHasHover.d.ts +0 -9
- package/dist/cssm/hooks/useAdaptivityHasHover.d.ts.map +0 -1
- package/dist/cssm/hooks/useAdaptivityHasHover.js +0 -16
- package/dist/cssm/hooks/useAdaptivityHasHover.js.map +0 -1
- package/dist/hooks/useAdaptivityHasHover.d.ts +0 -9
- package/dist/hooks/useAdaptivityHasHover.d.ts.map +0 -1
- package/dist/hooks/useAdaptivityHasHover.js +0 -17
- package/dist/hooks/useAdaptivityHasHover.js.map +0 -1
- package/src/hooks/useAdaptivityHasHover.ts +0 -26
|
@@ -114,7 +114,7 @@ var ActionSheet = function(_param) {
|
|
|
114
114
|
style: mode === "menu" ? style : undefined
|
|
115
115
|
}), /*#__PURE__*/ _react.createElement("div", {
|
|
116
116
|
className: "vkuiActionSheet__content-wrapper"
|
|
117
|
-
}, (header || text) && /*#__PURE__*/ _react.createElement("
|
|
117
|
+
}, (header || text) && /*#__PURE__*/ _react.createElement("div", {
|
|
118
118
|
className: "vkuiActionSheet__header"
|
|
119
119
|
}, header && /*#__PURE__*/ _react.createElement(_Footnote.Footnote, {
|
|
120
120
|
weight: "2",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/ActionSheet/ActionSheet.tsx"],"sourcesContent":["import * as React from 'react';\nimport { noop } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { useObjectMemo } from '../../hooks/useObjectMemo';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useTimeout } from '../../hooks/useTimeout';\nimport { Platform } from '../../lib/platform';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { useScrollLock } from '../AppRoot/ScrollContext';\nimport { PopoutWrapper } from '../PopoutWrapper/PopoutWrapper';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { ActionSheetContext, ItemClickHandler } from './ActionSheetContext';\nimport { ActionSheetDefaultIosCloseItem } from './ActionSheetDefaultIosCloseItem';\nimport { ActionSheetDropdownMenu } from './ActionSheetDropdownMenu';\nimport { ActionSheetDropdownSheet } from './ActionSheetDropdownSheet';\nimport { SharedDropdownProps } from './types';\nimport styles from './ActionSheet.module.css';\n\nconst warn = warnOnce('ActionSheet');\ntype CloseInitiators = 'action-item' | 'cancel-item' | 'other';\nexport interface ActionSheetOnCloseOptions {\n closedBy: CloseInitiators;\n}\n\nexport interface ActionSheetProps\n extends Pick<\n SharedDropdownProps,\n 'toggleRef' | 'popupDirection' | 'popupOffsetDistance' | 'placement'\n >,\n React.HTMLAttributes<HTMLDivElement> {\n header?: React.ReactNode;\n text?: React.ReactNode;\n /**\n * Закрыть попап по клику снаружи.\n */\n onClose(options: ActionSheetOnCloseOptions): void;\n /**\n * Только мобильный iOS.\n */\n iosCloseItem?: React.ReactNode;\n mode?: 'sheet' | 'menu';\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ActionSheet\n */\nexport const ActionSheet = ({\n children,\n className,\n header,\n text,\n style,\n iosCloseItem,\n popupDirection,\n popupOffsetDistance,\n placement,\n mode: modeProp,\n ...restProps\n}: ActionSheetProps) => {\n const platform = usePlatform();\n const [closingBy, setClosingBy] = React.useState<undefined | CloseInitiators>(undefined);\n const onClose = () => setClosingBy('other');\n const _action = React.useRef(noop);\n\n const afterClose = () => {\n restProps.onClose({ closedBy: closingBy || 'other' });\n _action.current();\n _action.current = noop;\n };\n\n const { isDesktop } = useAdaptivityWithJSMediaQueries();\n const mode = modeProp ?? (isDesktop ? 'menu' : 'sheet');\n\n useScrollLock(mode === 'sheet');\n\n let timeout = platform === Platform.IOS ? 300 : 200;\n\n if (mode === 'menu') {\n timeout = 0;\n }\n\n const fallbackTransitionFinish = useTimeout(afterClose, timeout);\n React.useEffect(() => {\n if (closingBy) {\n fallbackTransitionFinish.set();\n } else {\n fallbackTransitionFinish.clear();\n }\n }, [closingBy, fallbackTransitionFinish]);\n\n const onItemClick = React.useCallback<ItemClickHandler>(\n ({ action, immediateAction, autoClose, isCancelItem }) =>\n (event) => {\n event.persist();\n immediateAction && immediateAction(event);\n if (autoClose) {\n _action.current = () => action && action(event);\n setClosingBy(isCancelItem ? 'cancel-item' : 'action-item');\n } else {\n action && action(event);\n }\n },\n [],\n );\n const contextValue = useObjectMemo({ onItemClick, mode });\n\n const DropdownComponent = mode === 'menu' ? ActionSheetDropdownMenu : ActionSheetDropdownSheet;\n\n if (process.env.NODE_ENV === 'development' && popupDirection) {\n // TODO [>=6]: popupDirection\n warn('Свойство \"popupDirection\" будет удалено в v6. Используйте свойство \"placement\"');\n }\n\n popupDirection = popupDirection !== undefined ? popupDirection : 'bottom';\n\n const dropdownProps =\n mode === 'menu'\n ? Object.assign(restProps, { popupOffsetDistance, popupDirection, placement })\n : restProps;\n\n const actionSheet = (\n <ActionSheetContext.Provider value={contextValue}>\n <DropdownComponent\n closing={Boolean(closingBy)}\n timeout={timeout}\n {...dropdownProps}\n onClose={onClose}\n className={mode === 'menu' ? className : undefined}\n style={mode === 'menu' ? style : undefined}\n >\n <div className={styles['ActionSheet__content-wrapper']}>\n {(header || text) && (\n <
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ActionSheet/ActionSheet.tsx"],"sourcesContent":["import * as React from 'react';\nimport { noop } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { useObjectMemo } from '../../hooks/useObjectMemo';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useTimeout } from '../../hooks/useTimeout';\nimport { Platform } from '../../lib/platform';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { useScrollLock } from '../AppRoot/ScrollContext';\nimport { PopoutWrapper } from '../PopoutWrapper/PopoutWrapper';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { ActionSheetContext, ItemClickHandler } from './ActionSheetContext';\nimport { ActionSheetDefaultIosCloseItem } from './ActionSheetDefaultIosCloseItem';\nimport { ActionSheetDropdownMenu } from './ActionSheetDropdownMenu';\nimport { ActionSheetDropdownSheet } from './ActionSheetDropdownSheet';\nimport { SharedDropdownProps } from './types';\nimport styles from './ActionSheet.module.css';\n\nconst warn = warnOnce('ActionSheet');\ntype CloseInitiators = 'action-item' | 'cancel-item' | 'other';\nexport interface ActionSheetOnCloseOptions {\n closedBy: CloseInitiators;\n}\n\nexport interface ActionSheetProps\n extends Pick<\n SharedDropdownProps,\n 'toggleRef' | 'popupDirection' | 'popupOffsetDistance' | 'placement'\n >,\n React.HTMLAttributes<HTMLDivElement> {\n header?: React.ReactNode;\n text?: React.ReactNode;\n /**\n * Закрыть попап по клику снаружи.\n */\n onClose(options: ActionSheetOnCloseOptions): void;\n /**\n * Только мобильный iOS.\n */\n iosCloseItem?: React.ReactNode;\n mode?: 'sheet' | 'menu';\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ActionSheet\n */\nexport const ActionSheet = ({\n children,\n className,\n header,\n text,\n style,\n iosCloseItem,\n popupDirection,\n popupOffsetDistance,\n placement,\n mode: modeProp,\n ...restProps\n}: ActionSheetProps) => {\n const platform = usePlatform();\n const [closingBy, setClosingBy] = React.useState<undefined | CloseInitiators>(undefined);\n const onClose = () => setClosingBy('other');\n const _action = React.useRef(noop);\n\n const afterClose = () => {\n restProps.onClose({ closedBy: closingBy || 'other' });\n _action.current();\n _action.current = noop;\n };\n\n const { isDesktop } = useAdaptivityWithJSMediaQueries();\n const mode = modeProp ?? (isDesktop ? 'menu' : 'sheet');\n\n useScrollLock(mode === 'sheet');\n\n let timeout = platform === Platform.IOS ? 300 : 200;\n\n if (mode === 'menu') {\n timeout = 0;\n }\n\n const fallbackTransitionFinish = useTimeout(afterClose, timeout);\n React.useEffect(() => {\n if (closingBy) {\n fallbackTransitionFinish.set();\n } else {\n fallbackTransitionFinish.clear();\n }\n }, [closingBy, fallbackTransitionFinish]);\n\n const onItemClick = React.useCallback<ItemClickHandler>(\n ({ action, immediateAction, autoClose, isCancelItem }) =>\n (event) => {\n event.persist();\n immediateAction && immediateAction(event);\n if (autoClose) {\n _action.current = () => action && action(event);\n setClosingBy(isCancelItem ? 'cancel-item' : 'action-item');\n } else {\n action && action(event);\n }\n },\n [],\n );\n const contextValue = useObjectMemo({ onItemClick, mode });\n\n const DropdownComponent = mode === 'menu' ? ActionSheetDropdownMenu : ActionSheetDropdownSheet;\n\n if (process.env.NODE_ENV === 'development' && popupDirection) {\n // TODO [>=6]: popupDirection\n warn('Свойство \"popupDirection\" будет удалено в v6. Используйте свойство \"placement\"');\n }\n\n popupDirection = popupDirection !== undefined ? popupDirection : 'bottom';\n\n const dropdownProps =\n mode === 'menu'\n ? Object.assign(restProps, { popupOffsetDistance, popupDirection, placement })\n : restProps;\n\n const actionSheet = (\n <ActionSheetContext.Provider value={contextValue}>\n <DropdownComponent\n closing={Boolean(closingBy)}\n timeout={timeout}\n {...dropdownProps}\n onClose={onClose}\n className={mode === 'menu' ? className : undefined}\n style={mode === 'menu' ? style : undefined}\n >\n <div className={styles['ActionSheet__content-wrapper']}>\n {(header || text) && (\n <div className={styles['ActionSheet__header']}>\n {header && (\n <Footnote weight=\"2\" className={styles['ActionSheet__title']}>\n {header}\n </Footnote>\n )}\n {text && <Footnote className={styles['ActionSheet__text']}>{text}</Footnote>}\n </div>\n )}\n {children}\n </div>\n {platform === Platform.IOS && mode === 'sheet' && (\n <div className={styles['ActionSheet__close-item-wrapper--ios']}>\n {iosCloseItem ?? <ActionSheetDefaultIosCloseItem />}\n </div>\n )}\n </DropdownComponent>\n </ActionSheetContext.Provider>\n );\n\n if (mode === 'menu') {\n return actionSheet;\n }\n\n return (\n <PopoutWrapper\n closing={Boolean(closingBy)}\n alignY=\"bottom\"\n className={className}\n style={style}\n onClick={onClose}\n hasMask\n fixed\n >\n {actionSheet}\n </PopoutWrapper>\n );\n};\n"],"names":["ActionSheet","warn","warnOnce","children","className","header","text","style","iosCloseItem","popupDirection","popupOffsetDistance","placement","mode","modeProp","restProps","platform","usePlatform","React","useState","undefined","closingBy","setClosingBy","onClose","_action","useRef","noop","afterClose","closedBy","current","isDesktop","useAdaptivityWithJSMediaQueries","useScrollLock","timeout","Platform","IOS","fallbackTransitionFinish","useTimeout","useEffect","set","clear","onItemClick","useCallback","action","immediateAction","autoClose","isCancelItem","event","persist","contextValue","useObjectMemo","DropdownComponent","ActionSheetDropdownMenu","ActionSheetDropdownSheet","process","env","NODE_ENV","dropdownProps","Object","assign","actionSheet","ActionSheetContext","Provider","value","closing","Boolean","div","Footnote","weight","ActionSheetDefaultIosCloseItem","PopoutWrapper","alignY","onClick","hasMask","fixed"],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ export interface CustomSelectOptionInterface {
|
|
|
13
13
|
[index: string]: any;
|
|
14
14
|
}
|
|
15
15
|
interface CustomSelectRenderOption extends CustomSelectOptionProps {
|
|
16
|
-
option
|
|
16
|
+
option: CustomSelectOptionInterface;
|
|
17
17
|
}
|
|
18
18
|
export interface SelectProps extends NativeSelectProps, FormFieldProps, TrackerOptionsProps {
|
|
19
19
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomSelect.d.ts","sourceRoot":"","sources":["../../../../src/components/CustomSelect/CustomSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAE/E,OAAO,EAEL,uBAAuB,EACxB,MAAM,0CAA0C,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAA2B,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAiFlG,KAAK,WAAW,GAAG,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC;AAE1E,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,UAAU,wBAAyB,SAAQ,uBAAuB;IAChE,MAAM,
|
|
1
|
+
{"version":3,"file":"CustomSelect.d.ts","sourceRoot":"","sources":["../../../../src/components/CustomSelect/CustomSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAE/E,OAAO,EAEL,uBAAuB,EACxB,MAAM,0CAA0C,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAA2B,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAiFlG,KAAK,WAAW,GAAG,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC;AAE1E,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,UAAU,wBAAyB,SAAQ,uBAAuB;IAChE,MAAM,EAAE,2BAA2B,CAAC;CACrC;AAED,MAAM,WAAW,WAAY,SAAQ,iBAAiB,EAAE,cAAc,EAAE,mBAAmB;IACzF;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,aAAa,CAAC,EAAE,CACd,CAAC,EAAE,KAAK,CAAC,WAAW,EACpB,OAAO,EAAE,2BAA2B,EAAE,KACnC,IAAI,GAAG,2BAA2B,EAAE,CAAC;IAC1C,OAAO,EAAE,2BAA2B,EAAE,CAAC;IACvC;;OAEG;IACH,QAAQ,CAAC,EACL,KAAK,GACL,CAAC,CACC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,2BAA2B,EACnC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,2BAA2B,CAAC,KAAK,MAAM,KACtE,OAAO,CAAC,CAAC;IAClB,cAAc,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IAClC;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,KAAK,CAAC,SAAS,CAAC;IACpE;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,EAChB,sBAAsB,GACvB,EAAE;QACD,sBAAsB,EAAE,KAAK,CAAC,SAAS,CAAC;KACzC,KAAK,KAAK,CAAC,SAAS,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;OAEG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB;;;OAGG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,4BAA4B,CAAC,CAAC;IAChE;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAID;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,qBAsmB9C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { SizeType } from '../../lib/adaptivity';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport { defaultFilterFn, getFormFieldModeFromSelectType } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { debounce, getTitleFromChildren } from '../../lib/utils';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { TrackerOptionsProps } from '../CustomScrollView/useTrackerVisibility';\nimport { CustomSelectDropdown } from '../CustomSelectDropdown/CustomSelectDropdown';\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormFieldProps } from '../FormField/FormField';\nimport { Input } from '../Input/Input';\nimport { NativeSelectProps } from '../NativeSelect/NativeSelect';\nimport { SelectType } from '../Select/Select';\nimport { SelectMimicry } from '../SelectMimicry/SelectMimicry';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { CustomSelectClearButton, CustomSelectClearButtonProps } from './CustomSelectClearButton';\nimport styles from './CustomSelect.module.css';\n\nconst sizeYClassNames = {\n none: styles['CustomSelect--sizeY-none'],\n [SizeType.COMPACT]: styles['CustomSelect--sizeY-compact'],\n};\n\nconst findIndexAfter = (options: CustomSelectOptionInterface[] = [], startIndex = -1) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (\n options: CustomSelectOptionInterface[] = [],\n endIndex: number = options.length,\n) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nconst warn = warnOnce('CustomSelect');\n\nconst checkOptionsValueType = (options: CustomSelectOptionInterface[]) => {\n if (new Set(options.map((item) => typeof item.value)).size > 1) {\n warn(\n 'Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.',\n 'error',\n );\n }\n};\n\nfunction defaultRenderOptionFn({ option, ...props }: CustomSelectOptionProps): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nconst handleOptionDown: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n};\n\nfunction findSelectedIndex(\n options: CustomSelectOptionInterface[],\n value: SelectValue,\n withClear: boolean,\n) {\n if (withClear && value === '') {\n return -1;\n }\n return (\n options.findIndex((item) => {\n value = typeof item.value === 'number' ? Number(value) : value;\n return item.value === value;\n }) ?? -1\n );\n}\n\nconst filter = (\n options: SelectProps['options'],\n inputValue: string,\n filterFn: SelectProps['filterFn'],\n) => {\n return typeof filterFn === 'function'\n ? options.filter((option) => filterFn(inputValue, option))\n : options;\n};\n\nconst defaultOptions: CustomSelectOptionInterface[] = [];\n\ntype SelectValue = React.SelectHTMLAttributes<HTMLSelectElement>['value'];\n\nexport interface CustomSelectOptionInterface {\n value: SelectValue;\n label: React.ReactElement | string;\n disabled?: boolean;\n [index: string]: any;\n}\n\ninterface CustomSelectRenderOption extends CustomSelectOptionProps {\n option?: CustomSelectOptionInterface;\n}\n\nexport interface SelectProps extends NativeSelectProps, FormFieldProps, TrackerOptionsProps {\n /**\n * Если `true`, то при клике на селект в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n /**\n * > ⚠️ В **v6** из возвращаемых типов будет удалён `CustomSelectOptionInterface[]`. Для кастомной фильтрации используйте\n * > `filterFn`.\n */\n onInputChange?: (\n e: React.ChangeEvent,\n options: CustomSelectOptionInterface[],\n ) => void | CustomSelectOptionInterface[];\n options: CustomSelectOptionInterface[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?:\n | false\n | ((\n value: string,\n option: CustomSelectOptionInterface,\n getOptionLabel?: (option: Partial<CustomSelectOptionInterface>) => string,\n ) => boolean);\n popupDirection?: 'top' | 'bottom';\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkcom.github.io/VKUI/#/CustomSelectOption?id=props)\n *\n * > ⚠️ Важно: cвойство опции `disabled` должно выставляться только через проп `options`.\n * > Запрещается выставлять `disabled` проп опциям в обход `options`, иначе селект не будет знать об актуальном состоянии\n * опции.\n */\n renderOption?: (props: CustomSelectRenderOption) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Если `true`, то в дропдауне вместо списка опций рисуется спиннер. При переданных `renderDropdown` и `fetching: true`\n * \"победит\" `renderDropdown`.\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n /**\n * Кастомная кнопка для очистки значения.\n * Должна принимать обязательное свойство `onClick`\n */\n ClearButton?: React.ComponentType<CustomSelectClearButtonProps>;\n /**\n * Если `true`, то справа будет отображаться кнопка для очистки значения\n */\n allowClearButton?: boolean;\n dropdownOffsetDistance?: number;\n fixDropdownWidth?: boolean;\n forceDropdownPortal?: boolean;\n selectType?: SelectType;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport function CustomSelect(props: SelectProps) {\n const [opened, setOpened] = React.useState(false);\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection,\n style,\n onChange,\n children,\n onInputChange: onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n selectType = 'default',\n autoHideScrollbar,\n autoHideScrollbarDelay,\n searchable = false,\n renderOption: renderOptionProp = defaultRenderOptionFn,\n options: optionsProp = defaultOptions,\n emptyText = 'Ничего не найдено',\n filterFn = defaultFilterFn,\n icon: iconProp,\n ClearButton = CustomSelectClearButton,\n allowClearButton = false,\n dropdownOffsetDistance = 0,\n fixDropdownWidth = true,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(optionsProp);\n }\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const containerRef = React.useRef<HTMLLabelElement>(null);\n const handleRootRef = useExternRef(containerRef, getRootRef);\n const scrollBoxRef = React.useRef<HTMLDivElement | null>(null);\n const selectElRef = useExternRef(getRef);\n\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<number | undefined>(-1);\n const [isControlledOutside, setIsControlledOutside] = React.useState(props.value !== undefined);\n const [inputValue, setInputValue] = React.useState('');\n const [nativeSelectValue, setNativeSelectValue] = React.useState(\n () => props.value ?? props.defaultValue ?? (allowClearButton ? '' : undefined),\n );\n const [keyboardInput, setKeyboardInput] = React.useState('');\n const [popperPlacement, setPopperPlacement] = React.useState<PlacementWithAuto | undefined>(\n undefined,\n );\n const [options, setOptions] = React.useState(optionsProp);\n const [selectedOptionIndex, setSelectedOptionIndex] = React.useState<number | undefined>(\n findSelectedIndex(optionsProp, props.value ?? props.defaultValue, allowClearButton),\n );\n\n React.useEffect(() => {\n setIsControlledOutside(props.value !== undefined);\n setNativeSelectValue((nativeSelectValue) => props.value ?? nativeSelectValue);\n }, [props.value]);\n\n useIsomorphicLayoutEffect(() => {\n if (\n options.some(({ value }) => nativeSelectValue === value) ||\n (allowClearButton && nativeSelectValue === '')\n ) {\n const event = new Event('change', { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const selected = React.useMemo(() => {\n if (!options.length) {\n return null;\n }\n\n return selectedOptionIndex !== undefined ? options[selectedOptionIndex] : undefined;\n }, [options, selectedOptionIndex]);\n\n const openedClassNames = React.useMemo(\n () =>\n (opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement?.includes('top')\n ? styles['CustomSelect--pop-up']\n : styles['CustomSelect--pop-down'])) ||\n undefined,\n [dropdownOffsetDistance, opened, popperPlacement],\n );\n\n const resetKeyboardInput = React.useCallback(() => {\n setKeyboardInput('');\n }, []);\n\n const scrollToElement = React.useCallback((index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const item = dropdown ? (dropdown.children[index] as HTMLElement) : null;\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 isValidIndex = React.useCallback(\n (index: number) => {\n return index >= 0 && index < (options.length ?? 0);\n },\n [options.length],\n );\n\n const focusOptionByIndex = React.useCallback(\n (index: number | undefined, scrollTo = true) => {\n if (index === undefined || index < 0 || index > (options.length ?? 0) - 1) {\n return;\n }\n\n const option = options[index];\n\n if (option?.disabled) {\n return;\n }\n\n if (scrollTo) {\n scrollToElement(index);\n }\n\n // Это оптимизация, прежде всего, под `onMouseOver`\n setFocusedOptionIndex((focusedOptionIndex) =>\n focusedOptionIndex !== index ? index : focusedOptionIndex,\n );\n },\n [options, scrollToElement],\n );\n\n const areOptionsShown = React.useCallback(() => {\n return scrollBoxRef.current !== null;\n }, []);\n\n const setScrollBoxRef = React.useCallback(\n (ref: HTMLDivElement | null) => {\n scrollBoxRef.current = ref;\n\n if (ref && selectedOptionIndex !== undefined && isValidIndex(selectedOptionIndex)) {\n {\n scrollToElement(selectedOptionIndex, true);\n }\n }\n },\n [isValidIndex, scrollToElement, selectedOptionIndex],\n );\n\n const onKeyboardInput = React.useCallback(\n (key: string) => {\n const fullInput = keyboardInput + key;\n\n const optionIndex = options.findIndex((option) => {\n return getTitleFromChildren(option.label).toLowerCase().includes(fullInput);\n });\n\n if (optionIndex !== undefined && optionIndex > -1) {\n focusOptionByIndex(optionIndex);\n }\n\n setKeyboardInput(fullInput);\n },\n [focusOptionByIndex, keyboardInput, options],\n );\n\n /**\n * Note: сбрасывать `options` через `setOptions(optionsProp)` не нужно.\n * Сброс происходит в одном из эффекте `updateOptionsAndSelectedOptionIndex()`.\n */\n const close = React.useCallback(() => {\n resetKeyboardInput();\n\n setInputValue('');\n setOpened(false);\n setFocusedOptionIndex(-1);\n onClose?.();\n }, [onClose, resetKeyboardInput]);\n\n const selectOption = React.useCallback(\n (index: number) => {\n const item = options[index];\n\n setNativeSelectValue(item?.value);\n close();\n\n const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync =\n isControlledOutside &&\n props.value !== nativeSelectValue &&\n nativeSelectValue === item?.value;\n\n if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) {\n const event = new Event('change', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }\n },\n [close, options, selectElRef, isControlledOutside, props.value, nativeSelectValue],\n );\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionIndex === undefined || !isValidIndex(focusedOptionIndex)) {\n return;\n }\n\n selectOption(focusedOptionIndex);\n }, [focusedOptionIndex, isValidIndex, selectOption]);\n\n const open = React.useCallback(() => {\n setOpened(true);\n setFocusedOptionIndex(selectedOptionIndex);\n\n if (typeof onOpen === 'function') {\n onOpen();\n }\n }, [onOpen, selectedOptionIndex]);\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event('blur');\n selectElRef.current?.dispatchEvent(event);\n }, [close, selectElRef]);\n\n const resetFocusedOption = React.useCallback(() => {\n setFocusedOptionIndex(-1);\n }, []);\n\n const onFocus = React.useCallback(() => {\n const event = new Event('focus');\n selectElRef.current?.dispatchEvent(event);\n }, [selectElRef]);\n\n const onClick = React.useCallback(() => {\n if (opened) {\n close();\n } else {\n open();\n }\n }, [close, open, opened]);\n\n const handleKeyUp = React.useMemo(() => debounce(resetKeyboardInput, 1000), [resetKeyboardInput]);\n\n const focusOption = React.useCallback(\n (type: 'next' | 'prev') => {\n let index = focusedOptionIndex;\n\n if (type === 'next') {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === 'prev') {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index);\n },\n [focusOptionByIndex, focusedOptionIndex, options],\n );\n\n React.useEffect(\n function updateOptionsAndSelectedOptionIndex() {\n const value = props.value ?? nativeSelectValue ?? props.defaultValue;\n\n const options =\n searchable && inputValue !== undefined\n ? filter(optionsProp, inputValue, filterFn)\n : optionsProp;\n\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, value, allowClearButton));\n },\n [\n filterFn,\n inputValue,\n nativeSelectValue,\n optionsProp,\n props.defaultValue,\n props.value,\n searchable,\n allowClearButton,\n ],\n );\n\n /**\n * Нужен для правильного поведения обработчика onClick на select. Фильтрует клики, которые были сделаны по\n * выпадающему списку.\n */\n const onLabelClick = React.useCallback((e: React.MouseEvent<HTMLLabelElement>) => {\n if (scrollBoxRef.current?.contains(e.target as Node)) {\n e.preventDefault();\n }\n }, []);\n\n const onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> = (e) => {\n const newSelectedOptionIndex = findSelectedIndex(\n options,\n e.currentTarget.value,\n allowClearButton,\n );\n\n if (selectedOptionIndex !== newSelectedOptionIndex) {\n if (!isControlledOutside) {\n setSelectedOptionIndex(newSelectedOptionIndex);\n }\n onChange?.(e);\n }\n };\n\n const onInputKeyDown: React.KeyboardEventHandler<HTMLInputElement> = React.useCallback(\n (event) => {\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n areOptionsShown() && focusOption('prev');\n break;\n case 'ArrowDown':\n areOptionsShown() && focusOption('next');\n break;\n case 'Escape':\n close();\n break;\n case 'Enter':\n areOptionsShown() && selectFocused();\n break;\n }\n },\n [areOptionsShown, close, focusOption, selectFocused],\n );\n\n const onInputChange: React.ChangeEventHandler<HTMLInputElement> = React.useCallback(\n (e) => {\n // TODO [>=6]: удалить `onInputChangeProp`.\n if (onInputChangeProp) {\n const options = onInputChangeProp(e, optionsProp);\n if (options) {\n if (process.env.NODE_ENV === 'development') {\n warn(\n 'Этот метод фильтрации устарел. Возвращаемое значение onInputChange будет ' +\n 'проигнорировано в v6.0.0. Для фильтрации обновляйте props.options самостоятельно или используйте свойство filterFn.',\n );\n }\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue, allowClearButton));\n }\n } else {\n const options = filter(optionsProp, e.target.value, filterFn);\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue, allowClearButton));\n }\n setInputValue(e.target.value);\n },\n [filterFn, nativeSelectValue, onInputChangeProp, optionsProp, allowClearButton],\n );\n\n const handleKeyDownSelect = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key.length === 1 && event.key !== ' ') {\n onKeyboardInput(event.key);\n return;\n }\n\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n if (opened) {\n areOptionsShown() && focusOption('prev');\n } else {\n open();\n }\n break;\n case 'ArrowDown':\n if (opened) {\n areOptionsShown() && focusOption('next');\n } else {\n open();\n }\n break;\n case 'Escape':\n close();\n break;\n case 'Enter':\n case 'Spacebar':\n case ' ':\n if (opened) {\n areOptionsShown() && selectFocused();\n } else {\n open();\n }\n break;\n }\n },\n [areOptionsShown, close, focusOption, onKeyboardInput, open, opened, selectFocused],\n );\n\n const handleOptionClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget,\n );\n const option = options[index];\n\n if (option && !option.disabled) {\n selectOption(index);\n }\n },\n [options, selectOption],\n );\n\n const handleOptionHover = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n focusOptionByIndex(\n Array.prototype.indexOf.call(e.currentTarget.parentNode?.children, e.currentTarget),\n false,\n );\n },\n [focusOptionByIndex],\n );\n\n const renderOption = React.useCallback(\n (option: CustomSelectOptionInterface, index: number) => {\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${option.value}`}>\n {renderOptionProp({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: handleOptionDown,\n // Используем `onMouseOver` вместо `onMouseEnter`.\n // При параметре `searchable`, обновляется \"ребёнок\", из-за чего `onMouseEnter` не срабатывает в следующих кейсах:\n // 1. До загрузки выпадающего списка, курсор мышки находится над произвольным элементом этого списка.\n // > Лечение: только увод курсора мыши и возвращении его обратно вызывает событие `onMouseEnter` на этот элемент.\n // 2. Если это тач-устройство.\n // > Лечение: нужно нажать на какой-нибудь произвольный элемент списка, после чего `onMouseEnter` будет работать на соседние элементы,\n // но не на тот, на который нажали в первый раз.\n // Более подробно по ссылке https://github.com/facebook/react/issues/13956#issuecomment-1082055744\n onMouseOver: handleOptionHover,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionIndex,\n handleOptionClick,\n handleOptionHover,\n renderOptionProp,\n selectedOptionIndex,\n ],\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n options?.length > 0 ? (\n options.map(renderOption)\n ) : (\n <Footnote className={styles['CustomSelect__empty']}>{emptyText}</Footnote>\n );\n\n if (typeof renderDropdown === 'function') {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, options, renderDropdown, renderOption]);\n\n const controlledValueSet = isControlledOutside && props.value !== '';\n const uncontrolledValueSet = !isControlledOutside && nativeSelectValue !== '';\n const clearButtonShown =\n allowClearButton && !opened && (controlledValueSet || uncontrolledValueSet);\n\n const clearButton = React.useMemo(() => {\n if (!clearButtonShown) {\n return null;\n }\n\n return (\n <ClearButton\n className={iconProp === undefined ? styles['CustomSelect--clear-icon'] : undefined}\n onClick={() => setNativeSelectValue('')}\n />\n );\n }, [clearButtonShown, ClearButton, iconProp]);\n\n const icon = React.useMemo(() => {\n if (iconProp !== undefined) {\n return iconProp;\n }\n\n return (\n <DropdownIcon\n className={clearButtonShown ? styles['CustomSelect__dropdown-icon'] : undefined}\n opened={opened}\n />\n );\n }, [clearButtonShown, iconProp, opened]);\n\n const afterIcons = (icon || clearButtonShown) && (\n <React.Fragment>\n {clearButton}\n {icon}\n </React.Fragment>\n );\n\n return (\n <label\n className={classNames(\n styles['CustomSelect'],\n sizeY !== SizeType.REGULAR && sizeYClassNames[sizeY],\n className,\n )}\n style={style}\n ref={handleRootRef}\n onClick={onLabelClick}\n >\n {opened && searchable ? (\n <Input\n {...restProps}\n autoFocus\n onBlur={onBlur}\n className={openedClassNames}\n value={inputValue}\n onKeyDown={onInputKeyDown}\n onChange={onInputChange}\n // TODO Ожидается, что клик поймает нативный select, но его перехватывает Input. К сожалению, это приводит к конфликтам типизации.\n // TODO Нужно перестать пытаться превратить CustomSelect в select. Тогда эта проблема уйдёт.\n // @ts-expect-error: TS2322 MouseEventHandler<HTMLSelectElement> !== MouseEventHandler<HTMLInputElement>\n onClick={props.onClick}\n before={before}\n after={afterIcons}\n mode={getFormFieldModeFromSelectType(selectType)}\n />\n ) : (\n <SelectMimicry\n {...restProps}\n aria-hidden\n onClick={onClick}\n onKeyDown={handleKeyDownSelect}\n onKeyUp={handleKeyUp}\n onFocus={onFocus}\n onBlur={onBlur}\n className={openedClassNames}\n before={before}\n after={afterIcons}\n selectType={selectType}\n >\n {selected?.label}\n </SelectMimicry>\n )}\n <select\n ref={selectElRef}\n name={name}\n onChange={onNativeSelectChange}\n onBlur={props.onBlur}\n onFocus={props.onFocus}\n onClick={props.onClick}\n value={nativeSelectValue}\n aria-hidden\n className={styles['CustomSelect__control']}\n >\n {allowClearButton && <option key=\"\" value=\"\" />}\n {optionsProp.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popupDirection}\n scrollBoxRef={setScrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetFocusedOption}\n fetching={fetching}\n offsetDistance={dropdownOffsetDistance}\n sameWidth={fixDropdownWidth}\n forcePortal={forceDropdownPortal}\n autoHideScrollbar={autoHideScrollbar}\n autoHideScrollbarDelay={autoHideScrollbarDelay}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </label>\n );\n}\n"],"names":["CustomSelect","sizeYClassNames","none","SizeType","COMPACT","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","warnOnce","checkOptionsValueType","Set","map","item","value","size","defaultRenderOptionFn","props","CustomSelectOption","handleOptionDown","e","preventDefault","findSelectedIndex","withClear","Number","filter","inputValue","filterFn","defaultOptions","React","useState","opened","setOpened","before","name","className","getRef","getRootRef","popupDirection","style","onChange","children","onInputChange","onInputChangeProp","renderDropdown","onOpen","onClose","fetching","forceDropdownPortal","selectType","autoHideScrollbar","autoHideScrollbarDelay","searchable","renderOptionProp","renderOption","optionsProp","emptyText","defaultFilterFn","icon","iconProp","ClearButton","CustomSelectClearButton","allowClearButton","dropdownOffsetDistance","fixDropdownWidth","restProps","process","env","NODE_ENV","useAdaptivity","sizeY","containerRef","useRef","handleRootRef","useExternRef","scrollBoxRef","selectElRef","focusedOptionIndex","setFocusedOptionIndex","undefined","isControlledOutside","setIsControlledOutside","setInputValue","defaultValue","nativeSelectValue","setNativeSelectValue","keyboardInput","setKeyboardInput","popperPlacement","setPopperPlacement","setOptions","selectedOptionIndex","setSelectedOptionIndex","useEffect","useIsomorphicLayoutEffect","some","event","Event","bubbles","current","dispatchEvent","selected","useMemo","openedClassNames","includes","resetKeyboardInput","useCallback","scrollToElement","index","center","dropdown","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","isValidIndex","focusOptionByIndex","scrollTo","areOptionsShown","setScrollBoxRef","ref","onKeyboardInput","key","fullInput","optionIndex","getTitleFromChildren","label","toLowerCase","close","selectOption","shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync","selectFocused","open","onBlur","resetFocusedOption","onFocus","onClick","handleKeyUp","debounce","focusOption","type","nextIndex","beforeIndex","updateOptionsAndSelectedOptionIndex","onLabelClick","contains","target","onNativeSelectChange","newSelectedOptionIndex","currentTarget","onInputKeyDown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","handleOptionHover","hovered","Fragment","onMouseDown","onMouseOver","resolvedContent","defaultDropdownContent","Footnote","controlledValueSet","uncontrolledValueSet","clearButtonShown","clearButton","DropdownIcon","afterIcons","classNames","REGULAR","Input","autoFocus","onKeyDown","after","mode","getFormFieldModeFromSelectType","SelectMimicry","aria-hidden","onKeyUp","select","CustomSelectDropdown","targetRef","placement","onPlacementChange","onMouseLeave","offsetDistance","sameWidth","forcePortal"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { SizeType } from '../../lib/adaptivity';\nimport type { PlacementWithAuto } from '../../lib/floating';\nimport { defaultFilterFn, getFormFieldModeFromSelectType } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { debounce, getTitleFromChildren } from '../../lib/utils';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { TrackerOptionsProps } from '../CustomScrollView/useTrackerVisibility';\nimport { CustomSelectDropdown } from '../CustomSelectDropdown/CustomSelectDropdown';\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { FormFieldProps } from '../FormField/FormField';\nimport { Input } from '../Input/Input';\nimport { NativeSelectProps } from '../NativeSelect/NativeSelect';\nimport { SelectType } from '../Select/Select';\nimport { SelectMimicry } from '../SelectMimicry/SelectMimicry';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { CustomSelectClearButton, CustomSelectClearButtonProps } from './CustomSelectClearButton';\nimport styles from './CustomSelect.module.css';\n\nconst sizeYClassNames = {\n none: styles['CustomSelect--sizeY-none'],\n [SizeType.COMPACT]: styles['CustomSelect--sizeY-compact'],\n};\n\nconst findIndexAfter = (options: CustomSelectOptionInterface[] = [], startIndex = -1) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (\n options: CustomSelectOptionInterface[] = [],\n endIndex: number = options.length,\n) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nconst warn = warnOnce('CustomSelect');\n\nconst checkOptionsValueType = (options: CustomSelectOptionInterface[]) => {\n if (new Set(options.map((item) => typeof item.value)).size > 1) {\n warn(\n 'Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.',\n 'error',\n );\n }\n};\n\nfunction defaultRenderOptionFn({ option, ...props }: CustomSelectOptionProps): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nconst handleOptionDown: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n};\n\nfunction findSelectedIndex(\n options: CustomSelectOptionInterface[],\n value: SelectValue,\n withClear: boolean,\n) {\n if (withClear && value === '') {\n return -1;\n }\n return (\n options.findIndex((item) => {\n value = typeof item.value === 'number' ? Number(value) : value;\n return item.value === value;\n }) ?? -1\n );\n}\n\nconst filter = (\n options: SelectProps['options'],\n inputValue: string,\n filterFn: SelectProps['filterFn'],\n) => {\n return typeof filterFn === 'function'\n ? options.filter((option) => filterFn(inputValue, option))\n : options;\n};\n\nconst defaultOptions: CustomSelectOptionInterface[] = [];\n\ntype SelectValue = React.SelectHTMLAttributes<HTMLSelectElement>['value'];\n\nexport interface CustomSelectOptionInterface {\n value: SelectValue;\n label: React.ReactElement | string;\n disabled?: boolean;\n [index: string]: any;\n}\n\ninterface CustomSelectRenderOption extends CustomSelectOptionProps {\n option: CustomSelectOptionInterface;\n}\n\nexport interface SelectProps extends NativeSelectProps, FormFieldProps, TrackerOptionsProps {\n /**\n * Если `true`, то при клике на селект в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n /**\n * > ⚠️ В **v6** из возвращаемых типов будет удалён `CustomSelectOptionInterface[]`. Для кастомной фильтрации используйте\n * > `filterFn`.\n */\n onInputChange?: (\n e: React.ChangeEvent,\n options: CustomSelectOptionInterface[],\n ) => void | CustomSelectOptionInterface[];\n options: CustomSelectOptionInterface[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?:\n | false\n | ((\n value: string,\n option: CustomSelectOptionInterface,\n getOptionLabel?: (option: Partial<CustomSelectOptionInterface>) => string,\n ) => boolean);\n popupDirection?: 'top' | 'bottom';\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkcom.github.io/VKUI/#/CustomSelectOption?id=props)\n *\n * > ⚠️ Важно: cвойство опции `disabled` должно выставляться только через проп `options`.\n * > Запрещается выставлять `disabled` проп опциям в обход `options`, иначе селект не будет знать об актуальном состоянии\n * опции.\n */\n renderOption?: (props: CustomSelectRenderOption) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Если `true`, то в дропдауне вместо списка опций рисуется спиннер. При переданных `renderDropdown` и `fetching: true`\n * \"победит\" `renderDropdown`.\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n /**\n * Кастомная кнопка для очистки значения.\n * Должна принимать обязательное свойство `onClick`\n */\n ClearButton?: React.ComponentType<CustomSelectClearButtonProps>;\n /**\n * Если `true`, то справа будет отображаться кнопка для очистки значения\n */\n allowClearButton?: boolean;\n dropdownOffsetDistance?: number;\n fixDropdownWidth?: boolean;\n forceDropdownPortal?: boolean;\n selectType?: SelectType;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport function CustomSelect(props: SelectProps) {\n const [opened, setOpened] = React.useState(false);\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection,\n style,\n onChange,\n children,\n onInputChange: onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n selectType = 'default',\n autoHideScrollbar,\n autoHideScrollbarDelay,\n searchable = false,\n renderOption: renderOptionProp = defaultRenderOptionFn,\n options: optionsProp = defaultOptions,\n emptyText = 'Ничего не найдено',\n filterFn = defaultFilterFn,\n icon: iconProp,\n ClearButton = CustomSelectClearButton,\n allowClearButton = false,\n dropdownOffsetDistance = 0,\n fixDropdownWidth = true,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(optionsProp);\n }\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const containerRef = React.useRef<HTMLLabelElement>(null);\n const handleRootRef = useExternRef(containerRef, getRootRef);\n const scrollBoxRef = React.useRef<HTMLDivElement | null>(null);\n const selectElRef = useExternRef(getRef);\n\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<number | undefined>(-1);\n const [isControlledOutside, setIsControlledOutside] = React.useState(props.value !== undefined);\n const [inputValue, setInputValue] = React.useState('');\n const [nativeSelectValue, setNativeSelectValue] = React.useState(\n () => props.value ?? props.defaultValue ?? (allowClearButton ? '' : undefined),\n );\n const [keyboardInput, setKeyboardInput] = React.useState('');\n const [popperPlacement, setPopperPlacement] = React.useState<PlacementWithAuto | undefined>(\n undefined,\n );\n const [options, setOptions] = React.useState(optionsProp);\n const [selectedOptionIndex, setSelectedOptionIndex] = React.useState<number | undefined>(\n findSelectedIndex(optionsProp, props.value ?? props.defaultValue, allowClearButton),\n );\n\n React.useEffect(() => {\n setIsControlledOutside(props.value !== undefined);\n setNativeSelectValue((nativeSelectValue) => props.value ?? nativeSelectValue);\n }, [props.value]);\n\n useIsomorphicLayoutEffect(() => {\n if (\n options.some(({ value }) => nativeSelectValue === value) ||\n (allowClearButton && nativeSelectValue === '')\n ) {\n const event = new Event('change', { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const selected = React.useMemo(() => {\n if (!options.length) {\n return null;\n }\n\n return selectedOptionIndex !== undefined ? options[selectedOptionIndex] : undefined;\n }, [options, selectedOptionIndex]);\n\n const openedClassNames = React.useMemo(\n () =>\n (opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement?.includes('top')\n ? styles['CustomSelect--pop-up']\n : styles['CustomSelect--pop-down'])) ||\n undefined,\n [dropdownOffsetDistance, opened, popperPlacement],\n );\n\n const resetKeyboardInput = React.useCallback(() => {\n setKeyboardInput('');\n }, []);\n\n const scrollToElement = React.useCallback((index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const item = dropdown ? (dropdown.children[index] as HTMLElement) : null;\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 isValidIndex = React.useCallback(\n (index: number) => {\n return index >= 0 && index < (options.length ?? 0);\n },\n [options.length],\n );\n\n const focusOptionByIndex = React.useCallback(\n (index: number | undefined, scrollTo = true) => {\n if (index === undefined || index < 0 || index > (options.length ?? 0) - 1) {\n return;\n }\n\n const option = options[index];\n\n if (option?.disabled) {\n return;\n }\n\n if (scrollTo) {\n scrollToElement(index);\n }\n\n // Это оптимизация, прежде всего, под `onMouseOver`\n setFocusedOptionIndex((focusedOptionIndex) =>\n focusedOptionIndex !== index ? index : focusedOptionIndex,\n );\n },\n [options, scrollToElement],\n );\n\n const areOptionsShown = React.useCallback(() => {\n return scrollBoxRef.current !== null;\n }, []);\n\n const setScrollBoxRef = React.useCallback(\n (ref: HTMLDivElement | null) => {\n scrollBoxRef.current = ref;\n\n if (ref && selectedOptionIndex !== undefined && isValidIndex(selectedOptionIndex)) {\n {\n scrollToElement(selectedOptionIndex, true);\n }\n }\n },\n [isValidIndex, scrollToElement, selectedOptionIndex],\n );\n\n const onKeyboardInput = React.useCallback(\n (key: string) => {\n const fullInput = keyboardInput + key;\n\n const optionIndex = options.findIndex((option) => {\n return getTitleFromChildren(option.label).toLowerCase().includes(fullInput);\n });\n\n if (optionIndex !== undefined && optionIndex > -1) {\n focusOptionByIndex(optionIndex);\n }\n\n setKeyboardInput(fullInput);\n },\n [focusOptionByIndex, keyboardInput, options],\n );\n\n /**\n * Note: сбрасывать `options` через `setOptions(optionsProp)` не нужно.\n * Сброс происходит в одном из эффекте `updateOptionsAndSelectedOptionIndex()`.\n */\n const close = React.useCallback(() => {\n resetKeyboardInput();\n\n setInputValue('');\n setOpened(false);\n setFocusedOptionIndex(-1);\n onClose?.();\n }, [onClose, resetKeyboardInput]);\n\n const selectOption = React.useCallback(\n (index: number) => {\n const item = options[index];\n\n setNativeSelectValue(item?.value);\n close();\n\n const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync =\n isControlledOutside &&\n props.value !== nativeSelectValue &&\n nativeSelectValue === item?.value;\n\n if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) {\n const event = new Event('change', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }\n },\n [close, options, selectElRef, isControlledOutside, props.value, nativeSelectValue],\n );\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionIndex === undefined || !isValidIndex(focusedOptionIndex)) {\n return;\n }\n\n selectOption(focusedOptionIndex);\n }, [focusedOptionIndex, isValidIndex, selectOption]);\n\n const open = React.useCallback(() => {\n setOpened(true);\n setFocusedOptionIndex(selectedOptionIndex);\n\n if (typeof onOpen === 'function') {\n onOpen();\n }\n }, [onOpen, selectedOptionIndex]);\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event('blur');\n selectElRef.current?.dispatchEvent(event);\n }, [close, selectElRef]);\n\n const resetFocusedOption = React.useCallback(() => {\n setFocusedOptionIndex(-1);\n }, []);\n\n const onFocus = React.useCallback(() => {\n const event = new Event('focus');\n selectElRef.current?.dispatchEvent(event);\n }, [selectElRef]);\n\n const onClick = React.useCallback(() => {\n if (opened) {\n close();\n } else {\n open();\n }\n }, [close, open, opened]);\n\n const handleKeyUp = React.useMemo(() => debounce(resetKeyboardInput, 1000), [resetKeyboardInput]);\n\n const focusOption = React.useCallback(\n (type: 'next' | 'prev') => {\n let index = focusedOptionIndex;\n\n if (type === 'next') {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === 'prev') {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index);\n },\n [focusOptionByIndex, focusedOptionIndex, options],\n );\n\n React.useEffect(\n function updateOptionsAndSelectedOptionIndex() {\n const value = props.value ?? nativeSelectValue ?? props.defaultValue;\n\n const options =\n searchable && inputValue !== undefined\n ? filter(optionsProp, inputValue, filterFn)\n : optionsProp;\n\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, value, allowClearButton));\n },\n [\n filterFn,\n inputValue,\n nativeSelectValue,\n optionsProp,\n props.defaultValue,\n props.value,\n searchable,\n allowClearButton,\n ],\n );\n\n /**\n * Нужен для правильного поведения обработчика onClick на select. Фильтрует клики, которые были сделаны по\n * выпадающему списку.\n */\n const onLabelClick = React.useCallback((e: React.MouseEvent<HTMLLabelElement>) => {\n if (scrollBoxRef.current?.contains(e.target as Node)) {\n e.preventDefault();\n }\n }, []);\n\n const onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> = (e) => {\n const newSelectedOptionIndex = findSelectedIndex(\n options,\n e.currentTarget.value,\n allowClearButton,\n );\n\n if (selectedOptionIndex !== newSelectedOptionIndex) {\n if (!isControlledOutside) {\n setSelectedOptionIndex(newSelectedOptionIndex);\n }\n onChange?.(e);\n }\n };\n\n const onInputKeyDown: React.KeyboardEventHandler<HTMLInputElement> = React.useCallback(\n (event) => {\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n areOptionsShown() && focusOption('prev');\n break;\n case 'ArrowDown':\n areOptionsShown() && focusOption('next');\n break;\n case 'Escape':\n close();\n break;\n case 'Enter':\n areOptionsShown() && selectFocused();\n break;\n }\n },\n [areOptionsShown, close, focusOption, selectFocused],\n );\n\n const onInputChange: React.ChangeEventHandler<HTMLInputElement> = React.useCallback(\n (e) => {\n // TODO [>=6]: удалить `onInputChangeProp`.\n if (onInputChangeProp) {\n const options = onInputChangeProp(e, optionsProp);\n if (options) {\n if (process.env.NODE_ENV === 'development') {\n warn(\n 'Этот метод фильтрации устарел. Возвращаемое значение onInputChange будет ' +\n 'проигнорировано в v6.0.0. Для фильтрации обновляйте props.options самостоятельно или используйте свойство filterFn.',\n );\n }\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue, allowClearButton));\n }\n } else {\n const options = filter(optionsProp, e.target.value, filterFn);\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue, allowClearButton));\n }\n setInputValue(e.target.value);\n },\n [filterFn, nativeSelectValue, onInputChangeProp, optionsProp, allowClearButton],\n );\n\n const handleKeyDownSelect = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key.length === 1 && event.key !== ' ') {\n onKeyboardInput(event.key);\n return;\n }\n\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n if (opened) {\n areOptionsShown() && focusOption('prev');\n } else {\n open();\n }\n break;\n case 'ArrowDown':\n if (opened) {\n areOptionsShown() && focusOption('next');\n } else {\n open();\n }\n break;\n case 'Escape':\n close();\n break;\n case 'Enter':\n case 'Spacebar':\n case ' ':\n if (opened) {\n areOptionsShown() && selectFocused();\n } else {\n open();\n }\n break;\n }\n },\n [areOptionsShown, close, focusOption, onKeyboardInput, open, opened, selectFocused],\n );\n\n const handleOptionClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget,\n );\n const option = options[index];\n\n if (option && !option.disabled) {\n selectOption(index);\n }\n },\n [options, selectOption],\n );\n\n const handleOptionHover = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n focusOptionByIndex(\n Array.prototype.indexOf.call(e.currentTarget.parentNode?.children, e.currentTarget),\n false,\n );\n },\n [focusOptionByIndex],\n );\n\n const renderOption = React.useCallback(\n (option: CustomSelectOptionInterface, index: number) => {\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${option.value}`}>\n {renderOptionProp({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: handleOptionDown,\n // Используем `onMouseOver` вместо `onMouseEnter`.\n // При параметре `searchable`, обновляется \"ребёнок\", из-за чего `onMouseEnter` не срабатывает в следующих кейсах:\n // 1. До загрузки выпадающего списка, курсор мышки находится над произвольным элементом этого списка.\n // > Лечение: только увод курсора мыши и возвращении его обратно вызывает событие `onMouseEnter` на этот элемент.\n // 2. Если это тач-устройство.\n // > Лечение: нужно нажать на какой-нибудь произвольный элемент списка, после чего `onMouseEnter` будет работать на соседние элементы,\n // но не на тот, на который нажали в первый раз.\n // Более подробно по ссылке https://github.com/facebook/react/issues/13956#issuecomment-1082055744\n onMouseOver: handleOptionHover,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionIndex,\n handleOptionClick,\n handleOptionHover,\n renderOptionProp,\n selectedOptionIndex,\n ],\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n options?.length > 0 ? (\n options.map(renderOption)\n ) : (\n <Footnote className={styles['CustomSelect__empty']}>{emptyText}</Footnote>\n );\n\n if (typeof renderDropdown === 'function') {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, options, renderDropdown, renderOption]);\n\n const controlledValueSet = isControlledOutside && props.value !== '';\n const uncontrolledValueSet = !isControlledOutside && nativeSelectValue !== '';\n const clearButtonShown =\n allowClearButton && !opened && (controlledValueSet || uncontrolledValueSet);\n\n const clearButton = React.useMemo(() => {\n if (!clearButtonShown) {\n return null;\n }\n\n return (\n <ClearButton\n className={iconProp === undefined ? styles['CustomSelect--clear-icon'] : undefined}\n onClick={() => setNativeSelectValue('')}\n />\n );\n }, [clearButtonShown, ClearButton, iconProp]);\n\n const icon = React.useMemo(() => {\n if (iconProp !== undefined) {\n return iconProp;\n }\n\n return (\n <DropdownIcon\n className={clearButtonShown ? styles['CustomSelect__dropdown-icon'] : undefined}\n opened={opened}\n />\n );\n }, [clearButtonShown, iconProp, opened]);\n\n const afterIcons = (icon || clearButtonShown) && (\n <React.Fragment>\n {clearButton}\n {icon}\n </React.Fragment>\n );\n\n return (\n <label\n className={classNames(\n styles['CustomSelect'],\n sizeY !== SizeType.REGULAR && sizeYClassNames[sizeY],\n className,\n )}\n style={style}\n ref={handleRootRef}\n onClick={onLabelClick}\n >\n {opened && searchable ? (\n <Input\n {...restProps}\n autoFocus\n onBlur={onBlur}\n className={openedClassNames}\n value={inputValue}\n onKeyDown={onInputKeyDown}\n onChange={onInputChange}\n // TODO Ожидается, что клик поймает нативный select, но его перехватывает Input. К сожалению, это приводит к конфликтам типизации.\n // TODO Нужно перестать пытаться превратить CustomSelect в select. Тогда эта проблема уйдёт.\n // @ts-expect-error: TS2322 MouseEventHandler<HTMLSelectElement> !== MouseEventHandler<HTMLInputElement>\n onClick={props.onClick}\n before={before}\n after={afterIcons}\n mode={getFormFieldModeFromSelectType(selectType)}\n />\n ) : (\n <SelectMimicry\n {...restProps}\n aria-hidden\n onClick={onClick}\n onKeyDown={handleKeyDownSelect}\n onKeyUp={handleKeyUp}\n onFocus={onFocus}\n onBlur={onBlur}\n className={openedClassNames}\n before={before}\n after={afterIcons}\n selectType={selectType}\n >\n {selected?.label}\n </SelectMimicry>\n )}\n <select\n ref={selectElRef}\n name={name}\n onChange={onNativeSelectChange}\n onBlur={props.onBlur}\n onFocus={props.onFocus}\n onClick={props.onClick}\n value={nativeSelectValue}\n aria-hidden\n className={styles['CustomSelect__control']}\n >\n {allowClearButton && <option key=\"\" value=\"\" />}\n {optionsProp.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popupDirection}\n scrollBoxRef={setScrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetFocusedOption}\n fetching={fetching}\n offsetDistance={dropdownOffsetDistance}\n sameWidth={fixDropdownWidth}\n forcePortal={forceDropdownPortal}\n autoHideScrollbar={autoHideScrollbar}\n autoHideScrollbarDelay={autoHideScrollbarDelay}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </label>\n );\n}\n"],"names":["CustomSelect","sizeYClassNames","none","SizeType","COMPACT","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","warnOnce","checkOptionsValueType","Set","map","item","value","size","defaultRenderOptionFn","props","CustomSelectOption","handleOptionDown","e","preventDefault","findSelectedIndex","withClear","Number","filter","inputValue","filterFn","defaultOptions","React","useState","opened","setOpened","before","name","className","getRef","getRootRef","popupDirection","style","onChange","children","onInputChange","onInputChangeProp","renderDropdown","onOpen","onClose","fetching","forceDropdownPortal","selectType","autoHideScrollbar","autoHideScrollbarDelay","searchable","renderOptionProp","renderOption","optionsProp","emptyText","defaultFilterFn","icon","iconProp","ClearButton","CustomSelectClearButton","allowClearButton","dropdownOffsetDistance","fixDropdownWidth","restProps","process","env","NODE_ENV","useAdaptivity","sizeY","containerRef","useRef","handleRootRef","useExternRef","scrollBoxRef","selectElRef","focusedOptionIndex","setFocusedOptionIndex","undefined","isControlledOutside","setIsControlledOutside","setInputValue","defaultValue","nativeSelectValue","setNativeSelectValue","keyboardInput","setKeyboardInput","popperPlacement","setPopperPlacement","setOptions","selectedOptionIndex","setSelectedOptionIndex","useEffect","useIsomorphicLayoutEffect","some","event","Event","bubbles","current","dispatchEvent","selected","useMemo","openedClassNames","includes","resetKeyboardInput","useCallback","scrollToElement","index","center","dropdown","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","isValidIndex","focusOptionByIndex","scrollTo","areOptionsShown","setScrollBoxRef","ref","onKeyboardInput","key","fullInput","optionIndex","getTitleFromChildren","label","toLowerCase","close","selectOption","shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync","selectFocused","open","onBlur","resetFocusedOption","onFocus","onClick","handleKeyUp","debounce","focusOption","type","nextIndex","beforeIndex","updateOptionsAndSelectedOptionIndex","onLabelClick","contains","target","onNativeSelectChange","newSelectedOptionIndex","currentTarget","onInputKeyDown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","handleOptionHover","hovered","Fragment","onMouseDown","onMouseOver","resolvedContent","defaultDropdownContent","Footnote","controlledValueSet","uncontrolledValueSet","clearButtonShown","clearButton","DropdownIcon","afterIcons","classNames","REGULAR","Input","autoFocus","onKeyDown","after","mode","getFormFieldModeFromSelectType","SelectMimicry","aria-hidden","onKeyUp","select","CustomSelectDropdown","targetRef","placement","onPlacementChange","onMouseLeave","offsetDistance","sameWidth","forcePortal"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { HTMLAttributesWithRootRef } from '../../types';
|
|
3
|
-
export interface HeaderProps extends HTMLAttributesWithRootRef<HTMLElement
|
|
2
|
+
import { HasComponent, HTMLAttributesWithRootRef } from '../../types';
|
|
3
|
+
export interface HeaderProps extends HTMLAttributesWithRootRef<HTMLElement>, HasComponent {
|
|
4
4
|
mode?: 'primary' | 'secondary' | 'tertiary';
|
|
5
5
|
size?: 'regular' | 'large';
|
|
6
6
|
subtitle?: React.ReactNode;
|
|
@@ -17,5 +17,5 @@ export interface HeaderProps extends HTMLAttributesWithRootRef<HTMLElement> {
|
|
|
17
17
|
/**
|
|
18
18
|
* @see https://vkcom.github.io/VKUI/#/Header
|
|
19
19
|
*/
|
|
20
|
-
export declare const Header: ({ mode, size, children, subtitle, indicator, aside, multiline, ...restProps }: HeaderProps) => React.JSX.Element;
|
|
20
|
+
export declare const Header: ({ mode, size, Component, children, subtitle, indicator, aside, multiline, ...restProps }: HeaderProps) => React.JSX.Element;
|
|
21
21
|
//# sourceMappingURL=Header.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../../src/components/Header/Header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,
|
|
1
|
+
{"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../../src/components/Header/Header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAStE,MAAM,WAAW,WAAY,SAAQ,yBAAyB,CAAC,WAAW,CAAC,EAAE,YAAY;IACvF,IAAI,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC;IAC5C,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB;;OAEG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AA6CD;;GAEG;AACH,eAAO,MAAM,MAAM,6FAUhB,WAAW,sBAsDb,CAAC"}
|
|
@@ -77,24 +77,23 @@ var stylesMode = {
|
|
|
77
77
|
tertiary: "vkuiHeader--mode-tertiary"
|
|
78
78
|
};
|
|
79
79
|
var Header = function(_param) {
|
|
80
|
-
var _param_mode = _param.mode, mode = _param_mode === void 0 ? "primary" : _param_mode, _param_size = _param.size, size = _param_size === void 0 ? "regular" : _param_size, children = _param.children, subtitle = _param.subtitle, indicator = _param.indicator, aside = _param.aside, multiline = _param.multiline, restProps = _object_without_properties._(_param, [
|
|
80
|
+
var _param_mode = _param.mode, mode = _param_mode === void 0 ? "primary" : _param_mode, _param_size = _param.size, size = _param_size === void 0 ? "regular" : _param_size, _param_Component = _param.Component, Component = _param_Component === void 0 ? "h2" : _param_Component, children = _param.children, subtitle = _param.subtitle, indicator = _param.indicator, aside = _param.aside, multiline = _param.multiline, restProps = _object_without_properties._(_param, [
|
|
81
81
|
"mode",
|
|
82
82
|
"size",
|
|
83
|
+
"Component",
|
|
83
84
|
"children",
|
|
84
85
|
"subtitle",
|
|
85
86
|
"indicator",
|
|
86
87
|
"aside",
|
|
87
88
|
"multiline"
|
|
88
89
|
]);
|
|
89
|
-
return /*#__PURE__*/ _react.createElement(_RootComponent.RootComponent, _object_spread_props._(_object_spread._({
|
|
90
|
-
Component: "header"
|
|
91
|
-
}, restProps), {
|
|
90
|
+
return /*#__PURE__*/ _react.createElement(_RootComponent.RootComponent, _object_spread_props._(_object_spread._({}, restProps), {
|
|
92
91
|
baseClassName: (0, _vkjs.classNames)("vkuiHeader", stylesMode[mode], size === "large" && "vkuiHeader--large", (0, _vkjs.isPrimitiveReactNode)(indicator) && "vkuiHeader--pi", (0, _vkjs.hasReactNode)(subtitle) && "vkuiHeader--with-subtitle")
|
|
93
92
|
}), /*#__PURE__*/ _react.createElement("div", {
|
|
94
93
|
className: "vkuiHeader__main"
|
|
95
94
|
}, /*#__PURE__*/ _react.createElement(HeaderContent, {
|
|
96
95
|
className: "vkuiHeader__content",
|
|
97
|
-
Component:
|
|
96
|
+
Component: Component,
|
|
98
97
|
mode: mode,
|
|
99
98
|
size: size
|
|
100
99
|
}, /*#__PURE__*/ _react.createElement("span", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/Header/Header.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, hasReactNode, isPrimitiveReactNode } from '@vkontakte/vkjs';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { Platform } from '../../lib/platform';\nimport { HasComponent, HTMLAttributesWithRootRef } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { Headline } from '../Typography/Headline/Headline';\nimport { Paragraph } from '../Typography/Paragraph/Paragraph';\nimport { Subhead } from '../Typography/Subhead/Subhead';\nimport { Title } from '../Typography/Title/Title';\nimport styles from './Header.module.css';\n\nexport interface HeaderProps extends HTMLAttributesWithRootRef<HTMLElement
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/Header/Header.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, hasReactNode, isPrimitiveReactNode } from '@vkontakte/vkjs';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { Platform } from '../../lib/platform';\nimport { HasComponent, HTMLAttributesWithRootRef } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { Headline } from '../Typography/Headline/Headline';\nimport { Paragraph } from '../Typography/Paragraph/Paragraph';\nimport { Subhead } from '../Typography/Subhead/Subhead';\nimport { Title } from '../Typography/Title/Title';\nimport styles from './Header.module.css';\n\nexport interface HeaderProps extends HTMLAttributesWithRootRef<HTMLElement>, HasComponent {\n mode?: 'primary' | 'secondary' | 'tertiary';\n size?: 'regular' | 'large';\n subtitle?: React.ReactNode;\n /**\n * Допускаются иконки, текст, Link\n */\n aside?: React.ReactNode;\n /**\n * Допускаются текст, Indicator\n */\n indicator?: React.ReactNode;\n multiline?: boolean;\n}\n\ntype HeaderContentProps = Pick<HeaderProps, 'children' | 'mode' | 'size' | 'className'> &\n HasComponent;\n\nconst HeaderContent = ({ mode, size, ...restProps }: HeaderContentProps) => {\n const isLarge = size === 'large';\n\n const platform = usePlatform();\n if (platform === Platform.IOS) {\n switch (mode) {\n case 'primary':\n return isLarge ? (\n <Title level=\"2\" weight=\"2\" {...restProps} />\n ) : (\n <Title weight=\"1\" level=\"3\" {...restProps} />\n );\n case 'secondary':\n return <Footnote weight=\"1\" caps {...restProps} />;\n case 'tertiary':\n return <Title weight=\"1\" level=\"3\" {...restProps} />;\n }\n }\n\n switch (mode) {\n case 'primary':\n return isLarge ? (\n <Title level=\"2\" weight=\"2\" {...restProps} />\n ) : (\n <Headline weight=\"2\" {...restProps} />\n );\n case 'secondary':\n return <Footnote weight=\"1\" caps {...restProps} />;\n case 'tertiary':\n return <Headline weight=\"2\" {...restProps} />;\n }\n\n return null;\n};\n\nconst stylesMode = {\n primary: styles['Header--mode-primary'],\n secondary: styles['Header--mode-secondary'],\n tertiary: styles['Header--mode-tertiary'],\n};\n/**\n * @see https://vkcom.github.io/VKUI/#/Header\n */\nexport const Header = ({\n mode = 'primary',\n size = 'regular',\n Component = 'h2',\n children,\n subtitle,\n indicator,\n aside,\n multiline,\n ...restProps\n}: HeaderProps) => {\n return (\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n styles['Header'],\n stylesMode[mode],\n size === 'large' && styles['Header--large'],\n isPrimitiveReactNode(indicator) && styles['Header--pi'],\n hasReactNode(subtitle) && styles['Header--with-subtitle'],\n )}\n >\n <div className={styles['Header__main']}>\n <HeaderContent\n className={styles['Header__content']}\n Component={Component}\n mode={mode}\n size={size}\n >\n <span\n className={classNames(\n styles['Header__content-in'],\n multiline && styles['Header__content--multiline'],\n )}\n >\n {children}\n </span>\n {hasReactNode(indicator) && (\n <Footnote className={styles['Header__indicator']} weight=\"2\">\n {indicator}\n </Footnote>\n )}\n </HeaderContent>\n\n {hasReactNode(subtitle) && (\n <Subhead\n className={classNames(\n styles['Header__subtitle'],\n multiline && styles['Header__content--multiline'],\n )}\n Component=\"span\"\n >\n {subtitle}\n </Subhead>\n )}\n </div>\n\n {hasReactNode(aside) && (\n <Paragraph className={styles['Header__aside']} Component=\"span\">\n {aside}\n </Paragraph>\n )}\n </RootComponent>\n );\n};\n"],"names":["Header","HeaderContent","mode","size","restProps","isLarge","platform","usePlatform","Platform","IOS","Title","level","weight","Footnote","caps","Headline","stylesMode","primary","secondary","tertiary","Component","children","subtitle","indicator","aside","multiline","RootComponent","baseClassName","classNames","isPrimitiveReactNode","hasReactNode","div","className","span","Subhead","Paragraph"],"mappings":";;;;+BA0EaA;;;eAAAA;;;;;;;+DA1EU;oBACwC;2BACnC;wBACH;6BAEK;wBACL;wBACA;yBACC;uBACF;qBACF;AAqBtB,IAAMC,gBAAgB;QAAGC,cAAAA,MAAMC,cAAAA,MAASC;QAAfF;QAAMC;;IAC7B,IAAME,UAAUF,SAAS;IAEzB,IAAMG,WAAWC,IAAAA,wBAAW;IAC5B,IAAID,aAAaE,kBAAQ,CAACC,GAAG,EAAE;QAC7B,OAAQP;YACN,KAAK;gBACH,OAAOG,wBACL,qBAACK,YAAK;oBAACC,OAAM;oBAAIC,QAAO;mBAAQR,4BAEhC,qBAACM,YAAK;oBAACE,QAAO;oBAAID,OAAM;mBAAQP;YAEpC,KAAK;gBACH,qBAAO,qBAACS,kBAAQ;oBAACD,QAAO;oBAAIE,MAAAA;mBAASV;YACvC,KAAK;gBACH,qBAAO,qBAACM,YAAK;oBAACE,QAAO;oBAAID,OAAM;mBAAQP;QAC3C;IACF;IAEA,OAAQF;QACN,KAAK;YACH,OAAOG,wBACL,qBAACK,YAAK;gBAACC,OAAM;gBAAIC,QAAO;eAAQR,4BAEhC,qBAACW,kBAAQ;gBAACH,QAAO;eAAQR;QAE7B,KAAK;YACH,qBAAO,qBAACS,kBAAQ;gBAACD,QAAO;gBAAIE,MAAAA;eAASV;QACvC,KAAK;YACH,qBAAO,qBAACW,kBAAQ;gBAACH,QAAO;eAAQR;IACpC;IAEA,OAAO;AACT;AAEA,IAAMY,aAAa;IACjBC,OAAO;IACPC,SAAS;IACTC,QAAQ;AACV;AAIO,IAAMnB,SAAS;6BACpBE,MAAAA,gCAAO,8CACPC,MAAAA,gCAAO,mDACPiB,WAAAA,0CAAY,yBACZC,kBAAAA,UACAC,kBAAAA,UACAC,mBAAAA,WACAC,eAAAA,OACAC,mBAAAA,WACGrB;QARHF;QACAC;QACAiB;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,qBACE,qBAACC,4BAAa,8CACRtB;QACJuB,eAAeC,IAAAA,gBAAU,gBAEvBZ,UAAU,CAACd,KAAK,EAChBC,SAAS,gCACT0B,IAAAA,0BAAoB,EAACN,gCACrBO,IAAAA,kBAAY,EAACR;sBAGf,qBAACS;QAAIC,SAAS;qBACZ,qBAAC/B;QACC+B,SAAS;QACTZ,WAAWA;QACXlB,MAAMA;QACNC,MAAMA;qBAEN,qBAAC8B;QACCD,WAAWJ,IAAAA,gBAAU,4BAEnBH;OAGDJ,WAEFS,IAAAA,kBAAY,EAACP,4BACZ,qBAACV,kBAAQ;QAACmB,SAAS;QAA+BpB,QAAO;OACtDW,aAKNO,IAAAA,kBAAY,EAACR,2BACZ,qBAACY,gBAAO;QACNF,WAAWJ,IAAAA,gBAAU,0BAEnBH;QAEFL,WAAU;OAETE,YAKNQ,IAAAA,kBAAY,EAACN,wBACZ,qBAACW,oBAAS;QAACH,SAAS;QAA2BZ,WAAU;OACtDI;AAKX"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HorizontalScroll.d.ts","sourceRoot":"","sources":["../../../../src/components/HorizontalScroll/HorizontalScroll.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EAAE,MAAM,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAqBhE,MAAM,MAAM,qBAAqB,GAAG,CAAC,eAAe,EAAE,MAAM,KAAK,MAAM,CAAC;AAExE,MAAM,WAAW,qBACf,SAAQ,yBAAyB,CAAC,cAAc,CAAC,EAC/C,MAAM,CAAC,cAAc,CAAC;IACxB;;OAEG;IACH,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACxC;;OAEG;IACH,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC,SAAS,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;IACtB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,UAAU,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAChC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AA2GD;;GAEG;AACH,eAAO,MAAM,gBAAgB,0JAW1B,qBAAqB,
|
|
1
|
+
{"version":3,"file":"HorizontalScroll.d.ts","sourceRoot":"","sources":["../../../../src/components/HorizontalScroll/HorizontalScroll.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EAAE,MAAM,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAqBhE,MAAM,MAAM,qBAAqB,GAAG,CAAC,eAAe,EAAE,MAAM,KAAK,MAAM,CAAC;AAExE,MAAM,WAAW,qBACf,SAAQ,yBAAyB,CAAC,cAAc,CAAC,EAC/C,MAAM,CAAC,cAAc,CAAC;IACxB;;OAEG;IACH,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACxC;;OAEG;IACH,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC,SAAS,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;IACtB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,UAAU,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAChC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AA2GD;;GAEG;AACH,eAAO,MAAM,gBAAgB,0JAW1B,qBAAqB,sBAmJvB,CAAC"}
|
|
@@ -222,15 +222,19 @@ var HorizontalScroll = function(_param) {
|
|
|
222
222
|
baseClassName: (0, _vkjs.classNames)("vkuiHorizontalScroll", "vkuiInternalHorizontalScroll", showArrows === "always" && "vkuiHorizontalScroll--withConstArrows"),
|
|
223
223
|
onMouseEnter: calculateArrowsVisibility
|
|
224
224
|
}), showArrows && (hasPointer || hasPointer === undefined) && canScrollLeft && /*#__PURE__*/ _react.createElement(_ScrollArrow.ScrollArrow, {
|
|
225
|
+
"data-testid": process.env.NODE_ENV === "test" ? "ScrollArrow" : undefined,
|
|
225
226
|
size: arrowSize,
|
|
226
227
|
offsetY: arrowOffsetY,
|
|
227
228
|
direction: "left",
|
|
229
|
+
"aria-hidden": true,
|
|
228
230
|
className: (0, _vkjs.classNames)("vkuiHorizontalScroll__arrow", "vkuiHorizontalScroll__arrowLeft"),
|
|
229
231
|
onClick: scrollToLeft
|
|
230
232
|
}), showArrows && (hasPointer || hasPointer === undefined) && canScrollRight && /*#__PURE__*/ _react.createElement(_ScrollArrow.ScrollArrow, {
|
|
233
|
+
"data-testid": process.env.NODE_ENV === "test" ? "ScrollArrow" : undefined,
|
|
231
234
|
size: arrowSize,
|
|
232
235
|
offsetY: arrowOffsetY,
|
|
233
236
|
direction: "right",
|
|
237
|
+
"aria-hidden": true,
|
|
234
238
|
className: (0, _vkjs.classNames)("vkuiHorizontalScroll__arrow", "vkuiHorizontalScroll__arrowRight"),
|
|
235
239
|
onClick: scrollToRight
|
|
236
240
|
}), /*#__PURE__*/ _react.createElement("div", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/HorizontalScroll/HorizontalScroll.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { useAdaptivityHasPointer } from '../../hooks/useAdaptivityHasPointer';\nimport { useDirection } from '../../hooks/useDirection';\nimport { useEventListener } from '../../hooks/useEventListener';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { easeInOutSine } from '../../lib/fx';\nimport { HasRef, HTMLAttributesWithRootRef } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { ScrollArrow } from '../ScrollArrow/ScrollArrow';\nimport styles from './HorizontalScroll.module.css';\n\ninterface ScrollContext {\n scrollElement: HTMLElement | null;\n scrollAnimationDuration: number;\n animationQueue: VoidFunction[];\n getScrollPosition: (currentPosition: number) => number;\n onScrollToEndBorder: VoidFunction;\n onScrollEnd: VoidFunction;\n onScrollStart: VoidFunction;\n /**\n * Начальная ширина прокрутки.\n * В некоторых случаях может отличаться от текущей ширины прокрутки из-за transforms: translate\n */\n initialScrollWidth: number;\n textDirection: 'ltr' | 'rtl';\n}\n\nexport type ScrollPositionHandler = (currentPosition: number) => number;\n\nexport interface HorizontalScrollProps\n extends HTMLAttributesWithRootRef<HTMLDivElement>,\n HasRef<HTMLDivElement> {\n /**\n * Функция для расчета величины прокрутки при клике на левую стрелку.\n */\n getScrollToLeft?: ScrollPositionHandler;\n /**\n * Функция для расчета величины прокрутки при клике на правую стрелку.\n */\n getScrollToRight?: ScrollPositionHandler;\n arrowSize?: 'm' | 'l';\n /**\n * Смещает иконки кнопок навигации по вертикали.\n */\n arrowOffsetY?: number | string;\n showArrows?: boolean | 'always';\n scrollAnimationDuration?: number;\n /**\n * Добавляет возможность прокручивать контент на любое колесо мыши.\n * По умолчанию прокручивается как любой горизонтальный контент через shift.\n */\n scrollOnAnyWheel?: boolean;\n}\n\n/**\n * timing method\n */\nfunction now() {\n return performance && performance.now ? performance.now() : Date.now();\n}\n\n/**\n * Округление к большему по модулю\n *\n * ## Пример\n *\n * ```ts\n * import { strict as assert } from 'node:assert';\n *\n * assert.equal(roundingAwayFromZero(5.1), 6)\n * assert.equal(roundingAwayFromZero(-5.1), -6)\n * ```\n */\nfunction roundingAwayFromZero(value: number): number {\n return value > 0 ? Math.ceil(value) : Math.floor(value);\n}\n\n/**\n * Округляем el.scrollLeft\n * https://github.com/VKCOM/VKUI/pull/2445\n */\nconst roundUpElementScrollLeft = (el: HTMLElement) => roundingAwayFromZero(el.scrollLeft);\n\n/**\n * Код анимации скрола, на основе полифила: https://github.com/iamdustan/smoothscroll\n * Константа взята из полифила (468), на дизайн-ревью уточнили до 250\n * @var {number} SCROLL_ONE_FRAME_TIME время анимации скролла\n */\nconst SCROLL_ONE_FRAME_TIME = 250;\n\nfunction doScroll({\n scrollElement,\n getScrollPosition,\n animationQueue,\n onScrollToEndBorder,\n onScrollEnd,\n onScrollStart,\n initialScrollWidth,\n scrollAnimationDuration = SCROLL_ONE_FRAME_TIME,\n textDirection,\n}: ScrollContext) {\n if (!scrollElement || !getScrollPosition) {\n return;\n }\n\n /**\n * крайнее значение сдвига\n */\n const extremeScrollLeft =\n (textDirection === 'ltr' ? 1 : -1) * (initialScrollWidth - scrollElement.offsetWidth);\n\n let startScrollLeft = roundUpElementScrollLeft(scrollElement);\n let endScrollLeft = getScrollPosition(startScrollLeft);\n\n onScrollStart();\n\n /**\n * Если окончание прокрутки вышло за ноль\n */\n if (startScrollLeft * endScrollLeft < 0) {\n endScrollLeft = 0;\n }\n\n if (Math.abs(endScrollLeft) >= Math.abs(extremeScrollLeft)) {\n onScrollToEndBorder();\n endScrollLeft = extremeScrollLeft;\n }\n\n const startTime = now();\n\n (function scroll() {\n if (!scrollElement) {\n onScrollEnd();\n return;\n }\n\n const time = now();\n const elapsed = Math.min((time - startTime) / scrollAnimationDuration, 1);\n\n const value = easeInOutSine(elapsed);\n\n const currentScrollLeft = startScrollLeft + (endScrollLeft - startScrollLeft) * value;\n scrollElement.scrollLeft = roundingAwayFromZero(currentScrollLeft);\n\n const scrollEnd =\n textDirection === 'ltr' ? Math.max(0, endScrollLeft) : Math.min(0, endScrollLeft);\n if (roundUpElementScrollLeft(scrollElement) !== scrollEnd && elapsed !== 1) {\n requestAnimationFrame(scroll);\n return;\n }\n\n onScrollEnd();\n animationQueue.shift();\n if (animationQueue.length > 0) {\n animationQueue[0]();\n }\n })();\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/HorizontalScroll\n */\nexport const HorizontalScroll = ({\n children,\n getScrollToLeft,\n getScrollToRight,\n showArrows = true,\n arrowSize = 'l',\n arrowOffsetY,\n scrollAnimationDuration = SCROLL_ONE_FRAME_TIME,\n getRef,\n scrollOnAnyWheel = false,\n ...restProps\n}: HorizontalScrollProps) => {\n const [canScrollLeft, setCanScrollLeft] = React.useState(false);\n const [canScrollRight, setCanScrollRight] = React.useState(false);\n const [directionRef, textDirection = 'ltr'] = useDirection<HTMLDivElement>();\n\n const setCanScrollStart = textDirection === 'ltr' ? setCanScrollLeft : setCanScrollRight;\n const setCanScrollEnd = textDirection === 'ltr' ? setCanScrollRight : setCanScrollLeft;\n\n const isCustomScrollingRef = React.useRef(false);\n\n const scrollerRef = useExternRef(getRef, directionRef);\n\n const animationQueue = React.useRef<VoidFunction[]>([]);\n\n const hasPointer = useAdaptivityHasPointer();\n\n const scrollTo = React.useCallback(\n (getScrollPosition: ScrollPositionHandler) => {\n const scrollElement = scrollerRef.current;\n\n animationQueue.current.push(() =>\n doScroll({\n scrollElement,\n getScrollPosition,\n animationQueue: animationQueue.current,\n onScrollToEndBorder: () => setCanScrollEnd(false),\n onScrollEnd: () => (isCustomScrollingRef.current = false),\n onScrollStart: () => (isCustomScrollingRef.current = true),\n initialScrollWidth: scrollElement?.firstElementChild?.scrollWidth || 0,\n scrollAnimationDuration,\n textDirection,\n }),\n );\n if (animationQueue.current.length === 1) {\n animationQueue.current[0]();\n }\n },\n [scrollerRef, scrollAnimationDuration, textDirection, setCanScrollEnd],\n );\n\n const scrollToLeft = React.useCallback(() => {\n const getScrollPosition =\n getScrollToLeft ?? ((i: number) => i - scrollerRef.current!.offsetWidth);\n scrollTo(getScrollPosition);\n }, [getScrollToLeft, scrollTo, scrollerRef]);\n\n const scrollToRight = React.useCallback(() => {\n const getScrollPosition =\n getScrollToRight ?? ((i: number) => i + scrollerRef.current!.offsetWidth);\n scrollTo(getScrollPosition);\n }, [getScrollToRight, scrollTo, scrollerRef]);\n\n const calculateArrowsVisibility = React.useCallback(() => {\n if (showArrows && hasPointer && scrollerRef.current && !isCustomScrollingRef.current) {\n const scrollElement = scrollerRef.current;\n\n setCanScrollStart(scrollElement.scrollLeft !== 0);\n setCanScrollEnd(\n Math.abs(roundUpElementScrollLeft(scrollElement)) + scrollElement.offsetWidth <\n scrollElement.scrollWidth,\n );\n }\n }, [showArrows, hasPointer, scrollerRef, setCanScrollStart, setCanScrollEnd]);\n\n const scrollEvent = useEventListener('scroll', calculateArrowsVisibility);\n React.useEffect(\n function addScrollerRefToScrollEvent() {\n if (!scrollerRef.current) {\n return noop;\n }\n\n scrollEvent.add(scrollerRef.current);\n return scrollEvent.remove;\n },\n [scrollEvent, scrollerRef],\n );\n\n React.useEffect(calculateArrowsVisibility, [calculateArrowsVisibility, children]);\n\n /**\n * Прокрутка с помощью любого колеса мыши\n */\n const onwheel = React.useCallback(\n (e: WheelEvent) => {\n scrollerRef.current!.scrollBy({ left: e.deltaX + e.deltaY, behavior: 'auto' });\n e.preventDefault();\n },\n [scrollerRef],\n );\n\n const wheelEvent = useEventListener('wheel', onwheel);\n React.useEffect(\n function addScrollerRefToWheelEvent() {\n if (!scrollerRef.current || !scrollOnAnyWheel) {\n return noop;\n }\n\n wheelEvent.add(scrollerRef.current);\n\n return wheelEvent.remove;\n },\n [wheelEvent, scrollerRef, scrollOnAnyWheel],\n );\n\n return (\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n styles['HorizontalScroll'],\n 'vkuiInternalHorizontalScroll',\n showArrows === 'always' && styles['HorizontalScroll--withConstArrows'],\n )}\n onMouseEnter={calculateArrowsVisibility}\n >\n {showArrows && (hasPointer || hasPointer === undefined) && canScrollLeft && (\n <ScrollArrow\n size={arrowSize}\n offsetY={arrowOffsetY}\n direction=\"left\"\n className={classNames(\n styles['HorizontalScroll__arrow'],\n styles['HorizontalScroll__arrowLeft'],\n )}\n onClick={scrollToLeft}\n />\n )}\n {showArrows && (hasPointer || hasPointer === undefined) && canScrollRight && (\n <ScrollArrow\n size={arrowSize}\n offsetY={arrowOffsetY}\n direction=\"right\"\n className={classNames(\n styles['HorizontalScroll__arrow'],\n styles['HorizontalScroll__arrowRight'],\n )}\n onClick={scrollToRight}\n />\n )}\n <div className={styles['HorizontalScroll__in']} ref={scrollerRef}>\n <div className={styles['HorizontalScroll__in-wrapper']}>{children}</div>\n </div>\n </RootComponent>\n );\n};\n"],"names":["HorizontalScroll","now","performance","Date","roundingAwayFromZero","value","Math","ceil","floor","roundUpElementScrollLeft","el","scrollLeft","SCROLL_ONE_FRAME_TIME","doScroll","scrollElement","getScrollPosition","animationQueue","onScrollToEndBorder","onScrollEnd","onScrollStart","initialScrollWidth","scrollAnimationDuration","textDirection","extremeScrollLeft","offsetWidth","startScrollLeft","endScrollLeft","abs","startTime","scroll","time","elapsed","min","easeInOutSine","currentScrollLeft","scrollEnd","max","requestAnimationFrame","shift","length","children","getScrollToLeft","getScrollToRight","showArrows","arrowSize","arrowOffsetY","getRef","scrollOnAnyWheel","restProps","React","useState","canScrollLeft","setCanScrollLeft","canScrollRight","setCanScrollRight","useDirection","directionRef","setCanScrollStart","setCanScrollEnd","isCustomScrollingRef","useRef","scrollerRef","useExternRef","hasPointer","useAdaptivityHasPointer","scrollTo","useCallback","current","push","firstElementChild","scrollWidth","scrollToLeft","i","scrollToRight","calculateArrowsVisibility","scrollEvent","useEventListener","useEffect","addScrollerRefToScrollEvent","noop","add","remove","onwheel","e","scrollBy","left","deltaX","deltaY","behavior","preventDefault","wheelEvent","addScrollerRefToWheelEvent","RootComponent","baseClassName","classNames","onMouseEnter","undefined","ScrollArrow","size","offsetY","direction","className","onClick","div","ref"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/HorizontalScroll/HorizontalScroll.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { useAdaptivityHasPointer } from '../../hooks/useAdaptivityHasPointer';\nimport { useDirection } from '../../hooks/useDirection';\nimport { useEventListener } from '../../hooks/useEventListener';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { easeInOutSine } from '../../lib/fx';\nimport { HasRef, HTMLAttributesWithRootRef } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { ScrollArrow } from '../ScrollArrow/ScrollArrow';\nimport styles from './HorizontalScroll.module.css';\n\ninterface ScrollContext {\n scrollElement: HTMLElement | null;\n scrollAnimationDuration: number;\n animationQueue: VoidFunction[];\n getScrollPosition: (currentPosition: number) => number;\n onScrollToEndBorder: VoidFunction;\n onScrollEnd: VoidFunction;\n onScrollStart: VoidFunction;\n /**\n * Начальная ширина прокрутки.\n * В некоторых случаях может отличаться от текущей ширины прокрутки из-за transforms: translate\n */\n initialScrollWidth: number;\n textDirection: 'ltr' | 'rtl';\n}\n\nexport type ScrollPositionHandler = (currentPosition: number) => number;\n\nexport interface HorizontalScrollProps\n extends HTMLAttributesWithRootRef<HTMLDivElement>,\n HasRef<HTMLDivElement> {\n /**\n * Функция для расчета величины прокрутки при клике на левую стрелку.\n */\n getScrollToLeft?: ScrollPositionHandler;\n /**\n * Функция для расчета величины прокрутки при клике на правую стрелку.\n */\n getScrollToRight?: ScrollPositionHandler;\n arrowSize?: 'm' | 'l';\n /**\n * Смещает иконки кнопок навигации по вертикали.\n */\n arrowOffsetY?: number | string;\n showArrows?: boolean | 'always';\n scrollAnimationDuration?: number;\n /**\n * Добавляет возможность прокручивать контент на любое колесо мыши.\n * По умолчанию прокручивается как любой горизонтальный контент через shift.\n */\n scrollOnAnyWheel?: boolean;\n}\n\n/**\n * timing method\n */\nfunction now() {\n return performance && performance.now ? performance.now() : Date.now();\n}\n\n/**\n * Округление к большему по модулю\n *\n * ## Пример\n *\n * ```ts\n * import { strict as assert } from 'node:assert';\n *\n * assert.equal(roundingAwayFromZero(5.1), 6)\n * assert.equal(roundingAwayFromZero(-5.1), -6)\n * ```\n */\nfunction roundingAwayFromZero(value: number): number {\n return value > 0 ? Math.ceil(value) : Math.floor(value);\n}\n\n/**\n * Округляем el.scrollLeft\n * https://github.com/VKCOM/VKUI/pull/2445\n */\nconst roundUpElementScrollLeft = (el: HTMLElement) => roundingAwayFromZero(el.scrollLeft);\n\n/**\n * Код анимации скрола, на основе полифила: https://github.com/iamdustan/smoothscroll\n * Константа взята из полифила (468), на дизайн-ревью уточнили до 250\n * @var {number} SCROLL_ONE_FRAME_TIME время анимации скролла\n */\nconst SCROLL_ONE_FRAME_TIME = 250;\n\nfunction doScroll({\n scrollElement,\n getScrollPosition,\n animationQueue,\n onScrollToEndBorder,\n onScrollEnd,\n onScrollStart,\n initialScrollWidth,\n scrollAnimationDuration = SCROLL_ONE_FRAME_TIME,\n textDirection,\n}: ScrollContext) {\n if (!scrollElement || !getScrollPosition) {\n return;\n }\n\n /**\n * крайнее значение сдвига\n */\n const extremeScrollLeft =\n (textDirection === 'ltr' ? 1 : -1) * (initialScrollWidth - scrollElement.offsetWidth);\n\n let startScrollLeft = roundUpElementScrollLeft(scrollElement);\n let endScrollLeft = getScrollPosition(startScrollLeft);\n\n onScrollStart();\n\n /**\n * Если окончание прокрутки вышло за ноль\n */\n if (startScrollLeft * endScrollLeft < 0) {\n endScrollLeft = 0;\n }\n\n if (Math.abs(endScrollLeft) >= Math.abs(extremeScrollLeft)) {\n onScrollToEndBorder();\n endScrollLeft = extremeScrollLeft;\n }\n\n const startTime = now();\n\n (function scroll() {\n if (!scrollElement) {\n onScrollEnd();\n return;\n }\n\n const time = now();\n const elapsed = Math.min((time - startTime) / scrollAnimationDuration, 1);\n\n const value = easeInOutSine(elapsed);\n\n const currentScrollLeft = startScrollLeft + (endScrollLeft - startScrollLeft) * value;\n scrollElement.scrollLeft = roundingAwayFromZero(currentScrollLeft);\n\n const scrollEnd =\n textDirection === 'ltr' ? Math.max(0, endScrollLeft) : Math.min(0, endScrollLeft);\n if (roundUpElementScrollLeft(scrollElement) !== scrollEnd && elapsed !== 1) {\n requestAnimationFrame(scroll);\n return;\n }\n\n onScrollEnd();\n animationQueue.shift();\n if (animationQueue.length > 0) {\n animationQueue[0]();\n }\n })();\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/HorizontalScroll\n */\nexport const HorizontalScroll = ({\n children,\n getScrollToLeft,\n getScrollToRight,\n showArrows = true,\n arrowSize = 'l',\n arrowOffsetY,\n scrollAnimationDuration = SCROLL_ONE_FRAME_TIME,\n getRef,\n scrollOnAnyWheel = false,\n ...restProps\n}: HorizontalScrollProps) => {\n const [canScrollLeft, setCanScrollLeft] = React.useState(false);\n const [canScrollRight, setCanScrollRight] = React.useState(false);\n const [directionRef, textDirection = 'ltr'] = useDirection<HTMLDivElement>();\n\n const setCanScrollStart = textDirection === 'ltr' ? setCanScrollLeft : setCanScrollRight;\n const setCanScrollEnd = textDirection === 'ltr' ? setCanScrollRight : setCanScrollLeft;\n\n const isCustomScrollingRef = React.useRef(false);\n\n const scrollerRef = useExternRef(getRef, directionRef);\n\n const animationQueue = React.useRef<VoidFunction[]>([]);\n\n const hasPointer = useAdaptivityHasPointer();\n\n const scrollTo = React.useCallback(\n (getScrollPosition: ScrollPositionHandler) => {\n const scrollElement = scrollerRef.current;\n\n animationQueue.current.push(() =>\n doScroll({\n scrollElement,\n getScrollPosition,\n animationQueue: animationQueue.current,\n onScrollToEndBorder: () => setCanScrollEnd(false),\n onScrollEnd: () => (isCustomScrollingRef.current = false),\n onScrollStart: () => (isCustomScrollingRef.current = true),\n initialScrollWidth: scrollElement?.firstElementChild?.scrollWidth || 0,\n scrollAnimationDuration,\n textDirection,\n }),\n );\n if (animationQueue.current.length === 1) {\n animationQueue.current[0]();\n }\n },\n [scrollerRef, scrollAnimationDuration, textDirection, setCanScrollEnd],\n );\n\n const scrollToLeft = React.useCallback(() => {\n const getScrollPosition =\n getScrollToLeft ?? ((i: number) => i - scrollerRef.current!.offsetWidth);\n scrollTo(getScrollPosition);\n }, [getScrollToLeft, scrollTo, scrollerRef]);\n\n const scrollToRight = React.useCallback(() => {\n const getScrollPosition =\n getScrollToRight ?? ((i: number) => i + scrollerRef.current!.offsetWidth);\n scrollTo(getScrollPosition);\n }, [getScrollToRight, scrollTo, scrollerRef]);\n\n const calculateArrowsVisibility = React.useCallback(() => {\n if (showArrows && hasPointer && scrollerRef.current && !isCustomScrollingRef.current) {\n const scrollElement = scrollerRef.current;\n\n setCanScrollStart(scrollElement.scrollLeft !== 0);\n setCanScrollEnd(\n Math.abs(roundUpElementScrollLeft(scrollElement)) + scrollElement.offsetWidth <\n scrollElement.scrollWidth,\n );\n }\n }, [showArrows, hasPointer, scrollerRef, setCanScrollStart, setCanScrollEnd]);\n\n const scrollEvent = useEventListener('scroll', calculateArrowsVisibility);\n React.useEffect(\n function addScrollerRefToScrollEvent() {\n if (!scrollerRef.current) {\n return noop;\n }\n\n scrollEvent.add(scrollerRef.current);\n return scrollEvent.remove;\n },\n [scrollEvent, scrollerRef],\n );\n\n React.useEffect(calculateArrowsVisibility, [calculateArrowsVisibility, children]);\n\n /**\n * Прокрутка с помощью любого колеса мыши\n */\n const onwheel = React.useCallback(\n (e: WheelEvent) => {\n scrollerRef.current!.scrollBy({ left: e.deltaX + e.deltaY, behavior: 'auto' });\n e.preventDefault();\n },\n [scrollerRef],\n );\n\n const wheelEvent = useEventListener('wheel', onwheel);\n React.useEffect(\n function addScrollerRefToWheelEvent() {\n if (!scrollerRef.current || !scrollOnAnyWheel) {\n return noop;\n }\n\n wheelEvent.add(scrollerRef.current);\n\n return wheelEvent.remove;\n },\n [wheelEvent, scrollerRef, scrollOnAnyWheel],\n );\n\n return (\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n styles['HorizontalScroll'],\n 'vkuiInternalHorizontalScroll',\n showArrows === 'always' && styles['HorizontalScroll--withConstArrows'],\n )}\n onMouseEnter={calculateArrowsVisibility}\n >\n {showArrows && (hasPointer || hasPointer === undefined) && canScrollLeft && (\n <ScrollArrow\n data-testid={process.env.NODE_ENV === 'test' ? 'ScrollArrow' : undefined}\n size={arrowSize}\n offsetY={arrowOffsetY}\n direction=\"left\"\n aria-hidden\n className={classNames(\n styles['HorizontalScroll__arrow'],\n styles['HorizontalScroll__arrowLeft'],\n )}\n onClick={scrollToLeft}\n />\n )}\n {showArrows && (hasPointer || hasPointer === undefined) && canScrollRight && (\n <ScrollArrow\n data-testid={process.env.NODE_ENV === 'test' ? 'ScrollArrow' : undefined}\n size={arrowSize}\n offsetY={arrowOffsetY}\n direction=\"right\"\n aria-hidden\n className={classNames(\n styles['HorizontalScroll__arrow'],\n styles['HorizontalScroll__arrowRight'],\n )}\n onClick={scrollToRight}\n />\n )}\n <div className={styles['HorizontalScroll__in']} ref={scrollerRef}>\n <div className={styles['HorizontalScroll__in-wrapper']}>{children}</div>\n </div>\n </RootComponent>\n );\n};\n"],"names":["HorizontalScroll","now","performance","Date","roundingAwayFromZero","value","Math","ceil","floor","roundUpElementScrollLeft","el","scrollLeft","SCROLL_ONE_FRAME_TIME","doScroll","scrollElement","getScrollPosition","animationQueue","onScrollToEndBorder","onScrollEnd","onScrollStart","initialScrollWidth","scrollAnimationDuration","textDirection","extremeScrollLeft","offsetWidth","startScrollLeft","endScrollLeft","abs","startTime","scroll","time","elapsed","min","easeInOutSine","currentScrollLeft","scrollEnd","max","requestAnimationFrame","shift","length","children","getScrollToLeft","getScrollToRight","showArrows","arrowSize","arrowOffsetY","getRef","scrollOnAnyWheel","restProps","React","useState","canScrollLeft","setCanScrollLeft","canScrollRight","setCanScrollRight","useDirection","directionRef","setCanScrollStart","setCanScrollEnd","isCustomScrollingRef","useRef","scrollerRef","useExternRef","hasPointer","useAdaptivityHasPointer","scrollTo","useCallback","current","push","firstElementChild","scrollWidth","scrollToLeft","i","scrollToRight","calculateArrowsVisibility","scrollEvent","useEventListener","useEffect","addScrollerRefToScrollEvent","noop","add","remove","onwheel","e","scrollBy","left","deltaX","deltaY","behavior","preventDefault","wheelEvent","addScrollerRefToWheelEvent","RootComponent","baseClassName","classNames","onMouseEnter","undefined","ScrollArrow","data-testid","process","env","NODE_ENV","size","offsetY","direction","aria-hidden","className","onClick","div","ref"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModalRoot.d.ts","sourceRoot":"","sources":["../../../../src/components/ModalRoot/ModalRoot.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAkB/B,OAAO,EAAE,qBAAqB,EAA+C,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"ModalRoot.d.ts","sourceRoot":"","sources":["../../../../src/components/ModalRoot/ModalRoot.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAkB/B,OAAO,EAAE,qBAAqB,EAA+C,MAAM,SAAS,CAAC;AAomB7F,eAAO,MAAM,cAAc,mDAM1B,CAAC"}
|
|
@@ -243,7 +243,9 @@ var ModalRootTouchComponent = /*#__PURE__*/ function(_React_Component) {
|
|
|
243
243
|
}
|
|
244
244
|
this.documentScrolling = enabled;
|
|
245
245
|
if (enabled) {
|
|
246
|
-
//
|
|
246
|
+
// восстанавливаем значение overscroll behavior
|
|
247
|
+
// eslint-disable-next-line no-restricted-properties
|
|
248
|
+
this.document.documentElement.classList.remove("vkui--disable-overscroll-behavior");
|
|
247
249
|
// некоторые браузеры на странных вендорах типа Meizu не удаляют обработчик.
|
|
248
250
|
// https://github.com/VKCOM/VKUI/issues/444
|
|
249
251
|
this.window.removeEventListener("touchmove", this.preventTouch, {
|
|
@@ -251,6 +253,10 @@ var ModalRootTouchComponent = /*#__PURE__*/ function(_React_Component) {
|
|
|
251
253
|
passive: false
|
|
252
254
|
});
|
|
253
255
|
} else {
|
|
256
|
+
// отключаем нативный pull-to-refresh при открытом модальном окне
|
|
257
|
+
// чтобы он не срабатывал при закрытии модалки смахиванием вниз
|
|
258
|
+
// eslint-disable-next-line no-restricted-properties
|
|
259
|
+
this.document.documentElement.classList.add("vkui--disable-overscroll-behavior");
|
|
254
260
|
this.window.addEventListener("touchmove", this.preventTouch, {
|
|
255
261
|
passive: false
|
|
256
262
|
});
|