UNPKG

react-aria-components

Version:

A library of styleable components built using React Aria

415 lines (393 loc) • 20 kB
var $3114c2382242bdc0$exports = require("./Collection.main.js"); var $c5ccf687772c0422$exports = require("./utils.main.js"); var $c7efb75a1a3fe2d2$exports = require("./Header.main.js"); var $70c886ca98ebdc2b$exports = require("./Keyboard.main.js"); var $2979ab89b336194b$exports = require("./Dialog.main.js"); var $61e2b7078adb18bc$exports = require("./Popover.main.js"); var $54b202ace195eaa4$exports = require("./Separator.main.js"); var $a8a589c28affdc40$exports = require("./Text.main.js"); var $33f48720060787fa$exports = require("./Autocomplete.main.js"); var $2JTht$reactaria = require("react-aria"); var $2JTht$reactariacollections = require("@react-aria/collections"); var $2JTht$reactstately = require("react-stately"); var $2JTht$reactariautils = require("@react-aria/utils"); var $2JTht$reactstatelyselection = require("@react-stately/selection"); var $2JTht$reactariainteractions = require("@react-aria/interactions"); var $2JTht$react = require("react"); function $parcel$interopDefault(a) { return a && a.__esModule ? a.default : a; } function $parcel$export(e, n, v, s) { Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true}); } $parcel$export(module.exports, "MenuContext", () => $a8f6e7d095d1cc86$export$c7e742effb1c51e2); $parcel$export(module.exports, "MenuStateContext", () => $a8f6e7d095d1cc86$export$24aad8519b95b41b); $parcel$export(module.exports, "RootMenuTriggerStateContext", () => $a8f6e7d095d1cc86$export$795aec4671cbae19); $parcel$export(module.exports, "MenuTrigger", () => $a8f6e7d095d1cc86$export$27d2ad3c5815583e); $parcel$export(module.exports, "SubmenuTrigger", () => $a8f6e7d095d1cc86$export$ecabc99eeffab7ca); $parcel$export(module.exports, "Menu", () => $a8f6e7d095d1cc86$export$d9b273488cd8ce6f); $parcel$export(module.exports, "MenuSection", () => $a8f6e7d095d1cc86$export$4b1545b4f2016d26); $parcel$export(module.exports, "MenuItem", () => $a8f6e7d095d1cc86$export$2ce376c2cc3355c8); /* * Copyright 2022 Adobe. All rights reserved. * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. */ const $a8f6e7d095d1cc86$export$c7e742effb1c51e2 = /*#__PURE__*/ (0, $2JTht$react.createContext)(null); const $a8f6e7d095d1cc86$export$24aad8519b95b41b = /*#__PURE__*/ (0, $2JTht$react.createContext)(null); const $a8f6e7d095d1cc86$export$795aec4671cbae19 = /*#__PURE__*/ (0, $2JTht$react.createContext)(null); const $a8f6e7d095d1cc86$var$SelectionManagerContext = /*#__PURE__*/ (0, $2JTht$react.createContext)(null); function $a8f6e7d095d1cc86$export$27d2ad3c5815583e(props) { let state = (0, $2JTht$reactstately.useMenuTriggerState)(props); let ref = (0, $2JTht$react.useRef)(null); let { menuTriggerProps: menuTriggerProps, menuProps: menuProps } = (0, $2JTht$reactaria.useMenuTrigger)({ ...props, type: 'menu' }, state, ref); // Allows menu width to match button let [buttonWidth, setButtonWidth] = (0, $2JTht$react.useState)(null); let onResize = (0, $2JTht$react.useCallback)(()=>{ if (ref.current) setButtonWidth(ref.current.offsetWidth + 'px'); }, [ ref ]); (0, $2JTht$reactariautils.useResizeObserver)({ ref: ref, onResize: onResize }); let scrollRef = (0, $2JTht$react.useRef)(null); return /*#__PURE__*/ (0, ($parcel$interopDefault($2JTht$react))).createElement((0, $c5ccf687772c0422$exports.Provider), { values: [ [ $a8f6e7d095d1cc86$export$c7e742effb1c51e2, { ...menuProps, ref: scrollRef } ], [ (0, $2979ab89b336194b$exports.OverlayTriggerStateContext), state ], [ $a8f6e7d095d1cc86$export$795aec4671cbae19, state ], [ (0, $61e2b7078adb18bc$exports.PopoverContext), { trigger: 'MenuTrigger', triggerRef: ref, scrollRef: scrollRef, placement: 'bottom start', style: { '--trigger-width': buttonWidth }, 'aria-labelledby': menuProps['aria-labelledby'] } ] ] }, /*#__PURE__*/ (0, ($parcel$interopDefault($2JTht$react))).createElement((0, $2JTht$reactariainteractions.PressResponder), { ...menuTriggerProps, ref: ref, isPressed: state.isOpen }, props.children)); } const $a8f6e7d095d1cc86$var$SubmenuTriggerContext = /*#__PURE__*/ (0, $2JTht$react.createContext)(null); const $a8f6e7d095d1cc86$export$ecabc99eeffab7ca = /*#__PURE__*/ (0, $2JTht$reactariacollections.createBranchComponent)('submenutrigger', (props, ref, item)=>{ let { CollectionBranch: CollectionBranch } = (0, $2JTht$react.useContext)((0, $3114c2382242bdc0$exports.CollectionRendererContext)); let state = (0, $2JTht$react.useContext)($a8f6e7d095d1cc86$export$24aad8519b95b41b); let rootMenuTriggerState = (0, $2JTht$react.useContext)($a8f6e7d095d1cc86$export$795aec4671cbae19); let submenuTriggerState = (0, $2JTht$reactstately.useSubmenuTriggerState)({ triggerKey: item.key }, rootMenuTriggerState); let submenuRef = (0, $2JTht$react.useRef)(null); let itemRef = (0, $2JTht$reactariautils.useObjectRef)(ref); let { parentMenuRef: parentMenuRef, shouldUseVirtualFocus: shouldUseVirtualFocus } = (0, $2JTht$react.useContext)($a8f6e7d095d1cc86$var$SubmenuTriggerContext); let { submenuTriggerProps: submenuTriggerProps, submenuProps: submenuProps, popoverProps: popoverProps } = (0, $2JTht$reactaria.useSubmenuTrigger)({ parentMenuRef: parentMenuRef, submenuRef: submenuRef, delay: props.delay, shouldUseVirtualFocus: shouldUseVirtualFocus }, submenuTriggerState, itemRef); return /*#__PURE__*/ (0, ($parcel$interopDefault($2JTht$react))).createElement((0, $c5ccf687772c0422$exports.Provider), { values: [ [ $a8f6e7d095d1cc86$var$MenuItemContext, { ...submenuTriggerProps, onAction: undefined, ref: itemRef } ], [ $a8f6e7d095d1cc86$export$c7e742effb1c51e2, submenuProps ], [ (0, $2979ab89b336194b$exports.OverlayTriggerStateContext), submenuTriggerState ], [ (0, $61e2b7078adb18bc$exports.PopoverContext), { ref: submenuRef, trigger: 'SubmenuTrigger', triggerRef: itemRef, placement: 'end top', 'aria-labelledby': submenuProps['aria-labelledby'], ...popoverProps } ] ] }, /*#__PURE__*/ (0, ($parcel$interopDefault($2JTht$react))).createElement(CollectionBranch, { collection: state.collection, parent: item }), props.children[1]); }, (props)=>props.children[0]); const $a8f6e7d095d1cc86$export$d9b273488cd8ce6f = /*#__PURE__*/ (0, $2JTht$react.forwardRef)(function Menu(props, ref) { [props, ref] = (0, $c5ccf687772c0422$exports.useContextProps)(props, ref, $a8f6e7d095d1cc86$export$c7e742effb1c51e2); // Delay rendering the actual menu until we have the collection so that auto focus works properly. return /*#__PURE__*/ (0, ($parcel$interopDefault($2JTht$react))).createElement((0, $2JTht$reactariacollections.CollectionBuilder), { content: /*#__PURE__*/ (0, ($parcel$interopDefault($2JTht$react))).createElement((0, $2JTht$reactariacollections.Collection), props) }, (collection)=>/*#__PURE__*/ (0, ($parcel$interopDefault($2JTht$react))).createElement($a8f6e7d095d1cc86$var$MenuInner, { props: props, collection: collection, menuRef: ref })); }); function $a8f6e7d095d1cc86$var$MenuInner({ props: props, collection: collection, menuRef: ref }) { let { filter: filter, collectionProps: autocompleteMenuProps, collectionRef: collectionRef } = (0, $2JTht$react.useContext)((0, $33f48720060787fa$exports.UNSTABLE_InternalAutocompleteContext)) || {}; // Memoed so that useAutocomplete callback ref is properly only called once on mount and not everytime a rerender happens ref = (0, $2JTht$reactariautils.useObjectRef)((0, $2JTht$react.useMemo)(()=>(0, $2JTht$reactariautils.mergeRefs)(ref, collectionRef !== undefined ? collectionRef : null), [ collectionRef, ref ])); let filteredCollection = (0, $2JTht$react.useMemo)(()=>filter ? collection.UNSTABLE_filter(filter) : collection, [ collection, filter ]); let state = (0, $2JTht$reactstately.useTreeState)({ ...props, collection: filteredCollection, children: undefined }); let triggerState = (0, $2JTht$react.useContext)($a8f6e7d095d1cc86$export$795aec4671cbae19); let { isVirtualized: isVirtualized, CollectionRoot: CollectionRoot } = (0, $2JTht$react.useContext)((0, $3114c2382242bdc0$exports.CollectionRendererContext)); let { menuProps: menuProps } = (0, $2JTht$reactaria.useMenu)({ ...props, ...autocompleteMenuProps, isVirtualized: isVirtualized, onClose: props.onClose || (triggerState === null || triggerState === void 0 ? void 0 : triggerState.close) }, state, ref); let renderProps = (0, $c5ccf687772c0422$exports.useRenderProps)({ defaultClassName: 'react-aria-Menu', className: props.className, style: props.style, values: { isEmpty: state.collection.size === 0 } }); let emptyState = null; if (state.collection.size === 0 && props.renderEmptyState) emptyState = /*#__PURE__*/ (0, ($parcel$interopDefault($2JTht$react))).createElement("div", { role: "menuitem", style: { display: 'contents' } }, props.renderEmptyState()); return /*#__PURE__*/ (0, ($parcel$interopDefault($2JTht$react))).createElement((0, $2JTht$reactaria.FocusScope), null, /*#__PURE__*/ (0, ($parcel$interopDefault($2JTht$react))).createElement("div", { ...(0, $2JTht$reactariautils.filterDOMProps)(props), ...menuProps, ...renderProps, ref: ref, slot: props.slot || undefined, "data-empty": state.collection.size === 0 || undefined, onScroll: props.onScroll }, /*#__PURE__*/ (0, ($parcel$interopDefault($2JTht$react))).createElement((0, $c5ccf687772c0422$exports.Provider), { values: [ [ $a8f6e7d095d1cc86$export$24aad8519b95b41b, state ], [ (0, $54b202ace195eaa4$exports.SeparatorContext), { elementType: 'div' } ], [ (0, $3114c2382242bdc0$exports.SectionContext), { name: 'MenuSection', render: $a8f6e7d095d1cc86$var$MenuSectionInner } ], [ $a8f6e7d095d1cc86$var$SubmenuTriggerContext, { parentMenuRef: ref, shouldUseVirtualFocus: autocompleteMenuProps === null || autocompleteMenuProps === void 0 ? void 0 : autocompleteMenuProps.shouldUseVirtualFocus } ], [ $a8f6e7d095d1cc86$var$MenuItemContext, null ], [ (0, $33f48720060787fa$exports.UNSTABLE_InternalAutocompleteContext), null ], [ $a8f6e7d095d1cc86$var$SelectionManagerContext, state.selectionManager ], /* Ensure root MenuTriggerState is defined, in case Menu is rendered outside a MenuTrigger. */ /* We assume the context can never change between defined and undefined. */ /* eslint-disable-next-line react-hooks/rules-of-hooks */ [ $a8f6e7d095d1cc86$export$795aec4671cbae19, triggerState !== null && triggerState !== void 0 ? triggerState : (0, $2JTht$reactstately.useMenuTriggerState)({}) ] ] }, /*#__PURE__*/ (0, ($parcel$interopDefault($2JTht$react))).createElement(CollectionRoot, { collection: state.collection, persistedKeys: (0, $3114c2382242bdc0$exports.usePersistedKeys)(state.selectionManager.focusedKey), scrollRef: ref })), emptyState)); } // A subclass of SelectionManager that forwards focus-related properties to the parent, // but has its own local selection state. class $a8f6e7d095d1cc86$var$GroupSelectionManager extends (0, $2JTht$reactstatelyselection.SelectionManager) { get focusedKey() { return this.parent.focusedKey; } get isFocused() { return this.parent.isFocused; } setFocusedKey(key, childFocusStrategy) { return this.parent.setFocusedKey(key, childFocusStrategy); } setFocused(isFocused) { this.parent.setFocused(isFocused); } get childFocusStrategy() { return this.parent.childFocusStrategy; } constructor(parent, state){ super(parent.collection, state); this.parent = parent; } } function $a8f6e7d095d1cc86$var$MenuSectionInner(props, ref, section, className = 'react-aria-MenuSection') { var _section_props, _section_props1; let state = (0, $2JTht$react.useContext)($a8f6e7d095d1cc86$export$24aad8519b95b41b); let { CollectionBranch: CollectionBranch } = (0, $2JTht$react.useContext)((0, $3114c2382242bdc0$exports.CollectionRendererContext)); let [headingRef, heading] = (0, $c5ccf687772c0422$exports.useSlot)(); var _section_props_arialabel; let { headingProps: headingProps, groupProps: groupProps } = (0, $2JTht$reactaria.useMenuSection)({ heading: heading, 'aria-label': (_section_props_arialabel = section.props['aria-label']) !== null && _section_props_arialabel !== void 0 ? _section_props_arialabel : undefined }); let renderProps = (0, $c5ccf687772c0422$exports.useRenderProps)({ defaultClassName: className, className: (_section_props = section.props) === null || _section_props === void 0 ? void 0 : _section_props.className, style: (_section_props1 = section.props) === null || _section_props1 === void 0 ? void 0 : _section_props1.style, values: {} }); let parent = (0, $2JTht$react.useContext)($a8f6e7d095d1cc86$var$SelectionManagerContext); let selectionState = (0, $2JTht$reactstatelyselection.useMultipleSelectionState)(props); let manager = props.selectionMode != null ? new $a8f6e7d095d1cc86$var$GroupSelectionManager(parent, selectionState) : parent; return /*#__PURE__*/ (0, ($parcel$interopDefault($2JTht$react))).createElement("section", { ...(0, $2JTht$reactariautils.filterDOMProps)(props), ...groupProps, ...renderProps, ref: ref }, /*#__PURE__*/ (0, ($parcel$interopDefault($2JTht$react))).createElement((0, $c5ccf687772c0422$exports.Provider), { values: [ [ (0, $c7efb75a1a3fe2d2$exports.HeaderContext), { ...headingProps, ref: headingRef } ], [ $a8f6e7d095d1cc86$var$SelectionManagerContext, manager ] ] }, /*#__PURE__*/ (0, ($parcel$interopDefault($2JTht$react))).createElement(CollectionBranch, { collection: state.collection, parent: section }))); } const $a8f6e7d095d1cc86$export$4b1545b4f2016d26 = /*#__PURE__*/ (0, $2JTht$reactariacollections.createBranchComponent)('section', $a8f6e7d095d1cc86$var$MenuSectionInner); const $a8f6e7d095d1cc86$var$MenuItemContext = /*#__PURE__*/ (0, $2JTht$react.createContext)(null); const $a8f6e7d095d1cc86$export$2ce376c2cc3355c8 = /*#__PURE__*/ (0, $2JTht$reactariacollections.createLeafComponent)('item', function MenuItem(props, forwardedRef, item) { var _useSlottedContext; [props, forwardedRef] = (0, $c5ccf687772c0422$exports.useContextProps)(props, forwardedRef, $a8f6e7d095d1cc86$var$MenuItemContext); let id = (_useSlottedContext = (0, $c5ccf687772c0422$exports.useSlottedContext)($a8f6e7d095d1cc86$var$MenuItemContext)) === null || _useSlottedContext === void 0 ? void 0 : _useSlottedContext.id; let state = (0, $2JTht$react.useContext)($a8f6e7d095d1cc86$export$24aad8519b95b41b); let ref = (0, $2JTht$reactariautils.useObjectRef)(forwardedRef); let selectionManager = (0, $2JTht$react.useContext)($a8f6e7d095d1cc86$var$SelectionManagerContext); let { menuItemProps: menuItemProps, labelProps: labelProps, descriptionProps: descriptionProps, keyboardShortcutProps: keyboardShortcutProps, ...states } = (0, $2JTht$reactaria.useMenuItem)({ ...props, id: id, key: item.key, selectionManager: selectionManager }, state, ref); let { hoverProps: hoverProps, isHovered: isHovered } = (0, $2JTht$reactaria.useHover)({ isDisabled: states.isDisabled }); let renderProps = (0, $c5ccf687772c0422$exports.useRenderProps)({ ...props, id: undefined, children: item.rendered, defaultClassName: 'react-aria-MenuItem', values: { ...states, isHovered: isHovered, isFocusVisible: states.isFocusVisible, selectionMode: selectionManager.selectionMode, selectionBehavior: selectionManager.selectionBehavior, hasSubmenu: !!props['aria-haspopup'], isOpen: props['aria-expanded'] === 'true' } }); let ElementType = props.href ? 'a' : 'div'; return /*#__PURE__*/ (0, ($parcel$interopDefault($2JTht$react))).createElement(ElementType, { ...(0, $2JTht$reactaria.mergeProps)(menuItemProps, hoverProps), ...renderProps, ref: ref, "data-disabled": states.isDisabled || undefined, "data-hovered": isHovered || undefined, "data-focused": states.isFocused || undefined, "data-focus-visible": states.isFocusVisible || undefined, "data-pressed": states.isPressed || undefined, "data-selected": states.isSelected || undefined, "data-selection-mode": selectionManager.selectionMode === 'none' ? undefined : selectionManager.selectionMode, "data-has-submenu": !!props['aria-haspopup'] || undefined, "data-open": props['aria-expanded'] === 'true' || undefined }, /*#__PURE__*/ (0, ($parcel$interopDefault($2JTht$react))).createElement((0, $c5ccf687772c0422$exports.Provider), { values: [ [ (0, $a8a589c28affdc40$exports.TextContext), { slots: { [(0, $c5ccf687772c0422$exports.DEFAULT_SLOT)]: labelProps, label: labelProps, description: descriptionProps } } ], [ (0, $70c886ca98ebdc2b$exports.KeyboardContext), keyboardShortcutProps ] ] }, renderProps.children)); }); //# sourceMappingURL=Menu.main.js.map