UNPKG

13.1 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');
13require('./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');
21require('./css.js');
22require('./dayjs.min-aa59a48e.js');
23require('./date.js');
24require('./miscellaneous.js');
25require('./environment.js');
26require('./font.js');
27require('./math-ecfd5d91.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');
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('./FocusVisible.js');
44var ButtonBase = require('./ButtonBase.js');
45require('./IconPropTypes-086fd371.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');
85require('./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');
152require('react-dom');
153var web = require('./web-d0294535.js');
154
155// In / out example: [0, 0.25, 0.5, 0.75, 1] => [0, 0.5, 1, 0.5, 0]
156
157function interpolateToggleElevation(value, fn) {
158 return value.interpolate(function (v) {
159 return fn(1 - Math.abs(v * 2 - 1));
160 });
161}
162
163var _StyledSection = _styled__default("section").withConfig({
164 displayName: "Details___StyledSection",
165 componentId: "b3f99g-0"
166})(["", ""], function (p) {
167 return p._css;
168});
169
170var _StyledButtonBase = _styled__default(ButtonBase.default).withConfig({
171 displayName: "Details___StyledButtonBase",
172 componentId: "b3f99g-1"
173})(["position:relative;width:100%;&:active{background:", ";}"], function (p) {
174 return p._css2;
175});
176
177var _StyledDiv = _styled__default("div").withConfig({
178 displayName: "Details___StyledDiv",
179 componentId: "b3f99g-2"
180})(["position:absolute;left:", "px;right:", "px;bottom:0;"], function (p) {
181 return p._css3;
182}, function (p) {
183 return p._css4;
184});
185
186var _StyledDiv2 = _styled__default("div").withConfig({
187 displayName: "Details___StyledDiv2",
188 componentId: "b3f99g-3"
189})(["height:1px;box-shadow:0 1px 1px rgba(0,0,0,0.1);"]);
190
191var _StyledH = _styled__default("h1").withConfig({
192 displayName: "Details___StyledH",
193 componentId: "b3f99g-4"
194})(["display:flex;justify-content:flex-start;align-items:center;height:", "px;margin-left:", "px;color:", ";", " font-weight:400;"], function (p) {
195 return p._css5;
196}, function (p) {
197 return p._css6;
198}, function (p) {
199 return p._css7;
200}, function (p) {
201 return p._css8;
202});
203
204var _StyledDiv3 = _styled__default("div").withConfig({
205 displayName: "Details___StyledDiv3",
206 componentId: "b3f99g-5"
207})(["margin-top:2px;"]);
208
209var _StyledDiv4 = _styled__default("div").withConfig({
210 displayName: "Details___StyledDiv4",
211 componentId: "b3f99g-6"
212})(["display:flex;align-items:center;justify-content:center;"]);
213
214var _StyledDiv5 = _styled__default("div").withConfig({
215 displayName: "Details___StyledDiv5",
216 componentId: "b3f99g-7"
217})(["overflow:hidden"]);
218
219var _StyledAnimatedDiv = _styled__default(web.extendedAnimated.div).withConfig({
220 displayName: "Details___StyledAnimatedDiv",
221 componentId: "b3f99g-8"
222})(["display:flex;flex-direction:column;justify-content:flex-end;"]);
223
224var _StyledDiv6 = _styled__default("div").withConfig({
225 displayName: "Details___StyledDiv6",
226 componentId: "b3f99g-9"
227})(["", ""], function (p) {
228 return p._css9;
229});
230
231function Details(_ref) {
232 var children = _ref.children,
233 label = _ref.label,
234 onToggle = _ref.onToggle,
235 openedProp = _ref.opened,
236 props = objectWithoutProperties._objectWithoutProperties(_ref, ["children", "label", "onToggle", "opened"]);
237
238 var theme = Theme.useTheme();
239
240 var _useInside = index$1.o('Box'),
241 _useInside2 = slicedToArray._slicedToArray(_useInside, 1),
242 insideBox = _useInside2[0];
243
244 var _useInside3 = index$1.o('SidePanel'),
245 _useInside4 = slicedToArray._slicedToArray(_useInside3, 1),
246 insideSidePanel = _useInside4[0];
247
248 var contentRef = React.useRef(null);
249 var contentHeight = React.useRef(0); // Details supports two modes: managed (internal state),
250 // or controlled (external state).
251
252 var _useState = React.useState(false),
253 _useState2 = slicedToArray._slicedToArray(_useState, 2),
254 openedManaged = _useState2[0],
255 setOpenedManaged = _useState2[1];
256
257 var opened = openedProp === undefined ? openedManaged : openedProp;
258 var updateHeight = React.useCallback(function () {
259 if (contentRef.current) {
260 contentHeight.current = contentRef.current.clientHeight;
261 }
262 }, []);
263 var handleContentRef = React.useCallback(function (element) {
264 contentRef.current = element;
265 updateHeight();
266 }, [updateHeight]);
267 var handleToggle = React.useCallback(function () {
268 var newOpened = !opened; // Managed state
269
270 if (openedProp === undefined) {
271 setOpenedManaged(newOpened);
272 } // Useful to notify even in managed mode
273
274
275 if (onToggle) {
276 onToggle(newOpened);
277 }
278 }, [onToggle, opened, openedProp]); // Animate after the initial render
279
280 var animate = React.useRef(false);
281 React.useEffect(function () {
282 animate.current = true;
283 }, []); // Use height: 'auto' when opened
284
285 var _useState3 = React.useState(false),
286 _useState4 = slicedToArray._slicedToArray(_useState3, 2),
287 forceHeight = _useState4[0],
288 setForceHeight = _useState4[1];
289
290 var handleStart = React.useCallback(function () {
291 return setForceHeight(true);
292 }, []);
293 var handleRest = React.useCallback(function () {
294 // Note: we need to use the opened from the previous
295 // render cycle here, which is why we don’t use a callback.
296 setForceHeight(!opened);
297 }, [opened]); // Update the height
298
299 React.useEffect(updateHeight, [opened, updateHeight]);
300 var spacingCss = React.useMemo(function () {
301 if (insideSidePanel) {
302 return {
303 section: "\n margin: ".concat(2 * constants.GU, "px ").concat(-3 * constants.GU, "px 0;\n padding-bottom: ").concat(3 * constants.GU, "px;\n "),
304 content: "\n padding: ".concat(2 * constants.GU, "px ").concat(3 * constants.GU, "px 0;\n ")
305 };
306 }
307
308 if (insideBox) {
309 return {
310 section: "\n margin: 0 ".concat(-3 * constants.GU, "px;\n "),
311 content: "\n padding: ".concat(1 * constants.GU, "px ").concat(3 * constants.GU, "px 0;\n ")
312 };
313 }
314
315 return {
316 section: "\n margin: 0;\n padding-bottom: ".concat(3 * constants.GU, "px;\n "),
317 content: "\n padding: 0;\n "
318 };
319 }, [insideSidePanel, insideBox]);
320 return /*#__PURE__*/React__default.createElement(web.Spring, {
321 config: springs.springs.smooth,
322 from: {
323 openProgress: 0
324 },
325 to: {
326 openProgress: Number(opened)
327 },
328 immediate: !animate,
329 onRest: handleRest,
330 onStart: handleStart,
331 native: true
332 }, function (_ref2) {
333 var openProgress = _ref2.openProgress;
334 return /*#__PURE__*/React__default.createElement(_StyledSection, _extends$1._extends({}, props, {
335 _css: spacingCss.section
336 }), /*#__PURE__*/React__default.createElement(_StyledButtonBase, {
337 onClick: handleToggle,
338 _css2: theme.surfacePressed
339 }, /*#__PURE__*/React__default.createElement(_StyledDiv, {
340 _css3: 3 * constants.GU,
341 _css4: 3 * constants.GU
342 }, /*#__PURE__*/React__default.createElement(web.extendedAnimated.div, {
343 style: {
344 transform: interpolateToggleElevation(openProgress, function (v) {
345 return "scale3d(".concat(v, ", 1, 1)");
346 }),
347 opacity: interpolateToggleElevation(openProgress, function (v) {
348 return v;
349 })
350 }
351 }, /*#__PURE__*/React__default.createElement(_StyledDiv2, null))), /*#__PURE__*/React__default.createElement(_StyledH, _extends$1._extends({}, props, {
352 _css5: 5 * constants.GU,
353 _css6: 3 * constants.GU,
354 _css7: theme.surfaceContentSecondary,
355 _css8: textStyles.textStyle('label2')
356 }), /*#__PURE__*/React__default.createElement(_StyledDiv3, null, label), /*#__PURE__*/React__default.createElement("div", null, /*#__PURE__*/React__default.createElement(web.extendedAnimated.div, {
357 style: {
358 marginLeft: "".concat(1 * constants.GU, "px"),
359 transform: openProgress.interpolate(function (v) {
360 return "rotate(".concat((1 - v) * 180, "deg)");
361 }),
362 transformOrigin: '50% calc(50% - 0.5px)'
363 }
364 }, /*#__PURE__*/React__default.createElement(_StyledDiv4, null, /*#__PURE__*/React__default.createElement(IconDown.default, {
365 size: "tiny"
366 })))))), /*#__PURE__*/React__default.createElement(_StyledDiv5, null, /*#__PURE__*/React__default.createElement(_StyledAnimatedDiv, {
367 style: {
368 opacity: openProgress,
369 height: forceHeight ? openProgress.interpolate(function (v) {
370 return "".concat(v * contentHeight.current, "px");
371 }) : 'auto'
372 }
373 }, /*#__PURE__*/React__default.createElement(_StyledDiv6, {
374 ref: handleContentRef,
375 _css9: spacingCss.content
376 }, /*#__PURE__*/React__default.createElement("div", null, children)))));
377 });
378}
379
380Details.propTypes = {
381 children: index.PropTypes.node.isRequired,
382 label: index.PropTypes.string.isRequired,
383 onToggle: index.PropTypes.func,
384 opened: index.PropTypes.bool
385};
386
387exports.default = Details;
388//# sourceMappingURL=Details.js.map