@hh.ru/magritte-internal-drop-base 5.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DropBase.d.ts +8 -0
- package/DropBase.js +124 -0
- package/DropBase.js.map +1 -0
- package/calculateRect.d.ts +18 -0
- package/calculateRect.js +319 -0
- package/calculateRect.js.map +1 -0
- package/index.css +4 -0
- package/index.d.ts +3 -0
- package/index.js +17 -0
- package/index.js.map +1 -0
- package/intersectionManager.d.ts +2 -0
- package/intersectionManager.js +77 -0
- package/intersectionManager.js.map +1 -0
- package/package.json +38 -0
- package/scrollManager.d.ts +7 -0
- package/scrollManager.js +131 -0
- package/scrollManager.js.map +1 -0
- package/types.d.ts +210 -0
- package/types.js +3 -0
- package/types.js.map +1 -0
- package/useRenderParams.d.ts +53 -0
- package/useRenderParams.js +335 -0
- package/useRenderParams.js.map +1 -0
package/DropBase.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ReactElement, ForwardedRef } from 'react';
|
|
2
|
+
import type { DropBaseProps, DropBaseHorizontalPosition, DropBaseVerticalPosition, DropBaseHorizontalPositionWithoutCenter, DropBaseVerticalPositionWithoutCenter } from './types';
|
|
3
|
+
declare const DropBase: (<T extends DropBaseHorizontalPosition | DropBaseVerticalPosition | DropBaseVerticalPositionWithoutCenter | DropBaseHorizontalPositionWithoutCenter>(props: import("./types").DropBasePermanentProps & T & {
|
|
4
|
+
ref?: ForwardedRef<HTMLElement> | undefined;
|
|
5
|
+
}) => ReactElement) & {
|
|
6
|
+
displayName: string;
|
|
7
|
+
};
|
|
8
|
+
export { DropBase };
|
package/DropBase.js
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import './index.css';
|
|
2
|
+
import { jsx, Fragment } from 'react/jsx-runtime';
|
|
3
|
+
import { forwardRef, useRef, useState, useEffect } from 'react';
|
|
4
|
+
import { createPortal } from 'react-dom';
|
|
5
|
+
import { CSSTransition } from 'react-transition-group';
|
|
6
|
+
import { useEscapeToClose, useArrowNavigation } from '@hh.ru/magritte-common-keyboard';
|
|
7
|
+
import { useCloseByClickOutside } from '@hh.ru/magritte-common-mouse';
|
|
8
|
+
import { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';
|
|
9
|
+
import { useWhenFontLoaded } from '@hh.ru/magritte-common-use-when-font-loaded';
|
|
10
|
+
import { useIntersectionSubscription } from './intersectionManager.js';
|
|
11
|
+
import { useScrollSubscription } from './scrollManager.js';
|
|
12
|
+
import { useRenderParams } from './useRenderParams.js';
|
|
13
|
+
import '@hh.ru/magritte-common-func-utils';
|
|
14
|
+
import '@hh.ru/magritte-common-metrics';
|
|
15
|
+
import './calculateRect.js';
|
|
16
|
+
|
|
17
|
+
var styles = {"drop-base":"magritte-drop-base___uJNG4_5-0-4","dropBase":"magritte-drop-base___uJNG4_5-0-4"};
|
|
18
|
+
|
|
19
|
+
const EVENTS_TO_PREVENT_BUBBLING = [
|
|
20
|
+
'onClick',
|
|
21
|
+
'onContextMenu',
|
|
22
|
+
'onDoubleClick',
|
|
23
|
+
'onMouseDown',
|
|
24
|
+
'onMouseEnter',
|
|
25
|
+
'onMouseLeave',
|
|
26
|
+
'onMouseMove',
|
|
27
|
+
'onMouseOver',
|
|
28
|
+
'onMouseOut',
|
|
29
|
+
'onMouseUp',
|
|
30
|
+
'onKeyDown',
|
|
31
|
+
'onKeyPress',
|
|
32
|
+
'onKeyUp',
|
|
33
|
+
'onBlur',
|
|
34
|
+
'onChange',
|
|
35
|
+
'onFocus',
|
|
36
|
+
'onInput',
|
|
37
|
+
'onInvalid',
|
|
38
|
+
'onReset',
|
|
39
|
+
'onSelect',
|
|
40
|
+
'onSubmit',
|
|
41
|
+
'onDrag',
|
|
42
|
+
'onDragEnd',
|
|
43
|
+
'onDragEnter',
|
|
44
|
+
'onDragLeave',
|
|
45
|
+
'onDragOver',
|
|
46
|
+
'onDragStart',
|
|
47
|
+
'onDrop',
|
|
48
|
+
'onCopy',
|
|
49
|
+
'onCut',
|
|
50
|
+
'onPaste',
|
|
51
|
+
'onWheel',
|
|
52
|
+
'onTouchCancel',
|
|
53
|
+
'onTouchEnd',
|
|
54
|
+
'onTouchMove',
|
|
55
|
+
'onTouchStart',
|
|
56
|
+
];
|
|
57
|
+
const bubblingCancelHandler = (event) => event.stopPropagation();
|
|
58
|
+
const preventBubblingProps = EVENTS_TO_PREVENT_BUBBLING.reduce((result, eventName) => {
|
|
59
|
+
result[eventName] = bubblingCancelHandler;
|
|
60
|
+
return result;
|
|
61
|
+
}, {});
|
|
62
|
+
const DropBaseComponent = ({ visible, children, arrowGuardDistance, activatorRef, host, alignment, direction, preferredViewport, onClose, autoFocusWhenOpened = false, closeByClickOutside = true, animationTimeout, animationClassNames, guardDistance = 8, role, occupyAllAvailableViewportHeight = false, forcePosition = false, widthEqualToActivator = false, arrowNavigation = false, ignoreIntersections = false, style = {}, ...props }, ref) => {
|
|
63
|
+
const dropNodeRef = useRef(null);
|
|
64
|
+
const dropScrollableContainerRef = useRef(null);
|
|
65
|
+
const [renderPortal, setRenderPortal] = useState(false);
|
|
66
|
+
const isVisibleDropDown = !!(renderPortal && visible);
|
|
67
|
+
const [lockClickOutside, setLockClickOutside] = useState(true);
|
|
68
|
+
useWhenFontLoaded(() => setRenderPortal(true));
|
|
69
|
+
const { metrics, position } = useRenderParams({
|
|
70
|
+
alignment,
|
|
71
|
+
direction,
|
|
72
|
+
activatorRef,
|
|
73
|
+
dropElementRef: dropNodeRef,
|
|
74
|
+
host,
|
|
75
|
+
arrowGuardDistance,
|
|
76
|
+
preferredViewport,
|
|
77
|
+
visible: isVisibleDropDown,
|
|
78
|
+
guardDistance,
|
|
79
|
+
occupyAllAvailableViewportHeight,
|
|
80
|
+
dropScrollableContainerRef,
|
|
81
|
+
forcePosition,
|
|
82
|
+
widthEqualToActivator,
|
|
83
|
+
});
|
|
84
|
+
useScrollSubscription(activatorRef, dropNodeRef, isVisibleDropDown);
|
|
85
|
+
useIntersectionSubscription(activatorRef, isVisibleDropDown, ignoreIntersections, () => {
|
|
86
|
+
onClose?.();
|
|
87
|
+
});
|
|
88
|
+
const escapeToCloseRef = useEscapeToClose(onClose);
|
|
89
|
+
const arrowNavigationRef = useArrowNavigation({
|
|
90
|
+
enabled: isVisibleDropDown && arrowNavigation,
|
|
91
|
+
});
|
|
92
|
+
const dropNodeRefCallback = useMultipleRefs(ref, dropNodeRef, arrowNavigationRef, escapeToCloseRef);
|
|
93
|
+
useCloseByClickOutside(dropNodeRef, () => {
|
|
94
|
+
if (isVisibleDropDown && !lockClickOutside && activatorRef.current !== document.activeElement) {
|
|
95
|
+
onClose?.();
|
|
96
|
+
}
|
|
97
|
+
}, closeByClickOutside);
|
|
98
|
+
useEffect(() => {
|
|
99
|
+
if (!isVisibleDropDown) {
|
|
100
|
+
setLockClickOutside(true);
|
|
101
|
+
}
|
|
102
|
+
}, [isVisibleDropDown, setLockClickOutside]);
|
|
103
|
+
useEffect(() => {
|
|
104
|
+
if (autoFocusWhenOpened && isVisibleDropDown && !lockClickOutside) {
|
|
105
|
+
dropNodeRef.current?.focus();
|
|
106
|
+
}
|
|
107
|
+
}, [autoFocusWhenOpened, isVisibleDropDown, lockClickOutside]);
|
|
108
|
+
return (jsx(Fragment, { children: renderPortal &&
|
|
109
|
+
createPortal(jsx(CSSTransition, { in: visible, onEntered: () => {
|
|
110
|
+
setLockClickOutside(false);
|
|
111
|
+
}, timeout: animationTimeout, classNames: animationClassNames, unmountOnExit: true, nodeRef: dropNodeRef, children: jsx("div", { ...props, ...preventBubblingProps, "data-qa": "drop-base", tabIndex: autoFocusWhenOpened ? 0 : -1, className: styles.dropBase, ref: dropNodeRefCallback, style: {
|
|
112
|
+
...style,
|
|
113
|
+
top: `${metrics.top}px`,
|
|
114
|
+
left: `${metrics.left}px`,
|
|
115
|
+
}, role: role, children: children(position, {
|
|
116
|
+
metrics,
|
|
117
|
+
dropScrollableContainerRef,
|
|
118
|
+
}) }) }), host?.current ?? document.body) }));
|
|
119
|
+
};
|
|
120
|
+
const DropBase = forwardRef(DropBaseComponent);
|
|
121
|
+
DropBase.displayName = 'DropBase';
|
|
122
|
+
|
|
123
|
+
export { DropBase };
|
|
124
|
+
//# sourceMappingURL=DropBase.js.map
|
package/DropBase.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DropBase.js","sources":["../src/DropBase.tsx"],"sourcesContent":["import { useEffect, ReactElement, useRef, useState, forwardRef, ForwardedRef, ReactEventHandler } from 'react';\nimport { createPortal } from 'react-dom';\nimport { CSSTransition } from 'react-transition-group';\n\nimport { useEscapeToClose, useArrowNavigation } 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 { useWhenFontLoaded } from '@hh.ru/magritte-common-use-when-font-loaded';\nimport { useIntersectionSubscription } from '@hh.ru/magritte-internal-drop-base/intersectionManager';\nimport { useScrollSubscription } from '@hh.ru/magritte-internal-drop-base/scrollManager';\nimport type {\n DropBaseProps,\n DropBaseHorizontalPosition,\n DropBaseVerticalPosition,\n DropBaseHorizontalPositionWithoutCenter,\n DropBaseVerticalPositionWithoutCenter,\n} from '@hh.ru/magritte-internal-drop-base/types';\nimport { useRenderParams } from '@hh.ru/magritte-internal-drop-base/useRenderParams';\n\nimport styles from './styles.less';\n\nconst EVENTS_TO_PREVENT_BUBBLING = [\n 'onClick',\n 'onContextMenu',\n 'onDoubleClick',\n 'onMouseDown',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseMove',\n 'onMouseOver',\n 'onMouseOut',\n 'onMouseUp',\n 'onKeyDown',\n 'onKeyPress',\n 'onKeyUp',\n 'onBlur',\n 'onChange',\n 'onFocus',\n 'onInput',\n 'onInvalid',\n 'onReset',\n 'onSelect',\n 'onSubmit',\n 'onDrag',\n 'onDragEnd',\n 'onDragEnter',\n 'onDragLeave',\n 'onDragOver',\n 'onDragStart',\n 'onDrop',\n 'onCopy',\n 'onCut',\n 'onPaste',\n 'onWheel',\n 'onTouchCancel',\n 'onTouchEnd',\n 'onTouchMove',\n 'onTouchStart',\n] as const;\n\nconst bubblingCancelHandler: ReactEventHandler = (event) => event.stopPropagation();\nconst preventBubblingProps = EVENTS_TO_PREVENT_BUBBLING.reduce((result, eventName) => {\n result[eventName] = bubblingCancelHandler;\n return result;\n}, {} as Record<(typeof EVENTS_TO_PREVENT_BUBBLING)[number], ReactEventHandler>);\n\nconst DropBaseComponent = <\n T extends\n | DropBaseHorizontalPosition\n | DropBaseVerticalPosition\n | DropBaseHorizontalPositionWithoutCenter\n | DropBaseVerticalPositionWithoutCenter\n>(\n {\n visible,\n children,\n arrowGuardDistance,\n activatorRef,\n host,\n alignment,\n direction,\n preferredViewport,\n onClose,\n autoFocusWhenOpened = false,\n closeByClickOutside = true,\n animationTimeout,\n animationClassNames,\n guardDistance = 8,\n role,\n occupyAllAvailableViewportHeight = false,\n forcePosition = false,\n widthEqualToActivator = false,\n arrowNavigation = false,\n ignoreIntersections = false,\n style = {},\n ...props\n }: DropBaseProps<T>,\n ref: ForwardedRef<HTMLElement>\n): ReactElement => {\n const dropNodeRef = useRef<HTMLDivElement>(null);\n const dropScrollableContainerRef = useRef(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 { metrics, position } = useRenderParams({\n alignment,\n direction,\n activatorRef,\n dropElementRef: dropNodeRef,\n host,\n arrowGuardDistance,\n preferredViewport,\n visible: isVisibleDropDown,\n guardDistance,\n occupyAllAvailableViewportHeight,\n dropScrollableContainerRef,\n forcePosition,\n widthEqualToActivator,\n });\n\n useScrollSubscription(activatorRef, dropNodeRef, isVisibleDropDown);\n useIntersectionSubscription(activatorRef, isVisibleDropDown, ignoreIntersections, () => {\n onClose?.();\n });\n\n const escapeToCloseRef = useEscapeToClose(onClose);\n const arrowNavigationRef = useArrowNavigation({\n enabled: isVisibleDropDown && arrowNavigation,\n });\n const dropNodeRefCallback = useMultipleRefs(ref, dropNodeRef, arrowNavigationRef, escapeToCloseRef);\n\n useCloseByClickOutside(\n dropNodeRef,\n () => {\n if (isVisibleDropDown && !lockClickOutside && activatorRef.current !== document.activeElement) {\n onClose?.();\n }\n },\n closeByClickOutside\n );\n\n useEffect(() => {\n if (!isVisibleDropDown) {\n setLockClickOutside(true);\n }\n }, [isVisibleDropDown, setLockClickOutside]);\n\n useEffect(() => {\n if (autoFocusWhenOpened && isVisibleDropDown && !lockClickOutside) {\n dropNodeRef.current?.focus();\n }\n }, [autoFocusWhenOpened, isVisibleDropDown, lockClickOutside]);\n\n return (\n <>\n {renderPortal &&\n createPortal(\n <CSSTransition\n in={visible}\n onEntered={() => {\n setLockClickOutside(false);\n }}\n timeout={animationTimeout}\n classNames={animationClassNames}\n unmountOnExit\n nodeRef={dropNodeRef}\n >\n <div\n {...props}\n {...preventBubblingProps}\n data-qa=\"drop-base\"\n tabIndex={autoFocusWhenOpened ? 0 : -1}\n className={styles.dropBase}\n ref={dropNodeRefCallback}\n style={{\n ...style,\n top: `${metrics.top}px`,\n left: `${metrics.left}px`,\n }}\n role={role}\n >\n {children(position, {\n metrics,\n dropScrollableContainerRef,\n })}\n </div>\n </CSSTransition>,\n host?.current ?? document.body\n )}\n </>\n );\n};\n\nconst DropBase = forwardRef(DropBaseComponent) as (<\n T extends\n | DropBaseHorizontalPosition\n | DropBaseVerticalPosition\n | DropBaseHorizontalPositionWithoutCenter\n | DropBaseVerticalPositionWithoutCenter\n>(\n props: DropBaseProps<T> & { ref?: ForwardedRef<HTMLElement> }\n) => ReactElement) & { displayName: string };\n\nDropBase.displayName = 'DropBase';\n\nexport { DropBase };\n"],"names":["_jsx"],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { BaseAlignPosition, CalculateRect, CalculateRectType, DropBaseHorizontalPosition, DropBaseVerticalPosition } from './types';
|
|
2
|
+
export declare const VIEWPORT_GUARD_DISTANCE = 16;
|
|
3
|
+
/**
|
|
4
|
+
* API для расчета метрик дропдауна и viewport | контейнера в котором
|
|
5
|
+
* хотим рисовать дропдаун. Cчитает метрики в случае - когда direction = VerticalPosition.
|
|
6
|
+
* Т.е. дропдаун показываем снизу или сверху активатора.
|
|
7
|
+
* Предоставляем три публичных метода для расположения относительно края активатора:
|
|
8
|
+
* left - выравнивание по левому краю
|
|
9
|
+
* right - выравнивание по правому краю
|
|
10
|
+
* center - выравнивание по центру
|
|
11
|
+
* */
|
|
12
|
+
export declare const calculateRectForVerticalPosition: {
|
|
13
|
+
left: CalculateRect<DropBaseVerticalPosition['direction']>;
|
|
14
|
+
right: CalculateRect<DropBaseVerticalPosition['direction']>;
|
|
15
|
+
center: CalculateRect<DropBaseVerticalPosition['direction']>;
|
|
16
|
+
_baseAlign: BaseAlignPosition<DropBaseVerticalPosition['direction']>;
|
|
17
|
+
};
|
|
18
|
+
export declare const calculateRect: CalculateRectType<DropBaseHorizontalPosition> & CalculateRectType<DropBaseVerticalPosition>;
|
package/calculateRect.js
ADDED
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
import './index.css';
|
|
2
|
+
const VIEWPORT_GUARD_DISTANCE = 16;
|
|
3
|
+
const getPointToCenterActivator = ({ point, offsetPoint, contentSize, activatorSize, }) => point + offsetPoint - contentSize / 2 + activatorSize / 2;
|
|
4
|
+
/* Позволяет получить метрики drop, позицию относительно viewport
|
|
5
|
+
* для случая, когда дроп может занять всю доступную высоту viewport
|
|
6
|
+
* */
|
|
7
|
+
const calculateDropHeightAvailableViewport = {
|
|
8
|
+
top: ({ leftPositionForDrop, topPositionForViewport, preferredViewportMetrics, topPositionForDrop, dropMetrics, }) => {
|
|
9
|
+
const top = -(topPositionForViewport - preferredViewportMetrics.pageTop - topPositionForDrop) + VIEWPORT_GUARD_DISTANCE;
|
|
10
|
+
const _height = topPositionForViewport + dropMetrics.height - preferredViewportMetrics.pageTop - VIEWPORT_GUARD_DISTANCE;
|
|
11
|
+
const height = _height < dropMetrics.height ? dropMetrics.height : _height;
|
|
12
|
+
const _topPositionForViewport = topPositionForViewport + dropMetrics.height - height;
|
|
13
|
+
return {
|
|
14
|
+
top,
|
|
15
|
+
height,
|
|
16
|
+
left: leftPositionForDrop,
|
|
17
|
+
topPositionForViewport: _topPositionForViewport,
|
|
18
|
+
};
|
|
19
|
+
},
|
|
20
|
+
bottom: ({ leftPositionForDrop, topPositionForViewport, preferredViewportMetrics, topPositionForDrop, dropMetrics, }) => {
|
|
21
|
+
const _height = preferredViewportMetrics.height +
|
|
22
|
+
preferredViewportMetrics.pageTop -
|
|
23
|
+
topPositionForViewport -
|
|
24
|
+
VIEWPORT_GUARD_DISTANCE;
|
|
25
|
+
const height = _height < dropMetrics.height ? dropMetrics.height : _height;
|
|
26
|
+
return {
|
|
27
|
+
top: topPositionForDrop,
|
|
28
|
+
left: leftPositionForDrop,
|
|
29
|
+
height,
|
|
30
|
+
topPositionForViewport,
|
|
31
|
+
};
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Позволяет получить метрику top или left дропдауна и viewport или
|
|
36
|
+
* контейнера в котором хотим рисовать дропдаун. Считать нужно
|
|
37
|
+
* для top или left в зависимости от того противоположна ли метрика
|
|
38
|
+
* к direction. Т.е мы считает метрику top только
|
|
39
|
+
* для горизонтального направления, a left для вертикального
|
|
40
|
+
* */
|
|
41
|
+
const getEdgeOppositeDirection = ({ activatorPosition, viewportShift, activatorOffset, shift, isNegativeArrowShift, arrowGuardDistance, activatorSize, }) => {
|
|
42
|
+
let shiftArrow = 0;
|
|
43
|
+
if (arrowGuardDistance && activatorSize / 2 < arrowGuardDistance) {
|
|
44
|
+
shiftArrow = arrowGuardDistance - activatorSize / 2;
|
|
45
|
+
}
|
|
46
|
+
if (isNegativeArrowShift) {
|
|
47
|
+
shiftArrow = -shiftArrow;
|
|
48
|
+
}
|
|
49
|
+
const positionForDrop = shift + activatorOffset + shiftArrow;
|
|
50
|
+
const positionForViewport = shift + activatorPosition + viewportShift + shiftArrow;
|
|
51
|
+
return [positionForDrop, positionForViewport];
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Позволяет получить метрику top или left дропдауна и viewport
|
|
55
|
+
* или контейнера в котором хотим рисовать дропдаун. Считать нужно для top
|
|
56
|
+
* или left в зависимости от того совпдает ли метрика с direction.
|
|
57
|
+
* Т.е мы считает метрику top только для вертикального направления, a left
|
|
58
|
+
* для горизонтального направления
|
|
59
|
+
* */
|
|
60
|
+
const getEageCoincidingWithDirection = ({ activatorPosition, activatorSize, dropSize, viewportShift, isNegativePosition, activatorOffset, guardDistance, }) => {
|
|
61
|
+
let positionForViewport = 0;
|
|
62
|
+
let positionForDrop = 0;
|
|
63
|
+
if (isNegativePosition) {
|
|
64
|
+
positionForDrop = activatorOffset - guardDistance - dropSize;
|
|
65
|
+
positionForViewport = activatorPosition + viewportShift - guardDistance - dropSize;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
positionForDrop = activatorOffset + activatorSize + guardDistance;
|
|
69
|
+
positionForViewport = activatorPosition + viewportShift + activatorSize + guardDistance;
|
|
70
|
+
}
|
|
71
|
+
return [positionForDrop, positionForViewport];
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* API для расчета метрик дропдауна и viewport | контейнера в котором
|
|
75
|
+
* хотим рисовать дропдаун. Cчитает метрики в случае
|
|
76
|
+
* когда position = Horizontal.
|
|
77
|
+
* Т.е. дропдаун показываем cлева или справа от активатора.
|
|
78
|
+
* Предоставляем три публичных метода для расположения относительно края активатора:
|
|
79
|
+
* top - выравнивание по верхнему краю
|
|
80
|
+
* bottom - выравнивание по нижнему краю
|
|
81
|
+
* center - выравнивание по центру
|
|
82
|
+
* */
|
|
83
|
+
const calculateRectForHorizontalPosition = {
|
|
84
|
+
top({ activatorMetrics, dropMetrics, viewportMetrics, preferredViewportMetrics, direction, activatorOffset, guardDistance, arrowGuardDistance, occupyAllAvailableViewportHeight, }) {
|
|
85
|
+
const result = this._baseAlign({
|
|
86
|
+
activatorMetrics,
|
|
87
|
+
dropMetrics,
|
|
88
|
+
viewportMetrics,
|
|
89
|
+
direction,
|
|
90
|
+
isNegativeArrowShift: true,
|
|
91
|
+
activatorOffset,
|
|
92
|
+
shift: 0,
|
|
93
|
+
arrowGuardDistance,
|
|
94
|
+
guardDistance,
|
|
95
|
+
preferredViewportMetrics,
|
|
96
|
+
});
|
|
97
|
+
if (occupyAllAvailableViewportHeight) {
|
|
98
|
+
const metrics = calculateDropHeightAvailableViewport.bottom({
|
|
99
|
+
preferredViewportMetrics,
|
|
100
|
+
topPositionForViewport: result.top,
|
|
101
|
+
topPositionForDrop: result.dropMetrics.top,
|
|
102
|
+
leftPositionForDrop: result.dropMetrics.left,
|
|
103
|
+
dropMetrics,
|
|
104
|
+
});
|
|
105
|
+
return {
|
|
106
|
+
...result,
|
|
107
|
+
top: metrics.topPositionForViewport,
|
|
108
|
+
bottom: metrics.topPositionForViewport + metrics.height,
|
|
109
|
+
dropMetrics: {
|
|
110
|
+
top: metrics.top,
|
|
111
|
+
left: metrics.left,
|
|
112
|
+
height: metrics.height,
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
return result;
|
|
117
|
+
},
|
|
118
|
+
bottom({ activatorMetrics, dropMetrics, viewportMetrics, direction, activatorOffset, guardDistance, arrowGuardDistance, occupyAllAvailableViewportHeight, preferredViewportMetrics, }) {
|
|
119
|
+
const shift = dropMetrics.height - activatorMetrics.height;
|
|
120
|
+
const result = this._baseAlign({
|
|
121
|
+
activatorMetrics,
|
|
122
|
+
dropMetrics,
|
|
123
|
+
viewportMetrics,
|
|
124
|
+
direction,
|
|
125
|
+
activatorOffset,
|
|
126
|
+
shift: -shift,
|
|
127
|
+
arrowGuardDistance,
|
|
128
|
+
guardDistance,
|
|
129
|
+
preferredViewportMetrics,
|
|
130
|
+
});
|
|
131
|
+
if (occupyAllAvailableViewportHeight) {
|
|
132
|
+
const metrics = calculateDropHeightAvailableViewport.top({
|
|
133
|
+
preferredViewportMetrics,
|
|
134
|
+
topPositionForViewport: result.top,
|
|
135
|
+
topPositionForDrop: result.dropMetrics.top,
|
|
136
|
+
leftPositionForDrop: result.dropMetrics.left,
|
|
137
|
+
dropMetrics,
|
|
138
|
+
});
|
|
139
|
+
return {
|
|
140
|
+
top: metrics.topPositionForViewport,
|
|
141
|
+
left: result.left,
|
|
142
|
+
bottom: activatorMetrics.bottom,
|
|
143
|
+
right: result.right,
|
|
144
|
+
viewportMetrics,
|
|
145
|
+
dropMetrics: {
|
|
146
|
+
top: metrics.top,
|
|
147
|
+
left: metrics.left,
|
|
148
|
+
height: metrics.height,
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
return result;
|
|
153
|
+
},
|
|
154
|
+
center({ activatorMetrics, dropMetrics, viewportMetrics, direction, activatorOffset, guardDistance, preferredViewportMetrics, }) {
|
|
155
|
+
const pointToCenterActivator = getPointToCenterActivator({
|
|
156
|
+
point: 0,
|
|
157
|
+
offsetPoint: 0,
|
|
158
|
+
contentSize: dropMetrics.height,
|
|
159
|
+
activatorSize: activatorMetrics.height,
|
|
160
|
+
});
|
|
161
|
+
return this._baseAlign({
|
|
162
|
+
activatorMetrics,
|
|
163
|
+
dropMetrics,
|
|
164
|
+
viewportMetrics,
|
|
165
|
+
direction,
|
|
166
|
+
activatorOffset,
|
|
167
|
+
shift: pointToCenterActivator,
|
|
168
|
+
guardDistance,
|
|
169
|
+
preferredViewportMetrics,
|
|
170
|
+
});
|
|
171
|
+
},
|
|
172
|
+
_baseAlign({ activatorMetrics, dropMetrics, viewportMetrics, direction, activatorOffset, shift, arrowGuardDistance, isNegativeArrowShift = false, guardDistance, }) {
|
|
173
|
+
const [leftPositionForDrop, leftPositionForViewport] = getEageCoincidingWithDirection({
|
|
174
|
+
activatorPosition: activatorMetrics.left,
|
|
175
|
+
activatorSize: activatorMetrics.width,
|
|
176
|
+
dropSize: dropMetrics.width,
|
|
177
|
+
viewportShift: viewportMetrics.pageLeft,
|
|
178
|
+
isNegativePosition: direction === 'left',
|
|
179
|
+
activatorOffset: activatorOffset.offsetLeft,
|
|
180
|
+
guardDistance,
|
|
181
|
+
});
|
|
182
|
+
const [topPositionForDrop, topPositionForViewport] = getEdgeOppositeDirection({
|
|
183
|
+
activatorPosition: activatorMetrics.top,
|
|
184
|
+
viewportShift: viewportMetrics.pageTop,
|
|
185
|
+
activatorOffset: activatorOffset.offsetTop,
|
|
186
|
+
isNegativeArrowShift,
|
|
187
|
+
shift,
|
|
188
|
+
arrowGuardDistance,
|
|
189
|
+
activatorSize: activatorMetrics.height,
|
|
190
|
+
});
|
|
191
|
+
return {
|
|
192
|
+
top: topPositionForViewport,
|
|
193
|
+
left: leftPositionForViewport,
|
|
194
|
+
bottom: topPositionForViewport + dropMetrics.height,
|
|
195
|
+
right: leftPositionForViewport + dropMetrics.width,
|
|
196
|
+
dropMetrics: {
|
|
197
|
+
top: topPositionForDrop,
|
|
198
|
+
left: leftPositionForDrop,
|
|
199
|
+
height: 'auto',
|
|
200
|
+
},
|
|
201
|
+
viewportMetrics,
|
|
202
|
+
};
|
|
203
|
+
},
|
|
204
|
+
};
|
|
205
|
+
/**
|
|
206
|
+
* API для расчета метрик дропдауна и viewport | контейнера в котором
|
|
207
|
+
* хотим рисовать дропдаун. Cчитает метрики в случае - когда direction = VerticalPosition.
|
|
208
|
+
* Т.е. дропдаун показываем снизу или сверху активатора.
|
|
209
|
+
* Предоставляем три публичных метода для расположения относительно края активатора:
|
|
210
|
+
* left - выравнивание по левому краю
|
|
211
|
+
* right - выравнивание по правому краю
|
|
212
|
+
* center - выравнивание по центру
|
|
213
|
+
* */
|
|
214
|
+
const calculateRectForVerticalPosition = {
|
|
215
|
+
left({ activatorMetrics, dropMetrics, viewportMetrics, direction, activatorOffset, guardDistance, arrowGuardDistance, occupyAllAvailableViewportHeight, preferredViewportMetrics, }) {
|
|
216
|
+
return this._baseAlign({
|
|
217
|
+
activatorMetrics,
|
|
218
|
+
dropMetrics,
|
|
219
|
+
viewportMetrics,
|
|
220
|
+
direction,
|
|
221
|
+
activatorOffset,
|
|
222
|
+
shift: 0,
|
|
223
|
+
isNegativeArrowShift: true,
|
|
224
|
+
guardDistance,
|
|
225
|
+
arrowGuardDistance,
|
|
226
|
+
occupyAllAvailableViewportHeight,
|
|
227
|
+
preferredViewportMetrics,
|
|
228
|
+
});
|
|
229
|
+
},
|
|
230
|
+
right({ activatorMetrics, dropMetrics, viewportMetrics, direction, activatorOffset, guardDistance, arrowGuardDistance, occupyAllAvailableViewportHeight, preferredViewportMetrics, }) {
|
|
231
|
+
return this._baseAlign({
|
|
232
|
+
activatorMetrics,
|
|
233
|
+
dropMetrics,
|
|
234
|
+
viewportMetrics,
|
|
235
|
+
direction,
|
|
236
|
+
activatorOffset,
|
|
237
|
+
shift: -(dropMetrics.width - activatorMetrics.width),
|
|
238
|
+
arrowGuardDistance,
|
|
239
|
+
guardDistance,
|
|
240
|
+
occupyAllAvailableViewportHeight,
|
|
241
|
+
preferredViewportMetrics,
|
|
242
|
+
});
|
|
243
|
+
},
|
|
244
|
+
center({ activatorMetrics, dropMetrics, viewportMetrics, direction, activatorOffset, guardDistance, occupyAllAvailableViewportHeight, preferredViewportMetrics, }) {
|
|
245
|
+
const pointToCenterActivator = getPointToCenterActivator({
|
|
246
|
+
point: 0,
|
|
247
|
+
offsetPoint: 0,
|
|
248
|
+
contentSize: dropMetrics.width,
|
|
249
|
+
activatorSize: activatorMetrics.width,
|
|
250
|
+
});
|
|
251
|
+
return this._baseAlign({
|
|
252
|
+
activatorMetrics,
|
|
253
|
+
dropMetrics,
|
|
254
|
+
viewportMetrics,
|
|
255
|
+
direction,
|
|
256
|
+
activatorOffset,
|
|
257
|
+
shift: pointToCenterActivator,
|
|
258
|
+
guardDistance,
|
|
259
|
+
occupyAllAvailableViewportHeight,
|
|
260
|
+
preferredViewportMetrics,
|
|
261
|
+
});
|
|
262
|
+
},
|
|
263
|
+
_baseAlign({ activatorMetrics, dropMetrics, viewportMetrics, direction, activatorOffset, shift, arrowGuardDistance, isNegativeArrowShift = false, guardDistance, occupyAllAvailableViewportHeight, preferredViewportMetrics, }) {
|
|
264
|
+
const [topPositionForDrop, topPositionForViewport] = getEageCoincidingWithDirection({
|
|
265
|
+
activatorPosition: activatorMetrics.top,
|
|
266
|
+
activatorSize: activatorMetrics.height,
|
|
267
|
+
dropSize: dropMetrics.height,
|
|
268
|
+
viewportShift: viewportMetrics.pageTop,
|
|
269
|
+
isNegativePosition: direction !== 'bottom',
|
|
270
|
+
activatorOffset: activatorOffset.offsetTop,
|
|
271
|
+
guardDistance,
|
|
272
|
+
});
|
|
273
|
+
const [leftPositionForDrop, leftPositionForViewport] = getEdgeOppositeDirection({
|
|
274
|
+
activatorPosition: activatorMetrics.left,
|
|
275
|
+
viewportShift: viewportMetrics.pageLeft,
|
|
276
|
+
activatorOffset: activatorOffset.offsetLeft,
|
|
277
|
+
shift,
|
|
278
|
+
isNegativeArrowShift,
|
|
279
|
+
arrowGuardDistance,
|
|
280
|
+
activatorSize: activatorMetrics.width,
|
|
281
|
+
});
|
|
282
|
+
let metrics = {
|
|
283
|
+
topPositionForViewport,
|
|
284
|
+
top: topPositionForDrop,
|
|
285
|
+
left: leftPositionForDrop,
|
|
286
|
+
height: 0,
|
|
287
|
+
};
|
|
288
|
+
if (occupyAllAvailableViewportHeight) {
|
|
289
|
+
metrics = calculateDropHeightAvailableViewport[direction]({
|
|
290
|
+
topPositionForViewport,
|
|
291
|
+
preferredViewportMetrics,
|
|
292
|
+
topPositionForDrop,
|
|
293
|
+
dropMetrics,
|
|
294
|
+
leftPositionForDrop,
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
return {
|
|
298
|
+
top: metrics.topPositionForViewport,
|
|
299
|
+
left: leftPositionForViewport,
|
|
300
|
+
bottom: metrics.topPositionForViewport + (metrics.height !== 0 ? metrics.height : dropMetrics.height),
|
|
301
|
+
right: leftPositionForViewport + dropMetrics.width,
|
|
302
|
+
dropMetrics: {
|
|
303
|
+
top: metrics.top,
|
|
304
|
+
left: metrics.left,
|
|
305
|
+
height: metrics.height !== 0 ? metrics.height : 'auto',
|
|
306
|
+
},
|
|
307
|
+
viewportMetrics,
|
|
308
|
+
};
|
|
309
|
+
},
|
|
310
|
+
};
|
|
311
|
+
const calculateRect = {
|
|
312
|
+
left: calculateRectForHorizontalPosition,
|
|
313
|
+
right: calculateRectForHorizontalPosition,
|
|
314
|
+
top: calculateRectForVerticalPosition,
|
|
315
|
+
bottom: calculateRectForVerticalPosition,
|
|
316
|
+
};
|
|
317
|
+
|
|
318
|
+
export { VIEWPORT_GUARD_DISTANCE, calculateRect, calculateRectForVerticalPosition };
|
|
319
|
+
//# sourceMappingURL=calculateRect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculateRect.js","sources":["../src/calculateRect.ts"],"sourcesContent":["import {\n BaseAlignPosition,\n GetEageCoincidingWithDirectionArgs,\n GetEdgeOppositeDirectionArgs,\n GetPointToCenterActivator,\n CalculateRect,\n CalculateRectType,\n CalculateDropHeightAvailableViewportArgs,\n CalculateDropHeightAvailableViewportResult,\n DropBaseHorizontalPosition,\n DropBaseVerticalPosition,\n} from '@hh.ru/magritte-internal-drop-base/types';\n\nexport const VIEWPORT_GUARD_DISTANCE = 16;\n\nconst getPointToCenterActivator = ({\n point,\n offsetPoint,\n contentSize,\n activatorSize,\n}: GetPointToCenterActivator): number => point + offsetPoint - contentSize / 2 + activatorSize / 2;\n\n/* Позволяет получить метрики drop, позицию относительно viewport\n * для случая, когда дроп может занять всю доступную высоту viewport\n * */\nconst calculateDropHeightAvailableViewport: {\n top: CalculateDropHeightAvailableViewportArgs;\n bottom: CalculateDropHeightAvailableViewportArgs;\n} = {\n top: ({\n leftPositionForDrop,\n topPositionForViewport,\n preferredViewportMetrics,\n topPositionForDrop,\n dropMetrics,\n }) => {\n const top =\n -(topPositionForViewport - preferredViewportMetrics.pageTop - topPositionForDrop) + VIEWPORT_GUARD_DISTANCE;\n const _height =\n topPositionForViewport + dropMetrics.height - preferredViewportMetrics.pageTop - VIEWPORT_GUARD_DISTANCE;\n const height = _height < dropMetrics.height ? dropMetrics.height : _height;\n const _topPositionForViewport = topPositionForViewport + dropMetrics.height - height;\n\n return {\n top,\n height,\n left: leftPositionForDrop,\n topPositionForViewport: _topPositionForViewport,\n };\n },\n\n bottom: ({\n leftPositionForDrop,\n topPositionForViewport,\n preferredViewportMetrics,\n topPositionForDrop,\n dropMetrics,\n }) => {\n const _height =\n preferredViewportMetrics.height +\n preferredViewportMetrics.pageTop -\n topPositionForViewport -\n VIEWPORT_GUARD_DISTANCE;\n const height = _height < dropMetrics.height ? dropMetrics.height : _height;\n\n return {\n top: topPositionForDrop,\n left: leftPositionForDrop,\n height,\n topPositionForViewport,\n };\n },\n};\n\n/**\n * Позволяет получить метрику top или left дропдауна и viewport или\n * контейнера в котором хотим рисовать дропдаун. Считать нужно\n * для top или left в зависимости от того противоположна ли метрика\n * к direction. Т.е мы считает метрику top только\n * для горизонтального направления, a left для вертикального\n * */\nconst getEdgeOppositeDirection = ({\n activatorPosition,\n viewportShift,\n activatorOffset,\n shift,\n isNegativeArrowShift,\n arrowGuardDistance,\n activatorSize,\n}: GetEdgeOppositeDirectionArgs): [number, number] => {\n let shiftArrow = 0;\n\n if (arrowGuardDistance && activatorSize / 2 < arrowGuardDistance) {\n shiftArrow = arrowGuardDistance - activatorSize / 2;\n }\n\n if (isNegativeArrowShift) {\n shiftArrow = -shiftArrow;\n }\n\n const positionForDrop = shift + activatorOffset + shiftArrow;\n const positionForViewport = shift + activatorPosition + viewportShift + shiftArrow;\n\n return [positionForDrop, positionForViewport];\n};\n\n/**\n * Позволяет получить метрику top или left дропдауна и viewport\n * или контейнера в котором хотим рисовать дропдаун. Считать нужно для top\n * или left в зависимости от того совпдает ли метрика с direction.\n * Т.е мы считает метрику top только для вертикального направления, a left\n * для горизонтального направления\n * */\nconst getEageCoincidingWithDirection = ({\n activatorPosition,\n activatorSize,\n dropSize,\n viewportShift,\n isNegativePosition,\n activatorOffset,\n guardDistance,\n}: GetEageCoincidingWithDirectionArgs): [number, number] => {\n let positionForViewport = 0;\n let positionForDrop = 0;\n\n if (isNegativePosition) {\n positionForDrop = activatorOffset - guardDistance - dropSize;\n positionForViewport = activatorPosition + viewportShift - guardDistance - dropSize;\n } else {\n positionForDrop = activatorOffset + activatorSize + guardDistance;\n positionForViewport = activatorPosition + viewportShift + activatorSize + guardDistance;\n }\n\n return [positionForDrop, positionForViewport];\n};\n\n/**\n * API для расчета метрик дропдауна и viewport | контейнера в котором\n * хотим рисовать дропдаун. Cчитает метрики в случае\n * когда position = Horizontal.\n * Т.е. дропдаун показываем cлева или справа от активатора.\n * Предоставляем три публичных метода для расположения относительно края активатора:\n * top - выравнивание по верхнему краю\n * bottom - выравнивание по нижнему краю\n * center - выравнивание по центру\n * */\nconst calculateRectForHorizontalPosition: {\n top: CalculateRect<DropBaseHorizontalPosition['direction']>;\n bottom: CalculateRect<DropBaseHorizontalPosition['direction']>;\n center: CalculateRect<DropBaseHorizontalPosition['direction']>;\n _baseAlign: BaseAlignPosition<DropBaseHorizontalPosition['direction']>;\n} = {\n top({\n activatorMetrics,\n dropMetrics,\n viewportMetrics,\n preferredViewportMetrics,\n direction,\n activatorOffset,\n guardDistance,\n arrowGuardDistance,\n occupyAllAvailableViewportHeight,\n }) {\n const result = this._baseAlign({\n activatorMetrics,\n dropMetrics,\n viewportMetrics,\n direction,\n isNegativeArrowShift: true,\n activatorOffset,\n shift: 0,\n arrowGuardDistance,\n guardDistance,\n preferredViewportMetrics,\n });\n\n if (occupyAllAvailableViewportHeight) {\n const metrics = calculateDropHeightAvailableViewport.bottom({\n preferredViewportMetrics,\n topPositionForViewport: result.top,\n topPositionForDrop: result.dropMetrics.top,\n leftPositionForDrop: result.dropMetrics.left,\n dropMetrics,\n });\n\n return {\n ...result,\n top: metrics.topPositionForViewport,\n bottom: metrics.topPositionForViewport + metrics.height,\n dropMetrics: {\n top: metrics.top,\n left: metrics.left,\n height: metrics.height,\n },\n };\n }\n\n return result;\n },\n bottom({\n activatorMetrics,\n dropMetrics,\n viewportMetrics,\n direction,\n activatorOffset,\n guardDistance,\n arrowGuardDistance,\n occupyAllAvailableViewportHeight,\n preferredViewportMetrics,\n }) {\n const shift = dropMetrics.height - activatorMetrics.height;\n const result = this._baseAlign({\n activatorMetrics,\n dropMetrics,\n viewportMetrics,\n direction,\n activatorOffset,\n shift: -shift,\n arrowGuardDistance,\n guardDistance,\n preferredViewportMetrics,\n });\n\n if (occupyAllAvailableViewportHeight) {\n const metrics = calculateDropHeightAvailableViewport.top({\n preferredViewportMetrics,\n topPositionForViewport: result.top,\n topPositionForDrop: result.dropMetrics.top,\n leftPositionForDrop: result.dropMetrics.left,\n dropMetrics,\n });\n\n return {\n top: metrics.topPositionForViewport,\n left: result.left,\n bottom: activatorMetrics.bottom,\n right: result.right,\n viewportMetrics,\n dropMetrics: {\n top: metrics.top,\n left: metrics.left,\n height: metrics.height,\n },\n };\n }\n\n return result;\n },\n center({\n activatorMetrics,\n dropMetrics,\n viewportMetrics,\n direction,\n activatorOffset,\n guardDistance,\n preferredViewportMetrics,\n }) {\n const pointToCenterActivator = getPointToCenterActivator({\n point: 0,\n offsetPoint: 0,\n contentSize: dropMetrics.height,\n activatorSize: activatorMetrics.height,\n });\n\n return this._baseAlign({\n activatorMetrics,\n dropMetrics,\n viewportMetrics,\n direction,\n activatorOffset,\n shift: pointToCenterActivator,\n guardDistance,\n preferredViewportMetrics,\n });\n },\n _baseAlign({\n activatorMetrics,\n dropMetrics,\n viewportMetrics,\n direction,\n activatorOffset,\n shift,\n arrowGuardDistance,\n isNegativeArrowShift = false,\n guardDistance,\n }) {\n const [leftPositionForDrop, leftPositionForViewport] = getEageCoincidingWithDirection({\n activatorPosition: activatorMetrics.left,\n activatorSize: activatorMetrics.width,\n dropSize: dropMetrics.width,\n viewportShift: viewportMetrics.pageLeft,\n isNegativePosition: direction === 'left',\n activatorOffset: activatorOffset.offsetLeft,\n guardDistance,\n });\n\n const [topPositionForDrop, topPositionForViewport] = getEdgeOppositeDirection({\n activatorPosition: activatorMetrics.top,\n viewportShift: viewportMetrics.pageTop,\n activatorOffset: activatorOffset.offsetTop,\n isNegativeArrowShift,\n shift,\n arrowGuardDistance,\n activatorSize: activatorMetrics.height,\n });\n\n return {\n top: topPositionForViewport,\n left: leftPositionForViewport,\n bottom: topPositionForViewport + dropMetrics.height,\n right: leftPositionForViewport + dropMetrics.width,\n dropMetrics: {\n top: topPositionForDrop,\n left: leftPositionForDrop,\n height: 'auto',\n },\n viewportMetrics,\n };\n },\n};\n\n/**\n * API для расчета метрик дропдауна и viewport | контейнера в котором\n * хотим рисовать дропдаун. Cчитает метрики в случае - когда direction = VerticalPosition.\n * Т.е. дропдаун показываем снизу или сверху активатора.\n * Предоставляем три публичных метода для расположения относительно края активатора:\n * left - выравнивание по левому краю\n * right - выравнивание по правому краю\n * center - выравнивание по центру\n * */\nexport const calculateRectForVerticalPosition: {\n left: CalculateRect<DropBaseVerticalPosition['direction']>;\n right: CalculateRect<DropBaseVerticalPosition['direction']>;\n center: CalculateRect<DropBaseVerticalPosition['direction']>;\n _baseAlign: BaseAlignPosition<DropBaseVerticalPosition['direction']>;\n} = {\n left({\n activatorMetrics,\n dropMetrics,\n viewportMetrics,\n direction,\n activatorOffset,\n guardDistance,\n arrowGuardDistance,\n occupyAllAvailableViewportHeight,\n preferredViewportMetrics,\n }) {\n return this._baseAlign({\n activatorMetrics,\n dropMetrics,\n viewportMetrics,\n direction,\n activatorOffset,\n shift: 0,\n isNegativeArrowShift: true,\n guardDistance,\n arrowGuardDistance,\n occupyAllAvailableViewportHeight,\n preferredViewportMetrics,\n });\n },\n right({\n activatorMetrics,\n dropMetrics,\n viewportMetrics,\n direction,\n activatorOffset,\n guardDistance,\n arrowGuardDistance,\n occupyAllAvailableViewportHeight,\n preferredViewportMetrics,\n }) {\n return this._baseAlign({\n activatorMetrics,\n dropMetrics,\n viewportMetrics,\n direction,\n activatorOffset,\n shift: -(dropMetrics.width - activatorMetrics.width),\n arrowGuardDistance,\n guardDistance,\n occupyAllAvailableViewportHeight,\n preferredViewportMetrics,\n });\n },\n center({\n activatorMetrics,\n dropMetrics,\n viewportMetrics,\n direction,\n activatorOffset,\n guardDistance,\n occupyAllAvailableViewportHeight,\n preferredViewportMetrics,\n }) {\n const pointToCenterActivator = getPointToCenterActivator({\n point: 0,\n offsetPoint: 0,\n contentSize: dropMetrics.width,\n activatorSize: activatorMetrics.width,\n });\n\n return this._baseAlign({\n activatorMetrics,\n dropMetrics,\n viewportMetrics,\n direction,\n activatorOffset,\n shift: pointToCenterActivator,\n guardDistance,\n occupyAllAvailableViewportHeight,\n preferredViewportMetrics,\n });\n },\n _baseAlign({\n activatorMetrics,\n dropMetrics,\n viewportMetrics,\n direction,\n activatorOffset,\n shift,\n arrowGuardDistance,\n isNegativeArrowShift = false,\n guardDistance,\n occupyAllAvailableViewportHeight,\n preferredViewportMetrics,\n }) {\n const [topPositionForDrop, topPositionForViewport] = getEageCoincidingWithDirection({\n activatorPosition: activatorMetrics.top,\n activatorSize: activatorMetrics.height,\n dropSize: dropMetrics.height,\n viewportShift: viewportMetrics.pageTop,\n isNegativePosition: direction !== 'bottom',\n activatorOffset: activatorOffset.offsetTop,\n guardDistance,\n });\n\n const [leftPositionForDrop, leftPositionForViewport] = getEdgeOppositeDirection({\n activatorPosition: activatorMetrics.left,\n viewportShift: viewportMetrics.pageLeft,\n activatorOffset: activatorOffset.offsetLeft,\n shift,\n isNegativeArrowShift,\n arrowGuardDistance,\n activatorSize: activatorMetrics.width,\n });\n\n let metrics: CalculateDropHeightAvailableViewportResult = {\n topPositionForViewport,\n top: topPositionForDrop,\n left: leftPositionForDrop,\n height: 0,\n };\n\n if (occupyAllAvailableViewportHeight) {\n metrics = calculateDropHeightAvailableViewport[direction]({\n topPositionForViewport,\n preferredViewportMetrics,\n topPositionForDrop,\n dropMetrics,\n leftPositionForDrop,\n });\n }\n\n return {\n top: metrics.topPositionForViewport,\n left: leftPositionForViewport,\n bottom: metrics.topPositionForViewport + (metrics.height !== 0 ? metrics.height : dropMetrics.height),\n right: leftPositionForViewport + dropMetrics.width,\n dropMetrics: {\n top: metrics.top,\n left: metrics.left,\n height: metrics.height !== 0 ? metrics.height : 'auto',\n },\n viewportMetrics,\n };\n },\n};\n\nexport const calculateRect: CalculateRectType<DropBaseHorizontalPosition> &\n CalculateRectType<DropBaseVerticalPosition> = {\n left: calculateRectForHorizontalPosition,\n right: calculateRectForHorizontalPosition,\n top: calculateRectForVerticalPosition,\n bottom: calculateRectForVerticalPosition,\n};\n"],"names":[],"mappings":"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"}
|
package/index.css
ADDED
package/index.d.ts
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './DropBase';
|
|
2
|
+
export type { DropBaseProps, ArrowGuardDistance, DropBasePermanentProps, DropBaseHorizontalPosition, DropBaseVerticalPosition, DropBaseHorizontalPositionWithoutCenter, DropBaseVerticalPositionWithoutCenter, } from './types';
|
|
3
|
+
export { INITIAL_HEIGHT_VALUE } from './useRenderParams';
|
package/index.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import './index.css';
|
|
2
|
+
export { DropBase } from './DropBase.js';
|
|
3
|
+
export { INITIAL_HEIGHT_VALUE } from './useRenderParams.js';
|
|
4
|
+
import 'react/jsx-runtime';
|
|
5
|
+
import 'react';
|
|
6
|
+
import 'react-dom';
|
|
7
|
+
import 'react-transition-group';
|
|
8
|
+
import '@hh.ru/magritte-common-keyboard';
|
|
9
|
+
import '@hh.ru/magritte-common-mouse';
|
|
10
|
+
import '@hh.ru/magritte-common-use-multiple-refs';
|
|
11
|
+
import '@hh.ru/magritte-common-use-when-font-loaded';
|
|
12
|
+
import './intersectionManager.js';
|
|
13
|
+
import './scrollManager.js';
|
|
14
|
+
import '@hh.ru/magritte-common-func-utils';
|
|
15
|
+
import '@hh.ru/magritte-common-metrics';
|
|
16
|
+
import './calculateRect.js';
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
package/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;"}
|