@sanity/ui 4.0.6 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/{arrow-BBpqkhzC.js → arrow-C6TlkggA.js} +6 -5
  2. package/dist/arrow-C6TlkggA.js.map +1 -0
  3. package/dist/autocomplete.d.ts.map +1 -1
  4. package/dist/autocomplete.js +38 -42
  5. package/dist/autocomplete.js.map +1 -1
  6. package/dist/breadcrumbs.d.ts.map +1 -1
  7. package/dist/breadcrumbs.js +32 -34
  8. package/dist/breadcrumbs.js.map +1 -1
  9. package/dist/{button-DPIMguMh.js → button-D3iEd7Je.js} +11 -11
  10. package/dist/button-D3iEd7Je.js.map +1 -0
  11. package/dist/button-dnqMFkWg.d.ts.map +1 -1
  12. package/dist/code.js +2 -2
  13. package/dist/code.js.map +1 -1
  14. package/dist/{codeFontStyle-DHrcV3wD.js → codeFontStyle-84SMhFtI.js} +2 -2
  15. package/dist/{codeFontStyle-DHrcV3wD.js.map → codeFontStyle-84SMhFtI.js.map} +1 -1
  16. package/dist/{flex-CDMKJ54v.js → flex-CySCBzQm.js} +3 -3
  17. package/dist/{flex-CDMKJ54v.js.map → flex-CySCBzQm.js.map} +1 -1
  18. package/dist/{grid-CFhbAO8d.js → grid-I2TNptX-.js} +3 -3
  19. package/dist/{grid-CFhbAO8d.js.map → grid-I2TNptX-.js.map} +1 -1
  20. package/dist/{helpers-CmuDTEVl.js → helpers-C8xxXAQC.js} +6 -3
  21. package/dist/helpers-C8xxXAQC.js.map +1 -0
  22. package/dist/{hotkeys-B8-FMlBd.js → hotkeys-Bi6Q5963.js} +29 -29
  23. package/dist/hotkeys-Bi6Q5963.js.map +1 -0
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +318 -352
  26. package/dist/index.js.map +1 -1
  27. package/dist/layer-BK7xWHcE.js +61 -0
  28. package/dist/layer-BK7xWHcE.js.map +1 -0
  29. package/dist/layer-ChlP9Ik6.d.ts.map +1 -1
  30. package/dist/menu.d.ts.map +1 -1
  31. package/dist/menu.js +51 -39
  32. package/dist/menu.js.map +1 -1
  33. package/dist/{popover-dCgSQgsm.js → popover-CdBTZDvj.js} +22 -32
  34. package/dist/popover-CdBTZDvj.js.map +1 -0
  35. package/dist/popover.js +1 -1
  36. package/dist/{responsiveFont-CYyTL7C5.js → responsiveFont-CilwaORG.js} +2 -2
  37. package/dist/{responsiveFont-CYyTL7C5.js.map → responsiveFont-CilwaORG.js.map} +1 -1
  38. package/dist/{stack-BKKeh5M0.js → stack-BGFEokua.js} +4 -4
  39. package/dist/{stack-BKKeh5M0.js.map → stack-BGFEokua.js.map} +1 -1
  40. package/dist/styles.css +408 -0
  41. package/dist/{textInput-Cp2Jvgw1.js → textInput-Bu3QuADZ.js} +39 -51
  42. package/dist/textInput-Bu3QuADZ.js.map +1 -0
  43. package/dist/toast.d.ts.map +1 -1
  44. package/dist/toast.js +80 -76
  45. package/dist/toast.js.map +1 -1
  46. package/dist/tooltip.d.ts.map +1 -1
  47. package/dist/tooltip.js +88 -101
  48. package/dist/tooltip.js.map +1 -1
  49. package/dist/{useClickOutsideEvent-CQ40LrHo.js → useClickOutsideEvent-wGLGWBZN.js} +2 -2
  50. package/dist/{useClickOutsideEvent-CQ40LrHo.js.map → useClickOutsideEvent-wGLGWBZN.js.map} +1 -1
  51. package/dist/{useLayer-DzgZ2cTe.js → useLayer-jUJIz8mh.js} +2 -2
  52. package/dist/{useLayer-DzgZ2cTe.js.map → useLayer-jUJIz8mh.js.map} +1 -1
  53. package/package.json +12 -11
  54. package/dist/arrow-BBpqkhzC.js.map +0 -1
  55. package/dist/button-DPIMguMh.js.map +0 -1
  56. package/dist/helpers-CmuDTEVl.js.map +0 -1
  57. package/dist/hotkeys-B8-FMlBd.js.map +0 -1
  58. package/dist/layer-BQuAIq9M.js +0 -61
  59. package/dist/layer-BQuAIq9M.js.map +0 -1
  60. package/dist/popover-dCgSQgsm.js.map +0 -1
  61. package/dist/textInput-Cp2Jvgw1.js.map +0 -1
