UNPKG

15.3 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');
13require('./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');
21require('./css.js');
22require('./dayjs.min-e07657bf.js');
23require('./date.js');
24require('./miscellaneous.js');
25require('./environment.js');
26require('./font.js');
27require('./math-f4029164.js');
28require('./characters.js');
29require('./format.js');
30require('./keycodes.js');
31require('./url.js');
32require('./web3.js');
33var constants = require('./constants.js');
34require('./breakpoints.js');
35var springs = require('./springs.js');
36require('./text-styles.js');
37require('./theme-dark.js');
38require('./theme-light.js');
39var Theme = require('./Theme.js');
40require('./extends-40571110.js');
41require('./objectWithoutProperties-35db8ab0.js');
42require('./index-ecc57c9f.js');
43require('./FocusVisible.js');
44var ButtonBase = require('./ButtonBase.js');
45require('./IconPropTypes-56de5759.js');
46require('./IconAddUser.js');
47require('./IconAlert.js');
48require('./IconAlignCenter.js');
49require('./IconAlignJustify.js');
50require('./IconAlignLeft.js');
51require('./IconAlignRight.js');
52require('./IconAragon.js');
53require('./IconArrowDown.js');
54require('./IconArrowLeft.js');
55require('./IconArrowRight.js');
56require('./IconArrowUp.js');
57require('./IconAtSign.js');
58require('./IconBlock.js');
59require('./IconBookmark.js');
60require('./IconCalendar.js');
61require('./IconCanvas.js');
62require('./IconCaution.js');
63require('./IconCenter.js');
64require('./IconChart.js');
65require('./IconChat.js');
66require('./IconCheck.js');
67require('./IconChip.js');
68require('./IconCircleCheck.js');
69require('./IconCircleMinus.js');
70require('./IconCirclePlus.js');
71require('./IconClock.js');
72require('./IconCloudDownload.js');
73require('./IconCloudUpload.js');
74require('./IconCoin.js');
75require('./IconConfiguration.js');
76require('./IconConnect.js');
77require('./IconConnection.js');
78require('./IconConsole.js');
79require('./IconCopy.js');
80require('./IconCross.js');
81require('./IconDashedSquare.js');
82var IconDown = require('./IconDown.js');
83require('./IconDownload.js');
84require('./IconEdit.js');
85var IconEllipsis = require('./IconEllipsis.js');
86require('./IconEnter.js');
87require('./IconEthereum.js');
88require('./IconExternal.js');
89require('./IconFile.js');
90require('./IconFilter.js');
91require('./IconFlag.js');
92require('./IconFolder.js');
93require('./IconGraph2.js');
94require('./IconGraph.js');
95require('./IconGrid.js');
96require('./IconGroup.js');
97require('./IconHash.js');
98require('./IconHeart.js');
99require('./IconHide.js');
100require('./IconHome.js');
101require('./IconImage.js');
102require('./IconInfo.js');
103require('./IconLabel.js');
104require('./IconLayers.js');
105require('./IconLeft.js');
106require('./IconLink.js');
107require('./IconLocation.js');
108require('./IconLock.js');
109require('./IconMail.js');
110require('./IconMaximize.js');
111require('./IconMenu.js');
112require('./IconMinimize.js');
113require('./IconMinus.js');
114require('./IconMove.js');
115require('./IconNoPicture.js');
116require('./IconPicture.js');
117require('./IconPlus.js');
118require('./IconPower.js');
119require('./IconPrint.js');
120require('./IconProhibited.js');
121require('./IconQuestion.js');
122require('./IconRefresh.js');
123require('./IconRemoveUser.js');
124require('./IconRight.js');
125require('./IconRotateLeft.js');
126require('./IconRotateRight.js');
127require('./IconSearch.js');
128require('./IconSettings.js');
129require('./IconShare.js');
130require('./IconSquareMinus.js');
131require('./IconSquarePlus.js');
132require('./IconSquare.js');
133require('./IconStarFilled.js');
134require('./IconStar.js');
135require('./IconSwap.js');
136require('./IconTarget.js');
137require('./IconToken.js');
138require('./IconTrash.js');
139require('./IconUnlock.js');
140require('./IconUp.js');
141require('./IconUpload.js');
142require('./IconUser.js');
143require('./IconView.js');
144require('./IconVote.js');
145require('./IconWallet.js');
146require('./IconWarning.js');
147require('./IconWorld.js');
148require('./IconWrite.js');
149require('./IconZoomIn.js');
150require('./IconZoomOut.js');
151require('./objectWithoutPropertiesLoose-1af20ad0.js');
152var ReactDOM = _interopDefault(require('react-dom'));
153var web = require('./web-d0294535.js');
154require('./_react_commonjs-external-bf8fc71c.js');
155
156var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
157
158function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
159
160function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
161
162function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
163
164
165
166
167var ClickOutComponent = function (_React$Component) {
168 _inherits(ClickOutComponent, _React$Component);
169
170 function ClickOutComponent() {
171 _classCallCheck(this, ClickOutComponent);
172
173 return _possibleConstructorReturn(this, (ClickOutComponent.__proto__ || Object.getPrototypeOf(ClickOutComponent)).call(this));
174 }
175
176 _createClass(ClickOutComponent, [{
177 key: 'componentDidMount',
178 value: function componentDidMount() {
179 var self = this;
180 var elTouchIsClick = true;
181 var documentTouchIsClick = true;
182 var el = ReactDOM.findDOMNode(this);
183
184 self.__documentTouchStarted = function (e) {
185 el.removeEventListener('click', self.__elementClicked);
186 document.removeEventListener('click', self.__documentClicked);
187 };
188
189 self.__documentTouchMoved = function (e) {
190 documentTouchIsClick = false;
191 };
192
193 self.__documentTouchEnded = function (e) {
194 if (documentTouchIsClick) self.__documentClicked(e);
195 documentTouchIsClick = true;
196 };
197
198 self.__documentClicked = function (e) {
199 if ((e.__clickedElements || []).indexOf(el) !== -1) return;
200
201 var clickOutHandler = self.onClickOut || self.props.onClickOut;
202 if (!clickOutHandler) {
203 return console.warn('onClickOut is not defined.');
204 }
205
206 clickOutHandler.call(self, e);
207 };
208
209 self.__elementTouchMoved = function (e) {
210 elTouchIsClick = false;
211 };
212
213 self.__elementTouchEnded = function (e) {
214 if (elTouchIsClick) self.__elementClicked(e);
215 elTouchIsClick = true;
216 };
217
218 self.__elementClicked = function (e) {
219 e.__clickedElements = e.__clickedElements || [];
220 e.__clickedElements.push(el);
221 };
222
223 setTimeout(function () {
224 if (self.__unmounted) return;
225 self.toggleListeners('addEventListener');
226 }, 0);
227 }
228 }, {
229 key: 'toggleListeners',
230 value: function toggleListeners(listenerMethod) {
231 var el = ReactDOM.findDOMNode(this);
232
233 el[listenerMethod]('touchmove', this.__elementTouchMoved);
234 el[listenerMethod]('touchend', this.__elementTouchEnded);
235 el[listenerMethod]('click', this.__elementClicked);
236
237 document[listenerMethod]('touchstart', this.__documentTouchStarted);
238 document[listenerMethod]('touchmove', this.__documentTouchMoved);
239 document[listenerMethod]('touchend', this.__documentTouchEnded);
240 document[listenerMethod]('click', this.__documentClicked);
241 }
242 }, {
243 key: 'componentWillUnmount',
244 value: function componentWillUnmount() {
245 this.toggleListeners('removeEventListener');
246 this.__unmounted = true;
247 }
248 }, {
249 key: 'render',
250 value: function render() {
251 return Array.isArray(this.props.children) ? React__default.createElement(
252 'div',
253 null,
254 this.props.children
255 ) : React__default.Children.only(this.props.children);
256 }
257 }]);
258
259 return ClickOutComponent;
260}(React__default.Component);
261
262var reactOnclickout = ClickOutComponent;
263
264var BASE_WIDTH = 46;
265var BASE_HEIGHT = 32;
266
267var _StyledIconEllipsis = _styled__default(IconEllipsis.default).withConfig({
268 displayName: "ContextMenu___StyledIconEllipsis",
269 componentId: "ris724-0"
270})([""]);
271
272var _StyledIconDown = _styled__default(IconDown.default).withConfig({
273 displayName: "ContextMenu___StyledIconDown",
274 componentId: "ris724-1"
275})(["color:", ";"], function (p) {
276 return p._css7;
277});
278
279var _StyledAnimatedDiv = _styled__default(web.extendedAnimated.div).withConfig({
280 displayName: "ContextMenu___StyledAnimatedDiv",
281 componentId: "ris724-2"
282})(["z-index:", ";overflow:hidden;position:absolute;top:", "px;right:0;background:", ";border:1px solid ", ";border-radius:3px 0 3px 3px;"], function (p) {
283 return p._css8;
284}, function (p) {
285 return p._css9;
286}, function (p) {
287 return p._css10;
288}, function (p) {
289 return p._css11;
290});
291
292var _StyledDiv = _styled__default("div").withConfig({
293 displayName: "ContextMenu___StyledDiv",
294 componentId: "ris724-3"
295})(["z-index:", ";position:absolute;bottom:0;right:1px;height:1px;width:", "px;background:", ";"], function (p) {
296 return p._css12;
297}, function (p) {
298 return p._css13;
299}, function (p) {
300 return p._css14;
301});
302
303function ContextMenu(_ref) {
304 var children = _ref.children,
305 zIndex = _ref.zIndex,
306 disabled = _ref.disabled;
307 var theme = Theme.useTheme();
308
309 var _useState = React.useState(false),
310 _useState2 = slicedToArray._slicedToArray(_useState, 2),
311 opened = _useState2[0],
312 setOpened = _useState2[1];
313
314 var handleClose = React.useCallback(function () {
315 setOpened(false);
316 }, []);
317 var handleBaseButtonClick = React.useCallback(function () {
318 setOpened(function (opened) {
319 return !opened;
320 });
321 }, []); // Increase the z-index on an opened menu, to make sure it's above any other
322 // context menus below it using the same z-index (e.g. when used in a list)
323
324 var appliedZIndex = opened ? zIndex + 1 : zIndex;
325 return /*#__PURE__*/React__default.createElement(reactOnclickout, {
326 onClickOut: handleClose
327 }, /*#__PURE__*/React__default.createElement(web.Spring, {
328 config: springs.springs.smooth,
329 to: {
330 openProgress: Number(opened)
331 },
332 native: true
333 }, function (_ref2) {
334 var openProgress = _ref2.openProgress;
335 return /*#__PURE__*/React__default.createElement(_StyledMain, {
336 style: {
337 boxShadow: openProgress.interpolate(function (t) {
338 return "0 4px 4px rgba(0, 0, 0, ".concat(t * 0.03, ")");
339 })
340 },
341 _css: appliedZIndex
342 }, /*#__PURE__*/React__default.createElement(_StyledButton, {
343 onClick: handleBaseButtonClick,
344 opened: opened,
345 disabled: disabled,
346 focusRingRadius: constants.RADIUS,
347 _css2: disabled ? theme.disabledContent : opened ? theme.accent : theme.surfaceContent,
348 _css3: disabled ? theme.disabled : theme.surface,
349 _css4: disabled ? '0' : "1px solid ".concat(theme.border),
350 _css5: opened ? theme.surface : theme.border,
351 _css6: disabled ? '' : "&:active {\n background: ".concat(theme.surfacePressed, ";\n border-bottom-color: ").concat(opened ? theme.surfacePressed : theme.border, ";\n }")
352 }, /*#__PURE__*/React__default.createElement(_StyledIconEllipsis, null), /*#__PURE__*/React__default.createElement(web.extendedAnimated.div, {
353 style: {
354 display: 'flex',
355 alignItems: 'center',
356 transformOrigin: '50% 50%',
357 transform: openProgress.interpolate(function (v) {
358 return "rotate(".concat(v * 180, "deg)");
359 })
360 }
361 }, /*#__PURE__*/React__default.createElement(_StyledIconDown, {
362 size: "tiny",
363 _css7: disabled ? theme.disabledIcon : theme.surfaceIcon
364 }))), opened && /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(_StyledAnimatedDiv, {
365 onClick: handleClose,
366 style: {
367 opacity: openProgress,
368 boxShadow: openProgress.interpolate(function (t) {
369 return "0 4px 4px rgba(0, 0, 0, ".concat(t * 0.03, ")");
370 })
371 },
372 _css8: appliedZIndex + 1,
373 _css9: BASE_HEIGHT - 1,
374 _css10: theme.surface,
375 _css11: theme.border
376 }, children), /*#__PURE__*/React__default.createElement(_StyledDiv, {
377 _css12: appliedZIndex + 1,
378 _css13: BASE_WIDTH - 2,
379 _css14: theme.surface
380 })));
381 }));
382}
383
384ContextMenu.propTypes = {
385 children: index.PropTypes.node,
386 zIndex: index.PropTypes.number,
387 disabled: index.PropTypes.bool
388};
389ContextMenu.defaultProps = {
390 zIndex: 0,
391 disabled: false
392};
393var Main = _styled__default(web.extendedAnimated.div).withConfig({
394 displayName: "ContextMenu__Main",
395 componentId: "ris724-4"
396})(["position:relative;width:", "px;height:", "px;"], BASE_WIDTH, BASE_HEIGHT);
397
398var _StyledMain = _styled__default(Main).withConfig({
399 displayName: "ContextMenu___StyledMain",
400 componentId: "ris724-5"
401})(["z-index:", ";"], function (p) {
402 return p._css;
403});
404
405var Button = _styled__default(ButtonBase.default).withConfig({
406 displayName: "ContextMenu__Button",
407 componentId: "ris724-6"
408})(["display:flex;justify-content:center;align-items:center;width:100%;height:", "px;border-radius:", ";box-shadow:", ";"], BASE_HEIGHT, function (_ref3) {
409 var opened = _ref3.opened;
410 return opened ? "".concat(constants.RADIUS, "px ").concat(constants.RADIUS, "px 0 0") : "".concat(constants.RADIUS, "px");
411}, function (_ref4) {
412 var disabled = _ref4.disabled;
413 return disabled ? 'none' : "0px 1px 3px rgba(0, 0, 0, 0.1)";
414});
415
416var _StyledButton = _styled__default(Button).withConfig({
417 displayName: "ContextMenu___StyledButton",
418 componentId: "ris724-7"
419})(["color:", ";background:", ";border:", ";border-bottom-color:", ";", ""], function (p) {
420 return p._css2;
421}, function (p) {
422 return p._css3;
423}, function (p) {
424 return p._css4;
425}, function (p) {
426 return p._css5;
427}, function (p) {
428 return p._css6;
429});
430
431exports.default = ContextMenu;
432//# sourceMappingURL=ContextMenu.js.map