1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, '__esModule', { value: true });
|
4 |
|
5 | function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
6 |
|
7 | var slicedToArray = require('./slicedToArray-ef426d0f.js');
|
8 | require('./unsupportedIterableToArray-8a00e599.js');
|
9 | var React = require('react');
|
10 | var React__default = _interopDefault(React);
|
11 | require('./_commonjsHelpers-72d386ba.js');
|
12 | var index = require('./index-b0606964.js');
|
13 | var defineProperty$1 = require('./defineProperty-0921a47c.js');
|
14 | require('./toConsumableArray-7f36359f.js');
|
15 | var _styled = require('styled-components');
|
16 | var _styled__default = _interopDefault(_styled);
|
17 | require('./getPrototypeOf-e2d1e599.js');
|
18 | require('./color.js');
|
19 | require('./components.js');
|
20 | require('./contains-component.js');
|
21 | var css = require('./css.js');
|
22 | require('./dayjs.min-aa59a48e.js');
|
23 | require('./date.js');
|
24 | require('./miscellaneous.js');
|
25 | var environment = require('./environment.js');
|
26 | require('./font.js');
|
27 | require('./math-ecfd5d91.js');
|
28 | require('./characters.js');
|
29 | require('./format.js');
|
30 | var keycodes = require('./keycodes.js');
|
31 | require('./url.js');
|
32 | require('./web3.js');
|
33 | var constants = require('./constants.js');
|
34 | require('./breakpoints.js');
|
35 | var springs = require('./springs.js');
|
36 | var textStyles = require('./text-styles.js');
|
37 | require('./theme-dark.js');
|
38 | require('./theme-light.js');
|
39 | var Theme = require('./Theme.js');
|
40 | var _extends$1 = require('./extends-40571110.js');
|
41 | var objectWithoutProperties = require('./objectWithoutProperties-35db8ab0.js');
|
42 | var index$1 = require('./index-ecc57c9f.js');
|
43 | require('./isObject-52908731.js');
|
44 | var Viewport = require('./Viewport-fe2db97a.js');
|
45 | require('./Layout.js');
|
46 | require('./FocusVisible.js');
|
47 | require('./ButtonBase.js');
|
48 | require('./IconPropTypes-086fd371.js');
|
49 | require('./IconAddUser.js');
|
50 | require('./IconAlert.js');
|
51 | require('./IconAlignCenter.js');
|
52 | require('./IconAlignJustify.js');
|
53 | require('./IconAlignLeft.js');
|
54 | require('./IconAlignRight.js');
|
55 | require('./IconAragon.js');
|
56 | require('./IconArrowDown.js');
|
57 | require('./IconArrowLeft.js');
|
58 | require('./IconArrowRight.js');
|
59 | require('./IconArrowUp.js');
|
60 | require('./IconAtSign.js');
|
61 | require('./IconBlock.js');
|
62 | require('./IconBookmark.js');
|
63 | require('./IconCalendar.js');
|
64 | require('./IconCanvas.js');
|
65 | require('./IconCaution.js');
|
66 | require('./IconCenter.js');
|
67 | require('./IconChart.js');
|
68 | require('./IconChat.js');
|
69 | require('./IconCheck.js');
|
70 | require('./IconChip.js');
|
71 | require('./IconCircleCheck.js');
|
72 | require('./IconCircleMinus.js');
|
73 | require('./IconCirclePlus.js');
|
74 | require('./IconClock.js');
|
75 | require('./IconCloudDownload.js');
|
76 | require('./IconCloudUpload.js');
|
77 | require('./IconCoin.js');
|
78 | require('./IconConfiguration.js');
|
79 | require('./IconConnect.js');
|
80 | require('./IconConnection.js');
|
81 | require('./IconConsole.js');
|
82 | require('./IconCopy.js');
|
83 | var IconCross = require('./IconCross.js');
|
84 | require('./IconDashedSquare.js');
|
85 | require('./IconDown.js');
|
86 | require('./IconDownload.js');
|
87 | require('./IconEdit.js');
|
88 | require('./IconEllipsis.js');
|
89 | require('./IconEnter.js');
|
90 | require('./IconEthereum.js');
|
91 | require('./IconExternal.js');
|
92 | require('./IconFile.js');
|
93 | require('./IconFilter.js');
|
94 | require('./IconFlag.js');
|
95 | require('./IconFolder.js');
|
96 | require('./IconGraph2.js');
|
97 | require('./IconGraph.js');
|
98 | require('./IconGrid.js');
|
99 | require('./IconGroup.js');
|
100 | require('./IconHash.js');
|
101 | require('./IconHeart.js');
|
102 | require('./IconHide.js');
|
103 | require('./IconHome.js');
|
104 | require('./IconImage.js');
|
105 | require('./IconInfo.js');
|
106 | require('./IconLabel.js');
|
107 | require('./IconLayers.js');
|
108 | require('./IconLeft.js');
|
109 | require('./IconLink.js');
|
110 | require('./IconLocation.js');
|
111 | require('./IconLock.js');
|
112 | require('./IconMail.js');
|
113 | require('./IconMaximize.js');
|
114 | require('./IconMenu.js');
|
115 | require('./IconMinimize.js');
|
116 | require('./IconMinus.js');
|
117 | require('./IconMove.js');
|
118 | require('./IconNoPicture.js');
|
119 | require('./IconPicture.js');
|
120 | require('./IconPlus.js');
|
121 | require('./IconPower.js');
|
122 | require('./IconPrint.js');
|
123 | require('./IconProhibited.js');
|
124 | require('./IconQuestion.js');
|
125 | require('./IconRefresh.js');
|
126 | require('./IconRemoveUser.js');
|
127 | require('./IconRight.js');
|
128 | require('./IconRotateLeft.js');
|
129 | require('./IconRotateRight.js');
|
130 | require('./IconSearch.js');
|
131 | require('./IconSettings.js');
|
132 | require('./IconShare.js');
|
133 | require('./IconSquareMinus.js');
|
134 | require('./IconSquarePlus.js');
|
135 | require('./IconSquare.js');
|
136 | require('./IconStarFilled.js');
|
137 | require('./IconStar.js');
|
138 | require('./IconSwap.js');
|
139 | require('./IconTarget.js');
|
140 | require('./IconToken.js');
|
141 | require('./IconTrash.js');
|
142 | require('./IconUnlock.js');
|
143 | require('./IconUp.js');
|
144 | require('./IconUpload.js');
|
145 | require('./IconUser.js');
|
146 | require('./IconView.js');
|
147 | require('./IconVote.js');
|
148 | require('./IconWallet.js');
|
149 | require('./IconWarning.js');
|
150 | require('./IconWorld.js');
|
151 | require('./IconWrite.js');
|
152 | require('./IconZoomIn.js');
|
153 | require('./IconZoomOut.js');
|
154 | require('./objectWithoutPropertiesLoose-1af20ad0.js');
|
155 | require('react-dom');
|
156 | var web = require('./web-d0294535.js');
|
157 | require('./Button.js');
|
158 | var ButtonIcon = require('./ButtonIcon.js');
|
159 | require('./index-5aaa52c3.js');
|
160 | var RootPortal = require('./RootPortal.js');
|
161 |
|
162 | function 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 |
|
164 | function _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; }
|
165 | var CONTENT_PADDING = 3 * constants.GU;
|
166 |
|
167 |
|
168 | var CLOSING_POSITION = 5 * constants.GU;
|
169 | var SidePanelContext = React__default.createContext(null);
|
170 |
|
171 | var _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 |
|
178 | var _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 |
|
185 | var _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 |
|
196 | var _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 |
|
205 | var _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 |
|
212 | var _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 |
|
217 | var _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 |
|
222 | function 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 React__default.createElement(RootPortal.default, null, React__default.createElement(index$1.i, {
|
282 | name: "SidePanel"
|
283 | }, 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 React__default.createElement(_StyledDiv, {
|
307 | _css: status !== 'closing' ? 'auto' : 'none'
|
308 | }, 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 | }), 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 | }, React__default.createElement(_StyledHeader, {
|
323 | _css3: 8 * constants.GU,
|
324 | _css4: theme.border,
|
325 | _css5: css.unselectable()
|
326 | }, React__default.createElement(_StyledH, {
|
327 | _css6: theme.surfaceContent,
|
328 | _css7: textStyles.textStyle('body1')
|
329 | }, title), !blocking && 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 | }, React__default.createElement(IconCross.default, {
|
334 | color: theme.surfaceIcon
|
335 | }))), React__default.createElement(_StyledDiv2, null, React__default.createElement(_StyledDiv3, null, React__default.createElement(SidePanelContext.Provider, {
|
336 | value: {
|
337 | status: status,
|
338 | readyToFocus: readyToFocus
|
339 | }
|
340 | }, children)))));
|
341 | };
|
342 | })));
|
343 | }
|
344 |
|
345 | SidePanel.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 | };
|
353 | SidePanel.defaultProps = {
|
354 | opened: true,
|
355 | blocking: false,
|
356 | onClose: function onClose() {},
|
357 | onTransitionEnd: function onTransitionEnd() {}
|
358 | };
|
359 |
|
360 | var _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 |
|
369 | var Panel = 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 React__default.createElement(_StyledAnimatedAside, _extends$1._extends({}, props, {
|
375 | _css9: theme.surface,
|
376 | _css10: !compact ? 'max-width: 450px;' : ''
|
377 | }));
|
378 | });
|
379 | Panel.propTypes = {
|
380 | compact: index.PropTypes.bool
|
381 | };
|
382 |
|
383 | function 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 |
|
393 | function 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 | }
|
412 |
|
413 |
|
414 | SidePanel.HORIZONTAL_PADDING = CONTENT_PADDING;
|
415 |
|
416 | exports.default = SidePanel;
|
417 | exports.useSidePanel = useSidePanel;
|
418 | exports.useSidePanelFocusOnReady = useSidePanelFocusOnReady;
|
419 |
|