@mui/utils 9.0.0 → 9.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/CHANGELOG.md +216 -1245
  2. package/LICENSE +1 -1
  3. package/contains/contains.d.mts +14 -0
  4. package/contains/contains.d.ts +14 -0
  5. package/contains/contains.js +42 -0
  6. package/contains/contains.mjs +36 -0
  7. package/contains/index.d.mts +1 -0
  8. package/contains/index.d.ts +1 -0
  9. package/contains/index.js +13 -0
  10. package/contains/index.mjs +1 -0
  11. package/elementTypeAcceptingRef/elementTypeAcceptingRef.js +1 -0
  12. package/elementTypeAcceptingRef/elementTypeAcceptingRef.mjs +1 -0
  13. package/extractEventHandlers/extractEventHandlers.d.mts +1 -2
  14. package/extractEventHandlers/extractEventHandlers.d.ts +1 -2
  15. package/extractEventHandlers/extractEventHandlers.js +8 -5
  16. package/extractEventHandlers/extractEventHandlers.mjs +7 -5
  17. package/fastDeepAssign/fastDeepAssign.js +6 -1
  18. package/fastDeepAssign/fastDeepAssign.mjs +6 -1
  19. package/getEventTarget/getEventTarget.d.mts +14 -0
  20. package/getEventTarget/getEventTarget.d.ts +14 -0
  21. package/getEventTarget/getEventTarget.js +22 -0
  22. package/getEventTarget/getEventTarget.mjs +16 -0
  23. package/getEventTarget/index.d.mts +1 -0
  24. package/getEventTarget/index.d.ts +1 -0
  25. package/getEventTarget/index.js +13 -0
  26. package/getEventTarget/index.mjs +1 -0
  27. package/index.d.mts +5 -0
  28. package/index.d.ts +5 -0
  29. package/index.js +42 -2
  30. package/index.mjs +6 -1
  31. package/isEventHandler/index.d.mts +1 -0
  32. package/isEventHandler/index.d.ts +1 -0
  33. package/isEventHandler/index.js +13 -0
  34. package/isEventHandler/index.mjs +1 -0
  35. package/isEventHandler/isEventHandler.d.mts +1 -0
  36. package/isEventHandler/isEventHandler.d.ts +1 -0
  37. package/isEventHandler/isEventHandler.js +13 -0
  38. package/isEventHandler/isEventHandler.mjs +7 -0
  39. package/isHostComponent/isHostComponent.d.mts +1 -1
  40. package/isHostComponent/isHostComponent.d.ts +1 -1
  41. package/package.json +72 -2
  42. package/resolveProps/resolveProps.js +1 -1
  43. package/resolveProps/resolveProps.mjs +1 -1
  44. package/useForcedRerendering/index.d.mts +1 -0
  45. package/useForcedRerendering/index.d.ts +1 -0
  46. package/useForcedRerendering/index.js +13 -0
  47. package/useForcedRerendering/index.mjs +1 -0
  48. package/useForcedRerendering/useForcedRerendering.d.mts +6 -0
  49. package/useForcedRerendering/useForcedRerendering.d.ts +6 -0
  50. package/useForcedRerendering/useForcedRerendering.js +20 -0
  51. package/useForcedRerendering/useForcedRerendering.mjs +15 -0
  52. package/useIsFocusVisible/useIsFocusVisible.js +1 -1
  53. package/useIsFocusVisible/useIsFocusVisible.mjs +1 -1
  54. package/useRovingTabIndex/useRovingTabIndex.js +3 -3
  55. package/useRovingTabIndex/useRovingTabIndex.mjs +3 -3
  56. package/useValueAsRef/index.d.mts +1 -0
  57. package/useValueAsRef/index.d.ts +1 -0
  58. package/useValueAsRef/index.js +13 -0
  59. package/useValueAsRef/index.mjs +1 -0
  60. package/useValueAsRef/useValueAsRef.d.mts +14 -0
  61. package/useValueAsRef/useValueAsRef.d.ts +14 -0
  62. package/useValueAsRef/useValueAsRef.js +35 -0
  63. package/useValueAsRef/useValueAsRef.mjs +29 -0
  64. package/visuallyHidden/visuallyHidden.d.mts +2 -1
  65. package/visuallyHidden/visuallyHidden.d.ts +2 -1
