reakit
Version:
Toolkit for building accessible rich web apps with React
106 lines (95 loc) • 4.29 kB
JavaScript
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var _rollupPluginBabelHelpers = require('../_rollupPluginBabelHelpers-8f9a8751.js');
var createComponent = require('reakit-system/createComponent');
var createHook = require('reakit-system/createHook');
require('reakit-utils/shallowEqual');
var React = require('react');
require('reakit-utils/useForkRef');
require('reakit-utils/isButton');
require('reakit-warning');
var useLiveRef = require('reakit-utils/useLiveRef');
require('reakit-utils/isSelfTarget');
require('reakit-utils/useIsomorphicEffect');
require('reakit-utils/hasFocusWithin');
require('reakit-utils/isPortalEvent');
require('reakit-utils/dom');
require('reakit-utils/tabbable');
require('../Role/Role.js');
require('../Tabbable/Tabbable.js');
require('../Clickable/Clickable.js');
require('reakit-utils/getDocument');
require('../getCurrentId-eade2850.js');
require('../__keys-3b597476.js');
require('../userFocus-0afea51a.js');
require('reakit-utils/isTextField');
require('reakit-utils/ensureFocus');
require('../Id/IdProvider.js');
require('../Id/Id.js');
require('reakit-utils/fireEvent');
require('../setTextFieldValue-b0584ae1.js');
var Composite_CompositeItem = require('../Composite/CompositeItem.js');
var __keys = require('../__keys-f590d919.js');
function useTabPanelId(options) {
return React.useMemo(function () {
var _options$panels, _options$panels$find;
return ((_options$panels = options.panels) === null || _options$panels === void 0 ? void 0 : (_options$panels$find = _options$panels.find(function (panel) {
return panel.groupId === options.id;
})) === null || _options$panels$find === void 0 ? void 0 : _options$panels$find.id) || undefined;
}, [options.panels, options.id]);
}
var useTab = createHook.createHook({
name: "Tab",
compose: Composite_CompositeItem.useCompositeItem,
keys: __keys.TAB_KEYS,
useOptions: function useOptions(_ref) {
var _ref$focusable = _ref.focusable,
focusable = _ref$focusable === void 0 ? true : _ref$focusable,
options = _rollupPluginBabelHelpers._objectWithoutPropertiesLoose(_ref, ["focusable"]);
return _rollupPluginBabelHelpers._objectSpread2({
focusable: focusable
}, options);
},
useProps: function useProps(options, _ref2) {
var htmlOnClick = _ref2.onClick,
htmlOnFocus = _ref2.onFocus,
htmlProps = _rollupPluginBabelHelpers._objectWithoutPropertiesLoose(_ref2, ["onClick", "onFocus"]);
var selected = options.selectedId === options.id;
var tabPanelId = useTabPanelId(options);
var onClickRef = useLiveRef.useLiveRef(htmlOnClick);
var onFocusRef = useLiveRef.useLiveRef(htmlOnFocus);
var onClick = React.useCallback(function (event) {
var _onClickRef$current, _options$select;
(_onClickRef$current = onClickRef.current) === null || _onClickRef$current === void 0 ? void 0 : _onClickRef$current.call(onClickRef, event);
if (event.defaultPrevented) return;
if (options.disabled) return;
if (!options.id) return;
if (selected) return;
(_options$select = options.select) === null || _options$select === void 0 ? void 0 : _options$select.call(options, options.id);
}, [options.disabled, selected, options.select, options.id]);
var onFocus = React.useCallback(function (event) {
var _onFocusRef$current, _options$select2;
(_onFocusRef$current = onFocusRef.current) === null || _onFocusRef$current === void 0 ? void 0 : _onFocusRef$current.call(onFocusRef, event);
if (event.defaultPrevented) return;
if (options.disabled) return;
if (options.manual) return;
if (!options.id) return;
if (selected) return;
(_options$select2 = options.select) === null || _options$select2 === void 0 ? void 0 : _options$select2.call(options, options.id);
}, [options.id, options.disabled, options.manual, selected, options.select]);
return _rollupPluginBabelHelpers._objectSpread2({
role: "tab",
"aria-selected": selected,
"aria-controls": tabPanelId,
onClick: onClick,
onFocus: onFocus
}, htmlProps);
}
});
var Tab = createComponent.createComponent({
as: "button",
memo: true,
useHook: useTab
});
exports.Tab = Tab;
exports.useTab = useTab;