@primer/react 38.21.0 → 38.21.1-rc.8e466980b
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/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @primer/react
|
|
2
2
|
|
|
3
|
+
## 38.21.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#7770](https://github.com/primer/react/pull/7770) [`619175c`](https://github.com/primer/react/commit/619175c00dece144573fe5afbe4cd51e524a6c3d) Thanks [@LisaKr](https://github.com/LisaKr)! - Defer `useAnchoredPosition` initial mount setState from useLayoutEffect to useEffect when overlay is closed, eliminating unnecessary cascading re-renders that block paint.
|
|
8
|
+
|
|
3
9
|
## 38.21.0
|
|
4
10
|
|
|
5
11
|
### Minor Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAnchoredPosition.d.ts","sourceRoot":"","sources":["../../src/hooks/useAnchoredPosition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAC,cAAc,EAAE,gBAAgB,EAAC,MAAM,mBAAmB,CAAA;AA0BvE,MAAM,WAAW,4BAA6B,SAAQ,OAAO,CAAC,gBAAgB,CAAC;IAC7E,kBAAkB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;IACpD,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;IAClD,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,GAAG,SAAS,KAAK,IAAI,CAAA;CAClE;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,CAAC,EAAE,4BAA4B,EACvC,YAAY,GAAE,KAAK,CAAC,cAAmB,GACtC;IACD,kBAAkB,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;IACnD,gBAAgB,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;IACjD,QAAQ,EAAE,cAAc,GAAG,SAAS,CAAA;CACrC,
|
|
1
|
+
{"version":3,"file":"useAnchoredPosition.d.ts","sourceRoot":"","sources":["../../src/hooks/useAnchoredPosition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAC,cAAc,EAAE,gBAAgB,EAAC,MAAM,mBAAmB,CAAA;AA0BvE,MAAM,WAAW,4BAA6B,SAAQ,OAAO,CAAC,gBAAgB,CAAC;IAC7E,kBAAkB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;IACpD,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;IAClD,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,GAAG,SAAS,KAAK,IAAI,CAAA;CAClE;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,CAAC,EAAE,4BAA4B,EACvC,YAAY,GAAE,KAAK,CAAC,cAAmB,GACtC;IACD,kBAAkB,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;IACnD,gBAAgB,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;IACjD,QAAQ,EAAE,cAAc,GAAG,SAAS,CAAA;CACrC,CA8HA"}
|
|
@@ -92,7 +92,25 @@ function useAnchoredPosition(settings, dependencies = []) {
|
|
|
92
92
|
useIsomorphicLayoutEffect(() => {
|
|
93
93
|
savedOnPositionChange.current = settings === null || settings === void 0 ? void 0 : settings.onPositionChange;
|
|
94
94
|
}, [settings === null || settings === void 0 ? void 0 : settings.onPositionChange]);
|
|
95
|
-
|
|
95
|
+
|
|
96
|
+
// Defer the first updatePosition to useEffect when the overlay is closed on
|
|
97
|
+
// mount, avoiding paint-blocking cascading setState. If the overlay is already
|
|
98
|
+
// open on mount, run synchronously in useLayoutEffect to prevent a flash.
|
|
99
|
+
// After mount (including Suspense reappear), only call updatePosition when
|
|
100
|
+
// both refs are attached — skipping closed overlays avoids unnecessary setState.
|
|
101
|
+
const hasMountedRef = React.useRef(false);
|
|
102
|
+
useIsomorphicLayoutEffect(() => {
|
|
103
|
+
if (floatingElementRef.current instanceof Element && anchorElementRef.current instanceof Element) {
|
|
104
|
+
hasMountedRef.current = true;
|
|
105
|
+
updatePosition();
|
|
106
|
+
}
|
|
107
|
+
}, [updatePosition, floatingElementRef, anchorElementRef]);
|
|
108
|
+
React.useEffect(() => {
|
|
109
|
+
if (!hasMountedRef.current) {
|
|
110
|
+
hasMountedRef.current = true;
|
|
111
|
+
updatePosition();
|
|
112
|
+
}
|
|
113
|
+
}, [updatePosition]);
|
|
96
114
|
useResizeObserver(updatePosition); // watches for changes in window size
|
|
97
115
|
useResizeObserver(updatePosition, floatingElementRef); // watches for changes in floating element size
|
|
98
116
|
|
package/package.json
CHANGED