@hh.ru/magritte-internal-drop-base 7.1.15 → 7.1.17
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/DropBase.d.ts +1 -1
- package/DropBase.js +5 -4
- package/DropBase.js.map +1 -1
- package/index.css +1 -1
- package/package.json +4 -4
- package/types.d.ts +1 -1
package/DropBase.d.ts
CHANGED
|
@@ -18,7 +18,7 @@ declare const DropBase: import("react").ForwardRefExoticComponent<{
|
|
|
18
18
|
exit?: number | undefined;
|
|
19
19
|
};
|
|
20
20
|
guardDistanceToActivator?: number;
|
|
21
|
-
role?:
|
|
21
|
+
role?: React.AriaRole;
|
|
22
22
|
widthEqualToActivator?: boolean;
|
|
23
23
|
keyboardNavigationMode?: import("@hh.ru/magritte-common-keyboard").KeyboardNavigationMode | null;
|
|
24
24
|
ignoreIntersections?: boolean;
|
package/DropBase.js
CHANGED
|
@@ -4,7 +4,7 @@ import { forwardRef, useRef, useState, useEffect } from 'react';
|
|
|
4
4
|
import { createPortal } from 'react-dom';
|
|
5
5
|
import { CSSTransition } from 'react-transition-group';
|
|
6
6
|
import classnames from 'classnames';
|
|
7
|
-
import { useEscapeToClose, useKeyboardNavigation, findNextFocusableElement } from '@hh.ru/magritte-common-keyboard';
|
|
7
|
+
import { useEscapeToClose, useKeyboardNavigation, findNextFocusableElement, isTextElement } from '@hh.ru/magritte-common-keyboard';
|
|
8
8
|
import { useCloseByClickOutside } from '@hh.ru/magritte-common-mouse';
|
|
9
9
|
import { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';
|
|
10
10
|
import { useNoBubbling } from '@hh.ru/magritte-common-use-no-bubbling';
|
|
@@ -15,7 +15,7 @@ import { ThemeWrapper } from '@hh.ru/magritte-ui-theme-wrapper';
|
|
|
15
15
|
import './findBestFitPlacement.js';
|
|
16
16
|
import './useMonitorResize.js';
|
|
17
17
|
|
|
18
|
-
var styles = {"drop-base":"magritte-drop-base___uJNG4_7-1-
|
|
18
|
+
var styles = {"drop-base":"magritte-drop-base___uJNG4_7-1-17","dropBase":"magritte-drop-base___uJNG4_7-1-17"};
|
|
19
19
|
|
|
20
20
|
const DropBaseComponent = ({ visible, children, arrowGuardDistance, activatorRef, preferredViewport, onClose, autoFocusWhenOpened = false, closeByClickOutside = true, animationTimeout, animationClassNames, guardDistanceToActivator = 8, guardDistanceToViewport = 24, minHeight = 200, role, widthEqualToActivator = false, allowShrinkHeightToFitIntoViewport = false, keyboardNavigationMode = null, ignoreIntersections = false, style = {}, onAppear, onBeforeExit, onAfterExit, host, placement, forceDropMetricsUpdate, lockPlacement = false, ...props }, ref) => {
|
|
21
21
|
const dropNodeRef = useRef(null);
|
|
@@ -46,7 +46,8 @@ const DropBaseComponent = ({ visible, children, arrowGuardDistance, activatorRef
|
|
|
46
46
|
useEffect(() => {
|
|
47
47
|
if (autoFocusWhenOpened && dropNodeRef.current !== null && isVisibleDropDown && !lockClickOutside) {
|
|
48
48
|
const nextFocusableElement = findNextFocusableElement(dropNodeRef.current, null, 'down', 'list');
|
|
49
|
-
|
|
49
|
+
const focusedByKeyboard = document.activeElement?.matches(':focus-visible');
|
|
50
|
+
if (nextFocusableElement !== null && (focusedByKeyboard || isTextElement(nextFocusableElement))) {
|
|
50
51
|
nextFocusableElement.focus();
|
|
51
52
|
}
|
|
52
53
|
else {
|
|
@@ -58,7 +59,7 @@ const DropBaseComponent = ({ visible, children, arrowGuardDistance, activatorRef
|
|
|
58
59
|
createPortal(jsx(CSSTransition, { in: visible, onEntered: () => {
|
|
59
60
|
setLockClickOutside(false);
|
|
60
61
|
onAppear?.();
|
|
61
|
-
}, onExited: onAfterExit, onExit: onBeforeExit, timeout: animationTimeout, classNames: animationClassNames, unmountOnExit: true, appear: true, nodeRef: dropNodeRef, children: jsx(ThemeWrapper, { children: (themeClass) => (jsx("div", { ...props, ...eventHandlers, "data-qa": "drop-base", tabIndex:
|
|
62
|
+
}, onExited: onAfterExit, onExit: onBeforeExit, timeout: animationTimeout, classNames: animationClassNames, unmountOnExit: true, appear: true, nodeRef: dropNodeRef, children: jsx(ThemeWrapper, { children: (themeClass) => (jsx("div", { ...props, ...eventHandlers, "data-qa": "drop-base", tabIndex: -1, className: classnames(styles.dropBase, themeClass), ref: dropNodeRefCallback, style: {
|
|
62
63
|
...style,
|
|
63
64
|
...(bestFitPlacementRect || {}),
|
|
64
65
|
}, role: role, children: children(resizeRefCallbackFactory) })) }) }), host?.current ?? document.body) }));
|
package/DropBase.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropBase.js","sources":["../src/DropBase.tsx"],"sourcesContent":["import {\n ForwardedRef,\n ReactElement,\n forwardRef,\n useEffect,\n useRef,\n useState,\n MutableRefObject,\n RefObject,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { CSSTransition } from 'react-transition-group';\nimport classnames from 'classnames';\n\nimport {
|
|
1
|
+
{"version":3,"file":"DropBase.js","sources":["../src/DropBase.tsx"],"sourcesContent":["import {\n ForwardedRef,\n ReactElement,\n forwardRef,\n useEffect,\n useRef,\n useState,\n MutableRefObject,\n RefObject,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { CSSTransition } from 'react-transition-group';\nimport classnames from 'classnames';\n\nimport {\n findNextFocusableElement,\n isTextElement,\n useEscapeToClose,\n useKeyboardNavigation,\n} from '@hh.ru/magritte-common-keyboard';\nimport { useCloseByClickOutside } from '@hh.ru/magritte-common-mouse';\nimport { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';\nimport { useNoBubbling } from '@hh.ru/magritte-common-use-no-bubbling';\nimport { useWhenFontLoaded } from '@hh.ru/magritte-common-use-when-font-loaded';\nimport { useIntersectionSubscription } from '@hh.ru/magritte-internal-drop-base/intersectionManager';\nimport { usePositionManager } from '@hh.ru/magritte-internal-drop-base/positionManager';\nimport type { DropBasePermanentProps } from '@hh.ru/magritte-internal-drop-base/types';\nimport { ThemeWrapper } from '@hh.ru/magritte-ui-theme-wrapper';\n\nimport styles from './styles.less';\n\n// Этот тип описан отдельно, чтобы данный проп не просачивался в Drop и Tooltip\ntype DropMetricsForceUpdateRef = { forceDropMetricsUpdate?: RefObject<VoidFunction> | MutableRefObject<VoidFunction> };\ntype DropBaseComponentProps = DropBasePermanentProps & DropMetricsForceUpdateRef;\n\nconst DropBaseComponent = (\n {\n visible,\n children,\n arrowGuardDistance,\n activatorRef,\n preferredViewport,\n onClose,\n autoFocusWhenOpened = false,\n closeByClickOutside = true,\n animationTimeout,\n animationClassNames,\n guardDistanceToActivator = 8,\n guardDistanceToViewport = 24,\n minHeight = 200,\n role,\n widthEqualToActivator = false,\n allowShrinkHeightToFitIntoViewport = false,\n keyboardNavigationMode = null,\n ignoreIntersections = false,\n style = {},\n onAppear,\n onBeforeExit,\n onAfterExit,\n host,\n placement,\n forceDropMetricsUpdate,\n lockPlacement = false,\n ...props\n }: DropBaseComponentProps,\n ref: ForwardedRef<HTMLElement>\n): ReactElement => {\n const dropNodeRef = useRef<HTMLDivElement>(null);\n const [renderPortal, setRenderPortal] = useState(false);\n const isVisibleDropDown = !!(renderPortal && visible);\n const [lockClickOutside, setLockClickOutside] = useState(true);\n\n useWhenFontLoaded(() => setRenderPortal(true));\n\n const { bestFitPlacementRect, resizeRefCallbackFactory } = usePositionManager(\n activatorRef,\n dropNodeRef,\n isVisibleDropDown,\n placement,\n preferredViewport,\n allowShrinkHeightToFitIntoViewport,\n widthEqualToActivator,\n arrowGuardDistance || {},\n guardDistanceToActivator,\n guardDistanceToViewport,\n minHeight,\n forceDropMetricsUpdate as MutableRefObject<VoidFunction>,\n lockPlacement\n );\n useIntersectionSubscription(activatorRef, isVisibleDropDown, ignoreIntersections, () => {\n onClose?.();\n });\n\n const escapeToCloseRef = useEscapeToClose(onClose);\n const keyboardNavigationRef = useKeyboardNavigation(\n keyboardNavigationMode !== null\n ? { enabled: isVisibleDropDown, mode: keyboardNavigationMode }\n : { enabled: false }\n );\n const dropNodeRefCallback = useMultipleRefs(ref, dropNodeRef, keyboardNavigationRef, escapeToCloseRef);\n\n useCloseByClickOutside(\n dropNodeRef,\n () => {\n if (isVisibleDropDown && !lockClickOutside && activatorRef.current !== document.activeElement) {\n onClose?.();\n }\n },\n closeByClickOutside\n );\n\n const eventHandlers = useNoBubbling(props);\n\n useEffect(() => {\n if (!isVisibleDropDown) {\n setLockClickOutside(true);\n }\n }, [isVisibleDropDown, setLockClickOutside]);\n\n useEffect(() => {\n if (autoFocusWhenOpened && dropNodeRef.current !== null && isVisibleDropDown && !lockClickOutside) {\n const nextFocusableElement = findNextFocusableElement(dropNodeRef.current, null, 'down', 'list');\n const focusedByKeyboard = document.activeElement?.matches(':focus-visible');\n if (nextFocusableElement !== null && (focusedByKeyboard || isTextElement(nextFocusableElement))) {\n nextFocusableElement.focus();\n } else {\n dropNodeRef.current.focus();\n }\n }\n }, [autoFocusWhenOpened, isVisibleDropDown, lockClickOutside]);\n\n return (\n <>\n {renderPortal &&\n createPortal(\n <CSSTransition\n in={visible}\n onEntered={() => {\n setLockClickOutside(false);\n onAppear?.();\n }}\n onExited={onAfterExit}\n onExit={onBeforeExit}\n timeout={animationTimeout}\n classNames={animationClassNames}\n unmountOnExit\n appear\n nodeRef={dropNodeRef}\n >\n <ThemeWrapper>\n {(themeClass) => (\n <div\n {...props}\n {...eventHandlers}\n data-qa=\"drop-base\"\n tabIndex={-1}\n className={classnames(styles.dropBase, themeClass)}\n ref={dropNodeRefCallback}\n style={{\n ...style,\n ...(bestFitPlacementRect || {}),\n }}\n role={role}\n >\n {children(resizeRefCallbackFactory)}\n </div>\n )}\n </ThemeWrapper>\n </CSSTransition>,\n host?.current ?? document.body\n )}\n </>\n );\n};\n\nconst DropBase = forwardRef<HTMLElement, DropBaseComponentProps>(DropBaseComponent);\n\nexport { DropBase };\n"],"names":["_jsx"],"mappings":"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"}
|
package/index.css
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hh.ru/magritte-internal-drop-base",
|
|
3
|
-
"version": "7.1.
|
|
3
|
+
"version": "7.1.17",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"types": "index.d.ts",
|
|
6
6
|
"sideEffects": [
|
|
@@ -19,12 +19,12 @@
|
|
|
19
19
|
"watch": "yarn root:watch $(pwd)"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@hh.ru/magritte-common-keyboard": "4.
|
|
22
|
+
"@hh.ru/magritte-common-keyboard": "4.3.0",
|
|
23
23
|
"@hh.ru/magritte-common-mouse": "1.1.18",
|
|
24
24
|
"@hh.ru/magritte-common-use-multiple-refs": "1.1.10",
|
|
25
25
|
"@hh.ru/magritte-common-use-no-bubbling": "1.0.7",
|
|
26
26
|
"@hh.ru/magritte-common-use-when-font-loaded": "1.0.13",
|
|
27
|
-
"@hh.ru/magritte-ui-theme-wrapper": "1.1.
|
|
27
|
+
"@hh.ru/magritte-ui-theme-wrapper": "1.1.11"
|
|
28
28
|
},
|
|
29
29
|
"peerDependencies": {
|
|
30
30
|
"classnames": "2.3.2",
|
|
@@ -35,5 +35,5 @@
|
|
|
35
35
|
"publishConfig": {
|
|
36
36
|
"access": "public"
|
|
37
37
|
},
|
|
38
|
-
"gitHead": "
|
|
38
|
+
"gitHead": "dbdbcad65f9d7dc14f074ed3e1e83a48d1ef832c"
|
|
39
39
|
}
|
package/types.d.ts
CHANGED
|
@@ -49,7 +49,7 @@ export type DropBasePermanentProps = {
|
|
|
49
49
|
/** Защитное расстояние в px от активатора до DropBase */
|
|
50
50
|
guardDistanceToActivator?: number;
|
|
51
51
|
/** Aria role для задания семантики в screen reader */
|
|
52
|
-
role?:
|
|
52
|
+
role?: React.AriaRole;
|
|
53
53
|
/** Флаг включающий автоматическое выставление ширины равной ширине активатора */
|
|
54
54
|
widthEqualToActivator?: boolean;
|
|
55
55
|
/**
|