@fluentui/react-positioning 9.5.14 → 9.7.0
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.json +77 -1
- package/CHANGELOG.md +33 -2
- package/dist/index.d.ts +14 -2
- package/lib/constants.js +0 -1
- package/lib/constants.js.map +1 -1
- package/lib/createArrowStyles.js +47 -55
- package/lib/createArrowStyles.js.map +1 -1
- package/lib/createPositionManager.js +95 -108
- package/lib/createPositionManager.js.map +1 -1
- package/lib/createSlideStyles.js +59 -0
- package/lib/createSlideStyles.js.map +1 -0
- package/lib/createVirtualElementFromClick.js +18 -19
- package/lib/createVirtualElementFromClick.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/middleware/coverTarget.js +26 -32
- package/lib/middleware/coverTarget.js.map +1 -1
- package/lib/middleware/flip.js +22 -32
- package/lib/middleware/flip.js.map +1 -1
- package/lib/middleware/index.js +0 -1
- package/lib/middleware/index.js.map +1 -1
- package/lib/middleware/intersecting.js +16 -17
- package/lib/middleware/intersecting.js.map +1 -1
- package/lib/middleware/maxSize.js +25 -34
- package/lib/middleware/maxSize.js.map +1 -1
- package/lib/middleware/offset.js +3 -5
- package/lib/middleware/offset.js.map +1 -1
- package/lib/middleware/shift.js +21 -30
- package/lib/middleware/shift.js.map +1 -1
- package/lib/types.js +0 -1
- package/lib/types.js.map +1 -1
- package/lib/usePositioning.js +188 -154
- package/lib/usePositioning.js.map +1 -1
- package/lib/usePositioningMouseTarget.js +24 -23
- package/lib/usePositioningMouseTarget.js.map +1 -1
- package/lib/utils/debounce.js +13 -14
- package/lib/utils/debounce.js.map +1 -1
- package/lib/utils/fromFloatingUIPlacement.js +23 -28
- package/lib/utils/fromFloatingUIPlacement.js.map +1 -1
- package/lib/utils/getBoundary.js +14 -16
- package/lib/utils/getBoundary.js.map +1 -1
- package/lib/utils/getFloatingUIOffset.js +16 -27
- package/lib/utils/getFloatingUIOffset.js.map +1 -1
- package/lib/utils/getReactFiberFromNode.js +36 -37
- package/lib/utils/getReactFiberFromNode.js.map +1 -1
- package/lib/utils/getScrollParent.js +35 -42
- package/lib/utils/getScrollParent.js.map +1 -1
- package/lib/utils/hasAutoFocusFilter.js +9 -11
- package/lib/utils/hasAutoFocusFilter.js.map +1 -1
- package/lib/utils/index.js +0 -1
- package/lib/utils/index.js.map +1 -1
- package/lib/utils/mergeArrowOffset.js +24 -25
- package/lib/utils/mergeArrowOffset.js.map +1 -1
- package/lib/utils/parseFloatingUIPlacement.js +6 -7
- package/lib/utils/parseFloatingUIPlacement.js.map +1 -1
- package/lib/utils/resolvePositioningShorthand.js +55 -56
- package/lib/utils/resolvePositioningShorthand.js.map +1 -1
- package/lib/utils/toFloatingUIPadding.js +16 -21
- package/lib/utils/toFloatingUIPadding.js.map +1 -1
- package/lib/utils/toFloatingUIPlacement.js +25 -27
- package/lib/utils/toFloatingUIPlacement.js.map +1 -1
- package/lib/utils/toggleScrollListener.js +12 -14
- package/lib/utils/toggleScrollListener.js.map +1 -1
- package/lib/utils/useCallbackRef.js +30 -32
- package/lib/utils/useCallbackRef.js.map +1 -1
- package/lib/utils/writeArrowUpdates.js +10 -17
- package/lib/utils/writeArrowUpdates.js.map +1 -1
- package/lib/utils/writeContainerupdates.js +39 -39
- package/lib/utils/writeContainerupdates.js.map +1 -1
- package/lib-commonjs/constants.js +1 -3
- package/lib-commonjs/constants.js.map +1 -1
- package/lib-commonjs/createArrowStyles.js +1 -3
- package/lib-commonjs/createArrowStyles.js.map +1 -1
- package/lib-commonjs/createPositionManager.js +4 -5
- package/lib-commonjs/createPositionManager.js.map +1 -1
- package/lib-commonjs/createSlideStyles.js +63 -0
- package/lib-commonjs/createSlideStyles.js.map +1 -0
- package/lib-commonjs/createVirtualElementFromClick.js +1 -3
- package/lib-commonjs/createVirtualElementFromClick.js.map +1 -1
- package/lib-commonjs/index.js +2 -3
- package/lib-commonjs/index.js.map +1 -1
- package/lib-commonjs/middleware/coverTarget.js +1 -3
- package/lib-commonjs/middleware/coverTarget.js.map +1 -1
- package/lib-commonjs/middleware/flip.js +1 -3
- package/lib-commonjs/middleware/flip.js.map +1 -1
- package/lib-commonjs/middleware/index.js +0 -3
- package/lib-commonjs/middleware/index.js.map +1 -1
- package/lib-commonjs/middleware/intersecting.js +1 -3
- package/lib-commonjs/middleware/intersecting.js.map +1 -1
- package/lib-commonjs/middleware/maxSize.js +1 -3
- package/lib-commonjs/middleware/maxSize.js.map +1 -1
- package/lib-commonjs/middleware/offset.js +1 -3
- package/lib-commonjs/middleware/offset.js.map +1 -1
- package/lib-commonjs/middleware/shift.js +1 -3
- package/lib-commonjs/middleware/shift.js.map +1 -1
- package/lib-commonjs/types.js +0 -3
- package/lib-commonjs/types.js.map +1 -1
- package/lib-commonjs/usePositioning.js +6 -6
- package/lib-commonjs/usePositioning.js.map +1 -1
- package/lib-commonjs/usePositioningMouseTarget.js +1 -3
- package/lib-commonjs/usePositioningMouseTarget.js.map +1 -1
- package/lib-commonjs/utils/debounce.js +1 -3
- package/lib-commonjs/utils/debounce.js.map +1 -1
- package/lib-commonjs/utils/fromFloatingUIPlacement.js +1 -3
- package/lib-commonjs/utils/fromFloatingUIPlacement.js.map +1 -1
- package/lib-commonjs/utils/getBoundary.js +1 -3
- package/lib-commonjs/utils/getBoundary.js.map +1 -1
- package/lib-commonjs/utils/getFloatingUIOffset.js +1 -3
- package/lib-commonjs/utils/getFloatingUIOffset.js.map +1 -1
- package/lib-commonjs/utils/getReactFiberFromNode.js +1 -3
- package/lib-commonjs/utils/getReactFiberFromNode.js.map +1 -1
- package/lib-commonjs/utils/getScrollParent.js +1 -3
- package/lib-commonjs/utils/getScrollParent.js.map +1 -1
- package/lib-commonjs/utils/hasAutoFocusFilter.js +1 -3
- package/lib-commonjs/utils/hasAutoFocusFilter.js.map +1 -1
- package/lib-commonjs/utils/index.js +0 -3
- package/lib-commonjs/utils/index.js.map +1 -1
- package/lib-commonjs/utils/mergeArrowOffset.js +1 -3
- package/lib-commonjs/utils/mergeArrowOffset.js.map +1 -1
- package/lib-commonjs/utils/parseFloatingUIPlacement.js +1 -3
- package/lib-commonjs/utils/parseFloatingUIPlacement.js.map +1 -1
- package/lib-commonjs/utils/resolvePositioningShorthand.js +1 -3
- package/lib-commonjs/utils/resolvePositioningShorthand.js.map +1 -1
- package/lib-commonjs/utils/toFloatingUIPadding.js +1 -3
- package/lib-commonjs/utils/toFloatingUIPadding.js.map +1 -1
- package/lib-commonjs/utils/toFloatingUIPlacement.js +1 -3
- package/lib-commonjs/utils/toFloatingUIPlacement.js.map +1 -1
- package/lib-commonjs/utils/toggleScrollListener.js +1 -3
- package/lib-commonjs/utils/toggleScrollListener.js.map +1 -1
- package/lib-commonjs/utils/useCallbackRef.js +1 -3
- package/lib-commonjs/utils/useCallbackRef.js.map +1 -1
- package/lib-commonjs/utils/writeArrowUpdates.js +1 -3
- package/lib-commonjs/utils/writeArrowUpdates.js.map +1 -1
- package/lib-commonjs/utils/writeContainerupdates.js +12 -5
- package/lib-commonjs/utils/writeContainerupdates.js.map +1 -1
- package/package.json +5 -5
package/CHANGELOG.json
CHANGED
@@ -2,7 +2,83 @@
|
|
2
2
|
"name": "@fluentui/react-positioning",
|
3
3
|
"entries": [
|
4
4
|
{
|
5
|
-
"date": "
|
5
|
+
"date": "Tue, 20 Jun 2023 12:34:45 GMT",
|
6
|
+
"tag": "@fluentui/react-positioning_v9.7.0",
|
7
|
+
"version": "9.7.0",
|
8
|
+
"comments": {
|
9
|
+
"patch": [
|
10
|
+
{
|
11
|
+
"author": "martinhochel@microsoft.com",
|
12
|
+
"package": "@fluentui/react-positioning",
|
13
|
+
"commit": "cf6b94ba6559236150bc1f1814b023607edaeb20",
|
14
|
+
"comment": "chore: migrate to ts 4.7 which wont emit undefined anymore for optional arguments"
|
15
|
+
},
|
16
|
+
{
|
17
|
+
"author": "olfedias@microsoft.com",
|
18
|
+
"package": "@fluentui/react-positioning",
|
19
|
+
"commit": "cbdfdd61ae2ea8954fad2eb53d62c2b036416101",
|
20
|
+
"comment": "fix: cleanup assignment of initial styles"
|
21
|
+
}
|
22
|
+
],
|
23
|
+
"minor": [
|
24
|
+
{
|
25
|
+
"author": "lingfangao@hotmail.com",
|
26
|
+
"package": "@fluentui/react-positioning",
|
27
|
+
"commit": "71fcadc8347a9c547066b631eb7f3ec527ca9775",
|
28
|
+
"comment": "feat: Implement shared styles for slide animations"
|
29
|
+
},
|
30
|
+
{
|
31
|
+
"author": "beachball",
|
32
|
+
"package": "@fluentui/react-positioning",
|
33
|
+
"comment": "Bump @fluentui/react-shared-contexts to v9.5.1",
|
34
|
+
"commit": "81c9b35e0830297b2aca2cece2ae67b3899c4647"
|
35
|
+
},
|
36
|
+
{
|
37
|
+
"author": "beachball",
|
38
|
+
"package": "@fluentui/react-positioning",
|
39
|
+
"comment": "Bump @fluentui/react-theme to v9.1.9",
|
40
|
+
"commit": "81c9b35e0830297b2aca2cece2ae67b3899c4647"
|
41
|
+
},
|
42
|
+
{
|
43
|
+
"author": "beachball",
|
44
|
+
"package": "@fluentui/react-positioning",
|
45
|
+
"comment": "Bump @fluentui/react-utilities to v9.9.3",
|
46
|
+
"commit": "81c9b35e0830297b2aca2cece2ae67b3899c4647"
|
47
|
+
}
|
48
|
+
]
|
49
|
+
}
|
50
|
+
},
|
51
|
+
{
|
52
|
+
"date": "Wed, 31 May 2023 06:46:17 GMT",
|
53
|
+
"tag": "@fluentui/react-positioning_v9.6.0",
|
54
|
+
"version": "9.6.0",
|
55
|
+
"comments": {
|
56
|
+
"minor": [
|
57
|
+
{
|
58
|
+
"author": "yiliu9@microsoft.com",
|
59
|
+
"package": "@fluentui/react-positioning",
|
60
|
+
"commit": "e1ca88c0a92d07dced9c668dd11585c0c4866919",
|
61
|
+
"comment": "Add new optional useTransform parameter to allow disabling transform for positioning"
|
62
|
+
},
|
63
|
+
{
|
64
|
+
"author": "beachball",
|
65
|
+
"package": "@fluentui/react-positioning",
|
66
|
+
"comment": "Bump @fluentui/react-utilities to v9.9.2",
|
67
|
+
"commit": "17ca96c6b7f684f36a5c63e40e78b4986a86c713"
|
68
|
+
}
|
69
|
+
],
|
70
|
+
"patch": [
|
71
|
+
{
|
72
|
+
"author": "seanmonahan@microsoft.com",
|
73
|
+
"package": "@fluentui/react-positioning",
|
74
|
+
"commit": "d640b972d7ac86bfb76ae6c6329f12cdd33b3b7c",
|
75
|
+
"comment": "chore: Update Griffel to v1.5.7."
|
76
|
+
}
|
77
|
+
]
|
78
|
+
}
|
79
|
+
},
|
80
|
+
{
|
81
|
+
"date": "Thu, 25 May 2023 10:00:48 GMT",
|
6
82
|
"tag": "@fluentui/react-positioning_v9.5.14",
|
7
83
|
"version": "9.5.14",
|
8
84
|
"comments": {
|
package/CHANGELOG.md
CHANGED
@@ -1,12 +1,43 @@
|
|
1
1
|
# Change Log - @fluentui/react-positioning
|
2
2
|
|
3
|
-
This log was last generated on
|
3
|
+
This log was last generated on Tue, 20 Jun 2023 12:34:45 GMT and should not be manually modified.
|
4
4
|
|
5
5
|
<!-- Start content -->
|
6
6
|
|
7
|
+
## [9.7.0](https://github.com/microsoft/fluentui/tree/@fluentui/react-positioning_v9.7.0)
|
8
|
+
|
9
|
+
Tue, 20 Jun 2023 12:34:45 GMT
|
10
|
+
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-positioning_v9.6.0..@fluentui/react-positioning_v9.7.0)
|
11
|
+
|
12
|
+
### Minor changes
|
13
|
+
|
14
|
+
- feat: Implement shared styles for slide animations ([PR #28119](https://github.com/microsoft/fluentui/pull/28119) by lingfangao@hotmail.com)
|
15
|
+
- Bump @fluentui/react-shared-contexts to v9.5.1 ([PR #28229](https://github.com/microsoft/fluentui/pull/28229) by beachball)
|
16
|
+
- Bump @fluentui/react-theme to v9.1.9 ([PR #28229](https://github.com/microsoft/fluentui/pull/28229) by beachball)
|
17
|
+
- Bump @fluentui/react-utilities to v9.9.3 ([PR #28229](https://github.com/microsoft/fluentui/pull/28229) by beachball)
|
18
|
+
|
19
|
+
### Patches
|
20
|
+
|
21
|
+
- chore: migrate to ts 4.7 which wont emit undefined anymore for optional arguments ([PR #28067](https://github.com/microsoft/fluentui/pull/28067) by martinhochel@microsoft.com)
|
22
|
+
- fix: cleanup assignment of initial styles ([PR #28109](https://github.com/microsoft/fluentui/pull/28109) by olfedias@microsoft.com)
|
23
|
+
|
24
|
+
## [9.6.0](https://github.com/microsoft/fluentui/tree/@fluentui/react-positioning_v9.6.0)
|
25
|
+
|
26
|
+
Wed, 31 May 2023 06:46:17 GMT
|
27
|
+
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-positioning_v9.5.14..@fluentui/react-positioning_v9.6.0)
|
28
|
+
|
29
|
+
### Minor changes
|
30
|
+
|
31
|
+
- Add new optional useTransform parameter to allow disabling transform for positioning ([PR #27929](https://github.com/microsoft/fluentui/pull/27929) by yiliu9@microsoft.com)
|
32
|
+
- Bump @fluentui/react-utilities to v9.9.2 ([PR #28054](https://github.com/microsoft/fluentui/pull/28054) by beachball)
|
33
|
+
|
34
|
+
### Patches
|
35
|
+
|
36
|
+
- chore: Update Griffel to v1.5.7. ([PR #27925](https://github.com/microsoft/fluentui/pull/27925) by seanmonahan@microsoft.com)
|
37
|
+
|
7
38
|
## [9.5.14](https://github.com/microsoft/fluentui/tree/@fluentui/react-positioning_v9.5.14)
|
8
39
|
|
9
|
-
Thu, 25 May 2023
|
40
|
+
Thu, 25 May 2023 10:00:48 GMT
|
10
41
|
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-positioning_v9.5.13..@fluentui/react-positioning_v9.5.14)
|
11
42
|
|
12
43
|
### Patches
|
package/dist/index.d.ts
CHANGED
@@ -76,6 +76,13 @@ export declare type CreateArrowStylesOptions = {
|
|
76
76
|
borderColor?: GriffelStyle['borderBottomColor'];
|
77
77
|
};
|
78
78
|
|
79
|
+
/**
|
80
|
+
* Creates animation styles so that positioned elements slide in from the main axis
|
81
|
+
* @param mainAxis - distance than the element sides for
|
82
|
+
* @returns Griffel styles to spread to a slot
|
83
|
+
*/
|
84
|
+
export declare function createSlideStyles(mainAxis: number): GriffelStyle;
|
85
|
+
|
79
86
|
/**
|
80
87
|
* Creates a virtual element based on the position of a click event
|
81
88
|
* Can be used as a target for popper in scenarios such as context menus
|
@@ -193,9 +200,14 @@ declare interface PositioningOptions {
|
|
193
200
|
* its boundaries, use a specified fallback positions.
|
194
201
|
*/
|
195
202
|
fallbackPositions?: PositioningShorthandValue[];
|
203
|
+
/**
|
204
|
+
* Modifies whether popover is positioned using transform.
|
205
|
+
* @default true
|
206
|
+
*/
|
207
|
+
useTransform?: boolean;
|
196
208
|
}
|
197
209
|
|
198
|
-
export declare interface PositioningProps extends Pick<PositioningOptions, 'align' | 'flipBoundary' | 'overflowBoundary' | 'overflowBoundaryPadding' | 'position' | 'offset' | 'arrowPadding' | 'autoSize' | 'coverTarget' | 'pinned'> {
|
210
|
+
export declare interface PositioningProps extends Pick<PositioningOptions, 'align' | 'flipBoundary' | 'overflowBoundary' | 'overflowBoundaryPadding' | 'position' | 'offset' | 'arrowPadding' | 'autoSize' | 'coverTarget' | 'pinned' | 'useTransform'> {
|
199
211
|
/** An imperative handle to Popper methods. */
|
200
212
|
positioningRef?: React_2.Ref<PositioningImperativeRef>;
|
201
213
|
/**
|
@@ -249,7 +261,7 @@ export declare function usePositioning(options: UsePositioningOptions): UsePosit
|
|
249
261
|
* @param initialState - initializes a user provided state similare to useState
|
250
262
|
* @returns state and dispatcher for a Popper virtual element that uses native/synthetic mouse events
|
251
263
|
*/
|
252
|
-
export declare const usePositioningMouseTarget: (initialState?: PositioningVirtualElement | (() => PositioningVirtualElement)
|
264
|
+
export declare const usePositioningMouseTarget: (initialState?: PositioningVirtualElement | (() => PositioningVirtualElement)) => readonly [PositioningVirtualElement | undefined, SetVirtualMouseTarget];
|
253
265
|
|
254
266
|
declare interface UsePositioningOptions extends PositioningProps, Pick<PositioningOptions, 'fallbackPositions' | 'pinned'> {
|
255
267
|
/**
|
package/lib/constants.js
CHANGED
@@ -2,4 +2,3 @@ export const DATA_POSITIONING_INTERSECTING = 'data-popper-is-intersecting';
|
|
2
2
|
export const DATA_POSITIONING_ESCAPED = 'data-popper-escaped';
|
3
3
|
export const DATA_POSITIONING_HIDDEN = 'data-popper-reference-hidden';
|
4
4
|
export const DATA_POSITIONING_PLACEMENT = 'data-popper-placement';
|
5
|
-
//# sourceMappingURL=constants.js.map
|
package/lib/constants.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"
|
1
|
+
{"version":3,"sources":["constants.ts"],"sourcesContent":["export const DATA_POSITIONING_INTERSECTING = 'data-popper-is-intersecting';\nexport const DATA_POSITIONING_ESCAPED = 'data-popper-escaped';\nexport const DATA_POSITIONING_HIDDEN = 'data-popper-reference-hidden';\nexport const DATA_POSITIONING_PLACEMENT = 'data-popper-placement';\n"],"names":["DATA_POSITIONING_INTERSECTING","DATA_POSITIONING_ESCAPED","DATA_POSITIONING_HIDDEN","DATA_POSITIONING_PLACEMENT"],"mappings":"AAAA,OAAO,MAAMA,gCAAgC,8BAA8B;AAC3E,OAAO,MAAMC,2BAA2B,sBAAsB;AAC9D,OAAO,MAAMC,0BAA0B,+BAA+B;AACtE,OAAO,MAAMC,6BAA6B,wBAAwB"}
|
package/lib/createArrowStyles.js
CHANGED
@@ -22,51 +22,45 @@ import { tokens } from '@fluentui/react-theme';
|
|
22
22
|
* state.mediumArrow && styles.mediumArrow,
|
23
23
|
* )
|
24
24
|
* ```
|
25
|
-
*/
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
},
|
65
|
-
':global([data-popper-placement^="left"])': {
|
66
|
-
right: `-${borderWidth} /* @noflip */`,
|
67
|
-
'--angle': '270deg'
|
68
|
-
}
|
69
|
-
};
|
25
|
+
*/ export function createArrowStyles(options) {
|
26
|
+
const { arrowHeight , borderWidth ='1px' , borderStyle ='solid' , borderColor =tokens.colorTransparentStroke } = options;
|
27
|
+
return {
|
28
|
+
position: 'absolute',
|
29
|
+
backgroundColor: 'inherit',
|
30
|
+
visibility: 'hidden',
|
31
|
+
zIndex: -1,
|
32
|
+
...arrowHeight && createArrowHeightStyles(arrowHeight),
|
33
|
+
'::before': {
|
34
|
+
content: '""',
|
35
|
+
visibility: 'visible',
|
36
|
+
position: 'absolute',
|
37
|
+
boxSizing: 'border-box',
|
38
|
+
width: 'inherit',
|
39
|
+
height: 'inherit',
|
40
|
+
backgroundColor: 'inherit',
|
41
|
+
...shorthands.borderRight(`${borderWidth} /* @noflip */`, `${borderStyle} /* @noflip */`, `${borderColor} /* @noflip */`),
|
42
|
+
...shorthands.borderBottom(borderWidth, borderStyle, borderColor),
|
43
|
+
borderBottomRightRadius: tokens.borderRadiusSmall,
|
44
|
+
transform: 'rotate(var(--angle)) translate(0, 50%) rotate(45deg)'
|
45
|
+
},
|
46
|
+
// Popper sets data-popper-placement on the root element, which is used to align the arrow
|
47
|
+
':global([data-popper-placement^="top"])': {
|
48
|
+
bottom: `-${borderWidth}`,
|
49
|
+
'--angle': '0'
|
50
|
+
},
|
51
|
+
':global([data-popper-placement^="right"])': {
|
52
|
+
left: `-${borderWidth} /* @noflip */`,
|
53
|
+
'--angle': '90deg'
|
54
|
+
},
|
55
|
+
':global([data-popper-placement^="bottom"])': {
|
56
|
+
top: `-${borderWidth}`,
|
57
|
+
'--angle': '180deg'
|
58
|
+
},
|
59
|
+
':global([data-popper-placement^="left"])': {
|
60
|
+
right: `-${borderWidth} /* @noflip */`,
|
61
|
+
'--angle': '270deg'
|
62
|
+
}
|
63
|
+
};
|
70
64
|
}
|
71
65
|
/**
|
72
66
|
* @internal
|
@@ -74,14 +68,12 @@ export function createArrowStyles(options) {
|
|
74
68
|
*
|
75
69
|
* Use this when you need to create classes for several different arrow sizes. If you only need a
|
76
70
|
* constant arrow size, you can pass the `arrowHeight` param to createArrowStyles instead.
|
77
|
-
*/
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
};
|
71
|
+
*/ export function createArrowHeightStyles(arrowHeight) {
|
72
|
+
// The arrow is a square rotated 45 degrees to have its bottom and right edges form a right triangle.
|
73
|
+
// Multiply the triangle's height by sqrt(2) to get length of its edges.
|
74
|
+
const edgeLength = `${1.414 * arrowHeight}px`;
|
75
|
+
return {
|
76
|
+
width: edgeLength,
|
77
|
+
height: edgeLength
|
78
|
+
};
|
86
79
|
}
|
87
|
-
//# sourceMappingURL=createArrowStyles.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"
|
1
|
+
{"version":3,"sources":["createArrowStyles.ts"],"sourcesContent":["import { shorthands } from '@griffel/react';\nimport { tokens } from '@fluentui/react-theme';\nimport type { GriffelStyle } from '@griffel/react';\n\n/**\n * @internal\n * Options parameter for the createArrowStyles function\n */\nexport type CreateArrowStylesOptions = {\n /**\n * The height of the arrow from the base to the tip, in px. The base width of the arrow is always twice its height.\n *\n * This can be undefined to leave out the arrow size styles. You must then add styles created by\n * createArrowHeightStyles to set the arrow's size correctly. This can be useful if the arrow can be different sizes.\n */\n arrowHeight: number | undefined;\n\n /**\n * The borderWidth of the arrow. Should be the same borderWidth as the parent element.\n *\n * @defaultvalue 1px\n */\n borderWidth?: GriffelStyle['borderBottomWidth'];\n\n /**\n * The borderStyle for the arrow. Should be the same borderStyle as the parent element.\n *\n * @defaultvalue solid\n */\n borderStyle?: GriffelStyle['borderBottomStyle'];\n\n /**\n * The borderColor of the arrow. Should be the same borderColor as the parent element.\n *\n * @defaultvalue tokens.colorTransparentStroke\n */\n borderColor?: GriffelStyle['borderBottomColor'];\n};\n\n/**\n * @internal\n * Helper that creates a makeStyles rule for an arrow element.\n * For runtime arrow size toggling simply create extra classnames to apply to the arrow element\n *\n * ```ts\n * makeStyles({\n * arrowWithSize: createArrowStyles({ arrowHeight: 6 }),\n *\n * arrowWithoutSize: createArrowStyles({ arrowHeight: undefined }),\n * mediumArrow: createArrowHeightStyles(4),\n * smallArrow: createArrowHeightStyles(2),\n * })\n * ...\n *\n * state.arrowWithSize.className = styles.arrowWithSize;\n * state.arrowWithoutSize.className = mergeClasses(\n * styles.arrowWithoutSize,\n * state.smallArrow && styles.smallArrow,\n * state.mediumArrow && styles.mediumArrow,\n * )\n * ```\n */\nexport function createArrowStyles(options: CreateArrowStylesOptions): GriffelStyle {\n const {\n arrowHeight,\n borderWidth = '1px',\n borderStyle = 'solid',\n borderColor = tokens.colorTransparentStroke,\n } = options;\n\n return {\n position: 'absolute',\n backgroundColor: 'inherit',\n visibility: 'hidden',\n zIndex: -1,\n\n ...(arrowHeight && createArrowHeightStyles(arrowHeight)),\n\n '::before': {\n content: '\"\"',\n visibility: 'visible',\n position: 'absolute',\n boxSizing: 'border-box',\n width: 'inherit',\n height: 'inherit',\n backgroundColor: 'inherit',\n ...shorthands.borderRight(\n `${borderWidth} /* @noflip */`,\n `${borderStyle} /* @noflip */`,\n `${borderColor} /* @noflip */`,\n ),\n ...shorthands.borderBottom(borderWidth, borderStyle, borderColor),\n borderBottomRightRadius: tokens.borderRadiusSmall,\n transform: 'rotate(var(--angle)) translate(0, 50%) rotate(45deg)',\n },\n\n // Popper sets data-popper-placement on the root element, which is used to align the arrow\n ':global([data-popper-placement^=\"top\"])': {\n bottom: `-${borderWidth}`,\n '--angle': '0',\n },\n ':global([data-popper-placement^=\"right\"])': {\n left: `-${borderWidth} /* @noflip */`,\n '--angle': '90deg',\n },\n ':global([data-popper-placement^=\"bottom\"])': {\n top: `-${borderWidth}`,\n '--angle': '180deg',\n },\n ':global([data-popper-placement^=\"left\"])': {\n right: `-${borderWidth} /* @noflip */`,\n '--angle': '270deg',\n },\n };\n}\n\n/**\n * @internal\n * Creates CSS styles to size the arrow created by createArrowStyles to the given height.\n *\n * Use this when you need to create classes for several different arrow sizes. If you only need a\n * constant arrow size, you can pass the `arrowHeight` param to createArrowStyles instead.\n */\nexport function createArrowHeightStyles(arrowHeight: number) {\n // The arrow is a square rotated 45 degrees to have its bottom and right edges form a right triangle.\n // Multiply the triangle's height by sqrt(2) to get length of its edges.\n const edgeLength = `${1.414 * arrowHeight}px`;\n return { width: edgeLength, height: edgeLength };\n}\n"],"names":["shorthands","tokens","createArrowStyles","options","arrowHeight","borderWidth","borderStyle","borderColor","colorTransparentStroke","position","backgroundColor","visibility","zIndex","createArrowHeightStyles","content","boxSizing","width","height","borderRight","borderBottom","borderBottomRightRadius","borderRadiusSmall","transform","bottom","left","top","right","edgeLength"],"mappings":"AAAA,SAASA,UAAU,QAAQ,iBAAiB;AAC5C,SAASC,MAAM,QAAQ,wBAAwB;AAsC/C;;;;;;;;;;;;;;;;;;;;;;CAsBC,GACD,OAAO,SAASC,kBAAkBC,OAAiC,EAAgB;IACjF,MAAM,EACJC,YAAW,EACXC,aAAc,MAAK,EACnBC,aAAc,QAAO,EACrBC,aAAcN,OAAOO,sBAAsB,CAAA,EAC5C,GAAGL;IAEJ,OAAO;QACLM,UAAU;QACVC,iBAAiB;QACjBC,YAAY;QACZC,QAAQ,CAAC;QAET,GAAIR,eAAeS,wBAAwBT,YAAY;QAEvD,YAAY;YACVU,SAAS;YACTH,YAAY;YACZF,UAAU;YACVM,WAAW;YACXC,OAAO;YACPC,QAAQ;YACRP,iBAAiB;YACjB,GAAGV,WAAWkB,WAAW,CACvB,CAAC,EAAEb,YAAY,cAAc,CAAC,EAC9B,CAAC,EAAEC,YAAY,cAAc,CAAC,EAC9B,CAAC,EAAEC,YAAY,cAAc,CAAC,CAC/B;YACD,GAAGP,WAAWmB,YAAY,CAACd,aAAaC,aAAaC,YAAY;YACjEa,yBAAyBnB,OAAOoB,iBAAiB;YACjDC,WAAW;QACb;QAEA,0FAA0F;QAC1F,2CAA2C;YACzCC,QAAQ,CAAC,CAAC,EAAElB,YAAY,CAAC;YACzB,WAAW;QACb;QACA,6CAA6C;YAC3CmB,MAAM,CAAC,CAAC,EAAEnB,YAAY,cAAc,CAAC;YACrC,WAAW;QACb;QACA,8CAA8C;YAC5CoB,KAAK,CAAC,CAAC,EAAEpB,YAAY,CAAC;YACtB,WAAW;QACb;QACA,4CAA4C;YAC1CqB,OAAO,CAAC,CAAC,EAAErB,YAAY,cAAc,CAAC;YACtC,WAAW;QACb;IACF;AACF,CAAC;AAED;;;;;;CAMC,GACD,OAAO,SAASQ,wBAAwBT,WAAmB,EAAE;IAC3D,qGAAqG;IACrG,wEAAwE;IACxE,MAAMuB,aAAa,CAAC,EAAE,QAAQvB,YAAY,EAAE,CAAC;IAC7C,OAAO;QAAEY,OAAOW;QAAYV,QAAQU;IAAW;AACjD,CAAC"}
|
@@ -4,117 +4,104 @@ import { isHTMLElement } from '@fluentui/react-utilities';
|
|
4
4
|
/**
|
5
5
|
* @internal
|
6
6
|
* @returns manager that handles positioning out of the react lifecycle
|
7
|
-
*/
|
8
|
-
|
9
|
-
|
10
|
-
container
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
placement
|
16
|
-
} = options;
|
17
|
-
let isDestroyed = false;
|
18
|
-
if (!target || !container) {
|
19
|
-
return {
|
20
|
-
updatePosition: () => undefined,
|
21
|
-
dispose: () => undefined
|
22
|
-
};
|
23
|
-
}
|
24
|
-
let isFirstUpdate = true;
|
25
|
-
const scrollParents = new Set();
|
26
|
-
const targetWindow = container.ownerDocument.defaultView;
|
27
|
-
// When the container is first resolved, set position `fixed` to avoid scroll jumps.
|
28
|
-
// Without this scroll jumps can occur when the element is rendered initially and receives focus
|
29
|
-
Object.assign(container.style, {
|
30
|
-
position: 'fixed',
|
31
|
-
left: 0,
|
32
|
-
top: 0,
|
33
|
-
margin: 0
|
34
|
-
});
|
35
|
-
const forceUpdate = () => {
|
36
|
-
// debounced update can still occur afterwards
|
37
|
-
// early return to avoid memory leaks
|
38
|
-
if (isDestroyed) {
|
39
|
-
return;
|
40
|
-
}
|
41
|
-
if (isFirstUpdate) {
|
42
|
-
scrollParents.add(getScrollParent(container));
|
43
|
-
if (isHTMLElement(target)) {
|
44
|
-
scrollParents.add(getScrollParent(target));
|
45
|
-
}
|
46
|
-
scrollParents.forEach(scrollParent => {
|
47
|
-
scrollParent.addEventListener('scroll', updatePosition);
|
48
|
-
});
|
49
|
-
isFirstUpdate = false;
|
7
|
+
*/ export function createPositionManager(options) {
|
8
|
+
const { container , target , arrow , strategy , middleware , placement , useTransform =true } = options;
|
9
|
+
let isDestroyed = false;
|
10
|
+
if (!target || !container) {
|
11
|
+
return {
|
12
|
+
updatePosition: ()=>undefined,
|
13
|
+
dispose: ()=>undefined
|
14
|
+
};
|
50
15
|
}
|
16
|
+
let isFirstUpdate = true;
|
17
|
+
const scrollParents = new Set();
|
18
|
+
const targetWindow = container.ownerDocument.defaultView;
|
19
|
+
// When the container is first resolved, set position `fixed` to avoid scroll jumps.
|
20
|
+
// Without this scroll jumps can occur when the element is rendered initially and receives focus
|
51
21
|
Object.assign(container.style, {
|
52
|
-
|
22
|
+
position: 'fixed',
|
23
|
+
left: 0,
|
24
|
+
top: 0,
|
25
|
+
margin: 0
|
53
26
|
});
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
27
|
+
const forceUpdate = ()=>{
|
28
|
+
// debounced update can still occur afterwards
|
29
|
+
// early return to avoid memory leaks
|
30
|
+
if (isDestroyed) {
|
31
|
+
return;
|
32
|
+
}
|
33
|
+
if (isFirstUpdate) {
|
34
|
+
scrollParents.add(getScrollParent(container));
|
35
|
+
if (isHTMLElement(target)) {
|
36
|
+
scrollParents.add(getScrollParent(target));
|
37
|
+
}
|
38
|
+
scrollParents.forEach((scrollParent)=>{
|
39
|
+
scrollParent.addEventListener('scroll', updatePosition);
|
40
|
+
});
|
41
|
+
isFirstUpdate = false;
|
42
|
+
}
|
43
|
+
Object.assign(container.style, {
|
44
|
+
position: strategy
|
45
|
+
});
|
46
|
+
computePosition(target, container, {
|
47
|
+
placement,
|
48
|
+
middleware,
|
49
|
+
strategy
|
50
|
+
}).then(({ x , y , middlewareData , placement: computedPlacement })=>{
|
51
|
+
// Promise can still resolve after destruction
|
52
|
+
// early return to avoid applying outdated position
|
53
|
+
if (isDestroyed) {
|
54
|
+
return;
|
55
|
+
}
|
56
|
+
writeArrowUpdates({
|
57
|
+
arrow,
|
58
|
+
middlewareData
|
59
|
+
});
|
60
|
+
writeContainerUpdates({
|
61
|
+
container,
|
62
|
+
middlewareData,
|
63
|
+
placement: computedPlacement,
|
64
|
+
coordinates: {
|
65
|
+
x,
|
66
|
+
y
|
67
|
+
},
|
68
|
+
lowPPI: ((targetWindow === null || targetWindow === void 0 ? void 0 : targetWindow.devicePixelRatio) || 1) <= 1,
|
69
|
+
strategy,
|
70
|
+
useTransform
|
71
|
+
});
|
72
|
+
}).catch((err)=>{
|
73
|
+
// https://github.com/floating-ui/floating-ui/issues/1845
|
74
|
+
// FIXME for node > 14
|
75
|
+
// node 15 introduces promise rejection which means that any components
|
76
|
+
// tests need to be `it('', async () => {})` otherwise there can be race conditions with
|
77
|
+
// JSDOM being torn down before this promise is resolved so globals like `window` and `document` don't exist
|
78
|
+
// Unless all tests that ever use `usePositioning` are turned into async tests, any logging during testing
|
79
|
+
// will actually be counter productive
|
80
|
+
if (process.env.NODE_ENV === 'development') {
|
81
|
+
// eslint-disable-next-line no-console
|
82
|
+
console.error('[usePositioning]: Failed to calculate position', err);
|
83
|
+
}
|
84
|
+
});
|
85
|
+
};
|
86
|
+
const updatePosition = debounce(()=>forceUpdate());
|
87
|
+
const dispose = ()=>{
|
88
|
+
isDestroyed = true;
|
89
|
+
if (targetWindow) {
|
90
|
+
targetWindow.removeEventListener('scroll', updatePosition);
|
91
|
+
targetWindow.removeEventListener('resize', updatePosition);
|
92
|
+
}
|
93
|
+
scrollParents.forEach((scrollParent)=>{
|
94
|
+
scrollParent.removeEventListener('scroll', updatePosition);
|
95
|
+
});
|
96
|
+
};
|
101
97
|
if (targetWindow) {
|
102
|
-
|
103
|
-
|
98
|
+
targetWindow.addEventListener('scroll', updatePosition);
|
99
|
+
targetWindow.addEventListener('resize', updatePosition);
|
104
100
|
}
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
targetWindow.addEventListener('resize', updatePosition);
|
112
|
-
}
|
113
|
-
// Update the position on initialization
|
114
|
-
updatePosition();
|
115
|
-
return {
|
116
|
-
updatePosition,
|
117
|
-
dispose
|
118
|
-
};
|
101
|
+
// Update the position on initialization
|
102
|
+
updatePosition();
|
103
|
+
return {
|
104
|
+
updatePosition,
|
105
|
+
dispose
|
106
|
+
};
|
119
107
|
}
|
120
|
-
//# sourceMappingURL=createPositionManager.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"
|
1
|
+
{"version":3,"sources":["createPositionManager.ts"],"sourcesContent":["import { computePosition } from '@floating-ui/dom';\nimport type { Middleware, Placement, Strategy } from '@floating-ui/dom';\nimport type { PositionManager, TargetElement } from './types';\nimport { debounce, writeArrowUpdates, writeContainerUpdates, getScrollParent } from './utils';\nimport { isHTMLElement } from '@fluentui/react-utilities';\n\ninterface PositionManagerOptions {\n /**\n * The positioned element\n */\n container: HTMLElement;\n /**\n * Element that the container will be anchored to\n */\n target: TargetElement;\n /**\n * Arrow that points from the container to the target\n */\n arrow: HTMLElement | null;\n /**\n * The value of the css `position` property\n * @default absolute\n */\n strategy: Strategy;\n /**\n * [Floating UI middleware](https://floating-ui.com/docs/middleware)\n */\n middleware: Middleware[];\n /**\n * [Floating UI placement](https://floating-ui.com/docs/computePosition#placement)\n */\n placement?: Placement;\n /**\n * Modifies whether popover is positioned using transform.\n * @default true\n */\n useTransform?: boolean;\n}\n\n/**\n * @internal\n * @returns manager that handles positioning out of the react lifecycle\n */\nexport function createPositionManager(options: PositionManagerOptions): PositionManager {\n const { container, target, arrow, strategy, middleware, placement, useTransform = true } = options;\n let isDestroyed = false;\n if (!target || !container) {\n return {\n updatePosition: () => undefined,\n dispose: () => undefined,\n };\n }\n\n let isFirstUpdate = true;\n const scrollParents: Set<HTMLElement> = new Set<HTMLElement>();\n const targetWindow = container.ownerDocument.defaultView;\n\n // When the container is first resolved, set position `fixed` to avoid scroll jumps.\n // Without this scroll jumps can occur when the element is rendered initially and receives focus\n Object.assign(container.style, { position: 'fixed', left: 0, top: 0, margin: 0 });\n\n const forceUpdate = () => {\n // debounced update can still occur afterwards\n // early return to avoid memory leaks\n if (isDestroyed) {\n return;\n }\n\n if (isFirstUpdate) {\n scrollParents.add(getScrollParent(container));\n if (isHTMLElement(target)) {\n scrollParents.add(getScrollParent(target));\n }\n\n scrollParents.forEach(scrollParent => {\n scrollParent.addEventListener('scroll', updatePosition);\n });\n\n isFirstUpdate = false;\n }\n\n Object.assign(container.style, { position: strategy });\n computePosition(target, container, { placement, middleware, strategy })\n .then(({ x, y, middlewareData, placement: computedPlacement }) => {\n // Promise can still resolve after destruction\n // early return to avoid applying outdated position\n if (isDestroyed) {\n return;\n }\n\n writeArrowUpdates({ arrow, middlewareData });\n writeContainerUpdates({\n container,\n middlewareData,\n placement: computedPlacement,\n coordinates: { x, y },\n lowPPI: (targetWindow?.devicePixelRatio || 1) <= 1,\n strategy,\n useTransform,\n });\n })\n .catch(err => {\n // https://github.com/floating-ui/floating-ui/issues/1845\n // FIXME for node > 14\n // node 15 introduces promise rejection which means that any components\n // tests need to be `it('', async () => {})` otherwise there can be race conditions with\n // JSDOM being torn down before this promise is resolved so globals like `window` and `document` don't exist\n // Unless all tests that ever use `usePositioning` are turned into async tests, any logging during testing\n // will actually be counter productive\n if (process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.error('[usePositioning]: Failed to calculate position', err);\n }\n });\n };\n\n const updatePosition = debounce(() => forceUpdate());\n\n const dispose = () => {\n isDestroyed = true;\n\n if (targetWindow) {\n targetWindow.removeEventListener('scroll', updatePosition);\n targetWindow.removeEventListener('resize', updatePosition);\n }\n\n scrollParents.forEach(scrollParent => {\n scrollParent.removeEventListener('scroll', updatePosition);\n });\n };\n\n if (targetWindow) {\n targetWindow.addEventListener('scroll', updatePosition);\n targetWindow.addEventListener('resize', updatePosition);\n }\n\n // Update the position on initialization\n updatePosition();\n\n return {\n updatePosition,\n dispose,\n };\n}\n"],"names":["computePosition","debounce","writeArrowUpdates","writeContainerUpdates","getScrollParent","isHTMLElement","createPositionManager","options","container","target","arrow","strategy","middleware","placement","useTransform","isDestroyed","updatePosition","undefined","dispose","isFirstUpdate","scrollParents","Set","targetWindow","ownerDocument","defaultView","Object","assign","style","position","left","top","margin","forceUpdate","add","forEach","scrollParent","addEventListener","then","x","y","middlewareData","computedPlacement","coordinates","lowPPI","devicePixelRatio","catch","err","process","env","NODE_ENV","console","error","removeEventListener"],"mappings":"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"}
|