@ariakit/react-core
Version:
Ariakit React core
144 lines (117 loc) • 5.28 kB
JavaScript
;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;