UNPKG

@base-ui/react

Version:

Base UI is a library of headless ('unstyled') React components and low-level hooks. You gain complete control over your app's CSS and accessibility features.

67 lines (65 loc) 2.17 kB
"use strict"; 'use client'; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.MenuViewport = void 0; var React = _interopRequireWildcard(require("react")); var _MenuRootContext = require("../root/MenuRootContext"); var _MenuPositionerContext = require("../positioner/MenuPositionerContext"); var _useRenderElement = require("../../internals/useRenderElement"); var _usePopupViewport = require("../../utils/usePopupViewport"); var _MenuViewportCssVars = require("./MenuViewportCssVars"); const stateAttributesMapping = { activationDirection: value => value ? { 'data-activation-direction': value } : null }; /** * A viewport for displaying content transitions. * This component is only required if one popup can be opened by multiple triggers, its content change based on the trigger * and switching between them is animated. * Renders a `<div>` element. * * Documentation: [Base UI Menu](https://base-ui.com/react/components/menu) */ const MenuViewport = exports.MenuViewport = /*#__PURE__*/React.forwardRef(function MenuViewport(componentProps, forwardedRef) { const { render, className, style, children, ...elementProps } = componentProps; const { store } = (0, _MenuRootContext.useMenuRootContext)(); const { side } = (0, _MenuPositionerContext.useMenuPositionerContext)(); const instantType = store.useState('instantType'); const { children: childrenToRender, state: viewportState } = (0, _usePopupViewport.usePopupViewport)({ store, side, cssVars: _MenuViewportCssVars.MenuViewportCssVars, children }); const state = { activationDirection: viewportState.activationDirection, transitioning: viewportState.transitioning, instant: instantType }; return (0, _useRenderElement.useRenderElement)('div', componentProps, { state, ref: forwardedRef, props: [elementProps, { children: childrenToRender }], stateAttributesMapping }); }); if (process.env.NODE_ENV !== "production") MenuViewport.displayName = "MenuViewport";