UNPKG

8.22 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, '__esModule', { value: true });
4
5function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
6
7var slicedToArray = require('./slicedToArray-0711941d.js');
8require('./unsupportedIterableToArray-68db1d3b.js');
9var React = require('react');
10var React__default = _interopDefault(React);
11require('./_commonjsHelpers-72d386ba.js');
12var index = require('./index-b0606964.js');
13var defineProperty = require('./defineProperty-0921a47c.js');
14require('./toConsumableArray-d8a4a2c3.js');
15var _styled = require('styled-components');
16var _styled__default = _interopDefault(_styled);
17require('./getPrototypeOf-2a661a20.js');
18require('./color.js');
19require('./components.js');
20require('./contains-component.js');
21var css = require('./css.js');
22require('./dayjs.min-e07657bf.js');
23require('./date.js');
24require('./miscellaneous.js');
25var environment = require('./environment.js');
26require('./font.js');
27require('./math-f4029164.js');
28require('./characters.js');
29require('./format.js');
30var keycodes = require('./keycodes.js');
31require('./url.js');
32require('./web3.js');
33var constants = require('./constants.js');
34require('./breakpoints.js');
35require('./springs.js');
36var textStyles = require('./text-styles.js');
37require('./theme-dark.js');
38require('./theme-light.js');
39var Theme = require('./Theme.js');
40var _extends = require('./extends-40571110.js');
41var objectWithoutProperties = require('./objectWithoutProperties-35db8ab0.js');
42var FocusVisible = require('./FocusVisible.js');
43
44function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
45
46function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { defineProperty._defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
47
48function getElementProps(_ref) {
49 var element = _ref.element,
50 href = _ref.href,
51 disabled = _ref.disabled,
52 external = _ref.external;
53
54 // <button> (handles key events)
55 if (element === 'button') {
56 return ['button', {
57 type: 'button',
58 disabled: disabled
59 }];
60 } // <a href=""> (handles key events)
61
62
63 if (element === 'a' && href) {
64 return ['anchor', disabled ? {} : _objectSpread({
65 href: href,
66 rel: 'noopener noreferrer'
67 }, external ? {
68 target: '_blank'
69 } : {})];
70 } // <a> or <div> (doesn’t handle key events)
71
72
73 return ['basic', {
74 role: 'button',
75 tabIndex: disabled ? '-1' : '0'
76 }];
77}
78
79var _StyledButton = _styled__default("button").withConfig({
80 displayName: "ButtonBase___StyledButton",
81 componentId: "ur1q76-0"
82})(["position:relative;display:inline-block;padding:0;white-space:nowrap;", ";text-decoration:none;text-align:center;background:none;border-radius:", "px;border:0;outline:0;cursor:", ";", ";&::-moz-focus-inner{border:0;}&:focus:after{content:'';display:", ";position:absolute;top:", "px;left:", "px;right:", "px;bottom:", "px;border-radius:", "px;border:2px solid ", ";}"], function (p) {
83 return p._css;
84}, constants.RADIUS, function (p) {
85 return p._css2;
86}, function (p) {
87 return p._css3;
88}, function (p) {
89 return p._css4;
90}, function (p) {
91 return p._css5;
92}, function (p) {
93 return p._css6;
94}, function (p) {
95 return p._css7;
96}, function (p) {
97 return p._css8;
98}, function (p) {
99 return p._css9;
100}, function (p) {
101 return p._css10;
102});
103
104function ButtonBase(_ref2) {
105 var disabled = _ref2.disabled,
106 element = _ref2.element,
107 external = _ref2.external,
108 focusRingRadius = _ref2.focusRingRadius,
109 focusRingSpacing = _ref2.focusRingSpacing,
110 focusVisible = _ref2.focusVisible,
111 href = _ref2.href,
112 innerRef = _ref2.innerRef,
113 onClick = _ref2.onClick,
114 onKeyDown = _ref2.onKeyDown,
115 showFocusRing = _ref2.showFocusRing,
116 props = objectWithoutProperties._objectWithoutProperties(_ref2, ["disabled", "element", "external", "focusRingRadius", "focusRingSpacing", "focusVisible", "href", "innerRef", "onClick", "onKeyDown", "showFocusRing"]);
117
118 var theme = Theme.useTheme(); // `external` defaults to `true` if `href` is present, `false` otherwise.
119
120 if (external === undefined) {
121 external = Boolean(href);
122 }
123
124 if (typeof focusRingSpacing === 'number') {
125 focusRingSpacing = [focusRingSpacing, focusRingSpacing];
126 }
127
128 if (!element) {
129 element = href ? 'a' : 'button';
130 }
131
132 var _getElementProps = getElementProps({
133 element: element,
134 href: href,
135 disabled: disabled,
136 external: external
137 }),
138 _getElementProps2 = slicedToArray._slicedToArray(_getElementProps, 2),
139 elementType = _getElementProps2[0],
140 elementProps = _getElementProps2[1];
141
142 var handleKeyDown = React.useCallback(function (event) {
143 // Only applies to cases where the enter key is not handled already
144 if (elementType === 'basic' && event.keyCode === keycodes.KEY_ENTER && onClick) {
145 onClick();
146 } // Pass the event up
147
148
149 if (onKeyDown) {
150 onKeyDown(event);
151 }
152 }, [elementType, onClick, onKeyDown]);
153 return /*#__PURE__*/React__default.createElement(_StyledButton, _extends._extends({
154 as: element,
155 ref: innerRef,
156 onClick: disabled ? undefined : onClick,
157 onKeyDown: disabled ? undefined : handleKeyDown
158 }, elementProps, props, {
159 _css: textStyles.textStyle('body3'),
160 _css2: disabled ? 'default' : 'pointer',
161 _css3: elementType === 'basic' ? css.unselectable : '',
162 _css4: focusVisible && showFocusRing ? 'block' : 'none',
163 _css5: -focusRingSpacing[1],
164 _css6: -focusRingSpacing[0],
165 _css7: -focusRingSpacing[0],
166 _css8: -focusRingSpacing[1],
167 _css9: focusRingRadius,
168 _css10: theme.focus
169 }));
170}
171
172ButtonBase.propTypes = {
173 disabled: index.PropTypes.bool,
174 external: index.PropTypes.bool,
175 focusRingRadius: index.PropTypes.number,
176 focusRingSpacing: index.PropTypes.oneOfType([index.PropTypes.number, index.PropTypes.arrayOf(index.PropTypes.number)]),
177 focusVisible: index.PropTypes.bool,
178 href: index.PropTypes.string,
179 innerRef: index.PropTypes.any,
180 onClick: index.PropTypes.func,
181 onKeyDown: index.PropTypes.func,
182 showFocusRing: index.PropTypes.bool,
183 element: index.PropTypes.oneOf(['button', 'div', 'a'])
184};
185ButtonBase.defaultProps = {
186 disabled: false,
187 focusRingRadius: 0,
188 focusRingSpacing: 0,
189 showFocusRing: true
190};
191var ButtonBaseWithFocus = React__default.forwardRef(function (_ref3, ref) {
192 var onFocusProp = _ref3.onFocus,
193 props = objectWithoutProperties._objectWithoutProperties(_ref3, ["onFocus"]);
194
195 return /*#__PURE__*/React__default.createElement(FocusVisible.default, null, function (_ref4) {
196 var focusVisible = _ref4.focusVisible,
197 onFocus = _ref4.onFocus;
198
199 // support external onFocus handlers
200 var handleFocus = function handleFocus(event) {
201 if (onFocusProp) {
202 onFocusProp(event);
203 }
204
205 onFocus(event);
206 };
207
208 return /*#__PURE__*/React__default.createElement(ButtonBase, _extends._extends({
209 innerRef: ref,
210 onFocus: handleFocus,
211 focusVisible: focusVisible
212 }, props));
213 });
214});
215ButtonBaseWithFocus.propTypes = _objectSpread({}, ButtonBase.propTypes, {
216 onFocus: index.PropTypes.func
217});
218var LinkBase = React__default.forwardRef(function (props, ref) {
219 environment.warnOnce('LinkBase', 'LinkBase is deprecated: please use ButtonBase with a href prop instead.');
220 return /*#__PURE__*/React__default.createElement(ButtonBase, _extends._extends({
221 ref: ref
222 }, props));
223});
224
225exports.LinkBase = LinkBase;
226exports.default = ButtonBaseWithFocus;
227//# sourceMappingURL=ButtonBase.js.map