{
  "version": 3,
  "sources": ["../../src/dropdown-menu/index.tsx"],
  "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { menu } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { contextConnectWithoutRef, useContextSystem } from '../context';\nimport Button from '../button';\nimport Dropdown from '../dropdown';\nimport { NavigableMenu } from '../navigable-container';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction mergeProps(defaultProps = {}, props = {}) {\n  const mergedProps = {\n    ...defaultProps,\n    ...props\n  };\n  if (props.className && defaultProps.className) {\n    mergedProps.className = clsx(props.className, defaultProps.className);\n  }\n  return mergedProps;\n}\nfunction isFunction(maybeFunc) {\n  return typeof maybeFunc === 'function';\n}\nfunction UnconnectedDropdownMenu(dropdownMenuProps) {\n  const {\n    children,\n    className,\n    controls,\n    icon = menu,\n    label,\n    popoverProps,\n    toggleProps,\n    menuProps,\n    disableOpenOnArrowDown = false,\n    text,\n    noIcons,\n    open,\n    defaultOpen,\n    onToggle: onToggleProp,\n    // Context\n    variant\n  } = useContextSystem(dropdownMenuProps, 'DropdownMenu');\n  if (!controls?.length && !isFunction(children)) {\n    return null;\n  }\n\n  // Normalize controls to nested array of objects (sets of controls)\n  let controlSets;\n  if (controls?.length) {\n    // @ts-expect-error The check below is needed because `DropdownMenus`\n    // rendered by `ToolBarGroup` receive controls as a nested array.\n    controlSets = controls;\n    if (!Array.isArray(controlSets[0])) {\n      // This is not ideal, but at this point we know that `controls` is\n      // not a nested array, even if TypeScript doesn't.\n      controlSets = [controls];\n    }\n  }\n  const mergedPopoverProps = mergeProps({\n    className: 'components-dropdown-menu__popover',\n    variant\n  }, popoverProps);\n  return /*#__PURE__*/_jsx(Dropdown, {\n    className: className,\n    popoverProps: mergedPopoverProps,\n    renderToggle: ({\n      isOpen,\n      onToggle\n    }) => {\n      const openOnArrowDown = event => {\n        if (disableOpenOnArrowDown) {\n          return;\n        }\n        if (!isOpen && event.code === 'ArrowDown') {\n          event.preventDefault();\n          onToggle();\n        }\n      };\n      const {\n        as: Toggle = Button,\n        ...restToggleProps\n      } = toggleProps ?? {};\n      const mergedToggleProps = mergeProps({\n        className: clsx('components-dropdown-menu__toggle', {\n          'is-opened': isOpen\n        })\n      }, restToggleProps);\n      return /*#__PURE__*/_jsx(Toggle, {\n        ...mergedToggleProps,\n        icon: icon,\n        onClick: event => {\n          onToggle();\n          if (mergedToggleProps.onClick) {\n            mergedToggleProps.onClick(event);\n          }\n        },\n        onKeyDown: event => {\n          openOnArrowDown(event);\n          if (mergedToggleProps.onKeyDown) {\n            mergedToggleProps.onKeyDown(event);\n          }\n        },\n        \"aria-haspopup\": \"true\",\n        \"aria-expanded\": isOpen,\n        label: label,\n        text: text,\n        showTooltip: toggleProps?.showTooltip ?? true,\n        children: mergedToggleProps.children\n      });\n    },\n    renderContent: props => {\n      const mergedMenuProps = mergeProps({\n        'aria-label': label,\n        className: clsx('components-dropdown-menu__menu', {\n          'no-icons': noIcons\n        })\n      }, menuProps);\n      return /*#__PURE__*/_jsxs(NavigableMenu, {\n        ...mergedMenuProps,\n        role: \"menu\",\n        children: [isFunction(children) ? children(props) : null, controlSets?.flatMap((controlSet, indexOfSet) => controlSet.map((control, indexOfControl) => /*#__PURE__*/_jsx(Button, {\n          size: \"compact\",\n          onClick: event => {\n            event.stopPropagation();\n            props.onClose();\n            if (control.onClick) {\n              control.onClick();\n            }\n          },\n          className: clsx('components-dropdown-menu__menu-item', {\n            'has-separator': indexOfSet > 0 && indexOfControl === 0,\n            'is-active': control.isActive,\n            'is-icon-only': !control.title\n          }),\n          icon: control.icon,\n          label: control.label,\n          \"aria-checked\": control.role === 'menuitemcheckbox' || control.role === 'menuitemradio' ? control.isActive : undefined,\n          role: control.role === 'menuitemcheckbox' || control.role === 'menuitemradio' ? control.role : 'menuitem',\n          accessibleWhenDisabled: true,\n          disabled: control.isDisabled,\n          children: control.title\n        }, [indexOfSet, indexOfControl].join())))]\n      });\n    },\n    open: open,\n    defaultOpen: defaultOpen,\n    onToggle: onToggleProp\n  });\n}\n\n/**\n *\n * The DropdownMenu displays a list of actions (each contained in a MenuItem,\n * MenuItemsChoice, or MenuGroup) in a compact way. It appears in a Popover\n * after the user has interacted with an element (a button or icon) or when\n * they perform a specific action.\n *\n * Render a Dropdown Menu with a set of controls:\n *\n * ```jsx\n * import { DropdownMenu } from '@wordpress/components';\n * import {\n * \tmore,\n * \tarrowLeft,\n * \tarrowRight,\n * \tarrowUp,\n * \tarrowDown,\n * } from '@wordpress/icons';\n *\n * const MyDropdownMenu = () => (\n * \t<DropdownMenu\n * \t\ticon={ more }\n * \t\tlabel=\"Select a direction\"\n * \t\tcontrols={ [\n * \t\t\t{\n * \t\t\t\ttitle: 'Up',\n * \t\t\t\ticon: arrowUp,\n * \t\t\t\tonClick: () => console.log( 'up' ),\n * \t\t\t},\n * \t\t\t{\n * \t\t\t\ttitle: 'Right',\n * \t\t\t\ticon: arrowRight,\n * \t\t\t\tonClick: () => console.log( 'right' ),\n * \t\t\t},\n * \t\t\t{\n * \t\t\t\ttitle: 'Down',\n * \t\t\t\ticon: arrowDown,\n * \t\t\t\tonClick: () => console.log( 'down' ),\n * \t\t\t},\n * \t\t\t{\n * \t\t\t\ttitle: 'Left',\n * \t\t\t\ticon: arrowLeft,\n * \t\t\t\tonClick: () => console.log( 'left' ),\n * \t\t\t},\n * \t\t] }\n * \t/>\n * );\n * ```\n *\n * Alternatively, specify a `children` function which returns elements valid for\n * use in a DropdownMenu: `MenuItem`, `MenuItemsChoice`, or `MenuGroup`.\n *\n * ```jsx\n * import { DropdownMenu, MenuGroup, MenuItem } from '@wordpress/components';\n * import { more, arrowUp, arrowDown, trash } from '@wordpress/icons';\n *\n * const MyDropdownMenu = () => (\n * \t<DropdownMenu icon={ more } label=\"Select a direction\">\n * \t\t{ ( { onClose } ) => (\n * \t\t\t<>\n * \t\t\t\t<MenuGroup>\n * \t\t\t\t\t<MenuItem icon={ arrowUp } onClick={ onClose }>\n * \t\t\t\t\t\tMove Up\n * \t\t\t\t\t</MenuItem>\n * \t\t\t\t\t<MenuItem icon={ arrowDown } onClick={ onClose }>\n * \t\t\t\t\t\tMove Down\n * \t\t\t\t\t</MenuItem>\n * \t\t\t\t</MenuGroup>\n * \t\t\t\t<MenuGroup>\n * \t\t\t\t\t<MenuItem icon={ trash } onClick={ onClose }>\n * \t\t\t\t\t\tRemove\n * \t\t\t\t\t</MenuItem>\n * \t\t\t\t</MenuGroup>\n * \t\t\t</>\n * \t\t) }\n * \t</DropdownMenu>\n * );\n * ```\n *\n */\nexport const DropdownMenu = contextConnectWithoutRef(UnconnectedDropdownMenu, 'DropdownMenu');\nexport default DropdownMenu;"],
  "mappings": "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",
  "names": ["clsx", "_jsx", "Dropdown", "Button", "_jsxs"]
}