package/dist/menu.js.map CHANGED
@@ -1 +1 @@
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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"}
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 }","clsx(menu, className)","<Stack gap={gap}>{children}</Stack>","<Box\n className={clsx(menu, className)}\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 </Box>","<MenuContext.Provider value={value}>\n <Box\n className={clsx(menu, className)}\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 </Box>\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 = 'hr'","clsx(menuDivider, className)","<Component\n data-ui=\"MenuDivider\"\n className={clsx(menuDivider, className)}\n ref={ref}\n {...restProps}\n />","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.css.ts","../src/core/components/menu/menu.tsx","../src/core/components/menu/menuButton.tsx","../src/core/components/menu/menuDivider.css.ts","../src/core/components/menu/menuDivider.tsx","../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 {style} from '@vanilla-extract/css'\n\nexport const menu = style({\n outline: 'none',\n overflow: 'auto',\n})\n","import {clsx} from 'clsx/lite'\nimport {useCallback, useEffect, useImperativeHandle, useMemo, useRef} from 'react'\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\nimport {menu} from './menu.css'\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\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 className,\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 <Box\n className={clsx(menu, className)}\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 </Box>\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 {style} from '@vanilla-extract/css'\n\nexport const menuDivider = style({\n height: '1px',\n border: 0,\n background: 'var(--card-hairline-soft-color)',\n margin: 0,\n})\n","import {clsx} from 'clsx/lite'\n\nimport {ElementType, EmptyProps, Props} from '../../types/component'\n\nimport {menuDivider} from './menuDivider.css'\n\n/**\n * @public\n */\nexport type MenuDividerProps<E extends ElementType = 'hr'> = Props<EmptyProps, E>\n\nfunction MenuDividerComponent(\n props: {as?: ElementType} & Omit<React.HTMLProps<HTMLHRElement>, 'as'>,\n) {\n const {as = 'hr', className, ref, ...restProps} = props\n // Rendering the polymorphic `as` needs one concrete element type for JSX to\n // type-check the hr-flavored props (the same widening styled-components'\n // `as` prop performed here before).\n // oxlint-disable-next-line no-unsafe-type-assertion\n const Component = as as 'hr'\n\n return (\n <Component\n data-ui=\"MenuDivider\"\n className={clsx(menuDivider, className)}\n ref={ref}\n {...restProps}\n />\n )\n}\n\n/**\n * @public\n */\n// oxlint-disable-next-line no-unsafe-type-assertion\nexport const MenuDivider = MenuDividerComponent as unknown as <E extends ElementType = 'hr'>(\n props: MenuDividerProps<E>,\n) => 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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"}
@@ -1,9 +1,9 @@
1
- import { c as POPOVER_MOTION_PROPS, n as _getArrayProp } from "./helpers-CmuDTEVl.js";
2
- import { _ as useTheme_v2, i as usePrefersReducedMotion, n as LayerProvider, o as useMediaIndex, s as Card, t as useLayer } from "./useLayer-DzgZ2cTe.js";
3
- import { t as Flex } from "./flex-CDMKJ54v.js";
1
+ import { c as POPOVER_MOTION_PROPS, n as _getArrayProp } from "./helpers-C8xxXAQC.js";
2
+ import { _ as useTheme_v2, i as usePrefersReducedMotion, n as LayerProvider, o as useMediaIndex, s as Card, t as useLayer } from "./useLayer-jUJIz8mh.js";
3
+ import { t as Flex } from "./flex-CySCBzQm.js";
4
4
  import { t as useElementSize } from "./useElementSize-BJvbGHq8.js";
5
5
  import { n as AnimateActivity, r as origin, t as getElementRef } from "./getElementRef-5HZQ-Owu.js";
