UNPKG

15.4 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-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');
14require('./toConsumableArray-7f36359f.js');
15var _styled = require('styled-components');
16var _styled__default = _interopDefault(_styled);
17require('./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');
24require('./miscellaneous.js');
25var environment = require('./environment.js');
26require('./font.js');
27require('./math-ecfd5d91.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');
35var springs = require('./springs.js');
36var textStyles = require('./text-styles.js');
37require('./theme-dark.js');
38require('./theme-light.js');
39var Theme = require('./Theme.js');
40var _extends$1 = require('./extends-40571110.js');
41var objectWithoutProperties = require('./objectWithoutProperties-35db8ab0.js');
42var index$1 = require('./index-ecc57c9f.js');
43require('./isObject-52908731.js');
44var Viewport = require('./Viewport-fe2db97a.js');
45require('./Layout.js');
46require('./FocusVisible.js');
47require('./ButtonBase.js');
48require('./IconPropTypes-086fd371.js');
49require('./IconAddUser.js');
50require('./IconAlert.js');
51require('./IconAlignCenter.js');
52require('./IconAlignJustify.js');
53require('./IconAlignLeft.js');
54require('./IconAlignRight.js');
55require('./IconAragon.js');
56require('./IconArrowDown.js');
57require('./IconArrowLeft.js');
58require('./IconArrowRight.js');
59require('./IconArrowUp.js');
60require('./IconAtSign.js');
61require('./IconBlock.js');
62require('./IconBookmark.js');
63require('./IconCalendar.js');
64require('./IconCanvas.js');
65require('./IconCaution.js');
66require('./IconCenter.js');
67require('./IconChart.js');
68require('./IconChat.js');
69require('./IconCheck.js');
70require('./IconChip.js');
71require('./IconCircleCheck.js');
72require('./IconCircleMinus.js');
73require('./IconCirclePlus.js');
74require('./IconClock.js');
75require('./IconCloudDownload.js');
76require('./IconCloudUpload.js');
77require('./IconCoin.js');
78require('./IconConfiguration.js');
79require('./IconConnect.js');
80require('./IconConnection.js');
81require('./IconConsole.js');
82require('./IconCopy.js');
83var IconCross = require('./IconCross.js');
84require('./IconDashedSquare.js');
85require('./IconDown.js');
86require('./IconDownload.js');
87require('./IconEdit.js');
88require('./IconEllipsis.js');
89require('./IconEnter.js');
90require('./IconEthereum.js');
91require('./IconExternal.js');
92require('./IconFile.js');
93require('./IconFilter.js');
94require('./IconFlag.js');
95require('./IconFolder.js');
96require('./IconGraph2.js');
97require('./IconGraph.js');
98require('./IconGrid.js');
99require('./IconGroup.js');
100require('./IconHash.js');
101require('./IconHeart.js');
102require('./IconHide.js');
103require('./IconHome.js');
104require('./IconImage.js');
105require('./IconInfo.js');
106require('./IconLabel.js');
107require('./IconLayers.js');
108require('./IconLeft.js');
109require('./IconLink.js');
110require('./IconLocation.js');
111require('./IconLock.js');
112require('./IconMail.js');
113require('./IconMaximize.js');
114require('./IconMenu.js');
115require('./IconMinimize.js');
116require('./IconMinus.js');
117require('./IconMove.js');
118require('./IconNoPicture.js');
119require('./IconPicture.js');
120require('./IconPlus.js');
121require('./IconPower.js');
122require('./IconPrint.js');
123require('./IconProhibited.js');
124require('./IconQuestion.js');
125require('./IconRefresh.js');
126require('./IconRemoveUser.js');
127require('./IconRight.js');
128require('./IconRotateLeft.js');
129require('./IconRotateRight.js');
130require('./IconSearch.js');
131require('./IconSettings.js');
132require('./IconShare.js');
133require('./IconSquareMinus.js');
134require('./IconSquarePlus.js');
135require('./IconSquare.js');
136require('./IconStarFilled.js');
137require('./IconStar.js');
138require('./IconSwap.js');
139require('./IconTarget.js');
140require('./IconToken.js');
141require('./IconTrash.js');
142require('./IconUnlock.js');
143require('./IconUp.js');
144require('./IconUpload.js');
145require('./IconUser.js');
146require('./IconView.js');
147require('./IconVote.js');
148require('./IconWallet.js');
149require('./IconWarning.js');
150require('./IconWorld.js');
151require('./IconWrite.js');
152require('./IconZoomIn.js');
153require('./IconZoomOut.js');
154require('./objectWithoutPropertiesLoose-1af20ad0.js');
155require('react-dom');
156var web = require('./web-d0294535.js');
157require('./Button.js');
158var ButtonIcon = require('./ButtonIcon.js');
159require('./index-5aaa52c3.js');
160var RootPortal = require('./RootPortal.js');
161
162function 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; }
163
164function _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$1._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; }
165var CONTENT_PADDING = 3 * constants.GU; // The closing position of the panel, on the right side of the viewport.
166// It takes into consideration the shadow of the panel.
167
168var CLOSING_POSITION = 5 * constants.GU;
169var SidePanelContext = React__default.createContext(null);
170
171var _StyledDiv = _styled__default("div").withConfig({
172 displayName: "SidePanel___StyledDiv",
173 componentId: "sc-1kjx6mk-0"
174})(["position:absolute;z-index:1;top:0;left:0;right:0;bottom:0;pointer-events:", ";overflow:hidden;"], function (p) {
175 return p._css;
176});
177
178var _StyledAnimatedDiv = _styled__default(web.extendedAnimated.div).withConfig({
179 displayName: "SidePanel___StyledAnimatedDiv",
180 componentId: "sc-1kjx6mk-1"
181})(["position:absolute;top:0;left:0;right:0;bottom:0;background:", ";"], function (p) {
182 return p._css2;
183});
184
185var _StyledHeader = _styled__default("header").withConfig({
186 displayName: "SidePanel___StyledHeader",
187 componentId: "sc-1kjx6mk-2"
188})(["display:flex;flex-direction:column;justify-content:center;flex-shrink:0;position:relative;height:", "px;padding-left:", "px;border-bottom:1px solid ", ";", ";"], function (p) {
189 return p._css3;
190}, CONTENT_PADDING, function (p) {
191 return p._css4;
192}, function (p) {
193 return p._css5;
194});
195
196var _StyledH = _styled__default("h1").withConfig({
197 displayName: "SidePanel___StyledH",
198 componentId: "sc-1kjx6mk-3"
199})(["color:", ";", ";"], function (p) {
200 return p._css6;
201}, function (p) {
202 return p._css7;
203});
204
205var _StyledButtonIcon = _styled__default(ButtonIcon.default).withConfig({
206 displayName: "SidePanel___StyledButtonIcon",
207 componentId: "sc-1kjx6mk-4"
208})(["position:absolute;", ""], function (p) {
209 return p._css8;
210});
211
212var _StyledDiv2 = _styled__default("div").withConfig({
213 displayName: "SidePanel___StyledDiv2",
214 componentId: "sc-1kjx6mk-5"
215})(["overflow-y:auto;height:100%;display:flex;flex-direction:column;"]);
216
217var _StyledDiv3 = _styled__default("div").withConfig({
218 displayName: "SidePanel___StyledDiv3",
219 componentId: "sc-1kjx6mk-6"
220})(["min-height:0;flex-grow:1;flex-shrink:0;display:flex;flex-direction:column;width:100%;padding-right:", "px;padding-left:", "px;padding-bottom:", "px;"], CONTENT_PADDING, CONTENT_PADDING, CONTENT_PADDING);
221
222function SidePanel(_ref2) {
223 var blocking = _ref2.blocking,
224 children = _ref2.children,
225 opened = _ref2.opened,
226 onClose = _ref2.onClose,
227 onTransitionEnd = _ref2.onTransitionEnd,
228 title = _ref2.title;
229 var theme = Theme.useTheme();
230
231 var _useViewport = Viewport.useViewport(),
232 below = _useViewport.below;
233
234 var compact = below('medium');
235 var close = React.useCallback(function () {
236 if (!blocking) {
237 onClose();
238 }
239 }, [blocking, onClose]);
240 var handleEscape = React.useCallback(function (event) {
241 if (event.keyCode === keycodes.KEY_ESC && opened) {
242 close();
243 }
244 }, [opened, close]);
245
246 var _useState = React.useState(opened ? 'opened' : 'closed'),
247 _useState2 = slicedToArray._slicedToArray(_useState, 2),
248 status = _useState2[0],
249 setStatus = _useState2[1];
250
251 var _useState3 = React.useState(false),
252 _useState4 = slicedToArray._slicedToArray(_useState3, 2),
253 readyToFocus = _useState4[0],
254 setReadyToFocus = _useState4[1];
255
256 var handleTransitionRest = React.useCallback(function () {
257 onTransitionEnd(opened);
258 setStatus(opened ? 'opened' : 'closed');
259 }, [opened, onTransitionEnd]);
260 var handleTransitionStart = React.useCallback(function () {
261 setStatus(opened ? 'opening' : 'closing');
262 }, [opened]);
263 var handleTransitionFrame = React.useCallback(function (item, _, _ref3) {
264 var progress = _ref3.progress;
265
266 if (progress > 0.5 && !readyToFocus) {
267 setReadyToFocus(true);
268 } else if (progress < 0.5 && readyToFocus) {
269 setReadyToFocus(false);
270 }
271 }, [readyToFocus]);
272 var handleTransitionDestroyed = React.useCallback(function () {
273 setReadyToFocus(false);
274 }, []);
275 React.useEffect(function () {
276 document.addEventListener('keydown', handleEscape);
277 return function () {
278 document.removeEventListener('keydown', handleEscape);
279 };
280 }, [handleEscape]);
281 return /*#__PURE__*/React__default.createElement(RootPortal.default, null, /*#__PURE__*/React__default.createElement(index$1.i, {
282 name: "SidePanel"
283 }, /*#__PURE__*/React__default.createElement(web.Transition, {
284 items: opened,
285 config: _objectSpread(_objectSpread({}, springs.springs.lazy), {}, {
286 precision: 0.001
287 }),
288 from: {
289 progress: 0
290 },
291 enter: {
292 progress: Number(opened)
293 },
294 leave: {
295 progress: 0
296 },
297 onRest: handleTransitionRest,
298 onStart: handleTransitionStart,
299 onFrame: handleTransitionFrame,
300 onDestroyed: handleTransitionDestroyed,
301 unique: true,
302 native: true
303 }, function (opened) {
304 return opened && function (_ref4) {
305 var progress = _ref4.progress;
306 return /*#__PURE__*/React__default.createElement(_StyledDiv, {
307 _css: status !== 'closing' ? 'auto' : 'none'
308 }, /*#__PURE__*/React__default.createElement(_StyledAnimatedDiv, {
309 onClick: close,
310 style: {
311 opacity: progress,
312 pointerEvents: status !== 'closing' ? 'auto' : 'none'
313 },
314 _css2: theme.overlay.alpha(0.9)
315 }), /*#__PURE__*/React__default.createElement(Panel, {
316 compact: compact,
317 style: {
318 transform: progress.interpolate(function (v) {
319 return "\n translate3d(\n calc(\n ".concat(100 * (1 - v), "% +\n ").concat(CLOSING_POSITION * (1 - v), "px\n ), 0, 0\n )\n ");
320 })
321 }
322 }, /*#__PURE__*/React__default.createElement(_StyledHeader, {
323 _css3: 8 * constants.GU,
324 _css4: theme.border,
325 _css5: css.unselectable()
326 }, /*#__PURE__*/React__default.createElement(_StyledH, {
327 _css6: theme.surfaceContent,
328 _css7: textStyles.textStyle('body1')
329 }, title), !blocking && /*#__PURE__*/React__default.createElement(_StyledButtonIcon, {
330 label: "Close",
331 onClick: close,
332 _css8: !compact ? "\n top: ".concat(2 * constants.GU, "px;\n right: ").concat(2 * constants.GU, "px;\n ") : "\n top: 0;\n right: 0;\n height: ".concat(8 * constants.GU, "px;\n width: ").concat(8 * constants.GU, "px;\n ")
333 }, /*#__PURE__*/React__default.createElement(IconCross.default, {
334 color: theme.surfaceIcon
335 }))), /*#__PURE__*/React__default.createElement(_StyledDiv2, null, /*#__PURE__*/React__default.createElement(_StyledDiv3, null, /*#__PURE__*/React__default.createElement(SidePanelContext.Provider, {
336 value: {
337 status: status,
338 readyToFocus: readyToFocus
339 }
340 }, children)))));
341 };
342 })));
343}
344
345SidePanel.propTypes = {
346 blocking: index.PropTypes.bool,
347 children: index.PropTypes.node.isRequired,
348 opened: index.PropTypes.bool,
349 onClose: index.PropTypes.func,
350 onTransitionEnd: index.PropTypes.func,
351 title: index.PropTypes.node.isRequired
352};
353SidePanel.defaultProps = {
354 opened: true,
355 blocking: false,
356 onClose: function onClose() {},
357 onTransitionEnd: function onTransitionEnd() {}
358};
359
360var _StyledAnimatedAside = _styled__default(web.extendedAnimated.aside).withConfig({
361 displayName: "SidePanel___StyledAnimatedAside",
362 componentId: "sc-1kjx6mk-7"
363})(["position:absolute;top:0;right:0;display:flex;flex-direction:column;width:100%;height:100%;background:", ";box-shadow:-2px 0px 4px rgba(0,0,0,0.1);", ""], function (p) {
364 return p._css9;
365}, function (p) {
366 return p._css10;
367});
368
369var Panel = /*#__PURE__*/React__default.memo(function Panel(_ref5) {
370 var compact = _ref5.compact,
371 props = objectWithoutProperties._objectWithoutProperties(_ref5, ["compact"]);
372
373 var theme = Theme.useTheme();
374 return /*#__PURE__*/React__default.createElement(_StyledAnimatedAside, _extends$1._extends({}, props, {
375 _css9: theme.surface,
376 _css10: !compact ? 'max-width: 450px;' : ''
377 }));
378});
379Panel.propTypes = {
380 compact: index.PropTypes.bool
381};
382
383function useSidePanel() {
384 var value = React.useContext(SidePanelContext);
385
386 if (value === null) {
387 throw new Error('useSidePanel() was used outside of the SidePanel render tree, ' + 'which has to be declared at an upper level!');
388 }
389
390 return value;
391}
392
393function useSidePanelFocusOnReady(ref) {
394 var _useSidePanel = useSidePanel(),
395 readyToFocus = _useSidePanel.readyToFocus;
396
397 var fallbackRef = React.useRef();
398
399 var _ref = ref || fallbackRef;
400
401 React.useEffect(function () {
402 if (readyToFocus && _ref.current) {
403 if (_ref.current.focus) {
404 _ref.current.focus();
405 } else {
406 environment.warn('useSidePanelFocusOnReady(): the focus() method wasn’t available on ' + 'the passed ref.');
407 }
408 }
409 }, [readyToFocus, _ref]);
410 return _ref;
411} // Used for spacing in SidePanelSplit and SidePanelSeparator
412
413
414SidePanel.HORIZONTAL_PADDING = CONTENT_PADDING;
415
416exports.default = SidePanel;
417exports.useSidePanel = useSidePanel;
418exports.useSidePanelFocusOnReady = useSidePanelFocusOnReady;
419//# sourceMappingURL=SidePanel.js.map