UNPKG

@ariakit/react-core

Version:

Ariakit React core

144 lines (117 loc) 5.28 kB
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); var _6DC6MIBCcjs = require('./6DC6MIBC.cjs'); var _OJGWGKHTcjs = require('./OJGWGKHT.cjs'); var _YZWMAQPAcjs = require('./YZWMAQPA.cjs'); var _64BKHVGOcjs = require('./64BKHVGO.cjs'); var _WBFXWJUHcjs = require('./WBFXWJUH.cjs'); var _MZ2HG624cjs = require('./MZ2HG624.cjs'); // src/select/select-list.tsx var _events = require('@ariakit/core/utils/events'); var _misc = require('@ariakit/core/utils/misc'); var _react = require('react'); var _jsxruntime = require('react/jsx-runtime'); var TagName = "div"; var SelectListContext = _react.createContext.call(void 0, null); var useSelectList = _WBFXWJUHcjs.createHook.call(void 0, function useSelectList2({ store, resetOnEscape = true, hideOnEnter = true, focusOnMove = true, composite, alwaysVisible, ...props }) { const context = _6DC6MIBCcjs.useSelectContext.call(void 0, ); store = store || context; _misc.invariant.call(void 0, store, process.env.NODE_ENV !== "production" && "SelectList must receive a `store` prop or be wrapped in a SelectProvider component." ); const id = _MZ2HG624cjs.useId.call(void 0, props.id); const value = store.useState("value"); const multiSelectable = Array.isArray(value); const [defaultValue, setDefaultValue] = _react.useState.call(void 0, value); const mounted = store.useState("mounted"); _react.useEffect.call(void 0, () => { if (mounted) return; setDefaultValue(value); }, [mounted, value]); resetOnEscape = resetOnEscape && !multiSelectable; const onKeyDownProp = props.onKeyDown; const resetOnEscapeProp = _MZ2HG624cjs.useBooleanEvent.call(void 0, resetOnEscape); const hideOnEnterProp = _MZ2HG624cjs.useBooleanEvent.call(void 0, hideOnEnter); const onKeyDown = _MZ2HG624cjs.useEvent.call(void 0, (event) => { onKeyDownProp == null ? void 0 : onKeyDownProp(event); if (event.defaultPrevented) return; if (event.key === "Escape" && resetOnEscapeProp(event)) { store == null ? void 0 : store.setValue(defaultValue); } if (event.key === " " || event.key === "Enter") { if (_events.isSelfTarget.call(void 0, event) && hideOnEnterProp(event)) { event.preventDefault(); store == null ? void 0 : store.hide(); } } }); const headingContext = _react.useContext.call(void 0, _6DC6MIBCcjs.SelectHeadingContext); const headingState = _react.useState.call(void 0, ); const [headingId, setHeadingId] = headingContext || headingState; const headingContextValue = _react.useMemo.call(void 0, () => [headingId, setHeadingId], [headingId] ); const [childStore, setChildStore] = _react.useState.call(void 0, null); const setStore = _react.useContext.call(void 0, SelectListContext); _react.useEffect.call(void 0, () => { if (!setStore) return; setStore(store); return () => setStore(null); }, [setStore, store]); props = _MZ2HG624cjs.useWrapElement.call(void 0, props, (element2) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _6DC6MIBCcjs.SelectScopedContextProvider, { value: store, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SelectListContext.Provider, { value: setChildStore, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _6DC6MIBCcjs.SelectHeadingContext.Provider, { value: headingContextValue, children: element2 }) }) }), [store, headingContextValue] ); const hasCombobox = !!store.combobox; composite = composite != null ? composite : !hasCombobox && childStore !== store; const [element, setElement] = _MZ2HG624cjs.useTransactionState.call(void 0, composite ? store.setListElement : null ); const role = _MZ2HG624cjs.useAttribute.call(void 0, element, "role", props.role); const isCompositeRole = role === "listbox" || role === "menu" || role === "tree" || role === "grid"; const ariaMultiSelectable = composite || isCompositeRole ? multiSelectable || void 0 : void 0; const hidden = _YZWMAQPAcjs.isHidden.call(void 0, mounted, props.hidden, alwaysVisible); const style = hidden ? { ...props.style, display: "none" } : props.style; if (composite) { props = { role: "listbox", "aria-multiselectable": ariaMultiSelectable, ...props }; } const labelId = store.useState( (state) => { var _a; return headingId || ((_a = state.labelElement) == null ? void 0 : _a.id); } ); props = { id, "aria-labelledby": labelId, hidden, ...props, ref: _MZ2HG624cjs.useMergeRefs.call(void 0, setElement, props.ref), style, onKeyDown }; props = _64BKHVGOcjs.useComposite.call(void 0, { store, ...props, composite }); props = _OJGWGKHTcjs.useCompositeTypeahead.call(void 0, { store, typeahead: !hasCombobox, ...props }); return props; } ); var SelectList = _WBFXWJUHcjs.forwardRef.call(void 0, function SelectList2(props) { const htmlProps = useSelectList(props); return _WBFXWJUHcjs.createElement.call(void 0, TagName, htmlProps); }); exports.useSelectList = useSelectList; exports.SelectList = SelectList;