FrontPastel/node_modules/@mui/base/legacy/useOption/useOption.js

88 lines
2.9 KiB
JavaScript

'use client';
import _extends from "@babel/runtime/helpers/esm/extends";
import * as React from 'react';
import { unstable_useForkRef as useForkRef, unstable_useId as useId } from '@mui/utils';
import { extractEventHandlers } from '../utils/extractEventHandlers';
import { useListItem } from '../useList';
import { useCompoundItem } from '../useCompound';
import { useButton } from '../useButton';
import { combineHooksSlotProps } from '../utils/combineHooksSlotProps';
/**
*
* Demos:
*
* - [Select](https://mui.com/base-ui/react-select/#hooks)
*
* API:
*
* - [useOption API](https://mui.com/base-ui/react-select/hooks-api/#use-option)
*/
export function useOption(params) {
var value = params.value,
label = params.label,
disabled = params.disabled,
optionRefParam = params.rootRef,
idParam = params.id;
var _useListItem = useListItem({
item: value
}),
getListItemProps = _useListItem.getRootProps,
highlighted = _useListItem.highlighted,
selected = _useListItem.selected;
var _useButton = useButton({
disabled: disabled,
focusableWhenDisabled: true
}),
getButtonProps = _useButton.getRootProps,
buttonRefHandler = _useButton.rootRef;
var id = useId(idParam);
var optionRef = React.useRef(null);
var selectOption = React.useMemo(function () {
return {
disabled: disabled,
label: label,
value: value,
ref: optionRef,
id: id
};
}, [disabled, label, value, id]);
var _useCompoundItem = useCompoundItem(value, selectOption),
index = _useCompoundItem.index;
var handleRef = useForkRef(optionRefParam, optionRef, buttonRefHandler);
var createHandleKeyDown = function createHandleKeyDown(otherHandlers) {
return function (event) {
var _otherHandlers$onKeyD;
(_otherHandlers$onKeyD = otherHandlers.onKeyDown) == null || _otherHandlers$onKeyD.call(otherHandlers, event);
if (event.defaultMuiPrevented) {
return;
}
if ([' ', 'Enter'].includes(event.key)) {
event.defaultMuiPrevented = true; // prevent listbox onKeyDown
}
};
};
var getOwnHandlers = function getOwnHandlers() {
var otherHandlers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
return {
onKeyDown: createHandleKeyDown(otherHandlers)
};
};
return {
getRootProps: function getRootProps() {
var externalProps = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var externalEventHandlers = extractEventHandlers(externalProps);
var getCombinedRootProps = combineHooksSlotProps(getListItemProps, combineHooksSlotProps(getButtonProps, getOwnHandlers));
return _extends({}, externalProps, externalEventHandlers, getCombinedRootProps(externalEventHandlers), {
id: id,
ref: handleRef,
role: 'option',
'aria-selected': selected
});
},
highlighted: highlighted,
index: index,
selected: selected,
rootRef: handleRef
};
}