UNPKG

curls

Version:

💪 Responsive, expressive UI primitives for React written with Style Hooks and Emotion

111 lines (93 loc) • 2.8 kB
'use strict' exports.__esModule = true exports.default = exports.useAriaPopupToggle = void 0 var _react = _interopRequireWildcard(require('react')) var _passiveLayoutEffect = _interopRequireDefault( require('@react-hook/passive-layout-effect') ) var _mergedRef = _interopRequireDefault(require('@react-hook/merged-ref')) var _core = require('@style-hooks/core') var _Button = require('./Button') function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : {default: obj} } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj } else { var newObj = {} if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {} if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc) } else { newObj[key] = obj[key] } } } } newObj.default = obj return newObj } } function _extends() { _extends = Object.assign || function(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key] } } } return target } return _extends.apply(this, arguments) } const useAriaPopupToggle = (props, context) => { const focusRef = (0, _react.useRef)(null) const seen = (0, _react.useRef)(false) ;(0, _passiveLayoutEffect.default)(() => { if (context.isOpen === false) { if (seen.current === true) focusRef.current.focus() seen.current = true } }, [context.isOpen]) const nextProps = _extends( { tabIndex: 0, 'aria-controls': context.id, 'aria-haspopup': 'true', 'aria-expanded': String(context.isOpen), ref: focusRef, }, props ) nextProps.onClick = () => { var _props$onClick props === null || props === void 0 ? void 0 : (_props$onClick = props.onClick) === null || _props$onClick === void 0 ? void 0 : _props$onClick.call(props) context.toggle() } return nextProps } exports.useAriaPopupToggle = useAriaPopupToggle var _default = (name, useContext) => { const useStylesHook = (0, _core.createStyleHook)(name, {}) return _react.default.forwardRef((props, ref) => { const nextProps = useStylesHook(useAriaPopupToggle(props, useContext())) nextProps.ref = (0, _mergedRef.default)(ref, nextProps.ref) return (0, _core.createElement)(_Button.Button, nextProps) }) } exports.default = _default