UNPKG

8.63 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
7require('./slicedToArray-ef426d0f.js');
8require('./unsupportedIterableToArray-8a00e599.js');
9var React = require('react');
10var React__default = _interopDefault(React);
11require('./_commonjsHelpers-72d386ba.js');
12var index = require('./index-b0606964.js');
13var defineProperty$1 = require('./defineProperty-0921a47c.js');
14var toConsumableArray = require('./toConsumableArray-7f36359f.js');
15var _styled = require('styled-components');
16var _styled__default = _interopDefault(_styled);
17var getPrototypeOf = require('./getPrototypeOf-e2d1e599.js');
18require('./color.js');
19require('./components.js');
20require('./contains-component.js');
21var css = require('./css.js');
22require('./dayjs.min-aa59a48e.js');
23require('./date.js');
24var miscellaneous = require('./miscellaneous.js');
25require('./environment.js');
26var font = require('./font.js');
27require('./math-ecfd5d91.js');
28require('./characters.js');
29require('./format.js');
30require('./keycodes.js');
31require('./url.js');
32require('./web3.js');
33require('./theme-dark.js');
34require('./theme-light.js');
35var Theme = require('./Theme.js');
36
37function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = getPrototypeOf._getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = getPrototypeOf._getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return getPrototypeOf._possibleConstructorReturn(this, result); }; }
38
39function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
40
41var TabBar = /*#__PURE__*/function (_React$Component) {
42 getPrototypeOf._inherits(TabBar, _React$Component);
43
44 var _super = _createSuper(TabBar);
45
46 function TabBar() {
47 var _this;
48
49 getPrototypeOf._classCallCheck(this, TabBar);
50
51 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
52 args[_key] = arguments[_key];
53 }
54
55 _this = _super.call.apply(_super, [this].concat(args));
56
57 defineProperty$1._defineProperty(getPrototypeOf._assertThisInitialized(_this), "state", {
58 displayFocusRing: false
59 });
60
61 defineProperty$1._defineProperty(getPrototypeOf._assertThisInitialized(_this), "_barRef", /*#__PURE__*/React__default.createRef());
62
63 defineProperty$1._defineProperty(getPrototypeOf._assertThisInitialized(_this), "handleMouseDown", function () {
64 _this.disableFocusRing();
65 });
66
67 defineProperty$1._defineProperty(getPrototypeOf._assertThisInitialized(_this), "handleKeydown", function (_ref) {
68 var key = _ref.key;
69
70 if (key === 'Enter') {
71 _this.selectElement(document.activeElement);
72
73 _this.enableFocusRing();
74 }
75
76 if (key === 'Tab') {
77 _this.enableFocusRing();
78 }
79 });
80
81 defineProperty$1._defineProperty(getPrototypeOf._assertThisInitialized(_this), "handleTabMouseDown", function (_ref2) {
82 var currentTarget = _ref2.currentTarget;
83
84 // We would usually avoid using the DOM when possible, and prefer using a
85 // separate component (`Tab`) to keep the `index` in a prop, then pass it
86 // using an event prop. But since `this.selectElement()` is needed (so we
87 // can pass `document.activeElement` to it for the keyboard), and we have
88 // `e.currentTarget` in the event object, we might as well use it for the
89 // pointer device too.
90 _this.selectElement(currentTarget);
91 });
92
93 return _this;
94 }
95
96 getPrototypeOf._createClass(TabBar, [{
97 key: "componentDidMount",
98 value: function componentDidMount() {
99 document.addEventListener('keydown', this.handleKeydown);
100 }
101 }, {
102 key: "componentWillUnmount",
103 value: function componentWillUnmount() {
104 document.removeEventListener('keydown', this.handleKeydown);
105 }
106 }, {
107 key: "enableFocusRing",
108 value: function enableFocusRing() {
109 this.setState({
110 displayFocusRing: true
111 });
112 }
113 }, {
114 key: "disableFocusRing",
115 value: function disableFocusRing() {
116 this.setState({
117 displayFocusRing: false
118 });
119 }
120 }, {
121 key: "selectElement",
122 value: function selectElement(element) {
123 var onChange = this.props.onChange;
124
125 if (!element || !this._barRef.current) {
126 return;
127 }
128
129 var index = toConsumableArray._toConsumableArray(this._barRef.current.childNodes).indexOf(element);
130
131 if (index === -1) {
132 return;
133 }
134
135 onChange(index);
136 }
137 }, {
138 key: "render",
139 value: function render() {
140 var _this2 = this;
141
142 var displayFocusRing = this.state.displayFocusRing;
143 var _this$props = this.props,
144 items = _this$props.items,
145 selected = _this$props.selected,
146 inAppBar = _this$props.inAppBar;
147 return /*#__PURE__*/React__default.createElement("nav", {
148 onMouseDown: this.handleMouseDown
149 }, /*#__PURE__*/React__default.createElement(Bar, {
150 ref: this._barRef,
151 border: !inAppBar
152 }, items.map(function (item, i) {
153 return /*#__PURE__*/React__default.createElement(Tab, {
154 key: i,
155 tabIndex: "0",
156 selected: i === selected,
157 focusRing: displayFocusRing,
158 onMouseDown: _this2.handleTabMouseDown
159 }, /*#__PURE__*/React__default.createElement(Label, {
160 selected: i === selected
161 }, item), displayFocusRing && /*#__PURE__*/React__default.createElement(FocusRing, null));
162 })));
163 }
164 }]);
165
166 return TabBar;
167}(React__default.Component);
168/* eslint-disable react/prop-types */
169
170
171defineProperty$1._defineProperty(TabBar, "propTypes", {
172 items: index.PropTypes.arrayOf(index.PropTypes.node).isRequired,
173 selected: index.PropTypes.number,
174 onChange: index.PropTypes.func,
175 inAppBar: index.PropTypes.bool
176});
177
178defineProperty$1._defineProperty(TabBar, "defaultProps", {
179 selected: 0,
180 onChange: miscellaneous.noop
181});
182
183var _StyledUl = _styled__default("ul").withConfig({
184 displayName: "TabBarLegacy___StyledUl",
185 componentId: "sc-1hufqys-0"
186})(["display:flex;border-bottom:", ";"], function (p) {
187 return p._css;
188});
189
190function Bar(_ref3) {
191 var children = _ref3.children,
192 border = _ref3.border;
193 var theme = Theme.useTheme();
194 return /*#__PURE__*/React__default.createElement(_StyledUl, {
195 _css: border ? "1px solid ".concat(theme.border) : '0'
196 }, children);
197}
198
199var _StyledSpan = _styled__default("span").withConfig({
200 displayName: "TabBarLegacy___StyledSpan",
201 componentId: "sc-1hufqys-1"
202})(["display:none;position:absolute;top:-5px;left:-5px;right:-5px;bottom:-5px;border:2px solid ", ";border-radius:2px;"], function (p) {
203 return p._css2;
204});
205
206function FocusRing(_ref4) {
207 var children = _ref4.children;
208 var theme = Theme.useTheme();
209 return /*#__PURE__*/React__default.createElement(_StyledSpan, {
210 className: "TabBarLegacy-FocusRing",
211 _css2: theme.accent
212 }, children);
213}
214
215var _StyledLi = _styled__default("li").withConfig({
216 displayName: "TabBarLegacy___StyledLi",
217 componentId: "sc-1hufqys-2"
218})(["position:relative;list-style:none;padding:0 30px;cursor:pointer;", ";", ";&:focus{outline:0;.TabBarLegacy-FocusRing{display:block;}}"], function (p) {
219 return p._css3;
220}, function (p) {
221 return p._css4;
222});
223
224function Tab(_ref5) {
225 var children = _ref5.children,
226 selected = _ref5.selected;
227 return /*#__PURE__*/React__default.createElement(_StyledLi, {
228 _css3: font.font({
229 weight: selected ? 'bold' : 'normal',
230 deprecationNotice: false
231 }),
232 _css4: css.unselectable()
233 }, children);
234}
235
236var _StyledSpan2 = _styled__default("span").withConfig({
237 displayName: "TabBarLegacy___StyledSpan2",
238 componentId: "sc-1hufqys-3"
239})(["display:flex;margin-bottom:-1px;padding:5px 0 3px;border-bottom:4px solid ", ";"], function (p) {
240 return p._css5;
241});
242
243function Label(_ref6) {
244 var children = _ref6.children,
245 selected = _ref6.selected;
246 var theme = Theme.useTheme();
247 return /*#__PURE__*/React__default.createElement(_StyledSpan2, {
248 _css5: selected ? theme.accent : 'transparent'
249 }, children);
250}
251
252exports.default = TabBar;
253//# sourceMappingURL=TabBarLegacy.js.map