@@ -0,0 +1,7 @@
1
+ // Brought from [Base UI](https://github.com/mui/base-ui/blob/master/packages/react/src/merge-props/mergeProps.ts#L119)
2
+ // Use it directly from Base UI once it's a package dependency.
3
+ export default function isEventHandler(key, value) {
4
+ // This approach is more efficient than using a regex.
5
+ const thirdCharCode = key.charCodeAt(2);
6
+ return key[0] === 'o' && key[1] === 'n' && thirdCharCode >= 65 /* A */ && thirdCharCode <= 90 /* Z */ && typeof value === 'function';
7
+ }
@@ -2,5 +2,5 @@ import * as React from 'react';
2
2
  /**
3
3
  * Determines if a given element is a DOM element name (i.e. not a React component).
4
4
  */
5
- declare function isHostComponent(element: React.ElementType): element is "symbol" | "object" | "search" | "big" | "link" | "small" | "sub" | "sup" | "map" | "filter" | "input" | "set" | "base" | "code" | "data" | "time" | "progress" | "stop" | "track" | "source" | "button" | "address" | "center" | "view" | "clipPath" | "marker" | "mask" | "a" | "abbr" | "area" | "article" | "aside" | "audio" | "b" | "bdi" | "bdo" | "blockquote" | "body" | "br" | "canvas" | "caption" | "cite" | "col" | "colgroup" | "datalist" | "dd" | "del" | "details" | "dfn" | "dialog" | "div" | "dl" | "dt" | "em" | "embed" | "fieldset" | "figcaption" | "figure" | "footer" | "form" | "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "head" | "header" | "hgroup" | "hr" | "html" | "i" | "iframe" | "img" | "ins" | "kbd" | "label" | "legend" | "li" | "main" | "mark" | "menu" | "meta" | "meter" | "nav" | "noscript" | "ol" | "optgroup" | "option" | "output" | "p" | "picture" | "pre" | "q" | "rp" | "rt" | "ruby" | "s" | "samp" | "script" | "section" | "select" | "slot" | "span" | "strong" | "style" | "summary" | "table" | "tbody" | "td" | "template" | "textarea" | "tfoot" | "th" | "thead" | "title" | "tr" | "u" | "ul" | "var" | "video" | "wbr" | "keygen" | "menuitem" | "param" | "animate" | "animateMotion" | "animateTransform" | "circle" | "defs" | "desc" | "ellipse" | "feBlend" | "feColorMatrix" | "feComponentTransfer" | "feComposite" | "feConvolveMatrix" | "feDiffuseLighting" | "feDisplacementMap" | "feDistantLight" | "feDropShadow" | "feFlood" | "feFuncA" | "feFuncB" | "feFuncG" | "feFuncR" | "feGaussianBlur" | "feImage" | "feMerge" | "feMergeNode" | "feMorphology" | "feOffset" | "fePointLight" | "feSpecularLighting" | "feSpotLight" | "feTile" | "feTurbulence" | "foreignObject" | "g" | "image" | "line" | "linearGradient" | "metadata" | "mpath" | "path" | "pattern" | "polygon" | "polyline" | "radialGradient" | "rect" | "svg" | "switch" | "text" | "textPath" | "tspan" | "use" | "noindex" | "webview";
5
+ declare function isHostComponent(element: React.ElementType): element is "symbol" | "object" | "search" | "big" | "link" | "small" | "sub" | "sup" | "map" | "filter" | "input" | "set" | "base" | "code" | "data" | "time" | "source" | "progress" | "stop" | "track" | "button" | "address" | "center" | "view" | "clipPath" | "marker" | "mask" | "a" | "abbr" | "area" | "article" | "aside" | "audio" | "b" | "bdi" | "bdo" | "blockquote" | "body" | "br" | "canvas" | "caption" | "cite" | "col" | "colgroup" | "datalist" | "dd" | "del" | "details" | "dfn" | "dialog" | "div" | "dl" | "dt" | "em" | "embed" | "fieldset" | "figcaption" | "figure" | "footer" | "form" | "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "head" | "header" | "hgroup" | "hr" | "html" | "i" | "iframe" | "img" | "ins" | "kbd" | "label" | "legend" | "li" | "main" | "mark" | "menu" | "meta" | "meter" | "nav" | "noscript" | "ol" | "optgroup" | "option" | "output" | "p" | "picture" | "pre" | "q" | "rp" | "rt" | "ruby" | "s" | "samp" | "script" | "section" | "select" | "slot" | "span" | "strong" | "style" | "summary" | "table" | "tbody" | "td" | "template" | "textarea" | "tfoot" | "th" | "thead" | "title" | "tr" | "u" | "ul" | "var" | "video" | "wbr" | "keygen" | "menuitem" | "param" | "animate" | "animateMotion" | "animateTransform" | "circle" | "defs" | "desc" | "ellipse" | "feBlend" | "feColorMatrix" | "feComponentTransfer" | "feComposite" | "feConvolveMatrix" | "feDiffuseLighting" | "feDisplacementMap" | "feDistantLight" | "feDropShadow" | "feFlood" | "feFuncA" | "feFuncB" | "feFuncG" | "feFuncR" | "feGaussianBlur" | "feImage" | "feMerge" | "feMergeNode" | "feMorphology" | "feOffset" | "fePointLight" | "feSpecularLighting" | "feSpotLight" | "feTile" | "feTurbulence" | "foreignObject" | "g" | "image" | "line" | "linearGradient" | "metadata" | "mpath" | "path" | "pattern" | "polygon" | "polyline" | "radialGradient" | "rect" | "svg" | "switch" | "text" | "textPath" | "tspan" | "use" | "noindex" | "webview";
6
6
  export default isHostComponent;