6
- import { a as useBoundaryElement, n as Portal, t as Arrow } from "./arrow-BBpqkhzC.js";
6
+ import { a as useBoundaryElement, n as Portal, t as Arrow } from "./arrow-C6TlkggA.js";
7
7
  import { c } from "react/compiler-runtime";
8
8
  import { Activity, cloneElement, useEffect, useImperativeHandle, useRef, useState } from "react";
9
9
  import { styled } from "styled-components";
@@ -107,13 +107,13 @@ function calcMaxWidth(params) {
107
107
  }
108
108
  const MotionCard = styled(motion.create(Card)).withConfig({
109
109
  displayName: "MotionCard",
110
- componentId: "sc-yp20ah-0"
110
+ componentId: "sc-x815ar-0"
111
111
  })`&:not([hidden]){display:flex;}flex-direction:column;width:max-content;min-width:min-content;will-change:transform;`;
112
112
  /**
113
113
  * @internal
114
114
  */
115
115
  function PopoverCard(props) {
116
- let $ = c(67), animate, arrow, arrowRef, arrowX, arrowY, children, marginsProp, originX, originY, overflow, padding, placement, radius, ref, restProps, scheme, shadow, strategy, style, tone, width, xProp, yProp;
116
+ let $ = c(59), animate, arrow, arrowRef, arrowX, arrowY, children, marginsProp, originX, originY, overflow, padding, placement, radius, ref, restProps, scheme, shadow, strategy, style, tone, width, xProp, yProp;
117
117
  $[0] === props ? (animate = $[1], arrow = $[2], arrowRef = $[3], arrowX = $[4], arrowY = $[5], children = $[6], marginsProp = $[7], originX = $[8], originY = $[9], overflow = $[10], padding = $[11], placement = $[12], radius = $[13], ref = $[14], restProps = $[15], scheme = $[16], shadow = $[17], strategy = $[18], style = $[19], tone = $[20], width = $[21], xProp = $[22], yProp = $[23]) : ({__unstable_margins: marginsProp, animate, arrow, arrowRef, arrowX, arrowY, children, padding, placement, originX, originY, overflow, radius, ref, scheme, shadow, strategy, style, tone, width, x: xProp, y: yProp, ...restProps} = props, $[0] = props, $[1] = animate, $[2] = arrow, $[3] = arrowRef, $[4] = arrowX, $[5] = arrowY, $[6] = children, $[7] = marginsProp, $[8] = originX, $[9] = originY, $[10] = overflow, $[11] = padding, $[12] = placement, $[13] = radius, $[14] = ref, $[15] = restProps, $[16] = scheme, $[17] = shadow, $[18] = strategy, $[19] = style, $[20] = tone, $[21] = width, $[22] = xProp, $[23] = yProp);
118
118
  let { zIndex } = useLayer(), margins = marginsProp || DEFAULT_POPOVER_MARGINS, x = (xProp ?? 0) + margins[3], y = (yProp ?? 0) + margins[0], t0 = animate ? "transform" : void 0, t1;
119
119
  $[24] !== originX || $[25] !== originY || $[26] !== strategy || $[27] !== style || $[28] !== t0 || $[29] !== width || $[30] !== x || $[31] !== y || $[32] !== zIndex ? (t1 = {
@@ -134,37 +134,31 @@ function PopoverCard(props) {
134
134
  right: void 0,
135
135
  bottom: void 0
136
136
  }, $[34] = t2, $[35] = t3, $[36] = t4) : t4 = $[36];
137
- let arrowStyle = t4, t5;
138
- $[37] === animate ? t5 = $[38] : (t5 = animate ? ["hidden", "initial"] : void 0, $[37] = animate, $[38] = t5);
139
- let t6;
140
- $[39] === animate ? t6 = $[40] : (t6 = animate ? ["visible", "scaleIn"] : void 0, $[39] = animate, $[40] = t6);
141
- let t7;
142
- $[41] === animate ? t7 = $[42] : (t7 = animate ? ["hidden", "scaleOut"] : void 0, $[41] = animate, $[42] = t7);
143
- let t8;
144
- $[43] !== children || $[44] !== padding ? (t8 = /* @__PURE__ */ jsx(Flex, {
137
+ let arrowStyle = t4, t5 = animate ? POPOVER_MOTION_PROPS : void 0, t6;
138
+ $[37] !== children || $[38] !== padding ? (t6 = /* @__PURE__ */ jsx(Flex, {
145
139
  direction: "column",
146
140
  flex: 1,
147
141
  padding,
148
142
  children
149
- }), $[43] = children, $[44] = padding, $[45] = t8) : t8 = $[45];
150
- let t9;
151
- $[46] !== overflow || $[47] !== t8 ? (t9 = /* @__PURE__ */ jsx(Flex, {
143
+ }), $[37] = children, $[38] = padding, $[39] = t6) : t6 = $[39];
144
+ let t7;
145
+ $[40] !== overflow || $[41] !== t6 ? (t7 = /* @__PURE__ */ jsx(Flex, {
152
146
  "data-ui": "Popover__wrapper",
153
147
  direction: "column",
154
148
  flex: 1,
155
149
  overflow,
156
- children: t8
157
- }), $[46] = overflow, $[47] = t8, $[48] = t9) : t9 = $[48];
158
- let t10;
159
- $[49] !== arrow || $[50] !== arrowRef || $[51] !== arrowStyle ? (t10 = arrow && /* @__PURE__ */ jsx(Arrow, {
150
+ children: t6
151
+ }), $[40] = overflow, $[41] = t6, $[42] = t7) : t7 = $[42];
152
+ let t8;
153
+ $[43] !== arrow || $[44] !== arrowRef || $[45] !== arrowStyle ? (t8 = arrow && /* @__PURE__ */ jsx(Arrow, {
160
154
  ref: arrowRef,
161
155
  style: arrowStyle,
162
156
  width: 19,
163
157
  height: 8,
164
158
  radius: 2
165
- }), $[49] = arrow, $[50] = arrowRef, $[51] = arrowStyle, $[52] = t10) : t10 = $[52];
166
- let t11;
167
- return $[53] !== placement || $[54] !== radius || $[55] !== ref || $[56] !== restProps || $[57] !== rootStyle || $[58] !== scheme || $[59] !== shadow || $[60] !== t10 || $[61] !== t5 || $[62] !== t6 || $[63] !== t7 || $[64] !== t9 || $[65] !== tone ? (t11 = /* @__PURE__ */ jsxs(MotionCard, {
159
+ }), $[43] = arrow, $[44] = arrowRef, $[45] = arrowStyle, $[46] = t8) : t8 = $[46];
160
+ let t9;
161
+ return $[47] !== placement || $[48] !== radius || $[49] !== ref || $[50] !== restProps || $[51] !== rootStyle || $[52] !== scheme || $[53] !== shadow || $[54] !== t5 || $[55] !== t7 || $[56] !== t8 || $[57] !== tone ? (t9 = /* @__PURE__ */ jsxs(MotionCard, {
168
162
  "data-ui": "Popover",
169
163
  ...restProps,
170
164
  "data-placement": placement,
@@ -175,13 +169,9 @@ function PopoverCard(props) {
175
169
  sizing: "border",
176
170
  style: rootStyle,
177
171
  tone,
178
- variants: POPOVER_MOTION_PROPS.card,
179
- transition: POPOVER_MOTION_PROPS.transition,
180
- initial: t5,
181
- animate: t6,
182
- exit: t7,
183
- children: [t9, t10]
184
- }), $[53] = placement, $[54] = radius, $[55] = ref, $[56] = restProps, $[57] = rootStyle, $[58] = scheme, $[59] = shadow, $[60] = t10, $[61] = t5, $[62] = t6, $[63] = t7, $[64] = t9, $[65] = tone, $[66] = t11) : t11 = $[66], t11;
172
+ ...t5,
173
+ children: [t7, t8]
174
+ }), $[47] = placement, $[48] = radius, $[49] = ref, $[50] = restProps, $[51] = rootStyle, $[52] = scheme, $[53] = shadow, $[54] = t5, $[55] = t7, $[56] = t8, $[57] = tone, $[58] = t9) : t9 = $[58], t9;
185
175
  }
186
176
  const ViewportOverlay = () => {
187
177
  let $ = c(2), { zIndex } = useLayer(), t0;
@@ -411,4 +401,4 @@ function useMiddleware(t0) {
411
401
  }
412
402
  export { Popover as t };
413
403
 
414
- //# sourceMappingURL=popover-dCgSQgsm.js.map
404
+ //# sourceMappingURL=popover-CdBTZDvj.js.map