UNPKG

@itwin/itwinui-react

Version:

A react component library for iTwinUI

112 lines (111 loc) 2.99 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true, }); function _export(target, all) { for (var name in all) Object.defineProperty(target, name, { enumerable: true, get: all[name], }); } _export(exports, { DropdownMenu: function () { return DropdownMenu; }, DropdownMenuCloseOnClickContext: function () { return DropdownMenuCloseOnClickContext; }, DropdownMenuContext: function () { return DropdownMenuContext; }, }); const _interop_require_wildcard = require('@swc/helpers/_/_interop_require_wildcard'); const _react = /*#__PURE__*/ _interop_require_wildcard._(require('react')); const _index = require('../../utils/index.js'); const _Menu = require('../Menu/Menu.js'); const _react1 = require('@floating-ui/react'); const DropdownMenu = _react.forwardRef((props, forwardedRef) => _react.createElement( _react1.FloatingTree, null, _react.createElement(DropdownMenuContent, { ref: forwardedRef, ...props, }), ), ); if ('development' === process.env.NODE_ENV) DropdownMenu.displayName = 'DropdownMenu'; const DropdownMenuContent = _react.forwardRef((props, forwardedRef) => { let { menuItems, children, role = 'menu', visible: visibleProp, placement = 'bottom-start', matchWidth = false, onVisibleChange, portal = true, middleware, closeOnItemClick = false, ...rest } = props; let [visible, setVisible] = (0, _index.useControlledState)( false, visibleProp, onVisibleChange, ); let close = _react.useCallback(() => { setVisible(false); }, [setVisible]); let menuContent = _react.useMemo(() => { if ('function' == typeof menuItems) return menuItems(close); return menuItems; }, [close, menuItems]); let dropdownMenuContextValue = _react.useMemo( () => ({ close, }), [close], ); return _react.createElement( DropdownMenuCloseOnClickContext.Provider, { value: closeOnItemClick, }, _react.createElement( DropdownMenuContext.Provider, { value: dropdownMenuContextValue, }, _react.createElement( _Menu.Menu, { trigger: children, onKeyDown: (0, _index.mergeEventHandlers)(props.onKeyDown, (e) => { if (e.defaultPrevented) return; if ('Tab' === e.key) setVisible(false); }), role: role, ref: forwardedRef, portal: portal, popoverProps: _react.useMemo( () => ({ placement, matchWidth, visible, onVisibleChange: setVisible, middleware, }), [matchWidth, middleware, placement, setVisible, visible], ), ...rest, }, menuContent, ), ), ); }); const DropdownMenuContext = _react.createContext(void 0); const DropdownMenuCloseOnClickContext = _react.createContext(void 0);