@@ -2,5 +2,5 @@ import * as React from 'react';
2
2
  /**
3
3
  * Determines if a given element is a DOM element name (i.e. not a React component).
4
4
  */
5
- declare function isHostComponent(element: React.ElementType): element is "symbol" | "object" | "search" | "big" | "link" | "small" | "sub" | "sup" | "map" | "filter" | "input" | "set" | "base" | "code" | "data" | "time" | "progress" | "stop" | "track" | "source" | "button" | "address" | "center" | "view" | "clipPath" | "marker" | "mask" | "a" | "abbr" | "area" | "article" | "aside" | "audio" | "b" | "bdi" | "bdo" | "blockquote" | "body" | "br" | "canvas" | "caption" | "cite" | "col" | "colgroup" | "datalist" | "dd" | "del" | "details" | "dfn" | "dialog" | "div" | "dl" | "dt" | "em" | "embed" | "fieldset" | "figcaption" | "figure" | "footer" | "form" | "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "head" | "header" | "hgroup" | "hr" | "html" | "i" | "iframe" | "img" | "ins" | "kbd" | "label" | "legend" | "li" | "main" | "mark" | "menu" | "meta" | "meter" | "nav" | "noscript" | "ol" | "optgroup" | "option" | "output" | "p" | "picture" | "pre" | "q" | "rp" | "rt" | "ruby" | "s" | "samp" | "script" | "section" | "select" | "slot" | "span" | "strong" | "style" | "summary" | "table" | "tbody" | "td" | "template" | "textarea" | "tfoot" | "th" | "thead" | "title" | "tr" | "u" | "ul" | "var" | "video" | "wbr" | "keygen" | "menuitem" | "param" | "animate" | "animateMotion" | "animateTransform" | "circle" | "defs" | "desc" | "ellipse" | "feBlend" | "feColorMatrix" | "feComponentTransfer" | "feComposite" | "feConvolveMatrix" | "feDiffuseLighting" | "feDisplacementMap" | "feDistantLight" | "feDropShadow" | "feFlood" | "feFuncA" | "feFuncB" | "feFuncG" | "feFuncR" | "feGaussianBlur" | "feImage" | "feMerge" | "feMergeNode" | "feMorphology" | "feOffset" | "fePointLight" | "feSpecularLighting" | "feSpotLight" | "feTile" | "feTurbulence" | "foreignObject" | "g" | "image" | "line" | "linearGradient" | "metadata" | "mpath" | "path" | "pattern" | "polygon" | "polyline" | "radialGradient" | "rect" | "svg" | "switch" | "text" | "textPath" | "tspan" | "use" | "noindex" | "webview";
5
+ declare function isHostComponent(element: React.ElementType): element is "symbol" | "object" | "search" | "big" | "link" | "small" | "sub" | "sup" | "map" | "filter" | "input" | "set" | "base" | "code" | "data" | "time" | "source" | "progress" | "stop" | "track" | "button" | "address" | "center" | "view" | "clipPath" | "marker" | "mask" | "a" | "abbr" | "area" | "article" | "aside" | "audio" | "b" | "bdi" | "bdo" | "blockquote" | "body" | "br" | "canvas" | "caption" | "cite" | "col" | "colgroup" | "datalist" | "dd" | "del" | "details" | "dfn" | "dialog" | "div" | "dl" | "dt" | "em" | "embed" | "fieldset" | "figcaption" | "figure" | "footer" | "form" | "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "head" | "header" | "hgroup" | "hr" | "html" | "i" | "iframe" | "img" | "ins" | "kbd" | "label" | "legend" | "li" | "main" | "mark" | "menu" | "meta" | "meter" | "nav" | "noscript" | "ol" | "optgroup" | "option" | "output" | "p" | "picture" | "pre" | "q" | "rp" | "rt" | "ruby" | "s" | "samp" | "script" | "section" | "select" | "slot" | "span" | "strong" | "style" | "summary" | "table" | "tbody" | "td" | "template" | "textarea" | "tfoot" | "th" | "thead" | "title" | "tr" | "u" | "ul" | "var" | "video" | "wbr" | "keygen" | "menuitem" | "param" | "animate" | "animateMotion" | "animateTransform" | "circle" | "defs" | "desc" | "ellipse" | "feBlend" | "feColorMatrix" | "feComponentTransfer" | "feComposite" | "feConvolveMatrix" | "feDiffuseLighting" | "feDisplacementMap" | "feDistantLight" | "feDropShadow" | "feFlood" | "feFuncA" | "feFuncB" | "feFuncG" | "feFuncR" | "feGaussianBlur" | "feImage" | "feMerge" | "feMergeNode" | "feMorphology" | "feOffset" | "fePointLight" | "feSpecularLighting" | "feSpotLight" | "feTile" | "feTurbulence" | "foreignObject" | "g" | "image" | "line" | "linearGradient" | "metadata" | "mpath" | "path" | "pattern" | "polygon" | "polyline" | "radialGradient" | "rect" | "svg" | "switch" | "text" | "textPath" | "tspan" | "use" | "noindex" | "webview";
6
6
  export default isHostComponent;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/utils",
