UNPKG

@ariakit/react-core

Version:

Ariakit React core

131 lines (112 loc) 4.62 kB
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); var _YAKNSXYIcjs = require('./YAKNSXYI.cjs'); var _WBFXWJUHcjs = require('./WBFXWJUH.cjs'); var _MZ2HG624cjs = require('./MZ2HG624.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 = _WBFXWJUHcjs.createHook.call(void 0, function useCommand2({ clickOnEnter = true, clickOnSpace = true, ...props }) { 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] = _MZ2HG624cjs.useMetadataProps.call(void 0, props, symbol, true); const onKeyDownProp = props.onKeyDown; const onKeyDown = _MZ2HG624cjs.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 { view, ...eventInit } = event; 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 = _MZ2HG624cjs.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 { view, ...eventInit } = event; queueMicrotask(() => _events.fireClickEvent.call(void 0, element, eventInit)); } } }); props = { "data-active": active || void 0, type: isNativeButton ? "button" : void 0, ...metadataProps, ...props, ref: _MZ2HG624cjs.useMergeRefs.call(void 0, ref, props.ref), onKeyDown, onKeyUp }; props = _YAKNSXYIcjs.useFocusable.call(void 0, props); return props; } ); var Command = _WBFXWJUHcjs.forwardRef.call(void 0, function Command2(props) { const htmlProps = useCommand(props); return _WBFXWJUHcjs.createElement.call(void 0, TagName, htmlProps); }); exports.useCommand = useCommand; exports.Command = Command;