@ariakit/react-core
Version:
Ariakit React core
136 lines (113 loc) • 5 kB
JavaScript
;Object.defineProperty(exports, "__esModule", {value: true});
var _YUGKYIYYcjs = require('./YUGKYIYY.cjs');
var _WULEED4Qcjs = require('./WULEED4Q.cjs');
var _OZM4QA2Vcjs = require('./OZM4QA2V.cjs');
var _7EQBAZ46cjs = require('./7EQBAZ46.cjs');
// src/command/command.tsx
var _dom = require('@ariakit/core/utils/dom');
var _events = require('@ariakit/core/utils/events');
var _misc = require('@ariakit/core/utils/misc');
var _platform = require('@ariakit/core/utils/platform');
var _react = require('react');
var TagName = "button";
function isNativeClick(event) {
if (!event.isTrusted) return false;
const element = event.currentTarget;
if (event.key === "Enter") {
return _dom.isButton.call(void 0, element) || element.tagName === "SUMMARY" || element.tagName === "A";
}
if (event.key === " ") {
return _dom.isButton.call(void 0, element) || element.tagName === "SUMMARY" || element.tagName === "INPUT" || element.tagName === "SELECT";
}
return false;
}
var symbol = Symbol("command");
var useCommand = _WULEED4Qcjs.createHook.call(void 0,
function useCommand2(_a) {
var _b = _a, { clickOnEnter = true, clickOnSpace = true } = _b, props = _7EQBAZ46cjs.__objRest.call(void 0, _b, ["clickOnEnter", "clickOnSpace"]);
const ref = _react.useRef.call(void 0, null);
const [isNativeButton, setIsNativeButton] = _react.useState.call(void 0, false);
_react.useEffect.call(void 0, () => {
if (!ref.current) return;
setIsNativeButton(_dom.isButton.call(void 0, ref.current));
}, []);
const [active, setActive] = _react.useState.call(void 0, false);
const activeRef = _react.useRef.call(void 0, false);
const disabled = _misc.disabledFromProps.call(void 0, props);
const [isDuplicate, metadataProps] = _OZM4QA2Vcjs.useMetadataProps.call(void 0, props, symbol, true);
const onKeyDownProp = props.onKeyDown;
const onKeyDown = _OZM4QA2Vcjs.useEvent.call(void 0, (event) => {
onKeyDownProp == null ? void 0 : onKeyDownProp(event);
const element = event.currentTarget;
if (event.defaultPrevented) return;
if (isDuplicate) return;
if (disabled) return;
if (!_events.isSelfTarget.call(void 0, event)) return;
if (_dom.isTextField.call(void 0, element)) return;
if (element.isContentEditable) return;
const isEnter = clickOnEnter && event.key === "Enter";
const isSpace = clickOnSpace && event.key === " ";
const shouldPreventEnter = event.key === "Enter" && !clickOnEnter;
const shouldPreventSpace = event.key === " " && !clickOnSpace;
if (shouldPreventEnter || shouldPreventSpace) {
event.preventDefault();
return;
}
if (isEnter || isSpace) {
const nativeClick = isNativeClick(event);
if (isEnter) {
if (!nativeClick) {
event.preventDefault();
const _a2 = event, { view } = _a2, eventInit = _7EQBAZ46cjs.__objRest.call(void 0, _a2, ["view"]);
const click = () => _events.fireClickEvent.call(void 0, element, eventInit);
if (_platform.isFirefox.call(void 0, )) {
_events.queueBeforeEvent.call(void 0, element, "keyup", click);
} else {
queueMicrotask(click);
}
}
} else if (isSpace) {
activeRef.current = true;
if (!nativeClick) {
event.preventDefault();
setActive(true);
}
}
}
});
const onKeyUpProp = props.onKeyUp;
const onKeyUp = _OZM4QA2Vcjs.useEvent.call(void 0, (event) => {
onKeyUpProp == null ? void 0 : onKeyUpProp(event);
if (event.defaultPrevented) return;
if (isDuplicate) return;
if (disabled) return;
if (event.metaKey) return;
const isSpace = clickOnSpace && event.key === " ";
if (activeRef.current && isSpace) {
activeRef.current = false;
if (!isNativeClick(event)) {
event.preventDefault();
setActive(false);
const element = event.currentTarget;
const _a2 = event, { view } = _a2, eventInit = _7EQBAZ46cjs.__objRest.call(void 0, _a2, ["view"]);
queueMicrotask(() => _events.fireClickEvent.call(void 0, element, eventInit));
}
}
});
props = _7EQBAZ46cjs.__spreadProps.call(void 0, _7EQBAZ46cjs.__spreadValues.call(void 0, _7EQBAZ46cjs.__spreadValues.call(void 0, {
"data-active": active || void 0,
type: isNativeButton ? "button" : void 0
}, metadataProps), props), {
ref: _OZM4QA2Vcjs.useMergeRefs.call(void 0, ref, props.ref),
onKeyDown,
onKeyUp
});
props = _YUGKYIYYcjs.useFocusable.call(void 0, props);
return props;
}
);
var Command = _WULEED4Qcjs.forwardRef.call(void 0, function Command2(props) {
const htmlProps = useCommand(props);
return _WULEED4Qcjs.createElement.call(void 0, TagName, htmlProps);
});
exports.useCommand = useCommand; exports.Command = Command;