3
- "version": "9.0.0",
3
+ "version": "9.1.0",
4
4
  "author": "MUI Team",
5
5
  "description": "Utility functions for React components.",
6
6
  "license": "MIT",
@@ -28,7 +28,7 @@
28
28
  "@types/prop-types": "^15.7.15",
29
29
  "clsx": "^2.1.1",
30
30
  "prop-types": "^15.8.1",
31
- "react-is": "^19.2.4",
31
+ "react-is": "^19.2.6",
32
32
  "@mui/types": "^9.0.0"
33
33
  },
34
34
  "peerDependencies": {
@@ -162,6 +162,20 @@
162
162
  "default": "./composeClasses/index.mjs"
163
163
  }
164
164
  },
165
+ "./contains": {
166
+ "import": {
167
+ "types": "./contains/index.d.mts",
168
+ "default": "./contains/index.mjs"
169
+ },
170
+ "require": {
171
+ "types": "./contains/index.d.ts",
172
+ "default": "./contains/index.js"
173
+ },
174
+ "default": {
175
+ "types": "./contains/index.d.mts",
176
+ "default": "./contains/index.mjs"
177
+ }
178
+ },
165
179
  "./createChainedFunction": {
166
180
  "import": {
167
181
  "types": "./createChainedFunction/index.d.mts",
@@ -372,6 +386,20 @@
372
386
  "default": "./getDisplayName/index.mjs"
373
387
  }
374
388
  },
389
+ "./getEventTarget": {
390
+ "import": {
391
+ "types": "./getEventTarget/index.d.mts",
392
+ "default": "./getEventTarget/index.mjs"
393
+ },
394
+ "require": {
395
+ "types": "./getEventTarget/index.d.ts",
396
+ "default": "./getEventTarget/index.js"
397
+ },
398
+ "default": {
399
+ "types": "./getEventTarget/index.d.mts",
400
+ "default": "./getEventTarget/index.mjs"
401
+ }
402
+ },
375
403
  "./getReactElementRef": {
376
404
  "import": {
377
405
  "types": "./getReactElementRef/index.d.mts",
@@ -442,6 +470,20 @@
442
470
  "default": "./integerPropType/index.mjs"
443
471
  }
444
472
  },
