@vkontakte/vkui 7.7.2 → 7.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ModalCard/ModalCardInternal.d.ts +1 -1
- package/dist/components/ModalCard/ModalCardInternal.d.ts.map +1 -1
- package/dist/components/ModalCard/ModalCardInternal.js +9 -3
- package/dist/components/ModalCard/ModalCardInternal.js.map +1 -1
- package/dist/components/ModalCard/types.d.ts +9 -1
- package/dist/components/ModalCard/types.d.ts.map +1 -1
- package/dist/components/ModalCard/types.js.map +1 -1
- package/dist/components/ModalOverlay/ModalOverlay.d.ts +3 -1
- package/dist/components/ModalOverlay/ModalOverlay.d.ts.map +1 -1
- package/dist/components/ModalOverlay/ModalOverlay.js +7 -3
- package/dist/components/ModalOverlay/ModalOverlay.js.map +1 -1
- package/dist/components/ModalPage/ModalPageInternal.d.ts +1 -1
- package/dist/components/ModalPage/ModalPageInternal.d.ts.map +1 -1
- package/dist/components/ModalPage/ModalPageInternal.js +9 -3
- package/dist/components/ModalPage/ModalPageInternal.js.map +1 -1
- package/dist/components/ModalPage/types.d.ts +9 -1
- package/dist/components/ModalPage/types.d.ts.map +1 -1
- package/dist/components/ModalPage/types.js.map +1 -1
- package/dist/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.d.ts +1 -1
- package/dist/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.d.ts.map +1 -1
- package/dist/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.js +4 -2
- package/dist/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.js.map +1 -1
- package/dist/components/Popper/Popper.d.ts +5 -1
- package/dist/components/Popper/Popper.d.ts.map +1 -1
- package/dist/components/Popper/Popper.js +4 -2
- package/dist/components/Popper/Popper.js.map +1 -1
- package/dist/cssm/components/ModalCard/ModalCardInternal.js +6 -2
- package/dist/cssm/components/ModalCard/ModalCardInternal.js.map +1 -1
- package/dist/cssm/components/ModalCard/types.js.map +1 -1
- package/dist/cssm/components/ModalOverlay/ModalOverlay.js +4 -2
- package/dist/cssm/components/ModalOverlay/ModalOverlay.js.map +1 -1
- package/dist/cssm/components/ModalPage/ModalPageInternal.js +6 -2
- package/dist/cssm/components/ModalPage/ModalPageInternal.js.map +1 -1
- package/dist/cssm/components/ModalPage/types.js.map +1 -1
- package/dist/cssm/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.js +1 -1
- package/dist/cssm/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.js.map +1 -1
- package/dist/cssm/components/Popper/Popper.js +3 -2
- package/dist/cssm/components/Popper/Popper.js.map +1 -1
- package/package.json +4 -3
- package/src/components/ModalCard/ModalCardInternal.tsx +7 -1
- package/src/components/ModalCard/types.ts +9 -1
- package/src/components/ModalOverlay/ModalOverlay.tsx +7 -1
- package/src/components/ModalPage/ModalPageInternal.tsx +7 -1
- package/src/components/ModalPage/types.ts +9 -1
- package/src/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.tsx +2 -0
- package/src/components/Popper/Popper.tsx +6 -0
- package/src/lib/floating/useFloatingWithInteractions/__snapshots__/useFloatingWithInteractions.test.tsx.snap +6 -6
|
@@ -9,5 +9,5 @@ export interface ModalCardInternalProps extends Omit<ModalCardProps, 'nav' | 'ke
|
|
|
9
9
|
*
|
|
10
10
|
* @private
|
|
11
11
|
*/
|
|
12
|
-
export declare const ModalCardInternal: ({ icon, title, titleComponent, description, descriptionComponent, children, actions, size, open, style: styleProp, className, preventClose, ModalOverlay, modalOverlayTestId, modalDismissButtonTestId, getRootRef, dismissButtonMode, dismissLabel, noFocusToDialog, restoreFocus, onOpen, onOpened, onClose, onClosed, disableFocusTrap, disableModalOverlay, ...restProps }: ModalCardInternalProps) => ReactNode;
|
|
12
|
+
export declare const ModalCardInternal: ({ icon, title, titleComponent, description, descriptionComponent, children, actions, size, open, style: styleProp, className, preventClose, ModalOverlay, modalOverlayTestId, modalDismissButtonTestId, getRootRef, dismissButtonMode, dismissLabel, noFocusToDialog, restoreFocus, onOpen, onOpened, onClose, onClosed, disableFocusTrap, disableModalOverlay, disableOpenAnimation, disableCloseAnimation, ...restProps }: ModalCardInternalProps) => ReactNode;
|
|
13
13
|
//# sourceMappingURL=ModalCardInternal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModalCardInternal.d.ts","sourceRoot":"","sources":["../../../src/components/ModalCard/ModalCardInternal.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,aAAa,EAAsB,KAAK,SAAS,EAAe,MAAM,OAAO,CAAC;AAa5F,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAoB9C,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAAC,cAAc,EAAE,KAAK,GAAG,aAAa,CAAC;IACzF,YAAY,CAAC,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;CACjD;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,
|
|
1
|
+
{"version":3,"file":"ModalCardInternal.d.ts","sourceRoot":"","sources":["../../../src/components/ModalCard/ModalCardInternal.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,aAAa,EAAsB,KAAK,SAAS,EAAe,MAAM,OAAO,CAAC;AAa5F,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAoB9C,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAAC,cAAc,EAAE,KAAK,GAAG,aAAa,CAAC;IACzF,YAAY,CAAC,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;CACjD;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,6ZA8B/B,sBAAsB,KAAG,SAmH3B,CAAC"}
|
|
@@ -35,7 +35,7 @@ const transitionStateClassNames = {
|
|
|
35
35
|
*
|
|
36
36
|
* @private
|
|
37
37
|
*/ export const ModalCardInternal = (_param)=>{
|
|
38
|
-
var { icon, title, titleComponent, description, descriptionComponent, children, actions, size, open, style: styleProp, className, preventClose, ModalOverlay = ModalOverlayDefault, modalOverlayTestId, modalDismissButtonTestId, getRootRef, dismissButtonMode, dismissLabel, noFocusToDialog, restoreFocus, onOpen, onOpened, onClose = noop, onClosed, disableFocusTrap, disableModalOverlay } = _param, restProps = _object_without_properties(_param, [
|
|
38
|
+
var { icon, title, titleComponent, description, descriptionComponent, children, actions, size, open, style: styleProp, className, preventClose, ModalOverlay = ModalOverlayDefault, modalOverlayTestId, modalDismissButtonTestId, getRootRef, dismissButtonMode, dismissLabel, noFocusToDialog, restoreFocus, onOpen, onOpened, onClose = noop, onClosed, disableFocusTrap, disableModalOverlay, disableOpenAnimation, disableCloseAnimation } = _param, restProps = _object_without_properties(_param, [
|
|
39
39
|
"icon",
|
|
40
40
|
"title",
|
|
41
41
|
"titleComponent",
|
|
@@ -61,11 +61,15 @@ const transitionStateClassNames = {
|
|
|
61
61
|
"onClose",
|
|
62
62
|
"onClosed",
|
|
63
63
|
"disableFocusTrap",
|
|
64
|
-
"disableModalOverlay"
|
|
64
|
+
"disableModalOverlay",
|
|
65
|
+
"disableOpenAnimation",
|
|
66
|
+
"disableCloseAnimation"
|
|
65
67
|
]);
|
|
66
68
|
const platform = usePlatform();
|
|
67
69
|
const [transitionState, { ref, onTransitionEnd }] = useCSSTransition(open, {
|
|
68
|
-
enableAppear:
|
|
70
|
+
enableAppear: !disableOpenAnimation,
|
|
71
|
+
enableEnter: !disableOpenAnimation,
|
|
72
|
+
enableExit: !disableCloseAnimation,
|
|
69
73
|
onEnter () {
|
|
70
74
|
onOpen === null || onOpen === void 0 ? void 0 : onOpen();
|
|
71
75
|
},
|
|
@@ -99,6 +103,8 @@ const transitionStateClassNames = {
|
|
|
99
103
|
getRootRef: setBackdropEl,
|
|
100
104
|
"data-testid": modalOverlayTestId,
|
|
101
105
|
visible: open,
|
|
106
|
+
disableOpenAnimation: disableOpenAnimation,
|
|
107
|
+
disableCloseAnimation: disableCloseAnimation,
|
|
102
108
|
onClick: closable ? function handleBackdropClick(event) {
|
|
103
109
|
onClose('click-overlay', event);
|
|
104
110
|
} : undefined
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/ModalCard/ModalCardInternal.tsx"],"sourcesContent":["'use client';\n/* eslint-disable jsdoc/require-jsdoc */\n\nimport { type ComponentType, type KeyboardEvent, type ReactNode, useCallback } from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useFocusTrap } from '../../hooks/useFocusTrap';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useVirtualKeyboardState } from '../../hooks/useVirtualKeyboardState';\nimport { Keys, pressedKey } from '../../lib/accessibility';\nimport { useCSSTransition, type UseCSSTransitionState } from '../../lib/animation';\nimport { useBottomSheet } from '../../lib/sheet';\nimport { useScrollLock } from '../AppRoot/ScrollContext';\nimport { ModalCardBase } from '../ModalCardBase/ModalCardBase';\nimport { ModalOutlet } from '../ModalOutlet/ModalOutlet';\nimport {\n ModalOverlay as ModalOverlayDefault,\n type ModalOverlayProps,\n} from '../ModalOverlay/ModalOverlay';\nimport type { ModalCardProps } from './types';\nimport styles from './ModalCard.module.css';\n\nconst sizeByPlatformClassNames = {\n vkcom: styles['hostMaxWidthS'],\n ios: styles['hostMaxWidthM'],\n android: styles['hostMaxWidthL'],\n};\n\nconst transitionStateClassNames: Partial<Record<UseCSSTransitionState, string>> = {\n appear: styles['hostStateEnter'],\n appearing: styles['hostStateEntering'],\n\n enter: styles['hostStateEnter'],\n entering: styles['hostStateEntering'],\n\n exiting: styles['hostStateExiting'],\n exited: styles['hostStateExited'],\n};\n\nexport interface ModalCardInternalProps extends Omit<ModalCardProps, 'nav' | 'keepMounted'> {\n ModalOverlay?: ComponentType<ModalOverlayProps>;\n}\n\n/**\n * В компоненте заложена вся логика модального окна.\n *\n * @private\n */\nexport const ModalCardInternal = ({\n icon,\n title,\n titleComponent,\n description,\n descriptionComponent,\n children,\n actions,\n size,\n open,\n style: styleProp,\n className,\n preventClose,\n ModalOverlay = ModalOverlayDefault,\n modalOverlayTestId,\n modalDismissButtonTestId,\n getRootRef,\n dismissButtonMode,\n dismissLabel,\n noFocusToDialog,\n restoreFocus,\n onOpen,\n onOpened,\n onClose = noop,\n onClosed,\n disableFocusTrap,\n disableModalOverlay,\n ...restProps\n}: ModalCardInternalProps): ReactNode => {\n const platform = usePlatform();\n const [transitionState, { ref, onTransitionEnd }] = useCSSTransition<HTMLDivElement>(open, {\n enableAppear: true,\n onEnter() {\n onOpen?.();\n },\n onEntered() {\n onOpened?.();\n },\n onExited() {\n onClosed?.();\n },\n });\n const opened = transitionState === 'appeared' || transitionState === 'entered';\n const hidden = transitionState === 'exited';\n const closable = !preventClose && opened;\n\n const { isDesktop } = useAdaptivityWithJSMediaQueries();\n const bottomSheetEnabled = !isDesktop && !preventClose && transitionState !== 'exited';\n\n const { opened: keyboardOpened } = useVirtualKeyboardState(bottomSheetEnabled);\n const [{ setSheetEl, setBackdropEl }, bottomSheetEventHandlers] = useBottomSheet(\n bottomSheetEnabled,\n {\n blocked: keyboardOpened,\n snapPoint: 'auto',\n sheetCSSProperty: '--vkui_internal_ModalCard--translateY',\n backdropCSSProperty: '--vkui_internal--modal-overlay--opacity',\n onDismiss() {\n onClose?.('swipe-down');\n },\n },\n );\n const handleRef = useExternRef<HTMLDivElement>(setSheetEl, ref, getRootRef);\n const style = keyboardOpened\n ? {\n ...styleProp,\n '--vkui_internal_ModalCard--safeAreaInsetBottom': '0px',\n }\n : styleProp;\n const modalOverlay = !disableModalOverlay && (\n <ModalOverlay\n getRootRef={setBackdropEl}\n data-testid={modalOverlayTestId}\n visible={open}\n onClick={\n closable\n ? function handleBackdropClick(event) {\n onClose('click-overlay', event);\n }\n : undefined\n }\n />\n );\n const handleEscKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n if (closable && pressedKey(event) === Keys.ESCAPE) {\n onClose('escape-key');\n }\n },\n [closable, onClose],\n );\n\n useScrollLock(!hidden);\n useFocusTrap(ref, {\n autoFocus: !noFocusToDialog,\n disabled: !opened || hidden || disableFocusTrap,\n restoreFocus,\n });\n\n return (\n <ModalOutlet\n hidden={hidden}\n isDesktop={isDesktop}\n onKeyDown={handleEscKeyDown}\n disableModalOverlay={disableModalOverlay}\n >\n {modalOverlay}\n <ModalCardBase\n {...restProps}\n tabIndex={-1}\n role=\"dialog\"\n aria-modal=\"true\"\n getRootRef={handleRef}\n style={style}\n className={classNames(\n styles.host,\n isDesktop ? styles.hostDesktop : styles.hostMobile,\n sizeByPlatformClassNames[platform],\n transitionStateClassNames[transitionState],\n className,\n )}\n onTransitionEnd={onTransitionEnd}\n {...bottomSheetEventHandlers}\n icon={icon}\n title={title}\n titleComponent={titleComponent}\n description={description}\n descriptionComponent={descriptionComponent}\n actions={actions}\n onClose={() => onClose('click-close-button')}\n size={size}\n modalDismissButtonTestId={modalDismissButtonTestId}\n dismissButtonMode={dismissButtonMode}\n dismissLabel={dismissLabel}\n >\n {children}\n </ModalCardBase>\n </ModalOutlet>\n );\n};\n"],"names":["useCallback","classNames","noop","useAdaptivityWithJSMediaQueries","useExternRef","useFocusTrap","usePlatform","useVirtualKeyboardState","Keys","pressedKey","useCSSTransition","useBottomSheet","useScrollLock","ModalCardBase","ModalOutlet","ModalOverlay","ModalOverlayDefault","sizeByPlatformClassNames","vkcom","ios","android","transitionStateClassNames","appear","appearing","enter","entering","exiting","exited","ModalCardInternal","icon","title","titleComponent","description","descriptionComponent","children","actions","size","open","style","styleProp","className","preventClose","modalOverlayTestId","modalDismissButtonTestId","getRootRef","dismissButtonMode","dismissLabel","noFocusToDialog","restoreFocus","onOpen","onOpened","onClose","onClosed","disableFocusTrap","disableModalOverlay","restProps","platform","transitionState","ref","onTransitionEnd","enableAppear","onEnter","onEntered","onExited","opened","hidden","closable","isDesktop","bottomSheetEnabled","keyboardOpened","setSheetEl","setBackdropEl","bottomSheetEventHandlers","blocked","snapPoint","sheetCSSProperty","backdropCSSProperty","onDismiss","handleRef","modalOverlay","data-testid","visible","onClick","handleBackdropClick","event","undefined","handleEscKeyDown","ESCAPE","autoFocus","disabled","onKeyDown","tabIndex","role","aria-modal"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/ModalCard/ModalCardInternal.tsx"],"sourcesContent":["'use client';\n/* eslint-disable jsdoc/require-jsdoc */\n\nimport { type ComponentType, type KeyboardEvent, type ReactNode, useCallback } from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useFocusTrap } from '../../hooks/useFocusTrap';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useVirtualKeyboardState } from '../../hooks/useVirtualKeyboardState';\nimport { Keys, pressedKey } from '../../lib/accessibility';\nimport { useCSSTransition, type UseCSSTransitionState } from '../../lib/animation';\nimport { useBottomSheet } from '../../lib/sheet';\nimport { useScrollLock } from '../AppRoot/ScrollContext';\nimport { ModalCardBase } from '../ModalCardBase/ModalCardBase';\nimport { ModalOutlet } from '../ModalOutlet/ModalOutlet';\nimport {\n ModalOverlay as ModalOverlayDefault,\n type ModalOverlayProps,\n} from '../ModalOverlay/ModalOverlay';\nimport type { ModalCardProps } from './types';\nimport styles from './ModalCard.module.css';\n\nconst sizeByPlatformClassNames = {\n vkcom: styles['hostMaxWidthS'],\n ios: styles['hostMaxWidthM'],\n android: styles['hostMaxWidthL'],\n};\n\nconst transitionStateClassNames: Partial<Record<UseCSSTransitionState, string>> = {\n appear: styles['hostStateEnter'],\n appearing: styles['hostStateEntering'],\n\n enter: styles['hostStateEnter'],\n entering: styles['hostStateEntering'],\n\n exiting: styles['hostStateExiting'],\n exited: styles['hostStateExited'],\n};\n\nexport interface ModalCardInternalProps extends Omit<ModalCardProps, 'nav' | 'keepMounted'> {\n ModalOverlay?: ComponentType<ModalOverlayProps>;\n}\n\n/**\n * В компоненте заложена вся логика модального окна.\n *\n * @private\n */\nexport const ModalCardInternal = ({\n icon,\n title,\n titleComponent,\n description,\n descriptionComponent,\n children,\n actions,\n size,\n open,\n style: styleProp,\n className,\n preventClose,\n ModalOverlay = ModalOverlayDefault,\n modalOverlayTestId,\n modalDismissButtonTestId,\n getRootRef,\n dismissButtonMode,\n dismissLabel,\n noFocusToDialog,\n restoreFocus,\n onOpen,\n onOpened,\n onClose = noop,\n onClosed,\n disableFocusTrap,\n disableModalOverlay,\n disableOpenAnimation,\n disableCloseAnimation,\n ...restProps\n}: ModalCardInternalProps): ReactNode => {\n const platform = usePlatform();\n const [transitionState, { ref, onTransitionEnd }] = useCSSTransition<HTMLDivElement>(open, {\n enableAppear: !disableOpenAnimation,\n enableEnter: !disableOpenAnimation,\n enableExit: !disableCloseAnimation,\n onEnter() {\n onOpen?.();\n },\n onEntered() {\n onOpened?.();\n },\n onExited() {\n onClosed?.();\n },\n });\n const opened = transitionState === 'appeared' || transitionState === 'entered';\n const hidden = transitionState === 'exited';\n const closable = !preventClose && opened;\n\n const { isDesktop } = useAdaptivityWithJSMediaQueries();\n const bottomSheetEnabled = !isDesktop && !preventClose && transitionState !== 'exited';\n\n const { opened: keyboardOpened } = useVirtualKeyboardState(bottomSheetEnabled);\n const [{ setSheetEl, setBackdropEl }, bottomSheetEventHandlers] = useBottomSheet(\n bottomSheetEnabled,\n {\n blocked: keyboardOpened,\n snapPoint: 'auto',\n sheetCSSProperty: '--vkui_internal_ModalCard--translateY',\n backdropCSSProperty: '--vkui_internal--modal-overlay--opacity',\n onDismiss() {\n onClose?.('swipe-down');\n },\n },\n );\n const handleRef = useExternRef<HTMLDivElement>(setSheetEl, ref, getRootRef);\n const style = keyboardOpened\n ? {\n ...styleProp,\n '--vkui_internal_ModalCard--safeAreaInsetBottom': '0px',\n }\n : styleProp;\n const modalOverlay = !disableModalOverlay && (\n <ModalOverlay\n getRootRef={setBackdropEl}\n data-testid={modalOverlayTestId}\n visible={open}\n disableOpenAnimation={disableOpenAnimation}\n disableCloseAnimation={disableCloseAnimation}\n onClick={\n closable\n ? function handleBackdropClick(event) {\n onClose('click-overlay', event);\n }\n : undefined\n }\n />\n );\n const handleEscKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n if (closable && pressedKey(event) === Keys.ESCAPE) {\n onClose('escape-key');\n }\n },\n [closable, onClose],\n );\n\n useScrollLock(!hidden);\n useFocusTrap(ref, {\n autoFocus: !noFocusToDialog,\n disabled: !opened || hidden || disableFocusTrap,\n restoreFocus,\n });\n\n return (\n <ModalOutlet\n hidden={hidden}\n isDesktop={isDesktop}\n onKeyDown={handleEscKeyDown}\n disableModalOverlay={disableModalOverlay}\n >\n {modalOverlay}\n <ModalCardBase\n {...restProps}\n tabIndex={-1}\n role=\"dialog\"\n aria-modal=\"true\"\n getRootRef={handleRef}\n style={style}\n className={classNames(\n styles.host,\n isDesktop ? styles.hostDesktop : styles.hostMobile,\n sizeByPlatformClassNames[platform],\n transitionStateClassNames[transitionState],\n className,\n )}\n onTransitionEnd={onTransitionEnd}\n {...bottomSheetEventHandlers}\n icon={icon}\n title={title}\n titleComponent={titleComponent}\n description={description}\n descriptionComponent={descriptionComponent}\n actions={actions}\n onClose={() => onClose('click-close-button')}\n size={size}\n modalDismissButtonTestId={modalDismissButtonTestId}\n dismissButtonMode={dismissButtonMode}\n dismissLabel={dismissLabel}\n >\n {children}\n </ModalCardBase>\n </ModalOutlet>\n );\n};\n"],"names":["useCallback","classNames","noop","useAdaptivityWithJSMediaQueries","useExternRef","useFocusTrap","usePlatform","useVirtualKeyboardState","Keys","pressedKey","useCSSTransition","useBottomSheet","useScrollLock","ModalCardBase","ModalOutlet","ModalOverlay","ModalOverlayDefault","sizeByPlatformClassNames","vkcom","ios","android","transitionStateClassNames","appear","appearing","enter","entering","exiting","exited","ModalCardInternal","icon","title","titleComponent","description","descriptionComponent","children","actions","size","open","style","styleProp","className","preventClose","modalOverlayTestId","modalDismissButtonTestId","getRootRef","dismissButtonMode","dismissLabel","noFocusToDialog","restoreFocus","onOpen","onOpened","onClose","onClosed","disableFocusTrap","disableModalOverlay","disableOpenAnimation","disableCloseAnimation","restProps","platform","transitionState","ref","onTransitionEnd","enableAppear","enableEnter","enableExit","onEnter","onEntered","onExited","opened","hidden","closable","isDesktop","bottomSheetEnabled","keyboardOpened","setSheetEl","setBackdropEl","bottomSheetEventHandlers","blocked","snapPoint","sheetCSSProperty","backdropCSSProperty","onDismiss","handleRef","modalOverlay","data-testid","visible","onClick","handleBackdropClick","event","undefined","handleEscKeyDown","ESCAPE","autoFocus","disabled","onKeyDown","tabIndex","role","aria-modal"],"mappings":"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"}
|
|
@@ -52,8 +52,16 @@ export interface ModalCardProps extends NavIdProps, Omit<ModalCardBaseProps, 'id
|
|
|
52
52
|
/**
|
|
53
53
|
* Отключает отображение и взаимодействие с фоном модалки.
|
|
54
54
|
* > При использовании `ModalCard` внутри `ModalRoot` есть особенность использования этого свойства.
|
|
55
|
-
* > Об этом можно почитать на странице документации [`ModalRoot`](/components/modal-root#
|
|
55
|
+
* > Об этом можно почитать на странице документации [`ModalRoot`](/components/modal-root#disable-modal-overlay).
|
|
56
56
|
*/
|
|
57
57
|
disableModalOverlay?: boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Отключает анимацию открытия модалки.
|
|
60
|
+
*/
|
|
61
|
+
disableOpenAnimation?: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Отключает анимацию закрытия модалки.
|
|
64
|
+
*/
|
|
65
|
+
disableCloseAnimation?: boolean;
|
|
58
66
|
}
|
|
59
67
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/ModalCard/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,MAAM,MAAM,oBAAoB,GAC5B,eAAe,GACf,oBAAoB,GACpB,YAAY,GACZ,YAAY,CAAC;AAEjB,MAAM,WAAW,cACf,SAAQ,UAAU,EAChB,IAAI,CAAC,kBAAkB,EAAE,IAAI,GAAG,SAAS,GAAG,iBAAiB,GAAG,MAAM,sBAAsB,CAAC,EAC7F,IAAI,CAAC,iBAAiB,EAAE,cAAc,CAAC;IACzC;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;OAEG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;OAEG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC/E;;OAEG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACjD;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/ModalCard/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,MAAM,MAAM,oBAAoB,GAC5B,eAAe,GACf,oBAAoB,GACpB,YAAY,GACZ,YAAY,CAAC;AAEjB,MAAM,WAAW,cACf,SAAQ,UAAU,EAChB,IAAI,CAAC,kBAAkB,EAAE,IAAI,GAAG,SAAS,GAAG,iBAAiB,GAAG,MAAM,sBAAsB,CAAC,EAC7F,IAAI,CAAC,iBAAiB,EAAE,cAAc,CAAC;IACzC;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;OAEG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;OAEG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC/E;;OAEG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACjD;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;OAEG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;OAEG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/ModalCard/types.ts"],"sourcesContent":["import type { UIEvent } from 'react';\nimport { type UseFocusTrapProps } from '../../hooks/useFocusTrap';\nimport type { NavIdProps } from '../../lib/getNavId';\nimport type { UseBottomSheetHandlers } from '../../lib/sheet';\nimport type { ModalCardBaseProps } from '../ModalCardBase/ModalCardBase';\n\nexport type ModalCardCloseReason =\n | 'click-overlay'\n | 'click-close-button'\n | 'escape-key'\n | 'swipe-down';\n\nexport interface ModalCardProps\n extends NavIdProps,\n Omit<ModalCardBaseProps, 'id' | 'onClose' | 'onTransitionEnd' | keyof UseBottomSheetHandlers>,\n Pick<UseFocusTrapProps, 'restoreFocus'> {\n /**\n * Состояние видимости.\n *\n * @default false\n */\n open?: boolean;\n /**\n * Сохранять ли компонент в DOM при `open={false}`.\n *\n * @default false\n */\n keepMounted?: boolean;\n /**\n * Отключает фокус на интерактивный элемент после открытия модалки.\n *\n * > Важно установить фокус после открытия в любое место модалки используя событие `onOpened`, иначе не будет работать закрытие по нажатию `Esc`.\n */\n noFocusToDialog?: boolean;\n /**\n * `data-testid` для оверлея.\n */\n modalOverlayTestId?: string;\n /**\n * Будет вызвано при начале открытия модалки.\n */\n onOpen?: VoidFunction;\n /**\n * Будет вызвано при окончательном открытии модалки.\n */\n onOpened?: VoidFunction;\n /**\n * Будет вызвано при начале закрытия модалки.\n */\n onClose?: (reason: ModalCardCloseReason, event?: UIEvent<HTMLElement>) => void;\n /**\n * Будет вызвано при окончательном закрытии модалки.\n */\n onClosed?: VoidFunction;\n /**\n * Позволяет отключить захват фокуса.\n *\n * Нужно использовать, когда поверх одной модалки открывается другая, чтобы два `FocusTrap` не конфликтовали.\n */\n disableFocusTrap?: UseFocusTrapProps['disabled'];\n /**\n * Отключает отображение и взаимодействие с фоном модалки.\n * > При использовании `ModalCard` внутри `ModalRoot` есть особенность использования этого свойства.\n * > Об этом можно почитать на странице документации [`ModalRoot`](/components/modal-root#
|
|
1
|
+
{"version":3,"sources":["../../../src/components/ModalCard/types.ts"],"sourcesContent":["import type { UIEvent } from 'react';\nimport { type UseFocusTrapProps } from '../../hooks/useFocusTrap';\nimport type { NavIdProps } from '../../lib/getNavId';\nimport type { UseBottomSheetHandlers } from '../../lib/sheet';\nimport type { ModalCardBaseProps } from '../ModalCardBase/ModalCardBase';\n\nexport type ModalCardCloseReason =\n | 'click-overlay'\n | 'click-close-button'\n | 'escape-key'\n | 'swipe-down';\n\nexport interface ModalCardProps\n extends NavIdProps,\n Omit<ModalCardBaseProps, 'id' | 'onClose' | 'onTransitionEnd' | keyof UseBottomSheetHandlers>,\n Pick<UseFocusTrapProps, 'restoreFocus'> {\n /**\n * Состояние видимости.\n *\n * @default false\n */\n open?: boolean;\n /**\n * Сохранять ли компонент в DOM при `open={false}`.\n *\n * @default false\n */\n keepMounted?: boolean;\n /**\n * Отключает фокус на интерактивный элемент после открытия модалки.\n *\n * > Важно установить фокус после открытия в любое место модалки используя событие `onOpened`, иначе не будет работать закрытие по нажатию `Esc`.\n */\n noFocusToDialog?: boolean;\n /**\n * `data-testid` для оверлея.\n */\n modalOverlayTestId?: string;\n /**\n * Будет вызвано при начале открытия модалки.\n */\n onOpen?: VoidFunction;\n /**\n * Будет вызвано при окончательном открытии модалки.\n */\n onOpened?: VoidFunction;\n /**\n * Будет вызвано при начале закрытия модалки.\n */\n onClose?: (reason: ModalCardCloseReason, event?: UIEvent<HTMLElement>) => void;\n /**\n * Будет вызвано при окончательном закрытии модалки.\n */\n onClosed?: VoidFunction;\n /**\n * Позволяет отключить захват фокуса.\n *\n * Нужно использовать, когда поверх одной модалки открывается другая, чтобы два `FocusTrap` не конфликтовали.\n */\n disableFocusTrap?: UseFocusTrapProps['disabled'];\n /**\n * Отключает отображение и взаимодействие с фоном модалки.\n * > При использовании `ModalCard` внутри `ModalRoot` есть особенность использования этого свойства.\n * > Об этом можно почитать на странице документации [`ModalRoot`](/components/modal-root#disable-modal-overlay).\n */\n disableModalOverlay?: boolean;\n /**\n * Отключает анимацию открытия модалки.\n */\n disableOpenAnimation?: boolean;\n /**\n * Отключает анимацию закрытия модалки.\n */\n disableCloseAnimation?: boolean;\n}\n"],"names":[],"mappings":"AAYA,WA8DC"}
|
|
@@ -4,9 +4,11 @@ export interface ModalOverlayProps extends DataHTMLAttributes<HTMLDivElement>, H
|
|
|
4
4
|
visible?: boolean;
|
|
5
5
|
position?: 'absolute' | 'fixed';
|
|
6
6
|
onClick?: (event: React.MouseEvent<HTMLDivElement>) => void;
|
|
7
|
+
disableOpenAnimation?: boolean;
|
|
8
|
+
disableCloseAnimation?: boolean;
|
|
7
9
|
}
|
|
8
10
|
/**
|
|
9
11
|
* @private
|
|
10
12
|
*/
|
|
11
|
-
export declare const ModalOverlay: ({ visible, position, getRootRef, onClick, ...restProps }: ModalOverlayProps) => import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export declare const ModalOverlay: ({ visible, position, getRootRef, onClick, disableOpenAnimation, disableCloseAnimation, ...restProps }: ModalOverlayProps) => import("react/jsx-runtime").JSX.Element;
|
|
12
14
|
//# sourceMappingURL=ModalOverlay.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModalOverlay.d.ts","sourceRoot":"","sources":["../../../src/components/ModalOverlay/ModalOverlay.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAIhD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAoB9C,MAAM,WAAW,iBACf,SAAQ,kBAAkB,CAAC,cAAc,CAAC,EACxC,UAAU,CAAC,cAAc,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"ModalOverlay.d.ts","sourceRoot":"","sources":["../../../src/components/ModalOverlay/ModalOverlay.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAIhD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAoB9C,MAAM,WAAW,iBACf,SAAQ,kBAAkB,CAAC,cAAc,CAAC,EACxC,UAAU,CAAC,cAAc,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IAC5D,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,uGAQ1B,iBAAiB,4CAwBnB,CAAC"}
|
|
@@ -24,14 +24,18 @@ const transitionStateClassNames = {
|
|
|
24
24
|
/**
|
|
25
25
|
* @private
|
|
26
26
|
*/ export const ModalOverlay = (_param)=>{
|
|
27
|
-
var { visible = false, position = 'absolute', getRootRef, onClick } = _param, restProps = _object_without_properties(_param, [
|
|
27
|
+
var { visible = false, position = 'absolute', getRootRef, onClick, disableOpenAnimation, disableCloseAnimation } = _param, restProps = _object_without_properties(_param, [
|
|
28
28
|
"visible",
|
|
29
29
|
"position",
|
|
30
30
|
"getRootRef",
|
|
31
|
-
"onClick"
|
|
31
|
+
"onClick",
|
|
32
|
+
"disableOpenAnimation",
|
|
33
|
+
"disableCloseAnimation"
|
|
32
34
|
]);
|
|
33
35
|
const [transitionState, { ref, onTransitionEnd }] = useCSSTransition(visible, {
|
|
34
|
-
enableAppear:
|
|
36
|
+
enableAppear: !disableOpenAnimation,
|
|
37
|
+
enableEnter: !disableOpenAnimation,
|
|
38
|
+
enableExit: !disableCloseAnimation
|
|
35
39
|
});
|
|
36
40
|
const handleRef = useExternRef(getRootRef, ref);
|
|
37
41
|
return /*#__PURE__*/ _jsx("div", _object_spread_props(_object_spread({}, restProps), {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/ModalOverlay/ModalOverlay.tsx"],"sourcesContent":["'use client';\n/* eslint-disable jsdoc/require-jsdoc */\n\nimport type { DataHTMLAttributes } from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useCSSTransition, type UseCSSTransitionState } from '../../lib/animation/useCSSTransition';\nimport type { HasRootRef } from '../../types';\nimport styles from './ModalOverlay.module.css';\n\nconst positionClassNames = {\n absolute: styles.hostPositionAbsolute,\n fixed: styles.hostPositionFixed,\n};\n\nconst transitionStateClassNames: Partial<Record<UseCSSTransitionState, string>> = {\n appear: styles['hostStateEnter'],\n appearing: styles['hostStateEntering'],\n appeared: styles['hostStateEntered'],\n enter: styles['hostStateEnter'],\n entering: styles['hostStateEntering'],\n entered: styles['hostStateEntered'],\n exit: styles['hostStateExit'],\n exiting: styles['hostStateExiting'],\n exited: styles['hostStateExited'],\n};\n\nexport interface ModalOverlayProps\n extends DataHTMLAttributes<HTMLDivElement>,\n HasRootRef<HTMLDivElement> {\n visible?: boolean;\n position?: 'absolute' | 'fixed';\n onClick?: (event: React.MouseEvent<HTMLDivElement>) => void;\n}\n\n/**\n * @private\n */\nexport const ModalOverlay = ({\n visible = false,\n position = 'absolute',\n getRootRef,\n onClick,\n ...restProps\n}: ModalOverlayProps) => {\n const [transitionState, { ref, onTransitionEnd }] = useCSSTransition<HTMLDivElement>(visible, {\n enableAppear:
|
|
1
|
+
{"version":3,"sources":["../../../src/components/ModalOverlay/ModalOverlay.tsx"],"sourcesContent":["'use client';\n/* eslint-disable jsdoc/require-jsdoc */\n\nimport type { DataHTMLAttributes } from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useCSSTransition, type UseCSSTransitionState } from '../../lib/animation/useCSSTransition';\nimport type { HasRootRef } from '../../types';\nimport styles from './ModalOverlay.module.css';\n\nconst positionClassNames = {\n absolute: styles.hostPositionAbsolute,\n fixed: styles.hostPositionFixed,\n};\n\nconst transitionStateClassNames: Partial<Record<UseCSSTransitionState, string>> = {\n appear: styles['hostStateEnter'],\n appearing: styles['hostStateEntering'],\n appeared: styles['hostStateEntered'],\n enter: styles['hostStateEnter'],\n entering: styles['hostStateEntering'],\n entered: styles['hostStateEntered'],\n exit: styles['hostStateExit'],\n exiting: styles['hostStateExiting'],\n exited: styles['hostStateExited'],\n};\n\nexport interface ModalOverlayProps\n extends DataHTMLAttributes<HTMLDivElement>,\n HasRootRef<HTMLDivElement> {\n visible?: boolean;\n position?: 'absolute' | 'fixed';\n onClick?: (event: React.MouseEvent<HTMLDivElement>) => void;\n disableOpenAnimation?: boolean;\n disableCloseAnimation?: boolean;\n}\n\n/**\n * @private\n */\nexport const ModalOverlay = ({\n visible = false,\n position = 'absolute',\n getRootRef,\n onClick,\n disableOpenAnimation,\n disableCloseAnimation,\n ...restProps\n}: ModalOverlayProps) => {\n const [transitionState, { ref, onTransitionEnd }] = useCSSTransition<HTMLDivElement>(visible, {\n enableAppear: !disableOpenAnimation,\n enableEnter: !disableOpenAnimation,\n enableExit: !disableCloseAnimation,\n });\n const handleRef = useExternRef(getRootRef, ref);\n\n return (\n <div\n {...restProps}\n ref={handleRef}\n aria-hidden=\"true\"\n hidden={transitionState === 'exited'}\n className={classNames(\n styles.host,\n onClick === undefined && styles.nonInteractive,\n positionClassNames[position],\n transitionStateClassNames[transitionState],\n )}\n onClick={onClick}\n onTransitionEnd={onTransitionEnd}\n />\n );\n};\n"],"names":["classNames","useExternRef","useCSSTransition","positionClassNames","absolute","fixed","transitionStateClassNames","appear","appearing","appeared","enter","entering","entered","exit","exiting","exited","ModalOverlay","visible","position","getRootRef","onClick","disableOpenAnimation","disableCloseAnimation","restProps","transitionState","ref","onTransitionEnd","enableAppear","enableEnter","enableExit","handleRef","div","aria-hidden","hidden","className","undefined"],"mappings":"AAAA;;;;;AAIA,SAASA,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,YAAY,QAAQ,8BAA2B;AACxD,SAASC,gBAAgB,QAAoC,0CAAuC;AAIpG,MAAMC,qBAAqB;IACzBC,QAAQ;IACRC,KAAK;AACP;AAEA,MAAMC,4BAA4E;IAChFC,MAAM;IACNC,SAAS;IACTC,QAAQ;IACRC,KAAK;IACLC,QAAQ;IACRC,OAAO;IACPC,IAAI;IACJC,OAAO;IACPC,MAAM;AACR;AAYA;;CAEC,GACD,OAAO,MAAMC,eAAe;QAAC,EAC3BC,UAAU,KAAK,EACfC,WAAW,UAAU,EACrBC,UAAU,EACVC,OAAO,EACPC,oBAAoB,EACpBC,qBAAqB,EAEH,WADfC;QANHN;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,MAAM,CAACE,iBAAiB,EAAEC,GAAG,EAAEC,eAAe,EAAE,CAAC,GAAGxB,iBAAiCe,SAAS;QAC5FU,cAAc,CAACN;QACfO,aAAa,CAACP;QACdQ,YAAY,CAACP;IACf;IACA,MAAMQ,YAAY7B,aAAakB,YAAYM;IAE3C,qBACE,KAACM,+CACKR;QACJE,KAAKK;QACLE,eAAY;QACZC,QAAQT,oBAAoB;QAC5BU,WAAWlC,qCAEToB,YAAYe,iDACZhC,kBAAkB,CAACe,SAAS,EAC5BZ,yBAAyB,CAACkB,gBAAgB;QAE5CJ,SAASA;QACTM,iBAAiBA;;AAGvB,EAAE"}
|
|
@@ -12,5 +12,5 @@ export interface ModalPageInternalProps extends Omit<ModalPageProps, 'nav' | 'ke
|
|
|
12
12
|
*
|
|
13
13
|
* @private
|
|
14
14
|
*/
|
|
15
|
-
export declare const ModalPageInternal: ({ open, header, footer, size: desktopMaxWidth, height, children, className, style, snapPoint, onSnapPointChange, getModalContentRef, ModalOverlay, modalOverlayTestId, modalContentTestId, modalDismissButtonTestId, modalDismissButtonLabel, outsideButtons, noFocusToDialog, hideCloseButton, preventClose, disableContentPanningGesture, restoreFocus, onOpen, onOpened, onClose, onClosed, disableFocusTrap, disableModalOverlay, ...restProps }: ModalPageInternalProps) => import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export declare const ModalPageInternal: ({ open, header, footer, size: desktopMaxWidth, height, children, className, style, snapPoint, onSnapPointChange, getModalContentRef, ModalOverlay, modalOverlayTestId, modalContentTestId, modalDismissButtonTestId, modalDismissButtonLabel, outsideButtons, noFocusToDialog, hideCloseButton, preventClose, disableContentPanningGesture, restoreFocus, onOpen, onOpened, onClose, onClosed, disableFocusTrap, disableModalOverlay, disableOpenAnimation, disableCloseAnimation, ...restProps }: ModalPageInternalProps) => import("react/jsx-runtime").JSX.Element;
|
|
16
16
|
//# sourceMappingURL=ModalPageInternal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModalPageInternal.d.ts","sourceRoot":"","sources":["../../../src/components/ModalPage/ModalPageInternal.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,aAAa,EAAmC,MAAM,OAAO,CAAC;AAQ5E,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,eAAe,EAAkB,MAAM,iBAAiB,CAAC;AAMvF,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAc9C,MAAM,WAAW,sBACf,SAAQ,IAAI,CAAC,cAAc,EAAE,KAAK,GAAG,aAAa,GAAG,gBAAgB,GAAG,sBAAsB,CAAC;IAC/F,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,CAAC,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;IAChD,iBAAiB,CAAC,EAAE,eAAe,CAAC;CACrC;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,
|
|
1
|
+
{"version":3,"file":"ModalPageInternal.d.ts","sourceRoot":"","sources":["../../../src/components/ModalPage/ModalPageInternal.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,aAAa,EAAmC,MAAM,OAAO,CAAC;AAQ5E,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,eAAe,EAAkB,MAAM,iBAAiB,CAAC;AAMvF,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAc9C,MAAM,WAAW,sBACf,SAAQ,IAAI,CAAC,cAAc,EAAE,KAAK,GAAG,aAAa,GAAG,gBAAgB,GAAG,sBAAsB,CAAC;IAC/F,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,CAAC,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;IAChD,iBAAiB,CAAC,EAAE,eAAe,CAAC;CACrC;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,meAgC/B,sBAAsB,4CAkIxB,CAAC"}
|
|
@@ -31,7 +31,7 @@ const transitionStateClassNames = {
|
|
|
31
31
|
*
|
|
32
32
|
* @private
|
|
33
33
|
*/ export const ModalPageInternal = (_param)=>{
|
|
34
|
-
var { open, header, footer, size: desktopMaxWidth, height, children, className, style, snapPoint, onSnapPointChange, getModalContentRef, ModalOverlay = ModalOverlayDefault, modalOverlayTestId, modalContentTestId, modalDismissButtonTestId, modalDismissButtonLabel = 'Закрыть', outsideButtons, noFocusToDialog, hideCloseButton, preventClose, disableContentPanningGesture, restoreFocus, onOpen, onOpened, onClose = noop, onClosed, disableFocusTrap, disableModalOverlay } = _param, restProps = _object_without_properties(_param, [
|
|
34
|
+
var { open, header, footer, size: desktopMaxWidth, height, children, className, style, snapPoint, onSnapPointChange, getModalContentRef, ModalOverlay = ModalOverlayDefault, modalOverlayTestId, modalContentTestId, modalDismissButtonTestId, modalDismissButtonLabel = 'Закрыть', outsideButtons, noFocusToDialog, hideCloseButton, preventClose, disableContentPanningGesture, restoreFocus, onOpen, onOpened, onClose = noop, onClosed, disableFocusTrap, disableModalOverlay, disableOpenAnimation = false, disableCloseAnimation = false } = _param, restProps = _object_without_properties(_param, [
|
|
35
35
|
"open",
|
|
36
36
|
"header",
|
|
37
37
|
"footer",
|
|
@@ -59,11 +59,15 @@ const transitionStateClassNames = {
|
|
|
59
59
|
"onClose",
|
|
60
60
|
"onClosed",
|
|
61
61
|
"disableFocusTrap",
|
|
62
|
-
"disableModalOverlay"
|
|
62
|
+
"disableModalOverlay",
|
|
63
|
+
"disableOpenAnimation",
|
|
64
|
+
"disableCloseAnimation"
|
|
63
65
|
]);
|
|
64
66
|
const { hasCustomPanelHeaderAfter } = useConfigProvider();
|
|
65
67
|
const [transitionState, { ref, onTransitionEnd }] = useCSSTransition(open, {
|
|
66
|
-
enableAppear:
|
|
68
|
+
enableAppear: !disableOpenAnimation,
|
|
69
|
+
enableEnter: !disableOpenAnimation,
|
|
70
|
+
enableExit: !disableCloseAnimation,
|
|
67
71
|
onEnter () {
|
|
68
72
|
onOpen === null || onOpen === void 0 ? void 0 : onOpen();
|
|
69
73
|
},
|
|
@@ -103,6 +107,8 @@ const transitionStateClassNames = {
|
|
|
103
107
|
getRootRef: setBackdropEl,
|
|
104
108
|
"data-testid": modalOverlayTestId,
|
|
105
109
|
visible: open,
|
|
110
|
+
disableOpenAnimation: disableOpenAnimation,
|
|
111
|
+
disableCloseAnimation: disableCloseAnimation,
|
|
106
112
|
onClick: closable ? function handleBackdropClick(event) {
|
|
107
113
|
onClose('click-overlay', event);
|
|
108
114
|
} : undefined
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/ModalPage/ModalPageInternal.tsx"],"sourcesContent":["'use client';\n/* eslint-disable jsdoc/require-jsdoc */\n\nimport { type ComponentType, type KeyboardEvent, useCallback } from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { mergeStyle } from '../../helpers/mergeStyle';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useVirtualKeyboardState } from '../../hooks/useVirtualKeyboardState';\nimport { Keys, pressedKey } from '../../lib/accessibility';\nimport { useCSSTransition, type UseCSSTransitionState } from '../../lib/animation';\nimport { type SnapPoint, type SnapPointChange, useBottomSheet } from '../../lib/sheet';\nimport type { CSSCustomProperties } from '../../types';\nimport { useScrollLock } from '../AppRoot/ScrollContext';\nimport { useConfigProvider } from '../ConfigProvider/ConfigProviderContext';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { ModalOutlet } from '../ModalOutlet/ModalOutlet';\nimport {\n ModalOverlay as ModalOverlayDefault,\n type ModalOverlayProps,\n} from '../ModalOverlay/ModalOverlay';\nimport { ModalPageBase } from './ModalPageBase';\nimport type { ModalPageProps } from './types';\nimport styles from './ModalPage.module.css';\n\nconst transitionStateClassNames: Partial<Record<UseCSSTransitionState, string>> = {\n appear: styles['documentStateEnter'],\n appearing: styles['documentStateEntering'],\n\n enter: styles['documentStateEnter'],\n entering: styles['documentStateEntering'],\n\n exiting: styles['documentStateExiting'],\n exited: styles['documentStateExited'],\n};\n\nexport interface ModalPageInternalProps\n extends Omit<ModalPageProps, 'nav' | 'keepMounted' | 'settlingHeight' | 'dynamicContentHeight'> {\n snapPoint: SnapPoint;\n ModalOverlay?: ComponentType<ModalOverlayProps>;\n onSnapPointChange?: SnapPointChange;\n}\n\n/**\n * В компоненте заложена вся логика модального окна.\n *\n * @private\n */\nexport const ModalPageInternal = ({\n open,\n header,\n footer,\n size: desktopMaxWidth,\n height,\n children,\n className,\n style,\n snapPoint,\n onSnapPointChange,\n getModalContentRef,\n ModalOverlay = ModalOverlayDefault,\n modalOverlayTestId,\n modalContentTestId,\n modalDismissButtonTestId,\n modalDismissButtonLabel = 'Закрыть',\n outsideButtons,\n noFocusToDialog,\n hideCloseButton,\n preventClose,\n disableContentPanningGesture,\n restoreFocus,\n onOpen,\n onOpened,\n onClose = noop,\n onClosed,\n disableFocusTrap,\n disableModalOverlay,\n ...restProps\n}: ModalPageInternalProps) => {\n const { hasCustomPanelHeaderAfter } = useConfigProvider();\n const [transitionState, { ref, onTransitionEnd }] = useCSSTransition<HTMLDivElement>(open, {\n enableAppear: true,\n onEnter() {\n onOpen?.();\n },\n onEntered() {\n onOpened?.();\n },\n onExited() {\n onClosed?.();\n },\n });\n const opened = transitionState === 'appeared' || transitionState === 'entered';\n const hidden = transitionState === 'exited';\n const closable = !preventClose && opened;\n\n const { sizeX, isDesktop } = useAdaptivityWithJSMediaQueries();\n const bottomSheetEnabled = !isDesktop && !preventClose && transitionState !== 'exited';\n const { opened: keyboardOpened } = useVirtualKeyboardState(bottomSheetEnabled);\n\n const [{ initialStyle, setSheetEl, setSheetScrollEl, setBackdropEl }, bottomSheetEventHandlers] =\n useBottomSheet(bottomSheetEnabled, {\n blocked: keyboardOpened,\n snapPoint,\n sheetCSSProperty: '--vkui_internal_ModalPageDocument--snapPoint',\n backdropCSSProperty: '--vkui_internal--modal-overlay--opacity',\n onSnapPointChange,\n onDismiss() {\n onClose('swipe-down');\n },\n });\n const documentStyle = keyboardOpened\n ? {\n '--vkui_internal_ModalPageDocument--safeAreaInsetBottom': '0px',\n ...initialStyle,\n }\n : initialStyle;\n const handleSheetRef = useExternRef<HTMLDivElement>(setSheetEl, ref);\n const handleSheetScrollRef = useExternRef<HTMLDivElement>(setSheetScrollEl, getModalContentRef);\n\n const [desktopMaxWidthClassName, desktopMaxWidthStyle] = isDesktop\n ? resolveDesktopMaxWidth(desktopMaxWidth)\n : [undefined, undefined];\n\n const modalOverlay = !disableModalOverlay && (\n <ModalOverlay\n getRootRef={setBackdropEl}\n data-testid={modalOverlayTestId}\n visible={open}\n onClick={\n closable\n ? function handleBackdropClick(event) {\n onClose('click-overlay', event);\n }\n : undefined\n }\n />\n );\n const handleEscKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n if (closable && pressedKey(event) === Keys.ESCAPE) {\n onClose('escape-key');\n }\n },\n [closable, onClose],\n );\n\n useScrollLock(!hidden);\n\n return (\n <ModalOutlet\n hidden={hidden}\n isDesktop={isDesktop}\n onKeyDown={handleEscKeyDown}\n disableModalOverlay={disableModalOverlay}\n >\n {modalOverlay}\n <FocusTrap\n {...restProps}\n autoFocus={!noFocusToDialog}\n restoreFocus={restoreFocus}\n role=\"dialog\"\n aria-modal=\"true\"\n disabled={!opened || hidden || disableFocusTrap}\n className={classNames(\n className,\n styles.host,\n isDesktop ? styles.hostDesktop : styles.hostMobile,\n !isDesktop &&\n (hasCustomPanelHeaderAfter\n ? styles.hostMobileSafeAreaInsetTopWithCustomOffset\n : styles.hostMobileSafeAreaInsetTop),\n desktopMaxWidthClassName,\n sizeX === 'regular' && 'vkuiInternalModalPage--sizeX-regular',\n )}\n style={mergeStyle(mergeStyle(desktopMaxWidthStyle, getHeightCSSVariable(height)), style)}\n >\n <ModalPageBase\n {...bottomSheetEventHandlers}\n getRootRef={handleSheetRef}\n getRef={handleSheetScrollRef}\n style={documentStyle}\n className={classNames(\n isDesktop ? styles.documentDesktop : styles.documentMobile,\n transitionStateClassNames[transitionState],\n )}\n onTransitionEnd={onTransitionEnd}\n isDesktop={isDesktop}\n disableContentPanningGesture={disableContentPanningGesture}\n header={header}\n footer={footer}\n outsideButtons={outsideButtons}\n modalContentTestId={modalContentTestId}\n modalDismissButtonTestId={modalDismissButtonTestId}\n modalDismissButtonLabel={modalDismissButtonLabel}\n hideCloseButton={hideCloseButton}\n closable={closable}\n onClose={onClose}\n >\n {children}\n </ModalPageBase>\n </FocusTrap>\n </ModalOutlet>\n );\n};\n\nconst desktopMaxWidthClassNames = {\n s: styles['hostDesktopMaxWidthS'],\n m: styles['hostDesktopMaxWidthM'],\n l: styles['hostDesktopMaxWidthL'],\n};\n\nfunction resolveDesktopMaxWidth(\n desktopMaxWidth: ModalPageInternalProps['size'] = 's',\n): [string | undefined, CSSCustomProperties | undefined] {\n if (typeof desktopMaxWidth === 'number') {\n return [undefined, { '--vkui_internal_ModalPage--desktopMaxWidth': `${desktopMaxWidth}px` }];\n }\n\n return desktopMaxWidthClassNames.hasOwnProperty(desktopMaxWidth)\n ? [desktopMaxWidthClassNames[desktopMaxWidth], undefined]\n : [undefined, { '--vkui_internal_ModalPage--desktopMaxWidth': desktopMaxWidth }];\n}\n\nfunction getHeightCSSVariable(height?: number | string): CSSCustomProperties | undefined {\n return height !== undefined\n ? {\n '--vkui_internal_ModalPage--userHeight':\n typeof height === 'number' ? `${height}px` : height,\n }\n : undefined;\n}\n"],"names":["useCallback","classNames","noop","mergeStyle","useAdaptivityWithJSMediaQueries","useExternRef","useVirtualKeyboardState","Keys","pressedKey","useCSSTransition","useBottomSheet","useScrollLock","useConfigProvider","FocusTrap","ModalOutlet","ModalOverlay","ModalOverlayDefault","ModalPageBase","transitionStateClassNames","appear","appearing","enter","entering","exiting","exited","ModalPageInternal","open","header","footer","size","desktopMaxWidth","height","children","className","style","snapPoint","onSnapPointChange","getModalContentRef","modalOverlayTestId","modalContentTestId","modalDismissButtonTestId","modalDismissButtonLabel","outsideButtons","noFocusToDialog","hideCloseButton","preventClose","disableContentPanningGesture","restoreFocus","onOpen","onOpened","onClose","onClosed","disableFocusTrap","disableModalOverlay","restProps","hasCustomPanelHeaderAfter","transitionState","ref","onTransitionEnd","enableAppear","onEnter","onEntered","onExited","opened","hidden","closable","sizeX","isDesktop","bottomSheetEnabled","keyboardOpened","initialStyle","setSheetEl","setSheetScrollEl","setBackdropEl","bottomSheetEventHandlers","blocked","sheetCSSProperty","backdropCSSProperty","onDismiss","documentStyle","handleSheetRef","handleSheetScrollRef","desktopMaxWidthClassName","desktopMaxWidthStyle","resolveDesktopMaxWidth","undefined","modalOverlay","getRootRef","data-testid","visible","onClick","handleBackdropClick","event","handleEscKeyDown","ESCAPE","onKeyDown","autoFocus","role","aria-modal","disabled","getHeightCSSVariable","getRef","desktopMaxWidthClassNames","s","m","l","hasOwnProperty"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/ModalPage/ModalPageInternal.tsx"],"sourcesContent":["'use client';\n/* eslint-disable jsdoc/require-jsdoc */\n\nimport { type ComponentType, type KeyboardEvent, useCallback } from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { mergeStyle } from '../../helpers/mergeStyle';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useVirtualKeyboardState } from '../../hooks/useVirtualKeyboardState';\nimport { Keys, pressedKey } from '../../lib/accessibility';\nimport { useCSSTransition, type UseCSSTransitionState } from '../../lib/animation';\nimport { type SnapPoint, type SnapPointChange, useBottomSheet } from '../../lib/sheet';\nimport type { CSSCustomProperties } from '../../types';\nimport { useScrollLock } from '../AppRoot/ScrollContext';\nimport { useConfigProvider } from '../ConfigProvider/ConfigProviderContext';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { ModalOutlet } from '../ModalOutlet/ModalOutlet';\nimport {\n ModalOverlay as ModalOverlayDefault,\n type ModalOverlayProps,\n} from '../ModalOverlay/ModalOverlay';\nimport { ModalPageBase } from './ModalPageBase';\nimport type { ModalPageProps } from './types';\nimport styles from './ModalPage.module.css';\n\nconst transitionStateClassNames: Partial<Record<UseCSSTransitionState, string>> = {\n appear: styles['documentStateEnter'],\n appearing: styles['documentStateEntering'],\n\n enter: styles['documentStateEnter'],\n entering: styles['documentStateEntering'],\n\n exiting: styles['documentStateExiting'],\n exited: styles['documentStateExited'],\n};\n\nexport interface ModalPageInternalProps\n extends Omit<ModalPageProps, 'nav' | 'keepMounted' | 'settlingHeight' | 'dynamicContentHeight'> {\n snapPoint: SnapPoint;\n ModalOverlay?: ComponentType<ModalOverlayProps>;\n onSnapPointChange?: SnapPointChange;\n}\n\n/**\n * В компоненте заложена вся логика модального окна.\n *\n * @private\n */\nexport const ModalPageInternal = ({\n open,\n header,\n footer,\n size: desktopMaxWidth,\n height,\n children,\n className,\n style,\n snapPoint,\n onSnapPointChange,\n getModalContentRef,\n ModalOverlay = ModalOverlayDefault,\n modalOverlayTestId,\n modalContentTestId,\n modalDismissButtonTestId,\n modalDismissButtonLabel = 'Закрыть',\n outsideButtons,\n noFocusToDialog,\n hideCloseButton,\n preventClose,\n disableContentPanningGesture,\n restoreFocus,\n onOpen,\n onOpened,\n onClose = noop,\n onClosed,\n disableFocusTrap,\n disableModalOverlay,\n disableOpenAnimation = false,\n disableCloseAnimation = false,\n ...restProps\n}: ModalPageInternalProps) => {\n const { hasCustomPanelHeaderAfter } = useConfigProvider();\n const [transitionState, { ref, onTransitionEnd }] = useCSSTransition<HTMLDivElement>(open, {\n enableAppear: !disableOpenAnimation,\n enableEnter: !disableOpenAnimation,\n enableExit: !disableCloseAnimation,\n onEnter() {\n onOpen?.();\n },\n onEntered() {\n onOpened?.();\n },\n onExited() {\n onClosed?.();\n },\n });\n const opened = transitionState === 'appeared' || transitionState === 'entered';\n const hidden = transitionState === 'exited';\n const closable = !preventClose && opened;\n\n const { sizeX, isDesktop } = useAdaptivityWithJSMediaQueries();\n const bottomSheetEnabled = !isDesktop && !preventClose && transitionState !== 'exited';\n const { opened: keyboardOpened } = useVirtualKeyboardState(bottomSheetEnabled);\n\n const [{ initialStyle, setSheetEl, setSheetScrollEl, setBackdropEl }, bottomSheetEventHandlers] =\n useBottomSheet(bottomSheetEnabled, {\n blocked: keyboardOpened,\n snapPoint,\n sheetCSSProperty: '--vkui_internal_ModalPageDocument--snapPoint',\n backdropCSSProperty: '--vkui_internal--modal-overlay--opacity',\n onSnapPointChange,\n onDismiss() {\n onClose('swipe-down');\n },\n });\n const documentStyle = keyboardOpened\n ? {\n '--vkui_internal_ModalPageDocument--safeAreaInsetBottom': '0px',\n ...initialStyle,\n }\n : initialStyle;\n const handleSheetRef = useExternRef<HTMLDivElement>(setSheetEl, ref);\n const handleSheetScrollRef = useExternRef<HTMLDivElement>(setSheetScrollEl, getModalContentRef);\n\n const [desktopMaxWidthClassName, desktopMaxWidthStyle] = isDesktop\n ? resolveDesktopMaxWidth(desktopMaxWidth)\n : [undefined, undefined];\n\n const modalOverlay = !disableModalOverlay && (\n <ModalOverlay\n getRootRef={setBackdropEl}\n data-testid={modalOverlayTestId}\n visible={open}\n disableOpenAnimation={disableOpenAnimation}\n disableCloseAnimation={disableCloseAnimation}\n onClick={\n closable\n ? function handleBackdropClick(event) {\n onClose('click-overlay', event);\n }\n : undefined\n }\n />\n );\n const handleEscKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n if (closable && pressedKey(event) === Keys.ESCAPE) {\n onClose('escape-key');\n }\n },\n [closable, onClose],\n );\n\n useScrollLock(!hidden);\n\n return (\n <ModalOutlet\n hidden={hidden}\n isDesktop={isDesktop}\n onKeyDown={handleEscKeyDown}\n disableModalOverlay={disableModalOverlay}\n >\n {modalOverlay}\n <FocusTrap\n {...restProps}\n autoFocus={!noFocusToDialog}\n restoreFocus={restoreFocus}\n role=\"dialog\"\n aria-modal=\"true\"\n disabled={!opened || hidden || disableFocusTrap}\n className={classNames(\n className,\n styles.host,\n isDesktop ? styles.hostDesktop : styles.hostMobile,\n !isDesktop &&\n (hasCustomPanelHeaderAfter\n ? styles.hostMobileSafeAreaInsetTopWithCustomOffset\n : styles.hostMobileSafeAreaInsetTop),\n desktopMaxWidthClassName,\n sizeX === 'regular' && 'vkuiInternalModalPage--sizeX-regular',\n )}\n style={mergeStyle(mergeStyle(desktopMaxWidthStyle, getHeightCSSVariable(height)), style)}\n >\n <ModalPageBase\n {...bottomSheetEventHandlers}\n getRootRef={handleSheetRef}\n getRef={handleSheetScrollRef}\n style={documentStyle}\n className={classNames(\n isDesktop ? styles.documentDesktop : styles.documentMobile,\n transitionStateClassNames[transitionState],\n )}\n onTransitionEnd={onTransitionEnd}\n isDesktop={isDesktop}\n disableContentPanningGesture={disableContentPanningGesture}\n header={header}\n footer={footer}\n outsideButtons={outsideButtons}\n modalContentTestId={modalContentTestId}\n modalDismissButtonTestId={modalDismissButtonTestId}\n modalDismissButtonLabel={modalDismissButtonLabel}\n hideCloseButton={hideCloseButton}\n closable={closable}\n onClose={onClose}\n >\n {children}\n </ModalPageBase>\n </FocusTrap>\n </ModalOutlet>\n );\n};\n\nconst desktopMaxWidthClassNames = {\n s: styles['hostDesktopMaxWidthS'],\n m: styles['hostDesktopMaxWidthM'],\n l: styles['hostDesktopMaxWidthL'],\n};\n\nfunction resolveDesktopMaxWidth(\n desktopMaxWidth: ModalPageInternalProps['size'] = 's',\n): [string | undefined, CSSCustomProperties | undefined] {\n if (typeof desktopMaxWidth === 'number') {\n return [undefined, { '--vkui_internal_ModalPage--desktopMaxWidth': `${desktopMaxWidth}px` }];\n }\n\n return desktopMaxWidthClassNames.hasOwnProperty(desktopMaxWidth)\n ? [desktopMaxWidthClassNames[desktopMaxWidth], undefined]\n : [undefined, { '--vkui_internal_ModalPage--desktopMaxWidth': desktopMaxWidth }];\n}\n\nfunction getHeightCSSVariable(height?: number | string): CSSCustomProperties | undefined {\n return height !== undefined\n ? {\n '--vkui_internal_ModalPage--userHeight':\n typeof height === 'number' ? `${height}px` : height,\n }\n : undefined;\n}\n"],"names":["useCallback","classNames","noop","mergeStyle","useAdaptivityWithJSMediaQueries","useExternRef","useVirtualKeyboardState","Keys","pressedKey","useCSSTransition","useBottomSheet","useScrollLock","useConfigProvider","FocusTrap","ModalOutlet","ModalOverlay","ModalOverlayDefault","ModalPageBase","transitionStateClassNames","appear","appearing","enter","entering","exiting","exited","ModalPageInternal","open","header","footer","size","desktopMaxWidth","height","children","className","style","snapPoint","onSnapPointChange","getModalContentRef","modalOverlayTestId","modalContentTestId","modalDismissButtonTestId","modalDismissButtonLabel","outsideButtons","noFocusToDialog","hideCloseButton","preventClose","disableContentPanningGesture","restoreFocus","onOpen","onOpened","onClose","onClosed","disableFocusTrap","disableModalOverlay","disableOpenAnimation","disableCloseAnimation","restProps","hasCustomPanelHeaderAfter","transitionState","ref","onTransitionEnd","enableAppear","enableEnter","enableExit","onEnter","onEntered","onExited","opened","hidden","closable","sizeX","isDesktop","bottomSheetEnabled","keyboardOpened","initialStyle","setSheetEl","setSheetScrollEl","setBackdropEl","bottomSheetEventHandlers","blocked","sheetCSSProperty","backdropCSSProperty","onDismiss","documentStyle","handleSheetRef","handleSheetScrollRef","desktopMaxWidthClassName","desktopMaxWidthStyle","resolveDesktopMaxWidth","undefined","modalOverlay","getRootRef","data-testid","visible","onClick","handleBackdropClick","event","handleEscKeyDown","ESCAPE","onKeyDown","autoFocus","role","aria-modal","disabled","getHeightCSSVariable","getRef","desktopMaxWidthClassNames","s","m","l","hasOwnProperty"],"mappings":"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"}
|
|
@@ -125,9 +125,17 @@ export interface ModalPageProps extends NavIdProps, Omit<HTMLAttributesWithRootR
|
|
|
125
125
|
/**
|
|
126
126
|
* Отключает отображение и взаимодействие с фоном модалки.
|
|
127
127
|
* > При использовании `ModalPage` внутри `ModalRoot` есть особенность использования этого свойства.
|
|
128
|
-
* > Об этом можно почитать на странице документации [`ModalRoot`](/components/modal-root#
|
|
128
|
+
* > Об этом можно почитать на странице документации [`ModalRoot`](/components/modal-root#disable-modal-overlay).
|
|
129
129
|
*/
|
|
130
130
|
disableModalOverlay?: boolean;
|
|
131
|
+
/**
|
|
132
|
+
* Отключает анимацию открытия модалки.
|
|
133
|
+
*/
|
|
134
|
+
disableOpenAnimation?: boolean;
|
|
135
|
+
/**
|
|
136
|
+
* Отключает анимацию закрытия модалки.
|
|
137
|
+
*/
|
|
138
|
+
disableCloseAnimation?: boolean;
|
|
131
139
|
}
|
|
132
140
|
export {};
|
|
133
141
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/ModalPage/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACpE,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,yBAAyB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3E,MAAM,MAAM,oBAAoB,GAC5B,eAAe,GACf,oBAAoB,GACpB,YAAY,GACZ,YAAY,CAAC;AAEjB,KAAK,qBAAqB,GAAG;IAC3B;;OAEG;IACH,KAAK,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAC,CAAC;CAClE,CAAC;AAEF,MAAM,WAAW,cACf,SAAQ,UAAU,EAChB,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,EAC/D,IAAI,CAAC,iBAAiB,EAAE,cAAc,CAAC,EACvC,qBAAqB;IACvB;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;OAEG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;OAEG;IACH,IAAI,CAAC,EAAE,YAAY,CACjB,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,MAAM,GAAG,aAAa,GAAG,aAAa,GAAG,aAAa,EACxE,MAAM,GAAG,MAAM,CAChB,CAAC;IACF;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;OAEG;IACH,kBAAkB,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IACzC;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;OAEG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC;;OAEG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;OAEG;IACH,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC;;OAEG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;OAEG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC/E;;OAEG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACjC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACjD;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/ModalPage/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACpE,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,yBAAyB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3E,MAAM,MAAM,oBAAoB,GAC5B,eAAe,GACf,oBAAoB,GACpB,YAAY,GACZ,YAAY,CAAC;AAEjB,KAAK,qBAAqB,GAAG;IAC3B;;OAEG;IACH,KAAK,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAC,CAAC;CAClE,CAAC;AAEF,MAAM,WAAW,cACf,SAAQ,UAAU,EAChB,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,EAC/D,IAAI,CAAC,iBAAiB,EAAE,cAAc,CAAC,EACvC,qBAAqB;IACvB;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;OAEG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;OAEG;IACH,IAAI,CAAC,EAAE,YAAY,CACjB,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,MAAM,GAAG,aAAa,GAAG,aAAa,GAAG,aAAa,EACxE,MAAM,GAAG,MAAM,CAChB,CAAC;IACF;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;OAEG;IACH,kBAAkB,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IACzC;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;OAEG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC;;OAEG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;OAEG;IACH,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC;;OAEG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;OAEG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC/E;;OAEG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACjC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACjD;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;OAEG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;OAEG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/ModalPage/types.ts"],"sourcesContent":["import type { CSSProperties, ReactNode, Ref, UIEvent } from 'react';\nimport { type UseFocusTrapProps } from '../../hooks/useFocusTrap';\nimport type { NavIdProps } from '../../lib/getNavId';\nimport type { HTMLAttributesWithRootRef, LiteralUnion } from '../../types';\n\nexport type ModalPageCloseReason =\n | 'click-overlay'\n | 'click-close-button'\n | 'escape-key'\n | 'swipe-down';\n\ntype OmittedStyleAttribute = {\n /**\n * Дополнительные стили.\n */\n style?: Omit<CSSProperties, 'height' | 'maxWidth' | 'maxHeight'>;\n};\n\nexport interface ModalPageProps\n extends NavIdProps,\n Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'id' | 'style'>,\n Pick<UseFocusTrapProps, 'restoreFocus'>,\n OmittedStyleAttribute {\n /**\n * Состояние видимости.\n *\n * @default false\n */\n open?: boolean;\n /**\n * Сохранять ли компонент в DOM при `open={false}`.\n *\n * @default false\n */\n keepMounted?: boolean;\n /**\n * Шапка модальной страницы, `<ModalPageHeader />`.\n */\n header?: ReactNode;\n /**\n * Подвал модальной страницы, `<ModalPageFooter />`.\n */\n footer?: ReactNode;\n /**\n * Задаёт контенту максимальную ширину на десктопе.\n */\n size?: LiteralUnion<\n 's' | 'm' | 'l' | 'auto' | 'fit-content' | 'max-content' | 'min-content',\n string | number\n >;\n /**\n * Задаёт модальному окну фиксированную высоту.\n * Можно передать числовое значение в пикселях, а можно строкой, в том числе и в процентах \"50%\".\n * В мобильной версии 'settlingHeight' будет считаться относительно заданного height.\n */\n height?: string | number;\n /**\n * Процент, на который изначально будет открыта модальная страница.\n *\n * > ⚠️ Следует использовать следующие значения: `25`, `50`, `75`, `100`.\n * > При передаче `< 25` значение приведётся к `25`, при передаче `> 75` значение приведётся к `75`.\n *\n * Игнорируется при включении `dynamicContentHeight`.\n */\n settlingHeight?: number;\n /**\n * Если высота контента в модальной странице может поменяться, нужно установить это свойство.\n */\n dynamicContentHeight?: boolean;\n /**\n * Отключает фокус на интерактивный элемент после открытия модалки.\n *\n * > Важно установить фокус после открытия в любое место модалки используя событие `onOpened`, иначе не будет работать закрытие по нажатию `Esc`.\n */\n noFocusToDialog?: boolean;\n /**\n * Скрывает кнопку закрытия (актуально для iOS, так как можно отрисовать кнопку закрытия внутри модалки).\n */\n hideCloseButton?: boolean;\n /**\n * `data-testid` для содержимого модального окна.\n */\n modalContentTestId?: string;\n /**\n * Возвращает DOM-элемент содержимого модального окна.\n */\n getModalContentRef?: Ref<HTMLDivElement>;\n /**\n * `data-testid` для оверлея.\n */\n modalOverlayTestId?: string;\n /**\n * `data-testid` для кнопки закрытия.\n */\n modalDismissButtonTestId?: string;\n /**\n * Текст для скринридера.\n */\n modalDismissButtonLabel?: string;\n /**\n * Позволяет отключить возможность закрытия модальной страницы (смахивание, клавиша `ESC`, нажатие на подложку).\n *\n * ⚠️ ВНИМАНИЕ: использование этой опции негативно сказывается на пользовательском опыте.\n */\n preventClose?: boolean;\n /**\n * Отключает раскрытие и закрытие панели в мобильном виде.\n */\n disableContentPanningGesture?: boolean;\n /**\n * Будет вызвано при начале открытия модалки.\n */\n onOpen?: VoidFunction;\n /**\n * Будет вызвано при окончательном открытии модалки.\n */\n onOpened?: VoidFunction;\n /**\n * Будет вызвано при начале закрытия модалки.\n */\n onClose?: (reason: ModalPageCloseReason, event?: UIEvent<HTMLElement>) => void;\n /**\n * Будет вызвано при окончательном закрытии модалки.\n */\n onClosed?: VoidFunction;\n /**\n * Управляющие элементы под кнопкой закрытия.\n *\n * Доступно только в `compact`-режиме. Рекомендуется размещать иконки размера 20, обернутые в ModalOutsideButton.\n *\n */\n outsideButtons?: React.ReactNode;\n /**\n * Позволяет отключить захват фокуса.\n *\n * Нужно использовать, когда поверх одной модалки открывается другая, чтобы два `FocusTrap` не конфликтовали.\n */\n disableFocusTrap?: UseFocusTrapProps['disabled'];\n /**\n * Отключает отображение и взаимодействие с фоном модалки.\n * > При использовании `ModalPage` внутри `ModalRoot` есть особенность использования этого свойства.\n * > Об этом можно почитать на странице документации [`ModalRoot`](/components/modal-root#
|
|
1
|
+
{"version":3,"sources":["../../../src/components/ModalPage/types.ts"],"sourcesContent":["import type { CSSProperties, ReactNode, Ref, UIEvent } from 'react';\nimport { type UseFocusTrapProps } from '../../hooks/useFocusTrap';\nimport type { NavIdProps } from '../../lib/getNavId';\nimport type { HTMLAttributesWithRootRef, LiteralUnion } from '../../types';\n\nexport type ModalPageCloseReason =\n | 'click-overlay'\n | 'click-close-button'\n | 'escape-key'\n | 'swipe-down';\n\ntype OmittedStyleAttribute = {\n /**\n * Дополнительные стили.\n */\n style?: Omit<CSSProperties, 'height' | 'maxWidth' | 'maxHeight'>;\n};\n\nexport interface ModalPageProps\n extends NavIdProps,\n Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'id' | 'style'>,\n Pick<UseFocusTrapProps, 'restoreFocus'>,\n OmittedStyleAttribute {\n /**\n * Состояние видимости.\n *\n * @default false\n */\n open?: boolean;\n /**\n * Сохранять ли компонент в DOM при `open={false}`.\n *\n * @default false\n */\n keepMounted?: boolean;\n /**\n * Шапка модальной страницы, `<ModalPageHeader />`.\n */\n header?: ReactNode;\n /**\n * Подвал модальной страницы, `<ModalPageFooter />`.\n */\n footer?: ReactNode;\n /**\n * Задаёт контенту максимальную ширину на десктопе.\n */\n size?: LiteralUnion<\n 's' | 'm' | 'l' | 'auto' | 'fit-content' | 'max-content' | 'min-content',\n string | number\n >;\n /**\n * Задаёт модальному окну фиксированную высоту.\n * Можно передать числовое значение в пикселях, а можно строкой, в том числе и в процентах \"50%\".\n * В мобильной версии 'settlingHeight' будет считаться относительно заданного height.\n */\n height?: string | number;\n /**\n * Процент, на который изначально будет открыта модальная страница.\n *\n * > ⚠️ Следует использовать следующие значения: `25`, `50`, `75`, `100`.\n * > При передаче `< 25` значение приведётся к `25`, при передаче `> 75` значение приведётся к `75`.\n *\n * Игнорируется при включении `dynamicContentHeight`.\n */\n settlingHeight?: number;\n /**\n * Если высота контента в модальной странице может поменяться, нужно установить это свойство.\n */\n dynamicContentHeight?: boolean;\n /**\n * Отключает фокус на интерактивный элемент после открытия модалки.\n *\n * > Важно установить фокус после открытия в любое место модалки используя событие `onOpened`, иначе не будет работать закрытие по нажатию `Esc`.\n */\n noFocusToDialog?: boolean;\n /**\n * Скрывает кнопку закрытия (актуально для iOS, так как можно отрисовать кнопку закрытия внутри модалки).\n */\n hideCloseButton?: boolean;\n /**\n * `data-testid` для содержимого модального окна.\n */\n modalContentTestId?: string;\n /**\n * Возвращает DOM-элемент содержимого модального окна.\n */\n getModalContentRef?: Ref<HTMLDivElement>;\n /**\n * `data-testid` для оверлея.\n */\n modalOverlayTestId?: string;\n /**\n * `data-testid` для кнопки закрытия.\n */\n modalDismissButtonTestId?: string;\n /**\n * Текст для скринридера.\n */\n modalDismissButtonLabel?: string;\n /**\n * Позволяет отключить возможность закрытия модальной страницы (смахивание, клавиша `ESC`, нажатие на подложку).\n *\n * ⚠️ ВНИМАНИЕ: использование этой опции негативно сказывается на пользовательском опыте.\n */\n preventClose?: boolean;\n /**\n * Отключает раскрытие и закрытие панели в мобильном виде.\n */\n disableContentPanningGesture?: boolean;\n /**\n * Будет вызвано при начале открытия модалки.\n */\n onOpen?: VoidFunction;\n /**\n * Будет вызвано при окончательном открытии модалки.\n */\n onOpened?: VoidFunction;\n /**\n * Будет вызвано при начале закрытия модалки.\n */\n onClose?: (reason: ModalPageCloseReason, event?: UIEvent<HTMLElement>) => void;\n /**\n * Будет вызвано при окончательном закрытии модалки.\n */\n onClosed?: VoidFunction;\n /**\n * Управляющие элементы под кнопкой закрытия.\n *\n * Доступно только в `compact`-режиме. Рекомендуется размещать иконки размера 20, обернутые в ModalOutsideButton.\n *\n */\n outsideButtons?: React.ReactNode;\n /**\n * Позволяет отключить захват фокуса.\n *\n * Нужно использовать, когда поверх одной модалки открывается другая, чтобы два `FocusTrap` не конфликтовали.\n */\n disableFocusTrap?: UseFocusTrapProps['disabled'];\n /**\n * Отключает отображение и взаимодействие с фоном модалки.\n * > При использовании `ModalPage` внутри `ModalRoot` есть особенность использования этого свойства.\n * > Об этом можно почитать на странице документации [`ModalRoot`](/components/modal-root#disable-modal-overlay).\n */\n disableModalOverlay?: boolean;\n /**\n * Отключает анимацию открытия модалки.\n */\n disableOpenAnimation?: boolean;\n /**\n * Отключает анимацию закрытия модалки.\n */\n disableCloseAnimation?: boolean;\n}\n"],"names":[],"mappings":"AAkBA,WAsIC"}
|
package/dist/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.d.ts
CHANGED
|
@@ -9,5 +9,5 @@ export type VisuallyHiddenModalOverlayProps = ModalOverlayProps;
|
|
|
9
9
|
*
|
|
10
10
|
* @private
|
|
11
11
|
*/
|
|
12
|
-
export declare const VisuallyHiddenModalOverlay: ({ visible: visibleExcluded, position: positionExcluded, getRootRef, ...restProps }: VisuallyHiddenModalOverlayProps) => import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export declare const VisuallyHiddenModalOverlay: ({ visible: visibleExcluded, position: positionExcluded, getRootRef, disableOpenAnimation, disableCloseAnimation, ...restProps }: VisuallyHiddenModalOverlayProps) => import("react/jsx-runtime").JSX.Element;
|
|
13
13
|
//# sourceMappingURL=VisuallyHiddenModalOverlay.d.ts.map
|
package/dist/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VisuallyHiddenModalOverlay.d.ts","sourceRoot":"","sources":["../../../../src/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAIzE,MAAM,MAAM,+BAA+B,GAAG,iBAAiB,CAAC;AAEhE;;;;;;;;GAQG;AACH,eAAO,MAAM,0BAA0B,GAAI,
|
|
1
|
+
{"version":3,"file":"VisuallyHiddenModalOverlay.d.ts","sourceRoot":"","sources":["../../../../src/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAIzE,MAAM,MAAM,+BAA+B,GAAG,iBAAiB,CAAC;AAEhE;;;;;;;;GAQG;AACH,eAAO,MAAM,0BAA0B,GAAI,iIAOxC,+BAA+B,4CAYjC,CAAC"}
|
|
@@ -15,10 +15,12 @@ import { ModalRootOverlayContext } from "../ModalRootContext.js";
|
|
|
15
15
|
*
|
|
16
16
|
* @private
|
|
17
17
|
*/ export const VisuallyHiddenModalOverlay = (_param)=>{
|
|
18
|
-
var { visible: visibleExcluded, position: positionExcluded, getRootRef } = _param, restProps = _object_without_properties(_param, [
|
|
18
|
+
var { visible: visibleExcluded, position: positionExcluded, getRootRef, disableOpenAnimation, disableCloseAnimation } = _param, restProps = _object_without_properties(_param, [
|
|
19
19
|
"visible",
|
|
20
20
|
"position",
|
|
21
|
-
"getRootRef"
|
|
21
|
+
"getRootRef",
|
|
22
|
+
"disableOpenAnimation",
|
|
23
|
+
"disableCloseAnimation"
|
|
22
24
|
]);
|
|
23
25
|
const ref = useContext(ModalRootOverlayContext);
|
|
24
26
|
return /*#__PURE__*/ _jsx("div", _object_spread_props(_object_spread({}, restProps), {
|
package/dist/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.tsx"],"sourcesContent":["'use client';\n\nimport { useContext } from 'react';\nimport { setRef } from '../../../lib/utils';\nimport type { ModalOverlayProps } from '../../ModalOverlay/ModalOverlay';\nimport { ModalRootOverlayContext } from '../ModalRootContext';\nimport styles from './VisuallyHiddenModalOverlay.module.css';\n\nexport type VisuallyHiddenModalOverlayProps = ModalOverlayProps;\n\n/**\n * `ModalRoot` выставляет общий `ModalOverlay` для всех потомков, и чтобы не нарушить логику\n * в `ModalPage` и `ModalCard`, в них прокидывается данный компонент, который визуально не виден,\n * но при этом на нём сохраняется возможность взаимодействия.\n *\n * В `getRooRef` отдаёт ссылку на DOM общего `ModalOverlay`.\n *\n * @private\n */\nexport const VisuallyHiddenModalOverlay = ({\n visible: visibleExcluded,\n position: positionExcluded,\n getRootRef,\n ...restProps\n}: VisuallyHiddenModalOverlayProps) => {\n const ref = useContext(ModalRootOverlayContext);\n return (\n <div\n {...restProps}\n aria-hidden=\"true\"\n className={styles.host}\n ref={function handleCurrentRefForForwardContextRef() {\n setRef(ref.current, getRootRef);\n }}\n />\n );\n};\n"],"names":["useContext","setRef","ModalRootOverlayContext","VisuallyHiddenModalOverlay","visible","visibleExcluded","position","positionExcluded","getRootRef","restProps","ref","div","aria-hidden","className","handleCurrentRefForForwardContextRef","current"],"mappings":"AAAA;;;;;AAEA,SAASA,UAAU,QAAQ,QAAQ;AACnC,SAASC,MAAM,QAAQ,wBAAqB;AAE5C,SAASC,uBAAuB,QAAQ,yBAAsB;AAK9D;;;;;;;;CAQC,GACD,OAAO,MAAMC,6BAA6B;QAAC,EACzCC,SAASC,eAAe,EACxBC,UAAUC,gBAAgB,EAC1BC,UAAU,
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.tsx"],"sourcesContent":["'use client';\n\nimport { useContext } from 'react';\nimport { setRef } from '../../../lib/utils';\nimport type { ModalOverlayProps } from '../../ModalOverlay/ModalOverlay';\nimport { ModalRootOverlayContext } from '../ModalRootContext';\nimport styles from './VisuallyHiddenModalOverlay.module.css';\n\nexport type VisuallyHiddenModalOverlayProps = ModalOverlayProps;\n\n/**\n * `ModalRoot` выставляет общий `ModalOverlay` для всех потомков, и чтобы не нарушить логику\n * в `ModalPage` и `ModalCard`, в них прокидывается данный компонент, который визуально не виден,\n * но при этом на нём сохраняется возможность взаимодействия.\n *\n * В `getRooRef` отдаёт ссылку на DOM общего `ModalOverlay`.\n *\n * @private\n */\nexport const VisuallyHiddenModalOverlay = ({\n visible: visibleExcluded,\n position: positionExcluded,\n getRootRef,\n disableOpenAnimation,\n disableCloseAnimation,\n ...restProps\n}: VisuallyHiddenModalOverlayProps) => {\n const ref = useContext(ModalRootOverlayContext);\n return (\n <div\n {...restProps}\n aria-hidden=\"true\"\n className={styles.host}\n ref={function handleCurrentRefForForwardContextRef() {\n setRef(ref.current, getRootRef);\n }}\n />\n );\n};\n"],"names":["useContext","setRef","ModalRootOverlayContext","VisuallyHiddenModalOverlay","visible","visibleExcluded","position","positionExcluded","getRootRef","disableOpenAnimation","disableCloseAnimation","restProps","ref","div","aria-hidden","className","handleCurrentRefForForwardContextRef","current"],"mappings":"AAAA;;;;;AAEA,SAASA,UAAU,QAAQ,QAAQ;AACnC,SAASC,MAAM,QAAQ,wBAAqB;AAE5C,SAASC,uBAAuB,QAAQ,yBAAsB;AAK9D;;;;;;;;CAQC,GACD,OAAO,MAAMC,6BAA6B;QAAC,EACzCC,SAASC,eAAe,EACxBC,UAAUC,gBAAgB,EAC1BC,UAAU,EACVC,oBAAoB,EACpBC,qBAAqB,EAEW,WAD7BC;QALHP;QACAE;QACAE;QACAC;QACAC;;IAGA,MAAME,MAAMZ,WAAWE;IACvB,qBACE,KAACW,+CACKF;QACJG,eAAY;QACZC,SAAS;QACTH,KAAK,SAASI;YACZf,OAAOW,IAAIK,OAAO,EAAET;QACtB;;AAGN,EAAE"}
|
|
@@ -27,6 +27,10 @@ export interface PopperCommonProps extends AllowedFloatingComponentProps, Omit<H
|
|
|
27
27
|
* Подписывается на изменение геометрии `targetRef`, чтобы пересчитать свою позицию.
|
|
28
28
|
*/
|
|
29
29
|
autoUpdateOnTargetResize?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Пытаться обновлять позицию всплывающего элемента каждый фрейм.
|
|
32
|
+
*/
|
|
33
|
+
autoUpdateOnAnimationFrame?: boolean;
|
|
30
34
|
}
|
|
31
35
|
export interface PopperProps extends PopperCommonProps {
|
|
32
36
|
/**
|
|
@@ -37,6 +41,6 @@ export interface PopperProps extends PopperCommonProps {
|
|
|
37
41
|
/**
|
|
38
42
|
* @see https://vkui.io/components/popper
|
|
39
43
|
*/
|
|
40
|
-
export declare const Popper: ({ placement: placementProp, sameWidth, hideWhenReferenceHidden, offsetByMainAxis, offsetByCrossAxis, arrow, arrowHeight, arrowPadding, customMiddlewares, disableFlipMiddleware, disableShiftMiddleware, flipMiddlewareFallbackAxisSideDirection, autoUpdateOnTargetResize, strategy: strategyProp, arrowProps, ArrowIcon, targetRef, getRootRef, children, usePortal, onPlacementChange, onReferenceHiddenChange, zIndex, style, ...restProps }: PopperProps) => React.ReactNode;
|
|
44
|
+
export declare const Popper: ({ placement: placementProp, sameWidth, hideWhenReferenceHidden, offsetByMainAxis, offsetByCrossAxis, arrow, arrowHeight, arrowPadding, customMiddlewares, disableFlipMiddleware, disableShiftMiddleware, flipMiddlewareFallbackAxisSideDirection, autoUpdateOnTargetResize, autoUpdateOnAnimationFrame, strategy: strategyProp, arrowProps, ArrowIcon, targetRef, getRootRef, children, usePortal, onPlacementChange, onReferenceHiddenChange, zIndex, style, ...restProps }: PopperProps) => React.ReactNode;
|
|
41
45
|
export {};
|
|
42
46
|
//# sourceMappingURL=Popper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Popper.d.ts","sourceRoot":"","sources":["../../../src/components/Popper/Popper.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAGL,KAAK,sBAAsB,EAI3B,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAO7D,OAAO,EAEL,KAAK,kBAAkB,IAAI,yBAAyB,EACrD,MAAM,gCAAgC,CAAC;AAIxC,MAAM,MAAM,kBAAkB,GAAG,IAAI,CACnC,yBAAyB,EACzB,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,CAC/C,CAAC;AAEF,KAAK,6BAA6B,GAAG,IAAI,CACvC,sBAAsB,EACpB,OAAO,GACP,UAAU,GACV,aAAa,GACb,cAAc,GACd,YAAY,GACZ,WAAW,GACX,kBAAkB,GAClB,mBAAmB,GACnB,OAAO,GACP,eAAe,GACf,cAAc,GACd,yBAAyB,GACzB,yBAAyB,GACzB,WAAW,GACX,QAAQ,GACR,UAAU,GACV,WAAW,GACX,mBAAmB,GACnB,mBAAmB,GACnB,uBAAuB,GACvB,wBAAwB,GACxB,yCAAyC,CAC5C,CAAC;AAEF,MAAM,WAAW,iBACf,SAAQ,6BAA6B,EACnC,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,EAAE,MAAM,6BAA6B,CAAC;IACtF;;OAEG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,EAAE,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAC9C;;OAEG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Popper.d.ts","sourceRoot":"","sources":["../../../src/components/Popper/Popper.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAGL,KAAK,sBAAsB,EAI3B,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAO7D,OAAO,EAEL,KAAK,kBAAkB,IAAI,yBAAyB,EACrD,MAAM,gCAAgC,CAAC;AAIxC,MAAM,MAAM,kBAAkB,GAAG,IAAI,CACnC,yBAAyB,EACzB,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,CAC/C,CAAC;AAEF,KAAK,6BAA6B,GAAG,IAAI,CACvC,sBAAsB,EACpB,OAAO,GACP,UAAU,GACV,aAAa,GACb,cAAc,GACd,YAAY,GACZ,WAAW,GACX,kBAAkB,GAClB,mBAAmB,GACnB,OAAO,GACP,eAAe,GACf,cAAc,GACd,yBAAyB,GACzB,yBAAyB,GACzB,WAAW,GACX,QAAQ,GACR,UAAU,GACV,WAAW,GACX,mBAAmB,GACnB,mBAAmB,GACnB,uBAAuB,GACvB,wBAAwB,GACxB,yCAAyC,CAC5C,CAAC;AAEF,MAAM,WAAW,iBACf,SAAQ,6BAA6B,EACnC,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,EAAE,MAAM,6BAA6B,CAAC;IACtF;;OAEG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,EAAE,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAC9C;;OAEG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC;;OAEG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC;AAED,MAAM,WAAW,WAAY,SAAQ,iBAAiB;IACpD;;OAEG;IACH,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,cAAc,CAAC;CACjE;AAED;;GAEG;AACH,eAAO,MAAM,MAAM,GAAI,8cAkCpB,WAAW,KAAG,KAAK,CAAC,SAsFtB,CAAC"}
|
|
@@ -18,7 +18,7 @@ import { RootComponent } from "../RootComponent/RootComponent.js";
|
|
|
18
18
|
*/ export const Popper = (_param)=>{
|
|
19
19
|
var { // UseFloatingMiddlewaresBootstrapProps
|
|
20
20
|
placement: placementProp = 'bottom-start', sameWidth, hideWhenReferenceHidden, offsetByMainAxis = 8, offsetByCrossAxis = 0, arrow, arrowHeight = DEFAULT_ARROW_HEIGHT, arrowPadding = DEFAULT_ARROW_PADDING, customMiddlewares, disableFlipMiddleware = false, disableShiftMiddleware = false, flipMiddlewareFallbackAxisSideDirection, // UseFloatingProps
|
|
21
|
-
autoUpdateOnTargetResize = false, strategy: strategyProp, // ArrowProps
|
|
21
|
+
autoUpdateOnTargetResize = false, autoUpdateOnAnimationFrame = false, strategy: strategyProp, // ArrowProps
|
|
22
22
|
arrowProps, ArrowIcon = DefaultIcon, // rest
|
|
23
23
|
targetRef, getRootRef, children, usePortal = true, onPlacementChange, onReferenceHiddenChange, zIndex, style } = _param, restProps = _object_without_properties(_param, [
|
|
24
24
|
"placement",
|
|
@@ -34,6 +34,7 @@ import { RootComponent } from "../RootComponent/RootComponent.js";
|
|
|
34
34
|
"disableShiftMiddleware",
|
|
35
35
|
"flipMiddlewareFallbackAxisSideDirection",
|
|
36
36
|
"autoUpdateOnTargetResize",
|
|
37
|
+
"autoUpdateOnAnimationFrame",
|
|
37
38
|
"strategy",
|
|
38
39
|
"arrowProps",
|
|
39
40
|
"ArrowIcon",
|
|
@@ -68,7 +69,8 @@ import { RootComponent } from "../RootComponent/RootComponent.js";
|
|
|
68
69
|
middleware: middlewares,
|
|
69
70
|
whileElementsMounted (...args) {
|
|
70
71
|
/* istanbul ignore next: не знаю как проверить */ return autoUpdateFloatingElement(...args, {
|
|
71
|
-
elementResize: autoUpdateOnTargetResize
|
|
72
|
+
elementResize: autoUpdateOnTargetResize,
|
|
73
|
+
animationFrame: autoUpdateOnAnimationFrame
|
|
72
74
|
});
|
|
73
75
|
}
|
|
74
76
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/Popper/Popper.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { mergeStyle } from '../../helpers/mergeStyle';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport {\n autoUpdateFloatingElement,\n convertFloatingDataToReactCSSProperties,\n type FloatingComponentProps,\n useFloating,\n useFloatingMiddlewaresBootstrap,\n usePlacementChangeCallback,\n type VirtualElement,\n} from '../../lib/floating';\nimport { useReferenceHiddenChangeCallback } from '../../lib/floating/useReferenceHiddenChangeCallback';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { AppRootPortal } from '../AppRoot/AppRootPortal';\nimport {\n DEFAULT_ARROW_HEIGHT,\n DEFAULT_ARROW_PADDING,\n DefaultIcon,\n} from '../FloatingArrow/DefaultIcon';\nimport {\n FloatingArrow,\n type FloatingArrowProps as FloatingArrowPropsPrivate,\n} from '../FloatingArrow/FloatingArrow';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport styles from './Popper.module.css';\n\nexport type FloatingArrowProps = Omit<\n FloatingArrowPropsPrivate,\n 'getRootRef' | 'coords' | 'placement' | 'Icon'\n>;\n\ntype AllowedFloatingComponentProps = Pick<\n FloatingComponentProps,\n | 'arrow'\n | 'arrowRef'\n | 'arrowHeight'\n | 'arrowPadding'\n | 'hoverDelay'\n | 'placement'\n | 'offsetByMainAxis'\n | 'offsetByCrossAxis'\n | 'shown'\n | 'onShownChange'\n | 'defaultShown'\n | 'hideWhenReferenceHidden'\n | 'onReferenceHiddenChange'\n | 'sameWidth'\n | 'zIndex'\n | 'strategy'\n | 'usePortal'\n | 'customMiddlewares'\n | 'onPlacementChange'\n | 'disableFlipMiddleware'\n | 'disableShiftMiddleware'\n | 'flipMiddlewareFallbackAxisSideDirection'\n>;\n\nexport interface PopperCommonProps\n extends AllowedFloatingComponentProps,\n Omit<HTMLAttributesWithRootRef<HTMLDivElement>, keyof AllowedFloatingComponentProps> {\n /**\n * Позволяет набросить на стрелку пользовательские атрибуты.\n */\n arrowProps?: FloatingArrowProps;\n /**\n * Пользовательская SVG иконка.\n *\n * Требования:\n *\n * 1. Иконка по умолчанию должна быть направлена вверх (a.k.a `IconUp`).\n * 2. Чтобы избежать проблемы с пространством между стрелкой и контентом на некоторых экранах,\n * растяните кривую по высоте на `1px` и увеличьте на этот размер `height` и `viewBox` SVG.\n * (смотри https://github.com/VKCOM/VKUI/pull/4496).\n * 3. Передайте высоту иконки в параметр `arrowHeight`. В значении высоты можно исключить хак с `1px` из п.2.\n * 4. Убедитесь, что компонент принимает все валидные для SVG параметры.\n * 5. Убедитесь, что SVG и её элементы наследует цвет через `fill=\"currentColor\"`.\n */\n ArrowIcon?: FloatingArrowPropsPrivate['Icon'];\n /**\n * Подписывается на изменение геометрии `targetRef`, чтобы пересчитать свою позицию.\n */\n autoUpdateOnTargetResize?: boolean;\n}\n\nexport interface PopperProps extends PopperCommonProps {\n /**\n * Ref на якорный элемент.\n */\n targetRef: React.RefObject<HTMLElement | null> | VirtualElement;\n}\n\n/**\n * @see https://vkui.io/components/popper\n */\nexport const Popper = ({\n // UseFloatingMiddlewaresBootstrapProps\n placement: placementProp = 'bottom-start',\n sameWidth,\n hideWhenReferenceHidden,\n offsetByMainAxis = 8,\n offsetByCrossAxis = 0,\n arrow,\n arrowHeight = DEFAULT_ARROW_HEIGHT,\n arrowPadding = DEFAULT_ARROW_PADDING,\n customMiddlewares,\n disableFlipMiddleware = false,\n disableShiftMiddleware = false,\n flipMiddlewareFallbackAxisSideDirection,\n\n // UseFloatingProps\n autoUpdateOnTargetResize = false,\n strategy: strategyProp,\n\n // ArrowProps\n arrowProps,\n ArrowIcon = DefaultIcon,\n\n // rest\n targetRef,\n getRootRef,\n children,\n usePortal = true,\n onPlacementChange,\n onReferenceHiddenChange,\n zIndex,\n style,\n ...restProps\n}: PopperProps): React.ReactNode => {\n const [arrowRef, setArrowRef] = React.useState<HTMLDivElement | null>(null);\n\n const { strictPlacement, middlewares } = useFloatingMiddlewaresBootstrap({\n placement: placementProp,\n sameWidth,\n arrow,\n arrowRef,\n arrowHeight,\n arrowPadding,\n offsetByMainAxis,\n offsetByCrossAxis,\n hideWhenReferenceHidden,\n customMiddlewares,\n disableFlipMiddleware,\n disableShiftMiddleware,\n flipMiddlewareFallbackAxisSideDirection,\n });\n\n const {\n x: floatingDataX,\n y: floatingDataY,\n strategy: floatingPositionStrategy,\n placement: resolvedPlacement,\n refs,\n middlewareData,\n } = useFloating({\n placement: strictPlacement,\n strategy: strategyProp,\n middleware: middlewares,\n whileElementsMounted(...args) {\n /* istanbul ignore next: не знаю как проверить */\n return autoUpdateFloatingElement(...args, {\n elementResize: autoUpdateOnTargetResize,\n });\n },\n });\n\n usePlacementChangeCallback(placementProp, resolvedPlacement, onPlacementChange);\n\n useReferenceHiddenChangeCallback(middlewareData.hide, onReferenceHiddenChange);\n\n const { arrow: arrowCoords } = middlewareData;\n\n const handleRootRef = useExternRef<HTMLDivElement>(refs.setFloating, getRootRef);\n\n useIsomorphicLayoutEffect(() => {\n refs.setReference('current' in targetRef ? targetRef.current : targetRef);\n }, [refs.setReference, targetRef]);\n\n const dropdownStyle =\n typeof zIndex !== 'undefined'\n ? {\n zIndex,\n }\n : undefined;\n\n const dropdown = (\n <RootComponent\n {...restProps}\n style={mergeStyle(dropdownStyle, style)}\n baseClassName={styles.host}\n getRootRef={handleRootRef}\n baseStyle={convertFloatingDataToReactCSSProperties({\n strategy: floatingPositionStrategy,\n x: floatingDataX,\n y: floatingDataY,\n initialWidth: sameWidth ? null : undefined,\n middlewareData,\n })}\n >\n {arrow && (\n <FloatingArrow\n {...arrowProps}\n coords={arrowCoords}\n placement={resolvedPlacement}\n getRootRef={setArrowRef}\n Icon={ArrowIcon}\n />\n )}\n {children}\n </RootComponent>\n );\n\n return <AppRootPortal usePortal={usePortal}>{dropdown}</AppRootPortal>;\n};\n"],"names":["React","mergeStyle","useExternRef","autoUpdateFloatingElement","convertFloatingDataToReactCSSProperties","useFloating","useFloatingMiddlewaresBootstrap","usePlacementChangeCallback","useReferenceHiddenChangeCallback","useIsomorphicLayoutEffect","AppRootPortal","DEFAULT_ARROW_HEIGHT","DEFAULT_ARROW_PADDING","DefaultIcon","FloatingArrow","RootComponent","Popper","placement","placementProp","sameWidth","hideWhenReferenceHidden","offsetByMainAxis","offsetByCrossAxis","arrow","arrowHeight","arrowPadding","customMiddlewares","disableFlipMiddleware","disableShiftMiddleware","flipMiddlewareFallbackAxisSideDirection","autoUpdateOnTargetResize","strategy","strategyProp","arrowProps","ArrowIcon","targetRef","getRootRef","children","usePortal","onPlacementChange","onReferenceHiddenChange","zIndex","style","restProps","arrowRef","setArrowRef","useState","strictPlacement","middlewares","x","floatingDataX","y","floatingDataY","floatingPositionStrategy","resolvedPlacement","refs","middlewareData","middleware","whileElementsMounted","args","elementResize","hide","arrowCoords","handleRootRef","setFloating","setReference","current","dropdownStyle","undefined","dropdown","baseClassName","baseStyle","initialWidth","coords","Icon"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/Popper/Popper.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { mergeStyle } from '../../helpers/mergeStyle';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport {\n autoUpdateFloatingElement,\n convertFloatingDataToReactCSSProperties,\n type FloatingComponentProps,\n useFloating,\n useFloatingMiddlewaresBootstrap,\n usePlacementChangeCallback,\n type VirtualElement,\n} from '../../lib/floating';\nimport { useReferenceHiddenChangeCallback } from '../../lib/floating/useReferenceHiddenChangeCallback';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { AppRootPortal } from '../AppRoot/AppRootPortal';\nimport {\n DEFAULT_ARROW_HEIGHT,\n DEFAULT_ARROW_PADDING,\n DefaultIcon,\n} from '../FloatingArrow/DefaultIcon';\nimport {\n FloatingArrow,\n type FloatingArrowProps as FloatingArrowPropsPrivate,\n} from '../FloatingArrow/FloatingArrow';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport styles from './Popper.module.css';\n\nexport type FloatingArrowProps = Omit<\n FloatingArrowPropsPrivate,\n 'getRootRef' | 'coords' | 'placement' | 'Icon'\n>;\n\ntype AllowedFloatingComponentProps = Pick<\n FloatingComponentProps,\n | 'arrow'\n | 'arrowRef'\n | 'arrowHeight'\n | 'arrowPadding'\n | 'hoverDelay'\n | 'placement'\n | 'offsetByMainAxis'\n | 'offsetByCrossAxis'\n | 'shown'\n | 'onShownChange'\n | 'defaultShown'\n | 'hideWhenReferenceHidden'\n | 'onReferenceHiddenChange'\n | 'sameWidth'\n | 'zIndex'\n | 'strategy'\n | 'usePortal'\n | 'customMiddlewares'\n | 'onPlacementChange'\n | 'disableFlipMiddleware'\n | 'disableShiftMiddleware'\n | 'flipMiddlewareFallbackAxisSideDirection'\n>;\n\nexport interface PopperCommonProps\n extends AllowedFloatingComponentProps,\n Omit<HTMLAttributesWithRootRef<HTMLDivElement>, keyof AllowedFloatingComponentProps> {\n /**\n * Позволяет набросить на стрелку пользовательские атрибуты.\n */\n arrowProps?: FloatingArrowProps;\n /**\n * Пользовательская SVG иконка.\n *\n * Требования:\n *\n * 1. Иконка по умолчанию должна быть направлена вверх (a.k.a `IconUp`).\n * 2. Чтобы избежать проблемы с пространством между стрелкой и контентом на некоторых экранах,\n * растяните кривую по высоте на `1px` и увеличьте на этот размер `height` и `viewBox` SVG.\n * (смотри https://github.com/VKCOM/VKUI/pull/4496).\n * 3. Передайте высоту иконки в параметр `arrowHeight`. В значении высоты можно исключить хак с `1px` из п.2.\n * 4. Убедитесь, что компонент принимает все валидные для SVG параметры.\n * 5. Убедитесь, что SVG и её элементы наследует цвет через `fill=\"currentColor\"`.\n */\n ArrowIcon?: FloatingArrowPropsPrivate['Icon'];\n /**\n * Подписывается на изменение геометрии `targetRef`, чтобы пересчитать свою позицию.\n */\n autoUpdateOnTargetResize?: boolean;\n /**\n * Пытаться обновлять позицию всплывающего элемента каждый фрейм.\n */\n autoUpdateOnAnimationFrame?: boolean;\n}\n\nexport interface PopperProps extends PopperCommonProps {\n /**\n * Ref на якорный элемент.\n */\n targetRef: React.RefObject<HTMLElement | null> | VirtualElement;\n}\n\n/**\n * @see https://vkui.io/components/popper\n */\nexport const Popper = ({\n // UseFloatingMiddlewaresBootstrapProps\n placement: placementProp = 'bottom-start',\n sameWidth,\n hideWhenReferenceHidden,\n offsetByMainAxis = 8,\n offsetByCrossAxis = 0,\n arrow,\n arrowHeight = DEFAULT_ARROW_HEIGHT,\n arrowPadding = DEFAULT_ARROW_PADDING,\n customMiddlewares,\n disableFlipMiddleware = false,\n disableShiftMiddleware = false,\n flipMiddlewareFallbackAxisSideDirection,\n\n // UseFloatingProps\n autoUpdateOnTargetResize = false,\n autoUpdateOnAnimationFrame = false,\n strategy: strategyProp,\n\n // ArrowProps\n arrowProps,\n ArrowIcon = DefaultIcon,\n\n // rest\n targetRef,\n getRootRef,\n children,\n usePortal = true,\n onPlacementChange,\n onReferenceHiddenChange,\n zIndex,\n style,\n ...restProps\n}: PopperProps): React.ReactNode => {\n const [arrowRef, setArrowRef] = React.useState<HTMLDivElement | null>(null);\n\n const { strictPlacement, middlewares } = useFloatingMiddlewaresBootstrap({\n placement: placementProp,\n sameWidth,\n arrow,\n arrowRef,\n arrowHeight,\n arrowPadding,\n offsetByMainAxis,\n offsetByCrossAxis,\n hideWhenReferenceHidden,\n customMiddlewares,\n disableFlipMiddleware,\n disableShiftMiddleware,\n flipMiddlewareFallbackAxisSideDirection,\n });\n\n const {\n x: floatingDataX,\n y: floatingDataY,\n strategy: floatingPositionStrategy,\n placement: resolvedPlacement,\n refs,\n middlewareData,\n } = useFloating({\n placement: strictPlacement,\n strategy: strategyProp,\n middleware: middlewares,\n whileElementsMounted(...args) {\n /* istanbul ignore next: не знаю как проверить */\n return autoUpdateFloatingElement(...args, {\n elementResize: autoUpdateOnTargetResize,\n animationFrame: autoUpdateOnAnimationFrame,\n });\n },\n });\n\n usePlacementChangeCallback(placementProp, resolvedPlacement, onPlacementChange);\n\n useReferenceHiddenChangeCallback(middlewareData.hide, onReferenceHiddenChange);\n\n const { arrow: arrowCoords } = middlewareData;\n\n const handleRootRef = useExternRef<HTMLDivElement>(refs.setFloating, getRootRef);\n\n useIsomorphicLayoutEffect(() => {\n refs.setReference('current' in targetRef ? targetRef.current : targetRef);\n }, [refs.setReference, targetRef]);\n\n const dropdownStyle =\n typeof zIndex !== 'undefined'\n ? {\n zIndex,\n }\n : undefined;\n\n const dropdown = (\n <RootComponent\n {...restProps}\n style={mergeStyle(dropdownStyle, style)}\n baseClassName={styles.host}\n getRootRef={handleRootRef}\n baseStyle={convertFloatingDataToReactCSSProperties({\n strategy: floatingPositionStrategy,\n x: floatingDataX,\n y: floatingDataY,\n initialWidth: sameWidth ? null : undefined,\n middlewareData,\n })}\n >\n {arrow && (\n <FloatingArrow\n {...arrowProps}\n coords={arrowCoords}\n placement={resolvedPlacement}\n getRootRef={setArrowRef}\n Icon={ArrowIcon}\n />\n )}\n {children}\n </RootComponent>\n );\n\n return <AppRootPortal usePortal={usePortal}>{dropdown}</AppRootPortal>;\n};\n"],"names":["React","mergeStyle","useExternRef","autoUpdateFloatingElement","convertFloatingDataToReactCSSProperties","useFloating","useFloatingMiddlewaresBootstrap","usePlacementChangeCallback","useReferenceHiddenChangeCallback","useIsomorphicLayoutEffect","AppRootPortal","DEFAULT_ARROW_HEIGHT","DEFAULT_ARROW_PADDING","DefaultIcon","FloatingArrow","RootComponent","Popper","placement","placementProp","sameWidth","hideWhenReferenceHidden","offsetByMainAxis","offsetByCrossAxis","arrow","arrowHeight","arrowPadding","customMiddlewares","disableFlipMiddleware","disableShiftMiddleware","flipMiddlewareFallbackAxisSideDirection","autoUpdateOnTargetResize","autoUpdateOnAnimationFrame","strategy","strategyProp","arrowProps","ArrowIcon","targetRef","getRootRef","children","usePortal","onPlacementChange","onReferenceHiddenChange","zIndex","style","restProps","arrowRef","setArrowRef","useState","strictPlacement","middlewares","x","floatingDataX","y","floatingDataY","floatingPositionStrategy","resolvedPlacement","refs","middlewareData","middleware","whileElementsMounted","args","elementResize","animationFrame","hide","arrowCoords","handleRootRef","setFloating","setReference","current","dropdownStyle","undefined","dropdown","baseClassName","baseStyle","initialWidth","coords","Icon"],"mappings":"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"}
|