@sanity/ui 2.6.7-canary.0 → 2.6.8-canary.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.
- package/dist/index.d.mts +6 -42
- package/dist/index.d.ts +6 -42
- package/dist/index.esm.js +158 -87
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +157 -86
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +158 -87
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/core/components/breadcrumbs/breadcrumbs.tsx +6 -15
- package/src/core/components/dialog/dialog.tsx +21 -12
- package/src/core/components/menu/menu.tsx +18 -11
- package/src/core/components/menu/menuButton.tsx +1 -1
- package/src/core/components/menu/menuContext.ts +1 -1
- package/src/core/components/menu/useMenuController.ts +17 -11
- package/src/core/components/toast/styles.ts +1 -2
- package/src/core/components/toast/useToast.ts +0 -1
- package/src/core/components/tree/tree.tsx +0 -1
- package/src/core/components/tree/treeItem.tsx +0 -1
- package/src/core/helpers/focus.ts +0 -1
- package/src/core/helpers/scroll.ts +0 -1
- package/src/core/hooks/_internal/index.ts +1 -0
- package/src/core/hooks/_internal/useUnique.ts +34 -0
- package/src/core/hooks/index.ts +2 -3
- package/src/core/hooks/useClickOutside.ts +72 -38
- package/src/core/hooks/useElementSize.ts +0 -1
- package/src/core/hooks/useMediaIndex/useMediaIndex.ts +10 -2
- package/src/core/hooks/usePrefersDark.ts +55 -10
- package/src/core/hooks/usePrefersReducedMotion.ts +56 -10
- package/src/core/primitives/popover/__workshop__/AlignedStory.tsx +7 -9
- package/src/core/primitives/tooltip/__workshop__/customPortal.tsx +6 -8
- package/src/core/primitives/tooltip/tooltipDelayGroup/tooltipDelayGroupProvider.tsx +0 -1
- package/src/core/utils/layer/layerProvider.tsx +0 -1
- package/src/core/utils/portal/__workshop__/named.tsx +8 -10
- package/src/core/utils/portal/portalProvider.tsx +13 -7
- package/src/core/hooks/useMatchMedia.ts +0 -46
package/dist/index.js
CHANGED
|
@@ -126,26 +126,45 @@ function useArrayProp(val, defaultVal) {
|
|
|
126
126
|
[__perf_hash__]
|
|
127
127
|
);
|
|
128
128
|
}
|
|
129
|
+
function _getElements(element, elementsArg) {
|
|
130
|
+
const ret = [element];
|
|
131
|
+
for (const el of elementsArg)
|
|
132
|
+
Array.isArray(el) ? ret.push(...el) : ret.push(el);
|
|
133
|
+
return ret.filter(Boolean);
|
|
134
|
+
}
|
|
129
135
|
function useClickOutside(listener, elementsArg = EMPTY_ARRAY, boundaryElement) {
|
|
130
|
-
const
|
|
131
|
-
|
|
132
|
-
|
|
136
|
+
const [element, setElement] = react.useState(null), [elements, setElements] = react.useState(() => _getElements(element, elementsArg)), elementsRef = react.useRef(elements);
|
|
137
|
+
return react.useEffect(() => {
|
|
138
|
+
const prevElements = elementsRef.current, nextElements = _getElements(element, elementsArg);
|
|
139
|
+
if (prevElements.length !== nextElements.length) {
|
|
140
|
+
setElements(nextElements), elementsRef.current = nextElements;
|
|
133
141
|
return;
|
|
134
|
-
|
|
135
|
-
for (const el of
|
|
136
|
-
if (
|
|
142
|
+
}
|
|
143
|
+
for (const el of prevElements)
|
|
144
|
+
if (!nextElements.includes(el)) {
|
|
145
|
+
setElements(nextElements), elementsRef.current = nextElements;
|
|
137
146
|
return;
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
147
|
+
}
|
|
148
|
+
for (const el of nextElements)
|
|
149
|
+
if (!prevElements.includes(el)) {
|
|
150
|
+
setElements(nextElements), elementsRef.current = nextElements;
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
}, [element, elementsArg]), react.useEffect(() => {
|
|
154
|
+
if (!listener) return;
|
|
155
|
+
const handleWindowMouseDown = (evt) => {
|
|
156
|
+
const target = evt.target;
|
|
157
|
+
if (target instanceof Node && !(boundaryElement && !boundaryElement.contains(target))) {
|
|
158
|
+
for (const el of elements)
|
|
159
|
+
if (target === el || el.contains(target))
|
|
160
|
+
return;
|
|
161
|
+
listener(evt);
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
return window.addEventListener("mousedown", handleWindowMouseDown), () => {
|
|
165
|
+
window.removeEventListener("mousedown", handleWindowMouseDown);
|
|
166
|
+
};
|
|
167
|
+
}, [boundaryElement, listener, elements]), setElement;
|
|
149
168
|
}
|
|
150
169
|
var resizeObservers = [], hasActiveObservations = function() {
|
|
151
170
|
return resizeObservers.some(function(ro) {
|
|
@@ -480,27 +499,9 @@ function useElementRect(element) {
|
|
|
480
499
|
const elementSize = useElementSize(element);
|
|
481
500
|
return (elementSize == null ? void 0 : elementSize._contentRect) || null;
|
|
482
501
|
}
|
|
483
|
-
function useForwardedRef(ref) {
|
|
484
|
-
const innerRef = react.useRef(null);
|
|
485
|
-
return react.useImperativeHandle(ref, () => innerRef.current), innerRef;
|
|
486
|
-
}
|
|
487
502
|
function useGlobalKeyDown(onKeyDown) {
|
|
488
503
|
return react.useEffect(() => (addEventListener("keydown", onKeyDown), () => removeEventListener("keydown", onKeyDown)), [onKeyDown]);
|
|
489
504
|
}
|
|
490
|
-
function useMatchMedia(mediaQueryString, getServerSnapshot2) {
|
|
491
|
-
const { subscribe: subscribe2, getSnapshot } = react.useMemo(() => {
|
|
492
|
-
let MEDIA_QUERY_CACHE;
|
|
493
|
-
const getMatchMedia = () => (MEDIA_QUERY_CACHE || (MEDIA_QUERY_CACHE = window.matchMedia(mediaQueryString)), MEDIA_QUERY_CACHE);
|
|
494
|
-
return {
|
|
495
|
-
subscribe: (onStoreChange) => {
|
|
496
|
-
const matchMedia = getMatchMedia();
|
|
497
|
-
return matchMedia.addEventListener("change", onStoreChange), () => matchMedia.removeEventListener("change", onStoreChange);
|
|
498
|
-
},
|
|
499
|
-
getSnapshot: () => getMatchMedia().matches
|
|
500
|
-
};
|
|
501
|
-
}, [mediaQueryString]);
|
|
502
|
-
return react.useDebugValue(mediaQueryString), react.useSyncExternalStore(subscribe2, getSnapshot, getServerSnapshot2);
|
|
503
|
-
}
|
|
504
505
|
function getGlobalScope() {
|
|
505
506
|
if (typeof globalThis < "u") return globalThis;
|
|
506
507
|
if (typeof window < "u") return window;
|
|
@@ -543,6 +544,7 @@ function useTheme() {
|
|
|
543
544
|
function useTheme_v2() {
|
|
544
545
|
return theme.getTheme_v2(styledComponents.useTheme());
|
|
545
546
|
}
|
|
547
|
+
const MEDIA_STORE_CACHE = /* @__PURE__ */ new WeakMap();
|
|
546
548
|
function _getMediaQuery(media, index) {
|
|
547
549
|
return index === 0 ? `screen and (max-width: ${media[index] - 1}px)` : index === media.length ? `screen and (min-width: ${media[index - 1]}px)` : `screen and (min-width: ${media[index - 1]}px) and (max-width: ${media[index] - 1}px)`;
|
|
548
550
|
}
|
|
@@ -577,18 +579,57 @@ function _createMediaStore(media) {
|
|
|
577
579
|
};
|
|
578
580
|
} };
|
|
579
581
|
}
|
|
580
|
-
function getServerSnapshot() {
|
|
582
|
+
function getServerSnapshot$2() {
|
|
581
583
|
return 0;
|
|
582
584
|
}
|
|
583
585
|
function useMediaIndex() {
|
|
584
|
-
const { media } = useTheme_v2()
|
|
585
|
-
|
|
586
|
+
const { media } = useTheme_v2();
|
|
587
|
+
let store = MEDIA_STORE_CACHE.get(media);
|
|
588
|
+
return store || (store = _createMediaStore(media), MEDIA_STORE_CACHE.set(media, store)), react.useSyncExternalStore(store.subscribe, store.getSnapshot, getServerSnapshot$2);
|
|
589
|
+
}
|
|
590
|
+
let MEDIA_QUERY_CACHE$1;
|
|
591
|
+
function getMatchMedia$1() {
|
|
592
|
+
return MEDIA_QUERY_CACHE$1 || (MEDIA_QUERY_CACHE$1 = window.matchMedia("(prefers-color-scheme: dark)")), MEDIA_QUERY_CACHE$1;
|
|
593
|
+
}
|
|
594
|
+
function subscribe$2(onStoreChange) {
|
|
595
|
+
const matchMedia = getMatchMedia$1();
|
|
596
|
+
return matchMedia.addEventListener("change", onStoreChange), () => matchMedia.removeEventListener("change", onStoreChange);
|
|
597
|
+
}
|
|
598
|
+
function getSnapshot$1() {
|
|
599
|
+
return getMatchMedia$1().matches;
|
|
600
|
+
}
|
|
601
|
+
function getServerSnapshot$1() {
|
|
602
|
+
return !1;
|
|
603
|
+
}
|
|
604
|
+
function usePrefersDark() {
|
|
605
|
+
return react.useSyncExternalStore(subscribe$2, getSnapshot$1, getServerSnapshot$1);
|
|
586
606
|
}
|
|
587
|
-
|
|
588
|
-
|
|
607
|
+
let MEDIA_QUERY_CACHE;
|
|
608
|
+
function getMatchMedia() {
|
|
609
|
+
return MEDIA_QUERY_CACHE || (MEDIA_QUERY_CACHE = window.matchMedia("(prefers-reduced-motion: reduce)")), MEDIA_QUERY_CACHE;
|
|
589
610
|
}
|
|
590
|
-
function
|
|
591
|
-
|
|
611
|
+
function subscribe$1(onStoreChange) {
|
|
612
|
+
const matchMedia = getMatchMedia();
|
|
613
|
+
return matchMedia.addEventListener("change", onStoreChange), () => matchMedia.removeEventListener("change", onStoreChange);
|
|
614
|
+
}
|
|
615
|
+
function getSnapshot() {
|
|
616
|
+
return getMatchMedia().matches;
|
|
617
|
+
}
|
|
618
|
+
function getServerSnapshot() {
|
|
619
|
+
return !1;
|
|
620
|
+
}
|
|
621
|
+
function usePrefersReducedMotion() {
|
|
622
|
+
return react.useSyncExternalStore(subscribe$1, getSnapshot, getServerSnapshot);
|
|
623
|
+
}
|
|
624
|
+
function useForwardedRef(ref) {
|
|
625
|
+
const innerRef = react.useRef(null);
|
|
626
|
+
return react.useImperativeHandle(ref, () => innerRef.current), innerRef;
|
|
627
|
+
}
|
|
628
|
+
function useCustomValidity(ref, customValidity) {
|
|
629
|
+
react.useEffect(() => {
|
|
630
|
+
var _a;
|
|
631
|
+
(_a = ref.current) == null || _a.setCustomValidity(customValidity || "");
|
|
632
|
+
}, [customValidity, ref]);
|
|
592
633
|
}
|
|
593
634
|
function responsiveBorderStyle() {
|
|
594
635
|
return [border, borderTop, borderRight, borderBottom, borderLeft];
|
|
@@ -3014,25 +3055,31 @@ function Portal(props) {
|
|
|
3014
3055
|
const { children, __unstable_name: name } = props, portal = usePortal(), portalElement = (name ? portal.elements && portal.elements[name] : portal.element) || ((_a = portal.elements) == null ? void 0 : _a.default);
|
|
3015
3056
|
return portalElement ? reactDom.createPortal(children, portalElement) : null;
|
|
3016
3057
|
}
|
|
3017
|
-
function
|
|
3018
|
-
|
|
3019
|
-
|
|
3020
|
-
|
|
3021
|
-
|
|
3022
|
-
)
|
|
3058
|
+
function useUnique(value) {
|
|
3059
|
+
const valueRef = react.useRef(value);
|
|
3060
|
+
return _isEqual(valueRef.current, value) || (valueRef.current = value), valueRef.current;
|
|
3061
|
+
}
|
|
3062
|
+
function _isEqual(objA, objB) {
|
|
3063
|
+
if (!objA || !objB)
|
|
3064
|
+
return objA === objB;
|
|
3065
|
+
const keysA = Object.keys(objA), keysB = Object.keys(objB);
|
|
3066
|
+
return keysA.length !== keysB.length ? !1 : keysA.every((key2) => objA[key2] === objB[key2]);
|
|
3023
3067
|
}
|
|
3024
|
-
const subscribe = () => () => {
|
|
3025
|
-
};
|
|
3026
3068
|
function PortalProvider(props) {
|
|
3027
|
-
const { boundaryElement, children, element, __unstable_elements:
|
|
3069
|
+
const { boundaryElement, children, element, __unstable_elements: elementsProp } = props, elements = useUnique(elementsProp), fallbackElement = react.useSyncExternalStore(
|
|
3070
|
+
emptySubscribe,
|
|
3071
|
+
() => document.body,
|
|
3072
|
+
() => null
|
|
3073
|
+
), value = react.useMemo(() => ({
|
|
3028
3074
|
version: 0,
|
|
3029
3075
|
boundaryElement: boundaryElement || null,
|
|
3030
|
-
element: element ||
|
|
3076
|
+
element: element || fallbackElement,
|
|
3031
3077
|
elements
|
|
3032
|
-
}), [boundaryElement, element, elements,
|
|
3078
|
+
}), [boundaryElement, element, elements, fallbackElement]);
|
|
3033
3079
|
return /* @__PURE__ */ jsxRuntime.jsx(PortalContext.Provider, { value, children });
|
|
3034
3080
|
}
|
|
3035
|
-
const
|
|
3081
|
+
const emptySubscribe = () => () => {
|
|
3082
|
+
}, Root$i = styledComponents.styled.div`
|
|
3036
3083
|
display: block;
|
|
3037
3084
|
width: 0;
|
|
3038
3085
|
height: 0;
|
|
@@ -4911,8 +4958,8 @@ const AUTOCOMPLETE_LISTBOX_IGNORE_KEYS = [
|
|
|
4911
4958
|
appearance: none;
|
|
4912
4959
|
margin: -4px;
|
|
4913
4960
|
`, Breadcrumbs = react.forwardRef(function(props, ref) {
|
|
4914
|
-
const { children, maxLength, separator, space: spaceRaw = 2, ...restProps } = props, space = useArrayProp(spaceRaw), [open, setOpen] = react.useState(!1),
|
|
4915
|
-
useClickOutside(collapse,
|
|
4961
|
+
const { children, maxLength, separator, space: spaceRaw = 2, ...restProps } = props, space = useArrayProp(spaceRaw), [open, setOpen] = react.useState(!1), [expandElement, setExpandElement] = react.useState(null), [popoverElement, setPopoverElement] = react.useState(null), collapse = react.useCallback(() => setOpen(!1), []), expand = react.useCallback(() => setOpen(!0), []);
|
|
4962
|
+
useClickOutside(collapse, [expandElement, popoverElement]);
|
|
4916
4963
|
const rawItems = react.useMemo(() => react.Children.toArray(children).filter(react.isValidElement), [children]), items = react.useMemo(() => {
|
|
4917
4964
|
const len = rawItems.length;
|
|
4918
4965
|
if (maxLength && len > maxLength) {
|
|
@@ -4927,7 +4974,7 @@ const AUTOCOMPLETE_LISTBOX_IGNORE_KEYS = [
|
|
|
4927
4974
|
open,
|
|
4928
4975
|
placement: "top",
|
|
4929
4976
|
portal: !0,
|
|
4930
|
-
ref:
|
|
4977
|
+
ref: setPopoverElement,
|
|
4931
4978
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
4932
4979
|
ExpandButton,
|
|
4933
4980
|
{
|
|
@@ -4935,7 +4982,7 @@ const AUTOCOMPLETE_LISTBOX_IGNORE_KEYS = [
|
|
|
4935
4982
|
mode: "bleed",
|
|
4936
4983
|
onClick: open ? collapse : expand,
|
|
4937
4984
|
padding: 1,
|
|
4938
|
-
ref:
|
|
4985
|
+
ref: setExpandElement,
|
|
4939
4986
|
selected: open,
|
|
4940
4987
|
text: "\u2026"
|
|
4941
4988
|
}
|
|
@@ -5060,8 +5107,8 @@ const Root$7 = styledComponents.styled(Layer)(responsivePaddingStyle, dialogStyl
|
|
|
5060
5107
|
scheme,
|
|
5061
5108
|
shadow: shadowProp,
|
|
5062
5109
|
width: widthProp
|
|
5063
|
-
} = props, portal = usePortal(), portalElement = portalProp ? ((_a = portal.elements) == null ? void 0 : _a[portalProp]) || null : portal.element, boundaryElement = useBoundaryElement().element, radius = useArrayProp(radiusProp), shadow = useArrayProp(shadowProp), width = useArrayProp(widthProp), ref = react.useRef(null), contentRef = react.useRef(null), layer = useLayer(), { isTopLayer } = layer, labelId = `${id}_label`, showCloseButton = !!onClose && hideCloseButton === !1, showHeader = !!header || showCloseButton;
|
|
5064
|
-
|
|
5110
|
+
} = props, portal = usePortal(), portalElement = portalProp ? ((_a = portal.elements) == null ? void 0 : _a[portalProp]) || null : portal.element, boundaryElement = useBoundaryElement().element, radius = useArrayProp(radiusProp), shadow = useArrayProp(shadowProp), width = useArrayProp(widthProp), ref = react.useRef(null), [rootElement, setRootElement] = react.useState(null), contentRef = react.useRef(null), layer = useLayer(), { isTopLayer } = layer, labelId = `${id}_label`, showCloseButton = !!onClose && hideCloseButton === !1, showHeader = !!header || showCloseButton;
|
|
5111
|
+
react.useImperativeHandle(forwardedRef, () => ref.current), react.useImperativeHandle(
|
|
5065
5112
|
forwardedContentRef,
|
|
5066
5113
|
() => contentRef.current
|
|
5067
5114
|
), react.useEffect(() => {
|
|
@@ -5076,13 +5123,20 @@ const Root$7 = styledComponents.styled(Layer)(responsivePaddingStyle, dialogStyl
|
|
|
5076
5123
|
[boundaryElement, isTopLayer, onClose, portalElement]
|
|
5077
5124
|
)
|
|
5078
5125
|
), useClickOutside(
|
|
5079
|
-
(
|
|
5080
|
-
|
|
5081
|
-
|
|
5082
|
-
|
|
5083
|
-
|
|
5084
|
-
|
|
5085
|
-
|
|
5126
|
+
react.useCallback(
|
|
5127
|
+
(event) => {
|
|
5128
|
+
if (!isTopLayer || !onClickOutside) return;
|
|
5129
|
+
const target = event.target;
|
|
5130
|
+
target && !isTargetWithinScope(boundaryElement, portalElement, target) || onClickOutside();
|
|
5131
|
+
},
|
|
5132
|
+
[boundaryElement, isTopLayer, onClickOutside, portalElement]
|
|
5133
|
+
),
|
|
5134
|
+
[rootElement]
|
|
5135
|
+
);
|
|
5136
|
+
const setRef = react.useCallback((el) => {
|
|
5137
|
+
setRootElement(el), ref.current = el;
|
|
5138
|
+
}, []);
|
|
5139
|
+
return /* @__PURE__ */ jsxRuntime.jsx(DialogContainer, { "data-ui": "DialogCard", width, children: /* @__PURE__ */ jsxRuntime.jsx(DialogCardRoot, { radius, ref: setRef, scheme, shadow, children: /* @__PURE__ */ jsxRuntime.jsxs(DialogLayout, { direction: "column", children: [
|
|
5086
5140
|
showHeader && /* @__PURE__ */ jsxRuntime.jsx(DialogHeader, { children: /* @__PURE__ */ jsxRuntime.jsxs(Flex, { align: "center", padding: 3, children: [
|
|
5087
5141
|
/* @__PURE__ */ jsxRuntime.jsx(Box, { flex: 1, padding: 2, children: header && /* @__PURE__ */ jsxRuntime.jsx(Text, { id: labelId, size: 1, weight: "semibold", children: header }) }),
|
|
5088
5142
|
showCloseButton && /* @__PURE__ */ jsxRuntime.jsx(Box, { flex: "none", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -5260,13 +5314,13 @@ function _sortElements(rootElement, elements) {
|
|
|
5260
5314
|
elements.sort(_sort);
|
|
5261
5315
|
}
|
|
5262
5316
|
function useMenuController(props) {
|
|
5263
|
-
const { onKeyDown, originElement, shouldFocus
|
|
5317
|
+
const { onKeyDown, originElement, shouldFocus } = props, elementsRef = react.useRef([]), [rootElement, setRootElement] = react.useState(null), [activeIndex, _setActiveIndex] = react.useState(-1), activeIndexRef = react.useRef(activeIndex), activeElement = elementsRef.current[activeIndex] || null, mounted = !!rootElement, setActiveIndex = react.useCallback((nextActiveIndex) => {
|
|
5264
5318
|
_setActiveIndex(nextActiveIndex), activeIndexRef.current = nextActiveIndex;
|
|
5265
5319
|
}, []), mount = react.useCallback(
|
|
5266
5320
|
(element, selected) => {
|
|
5267
5321
|
if (!element) return () => {
|
|
5268
5322
|
};
|
|
5269
|
-
if (elementsRef.current.indexOf(element) === -1 && (elementsRef.current.push(element), _sortElements(
|
|
5323
|
+
if (elementsRef.current.indexOf(element) === -1 && (elementsRef.current.push(element), _sortElements(rootElement, elementsRef.current)), selected) {
|
|
5270
5324
|
const selectedIndex = elementsRef.current.indexOf(element);
|
|
5271
5325
|
setActiveIndex(selectedIndex);
|
|
5272
5326
|
}
|
|
@@ -5275,7 +5329,7 @@ function useMenuController(props) {
|
|
|
5275
5329
|
idx > -1 && elementsRef.current.splice(idx, 1);
|
|
5276
5330
|
};
|
|
5277
5331
|
},
|
|
5278
|
-
[
|
|
5332
|
+
[rootElement, setActiveIndex]
|
|
5279
5333
|
), handleKeyDown = react.useCallback(
|
|
5280
5334
|
(event) => {
|
|
5281
5335
|
if (event.key === "Tab") {
|
|
@@ -5330,13 +5384,13 @@ function useMenuController(props) {
|
|
|
5330
5384
|
},
|
|
5331
5385
|
[setActiveIndex]
|
|
5332
5386
|
), handleItemMouseLeave = react.useCallback(() => {
|
|
5333
|
-
|
|
5334
|
-
|
|
5335
|
-
}, [rootElementRef, setActiveIndex]);
|
|
5387
|
+
setActiveIndex(-2), rootElement == null || rootElement.focus();
|
|
5388
|
+
}, [setActiveIndex, rootElement]);
|
|
5336
5389
|
return react.useEffect(() => {
|
|
5337
5390
|
if (!mounted) return;
|
|
5338
5391
|
const rafId = window.requestAnimationFrame(() => {
|
|
5339
|
-
|
|
5392
|
+
const _activeIndex = activeIndexRef.current;
|
|
5393
|
+
if (_activeIndex === -1) {
|
|
5340
5394
|
if (shouldFocus === "first") {
|
|
5341
5395
|
const el = _getFocusableElements(elementsRef.current)[0];
|
|
5342
5396
|
if (el) {
|
|
@@ -5353,7 +5407,7 @@ function useMenuController(props) {
|
|
|
5353
5407
|
}
|
|
5354
5408
|
return;
|
|
5355
5409
|
}
|
|
5356
|
-
const element = elementsRef.current[
|
|
5410
|
+
const element = elementsRef.current[_activeIndex] || null;
|
|
5357
5411
|
element == null || element.focus();
|
|
5358
5412
|
});
|
|
5359
5413
|
return () => {
|
|
@@ -5365,7 +5419,9 @@ function useMenuController(props) {
|
|
|
5365
5419
|
handleItemMouseEnter,
|
|
5366
5420
|
handleItemMouseLeave,
|
|
5367
5421
|
handleKeyDown,
|
|
5368
|
-
mount
|
|
5422
|
+
mount,
|
|
5423
|
+
rootElement,
|
|
5424
|
+
setRootElement
|
|
5369
5425
|
};
|
|
5370
5426
|
}
|
|
5371
5427
|
const Root$5 = styledComponents.styled(Box)`
|
|
@@ -5397,18 +5453,23 @@ const Root$5 = styledComponents.styled(Box)`
|
|
|
5397
5453
|
handleItemMouseEnter,
|
|
5398
5454
|
handleItemMouseLeave,
|
|
5399
5455
|
handleKeyDown,
|
|
5400
|
-
mount
|
|
5401
|
-
|
|
5456
|
+
mount,
|
|
5457
|
+
rootElement,
|
|
5458
|
+
setRootElement
|
|
5459
|
+
} = useMenuController({ onKeyDown, originElement, shouldFocus }), handleRefChange = react.useCallback(
|
|
5402
5460
|
(el) => {
|
|
5403
|
-
|
|
5461
|
+
setRootElement(el), ref.current = el;
|
|
5404
5462
|
},
|
|
5405
|
-
[
|
|
5463
|
+
[setRootElement]
|
|
5406
5464
|
);
|
|
5407
5465
|
react.useEffect(() => {
|
|
5408
5466
|
onItemSelect && onItemSelect(activeIndex);
|
|
5409
5467
|
}, [activeIndex, onItemSelect]), useClickOutside(
|
|
5410
|
-
(
|
|
5411
|
-
|
|
5468
|
+
react.useCallback(
|
|
5469
|
+
(event) => isTopLayer && onClickOutside && onClickOutside(event),
|
|
5470
|
+
[isTopLayer, onClickOutside]
|
|
5471
|
+
),
|
|
5472
|
+
[rootElement]
|
|
5412
5473
|
), useGlobalKeyDown(
|
|
5413
5474
|
react.useCallback(
|
|
5414
5475
|
(event) => {
|
|
@@ -5416,7 +5477,10 @@ const Root$5 = styledComponents.styled(Box)`
|
|
|
5416
5477
|
},
|
|
5417
5478
|
[isTopLayer, onEscape]
|
|
5418
5479
|
)
|
|
5419
|
-
)
|
|
5480
|
+
), react.useEffect(() => {
|
|
5481
|
+
if (!(!rootElement || !registerElement))
|
|
5482
|
+
return registerElement(rootElement);
|
|
5483
|
+
}, [registerElement, rootElement]);
|
|
5420
5484
|
const value = react.useMemo(
|
|
5421
5485
|
() => ({
|
|
5422
5486
|
version: 0,
|
|
@@ -6092,7 +6156,7 @@ const CustomInline = styledComponents.styled(Inline)`
|
|
|
6092
6156
|
}
|
|
6093
6157
|
100% {
|
|
6094
6158
|
width: 100%;
|
|
6095
|
-
}
|
|
6159
|
+
}
|
|
6096
6160
|
`, LOADING_BAR_HEIGHT = 2;
|
|
6097
6161
|
function rootStyles(props) {
|
|
6098
6162
|
const { color } = getTheme_v2.getTheme_v2(props.theme), loadingBarColor = color.button.default[props.tone].enabled.bg;
|
|
@@ -6178,7 +6242,15 @@ function Toast(props) {
|
|
|
6178
6242
|
}
|
|
6179
6243
|
);
|
|
6180
6244
|
}
|
|
6181
|
-
|
|
6245
|
+
function useMounted() {
|
|
6246
|
+
return react.useSyncExternalStore(
|
|
6247
|
+
subscribe,
|
|
6248
|
+
() => !0,
|
|
6249
|
+
() => !1
|
|
6250
|
+
);
|
|
6251
|
+
}
|
|
6252
|
+
const subscribe = () => () => {
|
|
6253
|
+
}, key$1 = Symbol.for("@sanity/ui/context/toast"), ToastContext = createGlobalScopedContext(key$1, null), Root$1 = styledComponents.styled(Layer)`
|
|
6182
6254
|
position: fixed;
|
|
6183
6255
|
top: 0;
|
|
6184
6256
|
left: 0;
|
|
@@ -6789,7 +6861,6 @@ exports.useElementSize = useElementSize;
|
|
|
6789
6861
|
exports.useForwardedRef = useForwardedRef;
|
|
6790
6862
|
exports.useGlobalKeyDown = useGlobalKeyDown;
|
|
6791
6863
|
exports.useLayer = useLayer;
|
|
6792
|
-
exports.useMatchMedia = useMatchMedia;
|
|
6793
6864
|
exports.useMediaIndex = useMediaIndex;
|
|
6794
6865
|
exports.usePortal = usePortal;
|
|
6795
6866
|
exports.usePrefersDark = usePrefersDark;
|