473
+ "./isEventHandler": {
474
+ "import": {
475
+ "types": "./isEventHandler/index.d.mts",
476
+ "default": "./isEventHandler/index.mjs"
477
+ },
478
+ "require": {
479
+ "types": "./isEventHandler/index.d.ts",
480
+ "default": "./isEventHandler/index.js"
481
+ },
482
+ "default": {
483
+ "types": "./isEventHandler/index.d.mts",
484
+ "default": "./isEventHandler/index.mjs"
485
+ }
486
+ },
445
487
  "./isFocusVisible": {
446
488
  "import": {
447
489
  "types": "./isFocusVisible/index.d.mts",
@@ -708,6 +750,20 @@
708
750
  "default": "./useEventCallback/index.mjs"
709
751
  }
710
752
  },
753
+ "./useForcedRerendering": {
754
+ "import": {
755
+ "types": "./useForcedRerendering/index.d.mts",
756
+ "default": "./useForcedRerendering/index.mjs"
757
+ },
758
+ "require": {
759
+ "types": "./useForcedRerendering/index.d.ts",
760
+ "default": "./useForcedRerendering/index.js"
761
+ },
762
+ "default": {
763
+ "types": "./useForcedRerendering/index.d.mts",
764
+ "default": "./useForcedRerendering/index.mjs"
765
+ }
766
+ },
711
767
  "./useForkRef": {
712
768
  "import": {
713
769
  "types": "./useForkRef/index.d.mts",
@@ -848,6 +904,20 @@
848
904
  "default": "./useTimeout/index.mjs"
849
905
  }
850
906
  },
907
+ "./useValueAsRef": {
908
+ "import": {
909
+ "types": "./useValueAsRef/index.d.mts",
910
+ "default": "./useValueAsRef/index.mjs"
911
+ },
912
+ "require": {
913
+ "types": "./useValueAsRef/index.d.ts",
914
+ "default": "./useValueAsRef/index.js"
915
+ },
916
+ "default": {
917
+ "types": "./useValueAsRef/index.d.mts",
918
+ "default": "./useValueAsRef/index.mjs"
919
+ }
920
+ },
851
921
  "./visuallyHidden": {
852
922
  "import": {
853
923
  "types": "./visuallyHidden/index.d.mts",
@@ -45,7 +45,7 @@ function resolveProps(defaultProps, props, mergeClassNameAndStyle = false) {
45
45
  }
46
46
  }
47
47
  }
48
- } else if (propName === 'className' && mergeClassNameAndStyle && props.className) {
48
+ } else if (propName === 'className' && mergeClassNameAndStyle && props.className !== undefined) {
49
49
  output.className = (0, _clsx.default)(defaultProps?.className, props?.className);
50
50
  } else if (propName === 'style' && mergeClassNameAndStyle && props.style) {
51
51
  output.style = {
@@ -39,7 +39,7 @@ export default function resolveProps(defaultProps, props, mergeClassNameAndStyle
39
39
  }
40
40
  }
41
41
  }
