1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- "use strict";
-
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
-
- exports.__esModule = true;
- exports.default = void 0;
-
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
-
- var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
-
- var _react = _interopRequireDefault(require("react"));
-
- var _createChainedFunction = _interopRequireDefault(require("./utils/createChainedFunction"));
-
- function isTrivialHref(href) {
- return !href || href.trim() === '#';
- }
- /**
- * There are situations due to browser quirks or Bootstrap CSS where
- * an anchor tag is needed, when semantically a button tag is the
- * better choice. SafeAnchor ensures that when an anchor is used like a
- * button its accessible. It also emulates input `disabled` behavior for
- * links, which is usually desirable for Buttons, NavItems, DropdownItems, etc.
- */
-
-
- var SafeAnchor = _react.default.forwardRef(function (_ref, ref) {
- var _ref$as = _ref.as,
- Component = _ref$as === void 0 ? 'a' : _ref$as,
- disabled = _ref.disabled,
- onKeyDown = _ref.onKeyDown,
- props = (0, _objectWithoutPropertiesLoose2.default)(_ref, ["as", "disabled", "onKeyDown"]);
-
- var handleClick = function handleClick(event) {
- var href = props.href,
- onClick = props.onClick;
-
- if (disabled || isTrivialHref(href)) {
- event.preventDefault();
- }
-
- if (disabled) {
- event.stopPropagation();
- return;
- }
-
- if (onClick) {
- onClick(event);
- }
- };
-
- var handleKeyDown = function handleKeyDown(event) {
- if (event.key === ' ') {
- event.preventDefault();
- handleClick(event);
- }
- };
-
- if (isTrivialHref(props.href)) {
- props.role = props.role || 'button'; // we want to make sure there is a href attribute on the node
- // otherwise, the cursor incorrectly styled (except with role='button')
-
- props.href = props.href || '#';
- }
-
- if (disabled) {
- props.tabIndex = -1;
- props['aria-disabled'] = true;
- }
-
- return _react.default.createElement(Component, (0, _extends2.default)({
- ref: ref
- }, props, {
- onClick: handleClick,
- onKeyDown: (0, _createChainedFunction.default)(handleKeyDown, onKeyDown)
- }));
- });
-
- SafeAnchor.displayName = 'SafeAnchor';
- var _default = SafeAnchor;
- exports.default = _default;
- module.exports = exports["default"];
|