@sanity/ui 4.0.4 → 4.0.6
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/{arrow-D0mvjJMb.js → arrow-BBpqkhzC.js} +5 -5
- package/dist/arrow-BBpqkhzC.js.map +1 -0
- package/dist/autocomplete.js +8 -8
- package/dist/autocomplete.js.map +1 -1
- package/dist/breadcrumbs.js +8 -8
- package/dist/breadcrumbs.js.map +1 -1
- package/dist/{button-QO2lWHVH.js → button-DPIMguMh.js} +7 -7
- package/dist/button-DPIMguMh.js.map +1 -0
- package/dist/code.js +3 -3
- package/dist/code.js.map +1 -1
- package/dist/{codeFontStyle-aWvllgWi.js → codeFontStyle-DHrcV3wD.js} +2 -2
- package/dist/codeFontStyle-DHrcV3wD.js.map +1 -0
- package/dist/element-BYgCE_iK.js.map +1 -1
- package/dist/factory-BA3gEfyI.js.map +1 -1
- package/dist/{flex-C9NHtXFi.js → flex-CDMKJ54v.js} +4 -4
- package/dist/flex-CDMKJ54v.js.map +1 -0
- package/dist/getElementRef-5HZQ-Owu.js.map +1 -1
- package/dist/getScopedTheme-C-sZsyAz.js.map +1 -1
- package/dist/getTheme_v2-y09KqtEb.js.map +1 -1
- package/dist/{grid-Cr7qKmZQ.js → grid-CFhbAO8d.js} +4 -4
- package/dist/grid-CFhbAO8d.js.map +1 -0
- package/dist/{helpers-JV5y3U_M.js → helpers-CmuDTEVl.js} +1 -22
- package/dist/helpers-CmuDTEVl.js.map +1 -0
- package/dist/{hotkeys-DyrSy500.js → hotkeys-B8-FMlBd.js} +11 -11
- package/dist/hotkeys-B8-FMlBd.js.map +1 -0
- package/dist/index.js +61 -61
- package/dist/index.js.map +1 -1
- package/dist/{layer-DcsNupeg.js → layer-BQuAIq9M.js} +4 -4
- package/dist/layer-BQuAIq9M.js.map +1 -0
- package/dist/menu.js +10 -10
- package/dist/menu.js.map +1 -1
- package/dist/{popover-5fEUllFf.js → popover-dCgSQgsm.js} +40 -47
- package/dist/popover-dCgSQgsm.js.map +1 -0
- package/dist/popover.js +1 -1
- package/dist/refractor-CC48DwHi.js.map +1 -1
- package/dist/{responsiveFont-BwYElGq4.js → responsiveFont-CYyTL7C5.js} +2 -2
- package/dist/responsiveFont-CYyTL7C5.js.map +1 -0
- package/dist/{stack-B2zXPxzb.js → stack-BKKeh5M0.js} +6 -6
- package/dist/stack-BKKeh5M0.js.map +1 -0
- package/dist/{textInput-CgNWWr7H.js → textInput-Cp2Jvgw1.js} +15 -15
- package/dist/textInput-Cp2Jvgw1.js.map +1 -0
- package/dist/theme.js.map +1 -1
- package/dist/toast.js +11 -11
- package/dist/toast.js.map +1 -1
- package/dist/tooltip.js +6 -6
- package/dist/tooltip.js.map +1 -1
- package/dist/{useClickOutsideEvent-DbLUuPQ6.js → useClickOutsideEvent-CQ40LrHo.js} +2 -2
- package/dist/useClickOutsideEvent-CQ40LrHo.js.map +1 -0
- package/dist/useElementSize-BJvbGHq8.js.map +1 -1
- package/dist/{useLayer-UpfaKlm7.js → useLayer-DzgZ2cTe.js} +12 -12
- package/dist/useLayer-DzgZ2cTe.js.map +1 -0
- package/package.json +5 -5
- package/dist/arrow-D0mvjJMb.js.map +0 -1
- package/dist/button-QO2lWHVH.js.map +0 -1
- package/dist/codeFontStyle-aWvllgWi.js.map +0 -1
- package/dist/flex-C9NHtXFi.js.map +0 -1
- package/dist/grid-Cr7qKmZQ.js.map +0 -1
- package/dist/helpers-JV5y3U_M.js.map +0 -1
- package/dist/hotkeys-DyrSy500.js.map +0 -1
- package/dist/layer-DcsNupeg.js.map +0 -1
- package/dist/popover-5fEUllFf.js.map +0 -1
- package/dist/responsiveFont-BwYElGq4.js.map +0 -1
- package/dist/stack-B2zXPxzb.js.map +0 -1
- package/dist/textInput-CgNWWr7H.js.map +0 -1
- package/dist/useClickOutsideEvent-DbLUuPQ6.js.map +0 -1
- package/dist/useLayer-UpfaKlm7.js.map +0 -1
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { s as EMPTY_RECORD } from "./helpers-
|
|
1
|
+
import { s as EMPTY_RECORD } from "./helpers-CmuDTEVl.js";
|
|
2
2
|
import { a as isHTMLElement, n as containsOrEqualsElement } from "./element-BYgCE_iK.js";
|
|
3
|
-
import { n as LayerProvider, t as useLayer } from "./useLayer-
|
|
3
|
+
import { n as LayerProvider, t as useLayer } from "./useLayer-DzgZ2cTe.js";
|
|
4
4
|
import { c } from "react/compiler-runtime";
|
|
5
5
|
import { useEffect, useImperativeHandle, useRef } from "react";
|
|
6
6
|
import { styled } from "styled-components";
|
|
7
7
|
import { jsx } from "react/jsx-runtime";
|
|
8
8
|
const StyledLayer = /* @__PURE__ */ styled.div.withConfig({
|
|
9
9
|
displayName: "StyledLayer",
|
|
10
|
-
componentId: "sc-
|
|
10
|
+
componentId: "sc-xij3g-0"
|
|
11
11
|
})({ position: "relative" });
|
|
12
12
|
function LayerChildren(props) {
|
|
13
13
|
let $ = c(23), children, forwardedRef, onActivate, onFocus, restProps, t0;
|
|
@@ -58,4 +58,4 @@ function Layer(props) {
|
|
|
58
58
|
}
|
|
59
59
|
export { Layer as t };
|
|
60
60
|
|
|
61
|
-
//# sourceMappingURL=layer-
|
|
61
|
+
//# sourceMappingURL=layer-BQuAIq9M.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layer-BQuAIq9M.js","names":["style = EMPTY_RECORD","() => ref.current","() => {\n const becameTopLayer = isTopLayerRef.current !== isTopLayer && isTopLayer\n\n if (becameTopLayer) {\n onActivate?.({activeElement: lastFocusedRef.current})\n }\n\n isTopLayerRef.current = isTopLayer\n }","[isTopLayer, onActivate]","(event: FocusEvent<HTMLDivElement, Element>) => {\n // Call the user-provided onFocus handler if any\n onFocus?.(event)\n\n const rootElement = ref.current\n const target = document.activeElement\n\n if (!isTopLayer || !rootElement || !target) return\n\n if (isHTMLElement(target) && containsOrEqualsElement(rootElement, target)) {\n lastFocusedRef.current = target\n }\n }","useCallback(\n // oxlint-disable-next-line no-unnecessary-type-arguments\n (event: FocusEvent<HTMLDivElement, Element>) => {\n // Call the user-provided onFocus handler if any\n onFocus?.(event)\n\n const rootElement = ref.current\n const target = document.activeElement\n\n if (!isTopLayer || !rootElement || !target) return\n\n if (isHTMLElement(target) && containsOrEqualsElement(rootElement, target)) {\n lastFocusedRef.current = target\n }\n },\n [isTopLayer, onFocus],\n )","{...style, zIndex}","<StyledLayer\n {...restProps}\n data-ui=\"Layer\"\n onFocus={handleFocus}\n ref={ref}\n style={{...style, zIndex}}\n >\n {children}\n </StyledLayer>","zOffset = 1","<LayerChildren {...restProps}>{children}</LayerChildren>","<LayerProvider zOffset={zOffset}>\n <LayerChildren {...restProps}>{children}</LayerChildren>\n </LayerProvider>"],"sources":["../src/core/utils/layer/layer.tsx"],"sourcesContent":["import {FocusEvent, useCallback, useEffect, useImperativeHandle, useRef} from 'react'\nimport {styled} from 'styled-components'\n\nimport {EMPTY_RECORD} from '../../constants'\nimport {containsOrEqualsElement, isHTMLElement} from '../../helpers/element'\nimport {LayerProvider} from './layerProvider'\nimport {useLayer} from './useLayer'\n\n/**\n * @public\n */\nexport interface LayerProps {\n as?: React.ElementType | keyof React.JSX.IntrinsicElements\n /** A callback that fires when the layer becomes the top layer when it was not the top layer before. */\n onActivate?: (props: {activeElement: HTMLElement | null}) => void\n zOffset?: number | number[]\n}\n\ninterface LayerChildrenProps {\n as?: React.ElementType | keyof React.JSX.IntrinsicElements\n onActivate?: LayerProps['onActivate']\n}\n\nconst StyledLayer = styled.div({position: 'relative'})\n\nfunction LayerChildren(props: LayerChildrenProps & Omit<React.HTMLProps<HTMLDivElement>, 'as'>) {\n const {\n children,\n onActivate,\n onFocus,\n ref: forwardedRef,\n style = EMPTY_RECORD,\n ...restProps\n } = props\n const {zIndex, isTopLayer} = useLayer()\n const lastFocusedRef = useRef<HTMLElement | null>(null)\n const ref = useRef<HTMLDivElement | null>(null)\n const isTopLayerRef = useRef<boolean>(isTopLayer)\n\n useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(forwardedRef, () => ref.current)\n\n // When the layer very first mounts, it will be the top layer, but we don't want to fire\n // the callback in that case. We use a ref to track the previous value of isTopLayer to\n // determine if the layer has become the top layer since the last render.\n useEffect(() => {\n const becameTopLayer = isTopLayerRef.current !== isTopLayer && isTopLayer\n\n if (becameTopLayer) {\n onActivate?.({activeElement: lastFocusedRef.current})\n }\n\n isTopLayerRef.current = isTopLayer\n }, [isTopLayer, onActivate])\n\n const handleFocus = useCallback(\n // oxlint-disable-next-line no-unnecessary-type-arguments\n (event: FocusEvent<HTMLDivElement, Element>) => {\n // Call the user-provided onFocus handler if any\n onFocus?.(event)\n\n const rootElement = ref.current\n const target = document.activeElement\n\n if (!isTopLayer || !rootElement || !target) return\n\n if (isHTMLElement(target) && containsOrEqualsElement(rootElement, target)) {\n lastFocusedRef.current = target\n }\n },\n [isTopLayer, onFocus],\n )\n\n return (\n <StyledLayer\n {...restProps}\n data-ui=\"Layer\"\n onFocus={handleFocus}\n ref={ref}\n style={{...style, zIndex}}\n >\n {children}\n </StyledLayer>\n )\n}\n\n/**\n * @public\n */\nexport function Layer(props: LayerProps & Omit<React.HTMLProps<HTMLDivElement>, 'as'>) {\n const {children, zOffset = 1, ...restProps} = props\n\n return (\n <LayerProvider zOffset={zOffset}>\n <LayerChildren {...restProps}>{children}</LayerChildren>\n </LayerProvider>\n )\n}\n"],"mappings":";;;;;;;AAuBA,MAAM,cAAc,uBAAO,IAAA,WAAA;;;AAAI,CAAA,CAAA,CAAA,EAAC,UAAU,WAAU,CAAC;AAErD,SAAS,cAAc,OAAyE;gBAE5F,UAGK,cAFL,YACA,SAGG,WADHA;CAEE,AAAA,EAAA,OAAA,kHAPE,CACJ,UACA,YACA,SACA,KAAK,cACL,OAAA,OACA,aACE;CAFF,IAAA,QAAA,OAAA,KAAA,IAAQ,eAARA,IAGI,EAAC,QAAQ,eAAc,SAAS,GAChC,iBAAiB,OAA2B,IAAI,GAChD,MAAM,OAA8B,IAAI,GACxC,gBAAgB,OAAgB,UAAU,GAEgCC;CAAhF,oDAAsF,WAAA,IAAI,iCAA1F,oBAAkE,cAAcA,EAAiB;CAKvFC,IAAAA,IAQPC;CARH,AACmD,EAAA,OAAA,cAAA,EAAA,OAG/C,cAJM,WAAM;EAOd,AANuB,cAAc,YAAY,cAAc,cAG7D,aAAa,EAAC,eAAe,eAAe,QAAO,CAAC,GAGtD,cAAc,UAAU;CAC1B,GAAG,KAAA,CAAC,YAAY,UAAU,GAPyB,EAAA,KAAA,YAG/C,EAAA,KAAA,gEAJJ,UAAUD,IAQPC,EAAwB;CAIzBC,IAAAA;CAOO,AAAA,EAAA,QAAA,cAAA,EAAA,QALL,WAFF,MAAC,UAA+C;EAE9C,UAAU,KAAK;EAEf,IAAM,cAAc,IAAI,SAClB,SAAS,SAAS;EAEpB,CAAC,cAAc,CAAC,eAAe,CAAC,UAEhC,cAAc,MAAM,KAAK,wBAAwB,aAAa,MAAM,MACtE,eAAe,UAAU;CAE7B,GALO,EAAA,MAAA,YALL,EAAA,MAAA;CAJJ,IAAM,cAAcC,IAwBTC;CAAI,AAAA,EAAA,QAAA,SAAA,EAAA,QAAO,UAAX,KAAA;EAAC,GAAG;EAAO;CAAM,GAAb,EAAA,MAAA,OAAO,EAAA,MAAA;CALpBC,IAAAA;CADF,OAQK,EAAA,QAAA,YAAA,EAAA,QAJQ,eAAA,EAAA,QAFL,aAAA,EAAA,QAIGD,MALT,KAAA,oBAAC,aAAD;EACE,GAAI;EACJ,WAAQ;EACR,SAAS;EACJ;EACL,OAAOA;EAEN;CACU,CAAA,GADV,EAAA,MAAA,UAJQ,EAAA,MAAA,aAFL,EAAA,MAAA,WAIGA,EAAAA,MAAAA,8BALTC;AAUJ;;;;AAKA,SAAgB,MAAM,OAAiE;gBAC9E,UAA0B,WAAhBC;CAA6B,AAAA,EAAA,OAAA,0DAAxC,CAAC,UAAU,SAAA,OAAa,aAAgB;CAA7B,IAAA,UAAA,OAAA,KAAA,IAAU,IAAVA,IAIbC;CAA+B,AAAA,EAAA,OAAA,YAAA,EAAA,OAAZ,aAAnB,KAAA,oBAAC,eAAD;EAAe,GAAI;EAAY;CAAwB,CAAA,GAAxB,EAAA,KAAA,UAAZ,EAAA,KAAA;CADrBC,IAAAA;CADF,OAEID,EAAAA,OAAAA,MAAAA,EAAAA,OADsB,WAAxB,KAAA,oBAAC,eAAD;EAAwB;EACtBA,UAAAA;CACa,CAAA,GADbA,EAAAA,KAAAA,IADsB,EAAA,KAAA,iCAAxBC;AAIJ"}
|
package/dist/menu.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { n as _getArrayProp } from "./helpers-
|
|
2
|
+
import { n as _getArrayProp } from "./helpers-CmuDTEVl.js";
|
|
3
3
|
import { i as isHTMLButtonElement, r as isHTMLAnchorElement } from "./element-BYgCE_iK.js";
|
|
4
4
|
import { t as getTheme_v2 } from "./getTheme_v2-y09KqtEb.js";
|
|
5
|
-
import { d as createGlobalScopedContext, h as _cardColorStyle, l as useRootTheme, r as isRecord, t as useLayer, v as responsiveRadiusStyle, y as Box } from "./useLayer-
|
|
6
|
-
import { t as Flex } from "./flex-
|
|
7
|
-
import { n as Text, t as Stack } from "./stack-
|
|
8
|
-
import { t as Popover } from "./popover-
|
|
9
|
-
import { t as useClickOutsideEvent } from "./useClickOutsideEvent-
|
|
10
|
-
import { i as useGlobalKeyDown, t as Hotkeys } from "./hotkeys-
|
|
5
|
+
import { d as createGlobalScopedContext, h as _cardColorStyle, l as useRootTheme, r as isRecord, t as useLayer, v as responsiveRadiusStyle, y as Box } from "./useLayer-DzgZ2cTe.js";
|
|
6
|
+
import { t as Flex } from "./flex-CDMKJ54v.js";
|
|
7
|
+
import { n as Text, t as Stack } from "./stack-BKKeh5M0.js";
|
|
8
|
+
import { t as Popover } from "./popover-dCgSQgsm.js";
|
|
9
|
+
import { t as useClickOutsideEvent } from "./useClickOutsideEvent-CQ40LrHo.js";
|
|
10
|
+
import { i as useGlobalKeyDown, t as Hotkeys } from "./hotkeys-B8-FMlBd.js";
|
|
11
11
|
import { c } from "react/compiler-runtime";
|
|
12
12
|
import { cloneElement, isValidElement, useContext, useEffect, useImperativeHandle, useRef, useState } from "react";
|
|
13
13
|
import { css, styled } from "styled-components";
|
|
@@ -178,7 +178,7 @@ function useMenuController(props) {
|
|
|
178
178
|
function _temp$2() {}
|
|
179
179
|
const StyledMenu = styled(Box).withConfig({
|
|
180
180
|
displayName: "StyledMenu",
|
|
181
|
-
componentId: "sc-
|
|
181
|
+
componentId: "sc-co76mp-0"
|
|
182
182
|
})`outline:none;overflow:auto;`;
|
|
183
183
|
/**
|
|
184
184
|
* The `Menu` component is a building block for application menus.
|
|
@@ -362,7 +362,7 @@ function _temp$1(v) {
|
|
|
362
362
|
*/
|
|
363
363
|
const MenuDivider = styled.hr.withConfig({
|
|
364
364
|
displayName: "MenuDivider",
|
|
365
|
-
componentId: "sc-
|
|
365
|
+
componentId: "sc-qxs7nk-0"
|
|
366
366
|
})`height:1px;border:0;background:var(--card-hairline-soft-color);margin:0;`;
|
|
367
367
|
function selectableBaseStyle() {
|
|
368
368
|
return css`background-color:inherit;color:inherit;&[data-as='button']{-webkit-font-smoothing:inherit;appearance:none;outline:none;font:inherit;text-align:inherit;border:0;width:-moz-available;width:-webkit-fill-available;width:stretch;}&[data-as='a']{text-decoration:none;}`;
|
|
@@ -376,7 +376,7 @@ function selectableColorStyle(props) {
|
|
|
376
376
|
*/
|
|
377
377
|
const Selectable = /* @__PURE__ */ styled(Box).withConfig({
|
|
378
378
|
displayName: "Selectable",
|
|
379
|
-
componentId: "sc-
|
|
379
|
+
componentId: "sc-71o6vd-0"
|
|
380
380
|
})(responsiveRadiusStyle, selectableBaseStyle, selectableColorStyle);
|
|
381
381
|
function useMenu() {
|
|
382
382
|
let value = useContext(MenuContext);
|
package/dist/menu.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu.js","names":["createGlobalScopedContext","MenuContextValue","version","activeElement","HTMLElement","mount","element","selected","onClickOutside","event","MouseEvent","onEscape","onItemClick","onItemMouseEnter","React","onItemMouseLeave","registerElement","el","MenuContext","isHTMLAnchorElement","isHTMLButtonElement","_isFocusable","element","HTMLElement","getAttribute","disabled","_getFocusableElements","elements","filter","_getDOMPath","rootElement","el","path","e","parentElement","children","Array","from","childNodes","index","indexOf","unshift","EMPTY_PATH","_sortElements","map","WeakMap","set","_sort","a","b","_a","get","_b","len","Math","max","length","i","aIndex","bIndex","sort","useCallback","useEffect","useRef","useState","_getFocusableElements","_sortElements","MenuController","activeElement","HTMLElement","activeIndex","handleItemMouseEnter","event","React","MouseEvent","handleItemMouseLeave","handleKeyDown","KeyboardEvent","HTMLDivElement","mount","element","selected","useMenuController","props","$","_c","onKeyDown","originElement","shouldFocus","rootElementRef","t0","Symbol","for","elementsRef","_setActiveIndex","activeIndexRef","setActiveElement","t1","nextActiveIndex","current","setActiveIndex","t2","_temp","indexOf","push","selectedIndex","idx","splice","t3","t4","t5","key","focus","preventDefault","stopPropagation","focusableElements","el","currentIndex","focusableElements_0","el_0","length","currentIndex_0","focusableElements_1","focusableLen","focusedElement","focusedIndex","el_1","currentIndex_1","focusableElements_2","focusableLen_0","focusedElement_0","focusedIndex_0","el_2","currentIndex_2","t6","event_0","element_0","currentTarget","currentIndex_3","t7","t8","t9","rafId","requestAnimationFrame","focusableElements_3","el_3","currentIndex_4","focusableElements_4","el_4","currentIndex_5","element_1","cancelAnimationFrame","t10","useCallback","useEffect","useImperativeHandle","useMemo","useRef","styled","useClickOutsideEvent","useGlobalKeyDown","Box","Stack","ResponsivePaddingProps","useLayer","MenuContext","MenuContextValue","useMenuController","MenuProps","event","MouseEvent","index","HTMLElement","el","FocusEvent","StyledMenu","Menu","props","$","_c","children","forwardedRef","onClickOutside","onEscape","onItemClick","onItemSelect","onKeyDown","originElement","registerElement","restProps","t0","t1","t2","padding","ref","shouldFocus","gap","undefined","t3","Symbol","for","current","isTopLayer","t4","rootElementRef","activeElement","activeIndex","handleItemMouseEnter","handleItemMouseLeave","handleKeyDown","mount","unregisterElementRef","t5","handleRefChange","t6","t7","t8","t9","key","stopPropagation","t10","version","onItemMouseEnter","onItemMouseLeave","value","t11","t12","t13","cloneElement","useCallback","useEffect","useImperativeHandle","useMemo","useRef","useState","Popover","PopoverProps","MenuProps","MenuButtonProps","__unstable_disableRestoreFocusOnClose","boundaryElement","button","React","JSX","Element","id","menu","onClose","onOpen","placement","popover","Omit","popoverScheme","popoverRadius","portal","preventOverflow","ref","Ref","HTMLButtonElement","MenuButton","props","$","_c","t0","buttonProp","menuProp","forwardedRef","disableRestoreFocusOnClose","undefined","open","setOpen","shouldFocus","setShouldFocus","buttonElement","setButtonElement","t1","Symbol","for","menuElements","setChildMenuElements","openRef","t2","t3","current","t4","t5","t6","t7","t8","_temp","handleButtonClick","t9","event","preventDefault","handleMouseDown","t10","event_0","key","handleButtonKeyDown","t11","event_1","target","Node","contains","el","handleMenuClickOutside","t12","focus","handleMenuEscape","t13","event_2","target_0","relatedTarget","el_0","handleBlur","t14","handleItemClick","t15","el_1","els","concat","els_0","filter","_el","registerElement","t16","menuProps","t17","selected","t18","t19","t20","t21","overflow","popoverProps","t22","t23","v","styled","ElementType","EmptyProps","Props","MenuDividerProps","E","MenuDivider","hr","props","React","JSX","Element","css","getTheme_v2","_cardColorStyle","ThemeProps","SelectableTone","SelectableStyleProps","$tone","selectableBaseStyle","ReturnType","selectableColorStyle","props","color","style","theme","tone","selectable","enabled","disabled","pressed","selected","hovered","card","root","styled","responsiveRadiusStyle","ResponsiveRadiusStyleProps","Box","selectableBaseStyle","selectableColorStyle","SelectableStyleProps","Selectable","useContext","isRecord","MenuContext","MenuContextValue","useMenu","value","Error","version","ChevronRightIcon","isValidElement","useCallback","useEffect","useState","isValidElementType","Selectable","Box","Flex","Popover","PopoverProps","Text","_getArrayProp","useRootTheme","ElementType","Props","Radius","SelectableTone","Menu","MenuProps","useMenu","MenuGroupOwnProps","fontSize","icon","React","ReactNode","menu","Omit","padding","popover","radius","gap","space","text","tone","MenuGroupProps","E","MenuGroupComponent","MenuGroup","props","$","_c","IconComponent","children","menuProps","onClick","restProps","t0","t1","t2","t3","t4","t5","as","undefined","scheme","activeElement","mount","onClickOutside","onEscape","onItemClick","onItemMouseEnter","_onItemMouseEnter","registerElement","rootElement","setRootElement","open","setOpen","shouldFocus","setShouldFocus","active","Boolean","withinMenu","setWithinMenu","t6","event","handleMouseEnter","t7","event_0","key","stopPropagation","requestAnimationFrame","focus","handleMenuKeyDown","t8","event_1","handleClick","t9","handleChildItemClick","t10","Symbol","for","handleMenuMouseEnter","t11","t12","t13","t14","t15","t16","t17","t18","rafId","cancelAnimationFrame","t19","childMenu","t20","event_2","target","currentTarget","document","handleKeyDown","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","t31","t32","JSX","Element","isValidElement","useCallback","useEffect","useImperativeHandle","useMemo","useRef","useState","isValidElementType","Selectable","Box","Flex","Text","ResponsivePaddingProps","ResponsiveRadiusProps","_getArrayProp","useRootTheme","ElementType","Props","SelectableTone","Hotkeys","useMenu","MenuItemOwnProps","fontSize","hotkeys","icon","React","ReactNode","iconRight","pressed","selected","gap","space","text","tone","MenuItemProps","E","MenuItemComponent","MenuItem","props","$","_c","IconComponent","IconRightComponent","children","disabled","forwardedRef","onClick","paddingBottom","paddingLeft","paddingRight","paddingTop","paddingX","paddingY","restProps","selectedProp","t0","t1","t2","t3","t4","t5","as","padding","radius","ref","undefined","scheme","menu","activeElement","mount","onItemClick","onItemMouseEnter","_onItemMouseEnter","onItemMouseLeave","_onItemMouseLeave","rootElement","setRootElement","active","Boolean","t6","Symbol","for","current","t7","t8","t9","event","handleClick","t10","paddingProps","t11","map","_temp","hotkeysFontSize","t12","el","setRef","t13","t14","t15","t16","t17","t18","t19","t20","marginTop","marginBottom","t21","t22","JSX","Element","s"],"sources":["../src/core/components/menu/menuContext.ts","../src/core/components/menu/helpers.ts","../src/core/components/menu/useMenuController.ts","../src/core/components/menu/menu.tsx","../src/core/components/menu/menuButton.tsx","../src/core/components/menu/menuDivider.ts","../src/core/primitives/_selectable/style.ts","../src/core/primitives/_selectable/selectable.tsx","../src/core/components/menu/useMenu.ts","../src/core/components/menu/menuGroup.tsx","../src/core/components/menu/menuItem.tsx"],"sourcesContent":["import {createGlobalScopedContext} from '../../lib/createGlobalScopedContext'\n\nexport interface MenuContextValue {\n version: 2\n activeElement: HTMLElement | null\n mount: (element: HTMLElement | null, selected?: boolean) => () => void\n onClickOutside?: (event: MouseEvent) => void\n onEscape?: () => void\n onItemClick?: () => void\n onItemMouseEnter: (event: React.MouseEvent<HTMLElement>) => void\n onItemMouseLeave: (event: React.MouseEvent<HTMLElement>) => void\n registerElement?: (el: HTMLElement) => () => void\n}\n\nexport const MenuContext = createGlobalScopedContext<MenuContextValue | null>(\n '@sanity/ui/context/menu',\n null,\n)\n","import {isHTMLAnchorElement, isHTMLButtonElement} from '../../helpers/element'\n\n/**\n * @internal\n */\nfunction _isFocusable(element: HTMLElement) {\n return (\n (isHTMLAnchorElement(element) && element.getAttribute('data-disabled') !== 'true') ||\n (isHTMLButtonElement(element) && !element.disabled)\n )\n}\n\n/**\n * @internal\n */\nexport function _getFocusableElements(elements: HTMLElement[]): HTMLElement[] {\n return elements.filter(_isFocusable)\n}\n\nfunction _getDOMPath(rootElement: HTMLElement, el: HTMLElement): number[] {\n const path: number[] = []\n\n let e = el\n\n while (e !== rootElement) {\n const parentElement = e.parentElement\n\n if (!parentElement) return path\n\n const children = Array.from(parentElement.childNodes)\n const index = children.indexOf(e)\n\n path.unshift(index)\n\n if (parentElement === rootElement) {\n return path\n }\n\n e = parentElement\n }\n\n return path\n}\n\nconst EMPTY_PATH: number[] = []\n\n/**\n * @internal\n */\nexport function _sortElements(rootElement: HTMLElement | null, elements: HTMLElement[]): void {\n if (!rootElement) return\n\n const map = new WeakMap<HTMLElement, number[]>()\n\n for (const el of elements) {\n map.set(el, _getDOMPath(rootElement, el))\n }\n\n const _sort = (a: HTMLElement, b: HTMLElement) => {\n const _a = map.get(a) || EMPTY_PATH\n const _b = map.get(b) || EMPTY_PATH\n\n const len = Math.max(_a.length, _b.length)\n\n // Loop until there are different indexes\n for (let i = 0; i < len; i += 1) {\n const aIndex = _a[i] || -1\n const bIndex = _b[i] || -1\n\n if (aIndex !== bIndex) {\n return aIndex - bIndex\n }\n }\n\n return 0\n }\n\n elements.sort(_sort)\n}\n","import {useCallback, useEffect, useRef, useState} from 'react'\n\nimport {_getFocusableElements, _sortElements} from './helpers'\n\n/**\n * @internal\n */\nexport interface MenuController {\n activeElement: HTMLElement | null\n activeIndex: number\n handleItemMouseEnter: (event: React.MouseEvent<HTMLElement>) => void\n handleItemMouseLeave: () => void\n handleKeyDown: (event: React.KeyboardEvent<HTMLDivElement>) => void\n mount: (element: HTMLElement | null, selected?: boolean) => () => void\n}\n\n/**\n * This controller is responsible for controlling UI menu state.\n *\n * @internal\n */\nexport function useMenuController(props: {\n onKeyDown?: React.KeyboardEventHandler\n originElement?: HTMLElement | null\n shouldFocus: 'first' | 'last' | null\n rootElementRef: React.RefObject<HTMLDivElement | null>\n}): MenuController {\n const {onKeyDown, originElement, shouldFocus, rootElementRef} = props\n const elementsRef = useRef<HTMLElement[]>([])\n const [activeIndex, _setActiveIndex] = useState(-1)\n const activeIndexRef = useRef(activeIndex)\n const [activeElement, setActiveElement] = useState<HTMLElement | null>(null)\n\n const setActiveIndex = useCallback((nextActiveIndex: number) => {\n _setActiveIndex(nextActiveIndex)\n activeIndexRef.current = nextActiveIndex\n setActiveElement(elementsRef.current[nextActiveIndex] || null)\n }, [])\n\n const mount = useCallback(\n (element: HTMLElement | null, selected?: boolean): (() => void) => {\n if (!element) return () => undefined\n\n if (elementsRef.current.indexOf(element) === -1) {\n elementsRef.current.push(element)\n _sortElements(rootElementRef.current, elementsRef.current)\n }\n\n if (selected) {\n const selectedIndex = elementsRef.current.indexOf(element)\n\n setActiveIndex(selectedIndex)\n }\n\n return () => {\n const idx = elementsRef.current.indexOf(element)\n\n if (idx > -1) {\n elementsRef.current.splice(idx, 1)\n }\n }\n },\n [rootElementRef, setActiveIndex],\n )\n\n // Reset the active item when the menu unmounts, or is hidden inside an <Activity> boundary\n // (which unmounts effects while preserving state), so that reopening behaves like a fresh\n // mount: `shouldFocus` applies again and `selected` items re-register through `mount`.\n useEffect(() => {\n return () => setActiveIndex(-1)\n }, [setActiveIndex])\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n // Move focus to the element that opened the menu before handling the `Tab` press\n if (event.key === 'Tab') {\n if (originElement) {\n originElement.focus()\n }\n\n return\n }\n\n // Move focus to the first focusable menuitem\n if (event.key === 'Home') {\n event.preventDefault()\n event.stopPropagation()\n\n const focusableElements = _getFocusableElements(elementsRef.current)\n const el = focusableElements[0]\n\n if (!el) return\n\n const currentIndex = elementsRef.current.indexOf(el)\n\n setActiveIndex(currentIndex)\n\n return\n }\n\n // Move focus to the last focusable menuitem\n if (event.key === 'End') {\n event.preventDefault()\n event.stopPropagation()\n\n const focusableElements = _getFocusableElements(elementsRef.current)\n const el = focusableElements[focusableElements.length - 1]\n\n if (!el) return\n\n const currentIndex = elementsRef.current.indexOf(el)\n\n setActiveIndex(currentIndex)\n\n return\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n event.stopPropagation()\n\n const focusableElements = _getFocusableElements(elementsRef.current)\n const focusableLen = focusableElements.length\n\n if (focusableLen === 0) return\n\n const focusedElement = elementsRef.current[activeIndexRef.current]\n\n let focusedIndex = focusableElements.indexOf(focusedElement)\n\n focusedIndex = (focusedIndex - 1 + focusableLen) % focusableLen\n\n const el = focusableElements[focusedIndex]\n const currentIndex = elementsRef.current.indexOf(el)\n\n setActiveIndex(currentIndex)\n\n return\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n event.stopPropagation()\n\n const focusableElements = _getFocusableElements(elementsRef.current)\n const focusableLen = focusableElements.length\n\n if (focusableLen === 0) return\n\n const focusedElement = elementsRef.current[activeIndexRef.current]\n\n let focusedIndex = focusableElements.indexOf(focusedElement)\n\n focusedIndex = (focusedIndex + 1) % focusableLen\n\n const el = focusableElements[focusedIndex]\n const currentIndex = elementsRef.current.indexOf(el)\n\n setActiveIndex(currentIndex)\n\n return\n }\n\n if (onKeyDown) {\n onKeyDown(event)\n }\n },\n [onKeyDown, originElement, setActiveIndex],\n )\n\n const handleItemMouseEnter = useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n const element = event.currentTarget\n const currentIndex = elementsRef.current.indexOf(element)\n\n setActiveIndex(currentIndex)\n },\n [setActiveIndex],\n )\n\n const handleItemMouseLeave = useCallback(() => {\n // Set the active index to -2 to deactivate all menu items\n // when the user moves the mouse away from the menu item.\n // We avoid using -1 because it would focus the first menu item,\n // which would be incorrect when the user hovers over a gap\n // between two menu items or a menu divider.\n setActiveIndex(-2)\n rootElementRef.current?.focus()\n }, [rootElementRef, setActiveIndex])\n\n // Set focus on the currently active element\n useEffect(() => {\n if (!rootElementRef.current) return\n\n const rafId = requestAnimationFrame(() => {\n if (activeIndex === -1) {\n if (shouldFocus === 'first') {\n const focusableElements = _getFocusableElements(elementsRef.current)\n const el = focusableElements[0]\n\n if (el) {\n const currentIndex = elementsRef.current.indexOf(el)\n\n setActiveIndex(currentIndex)\n }\n }\n\n if (shouldFocus === 'last') {\n const focusableElements = _getFocusableElements(elementsRef.current)\n const el = focusableElements[focusableElements.length - 1]\n\n if (el) {\n const currentIndex = elementsRef.current.indexOf(el)\n\n setActiveIndex(currentIndex)\n }\n }\n\n return\n }\n\n const element = elementsRef.current[activeIndex] || null\n\n element?.focus()\n })\n\n // oxlint-disable-next-line consistent-return\n return () => cancelAnimationFrame(rafId)\n }, [activeIndex, rootElementRef, setActiveIndex, shouldFocus])\n\n return {\n activeElement,\n activeIndex,\n handleItemMouseEnter,\n handleItemMouseLeave,\n handleKeyDown,\n mount,\n }\n}\n","import {useCallback, useEffect, useImperativeHandle, useMemo, useRef} from 'react'\nimport {styled} from 'styled-components'\n\nimport {useClickOutsideEvent} from '../../hooks/useClickOutsideEvent'\nimport {useGlobalKeyDown} from '../../hooks/useGlobalKeyDown'\nimport {Box} from '../../primitives/box/box'\nimport {Stack} from '../../primitives/stack/stack'\nimport {ResponsivePaddingProps} from '../../primitives/types'\nimport {useLayer} from '../../utils/layer/useLayer'\nimport {MenuContext, MenuContextValue} from './menuContext'\nimport {useMenuController} from './useMenuController'\n\n/**\n * @public\n */\nexport interface MenuProps extends ResponsivePaddingProps {\n /**\n * @deprecated Use `shouldFocus=\"first\"` instead.\n */\n 'focusFirst'?: never\n /**\n * @deprecated Use `shouldFocus=\"last\"` instead.\n */\n 'focusLast'?: never\n 'onClickOutside'?: (event: MouseEvent) => void\n 'onEscape'?: () => void\n 'onItemClick'?: () => void\n 'onItemSelect'?: (index: number) => void\n 'originElement'?: HTMLElement | null\n 'registerElement'?: (el: HTMLElement) => () => void\n 'shouldFocus'?: 'first' | 'last' | null\n 'gap'?: number | number[]\n /**\n * @deprecated Use `gap` instead.\n */\n 'space'?: never\n 'aria-labelledby'?: string\n 'onBlurCapture'?: (event: FocusEvent) => void\n}\n\nconst StyledMenu = styled(Box)`\n outline: none;\n overflow: auto;\n`\n\n/**\n * The `Menu` component is a building block for application menus.\n *\n * @public\n */\nexport function Menu(\n props: MenuProps & Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'height' | 'role' | 'tabIndex'>,\n) {\n const {\n children,\n onClickOutside,\n onEscape,\n onItemClick,\n onItemSelect,\n onKeyDown,\n originElement,\n padding = 1,\n ref: forwardedRef,\n registerElement,\n shouldFocus = null,\n gap = 1,\n ...restProps\n } = props\n\n const ref = useRef<HTMLDivElement | null>(null)\n\n useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(forwardedRef, () => ref.current)\n\n const {isTopLayer} = useLayer()\n\n const {\n activeElement,\n activeIndex,\n handleItemMouseEnter,\n handleItemMouseLeave,\n handleKeyDown,\n mount,\n } = useMenuController({onKeyDown, originElement, shouldFocus, rootElementRef: ref})\n\n const unregisterElementRef = useRef<(() => void) | null>(null)\n const handleRefChange = useCallback(\n (el: HTMLDivElement | null) => {\n // Run cleanup of previously registered elements\n if (unregisterElementRef.current) {\n // The `registerElement` callback were originally used in a `useEffect`, so it returns a cleanup function that is a bit gnarly to handle in a ref callback.\n // Since we can't change the `registerElement` implementation itself without making breaking change,\n // that is explained in the code comments for createGlobalScopedContext.tsx,\n // we need to handle with a ref that holds on to the cleanup function last returned when the ref callback is called.\n unregisterElementRef.current()\n unregisterElementRef.current = null\n }\n\n ref.current = el\n\n // Register root element (for nested menus)\n if (ref.current && registerElement) {\n unregisterElementRef.current = registerElement(ref.current)\n }\n },\n [registerElement],\n )\n\n // Trigger `onItemSelect` when active index changes\n useEffect(() => {\n if (onItemSelect) onItemSelect(activeIndex)\n }, [activeIndex, onItemSelect])\n\n // Close menu when clicking outside\n useClickOutsideEvent(isTopLayer && onClickOutside, () => [ref.current])\n\n // Close menu when pressing Escape\n useGlobalKeyDown(\n useCallback(\n (event) => {\n if (!isTopLayer) return\n\n if (event.key === 'Escape') {\n event.stopPropagation()\n if (onEscape) onEscape()\n }\n },\n [isTopLayer, onEscape],\n ),\n )\n\n const value = useMemo(\n () =>\n ({\n version: 2,\n activeElement,\n mount,\n onClickOutside,\n onEscape,\n onItemClick,\n onItemMouseEnter: handleItemMouseEnter,\n onItemMouseLeave: handleItemMouseLeave,\n registerElement,\n }) satisfies MenuContextValue,\n [\n activeElement,\n mount,\n handleItemMouseEnter,\n handleItemMouseLeave,\n onClickOutside,\n onEscape,\n onItemClick,\n registerElement,\n ],\n )\n\n return (\n <MenuContext.Provider value={value}>\n <StyledMenu\n data-ui=\"Menu\"\n {...restProps}\n onKeyDown={handleKeyDown}\n padding={padding}\n ref={handleRefChange}\n role=\"menu\"\n tabIndex={-1}\n >\n <Stack gap={gap}>{children}</Stack>\n </StyledMenu>\n </MenuContext.Provider>\n )\n}\n","import {\n cloneElement,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react'\n\nimport {Popover, PopoverProps} from '../../primitives/popover/popover'\nimport {MenuProps} from './menu'\n\n/**\n * @public\n */\nexport interface MenuButtonProps {\n /**\n * @beta Do not use in production.\n */\n __unstable_disableRestoreFocusOnClose?: boolean\n /**\n * @deprecated Use `popover={{floatingBoundary: element}}` and/or `popover={{referenceBoundary: element}}` instead.\n */\n boundaryElement?: never\n button: React.JSX.Element\n id: string\n menu?: React.JSX.Element\n onClose?: () => void\n onOpen?: () => void\n /**\n * @deprecated Use `popover={{placement: 'top'}}` instead.\n */\n placement?: never\n popover?: Omit<PopoverProps, 'content' | 'open'>\n /**\n * @deprecated Use `popover={{scheme: 'dark'}}` instead.\n */\n popoverScheme?: never\n /**\n * @deprecated Use `popover={{radius: 2}}` instead.\n */\n popoverRadius?: never\n /**\n * @beta Do not use in production.\n * @deprecated Use `popover={{portal: true}}` instead.\n */\n portal?: never\n /**\n * @deprecated Use `popover={{preventOverflow: true}}` instead.\n */\n preventOverflow?: never\n ref?: React.Ref<HTMLButtonElement | null>\n}\n\n/**\n * The `MenuButton` component follows the WAI-ARIA specification for menu buttons.\n *\n * @public\n */\nexport function MenuButton(props: MenuButtonProps) {\n const {\n __unstable_disableRestoreFocusOnClose: disableRestoreFocusOnClose = false,\n button: buttonProp,\n id,\n menu: menuProp,\n onClose,\n onOpen,\n popover,\n ref: forwardedRef,\n } = props\n const [open, setOpen] = useState(false)\n const [shouldFocus, setShouldFocus] = useState<'first' | 'last' | null>(null)\n const [buttonElement, setButtonElement] = useState<HTMLButtonElement | null>(null)\n const [menuElements, setChildMenuElements] = useState<HTMLElement[]>([])\n const openRef = useRef<boolean>(open)\n\n // Notify consumers when the menu opens\n useEffect(() => {\n if (onOpen && open && !openRef.current) {\n onOpen()\n }\n }, [onOpen, open])\n\n // Notify consumers when the menu closes\n useEffect(() => {\n if (onClose && !open && openRef.current) {\n onClose()\n }\n }, [onClose, open])\n\n useEffect(() => {\n openRef.current = open\n }, [open])\n\n const handleButtonClick = useCallback(() => {\n setOpen((v) => !v)\n setShouldFocus(null)\n }, [])\n\n // Prevent mouse event propagation when the menu is open.\n // This is to ensure that `handleBlur` isn't triggered when clicking the menu button whilst open,\n // which can lead to `setOpen` being triggered multiple times (once by `handleBlur`, and again by `handleButtonClick`).\n const handleMouseDown = useCallback(\n (event: PointerEvent) => {\n if (open) event.preventDefault()\n },\n [open],\n )\n\n const handleButtonKeyDown = useCallback((event: React.KeyboardEvent<HTMLButtonElement>) => {\n // On `ArrowDown`, `Enter` and `Space`\n // - Opens menu and moves focus to first menuitem\n if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n setOpen(true)\n setShouldFocus('first')\n\n return\n }\n\n // On `ArrowUp`\n // - \tOpens menu and moves focus to last menuitem\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n setOpen(true)\n setShouldFocus('last')\n\n return\n }\n }, [])\n\n const handleMenuClickOutside = useCallback(\n (event: MouseEvent) => {\n const target = event.target\n\n if (!(target instanceof Node)) {\n return\n }\n\n if (buttonElement && (target === buttonElement || buttonElement.contains(target))) {\n return\n }\n\n for (const el of menuElements) {\n if (target === el || el.contains(target)) {\n return\n }\n }\n\n setOpen(false)\n },\n [buttonElement, menuElements],\n )\n\n const handleMenuEscape = useCallback(() => {\n setOpen(false)\n if (disableRestoreFocusOnClose) return\n if (buttonElement) buttonElement.focus()\n }, [buttonElement, disableRestoreFocusOnClose])\n\n const handleBlur = useCallback(\n (event: FocusEvent) => {\n const target = event.relatedTarget\n\n if (!(target instanceof Node)) {\n return\n }\n\n for (const el of menuElements) {\n if (el === target || el.contains(target)) {\n return\n }\n }\n\n setOpen(false)\n },\n [menuElements],\n )\n\n const handleItemClick = useCallback(() => {\n setOpen(false)\n if (disableRestoreFocusOnClose) return\n if (buttonElement) buttonElement.focus()\n }, [buttonElement, disableRestoreFocusOnClose])\n\n const registerElement = useCallback((el: HTMLElement) => {\n setChildMenuElements((els) => els.concat([el]))\n\n return () => setChildMenuElements((els) => els.filter((_el) => _el !== el))\n }, [])\n\n const menuProps: MenuProps = {\n 'aria-labelledby': id,\n 'onBlurCapture': handleBlur,\n 'onClickOutside': handleMenuClickOutside,\n 'onEscape': handleMenuEscape,\n 'onItemClick': handleItemClick,\n 'originElement': buttonElement,\n registerElement,\n shouldFocus,\n }\n\n const menu = menuProp && cloneElement(menuProp, menuProps)\n\n const button = useMemo(\n () =>\n buttonProp &&\n cloneElement(buttonProp, {\n 'data-ui': 'MenuButton',\n id,\n 'onClick': handleButtonClick,\n 'onKeyDown': handleButtonKeyDown,\n 'onMouseDown': handleMouseDown,\n 'aria-haspopup': true,\n 'aria-expanded': open,\n 'ref': setButtonElement,\n 'selected': buttonProp.props.selected ?? open,\n }),\n [buttonProp, handleButtonClick, handleButtonKeyDown, handleMouseDown, id, open],\n )\n\n // Forward button ref to parent\n useImperativeHandle<HTMLButtonElement | null, HTMLButtonElement | null>(\n forwardedRef,\n () => buttonElement,\n [buttonElement],\n )\n\n const popoverProps: MenuButtonProps['popover'] = useMemo(\n () => ({\n overflow: 'auto',\n portal: true,\n // oxlint-disable-next-line no-useless-fallback-in-spread\n ...(popover || {}),\n }),\n [popover],\n )\n\n return (\n <Popover data-ui=\"MenuButton__popover\" {...popoverProps} content={menu} open={open}>\n {button || <></>}\n </Popover>\n )\n}\n","import {styled} from 'styled-components'\n\nimport {ElementType, EmptyProps, Props} from '../../types/component'\n\n/**\n * @public\n */\nexport type MenuDividerProps<E extends ElementType = 'hr'> = Props<EmptyProps, E>\n\n/**\n * @public\n */\n// oxlint-disable-next-line no-unsafe-type-assertion\nexport const MenuDivider = styled.hr`\n height: 1px;\n border: 0;\n background: var(--card-hairline-soft-color);\n margin: 0;\n` as unknown as <E extends ElementType = 'hr'>(props: MenuDividerProps<E>) => React.JSX.Element\n","import {css} from 'styled-components'\n\nimport {getTheme_v2} from '../../../theme/versioning/getTheme_v2'\nimport {_cardColorStyle} from '../../styles/card/_cardColorStyle'\nimport {ThemeProps} from '../../styles/types'\nimport {SelectableTone} from '../../types/selectable'\n\n/**\n * @internal\n */\nexport interface SelectableStyleProps {\n $tone: SelectableTone\n}\n\nexport function selectableBaseStyle(): ReturnType<typeof css> {\n return css`\n background-color: inherit;\n color: inherit;\n\n &[data-as='button'] {\n -webkit-font-smoothing: inherit;\n appearance: none;\n outline: none;\n font: inherit;\n text-align: inherit;\n border: 0;\n width: -moz-available;\n width: -webkit-fill-available;\n width: stretch;\n }\n\n /* &:is(a) */\n &[data-as='a'] {\n text-decoration: none;\n }\n `\n}\n\nexport function selectableColorStyle(\n props: SelectableStyleProps & ThemeProps,\n): ReturnType<typeof css> {\n const {$tone} = props\n const {color, style} = getTheme_v2(props.theme)\n const tone = color.selectable[$tone]\n\n return css`\n ${_cardColorStyle(color, tone.enabled)}\n\n background-color: var(--card-bg-color);\n color: var(--card-fg-color);\n outline: none;\n\n /* &:is(button) */\n &[data-as='button'] {\n &:disabled {\n ${_cardColorStyle(color, tone.disabled)}\n }\n\n &:not(:disabled) {\n &[aria-pressed='true'] {\n ${_cardColorStyle(color, tone.pressed)}\n }\n\n &[data-selected],\n &[aria-selected='true'] > & {\n ${_cardColorStyle(color, tone.selected)}\n }\n\n @media (hover: hover) {\n &:not([data-selected]) {\n &[data-hovered],\n &:hover {\n ${_cardColorStyle(color, tone.hovered)}\n }\n\n &:active {\n ${_cardColorStyle(color, tone.pressed)}\n }\n }\n }\n }\n }\n\n /* &:is(a) */\n &[data-as='a'] {\n &[data-disabled] {\n ${_cardColorStyle(color, tone.disabled)}\n }\n\n &:not([data-disabled]) {\n &[data-pressed] {\n ${_cardColorStyle(color, tone.pressed)}\n }\n\n &[data-selected] {\n ${_cardColorStyle(color, tone.selected)}\n }\n\n @media (hover: hover) {\n &:not([data-selected]) {\n &[data-hovered],\n &:hover {\n ${_cardColorStyle(color, tone.hovered)}\n }\n &:active {\n ${_cardColorStyle(color, tone.pressed)}\n }\n }\n }\n }\n }\n\n ${style?.card?.root}\n `\n}\n","import {styled} from 'styled-components'\n\nimport {responsiveRadiusStyle} from '../../styles/radius/radiusStyle'\nimport {ResponsiveRadiusStyleProps} from '../../styles/radius/types'\nimport {Box} from '../box/box'\nimport {selectableBaseStyle, selectableColorStyle, SelectableStyleProps} from './style'\n\n/**\n * @internal\n */\nexport const Selectable = styled(Box)<SelectableStyleProps & ResponsiveRadiusStyleProps>(\n responsiveRadiusStyle,\n selectableBaseStyle,\n selectableColorStyle,\n)\n","import {useContext} from 'react'\n\nimport {isRecord} from '../../lib/isRecord'\nimport {MenuContext, MenuContextValue} from './menuContext'\n\nexport function useMenu(): MenuContextValue {\n const value = useContext(MenuContext)\n\n if (!value) {\n throw new Error('useMenu(): missing context value')\n }\n\n // NOTE: This check is for future-compatiblity\n // - If the value is not an object, it’s not compatible with the current version\n // - If the value is an object, but doesn’t have `version: 2`, it’s not compatible with the current version\n if (!isRecord(value) || value.version !== 2) {\n throw new Error('useMenu(): the context value is not compatible')\n }\n\n return value\n}\n","import {ChevronRightIcon} from '@sanity/icons/ChevronRight'\nimport {isValidElement, useCallback, useEffect, useState} from 'react'\nimport {isValidElementType} from 'react-is'\n\nimport {Selectable} from '../../primitives/_selectable/selectable'\nimport {Box} from '../../primitives/box/box'\nimport {Flex} from '../../primitives/flex/flex'\nimport {Popover, PopoverProps} from '../../primitives/popover/popover'\nimport {Text} from '../../primitives/text/text'\nimport {_getArrayProp} from '../../styles/helpers'\nimport {useRootTheme} from '../../theme/useRootTheme'\nimport {ElementType, Props} from '../../types/component'\nimport {Radius} from '../../types/radius'\nimport {SelectableTone} from '../../types/selectable'\nimport {Menu, MenuProps} from './menu'\nimport {useMenu} from './useMenu'\n\n/**\n * @public\n */\nexport interface MenuGroupOwnProps {\n fontSize?: number | number[]\n // oxlint-disable-next-line no-redundant-type-constituents\n icon?: React.ElementType | React.ReactNode\n menu?: Omit<\n MenuProps,\n | 'onClickOutside'\n | 'onEscape'\n | 'onItemClick'\n | 'onKeyDown'\n | 'onMouseEnter'\n | 'registerElement'\n | 'shouldFocus'\n | 'onBlurCapture'\n >\n padding?: number | number[]\n popover?: Omit<PopoverProps, 'content' | 'open'>\n radius?: Radius | Radius[]\n gap?: number | number[]\n /**\n * @deprecated Use `gap` instead.\n */\n space?: never\n text: React.ReactNode\n tone?: SelectableTone\n}\n\n/**\n * @public\n */\nexport type MenuGroupProps<E extends ElementType = 'button'> = Props<MenuGroupOwnProps, E>\n\nconst MenuGroupComponent = function MenuGroup(\n props: Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'height' | 'popover' | 'ref' | 'tabIndex'> &\n MenuGroupOwnProps & {as?: ElementType},\n): React.JSX.Element {\n const {\n as = 'button',\n children,\n fontSize = 1,\n icon: IconComponent,\n menu: menuProps,\n onClick,\n padding = 3,\n popover,\n radius = 2,\n gap = 3,\n text,\n tone = 'default',\n ...restProps\n } = props\n const menu = useMenu()\n const {scheme} = useRootTheme()\n const {\n activeElement,\n mount,\n onClickOutside,\n onEscape,\n onItemClick,\n onItemMouseEnter: _onItemMouseEnter,\n registerElement,\n } = menu\n const onItemMouseEnter = _onItemMouseEnter ?? menu.onItemMouseEnter\n const [rootElement, setRootElement] = useState<HTMLButtonElement | HTMLDivElement | null>(null)\n const [open, setOpen] = useState(false)\n const [shouldFocus, setShouldFocus] = useState<'first' | 'last' | null>(null)\n const active = Boolean(activeElement) && activeElement === rootElement\n const [withinMenu, setWithinMenu] = useState(false)\n\n const handleMouseEnter = useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n setWithinMenu(false)\n onItemMouseEnter(event)\n setOpen(true)\n },\n [onItemMouseEnter],\n )\n\n const handleMenuKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'ArrowLeft') {\n event.stopPropagation()\n\n setOpen(false)\n\n requestAnimationFrame(() => {\n rootElement?.focus()\n })\n }\n },\n [rootElement],\n )\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n onClick?.(event)\n\n setShouldFocus('first')\n setOpen(true)\n },\n [onClick],\n )\n\n const handleChildItemClick = useCallback(() => {\n setOpen(false)\n onItemClick?.()\n }, [onItemClick])\n\n const handleMenuMouseEnter = useCallback(() => setWithinMenu(true), [])\n\n // Register the menu item element\n useEffect(() => mount(rootElement), [mount, rootElement])\n\n // Close child menu when a sibling item becomes active\n useEffect(() => {\n // oxlint-disable-next-line react-compiler\n if (!active) setOpen(false)\n }, [active])\n\n // Update state when child menu is no longer open\n useEffect(() => {\n // oxlint-disable-next-line react-compiler\n if (!open) setWithinMenu(false)\n }, [open])\n\n // Reset the shouldFocus state after it has been used\n useEffect(() => {\n if (!shouldFocus) return\n // The useMenuController effect that handles `shouldFocus` schedules a request animation frame where it's processed.\n // By doing the same here, we ensure that the reset is processed after the focus change.\n const rafId = requestAnimationFrame(() => setShouldFocus(null))\n\n // oxlint-disable-next-line consistent-return\n return () => cancelAnimationFrame(rafId)\n }, [shouldFocus])\n\n const childMenu = (\n <Menu\n {...menuProps}\n onClickOutside={onClickOutside}\n onEscape={onEscape}\n onItemClick={handleChildItemClick}\n onKeyDown={handleMenuKeyDown}\n onMouseEnter={handleMenuMouseEnter}\n registerElement={registerElement}\n shouldFocus={shouldFocus}\n >\n {children}\n </Menu>\n )\n\n const handleKeyDown = useCallback((event: React.KeyboardEvent<HTMLDivElement>) => {\n const target = event.currentTarget\n\n if (document.activeElement !== target) {\n return\n }\n\n if (event.key === 'ArrowRight') {\n setShouldFocus('first')\n setOpen(true)\n setWithinMenu(true)\n\n return\n }\n }, [])\n\n return (\n <Popover {...popover} content={childMenu} data-ui=\"MenuGroup__popover\" open={open}>\n <Selectable\n data-as={as}\n data-ui=\"MenuGroup\"\n forwardedAs={as}\n {...restProps}\n aria-pressed={as === 'button' ? withinMenu : undefined}\n data-pressed={as !== 'button' ? withinMenu : undefined}\n data-selected={!withinMenu && active ? '' : undefined}\n $radius={_getArrayProp(radius)}\n $tone={tone}\n $scheme={scheme}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onMouseEnter={handleMouseEnter}\n ref={setRootElement}\n tabIndex={-1}\n type={as === 'button' ? 'button' : undefined}\n >\n <Flex gap={gap} padding={padding}>\n {IconComponent && (\n <Text size={fontSize}>\n {isValidElement(IconComponent) && IconComponent}\n {isValidElementType(IconComponent) && <IconComponent />}\n </Text>\n )}\n\n <Box flex={1}>\n <Text size={fontSize} textOverflow=\"ellipsis\" weight=\"medium\">\n {text}\n </Text>\n </Box>\n\n <Text size={fontSize}>\n <ChevronRightIcon />\n </Text>\n </Flex>\n </Selectable>\n </Popover>\n )\n}\n\n/**\n * @public\n */\n// oxlint-disable-next-line no-unsafe-type-assertion\nexport const MenuGroup = MenuGroupComponent as unknown as <E extends ElementType = 'button'>(\n props: MenuGroupProps<E>,\n) => React.JSX.Element\n","import {\n isValidElement,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport {isValidElementType} from 'react-is'\n\nimport {Selectable} from '../../primitives/_selectable/selectable'\nimport {Box} from '../../primitives/box/box'\nimport {Flex} from '../../primitives/flex/flex'\nimport {Text} from '../../primitives/text/text'\nimport {ResponsivePaddingProps, ResponsiveRadiusProps} from '../../primitives/types'\nimport {_getArrayProp} from '../../styles/helpers'\nimport {useRootTheme} from '../../theme/useRootTheme'\nimport {ElementType, Props} from '../../types/component'\nimport {SelectableTone} from '../../types/selectable'\nimport {Hotkeys} from '../hotkeys/hotkeys'\nimport {useMenu} from './useMenu'\n\n/**\n * @public\n */\nexport interface MenuItemOwnProps extends ResponsivePaddingProps, ResponsiveRadiusProps {\n fontSize?: number | number[]\n hotkeys?: string[]\n // oxlint-disable-next-line no-redundant-type-constituents\n icon?: React.ElementType | React.ReactNode\n // oxlint-disable-next-line no-redundant-type-constituents\n iconRight?: React.ElementType | React.ReactNode\n pressed?: boolean\n selected?: boolean\n gap?: number | number[]\n /**\n * @deprecated Use `gap` instead.\n */\n space?: never\n text?: React.ReactNode\n tone?: SelectableTone\n}\n\n/**\n * @public\n */\nexport type MenuItemProps<E extends ElementType = 'button'> = Props<MenuItemOwnProps, E>\n\nconst MenuItemComponent = function MenuItem(\n props: MenuItemOwnProps & {as?: ElementType} & Omit<\n React.HTMLProps<HTMLDivElement>,\n 'as' | 'height' | 'selected' | 'tabIndex'\n >,\n) {\n const {\n as = 'button',\n children,\n disabled,\n fontSize = 1,\n hotkeys,\n icon: IconComponent,\n iconRight: IconRightComponent,\n onClick,\n padding = 3,\n paddingX,\n paddingY,\n paddingTop,\n paddingRight,\n paddingBottom,\n paddingLeft,\n pressed,\n radius = 2,\n ref: forwardedRef,\n selected: selectedProp,\n gap = 3,\n text,\n tone = 'default',\n ...restProps\n } = props\n const {scheme} = useRootTheme()\n const menu = useMenu()\n const {\n activeElement,\n mount,\n onItemClick,\n onItemMouseEnter: _onItemMouseEnter,\n onItemMouseLeave: _onItemMouseLeave,\n } = menu\n const onItemMouseEnter = _onItemMouseEnter ?? menu.onItemMouseEnter\n const onItemMouseLeave = _onItemMouseLeave ?? menu.onItemMouseLeave\n const [rootElement, setRootElement] = useState<HTMLDivElement | null>(null)\n const active = Boolean(activeElement) && activeElement === rootElement\n const ref = useRef<HTMLDivElement | null>(null)\n\n useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(forwardedRef, () => ref.current)\n\n useEffect(() => mount(rootElement, selectedProp), [mount, rootElement, selectedProp])\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n if (disabled) return\n if (onClick) onClick(event)\n if (onItemClick) onItemClick()\n },\n [disabled, onClick, onItemClick],\n )\n\n const paddingProps = useMemo(\n () => ({\n padding,\n paddingX,\n paddingY,\n paddingTop,\n paddingRight,\n paddingBottom,\n paddingLeft,\n }),\n [padding, paddingX, paddingY, paddingTop, paddingRight, paddingBottom, paddingLeft],\n )\n\n const hotkeysFontSize = _getArrayProp(fontSize).map((s) => s - 1)\n\n const setRef = useCallback((el: HTMLDivElement | null) => {\n ref.current = el\n setRootElement(el)\n }, [])\n\n return (\n <Selectable\n data-ui=\"MenuItem\"\n role=\"menuitem\"\n {...restProps}\n data-pressed={as !== 'button' && pressed ? '' : undefined}\n data-selected={active ? '' : undefined}\n data-disabled={disabled ? '' : undefined}\n forwardedAs={as}\n $radius={_getArrayProp(radius)}\n $padding={_getArrayProp(0)}\n $tone={disabled ? 'default' : tone}\n $scheme={scheme}\n disabled={disabled}\n onClick={handleClick}\n onMouseEnter={onItemMouseEnter}\n onMouseLeave={onItemMouseLeave}\n ref={setRef}\n tabIndex={-1}\n type={as === 'button' ? 'button' : undefined}\n >\n {(IconComponent || text || IconRightComponent) && (\n <Flex as=\"span\" gap={gap} align=\"center\" {...paddingProps}>\n {IconComponent && (\n <Text size={fontSize}>\n {isValidElement(IconComponent) && IconComponent}\n {isValidElementType(IconComponent) && <IconComponent />}\n </Text>\n )}\n\n {text && (\n <Box flex={1}>\n <Text size={fontSize} textOverflow=\"ellipsis\" weight=\"medium\">\n {text}\n </Text>\n </Box>\n )}\n\n {hotkeys && (\n <Hotkeys\n fontSize={hotkeysFontSize}\n keys={hotkeys}\n style={{marginTop: -4, marginBottom: -4}}\n />\n )}\n\n {IconRightComponent && (\n <Text size={fontSize}>\n {isValidElement(IconRightComponent) && IconRightComponent}\n {isValidElementType(IconRightComponent) && <IconRightComponent />}\n </Text>\n )}\n </Flex>\n )}\n {children && (\n <Box as=\"span\" {...paddingProps}>\n {children}\n </Box>\n )}\n </Selectable>\n )\n}\n\n/**\n * @public\n */\n// oxlint-disable-next-line no-unsafe-type-assertion\nexport const MenuItem = MenuItemComponent as unknown as <E extends ElementType = 'button'>(\n props: MenuItemProps<E>,\n) => React.JSX.Element\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"menu.js","names":["[]","(nextActiveIndex: number) => {\n _setActiveIndex(nextActiveIndex)\n activeIndexRef.current = nextActiveIndex\n setActiveElement(elementsRef.current[nextActiveIndex] || null)\n }","useCallback((nextActiveIndex: number) => {\n _setActiveIndex(nextActiveIndex)\n activeIndexRef.current = nextActiveIndex\n setActiveElement(elementsRef.current[nextActiveIndex] || null)\n }, [])","(element: HTMLElement | null, selected?: boolean): (() => void) => {\n if (!element) return () => undefined\n\n if (elementsRef.current.indexOf(element) === -1) {\n elementsRef.current.push(element)\n _sortElements(rootElementRef.current, elementsRef.current)\n }\n\n if (selected) {\n const selectedIndex = elementsRef.current.indexOf(element)\n\n setActiveIndex(selectedIndex)\n }\n\n return () => {\n const idx = elementsRef.current.indexOf(element)\n\n if (idx > -1) {\n elementsRef.current.splice(idx, 1)\n }\n }\n }","rootElementRef.current","() => undefined","useCallback(\n (element: HTMLElement | null, selected?: boolean): (() => void) => {\n if (!element) return () => undefined\n\n if (elementsRef.current.indexOf(element) === -1) {\n elementsRef.current.push(element)\n _sortElements(rootElementRef.current, elementsRef.current)\n }\n\n if (selected) {\n const selectedIndex = elementsRef.current.indexOf(element)\n\n setActiveIndex(selectedIndex)\n }\n\n return () => {\n const idx = elementsRef.current.indexOf(element)\n\n if (idx > -1) {\n elementsRef.current.splice(idx, 1)\n }\n }\n },\n [rootElementRef, setActiveIndex],\n )","() => {\n return () => setActiveIndex(-1)\n }","[setActiveIndex]","(event: React.KeyboardEvent<HTMLDivElement>) => {\n // Move focus to the element that opened the menu before handling the `Tab` press\n if (event.key === 'Tab') {\n if (originElement) {\n originElement.focus()\n }\n\n return\n }\n\n // Move focus to the first focusable menuitem\n if (event.key === 'Home') {\n event.preventDefault()\n event.stopPropagation()\n\n const focusableElements = _getFocusableElements(elementsRef.current)\n const el = focusableElements[0]\n\n if (!el) return\n\n const currentIndex = elementsRef.current.indexOf(el)\n\n setActiveIndex(currentIndex)\n\n return\n }\n\n // Move focus to the last focusable menuitem\n if (event.key === 'End') {\n event.preventDefault()\n event.stopPropagation()\n\n const focusableElements = _getFocusableElements(elementsRef.current)\n const el = focusableElements[focusableElements.length - 1]\n\n if (!el) return\n\n const currentIndex = elementsRef.current.indexOf(el)\n\n setActiveIndex(currentIndex)\n\n return\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n event.stopPropagation()\n\n const focusableElements = _getFocusableElements(elementsRef.current)\n const focusableLen = focusableElements.length\n\n if (focusableLen === 0) return\n\n const focusedElement = elementsRef.current[activeIndexRef.current]\n\n let focusedIndex = focusableElements.indexOf(focusedElement)\n\n focusedIndex = (focusedIndex - 1 + focusableLen) % focusableLen\n\n const el = focusableElements[focusedIndex]\n const currentIndex = elementsRef.current.indexOf(el)\n\n setActiveIndex(currentIndex)\n\n return\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n event.stopPropagation()\n\n const focusableElements = _getFocusableElements(elementsRef.current)\n const focusableLen = focusableElements.length\n\n if (focusableLen === 0) return\n\n const focusedElement = elementsRef.current[activeIndexRef.current]\n\n let focusedIndex = focusableElements.indexOf(focusedElement)\n\n focusedIndex = (focusedIndex + 1) % focusableLen\n\n const el = focusableElements[focusedIndex]\n const currentIndex = elementsRef.current.indexOf(el)\n\n setActiveIndex(currentIndex)\n\n return\n }\n\n if (onKeyDown) {\n onKeyDown(event)\n }\n }","focusableElements","el","currentIndex","focusableLen","focusedElement","focusedIndex","useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n // Move focus to the element that opened the menu before handling the `Tab` press\n if (event.key === 'Tab') {\n if (originElement) {\n originElement.focus()\n }\n\n return\n }\n\n // Move focus to the first focusable menuitem\n if (event.key === 'Home') {\n event.preventDefault()\n event.stopPropagation()\n\n const focusableElements = _getFocusableElements(elementsRef.current)\n const el = focusableElements[0]\n\n if (!el) return\n\n const currentIndex = elementsRef.current.indexOf(el)\n\n setActiveIndex(currentIndex)\n\n return\n }\n\n // Move focus to the last focusable menuitem\n if (event.key === 'End') {\n event.preventDefault()\n event.stopPropagation()\n\n const focusableElements = _getFocusableElements(elementsRef.current)\n const el = focusableElements[focusableElements.length - 1]\n\n if (!el) return\n\n const currentIndex = elementsRef.current.indexOf(el)\n\n setActiveIndex(currentIndex)\n\n return\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n event.stopPropagation()\n\n const focusableElements = _getFocusableElements(elementsRef.current)\n const focusableLen = focusableElements.length\n\n if (focusableLen === 0) return\n\n const focusedElement = elementsRef.current[activeIndexRef.current]\n\n let focusedIndex = focusableElements.indexOf(focusedElement)\n\n focusedIndex = (focusedIndex - 1 + focusableLen) % focusableLen\n\n const el = focusableElements[focusedIndex]\n const currentIndex = elementsRef.current.indexOf(el)\n\n setActiveIndex(currentIndex)\n\n return\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n event.stopPropagation()\n\n const focusableElements = _getFocusableElements(elementsRef.current)\n const focusableLen = focusableElements.length\n\n if (focusableLen === 0) return\n\n const focusedElement = elementsRef.current[activeIndexRef.current]\n\n let focusedIndex = focusableElements.indexOf(focusedElement)\n\n focusedIndex = (focusedIndex + 1) % focusableLen\n\n const el = focusableElements[focusedIndex]\n const currentIndex = elementsRef.current.indexOf(el)\n\n setActiveIndex(currentIndex)\n\n return\n }\n\n if (onKeyDown) {\n onKeyDown(event)\n }\n },\n [onKeyDown, originElement, setActiveIndex],\n )","(event: React.MouseEvent<HTMLElement>) => {\n const element = event.currentTarget\n const currentIndex = elementsRef.current.indexOf(element)\n\n setActiveIndex(currentIndex)\n }","element","event","useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n const element = event.currentTarget\n const currentIndex = elementsRef.current.indexOf(element)\n\n setActiveIndex(currentIndex)\n },\n [setActiveIndex],\n )","() => {\n // Set the active index to -2 to deactivate all menu items\n // when the user moves the mouse away from the menu item.\n // We avoid using -1 because it would focus the first menu item,\n // which would be incorrect when the user hovers over a gap\n // between two menu items or a menu divider.\n setActiveIndex(-2)\n rootElementRef.current?.focus()\n }","rootElementRef.current?.focus","useCallback(() => {\n // Set the active index to -2 to deactivate all menu items\n // when the user moves the mouse away from the menu item.\n // We avoid using -1 because it would focus the first menu item,\n // which would be incorrect when the user hovers over a gap\n // between two menu items or a menu divider.\n setActiveIndex(-2)\n rootElementRef.current?.focus()\n }, [rootElementRef, setActiveIndex])","() => {\n if (!rootElementRef.current) return\n\n const rafId = requestAnimationFrame(() => {\n if (activeIndex === -1) {\n if (shouldFocus === 'first') {\n const focusableElements = _getFocusableElements(elementsRef.current)\n const el = focusableElements[0]\n\n if (el) {\n const currentIndex = elementsRef.current.indexOf(el)\n\n setActiveIndex(currentIndex)\n }\n }\n\n if (shouldFocus === 'last') {\n const focusableElements = _getFocusableElements(elementsRef.current)\n const el = focusableElements[focusableElements.length - 1]\n\n if (el) {\n const currentIndex = elementsRef.current.indexOf(el)\n\n setActiveIndex(currentIndex)\n }\n }\n\n return\n }\n\n const element = elementsRef.current[activeIndex] || null\n\n element?.focus()\n })\n\n // oxlint-disable-next-line consistent-return\n return () => cancelAnimationFrame(rafId)\n }","[activeIndex, rootElementRef, setActiveIndex, shouldFocus]","{\n activeElement,\n activeIndex,\n handleItemMouseEnter,\n handleItemMouseLeave,\n handleKeyDown,\n mount,\n }","padding = 1","shouldFocus = null","gap = 1","() => ref.current","{onKeyDown, originElement, shouldFocus, rootElementRef: ref}","(el: HTMLDivElement | null) => {\n // Run cleanup of previously registered elements\n if (unregisterElementRef.current) {\n // The `registerElement` callback were originally used in a `useEffect`, so it returns a cleanup function that is a bit gnarly to handle in a ref callback.\n // Since we can't change the `registerElement` implementation itself without making breaking change,\n // that is explained in the code comments for createGlobalScopedContext.tsx,\n // we need to handle with a ref that holds on to the cleanup function last returned when the ref callback is called.\n unregisterElementRef.current()\n unregisterElementRef.current = null\n }\n\n ref.current = el\n\n // Register root element (for nested menus)\n if (ref.current && registerElement) {\n unregisterElementRef.current = registerElement(ref.current)\n }\n }","useCallback(\n (el: HTMLDivElement | null) => {\n // Run cleanup of previously registered elements\n if (unregisterElementRef.current) {\n // The `registerElement` callback were originally used in a `useEffect`, so it returns a cleanup function that is a bit gnarly to handle in a ref callback.\n // Since we can't change the `registerElement` implementation itself without making breaking change,\n // that is explained in the code comments for createGlobalScopedContext.tsx,\n // we need to handle with a ref that holds on to the cleanup function last returned when the ref callback is called.\n unregisterElementRef.current()\n unregisterElementRef.current = null\n }\n\n ref.current = el\n\n // Register root element (for nested menus)\n if (ref.current && registerElement) {\n unregisterElementRef.current = registerElement(ref.current)\n }\n },\n [registerElement],\n )","() => {\n if (onItemSelect) onItemSelect(activeIndex)\n }","[activeIndex, onItemSelect]","() => [ref.current]","(event) => {\n if (!isTopLayer) return\n\n if (event.key === 'Escape') {\n event.stopPropagation()\n if (onEscape) onEscape()\n }\n }","useCallback(\n (event) => {\n if (!isTopLayer) return\n\n if (event.key === 'Escape') {\n event.stopPropagation()\n if (onEscape) onEscape()\n }\n },\n [isTopLayer, onEscape],\n )","{\n version: 2,\n activeElement,\n mount,\n onClickOutside,\n onEscape,\n onItemClick,\n onItemMouseEnter: handleItemMouseEnter,\n onItemMouseLeave: handleItemMouseLeave,\n registerElement,\n }","<Stack gap={gap}>{children}</Stack>","<StyledMenu\n data-ui=\"Menu\"\n {...restProps}\n onKeyDown={handleKeyDown}\n padding={padding}\n ref={handleRefChange}\n role=\"menu\"\n tabIndex={-1}\n >\n <Stack gap={gap}>{children}</Stack>\n </StyledMenu>","<MenuContext.Provider value={value}>\n <StyledMenu\n data-ui=\"Menu\"\n {...restProps}\n onKeyDown={handleKeyDown}\n padding={padding}\n ref={handleRefChange}\n role=\"menu\"\n tabIndex={-1}\n >\n <Stack gap={gap}>{children}</Stack>\n </StyledMenu>\n </MenuContext.Provider>","MenuContext.Provider","disableRestoreFocusOnClose = false","[]","() => {\n if (onOpen && open && !openRef.current) {\n onOpen()\n }\n }","[onOpen, open]","() => {\n if (onClose && !open && openRef.current) {\n onClose()\n }\n }","[onClose, open]","() => {\n openRef.current = open\n }","[open]","() => {\n setOpen((v) => !v)\n setShouldFocus(null)\n }","(v) => !v","useCallback(() => {\n setOpen((v) => !v)\n setShouldFocus(null)\n }, [])","(event: PointerEvent) => {\n if (open) event.preventDefault()\n }","useCallback(\n (event: PointerEvent) => {\n if (open) event.preventDefault()\n },\n [open],\n )","(event: React.KeyboardEvent<HTMLButtonElement>) => {\n // On `ArrowDown`, `Enter` and `Space`\n // - Opens menu and moves focus to first menuitem\n if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n setOpen(true)\n setShouldFocus('first')\n\n return\n }\n\n // On `ArrowUp`\n // - \tOpens menu and moves focus to last menuitem\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n setOpen(true)\n setShouldFocus('last')\n\n return\n }\n }","event","useCallback((event: React.KeyboardEvent<HTMLButtonElement>) => {\n // On `ArrowDown`, `Enter` and `Space`\n // - Opens menu and moves focus to first menuitem\n if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n setOpen(true)\n setShouldFocus('first')\n\n return\n }\n\n // On `ArrowUp`\n // - \tOpens menu and moves focus to last menuitem\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n setOpen(true)\n setShouldFocus('last')\n\n return\n }\n }, [])","(event: MouseEvent) => {\n const target = event.target\n\n if (!(target instanceof Node)) {\n return\n }\n\n if (buttonElement && (target === buttonElement || buttonElement.contains(target))) {\n return\n }\n\n for (const el of menuElements) {\n if (target === el || el.contains(target)) {\n return\n }\n }\n\n setOpen(false)\n }","useCallback(\n (event: MouseEvent) => {\n const target = event.target\n\n if (!(target instanceof Node)) {\n return\n }\n\n if (buttonElement && (target === buttonElement || buttonElement.contains(target))) {\n return\n }\n\n for (const el of menuElements) {\n if (target === el || el.contains(target)) {\n return\n }\n }\n\n setOpen(false)\n },\n [buttonElement, menuElements],\n )","() => {\n setOpen(false)\n if (disableRestoreFocusOnClose) return\n if (buttonElement) buttonElement.focus()\n }","useCallback(() => {\n setOpen(false)\n if (disableRestoreFocusOnClose) return\n if (buttonElement) buttonElement.focus()\n }, [buttonElement, disableRestoreFocusOnClose])","(event: FocusEvent) => {\n const target = event.relatedTarget\n\n if (!(target instanceof Node)) {\n return\n }\n\n for (const el of menuElements) {\n if (el === target || el.contains(target)) {\n return\n }\n }\n\n setOpen(false)\n }","target","el","useCallback(\n (event: FocusEvent) => {\n const target = event.relatedTarget\n\n if (!(target instanceof Node)) {\n return\n }\n\n for (const el of menuElements) {\n if (el === target || el.contains(target)) {\n return\n }\n }\n\n setOpen(false)\n },\n [menuElements],\n )","(el: HTMLElement) => {\n setChildMenuElements((els) => els.concat([el]))\n\n return () => setChildMenuElements((els) => els.filter((_el) => _el !== el))\n }","els","useCallback((el: HTMLElement) => {\n setChildMenuElements((els) => els.concat([el]))\n\n return () => setChildMenuElements((els) => els.filter((_el) => _el !== el))\n }, [])","menuProp && cloneElement(menuProp, menuProps)","buttonProp &&\n cloneElement(buttonProp, {\n 'data-ui': 'MenuButton',\n id,\n 'onClick': handleButtonClick,\n 'onKeyDown': handleButtonKeyDown,\n 'onMouseDown': handleMouseDown,\n 'aria-haspopup': true,\n 'aria-expanded': open,\n 'ref': setButtonElement,\n 'selected': buttonProp.props.selected ?? open,\n })","useMemo(\n () =>\n buttonProp &&\n cloneElement(buttonProp, {\n 'data-ui': 'MenuButton',\n id,\n 'onClick': handleButtonClick,\n 'onKeyDown': handleButtonKeyDown,\n 'onMouseDown': handleMouseDown,\n 'aria-haspopup': true,\n 'aria-expanded': open,\n 'ref': setButtonElement,\n 'selected': buttonProp.props.selected ?? open,\n }),\n [buttonProp, handleButtonClick, handleButtonKeyDown, handleMouseDown, id, open],\n )","() => buttonElement","[buttonElement]","popover || {}","{\n overflow: 'auto',\n portal: true,\n // oxlint-disable-next-line no-useless-fallback-in-spread\n ...(popover || {}),\n }","useMemo(\n () => ({\n overflow: 'auto',\n portal: true,\n // oxlint-disable-next-line no-useless-fallback-in-spread\n ...(popover || {}),\n }),\n [popover],\n )","button || <></>","<Popover data-ui=\"MenuButton__popover\" {...popoverProps} content={menu} open={open}>\n {button || <></>}\n </Popover>","as = 'button'","fontSize = 1","padding = 3","radius = 2","gap = 3","tone = 'default'","(event: React.MouseEvent<HTMLElement>) => {\n setWithinMenu(false)\n onItemMouseEnter(event)\n setOpen(true)\n }","useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n setWithinMenu(false)\n onItemMouseEnter(event)\n setOpen(true)\n },\n [onItemMouseEnter],\n )","(event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'ArrowLeft') {\n event.stopPropagation()\n\n setOpen(false)\n\n requestAnimationFrame(() => {\n rootElement?.focus()\n })\n }\n }","rootElement?.focus","event","useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'ArrowLeft') {\n event.stopPropagation()\n\n setOpen(false)\n\n requestAnimationFrame(() => {\n rootElement?.focus()\n })\n }\n },\n [rootElement],\n )","(event: React.MouseEvent<HTMLDivElement>) => {\n onClick?.(event)\n\n setShouldFocus('first')\n setOpen(true)\n }","useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n onClick?.(event)\n\n setShouldFocus('first')\n setOpen(true)\n },\n [onClick],\n )","() => {\n setOpen(false)\n onItemClick?.()\n }","useCallback(() => {\n setOpen(false)\n onItemClick?.()\n }, [onItemClick])","() => setWithinMenu(true)","useCallback(() => setWithinMenu(true), [])","() => mount(rootElement)","[mount, rootElement]","() => {\n // oxlint-disable-next-line react/set-state-in-effect\n if (!active) setOpen(false)\n }","[active]","() => {\n // oxlint-disable-next-line react/set-state-in-effect\n if (!open) setWithinMenu(false)\n }","[open]","() => {\n if (!shouldFocus) return\n // The useMenuController effect that handles `shouldFocus` schedules a request animation frame where it's processed.\n // By doing the same here, we ensure that the reset is processed after the focus change.\n const rafId = requestAnimationFrame(() => setShouldFocus(null))\n\n // oxlint-disable-next-line consistent-return\n return () => cancelAnimationFrame(rafId)\n }","[shouldFocus]","<Menu\n {...menuProps}\n onClickOutside={onClickOutside}\n onEscape={onEscape}\n onItemClick={handleChildItemClick}\n onKeyDown={handleMenuKeyDown}\n onMouseEnter={handleMenuMouseEnter}\n registerElement={registerElement}\n shouldFocus={shouldFocus}\n >\n {children}\n </Menu>","(event: React.KeyboardEvent<HTMLDivElement>) => {\n const target = event.currentTarget\n\n if (document.activeElement !== target) {\n return\n }\n\n if (event.key === 'ArrowRight') {\n setShouldFocus('first')\n setOpen(true)\n setWithinMenu(true)\n\n return\n }\n }","useCallback((event: React.KeyboardEvent<HTMLDivElement>) => {\n const target = event.currentTarget\n\n if (document.activeElement !== target) {\n return\n }\n\n if (event.key === 'ArrowRight') {\n setShouldFocus('first')\n setOpen(true)\n setWithinMenu(true)\n\n return\n }\n }, [])","_getArrayProp(radius)","IconComponent && (\n <Text size={fontSize}>\n {isValidElement(IconComponent) && IconComponent}\n {isValidElementType(IconComponent) && <IconComponent />}\n </Text>\n )","<Box flex={1}>\n <Text size={fontSize} textOverflow=\"ellipsis\" weight=\"medium\">\n {text}\n </Text>\n </Box>","<ChevronRightIcon />","<Text size={fontSize}>\n <ChevronRightIcon />\n </Text>","<Flex gap={gap} padding={padding}>\n {IconComponent && (\n <Text size={fontSize}>\n {isValidElement(IconComponent) && IconComponent}\n {isValidElementType(IconComponent) && <IconComponent />}\n </Text>\n )}\n\n <Box flex={1}>\n <Text size={fontSize} textOverflow=\"ellipsis\" weight=\"medium\">\n {text}\n </Text>\n </Box>\n\n <Text size={fontSize}>\n <ChevronRightIcon />\n </Text>\n </Flex>","<Selectable\n data-as={as}\n data-ui=\"MenuGroup\"\n forwardedAs={as}\n {...restProps}\n aria-pressed={as === 'button' ? withinMenu : undefined}\n data-pressed={as !== 'button' ? withinMenu : undefined}\n data-selected={!withinMenu && active ? '' : undefined}\n $radius={_getArrayProp(radius)}\n $tone={tone}\n $scheme={scheme}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onMouseEnter={handleMouseEnter}\n ref={setRootElement}\n tabIndex={-1}\n type={as === 'button' ? 'button' : undefined}\n >\n <Flex gap={gap} padding={padding}>\n {IconComponent && (\n <Text size={fontSize}>\n {isValidElement(IconComponent) && IconComponent}\n {isValidElementType(IconComponent) && <IconComponent />}\n </Text>\n )}\n\n <Box flex={1}>\n <Text size={fontSize} textOverflow=\"ellipsis\" weight=\"medium\">\n {text}\n </Text>\n </Box>\n\n <Text size={fontSize}>\n <ChevronRightIcon />\n </Text>\n </Flex>\n </Selectable>","as === 'button' ? withinMenu : undefined","as !== 'button' ? withinMenu : undefined","!withinMenu && active ? '' : undefined","as === 'button' ? 'button' : undefined","<Popover {...popover} content={childMenu} data-ui=\"MenuGroup__popover\" open={open}>\n <Selectable\n data-as={as}\n data-ui=\"MenuGroup\"\n forwardedAs={as}\n {...restProps}\n aria-pressed={as === 'button' ? withinMenu : undefined}\n data-pressed={as !== 'button' ? withinMenu : undefined}\n data-selected={!withinMenu && active ? '' : undefined}\n $radius={_getArrayProp(radius)}\n $tone={tone}\n $scheme={scheme}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onMouseEnter={handleMouseEnter}\n ref={setRootElement}\n tabIndex={-1}\n type={as === 'button' ? 'button' : undefined}\n >\n <Flex gap={gap} padding={padding}>\n {IconComponent && (\n <Text size={fontSize}>\n {isValidElement(IconComponent) && IconComponent}\n {isValidElementType(IconComponent) && <IconComponent />}\n </Text>\n )}\n\n <Box flex={1}>\n <Text size={fontSize} textOverflow=\"ellipsis\" weight=\"medium\">\n {text}\n </Text>\n </Box>\n\n <Text size={fontSize}>\n <ChevronRightIcon />\n </Text>\n </Flex>\n </Selectable>\n </Popover>","as = 'button'","fontSize = 1","padding = 3","radius = 2","gap = 3","tone = 'default'","() => ref.current","() => mount(rootElement, selectedProp)","[mount, rootElement, selectedProp]","(event: React.MouseEvent<HTMLDivElement>) => {\n if (disabled) return\n if (onClick) onClick(event)\n if (onItemClick) onItemClick()\n }","useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n if (disabled) return\n if (onClick) onClick(event)\n if (onItemClick) onItemClick()\n },\n [disabled, onClick, onItemClick],\n )","{\n padding,\n paddingX,\n paddingY,\n paddingTop,\n paddingRight,\n paddingBottom,\n paddingLeft,\n }","useMemo(\n () => ({\n padding,\n paddingX,\n paddingY,\n paddingTop,\n paddingRight,\n paddingBottom,\n paddingLeft,\n }),\n [padding, paddingX, paddingY, paddingTop, paddingRight, paddingBottom, paddingLeft],\n )","_getArrayProp(fontSize).map((s) => s - 1)","(s) => s - 1","(el: HTMLDivElement | null) => {\n ref.current = el\n setRootElement(el)\n }","useCallback((el: HTMLDivElement | null) => {\n ref.current = el\n setRootElement(el)\n }, [])","_getArrayProp(radius)","_getArrayProp(0)","(IconComponent || text || IconRightComponent) && (\n <Flex as=\"span\" gap={gap} align=\"center\" {...paddingProps}>\n {IconComponent && (\n <Text size={fontSize}>\n {isValidElement(IconComponent) && IconComponent}\n {isValidElementType(IconComponent) && <IconComponent />}\n </Text>\n )}\n\n {text && (\n <Box flex={1}>\n <Text size={fontSize} textOverflow=\"ellipsis\" weight=\"medium\">\n {text}\n </Text>\n </Box>\n )}\n\n {hotkeys && (\n <Hotkeys\n fontSize={hotkeysFontSize}\n keys={hotkeys}\n style={{marginTop: -4, marginBottom: -4}}\n />\n )}\n\n {IconRightComponent && (\n <Text size={fontSize}>\n {isValidElement(IconRightComponent) && IconRightComponent}\n {isValidElementType(IconRightComponent) && <IconRightComponent />}\n </Text>\n )}\n </Flex>\n )","children && (\n <Box as=\"span\" {...paddingProps}>\n {children}\n </Box>\n )","<Selectable\n data-ui=\"MenuItem\"\n role=\"menuitem\"\n {...restProps}\n data-pressed={as !== 'button' && pressed ? '' : undefined}\n data-selected={active ? '' : undefined}\n data-disabled={disabled ? '' : undefined}\n forwardedAs={as}\n $radius={_getArrayProp(radius)}\n $padding={_getArrayProp(0)}\n $tone={disabled ? 'default' : tone}\n $scheme={scheme}\n disabled={disabled}\n onClick={handleClick}\n onMouseEnter={onItemMouseEnter}\n onMouseLeave={onItemMouseLeave}\n ref={setRef}\n tabIndex={-1}\n type={as === 'button' ? 'button' : undefined}\n >\n {(IconComponent || text || IconRightComponent) && (\n <Flex as=\"span\" gap={gap} align=\"center\" {...paddingProps}>\n {IconComponent && (\n <Text size={fontSize}>\n {isValidElement(IconComponent) && IconComponent}\n {isValidElementType(IconComponent) && <IconComponent />}\n </Text>\n )}\n\n {text && (\n <Box flex={1}>\n <Text size={fontSize} textOverflow=\"ellipsis\" weight=\"medium\">\n {text}\n </Text>\n </Box>\n )}\n\n {hotkeys && (\n <Hotkeys\n fontSize={hotkeysFontSize}\n keys={hotkeys}\n style={{marginTop: -4, marginBottom: -4}}\n />\n )}\n\n {IconRightComponent && (\n <Text size={fontSize}>\n {isValidElement(IconRightComponent) && IconRightComponent}\n {isValidElementType(IconRightComponent) && <IconRightComponent />}\n </Text>\n )}\n </Flex>\n )}\n {children && (\n <Box as=\"span\" {...paddingProps}>\n {children}\n </Box>\n )}\n </Selectable>","as !== 'button' && pressed ? '' : undefined","active ? '' : undefined","disabled ? '' : undefined","disabled ? 'default' : tone","as === 'button' ? 'button' : undefined"],"sources":["../src/core/components/menu/menuContext.ts","../src/core/components/menu/helpers.ts","../src/core/components/menu/useMenuController.ts","../src/core/components/menu/menu.tsx","../src/core/components/menu/menuButton.tsx","../src/core/components/menu/menuDivider.ts","../src/core/primitives/_selectable/style.ts","../src/core/primitives/_selectable/selectable.tsx","../src/core/components/menu/useMenu.ts","../src/core/components/menu/menuGroup.tsx","../src/core/components/menu/menuItem.tsx"],"sourcesContent":["import {createGlobalScopedContext} from '../../lib/createGlobalScopedContext'\n\nexport interface MenuContextValue {\n version: 2\n activeElement: HTMLElement | null\n mount: (element: HTMLElement | null, selected?: boolean) => () => void\n onClickOutside?: (event: MouseEvent) => void\n onEscape?: () => void\n onItemClick?: () => void\n onItemMouseEnter: (event: React.MouseEvent<HTMLElement>) => void\n onItemMouseLeave: (event: React.MouseEvent<HTMLElement>) => void\n registerElement?: (el: HTMLElement) => () => void\n}\n\nexport const MenuContext = createGlobalScopedContext<MenuContextValue | null>(\n '@sanity/ui/context/menu',\n null,\n)\n","import {isHTMLAnchorElement, isHTMLButtonElement} from '../../helpers/element'\n\n/**\n * @internal\n */\nfunction _isFocusable(element: HTMLElement) {\n return (\n (isHTMLAnchorElement(element) && element.getAttribute('data-disabled') !== 'true') ||\n (isHTMLButtonElement(element) && !element.disabled)\n )\n}\n\n/**\n * @internal\n */\nexport function _getFocusableElements(elements: HTMLElement[]): HTMLElement[] {\n return elements.filter(_isFocusable)\n}\n\nfunction _getDOMPath(rootElement: HTMLElement, el: HTMLElement): number[] {\n const path: number[] = []\n\n let e = el\n\n while (e !== rootElement) {\n const parentElement = e.parentElement\n\n if (!parentElement) return path\n\n const children = Array.from(parentElement.childNodes)\n const index = children.indexOf(e)\n\n path.unshift(index)\n\n if (parentElement === rootElement) {\n return path\n }\n\n e = parentElement\n }\n\n return path\n}\n\nconst EMPTY_PATH: number[] = []\n\n/**\n * @internal\n */\nexport function _sortElements(rootElement: HTMLElement | null, elements: HTMLElement[]): void {\n if (!rootElement) return\n\n const map = new WeakMap<HTMLElement, number[]>()\n\n for (const el of elements) {\n map.set(el, _getDOMPath(rootElement, el))\n }\n\n const _sort = (a: HTMLElement, b: HTMLElement) => {\n const _a = map.get(a) || EMPTY_PATH\n const _b = map.get(b) || EMPTY_PATH\n\n const len = Math.max(_a.length, _b.length)\n\n // Loop until there are different indexes\n for (let i = 0; i < len; i += 1) {\n const aIndex = _a[i] || -1\n const bIndex = _b[i] || -1\n\n if (aIndex !== bIndex) {\n return aIndex - bIndex\n }\n }\n\n return 0\n }\n\n elements.sort(_sort)\n}\n","import {useCallback, useEffect, useRef, useState} from 'react'\n\nimport {_getFocusableElements, _sortElements} from './helpers'\n\n/**\n * @internal\n */\nexport interface MenuController {\n activeElement: HTMLElement | null\n activeIndex: number\n handleItemMouseEnter: (event: React.MouseEvent<HTMLElement>) => void\n handleItemMouseLeave: () => void\n handleKeyDown: (event: React.KeyboardEvent<HTMLDivElement>) => void\n mount: (element: HTMLElement | null, selected?: boolean) => () => void\n}\n\n/**\n * This controller is responsible for controlling UI menu state.\n *\n * @internal\n */\nexport function useMenuController(props: {\n onKeyDown?: React.KeyboardEventHandler\n originElement?: HTMLElement | null\n shouldFocus: 'first' | 'last' | null\n rootElementRef: React.RefObject<HTMLDivElement | null>\n}): MenuController {\n const {onKeyDown, originElement, shouldFocus, rootElementRef} = props\n const elementsRef = useRef<HTMLElement[]>([])\n const [activeIndex, _setActiveIndex] = useState(-1)\n const activeIndexRef = useRef(activeIndex)\n const [activeElement, setActiveElement] = useState<HTMLElement | null>(null)\n\n const setActiveIndex = useCallback((nextActiveIndex: number) => {\n _setActiveIndex(nextActiveIndex)\n activeIndexRef.current = nextActiveIndex\n setActiveElement(elementsRef.current[nextActiveIndex] || null)\n }, [])\n\n const mount = useCallback(\n (element: HTMLElement | null, selected?: boolean): (() => void) => {\n if (!element) return () => undefined\n\n if (elementsRef.current.indexOf(element) === -1) {\n elementsRef.current.push(element)\n _sortElements(rootElementRef.current, elementsRef.current)\n }\n\n if (selected) {\n const selectedIndex = elementsRef.current.indexOf(element)\n\n setActiveIndex(selectedIndex)\n }\n\n return () => {\n const idx = elementsRef.current.indexOf(element)\n\n if (idx > -1) {\n elementsRef.current.splice(idx, 1)\n }\n }\n },\n [rootElementRef, setActiveIndex],\n )\n\n // Reset the active item when the menu unmounts, or is hidden inside an <Activity> boundary\n // (which unmounts effects while preserving state), so that reopening behaves like a fresh\n // mount: `shouldFocus` applies again and `selected` items re-register through `mount`.\n useEffect(() => {\n return () => setActiveIndex(-1)\n }, [setActiveIndex])\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n // Move focus to the element that opened the menu before handling the `Tab` press\n if (event.key === 'Tab') {\n if (originElement) {\n originElement.focus()\n }\n\n return\n }\n\n // Move focus to the first focusable menuitem\n if (event.key === 'Home') {\n event.preventDefault()\n event.stopPropagation()\n\n const focusableElements = _getFocusableElements(elementsRef.current)\n const el = focusableElements[0]\n\n if (!el) return\n\n const currentIndex = elementsRef.current.indexOf(el)\n\n setActiveIndex(currentIndex)\n\n return\n }\n\n // Move focus to the last focusable menuitem\n if (event.key === 'End') {\n event.preventDefault()\n event.stopPropagation()\n\n const focusableElements = _getFocusableElements(elementsRef.current)\n const el = focusableElements[focusableElements.length - 1]\n\n if (!el) return\n\n const currentIndex = elementsRef.current.indexOf(el)\n\n setActiveIndex(currentIndex)\n\n return\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n event.stopPropagation()\n\n const focusableElements = _getFocusableElements(elementsRef.current)\n const focusableLen = focusableElements.length\n\n if (focusableLen === 0) return\n\n const focusedElement = elementsRef.current[activeIndexRef.current]\n\n let focusedIndex = focusableElements.indexOf(focusedElement)\n\n focusedIndex = (focusedIndex - 1 + focusableLen) % focusableLen\n\n const el = focusableElements[focusedIndex]\n const currentIndex = elementsRef.current.indexOf(el)\n\n setActiveIndex(currentIndex)\n\n return\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n event.stopPropagation()\n\n const focusableElements = _getFocusableElements(elementsRef.current)\n const focusableLen = focusableElements.length\n\n if (focusableLen === 0) return\n\n const focusedElement = elementsRef.current[activeIndexRef.current]\n\n let focusedIndex = focusableElements.indexOf(focusedElement)\n\n focusedIndex = (focusedIndex + 1) % focusableLen\n\n const el = focusableElements[focusedIndex]\n const currentIndex = elementsRef.current.indexOf(el)\n\n setActiveIndex(currentIndex)\n\n return\n }\n\n if (onKeyDown) {\n onKeyDown(event)\n }\n },\n [onKeyDown, originElement, setActiveIndex],\n )\n\n const handleItemMouseEnter = useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n const element = event.currentTarget\n const currentIndex = elementsRef.current.indexOf(element)\n\n setActiveIndex(currentIndex)\n },\n [setActiveIndex],\n )\n\n const handleItemMouseLeave = useCallback(() => {\n // Set the active index to -2 to deactivate all menu items\n // when the user moves the mouse away from the menu item.\n // We avoid using -1 because it would focus the first menu item,\n // which would be incorrect when the user hovers over a gap\n // between two menu items or a menu divider.\n setActiveIndex(-2)\n rootElementRef.current?.focus()\n }, [rootElementRef, setActiveIndex])\n\n // Set focus on the currently active element\n useEffect(() => {\n if (!rootElementRef.current) return\n\n const rafId = requestAnimationFrame(() => {\n if (activeIndex === -1) {\n if (shouldFocus === 'first') {\n const focusableElements = _getFocusableElements(elementsRef.current)\n const el = focusableElements[0]\n\n if (el) {\n const currentIndex = elementsRef.current.indexOf(el)\n\n setActiveIndex(currentIndex)\n }\n }\n\n if (shouldFocus === 'last') {\n const focusableElements = _getFocusableElements(elementsRef.current)\n const el = focusableElements[focusableElements.length - 1]\n\n if (el) {\n const currentIndex = elementsRef.current.indexOf(el)\n\n setActiveIndex(currentIndex)\n }\n }\n\n return\n }\n\n const element = elementsRef.current[activeIndex] || null\n\n element?.focus()\n })\n\n // oxlint-disable-next-line consistent-return\n return () => cancelAnimationFrame(rafId)\n }, [activeIndex, rootElementRef, setActiveIndex, shouldFocus])\n\n return {\n activeElement,\n activeIndex,\n handleItemMouseEnter,\n handleItemMouseLeave,\n handleKeyDown,\n mount,\n }\n}\n","import {useCallback, useEffect, useImperativeHandle, useMemo, useRef} from 'react'\nimport {styled} from 'styled-components'\n\nimport {useClickOutsideEvent} from '../../hooks/useClickOutsideEvent'\nimport {useGlobalKeyDown} from '../../hooks/useGlobalKeyDown'\nimport {Box} from '../../primitives/box/box'\nimport {Stack} from '../../primitives/stack/stack'\nimport {ResponsivePaddingProps} from '../../primitives/types'\nimport {useLayer} from '../../utils/layer/useLayer'\nimport {MenuContext, MenuContextValue} from './menuContext'\nimport {useMenuController} from './useMenuController'\n\n/**\n * @public\n */\nexport interface MenuProps extends ResponsivePaddingProps {\n /**\n * @deprecated Use `shouldFocus=\"first\"` instead.\n */\n 'focusFirst'?: never\n /**\n * @deprecated Use `shouldFocus=\"last\"` instead.\n */\n 'focusLast'?: never\n 'onClickOutside'?: (event: MouseEvent) => void\n 'onEscape'?: () => void\n 'onItemClick'?: () => void\n 'onItemSelect'?: (index: number) => void\n 'originElement'?: HTMLElement | null\n 'registerElement'?: (el: HTMLElement) => () => void\n 'shouldFocus'?: 'first' | 'last' | null\n 'gap'?: number | number[]\n /**\n * @deprecated Use `gap` instead.\n */\n 'space'?: never\n 'aria-labelledby'?: string\n 'onBlurCapture'?: (event: FocusEvent) => void\n}\n\nconst StyledMenu = styled(Box)`\n outline: none;\n overflow: auto;\n`\n\n/**\n * The `Menu` component is a building block for application menus.\n *\n * @public\n */\nexport function Menu(\n props: MenuProps & Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'height' | 'role' | 'tabIndex'>,\n) {\n const {\n children,\n onClickOutside,\n onEscape,\n onItemClick,\n onItemSelect,\n onKeyDown,\n originElement,\n padding = 1,\n ref: forwardedRef,\n registerElement,\n shouldFocus = null,\n gap = 1,\n ...restProps\n } = props\n\n const ref = useRef<HTMLDivElement | null>(null)\n\n useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(forwardedRef, () => ref.current)\n\n const {isTopLayer} = useLayer()\n\n const {\n activeElement,\n activeIndex,\n handleItemMouseEnter,\n handleItemMouseLeave,\n handleKeyDown,\n mount,\n } = useMenuController({onKeyDown, originElement, shouldFocus, rootElementRef: ref})\n\n const unregisterElementRef = useRef<(() => void) | null>(null)\n const handleRefChange = useCallback(\n (el: HTMLDivElement | null) => {\n // Run cleanup of previously registered elements\n if (unregisterElementRef.current) {\n // The `registerElement` callback were originally used in a `useEffect`, so it returns a cleanup function that is a bit gnarly to handle in a ref callback.\n // Since we can't change the `registerElement` implementation itself without making breaking change,\n // that is explained in the code comments for createGlobalScopedContext.tsx,\n // we need to handle with a ref that holds on to the cleanup function last returned when the ref callback is called.\n unregisterElementRef.current()\n unregisterElementRef.current = null\n }\n\n ref.current = el\n\n // Register root element (for nested menus)\n if (ref.current && registerElement) {\n unregisterElementRef.current = registerElement(ref.current)\n }\n },\n [registerElement],\n )\n\n // Trigger `onItemSelect` when active index changes\n useEffect(() => {\n if (onItemSelect) onItemSelect(activeIndex)\n }, [activeIndex, onItemSelect])\n\n // Close menu when clicking outside\n useClickOutsideEvent(isTopLayer && onClickOutside, () => [ref.current])\n\n // Close menu when pressing Escape\n useGlobalKeyDown(\n useCallback(\n (event) => {\n if (!isTopLayer) return\n\n if (event.key === 'Escape') {\n event.stopPropagation()\n if (onEscape) onEscape()\n }\n },\n [isTopLayer, onEscape],\n ),\n )\n\n const value = useMemo(\n () =>\n ({\n version: 2,\n activeElement,\n mount,\n onClickOutside,\n onEscape,\n onItemClick,\n onItemMouseEnter: handleItemMouseEnter,\n onItemMouseLeave: handleItemMouseLeave,\n registerElement,\n }) satisfies MenuContextValue,\n [\n activeElement,\n mount,\n handleItemMouseEnter,\n handleItemMouseLeave,\n onClickOutside,\n onEscape,\n onItemClick,\n registerElement,\n ],\n )\n\n return (\n <MenuContext.Provider value={value}>\n <StyledMenu\n data-ui=\"Menu\"\n {...restProps}\n onKeyDown={handleKeyDown}\n padding={padding}\n ref={handleRefChange}\n role=\"menu\"\n tabIndex={-1}\n >\n <Stack gap={gap}>{children}</Stack>\n </StyledMenu>\n </MenuContext.Provider>\n )\n}\n","import {\n cloneElement,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react'\n\nimport {Popover, PopoverProps} from '../../primitives/popover/popover'\nimport {MenuProps} from './menu'\n\n/**\n * @public\n */\nexport interface MenuButtonProps {\n /**\n * @beta Do not use in production.\n */\n __unstable_disableRestoreFocusOnClose?: boolean\n /**\n * @deprecated Use `popover={{floatingBoundary: element}}` and/or `popover={{referenceBoundary: element}}` instead.\n */\n boundaryElement?: never\n button: React.JSX.Element\n id: string\n menu?: React.JSX.Element\n onClose?: () => void\n onOpen?: () => void\n /**\n * @deprecated Use `popover={{placement: 'top'}}` instead.\n */\n placement?: never\n popover?: Omit<PopoverProps, 'content' | 'open'>\n /**\n * @deprecated Use `popover={{scheme: 'dark'}}` instead.\n */\n popoverScheme?: never\n /**\n * @deprecated Use `popover={{radius: 2}}` instead.\n */\n popoverRadius?: never\n /**\n * @beta Do not use in production.\n * @deprecated Use `popover={{portal: true}}` instead.\n */\n portal?: never\n /**\n * @deprecated Use `popover={{preventOverflow: true}}` instead.\n */\n preventOverflow?: never\n ref?: React.Ref<HTMLButtonElement | null>\n}\n\n/**\n * The `MenuButton` component follows the WAI-ARIA specification for menu buttons.\n *\n * @public\n */\nexport function MenuButton(props: MenuButtonProps) {\n const {\n __unstable_disableRestoreFocusOnClose: disableRestoreFocusOnClose = false,\n button: buttonProp,\n id,\n menu: menuProp,\n onClose,\n onOpen,\n popover,\n ref: forwardedRef,\n } = props\n const [open, setOpen] = useState(false)\n const [shouldFocus, setShouldFocus] = useState<'first' | 'last' | null>(null)\n const [buttonElement, setButtonElement] = useState<HTMLButtonElement | null>(null)\n const [menuElements, setChildMenuElements] = useState<HTMLElement[]>([])\n const openRef = useRef<boolean>(open)\n\n // Notify consumers when the menu opens\n useEffect(() => {\n if (onOpen && open && !openRef.current) {\n onOpen()\n }\n }, [onOpen, open])\n\n // Notify consumers when the menu closes\n useEffect(() => {\n if (onClose && !open && openRef.current) {\n onClose()\n }\n }, [onClose, open])\n\n useEffect(() => {\n openRef.current = open\n }, [open])\n\n const handleButtonClick = useCallback(() => {\n setOpen((v) => !v)\n setShouldFocus(null)\n }, [])\n\n // Prevent mouse event propagation when the menu is open.\n // This is to ensure that `handleBlur` isn't triggered when clicking the menu button whilst open,\n // which can lead to `setOpen` being triggered multiple times (once by `handleBlur`, and again by `handleButtonClick`).\n const handleMouseDown = useCallback(\n (event: PointerEvent) => {\n if (open) event.preventDefault()\n },\n [open],\n )\n\n const handleButtonKeyDown = useCallback((event: React.KeyboardEvent<HTMLButtonElement>) => {\n // On `ArrowDown`, `Enter` and `Space`\n // - Opens menu and moves focus to first menuitem\n if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n setOpen(true)\n setShouldFocus('first')\n\n return\n }\n\n // On `ArrowUp`\n // - \tOpens menu and moves focus to last menuitem\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n setOpen(true)\n setShouldFocus('last')\n\n return\n }\n }, [])\n\n const handleMenuClickOutside = useCallback(\n (event: MouseEvent) => {\n const target = event.target\n\n if (!(target instanceof Node)) {\n return\n }\n\n if (buttonElement && (target === buttonElement || buttonElement.contains(target))) {\n return\n }\n\n for (const el of menuElements) {\n if (target === el || el.contains(target)) {\n return\n }\n }\n\n setOpen(false)\n },\n [buttonElement, menuElements],\n )\n\n const handleMenuEscape = useCallback(() => {\n setOpen(false)\n if (disableRestoreFocusOnClose) return\n if (buttonElement) buttonElement.focus()\n }, [buttonElement, disableRestoreFocusOnClose])\n\n const handleBlur = useCallback(\n (event: FocusEvent) => {\n const target = event.relatedTarget\n\n if (!(target instanceof Node)) {\n return\n }\n\n for (const el of menuElements) {\n if (el === target || el.contains(target)) {\n return\n }\n }\n\n setOpen(false)\n },\n [menuElements],\n )\n\n const handleItemClick = useCallback(() => {\n setOpen(false)\n if (disableRestoreFocusOnClose) return\n if (buttonElement) buttonElement.focus()\n }, [buttonElement, disableRestoreFocusOnClose])\n\n const registerElement = useCallback((el: HTMLElement) => {\n setChildMenuElements((els) => els.concat([el]))\n\n return () => setChildMenuElements((els) => els.filter((_el) => _el !== el))\n }, [])\n\n const menuProps: MenuProps = {\n 'aria-labelledby': id,\n 'onBlurCapture': handleBlur,\n 'onClickOutside': handleMenuClickOutside,\n 'onEscape': handleMenuEscape,\n 'onItemClick': handleItemClick,\n 'originElement': buttonElement,\n registerElement,\n shouldFocus,\n }\n\n const menu = menuProp && cloneElement(menuProp, menuProps)\n\n const button = useMemo(\n () =>\n buttonProp &&\n cloneElement(buttonProp, {\n 'data-ui': 'MenuButton',\n id,\n 'onClick': handleButtonClick,\n 'onKeyDown': handleButtonKeyDown,\n 'onMouseDown': handleMouseDown,\n 'aria-haspopup': true,\n 'aria-expanded': open,\n 'ref': setButtonElement,\n 'selected': buttonProp.props.selected ?? open,\n }),\n [buttonProp, handleButtonClick, handleButtonKeyDown, handleMouseDown, id, open],\n )\n\n // Forward button ref to parent\n useImperativeHandle<HTMLButtonElement | null, HTMLButtonElement | null>(\n forwardedRef,\n () => buttonElement,\n [buttonElement],\n )\n\n const popoverProps: MenuButtonProps['popover'] = useMemo(\n () => ({\n overflow: 'auto',\n portal: true,\n // oxlint-disable-next-line no-useless-fallback-in-spread\n ...(popover || {}),\n }),\n [popover],\n )\n\n return (\n <Popover data-ui=\"MenuButton__popover\" {...popoverProps} content={menu} open={open}>\n {button || <></>}\n </Popover>\n )\n}\n","import {styled} from 'styled-components'\n\nimport {ElementType, EmptyProps, Props} from '../../types/component'\n\n/**\n * @public\n */\nexport type MenuDividerProps<E extends ElementType = 'hr'> = Props<EmptyProps, E>\n\n/**\n * @public\n */\n// oxlint-disable-next-line no-unsafe-type-assertion\nexport const MenuDivider = styled.hr`\n height: 1px;\n border: 0;\n background: var(--card-hairline-soft-color);\n margin: 0;\n` as unknown as <E extends ElementType = 'hr'>(props: MenuDividerProps<E>) => React.JSX.Element\n","import {css} from 'styled-components'\n\nimport {getTheme_v2} from '../../../theme/versioning/getTheme_v2'\nimport {_cardColorStyle} from '../../styles/card/_cardColorStyle'\nimport {ThemeProps} from '../../styles/types'\nimport {SelectableTone} from '../../types/selectable'\n\n/**\n * @internal\n */\nexport interface SelectableStyleProps {\n $tone: SelectableTone\n}\n\nexport function selectableBaseStyle(): ReturnType<typeof css> {\n return css`\n background-color: inherit;\n color: inherit;\n\n &[data-as='button'] {\n -webkit-font-smoothing: inherit;\n appearance: none;\n outline: none;\n font: inherit;\n text-align: inherit;\n border: 0;\n width: -moz-available;\n width: -webkit-fill-available;\n width: stretch;\n }\n\n /* &:is(a) */\n &[data-as='a'] {\n text-decoration: none;\n }\n `\n}\n\nexport function selectableColorStyle(\n props: SelectableStyleProps & ThemeProps,\n): ReturnType<typeof css> {\n const {$tone} = props\n const {color, style} = getTheme_v2(props.theme)\n const tone = color.selectable[$tone]\n\n return css`\n ${_cardColorStyle(color, tone.enabled)}\n\n background-color: var(--card-bg-color);\n color: var(--card-fg-color);\n outline: none;\n\n /* &:is(button) */\n &[data-as='button'] {\n &:disabled {\n ${_cardColorStyle(color, tone.disabled)}\n }\n\n &:not(:disabled) {\n &[aria-pressed='true'] {\n ${_cardColorStyle(color, tone.pressed)}\n }\n\n &[data-selected],\n &[aria-selected='true'] > & {\n ${_cardColorStyle(color, tone.selected)}\n }\n\n @media (hover: hover) {\n &:not([data-selected]) {\n &[data-hovered],\n &:hover {\n ${_cardColorStyle(color, tone.hovered)}\n }\n\n &:active {\n ${_cardColorStyle(color, tone.pressed)}\n }\n }\n }\n }\n }\n\n /* &:is(a) */\n &[data-as='a'] {\n &[data-disabled] {\n ${_cardColorStyle(color, tone.disabled)}\n }\n\n &:not([data-disabled]) {\n &[data-pressed] {\n ${_cardColorStyle(color, tone.pressed)}\n }\n\n &[data-selected] {\n ${_cardColorStyle(color, tone.selected)}\n }\n\n @media (hover: hover) {\n &:not([data-selected]) {\n &[data-hovered],\n &:hover {\n ${_cardColorStyle(color, tone.hovered)}\n }\n &:active {\n ${_cardColorStyle(color, tone.pressed)}\n }\n }\n }\n }\n }\n\n ${style?.card?.root}\n `\n}\n","import {styled} from 'styled-components'\n\nimport {responsiveRadiusStyle} from '../../styles/radius/radiusStyle'\nimport {ResponsiveRadiusStyleProps} from '../../styles/radius/types'\nimport {Box} from '../box/box'\nimport {selectableBaseStyle, selectableColorStyle, SelectableStyleProps} from './style'\n\n/**\n * @internal\n */\nexport const Selectable = styled(Box)<SelectableStyleProps & ResponsiveRadiusStyleProps>(\n responsiveRadiusStyle,\n selectableBaseStyle,\n selectableColorStyle,\n)\n","import {useContext} from 'react'\n\nimport {isRecord} from '../../lib/isRecord'\nimport {MenuContext, MenuContextValue} from './menuContext'\n\nexport function useMenu(): MenuContextValue {\n const value = useContext(MenuContext)\n\n if (!value) {\n throw new Error('useMenu(): missing context value')\n }\n\n // NOTE: This check is for future-compatiblity\n // - If the value is not an object, it’s not compatible with the current version\n // - If the value is an object, but doesn’t have `version: 2`, it’s not compatible with the current version\n if (!isRecord(value) || value.version !== 2) {\n throw new Error('useMenu(): the context value is not compatible')\n }\n\n return value\n}\n","import {ChevronRightIcon} from '@sanity/icons/ChevronRight'\nimport {isValidElement, useCallback, useEffect, useState} from 'react'\nimport {isValidElementType} from 'react-is'\n\nimport {Selectable} from '../../primitives/_selectable/selectable'\nimport {Box} from '../../primitives/box/box'\nimport {Flex} from '../../primitives/flex/flex'\nimport {Popover, PopoverProps} from '../../primitives/popover/popover'\nimport {Text} from '../../primitives/text/text'\nimport {_getArrayProp} from '../../styles/helpers'\nimport {useRootTheme} from '../../theme/useRootTheme'\nimport {ElementType, Props} from '../../types/component'\nimport {Radius} from '../../types/radius'\nimport {SelectableTone} from '../../types/selectable'\nimport {Menu, MenuProps} from './menu'\nimport {useMenu} from './useMenu'\n\n/**\n * @public\n */\nexport interface MenuGroupOwnProps {\n fontSize?: number | number[]\n // oxlint-disable-next-line no-redundant-type-constituents\n icon?: React.ElementType | React.ReactNode\n menu?: Omit<\n MenuProps,\n | 'onClickOutside'\n | 'onEscape'\n | 'onItemClick'\n | 'onKeyDown'\n | 'onMouseEnter'\n | 'registerElement'\n | 'shouldFocus'\n | 'onBlurCapture'\n >\n padding?: number | number[]\n popover?: Omit<PopoverProps, 'content' | 'open'>\n radius?: Radius | Radius[]\n gap?: number | number[]\n /**\n * @deprecated Use `gap` instead.\n */\n space?: never\n text: React.ReactNode\n tone?: SelectableTone\n}\n\n/**\n * @public\n */\nexport type MenuGroupProps<E extends ElementType = 'button'> = Props<MenuGroupOwnProps, E>\n\nconst MenuGroupComponent = function MenuGroup(\n props: Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'height' | 'popover' | 'ref' | 'tabIndex'> &\n MenuGroupOwnProps & {as?: ElementType},\n): React.JSX.Element {\n const {\n as = 'button',\n children,\n fontSize = 1,\n icon: IconComponent,\n menu: menuProps,\n onClick,\n padding = 3,\n popover,\n radius = 2,\n gap = 3,\n text,\n tone = 'default',\n ...restProps\n } = props\n const menu = useMenu()\n const {scheme} = useRootTheme()\n const {\n activeElement,\n mount,\n onClickOutside,\n onEscape,\n onItemClick,\n onItemMouseEnter: _onItemMouseEnter,\n registerElement,\n } = menu\n const onItemMouseEnter = _onItemMouseEnter ?? menu.onItemMouseEnter\n const [rootElement, setRootElement] = useState<HTMLButtonElement | HTMLDivElement | null>(null)\n const [open, setOpen] = useState(false)\n const [shouldFocus, setShouldFocus] = useState<'first' | 'last' | null>(null)\n const active = Boolean(activeElement) && activeElement === rootElement\n const [withinMenu, setWithinMenu] = useState(false)\n\n const handleMouseEnter = useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n setWithinMenu(false)\n onItemMouseEnter(event)\n setOpen(true)\n },\n [onItemMouseEnter],\n )\n\n const handleMenuKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'ArrowLeft') {\n event.stopPropagation()\n\n setOpen(false)\n\n requestAnimationFrame(() => {\n rootElement?.focus()\n })\n }\n },\n [rootElement],\n )\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n onClick?.(event)\n\n setShouldFocus('first')\n setOpen(true)\n },\n [onClick],\n )\n\n const handleChildItemClick = useCallback(() => {\n setOpen(false)\n onItemClick?.()\n }, [onItemClick])\n\n const handleMenuMouseEnter = useCallback(() => setWithinMenu(true), [])\n\n // Register the menu item element\n useEffect(() => mount(rootElement), [mount, rootElement])\n\n // Close child menu when a sibling item becomes active\n useEffect(() => {\n // oxlint-disable-next-line react/set-state-in-effect\n if (!active) setOpen(false)\n }, [active])\n\n // Update state when child menu is no longer open\n useEffect(() => {\n // oxlint-disable-next-line react/set-state-in-effect\n if (!open) setWithinMenu(false)\n }, [open])\n\n // Reset the shouldFocus state after it has been used\n useEffect(() => {\n if (!shouldFocus) return\n // The useMenuController effect that handles `shouldFocus` schedules a request animation frame where it's processed.\n // By doing the same here, we ensure that the reset is processed after the focus change.\n const rafId = requestAnimationFrame(() => setShouldFocus(null))\n\n // oxlint-disable-next-line consistent-return\n return () => cancelAnimationFrame(rafId)\n }, [shouldFocus])\n\n const childMenu = (\n <Menu\n {...menuProps}\n onClickOutside={onClickOutside}\n onEscape={onEscape}\n onItemClick={handleChildItemClick}\n onKeyDown={handleMenuKeyDown}\n onMouseEnter={handleMenuMouseEnter}\n registerElement={registerElement}\n shouldFocus={shouldFocus}\n >\n {children}\n </Menu>\n )\n\n const handleKeyDown = useCallback((event: React.KeyboardEvent<HTMLDivElement>) => {\n const target = event.currentTarget\n\n if (document.activeElement !== target) {\n return\n }\n\n if (event.key === 'ArrowRight') {\n setShouldFocus('first')\n setOpen(true)\n setWithinMenu(true)\n\n return\n }\n }, [])\n\n return (\n <Popover {...popover} content={childMenu} data-ui=\"MenuGroup__popover\" open={open}>\n <Selectable\n data-as={as}\n data-ui=\"MenuGroup\"\n forwardedAs={as}\n {...restProps}\n aria-pressed={as === 'button' ? withinMenu : undefined}\n data-pressed={as !== 'button' ? withinMenu : undefined}\n data-selected={!withinMenu && active ? '' : undefined}\n $radius={_getArrayProp(radius)}\n $tone={tone}\n $scheme={scheme}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onMouseEnter={handleMouseEnter}\n ref={setRootElement}\n tabIndex={-1}\n type={as === 'button' ? 'button' : undefined}\n >\n <Flex gap={gap} padding={padding}>\n {IconComponent && (\n <Text size={fontSize}>\n {isValidElement(IconComponent) && IconComponent}\n {isValidElementType(IconComponent) && <IconComponent />}\n </Text>\n )}\n\n <Box flex={1}>\n <Text size={fontSize} textOverflow=\"ellipsis\" weight=\"medium\">\n {text}\n </Text>\n </Box>\n\n <Text size={fontSize}>\n <ChevronRightIcon />\n </Text>\n </Flex>\n </Selectable>\n </Popover>\n )\n}\n\n/**\n * @public\n */\n// oxlint-disable-next-line no-unsafe-type-assertion\nexport const MenuGroup = MenuGroupComponent as unknown as <E extends ElementType = 'button'>(\n props: MenuGroupProps<E>,\n) => React.JSX.Element\n","import {\n isValidElement,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport {isValidElementType} from 'react-is'\n\nimport {Selectable} from '../../primitives/_selectable/selectable'\nimport {Box} from '../../primitives/box/box'\nimport {Flex} from '../../primitives/flex/flex'\nimport {Text} from '../../primitives/text/text'\nimport {ResponsivePaddingProps, ResponsiveRadiusProps} from '../../primitives/types'\nimport {_getArrayProp} from '../../styles/helpers'\nimport {useRootTheme} from '../../theme/useRootTheme'\nimport {ElementType, Props} from '../../types/component'\nimport {SelectableTone} from '../../types/selectable'\nimport {Hotkeys} from '../hotkeys/hotkeys'\nimport {useMenu} from './useMenu'\n\n/**\n * @public\n */\nexport interface MenuItemOwnProps extends ResponsivePaddingProps, ResponsiveRadiusProps {\n fontSize?: number | number[]\n hotkeys?: string[]\n // oxlint-disable-next-line no-redundant-type-constituents\n icon?: React.ElementType | React.ReactNode\n // oxlint-disable-next-line no-redundant-type-constituents\n iconRight?: React.ElementType | React.ReactNode\n pressed?: boolean\n selected?: boolean\n gap?: number | number[]\n /**\n * @deprecated Use `gap` instead.\n */\n space?: never\n text?: React.ReactNode\n tone?: SelectableTone\n}\n\n/**\n * @public\n */\nexport type MenuItemProps<E extends ElementType = 'button'> = Props<MenuItemOwnProps, E>\n\nconst MenuItemComponent = function MenuItem(\n props: MenuItemOwnProps & {as?: ElementType} & Omit<\n React.HTMLProps<HTMLDivElement>,\n 'as' | 'height' | 'selected' | 'tabIndex'\n >,\n) {\n const {\n as = 'button',\n children,\n disabled,\n fontSize = 1,\n hotkeys,\n icon: IconComponent,\n iconRight: IconRightComponent,\n onClick,\n padding = 3,\n paddingX,\n paddingY,\n paddingTop,\n paddingRight,\n paddingBottom,\n paddingLeft,\n pressed,\n radius = 2,\n ref: forwardedRef,\n selected: selectedProp,\n gap = 3,\n text,\n tone = 'default',\n ...restProps\n } = props\n const {scheme} = useRootTheme()\n const menu = useMenu()\n const {\n activeElement,\n mount,\n onItemClick,\n onItemMouseEnter: _onItemMouseEnter,\n onItemMouseLeave: _onItemMouseLeave,\n } = menu\n const onItemMouseEnter = _onItemMouseEnter ?? menu.onItemMouseEnter\n const onItemMouseLeave = _onItemMouseLeave ?? menu.onItemMouseLeave\n const [rootElement, setRootElement] = useState<HTMLDivElement | null>(null)\n const active = Boolean(activeElement) && activeElement === rootElement\n const ref = useRef<HTMLDivElement | null>(null)\n\n useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(forwardedRef, () => ref.current)\n\n useEffect(() => mount(rootElement, selectedProp), [mount, rootElement, selectedProp])\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n if (disabled) return\n if (onClick) onClick(event)\n if (onItemClick) onItemClick()\n },\n [disabled, onClick, onItemClick],\n )\n\n const paddingProps = useMemo(\n () => ({\n padding,\n paddingX,\n paddingY,\n paddingTop,\n paddingRight,\n paddingBottom,\n paddingLeft,\n }),\n [padding, paddingX, paddingY, paddingTop, paddingRight, paddingBottom, paddingLeft],\n )\n\n const hotkeysFontSize = _getArrayProp(fontSize).map((s) => s - 1)\n\n const setRef = useCallback((el: HTMLDivElement | null) => {\n ref.current = el\n setRootElement(el)\n }, [])\n\n return (\n <Selectable\n data-ui=\"MenuItem\"\n role=\"menuitem\"\n {...restProps}\n data-pressed={as !== 'button' && pressed ? '' : undefined}\n data-selected={active ? '' : undefined}\n data-disabled={disabled ? '' : undefined}\n forwardedAs={as}\n $radius={_getArrayProp(radius)}\n $padding={_getArrayProp(0)}\n $tone={disabled ? 'default' : tone}\n $scheme={scheme}\n disabled={disabled}\n onClick={handleClick}\n onMouseEnter={onItemMouseEnter}\n onMouseLeave={onItemMouseLeave}\n ref={setRef}\n tabIndex={-1}\n type={as === 'button' ? 'button' : undefined}\n >\n {(IconComponent || text || IconRightComponent) && (\n <Flex as=\"span\" gap={gap} align=\"center\" {...paddingProps}>\n {IconComponent && (\n <Text size={fontSize}>\n {isValidElement(IconComponent) && IconComponent}\n {isValidElementType(IconComponent) && <IconComponent />}\n </Text>\n )}\n\n {text && (\n <Box flex={1}>\n <Text size={fontSize} textOverflow=\"ellipsis\" weight=\"medium\">\n {text}\n </Text>\n </Box>\n )}\n\n {hotkeys && (\n <Hotkeys\n fontSize={hotkeysFontSize}\n keys={hotkeys}\n style={{marginTop: -4, marginBottom: -4}}\n />\n )}\n\n {IconRightComponent && (\n <Text size={fontSize}>\n {isValidElement(IconRightComponent) && IconRightComponent}\n {isValidElementType(IconRightComponent) && <IconRightComponent />}\n </Text>\n )}\n </Flex>\n )}\n {children && (\n <Box as=\"span\" {...paddingProps}>\n {children}\n </Box>\n )}\n </Selectable>\n )\n}\n\n/**\n * @public\n */\n// oxlint-disable-next-line no-unsafe-type-assertion\nexport const MenuItem = MenuItemComponent as unknown as <E extends ElementType = 'button'>(\n props: MenuItemProps<E>,\n) => React.JSX.Element\n"],"mappings":"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"}
|