42
- } else if (propName === 'className' && mergeClassNameAndStyle && props.className) {
42
+ } else if (propName === 'className' && mergeClassNameAndStyle && props.className !== undefined) {
43
43
  output.className = clsx(defaultProps?.className, props?.className);
44
44
  } else if (propName === 'style' && mergeClassNameAndStyle && props.style) {
45
45
  output.style = {
@@ -0,0 +1 @@
1
+ export { default } from "./useForcedRerendering.mjs";
@@ -0,0 +1 @@
1
+ export { default } from "./useForcedRerendering.js";
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ Object.defineProperty(exports, "default", {
8
+ enumerable: true,
9
+ get: function () {
10
+ return _useForcedRerendering.default;
11
+ }
12
+ });
13
+ var _useForcedRerendering = _interopRequireDefault(require("./useForcedRerendering"));
@@ -0,0 +1 @@
1
+ export { default } from "./useForcedRerendering.mjs";
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Copied from @base-ui/utils
3
+ *
4
+ * Returns a function that forces a rerender.
5
+ */
6
+ export default function useForcedRerendering(): () => void;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Copied from @base-ui/utils
3
+ *
4
+ * Returns a function that forces a rerender.
5
+ */
6
+ export default function useForcedRerendering(): () => void;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ 'use client';
3
+
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = useForcedRerendering;
9
+ var React = _interopRequireWildcard(require("react"));
10
+ /**
11
+ * Copied from @base-ui/utils
12
+ *
13
+ * Returns a function that forces a rerender.
14
+ */
15
+ function useForcedRerendering() {
16
+ const [, setState] = React.useState({});
17
+ return React.useCallback(() => {
18
+ setState({});
19
+ }, []);
20
+ }
@@ -0,0 +1,15 @@
1
+ 'use client';
2
+
3
+ import * as React from 'react';
4
+
5
+ /**
6
+ * Copied from @base-ui/utils
7
+ *
8
+ * Returns a function that forces a rerender.
9
+ */
10
+ export default function useForcedRerendering() {
11
+ const [, setState] = React.useState({});
12
+ return React.useCallback(() => {
13
+ setState({});
14
+ }, []);
15
+ }
@@ -134,7 +134,7 @@ function useIsFocusVisible() {
134
134
  // checking against potential state variable does not suffice if we focus and blur synchronously.
135
135
  // React wouldn't have time to trigger a re-render so `focusVisible` would be stale.
136
136
  // Ideally we would adjust `isFocusVisible(event)` to look at `relatedTarget` for blur events.
137
- // This doesn't work in IE11 due to https://github.com/facebook/react/issues/3751
137
+ // This doesn't work in IE 11 due to https://github.com/facebook/react/issues/3751
138
138
  // TODO: check again if React releases their internal changes to focus event handling (https://github.com/facebook/react/pull/19186).
139
139
  if (isFocusVisibleRef.current) {
140
140
  // To detect a tab/window switch, we look for a blur event followed
@@ -127,7 +127,7 @@ export default function useIsFocusVisible() {
127
127
  // checking against potential state variable does not suffice if we focus and blur synchronously.
128
128
  // React wouldn't have time to trigger a re-render so `focusVisible` would be stale.
129
129
  // Ideally we would adjust `isFocusVisible(event)` to look at `relatedTarget` for blur events.
130
- // This doesn't work in IE11 due to https://github.com/facebook/react/issues/3751
130
+ // This doesn't work in IE 11 due to https://github.com/facebook/react/issues/3751
131
131
  // TODO: check again if React releases their internal changes to focus event handling (https://github.com/facebook/react/pull/19186).
132
132
  if (isFocusVisibleRef.current) {
133
133
  // To detect a tab/window switch, we look for a blur event followed
@@ -36,10 +36,10 @@ function useRovingTabIndexRoot(params) {
36
36
  wrap = true
37
37
  } = params;
38
38
  const [activeItemIdState, setActiveItemIdState] = React.useState(activeItemIdProp);
39
- const previousActiveItemIdPropRef = React.useRef(activeItemIdProp);
39
+ const [previousActiveItemIdProp, setPreviousActiveItemIdProp] = React.useState(activeItemIdProp);
40
40
  let activeItemIdCandidate = activeItemIdState;
41
- if (activeItemIdProp !== previousActiveItemIdPropRef.current) {
42
- previousActiveItemIdPropRef.current = activeItemIdProp;
41
+ if (activeItemIdProp !== previousActiveItemIdProp) {
42
+ setPreviousActiveItemIdProp(activeItemIdProp);
43
43
  if (activeItemIdProp !== undefined && activeItemIdProp !== activeItemIdState) {
44
44
  activeItemIdCandidate = activeItemIdProp;
45
45
  setActiveItemIdState(activeItemIdProp);
@@ -27,10 +27,10 @@ export function useRovingTabIndexRoot(params) {
27
27
  wrap = true
28
28
  } = params;
29
29
  const [activeItemIdState, setActiveItemIdState] = React.useState(activeItemIdProp);
30
- const previousActiveItemIdPropRef = React.useRef(activeItemIdProp);
30
+ const [previousActiveItemIdProp, setPreviousActiveItemIdProp] = React.useState(activeItemIdProp);
31
31
  let activeItemIdCandidate = activeItemIdState;
32
- if (activeItemIdProp !== previousActiveItemIdPropRef.current) {
33
- previousActiveItemIdPropRef.current = activeItemIdProp;
32
+ if (activeItemIdProp !== previousActiveItemIdProp) {
33
+ setPreviousActiveItemIdProp(activeItemIdProp);
34
34
  if (activeItemIdProp !== undefined && activeItemIdProp !== activeItemIdState) {
35
35
  activeItemIdCandidate = activeItemIdProp;
36
36
  setActiveItemIdState(activeItemIdProp);
@@ -0,0 +1 @@
1
+ export { default } from "./useValueAsRef.mjs";
@@ -0,0 +1 @@
1
+ export { default } from "./useValueAsRef.js";
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ Object.defineProperty(exports, "default", {
8
+ enumerable: true,
9
+ get: function () {
10
+ return _useValueAsRef.default;
11
+ }
12
+ });
13
+ var _useValueAsRef = _interopRequireDefault(require("./useValueAsRef"));
@@ -0,0 +1 @@
1
+ export { default } from "./useValueAsRef.mjs";
@@ -0,0 +1,14 @@
1
+ interface ValueRef<T> {
2
+ current: T;
3
+ next: T;
4
+ effect: () => void;
5
+ }
6
+ /**
7
+ * Copied from `@base-ui/utils/useValueAsRef`.
8
+ *
9
+ * Stores the latest value in a stable ref. The ref updates after React commits,
10
+ * so effects and delayed callbacks can read the current value without depending
11
+ * on it and rerunning.
12
+ */
13
+ export default function useValueAsRef<T>(value: T): ValueRef<T>;
14
+ export {};
@@ -0,0 +1,14 @@
1
+ interface ValueRef<T> {
2
+ current: T;
3
+ next: T;
4
+ effect: () => void;
5
+ }
6
+ /**
7
+ * Copied from `@base-ui/utils/useValueAsRef`.
8
+ *
9
+ * Stores the latest value in a stable ref. The ref updates after React commits,
10
+ * so effects and delayed callbacks can read the current value without depending
11
+ * on it and rerunning.
12
+ */
13
+ export default function useValueAsRef<T>(value: T): ValueRef<T>;
14
+ export {};
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ 'use client';
3
+
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = useValueAsRef;
9
+ var _useEnhancedEffect = _interopRequireDefault(require("../useEnhancedEffect/useEnhancedEffect"));
10
+ var _useLazyRef = _interopRequireDefault(require("../useLazyRef/useLazyRef"));
11
+ /**
12
+ * Copied from `@base-ui/utils/useValueAsRef`.
13
+ *
14
+ * Stores the latest value in a stable ref. The ref updates after React commits,
15
+ * so effects and delayed callbacks can read the current value without depending
16
+ * on it and rerunning.
17
+ */
18
+ function useValueAsRef(value) {
19
+ const latest = (0, _useLazyRef.default)(() => createValueRef(value)).current;
20
+ latest.next = value;
21
+
22
+ // eslint-disable-next-line react-hooks/exhaustive-deps -- effect never changes; it reads latest.next.
23
+ (0, _useEnhancedEffect.default)(latest.effect);
24
+ return latest;
25
+ }
26
+ function createValueRef(value) {
27
+ const latest = {
28
+ current: value,
29
+ next: value,
30
+ effect: () => {
31
+ latest.current = latest.next;
32
+ }
33
+ };
34
+ return latest;
35
+ }
@@ -0,0 +1,29 @@
1
+ 'use client';
2
+
3
+ import useEnhancedEffect from "../useEnhancedEffect/useEnhancedEffect.mjs";
4
+ import useLazyRef from "../useLazyRef/useLazyRef.mjs";
5
+ /**
6
+ * Copied from `@base-ui/utils/useValueAsRef`.
7
+ *
8
+ * Stores the latest value in a stable ref. The ref updates after React commits,
9
+ * so effects and delayed callbacks can read the current value without depending
10
+ * on it and rerunning.
11
+ */
12
+ export default function useValueAsRef(value) {
13
+ const latest = useLazyRef(() => createValueRef(value)).current;
14
+ latest.next = value;
15
+
16
+ // eslint-disable-next-line react-hooks/exhaustive-deps -- effect never changes; it reads latest.next.
17
+ useEnhancedEffect(latest.effect);
18
+ return latest;
19
+ }
20
+ function createValueRef(value) {
21
+ const latest = {
22
+ current: value,
23
+ next: value,
24
+ effect: () => {
25
+ latest.current = latest.next;
26
+ }
27
+ };
28
+ return latest;
29
+ }
@@ -1,2 +1,3 @@
1
- declare const visuallyHidden: import('react').CSSProperties;
1
+ import type * as React from 'react';
2
+ declare const visuallyHidden: React.CSSProperties;
2
3
  export default visuallyHidden;
@@ -1,2 +1,3 @@
1
- declare const visuallyHidden: import('react').CSSProperties;
1
+ import type * as React from 'react';
2
+ declare const visuallyHidden: React.CSSProperties;
2
3
  export default visuallyHidden;