@ntbjs/react-components 1.1.1 → 1.2.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/{ActionButton-c3f5ed94.js → ActionButton-761050a9.js} +15 -5
  2. package/Alert-96814023.js +117 -0
  3. package/AssetGallery-52724211.js +1846 -0
  4. package/{AssetPreviewTopBar-449e6019.js → AssetPreviewTopBar-ade10c15.js} +15 -15
  5. package/Badge-fa94dca8.js +221 -0
  6. package/{Button-432f87c6.js → Button-5071dc6b.js} +3 -3
  7. package/{Checkbox-d80544d6.js → Checkbox-dd2cf216.js} +1 -1
  8. package/{CompactAutocompleteSelect-0c08a1aa.js → CompactAutocompleteSelect-d4147107.js} +2 -2
  9. package/{CompactStarRating-77f54a07.js → CompactStarRating-ca1943af.js} +1 -1
  10. package/{CompactTextInput-8750600d.js → CompactTextInput-c5e38aae.js} +8 -7
  11. package/{ContextMenu-d088833b.js → ContextMenu-bd818e55.js} +1 -1
  12. package/ContextMenuItem-10af8b2f.js +110 -0
  13. package/{InputGroup-09ce9572.js → InputGroup-4c49ba30.js} +1 -1
  14. package/{Instructions-ed68e52f.js → Instructions-b955ba72.js} +3 -3
  15. package/{MultiSelect-abf02057.js → MultiSelect-87614192.js} +2 -2
  16. package/{Popover-d3a4b72e.js → Popover-155cbac8.js} +2 -2
  17. package/{Radio-70259f02.js → Radio-dd81f5d4.js} +1 -1
  18. package/{SectionSeparator-225719cd.js → SectionSeparator-9f129ade.js} +1 -1
  19. package/{Switch-a7cbb0c0.js → Switch-c004ea6d.js} +1 -1
  20. package/{Tab-9936ddea.js → Tab-8fec1dba.js} +1 -1
  21. package/{Tabs-93f6362c.js → Tabs-96e366bf.js} +2 -2
  22. package/{TextArea-1ed790e5.js → TextArea-4d90d02c.js} +1 -1
  23. package/{TextInput-c0ef017d.js → TextInput-e6035fb0.js} +1 -1
  24. package/{Tooltip-1b7b0052.js → Tooltip-a175e9f5.js} +2 -2
  25. package/VerificationStatusIcon-a88b1f8d.js +106 -0
  26. package/data/Alert/index.js +3 -2
  27. package/data/Badge/index.js +2 -2
  28. package/data/Popover/index.js +3 -3
  29. package/data/Tab/index.js +2 -2
  30. package/data/Tabs/index.js +3 -3
  31. package/data/Tooltip/index.js +3 -3
  32. package/data/index.js +10 -8
  33. package/{defaultTheme-50f2b88f.js → defaultTheme-c137e17f.js} +1 -1
  34. package/icons/add.svg +3 -0
  35. package/icons/album.svg +3 -0
  36. package/icons/check-rectangle-filled.svg +3 -0
  37. package/icons/corporate.svg +3 -0
  38. package/icons/download.svg +3 -3
  39. package/icons/index.js +77 -0
  40. package/icons/layers.svg +3 -0
  41. package/icons/play.svg +3 -3
  42. package/icons/shopping_cart_add.svg +3 -0
  43. package/icons/verification.svg +3 -0
  44. package/inputs/ActionButton/index.js +3 -2
  45. package/inputs/Button/index.js +5 -5
  46. package/inputs/Checkbox/index.js +2 -2
  47. package/inputs/CompactAutocompleteSelect/index.js +3 -3
  48. package/inputs/CompactStarRating/index.js +2 -2
  49. package/inputs/CompactTextInput/index.js +10 -9
  50. package/inputs/MultiSelect/index.js +3 -3
  51. package/inputs/Radio/index.js +2 -2
  52. package/inputs/Switch/index.js +2 -2
  53. package/inputs/TextArea/index.js +2 -2
  54. package/inputs/TextInput/index.js +2 -2
  55. package/inputs/index.js +23 -22
  56. package/layout/InputGroup/index.js +2 -2
  57. package/layout/SectionSeparator/index.js +2 -2
  58. package/layout/index.js +3 -3
  59. package/package.json +1 -1
  60. package/{react-select-creatable.esm-c4ae6839.js → react-select-creatable.esm-2f23d6c6.js} +8 -15
  61. package/{shift-away-subtle-cfdf1dbe.js → shift-away-subtle-a86a6cd2.js} +1 -1
  62. package/styles/config.scss +3 -1
  63. package/widgets/AssetGallery/index.js +25 -23
  64. package/widgets/AssetPreview/AssetPreviewTopBar/index.js +2 -2
  65. package/widgets/ContextMenu/ContextMenuItem/index.js +5 -105
  66. package/widgets/ContextMenu/ContextMenuItemsGroup/index.js +1 -1
  67. package/widgets/ContextMenu/index.js +2 -2
  68. package/widgets/Instructions/index.js +5 -5
  69. package/widgets/index.js +28 -25
  70. package/Alert-3e4f8be1.js +0 -62
  71. package/AssetGallery-f01f30eb.js +0 -1397
  72. package/Badge-9461fc7f.js +0 -154
@@ -0,0 +1,1846 @@
1
+ 'use strict';
2
+
3
+ var defaultTheme = require('./defaultTheme-c137e17f.js');
4
+ var React = require('react');
5
+ var lodash = require('lodash');
6
+ var useMergedRefs = require('./useMergedRefs-b6d2f8fc.js');
7
+ var ResizeObserver = require('resize-observer-polyfill');
8
+ var reactLazyLoadImageComponent = require('react-lazy-load-image-component');
9
+ var warningCircle = require('./warning-circle-24522402.js');
10
+ var Alert = require('./Alert-96814023.js');
11
+ var Badge = require('./Badge-fa94dca8.js');
12
+ var Popover = require('./Popover-155cbac8.js');
13
+ require('./Tab-8fec1dba.js');
14
+ require('./Tabs-96e366bf.js');
15
+ var Tooltip = require('./Tooltip-a175e9f5.js');
16
+ require('./VerificationStatusIcon-a88b1f8d.js');
17
+ var ActionButton = require('./ActionButton-761050a9.js');
18
+ require('./Button-5071dc6b.js');
19
+ require('./Checkbox-dd2cf216.js');
20
+ require('./CompactAutocompleteSelect-d4147107.js');
21
+ require('./CompactStarRating-ca1943af.js');
22
+ require('./CompactTextInput-c5e38aae.js');
23
+ require('./MultiSelect-87614192.js');
24
+ require('./Radio-dd81f5d4.js');
25
+ require('./TextArea-4d90d02c.js');
26
+ require('./TextInput-e6035fb0.js');
27
+ require('./Switch-c004ea6d.js');
28
+ var ContextMenu = require('./ContextMenu-bd818e55.js');
29
+ var ContextMenuItem = require('./ContextMenuItem-10af8b2f.js');
30
+ var styled = require('styled-components');
31
+ var polished = require('polished');
32
+
33
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
34
+
35
+ function _interopNamespace(e) {
36
+ if (e && e.__esModule) return e;
37
+ var n = Object.create(null);
38
+ if (e) {
39
+ Object.keys(e).forEach(function (k) {
40
+ if (k !== 'default') {
41
+ var d = Object.getOwnPropertyDescriptor(e, k);
42
+ Object.defineProperty(n, k, d.get ? d : {
43
+ enumerable: true,
44
+ get: function () {
45
+ return e[k];
46
+ }
47
+ });
48
+ }
49
+ });
50
+ }
51
+ n['default'] = e;
52
+ return Object.freeze(n);
53
+ }
54
+
55
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
56
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
57
+ var ResizeObserver__default = /*#__PURE__*/_interopDefaultLegacy(ResizeObserver);
58
+ var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
59
+
60
+ function _extends$3() { _extends$3 = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$3.apply(this, arguments); }
61
+
62
+ var _ref$3 = /*#__PURE__*/React__namespace.createElement("path", {
63
+ fill: "currentColor",
64
+ d: "M10.146 17.622l9.412-9.412-1.87-1.869-7.542 7.543-3.805-3.805-1.869 1.87 5.674 5.673zM2.67 24.03q-1.101 0-1.886-.784T0 21.36V2.67Q0 1.569.784.784T2.67 0h18.69q1.101 0 1.886.784t.784 1.886v18.69q0 1.101-.784 1.886t-1.886.784H2.67z"
65
+ });
66
+
67
+ function SvgCheckRectangleFilled(props) {
68
+ return /*#__PURE__*/React__namespace.createElement("svg", _extends$3({
69
+ xmlns: "http://www.w3.org/2000/svg",
70
+ viewBox: "0 0 24 24"
71
+ }, props), _ref$3);
72
+ }
73
+
74
+ function _extends$2() { _extends$2 = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$2.apply(this, arguments); }
75
+
76
+ var _ref$2 = /*#__PURE__*/React__namespace.createElement("path", {
77
+ d: "M9 21H5q-.825 0-1.413-.587Q3 19.825 3 19v-7q0-1.875.712-3.513.713-1.637 1.926-2.85 1.212-1.212 2.85-1.925Q10.125 3 12 3t3.513.712q1.637.713 2.85 1.925 1.212 1.213 1.925 2.85Q21 10.125 21 12v7q0 .825-.587 1.413Q19.825 21 19 21h-4v-8h4v-1q0-2.925-2.038-4.963Q14.925 5 12 5T7.038 7.037Q5 9.075 5 12v1h4zm-2-6H5v4h2zm10 0v4h2v-4zm0 0h2-2zM7 15H5z"
78
+ });
79
+
80
+ function SvgHeadset(props) {
81
+ return /*#__PURE__*/React__namespace.createElement("svg", _extends$2({
82
+ xmlns: "http://www.w3.org/2000/svg",
83
+ fill: "currentColor",
84
+ viewBox: "0 0 24 24"
85
+ }, props), _ref$2);
86
+ }
87
+
88
+ function _extends$1() { _extends$1 = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$1.apply(this, arguments); }
89
+
90
+ var _ref$1 = /*#__PURE__*/React__namespace.createElement("path", {
91
+ fill: "currentColor",
92
+ d: "M11.16 23.622L0 14.942l2.046-1.55 9.114 7.068 9.114-7.068 2.046 1.55-11.16 8.68zm0-6.262L0 8.68 11.16 0l11.16 8.68-11.16 8.68z"
93
+ });
94
+
95
+ function SvgLayers(props) {
96
+ return /*#__PURE__*/React__namespace.createElement("svg", _extends$1({
97
+ xmlns: "http://www.w3.org/2000/svg",
98
+ viewBox: "-1 0 24 24"
99
+ }, props), _ref$1);
100
+ }
101
+
102
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
103
+
104
+ var _ref = /*#__PURE__*/React__namespace.createElement("path", {
105
+ fill: "currentColor",
106
+ d: "M0 23.52V0l18.48 11.76L0 23.52z"
107
+ });
108
+
109
+ function SvgPlay(props) {
110
+ return /*#__PURE__*/React__namespace.createElement("svg", _extends({
111
+ xmlns: "http://www.w3.org/2000/svg",
112
+ viewBox: "-3 -0.25 24 24"
113
+ }, props), _ref);
114
+ }
115
+
116
+ var useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;
117
+
118
+ var assetShape = {
119
+ key: defaultTheme.PropTypes.oneOfType([defaultTheme.PropTypes.string, defaultTheme.PropTypes.number]).isRequired,
120
+ previewUrl: defaultTheme.PropTypes.string,
121
+ title: defaultTheme.PropTypes.string,
122
+ note: defaultTheme.PropTypes.shape({
123
+ icon: defaultTheme.PropTypes.element,
124
+ message: defaultTheme.PropTypes.string
125
+ }),
126
+ width: defaultTheme.PropTypes.number,
127
+ height: defaultTheme.PropTypes.number,
128
+ fileType: defaultTheme.PropTypes.oneOf(['image', 'video', 'pdf', 'file', 'audio']).isRequired,
129
+ fileTypeIconPosition: defaultTheme.PropTypes.oneOf(['top-left', 'top-right']),
130
+ group: defaultTheme.PropTypes.string,
131
+ actions: defaultTheme.PropTypes.arrayOf(defaultTheme.PropTypes.shape({
132
+ title: defaultTheme.PropTypes.string.isRequired,
133
+ icon: defaultTheme.PropTypes.element.isRequired,
134
+ onClick: defaultTheme.PropTypes.func.isRequired,
135
+ className: defaultTheme.PropTypes.shape,
136
+ component: defaultTheme.PropTypes.func
137
+ })),
138
+ overlay: defaultTheme.PropTypes.element,
139
+ completed: defaultTheme.PropTypes.bool,
140
+ hasError: defaultTheme.PropTypes.bool,
141
+ disabled: defaultTheme.PropTypes.bool,
142
+ onClick: defaultTheme.PropTypes.func,
143
+ onContextMenu: defaultTheme.PropTypes.func,
144
+ onMouseEnter: defaultTheme.PropTypes.func,
145
+ summary: defaultTheme.PropTypes.shape({
146
+ title: defaultTheme.PropTypes.string,
147
+ description: defaultTheme.PropTypes.string,
148
+ instructions: defaultTheme.PropTypes.string,
149
+ instructionsType: defaultTheme.PropTypes.oneOf(['warning', 'error', 'info']),
150
+ headerLeft: defaultTheme.PropTypes.node,
151
+ headerRight: defaultTheme.PropTypes.node,
152
+ footerLeft: defaultTheme.PropTypes.node,
153
+ footerRight: defaultTheme.PropTypes.node
154
+ })
155
+ };
156
+ var assetShapeWithLayout = defaultTheme._objectSpread2(defaultTheme._objectSpread2({}, assetShape), {}, {
157
+ layout: defaultTheme.PropTypes.shape({
158
+ width: defaultTheme.PropTypes.number.isRequired,
159
+ height: defaultTheme.PropTypes.number.isRequired,
160
+ translateX: defaultTheme.PropTypes.number.isRequired,
161
+ translateY: defaultTheme.PropTypes.number.isRequired,
162
+ type: defaultTheme.PropTypes.oneOf(['groupLabel', 'asset']).isRequired,
163
+ hasHeightAndWidth: defaultTheme.PropTypes.bool
164
+ }).isRequired
165
+ });
166
+
167
+ var css_248z = ".lazy-load-image-background.opacity {\n opacity: 0;\n}\n\n.lazy-load-image-background.opacity.lazy-load-image-loaded {\n opacity: 1;\n transition: opacity .3s;\n}\n";
168
+ defaultTheme.styleInject(css_248z);
169
+
170
+ var convertMsToHMS = function convertMsToHMS(ms) {
171
+ var seconds = Math.floor(ms / 1000);
172
+ var minutes = Math.floor(seconds / 60);
173
+ var hours = Math.floor(minutes / 60);
174
+ var secondsLeft = seconds % 60;
175
+ var minutesLeft = minutes % 60;
176
+ var hmsString = '';
177
+
178
+ if (hours) {
179
+ hmsString += hours < 10 ? "0".concat(hours, ":") : "".concat(hours, ":");
180
+ }
181
+
182
+ hmsString += "".concat(minutesLeft < 10 ? "0".concat(minutesLeft) : "".concat(minutesLeft), ":");
183
+ hmsString += secondsLeft < 10 ? "0".concat(secondsLeft) : "".concat(secondsLeft);
184
+ return hmsString;
185
+ };
186
+
187
+ var _templateObject$3, _templateObject2$3, _templateObject3$3, _templateObject4$2, _templateObject5$2, _templateObject6$2, _templateObject7$2, _templateObject8$2, _templateObject9$2, _templateObject10$2, _templateObject11$2, _templateObject12$2, _templateObject13$2;
188
+ var SummaryCard$1 = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject$3 || (_templateObject$3 = defaultTheme._taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n width: ", ";\n\n ", "\n"])), function (props) {
189
+ return props.width ? "".concat(props.width, "px") : '100%';
190
+ }, function (props) {
191
+ return props.useBorder ? props.theme.themeProp('border', "1px solid ".concat(props.theme.getColor('gray-500')), "1px solid ".concat(props.theme.getColor('gray-300'))) : null;
192
+ });
193
+ var Gutter = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject2$3 || (_templateObject2$3 = defaultTheme._taggedTemplateLiteral(["\n ", "\n padding-bottom: ", "px;\n"])), function (props) {
194
+ if (props.renderAsMargin) {
195
+ return styled.css(_templateObject3$3 || (_templateObject3$3 = defaultTheme._taggedTemplateLiteral(["\n margin-bottom: ", "px;\n "])), props.gutter || 8);
196
+ } else {
197
+ return styled.css(_templateObject4$2 || (_templateObject4$2 = defaultTheme._taggedTemplateLiteral(["\n padding-bottom: ", "px;\n "])), props.gutter || 8);
198
+ }
199
+ }, function (props) {
200
+ return props.gutter || 8;
201
+ });
202
+ var Header = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject5$2 || (_templateObject5$2 = defaultTheme._taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 16px;\n"])));
203
+ var HeaderLeft = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject6$2 || (_templateObject6$2 = defaultTheme._taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n justify-content: flex-start;\n\n > * {\n margin-right: 4px;\n }\n"])));
204
+ var HeaderRight = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject7$2 || (_templateObject7$2 = defaultTheme._taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n justify-content: flex-end;\n\n > * {\n margin-left: 4px;\n }\n"])));
205
+ var Title = styled__default['default'].span.attrs(defaultTheme.applyDefaultTheme)(_templateObject8$2 || (_templateObject8$2 = defaultTheme._taggedTemplateLiteral(["\n display: inline-block;\n padding: 0 16px;\n font: normal normal 500 14px/19px Roboto;\n letter-spacing: 0.28px;\n display: -webkit-box;\n -webkit-line-clamp: 1;\n -webkit-box-orient: vertical;\n overflow: hidden;\n text-overflow: ellipsis;\n box-sizing: border-box;\n\n ", ";\n"])), function (props) {
206
+ return props.theme.themeProp('color', props.theme.getColor('white'), props.theme.getColor('gray-700'));
207
+ });
208
+ var Description = styled__default['default'].span.attrs(defaultTheme.applyDefaultTheme)(_templateObject9$2 || (_templateObject9$2 = defaultTheme._taggedTemplateLiteral(["\n padding: 0 16px;\n text-align: left;\n font: normal normal normal 12px/16px Roboto;\n letter-spacing: 0.24px;\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n overflow: hidden;\n text-overflow: ellipsis;\n box-sizing: border-box;\n\n ", ";\n"])), function (props) {
209
+ return props.theme.themeProp('color', props.theme.getColor('white'), props.theme.getColor('gray-700'));
210
+ });
211
+ var Instruction = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject10$2 || (_templateObject10$2 = defaultTheme._taggedTemplateLiteral([""])));
212
+ var Footer = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject11$2 || (_templateObject11$2 = defaultTheme._taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 16px;\n"])));
213
+ var FooterLeft = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject12$2 || (_templateObject12$2 = defaultTheme._taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n justify-content: flex-start;\n\n > * {\n margin-right: 4px;\n }\n"])));
214
+ var FooterRight = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject13$2 || (_templateObject13$2 = defaultTheme._taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n justify-content: flex-end;\n\n > * {\n margin-left: 4px;\n }\n"])));
215
+
216
+ var SummaryCard = React__default['default'].forwardRef(function AssetSummaryCard(_ref, forwardedRef) {
217
+ var title = _ref.title,
218
+ description = _ref.description,
219
+ instructions = _ref.instructions,
220
+ instructionsType = _ref.instructionsType,
221
+ headerLeft = _ref.headerLeft,
222
+ headerRight = _ref.headerRight,
223
+ footerLeft = _ref.footerLeft,
224
+ footerRight = _ref.footerRight,
225
+ width = _ref.width,
226
+ useBorder = _ref.useBorder,
227
+ props = defaultTheme._objectWithoutProperties(_ref, ["title", "description", "instructions", "instructionsType", "headerLeft", "headerRight", "footerLeft", "footerRight", "width", "useBorder"]);
228
+
229
+ var shouldRenderInstructions = !!instructions;
230
+ var shouldRenderHeader = !!headerLeft || !!headerRight;
231
+ var shouldRenderFooter = !!footerLeft || !!footerRight;
232
+ var shouldAddGutterAfterInstructions = shouldRenderInstructions && shouldRenderFooter;
233
+ var shouldAddGutterAfterTitle = !!title && (!!description || !!instructions || shouldRenderFooter);
234
+ return React__default['default'].createElement(SummaryCard$1, defaultTheme._extends({
235
+ ref: forwardedRef,
236
+ width: width,
237
+ useBorder: useBorder
238
+ }, props), shouldRenderHeader && React__default['default'].createElement(React__default['default'].Fragment, null, React__default['default'].createElement(Gutter, {
239
+ gutter: 8
240
+ }), React__default['default'].createElement(Header, null, React__default['default'].createElement(HeaderLeft, null, headerLeft), React__default['default'].createElement(HeaderRight, null, headerRight))), React__default['default'].createElement(Gutter, {
241
+ gutter: shouldRenderHeader ? 8 : 16
242
+ }), title && React__default['default'].createElement(Title, null, title), shouldAddGutterAfterTitle && React__default['default'].createElement(Gutter, {
243
+ gutter: 4
244
+ }), description && React__default['default'].createElement(Description, null, description), React__default['default'].createElement(Gutter, {
245
+ gutter: 16
246
+ }), shouldRenderInstructions && React__default['default'].createElement(Instruction, null, React__default['default'].createElement(Alert.Alert, {
247
+ icon: React__default['default'].createElement(warningCircle.SvgWarningCircle, null),
248
+ alertMessage: instructions,
249
+ type: instructionsType,
250
+ fontSize: 12,
251
+ verticalPadding: 12,
252
+ horizontalPadding: 16,
253
+ width: width,
254
+ lineClamp: 1
255
+ })), shouldAddGutterAfterInstructions && React__default['default'].createElement(Gutter, {
256
+ gutter: 16
257
+ }), shouldRenderFooter && React__default['default'].createElement(Footer, null, React__default['default'].createElement(FooterLeft, null, footerLeft), React__default['default'].createElement(FooterRight, null, footerRight)), shouldRenderFooter && React__default['default'].createElement(Gutter, {
258
+ gutter: 16
259
+ }));
260
+ });
261
+ SummaryCard.propTypes = process.env.NODE_ENV !== "production" ? {
262
+ title: defaultTheme.PropTypes.string,
263
+ description: defaultTheme.PropTypes.string,
264
+ instructions: defaultTheme.PropTypes.string,
265
+ instructionsType: defaultTheme.PropTypes.oneOf(['warning', 'error', 'info']),
266
+ headerLeft: defaultTheme.PropTypes.node,
267
+ headerRight: defaultTheme.PropTypes.node,
268
+ footerLeft: defaultTheme.PropTypes.node,
269
+ footerRight: defaultTheme.PropTypes.node,
270
+ width: defaultTheme.PropTypes.number,
271
+ useBorder: defaultTheme.PropTypes.bool
272
+ } : {};
273
+ SummaryCard.defaultProps = {
274
+ title: '',
275
+ description: '',
276
+ instructions: '',
277
+ instructionsType: 'info',
278
+ headerLeft: null,
279
+ headerRight: null,
280
+ footerLeft: null,
281
+ footerRight: null,
282
+ useBorder: false
283
+ };
284
+
285
+ var _templateObject$2, _templateObject2$2, _templateObject3$2, _templateObject4$1, _templateObject5$1, _templateObject6$1, _templateObject7$1, _templateObject8$1, _templateObject9$1, _templateObject10$1, _templateObject11$1, _templateObject12$1, _templateObject13$1, _templateObject14$1, _templateObject15$1, _templateObject16$1, _templateObject17$1, _templateObject18$1, _templateObject19$1, _templateObject20$1, _templateObject21$1, _templateObject22$1, _templateObject23$1, _templateObject24$1, _templateObject25$1, _templateObject26$1;
286
+ var AssetGalleryWrapper$1 = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject$2 || (_templateObject$2 = defaultTheme._taggedTemplateLiteral(["\n ", ";\n"])), function (props) {
287
+ return props.disabled && styled.css(_templateObject2$2 || (_templateObject2$2 = defaultTheme._taggedTemplateLiteral(["\n cursor: not-allowed;\n "])));
288
+ });
289
+ var AssetGalleryCompactCard$2 = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject3$2 || (_templateObject3$2 = defaultTheme._taggedTemplateLiteral(["\n display: block;\n height: 100%;\n padding: ", "px;\n box-sizing: border-box;\n cursor: pointer;\n ", ";\n ", ";\n\n ", "\n video {\n width: 100%;\n height: 100%;\n }\n\n .audio {\n display: flex;\n justify-content: center;\n height: 100%;\n svg {\n width: 25%;\n }\n }\n"])), function (props) {
290
+ return props.selected ? 3 : 0;
291
+ }, function (props) {
292
+ return props.theme.themeProp('background', props.theme.getColor('gray-700'), props.theme.getColor('gray-300'));
293
+ }, function (props) {
294
+ return props.disabled && styled.css(_templateObject4$1 || (_templateObject4$1 = defaultTheme._taggedTemplateLiteral(["\n pointer-events: none;\n opacity: 0.4;\n "])));
295
+ }, function (props) {
296
+ return props.extendedSelectMode && styled.css(_templateObject5$1 || (_templateObject5$1 = defaultTheme._taggedTemplateLiteral(["\n cursor: pointer;\n "])));
297
+ });
298
+ var Figure$1 = styled__default['default'].figure(_templateObject6$1 || (_templateObject6$1 = defaultTheme._taggedTemplateLiteral(["\n position: relative;\n margin: 0;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n\n .lazy-load-image-background {\n display: block !important;\n }\n\n img,\n video,\n .audio {\n display: block;\n height: 100%;\n width: 100%;\n ", "\n }\n\n .audio {\n display: flex;\n justify-content: center;\n svg {\n width: 25%;\n }\n }\n"])), function (props) {
299
+ return props.hasHeightAndWidth ? styled.css(_templateObject7$1 || (_templateObject7$1 = defaultTheme._taggedTemplateLiteral(["\n object-fit: cover;\n "]))) : styled.css(_templateObject8$1 || (_templateObject8$1 = defaultTheme._taggedTemplateLiteral(["\n object-fit: contain;\n "])));
300
+ });
301
+ var FigureOverlayBackdrop$1 = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject9$1 || (_templateObject9$1 = defaultTheme._taggedTemplateLiteral(["\n position: absolute;\n inset: 0;\n opacity: ", ";\n background-color: ", ";\n"])), function (props) {
302
+ return props.selected ? 0.6 : 0;
303
+ }, function (props) {
304
+ return props.selected ? '#ACCEF7' : 'transparent';
305
+ });
306
+ var Overlay$1 = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject10$1 || (_templateObject10$1 = defaultTheme._taggedTemplateLiteral(["\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n"])));
307
+ var OverlayBackdrop$1 = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject11$1 || (_templateObject11$1 = defaultTheme._taggedTemplateLiteral(["\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n opacity: 0;\n transition: opacity 220ms;\n\n ", "\n\n ", "\n\n ", ":hover & {\n opacity: 1;\n }\n"])), function (props) {
308
+ return !props.selected ? styled.css(_templateObject12$1 || (_templateObject12$1 = defaultTheme._taggedTemplateLiteral(["\n background: radial-gradient(\n ellipse at center,\n rgba(0, 0, 0, 0.3) 27%,\n rgba(0, 0, 0, 0.5) 60%,\n rgba(0, 0, 0, 0.7) 90%\n );\n "]))) : null;
309
+ }, function (props) {
310
+ return (props.selected || props.softSelected) && styled.css(_templateObject13$1 || (_templateObject13$1 = defaultTheme._taggedTemplateLiteral(["\n opacity: 1;\n "])));
311
+ }, Overlay$1);
312
+ var OverlayInfo$1 = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject14$1 || (_templateObject14$1 = defaultTheme._taggedTemplateLiteral(["\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n padding: 15px 12px 10px;\n color: ", ";\n"])), function (props) {
313
+ return props.theme.getColor('gray-100');
314
+ });
315
+ var OverlayCompleted = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject15$1 || (_templateObject15$1 = defaultTheme._taggedTemplateLiteral(["\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n pointer-events: none;\n transition: border-color 120ms;\n border: 3px solid;\n ", ";\n"])), function (props) {
316
+ if (props.softSelected) return null;
317
+ return props.theme.themeProp('border-color', props.theme.getColor('emerald-500'), polished.rgba(props.theme.getColor('emerald-500'), 0.7));
318
+ });
319
+ var OverlayHasError = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject16$1 || (_templateObject16$1 = defaultTheme._taggedTemplateLiteral(["\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n pointer-events: none;\n transition: border-color 120ms;\n border: 3px solid;\n ", "\n"])), function (props) {
320
+ if (props.softSelected) return null;
321
+ return props.theme.themeProp('border-color', props.theme.getColor('red-600'), polished.rgba(props.theme.getColor('red-500'), 0.7));
322
+ });
323
+ var OverlaySelected$1 = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject17$1 || (_templateObject17$1 = defaultTheme._taggedTemplateLiteral(["\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n pointer-events: none;\n transition: border-color 120ms;\n border-style: solid;\n border-width: 3px;\n\n ", ";\n"])), function (props) {
324
+ if (props.softSelected) {
325
+ return props.theme.themeProp('border-color', polished.rgba(props.theme.getColor('gray-100'), 0.5), polished.rgba(props.theme.getColor('gray-700'), 0.5));
326
+ }
327
+
328
+ if (props.selected) {
329
+ return props.theme.themeProp('border-color', props.theme.getColor('gray-100'), props.theme.getColor('gray-700'));
330
+ }
331
+
332
+ return props.theme.themeProp('border-color', 'transparent', 'transparent');
333
+ });
334
+ var OverlayInfoTop$1 = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject18$1 || (_templateObject18$1 = defaultTheme._taggedTemplateLiteral(["\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n padding: 8px;\n display: flex;\n"])));
335
+ var OverlayInfoTopActions$1 = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject19$1 || (_templateObject19$1 = defaultTheme._taggedTemplateLiteral(["\n position: absolute;\n top: 0;\n right: 0;\n padding: 4px;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n transition: opacity 220ms;\n z-index: 99999;\n ", "\n\n opacity: ", ";\n"])), function (props) {
336
+ return props.theme.themeProp('color', props.theme.getColor('gray-300'), props.theme.getColor('gray-700'));
337
+ }, function (props) {
338
+ return props.isOverlayHovered ? 1 : 0;
339
+ });
340
+ var OverlayInfoTopVersions$1 = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject20$1 || (_templateObject20$1 = defaultTheme._taggedTemplateLiteral(["\n opacity: 1;\n display: ", ";\n\n ", ":hover & {\n opacity: 0;\n }\n"])), function (props) {
341
+ return props !== null && props !== void 0 && props.collapseExtraInfo ? 'none' : 'block';
342
+ }, Overlay$1);
343
+ var OverlayInfoTopWarning$1 = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject21$1 || (_templateObject21$1 = defaultTheme._taggedTemplateLiteral(["\n margin-left: auto;\n height: 24px;\n width: 24px;\n border-radius: 50%;\n box-sizing: border-box;\n padding: ", ";\n background-color: ", ";\n opacity: 1;\n\n svg {\n width: 100%;\n color: ", ";\n }\n\n ", ":hover & {\n opacity: 0;\n }\n"])), function (props) {
344
+ return props.type === 'error' ? 0 : '4px';
345
+ }, function (props) {
346
+ return props.type === 'error' ? props.theme.getColor('red-500') : props.theme.getColor('gray-100');
347
+ }, function (props) {
348
+ return props.type === 'error' ? props.theme.getColor('gray-100') : props.theme.getColor('gray-700');
349
+ }, Overlay$1);
350
+ var OverlayInfoBottom$1 = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject22$1 || (_templateObject22$1 = defaultTheme._taggedTemplateLiteral(["\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n padding: 8px;\n display: flex;\n"])));
351
+ var OverlayInfoBottomSelectButton$1 = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject23$1 || (_templateObject23$1 = defaultTheme._taggedTemplateLiteral(["\n opacity: ", ";\n flex-shrink: 0;\n cursor: pointer;\n transition: opacity 220ms;\n height: 24px;\n\n > svg {\n width: 24px;\n height: 24px;\n transition: opacity 120ms;\n opacity: ", ";\n }\n\n ", ":hover & {\n opacity: 1;\n }\n"])), function (props) {
352
+ return props.selected ? 1 : 0;
353
+ }, function (props) {
354
+ return props.selected ? 1 : 0.5;
355
+ }, Overlay$1);
356
+ var OverlayInfoBottomMediaIcon$1 = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject24$1 || (_templateObject24$1 = defaultTheme._taggedTemplateLiteral(["\n margin-left: auto;\n opacity: 1;\n\n ", ":hover & {\n opacity: 0;\n }\n"])), Overlay$1);
357
+ var ConsumerDefinedOverlay$1 = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject25$1 || (_templateObject25$1 = defaultTheme._taggedTemplateLiteral(["\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n pointer-events: none;\n"])));
358
+ var Fragment$1 = styled__default['default'].div(_templateObject26$1 || (_templateObject26$1 = defaultTheme._taggedTemplateLiteral(["\n margin: 4px;\n"])));
359
+
360
+ var ComputedRootComponent$1 = function ComputedRootComponent(_ref) {
361
+ var component = _ref.component,
362
+ asset = _ref.asset,
363
+ props = defaultTheme._objectWithoutProperties(_ref, ["component", "asset"]);
364
+
365
+ var newProps = lodash.mapKeys(lodash.omit(props, ['theme', 'extendedSelectMode']), function (_, key) {
366
+ return key === 'innerRef' ? 'ref' : key;
367
+ });
368
+
369
+ if (component) {
370
+ if (!lodash.isFunction(component)) throw Error('Expected a function in component-prop');
371
+
372
+ if (React__default['default'].isValidElement(component(asset, newProps.children))) {
373
+ return React__default['default'].cloneElement(component(asset, newProps.children), lodash.omit(newProps, ['children']));
374
+ }
375
+ }
376
+
377
+ return React__default['default'].createElement(AssetGalleryCompactCard$2, defaultTheme._extends({
378
+ ref: newProps.ref
379
+ }, newProps));
380
+ };
381
+
382
+ var ComputedActionButton$1 = React__default['default'].forwardRef(function ComputedActionButton(_ref2, forwardedRef) {
383
+ var component = _ref2.component,
384
+ className = _ref2.className,
385
+ _ref2$subActions = _ref2.subActions,
386
+ subActions = _ref2$subActions === void 0 ? [] : _ref2$subActions,
387
+ isSubActionsOpened = _ref2.isSubActionsOpened,
388
+ props = defaultTheme._objectWithoutProperties(_ref2, ["component", "className", "subActions", "isSubActionsOpened"]);
389
+
390
+ var newProps = props;
391
+
392
+ if (!lodash.isEmpty(subActions)) {
393
+ var contextMenuItems = subActions.map(function (subAction, key) {
394
+ var onClick = subAction.onClick,
395
+ title = subAction.title,
396
+ icon = subAction.icon;
397
+ return React__default['default'].createElement(ContextMenuItem.ContextMenuItem, {
398
+ key: key,
399
+ onClickEffect: onClick,
400
+ title: title,
401
+ icon: icon
402
+ });
403
+ });
404
+ var contextMenu = React__default['default'].createElement(ContextMenu.ContextMenu, null, contextMenuItems);
405
+ newProps.children = React__default['default'].createElement(Popover.Popover, {
406
+ contextMenu: true,
407
+ content: contextMenu,
408
+ placement: 'bottom-end',
409
+ visible: isSubActionsOpened,
410
+ zIndex: 10001,
411
+ offset: [0, -8]
412
+ }, React__default['default'].createElement(ActionButton.ActionButton, {
413
+ useShadow: true,
414
+ active: true,
415
+ ref: forwardedRef,
416
+ className: className,
417
+ icon: newProps.icon,
418
+ backgroundColors: ['black', 'white'],
419
+ onClick: newProps.onClick
420
+ }));
421
+ } else {
422
+ newProps.children = React__default['default'].createElement(ActionButton.ActionButton, {
423
+ useShadow: true,
424
+ active: true,
425
+ ref: forwardedRef,
426
+ className: className,
427
+ icon: newProps.icon,
428
+ onClick: newProps.onClick,
429
+ backgroundColors: ['black', 'white']
430
+ });
431
+ }
432
+
433
+ if (component) {
434
+ if (!lodash.isFunction(component)) throw Error('Expected a function in component-prop');
435
+
436
+ if (React__default['default'].isValidElement(component())) {
437
+ return React__default['default'].cloneElement(component(), defaultTheme._objectSpread2({}, lodash.omit(newProps, 'icon')));
438
+ }
439
+ }
440
+
441
+ return React__default['default'].createElement(React__default['default'].Fragment, null, newProps.children);
442
+ });
443
+
444
+ var AssetGalleryCompactCard = function AssetGalleryCompactCard(props) {
445
+ var _asset$note, _asset$note2;
446
+
447
+ var asset = props.asset,
448
+ selectable = props.selectable,
449
+ hasHeightAndWidth = props.hasHeightAndWidth,
450
+ selected = props.selected,
451
+ extendedSelectMode = props.extendedSelectMode,
452
+ onAssetSelected = props.onAssetSelected,
453
+ onAssetUnselected = props.onAssetUnselected,
454
+ softSelected = props.softSelected,
455
+ component = props.component,
456
+ scrollPosition = props.scrollPosition,
457
+ collapseExtraInfo = props.collapseExtraInfo;
458
+
459
+ var _React$useState = React__default['default'].useState(false),
460
+ _React$useState2 = defaultTheme._slicedToArray(_React$useState, 2),
461
+ isOverlayHovered = _React$useState2[0],
462
+ setIsOverlayHovered = _React$useState2[1];
463
+
464
+ var _React$useState3 = React__default['default'].useState([]),
465
+ _React$useState4 = defaultTheme._slicedToArray(_React$useState3, 2),
466
+ openedSubActions = _React$useState4[0],
467
+ updateOpenedSubActions = _React$useState4[1];
468
+
469
+ React.useEffect(function () {
470
+ var _asset$actions;
471
+
472
+ var newOpenedSubActions = ((_asset$actions = asset === null || asset === void 0 ? void 0 : asset.actions) !== null && _asset$actions !== void 0 ? _asset$actions : []).map(function () {
473
+ return false;
474
+ });
475
+ updateOpenedSubActions(newOpenedSubActions);
476
+ }, [asset]);
477
+ React.useEffect(function () {
478
+ if (!isOverlayHovered && openedSubActions !== null && openedSubActions !== void 0 && openedSubActions.length) {
479
+ updateOpenedSubActions(openedSubActions.map(function () {
480
+ return false;
481
+ }));
482
+ }
483
+ }, [isOverlayHovered]);
484
+ var mouseHasEnteredOverlay = React.useCallback(function () {
485
+ setIsOverlayHovered(true);
486
+ }, []);
487
+ var mouseHasLeftOverlay = React.useCallback(function () {
488
+ setIsOverlayHovered(false);
489
+ }, []);
490
+ var onSubActionsViewToggle = React.useCallback(function (actionIndex) {
491
+ var newOpenedSubActions = openedSubActions.map(function (isOpened, index) {
492
+ if (index !== actionIndex) {
493
+ return false;
494
+ }
495
+
496
+ return !isOpened;
497
+ });
498
+ updateOpenedSubActions(newOpenedSubActions);
499
+ }, [openedSubActions]);
500
+ var shouldOpenSubActions = React.useCallback(function (actionIndex) {
501
+ return openedSubActions[actionIndex];
502
+ }, [openedSubActions]);
503
+ var isAnySubActionsOpened = React.useMemo(function () {
504
+ return openedSubActions.some(function (isOpened) {
505
+ return isOpened;
506
+ });
507
+ }, [openedSubActions]);
508
+
509
+ function onClick(event) {
510
+ if (extendedSelectMode) {
511
+ return onSelectClick(event);
512
+ }
513
+
514
+ if (lodash.isFunction(asset.onClick)) {
515
+ asset.onClick(event, asset);
516
+ }
517
+ }
518
+
519
+ function onSelectClick(event) {
520
+ event.preventDefault();
521
+ event.stopPropagation();
522
+
523
+ if (selected) {
524
+ return onAssetUnselected(asset.key);
525
+ }
526
+
527
+ if (selectable) {
528
+ return onAssetSelected(asset.key);
529
+ }
530
+ }
531
+
532
+ var onActionClick = React.useCallback(function (event, action, index) {
533
+ event.preventDefault();
534
+ event.stopPropagation();
535
+
536
+ if (lodash.isFunction(action === null || action === void 0 ? void 0 : action.onClick)) {
537
+ action.onClick(asset);
538
+ }
539
+
540
+ if (!lodash.isEmpty(action === null || action === void 0 ? void 0 : action.subActions)) {
541
+ onSubActionsViewToggle(index);
542
+ }
543
+ }, [onSubActionsViewToggle]);
544
+
545
+ function onContextMenu(event) {
546
+ event.preventDefault();
547
+ asset.onContextMenu(event);
548
+ }
549
+
550
+ React.useEffect(function () {
551
+ if (lodash.isFunction(asset.onContextMenu)) {
552
+ if (cardRef.current) {
553
+ cardRef.current.addEventListener('contextmenu', onContextMenu);
554
+ }
555
+
556
+ return function () {
557
+ if (cardRef.current) {
558
+ cardRef.current.removeEventListener('contextmenu', onContextMenu);
559
+ }
560
+ };
561
+ }
562
+ }, []);
563
+
564
+ function onDragstart(event) {
565
+ asset.onDragstart(event);
566
+ }
567
+
568
+ React.useEffect(function () {
569
+ if (lodash.isFunction(asset.onDragstart)) {
570
+ if (dragRef.current) {
571
+ dragRef.current.addEventListener('dragstart', onDragstart);
572
+ }
573
+
574
+ return function () {
575
+ if (dragRef.current) {
576
+ dragRef.current.removeEventListener('dragstart', onDragstart);
577
+ }
578
+ };
579
+ }
580
+ }, []);
581
+ var videoPlayerRef = React.useRef();
582
+ var cardRef = React.useRef();
583
+ var dragRef = React.useRef(null);
584
+
585
+ function onMouseEnter(event) {
586
+ if (videoPlayerRef.current) {
587
+ var playPromise = videoPlayerRef.current.play();
588
+
589
+ if (playPromise !== undefined) {
590
+ playPromise.then(function () {})["catch"](function () {});
591
+ }
592
+ }
593
+
594
+ if (lodash.isFunction(asset.onMouseEnter)) {
595
+ asset.onMouseEnter(event, asset);
596
+ }
597
+ }
598
+
599
+ function onMouseLeave() {
600
+ if (videoPlayerRef.current) {
601
+ videoPlayerRef.current.pause();
602
+ }
603
+ }
604
+
605
+ var renderPreview = function renderPreview(asset) {
606
+ var _asset$fileType, _asset$fileType2;
607
+
608
+ var previewContent = null;
609
+
610
+ if ((asset === null || asset === void 0 ? void 0 : (_asset$fileType = asset.fileType) === null || _asset$fileType === void 0 ? void 0 : _asset$fileType.toLowerCase()) === 'video') {
611
+ previewContent = React__default['default'].createElement(reactLazyLoadImageComponent.LazyLoadComponent, {
612
+ scrollPosition: scrollPosition
613
+ }, React__default['default'].createElement("video", {
614
+ ref: videoPlayerRef,
615
+ loop: true,
616
+ muted: true
617
+ }, React__default['default'].createElement("source", {
618
+ src: asset.previewUrl,
619
+ type: "video/mp4"
620
+ })));
621
+ } else if ((asset === null || asset === void 0 ? void 0 : (_asset$fileType2 = asset.fileType) === null || _asset$fileType2 === void 0 ? void 0 : _asset$fileType2.toLowerCase()) === 'audio') {
622
+ previewContent = React__default['default'].createElement(reactLazyLoadImageComponent.LazyLoadComponent, {
623
+ scrollPosition: scrollPosition
624
+ }, React__default['default'].createElement("div", {
625
+ className: "audio"
626
+ }, React__default['default'].createElement(SvgHeadset, null)));
627
+ } else {
628
+ previewContent = React__default['default'].createElement(reactLazyLoadImageComponent.LazyLoadImage, {
629
+ alt: asset === null || asset === void 0 ? void 0 : asset.title,
630
+ src: asset === null || asset === void 0 ? void 0 : asset.previewUrl,
631
+ height: "100%",
632
+ width: "100%",
633
+ delayMethod: "debounce",
634
+ delayTime: 0,
635
+ threshold: 1500,
636
+ scrollPosition: scrollPosition
637
+ });
638
+ }
639
+
640
+ return React__default['default'].createElement(Figure$1, {
641
+ hasHeightAndWidth: hasHeightAndWidth
642
+ }, previewContent, React__default['default'].createElement(FigureOverlayBackdrop$1, {
643
+ selected: selected
644
+ }));
645
+ };
646
+
647
+ React.useEffect(function () {
648
+ if (softSelected) {
649
+ cardRef.current.scrollIntoView({
650
+ behavior: 'smooth',
651
+ block: 'nearest'
652
+ });
653
+ }
654
+ }, [softSelected]);
655
+ var renderVersionsBadge = React.useCallback(function () {
656
+ if (!(asset !== null && asset !== void 0 && asset.versions)) return null;
657
+ return React__default['default'].createElement(Badge.Badge, {
658
+ badgeIcon: React__default['default'].createElement(SvgLayers, null),
659
+ badgeContent: asset.versions,
660
+ backgroundColors: ['black', 'black'],
661
+ colors: ['#f7f8f9', '#f7f8f9'],
662
+ fontSize: 12,
663
+ fontWeight: 500,
664
+ lineHeight: 16,
665
+ verticalPadding: 4,
666
+ horizontalPadding: 8
667
+ });
668
+ }, [asset]);
669
+ var renderMediaBadge = React.useCallback(function () {
670
+ var badgeIcon = null;
671
+ var badgeContent = null;
672
+
673
+ if ((asset === null || asset === void 0 ? void 0 : asset.fileType) === 'video') {
674
+ badgeIcon = React__default['default'].createElement(SvgPlay, null);
675
+ }
676
+
677
+ if (asset !== null && asset !== void 0 && asset.duration) {
678
+ badgeContent = convertMsToHMS(asset.duration);
679
+ }
680
+
681
+ if (!badgeIcon && !badgeContent) return null;
682
+ return React__default['default'].createElement(Badge.Badge, {
683
+ badgeIcon: badgeIcon,
684
+ badgeContent: badgeContent,
685
+ backgroundColors: ['black', 'black'],
686
+ colors: ['#f7f8f9', '#f7f8f9'],
687
+ fontSize: 12,
688
+ fontWeight: 500,
689
+ lineHeight: 16,
690
+ verticalPadding: 4,
691
+ horizontalPadding: 8,
692
+ minWidth: 32,
693
+ height: 24
694
+ });
695
+ }, [asset]);
696
+ var renderSummaryCardHeaderLeft = React.useCallback(function () {
697
+ return React__default['default'].createElement(React__default['default'].Fragment, null, renderVersionsBadge(), renderMediaBadge());
698
+ }, [asset]);
699
+ var renderPopoverContent = React.useCallback(function () {
700
+ var _asset$summary = asset.summary,
701
+ title = _asset$summary.title,
702
+ description = _asset$summary.description,
703
+ instructions = _asset$summary.instructions,
704
+ instructionsType = _asset$summary.instructionsType,
705
+ headerLeft = _asset$summary.headerLeft,
706
+ headerRight = _asset$summary.headerRight,
707
+ footerLeft = _asset$summary.footerLeft,
708
+ footerRight = _asset$summary.footerRight;
709
+ return React__default['default'].createElement(SummaryCard, {
710
+ title: title ? title : '',
711
+ description: description ? description : '',
712
+ instructions: instructions ? instructions : '',
713
+ instructionsType: instructionsType ? instructionsType : '',
714
+ headerRight: headerRight,
715
+ headerLeft: React__default['default'].createElement(React__default['default'].Fragment, null, renderSummaryCardHeaderLeft(), headerLeft),
716
+ footerLeft: footerLeft,
717
+ footerRight: footerRight,
718
+ width: 375
719
+ });
720
+ }, [asset]);
721
+ return React__default['default'].createElement(AssetGalleryWrapper$1, {
722
+ disabled: asset.disabled
723
+ }, React__default['default'].createElement(AssetGalleryCompactCard$2, {
724
+ as: ComputedRootComponent$1,
725
+ component: component,
726
+ disabled: asset.disabled,
727
+ asset: asset,
728
+ onClick: onClick,
729
+ extendedSelectMode: extendedSelectMode,
730
+ onMouseEnter: onMouseEnter,
731
+ onMouseLeave: onMouseLeave,
732
+ draggable: asset.draggable,
733
+ innerRef: dragRef,
734
+ selected: selected
735
+ }, asset.previewUrl && renderPreview(asset), React__default['default'].createElement(Popover.Popover, {
736
+ content: renderPopoverContent(),
737
+ placement: 'bottom',
738
+ visible: isOverlayHovered && !isAnySubActionsOpened,
739
+ zIndex: 10000
740
+ }, React__default['default'].createElement(Overlay$1, {
741
+ ref: cardRef,
742
+ onMouseEnter: mouseHasEnteredOverlay,
743
+ onMouseLeave: mouseHasLeftOverlay
744
+ }, React__default['default'].createElement(OverlayBackdrop$1, {
745
+ softSelected: softSelected,
746
+ selected: selected
747
+ }), React__default['default'].createElement(OverlayInfoTopActions$1, {
748
+ isOverlayHovered: isOverlayHovered
749
+ }, asset.actions && asset.actions.map(function (action, index) {
750
+ return React__default['default'].createElement(Tooltip.Tooltip, {
751
+ key: "".concat(asset.key, "-").concat(action.title),
752
+ content: action.title
753
+ }, React__default['default'].createElement(Fragment$1, {
754
+ as: ComputedActionButton$1,
755
+ component: action.component,
756
+ className: action.className,
757
+ icon: action.icon,
758
+ isSubActionsOpened: shouldOpenSubActions(index),
759
+ subActions: action.subActions,
760
+ onClick: function onClick(event) {
761
+ return onActionClick(event, action, index);
762
+ }
763
+ }));
764
+ })), React__default['default'].createElement(OverlayInfo$1, null, React__default['default'].createElement(OverlayInfoTop$1, null, React__default['default'].createElement(OverlayInfoTopVersions$1, {
765
+ collapseExtraInfo: collapseExtraInfo
766
+ }, renderVersionsBadge()), (asset === null || asset === void 0 ? void 0 : (_asset$note = asset.note) === null || _asset$note === void 0 ? void 0 : _asset$note.title) && React__default['default'].createElement(OverlayInfoTopWarning$1, {
767
+ type: asset === null || asset === void 0 ? void 0 : (_asset$note2 = asset.note) === null || _asset$note2 === void 0 ? void 0 : _asset$note2.type
768
+ }, React__default['default'].createElement(warningCircle.SvgWarningCircle, null))), React__default['default'].createElement(OverlayInfoBottom$1, null, selectable && React__default['default'].createElement(OverlayInfoBottomSelectButton$1, {
769
+ selected: selected
770
+ }, React__default['default'].createElement(SvgCheckRectangleFilled, {
771
+ onClick: onSelectClick
772
+ })), React__default['default'].createElement(OverlayInfoBottomMediaIcon$1, null, renderMediaBadge()))), asset.completed && React__default['default'].createElement(OverlayCompleted, {
773
+ softSelected: softSelected
774
+ }), asset.hasError && React__default['default'].createElement(OverlayHasError, {
775
+ softSelected: softSelected
776
+ }), selectable && React__default['default'].createElement(OverlaySelected$1, {
777
+ selected: selected,
778
+ softSelected: softSelected
779
+ }))), asset.overlay && React__default['default'].createElement(ConsumerDefinedOverlay$1, null, asset.overlay)));
780
+ };
781
+
782
+ AssetGalleryCompactCard.propTypes = process.env.NODE_ENV !== "production" ? {
783
+ asset: defaultTheme.PropTypes.shape(assetShapeWithLayout).isRequired,
784
+ hasHeightAndWidth: defaultTheme.PropTypes.bool.isRequired,
785
+ selectable: defaultTheme.PropTypes.bool,
786
+ selected: defaultTheme.PropTypes.bool,
787
+ extendedSelectMode: defaultTheme.PropTypes.bool,
788
+ onAssetSelected: defaultTheme.PropTypes.func.isRequired,
789
+ onAssetUnselected: defaultTheme.PropTypes.func.isRequired,
790
+ softSelected: defaultTheme.PropTypes.bool.isRequired,
791
+ component: defaultTheme.PropTypes.func,
792
+ scrollPosition: defaultTheme.PropTypes.number,
793
+ collapseExtraInfo: defaultTheme.PropTypes.bool
794
+ } : {};
795
+ AssetGalleryCompactCard.defaultProps = {};
796
+ var AssetGalleryCompactCard$1 = reactLazyLoadImageComponent.trackWindowScroll(React__default['default'].memo(AssetGalleryCompactCard, function (prevProps, nextProps) {
797
+ var reactiveProps = ['selectable', 'selected', 'extendedSelectMode', 'softSelected', 'asset.previewUrl', 'asset.overlay', 'hasHeightAndWidth', 'collapseExtraInfo'];
798
+ return reactiveProps.every(function (propKey) {
799
+ return lodash.get(prevProps, propKey) === lodash.get(nextProps, propKey);
800
+ });
801
+ }));
802
+
803
+ var _templateObject$1, _templateObject2$1, _templateObject3$1, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14, _templateObject15, _templateObject16, _templateObject17, _templateObject18, _templateObject19, _templateObject20, _templateObject21, _templateObject22, _templateObject23, _templateObject24, _templateObject25, _templateObject26;
804
+ var AssetGalleryWrapper = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject$1 || (_templateObject$1 = defaultTheme._taggedTemplateLiteral(["\n ", ";\n"])), function (props) {
805
+ return props.disabled && styled.css(_templateObject2$1 || (_templateObject2$1 = defaultTheme._taggedTemplateLiteral(["\n cursor: not-allowed;\n "])));
806
+ });
807
+ var AssetGalleryGridCard$2 = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject3$1 || (_templateObject3$1 = defaultTheme._taggedTemplateLiteral(["\n display: block;\n position: relative;\n height: 100%;\n margin: 0;\n box-sizing: border-box;\n border-width: ", "px;\n border-style: solid;\n text-decoration: none;\n cursor: pointer;\n\n ", "\n\n ", ";\n\n ", "\n\n ", ";\n"])), function (props) {
808
+ var selected = props.selected,
809
+ softSelected = props.softSelected,
810
+ hasError = props.hasError,
811
+ completed = props.completed;
812
+ return selected || softSelected || hasError || completed ? 3 : 1;
813
+ }, function (props) {
814
+ return props.theme.themeProp('color', props.theme.getColor('gray-300'), props.theme.getColor('gray-700'));
815
+ }, function (props) {
816
+ return props.disabled && styled.css(_templateObject4 || (_templateObject4 = defaultTheme._taggedTemplateLiteral(["\n pointer-events: none;\n opacity: 0.4;\n "])));
817
+ }, function (props) {
818
+ return props.extendedSelectMode && styled.css(_templateObject5 || (_templateObject5 = defaultTheme._taggedTemplateLiteral(["\n cursor: pointer;\n "])));
819
+ }, function (props) {
820
+ if (props.softSelected) {
821
+ return props.theme.themeProp('border-color', polished.rgba(props.theme.getColor('gray-100'), 0.5), polished.rgba(props.theme.getColor('gray-700'), 0.5));
822
+ }
823
+
824
+ if (props.selected) {
825
+ return props.theme.themeProp('border-color', props.theme.getColor('gray-100'), props.theme.getColor('gray-700'));
826
+ }
827
+
828
+ if (props.completed) {
829
+ return props.theme.themeProp('border-color', props.theme.getColor('emerald-500'), polished.rgba(props.theme.getColor('emerald-500'), 0.7));
830
+ }
831
+
832
+ if (props.hasError) {
833
+ return props.theme.themeProp('border-color', props.theme.getColor('red-600'), polished.rgba(props.theme.getColor('red-500'), 0.7));
834
+ }
835
+
836
+ return props.theme.themeProp('border-color', props.theme.getColor('gray-700'), props.theme.getColor('gray-300'));
837
+ });
838
+ var ContentWrapper = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject6 || (_templateObject6 = defaultTheme._taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n padding: ", "px;\n padding-top: 35px;\n height: 100%;\n"])), function (props) {
839
+ return props.selected || props.softSelected ? 4 : 0;
840
+ });
841
+ var Asset = styled__default['default'].div(_templateObject7 || (_templateObject7 = defaultTheme._taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n position: relative;\n padding: 0 36px;\n min-height: 200px;\n box-sizing: border-box;\n\n video {\n display: block;\n }\n\n .audio {\n display: flex;\n justify-content: center;\n svg {\n width: 25%;\n }\n }\n"])));
842
+ var Figure = styled__default['default'].figure(_templateObject8 || (_templateObject8 = defaultTheme._taggedTemplateLiteral(["\n position: relative;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n margin: 0;\n\n img,\n video,\n .audio {\n display: block;\n max-height: 200px;\n width: 100%;\n box-sizing: border-box;\n\n ", "\n }\n\n .audio {\n display: flex;\n height: 200px;\n justify-content: center;\n svg {\n width: 25%;\n }\n }\n"])), function (props) {
843
+ return props.hasHeightAndWidth ? styled.css(_templateObject9 || (_templateObject9 = defaultTheme._taggedTemplateLiteral(["\n object-fit: cover;\n "]))) : styled.css(_templateObject10 || (_templateObject10 = defaultTheme._taggedTemplateLiteral(["\n object-fit: contain;\n "])));
844
+ });
845
+ var FigureOverlayBackdrop = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject11 || (_templateObject11 = defaultTheme._taggedTemplateLiteral(["\n position: absolute;\n inset: 0;\n opacity: ", ";\n background-color: ", ";\n"])), function (props) {
846
+ return props.selected ? 0.6 : 0;
847
+ }, function (props) {
848
+ return props.selected ? '#ACCEF7' : 'transparent';
849
+ });
850
+ var Overlay = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject12 || (_templateObject12 = defaultTheme._taggedTemplateLiteral(["\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n"])));
851
+ var OverlayBackdrop = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject13 || (_templateObject13 = defaultTheme._taggedTemplateLiteral(["\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n opacity: 0;\n transition: opacity 220ms;\n ", "\n\n ", "\n\n ", ":hover & {\n opacity: 1;\n }\n\n ", ":hover & {\n opacity: 1;\n }\n"])), function (props) {
852
+ return !props.selected ? styled.css(_templateObject14 || (_templateObject14 = defaultTheme._taggedTemplateLiteral(["\n background: radial-gradient(\n ellipse at center,\n rgba(0, 0, 0, 0.3) 27%,\n rgba(0, 0, 0, 0.5) 60%,\n rgba(0, 0, 0, 0.7) 90%\n );\n "]))) : null;
853
+ }, function (props) {
854
+ return (props.selected || props.softSelected) && styled.css(_templateObject15 || (_templateObject15 = defaultTheme._taggedTemplateLiteral(["\n opacity: 1;\n "])));
855
+ }, Overlay, AssetGalleryGridCard$2);
856
+ var OverlayInfo = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject16 || (_templateObject16 = defaultTheme._taggedTemplateLiteral(["\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n padding: 15px 12px 10px;\n color: ", ";\n"])), function (props) {
857
+ return props.theme.getColor('gray-100');
858
+ });
859
+ var OverlaySelected = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject17 || (_templateObject17 = defaultTheme._taggedTemplateLiteral(["\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n pointer-events: none;\n"])));
860
+ var OverlayInfoTop = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject18 || (_templateObject18 = defaultTheme._taggedTemplateLiteral(["\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n padding: 8px;\n display: flex;\n"])));
861
+ var OverlayInfoTopVersions = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject19 || (_templateObject19 = defaultTheme._taggedTemplateLiteral(["\n opacity: 1;\n\n ", ":hover & {\n opacity: 0;\n }\n"])), AssetGalleryGridCard$2);
862
+ var OverlayInfoTopWarning = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject20 || (_templateObject20 = defaultTheme._taggedTemplateLiteral(["\n margin-left: auto;\n height: 24px;\n width: 24px;\n border-radius: 50%;\n box-sizing: border-box;\n padding: ", ";\n background-color: ", ";\n opacity: 1;\n\n svg {\n width: 100%;\n color: ", ";\n }\n\n ", ":hover & {\n opacity: 0;\n }\n"])), function (props) {
863
+ return props.type === 'error' ? 0 : '4px';
864
+ }, function (props) {
865
+ return props.type === 'error' ? props.theme.getColor('red-500') : props.theme.getColor('gray-100');
866
+ }, function (props) {
867
+ return props.type === 'error' ? props.theme.getColor('gray-100') : props.theme.getColor('gray-700');
868
+ }, AssetGalleryGridCard$2);
869
+ var OverlayInfoTopActions = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject21 || (_templateObject21 = defaultTheme._taggedTemplateLiteral(["\n position: absolute;\n top: 0;\n right: 0;\n padding: 4px;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n transition: opacity 220ms;\n z-index: 99999;\n ", "\n\n opacity: ", ";\n"])), function (props) {
870
+ return props.theme.themeProp('color', props.theme.getColor('gray-300'), props.theme.getColor('gray-700'));
871
+ }, function (props) {
872
+ return props.isCardHovered ? 1 : 0;
873
+ });
874
+ var OverlayInfoBottom = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject22 || (_templateObject22 = defaultTheme._taggedTemplateLiteral(["\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n padding: 8px;\n display: flex;\n"])));
875
+ var OverlayInfoBottomSelectButton = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject23 || (_templateObject23 = defaultTheme._taggedTemplateLiteral(["\n opacity: ", ";\n flex-shrink: 0;\n cursor: pointer;\n transition: opacity 220ms;\n\n > svg {\n width: 23px;\n height: 100%;\n transition: opacity 120ms;\n opacity: ", ";\n }\n\n ", ":hover & {\n opacity: 1;\n }\n\n ", ":hover & {\n opacity: 1;\n }\n"])), function (props) {
876
+ return props.selected ? 1 : 0;
877
+ }, function (props) {
878
+ return props.selected ? 1 : 0.5;
879
+ }, Overlay, AssetGalleryGridCard$2);
880
+ var OverlayInfoBottomMediaIcon = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject24 || (_templateObject24 = defaultTheme._taggedTemplateLiteral(["\n margin-left: auto;\n opacity: 1;\n ", ":hover & {\n opacity: 0;\n }\n"])), AssetGalleryGridCard$2);
881
+ var ConsumerDefinedOverlay = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject25 || (_templateObject25 = defaultTheme._taggedTemplateLiteral(["\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n pointer-events: none;\n"])));
882
+ var Fragment = styled__default['default'].div(_templateObject26 || (_templateObject26 = defaultTheme._taggedTemplateLiteral(["\n margin: 4px;\n"])));
883
+
884
+ var ComputedRootComponent = function ComputedRootComponent(_ref) {
885
+ var component = _ref.component,
886
+ asset = _ref.asset,
887
+ props = defaultTheme._objectWithoutProperties(_ref, ["component", "asset"]);
888
+
889
+ var newProps = lodash.mapKeys(lodash.omit(props, ['theme', 'extendedSelectMode']), function (_, key) {
890
+ return key === 'innerRef' ? 'ref' : key;
891
+ });
892
+
893
+ if (component) {
894
+ if (!lodash.isFunction(component)) throw Error('Expected a function in component-prop');
895
+
896
+ if (React__default['default'].isValidElement(component(asset, newProps.children))) {
897
+ return React__default['default'].cloneElement(component(asset, newProps.children), lodash.omit(newProps, ['children']));
898
+ }
899
+ }
900
+
901
+ return React__default['default'].createElement(AssetGalleryGridCard$2, defaultTheme._extends({
902
+ ref: newProps.ref
903
+ }, newProps));
904
+ };
905
+
906
+ ComputedRootComponent.propTypes = process.env.NODE_ENV !== "production" ? {} : {};
907
+ var ComputedActionButton = React__default['default'].forwardRef(function ComputedActionButton(_ref2, forwardedRef) {
908
+ var component = _ref2.component,
909
+ className = _ref2.className,
910
+ _ref2$subActions = _ref2.subActions,
911
+ subActions = _ref2$subActions === void 0 ? [] : _ref2$subActions,
912
+ isSubActionsOpened = _ref2.isSubActionsOpened,
913
+ props = defaultTheme._objectWithoutProperties(_ref2, ["component", "className", "subActions", "isSubActionsOpened"]);
914
+
915
+ var newProps = props;
916
+
917
+ if (!lodash.isEmpty(subActions)) {
918
+ var contextMenuItems = subActions.map(function (subAction, key) {
919
+ var onClick = subAction.onClick,
920
+ title = subAction.title,
921
+ icon = subAction.icon;
922
+ return React__default['default'].createElement(ContextMenuItem.ContextMenuItem, {
923
+ key: key,
924
+ onClickEffect: onClick,
925
+ title: title,
926
+ icon: icon
927
+ });
928
+ });
929
+ var contextMenu = React__default['default'].createElement(ContextMenu.ContextMenu, null, contextMenuItems);
930
+ newProps.children = React__default['default'].createElement(Popover.Popover, {
931
+ contextMenu: true,
932
+ content: contextMenu,
933
+ placement: 'bottom-end',
934
+ visible: isSubActionsOpened,
935
+ zIndex: 10001,
936
+ offset: [0, -8]
937
+ }, React__default['default'].createElement(ActionButton.ActionButton, {
938
+ useShadow: true,
939
+ active: true,
940
+ ref: forwardedRef,
941
+ className: className,
942
+ icon: newProps.icon,
943
+ backgroundColors: ['black', 'white'],
944
+ onClick: newProps.onClick
945
+ }));
946
+ } else {
947
+ newProps.children = React__default['default'].createElement(ActionButton.ActionButton, {
948
+ useShadow: true,
949
+ active: true,
950
+ ref: forwardedRef,
951
+ className: className,
952
+ icon: newProps.icon,
953
+ onClick: newProps.onClick,
954
+ backgroundColors: ['black', 'white']
955
+ });
956
+ }
957
+
958
+ if (component) {
959
+ if (!lodash.isFunction(component)) throw Error('Expected a function in component-prop');
960
+
961
+ if (React__default['default'].isValidElement(component())) {
962
+ return React__default['default'].cloneElement(component(), defaultTheme._objectSpread2({}, lodash.omit(newProps, 'icon')));
963
+ }
964
+ }
965
+
966
+ return React__default['default'].createElement(React__default['default'].Fragment, null, newProps.children);
967
+ });
968
+
969
+ var AssetGalleryGridCard = function AssetGalleryGridCard(props) {
970
+ var asset = props.asset,
971
+ selectable = props.selectable,
972
+ selected = props.selected,
973
+ extendedSelectMode = props.extendedSelectMode,
974
+ onAssetSelected = props.onAssetSelected,
975
+ onAssetUnselected = props.onAssetUnselected,
976
+ softSelected = props.softSelected,
977
+ component = props.component,
978
+ scrollPosition = props.scrollPosition;
979
+
980
+ var _React$useState = React__default['default'].useState(false),
981
+ _React$useState2 = defaultTheme._slicedToArray(_React$useState, 2),
982
+ isCardHovered = _React$useState2[0],
983
+ setIsCardHovered = _React$useState2[1];
984
+
985
+ var _React$useState3 = React__default['default'].useState([]),
986
+ _React$useState4 = defaultTheme._slicedToArray(_React$useState3, 2),
987
+ openedSubActions = _React$useState4[0],
988
+ updateOpenedSubActions = _React$useState4[1];
989
+
990
+ React.useEffect(function () {
991
+ var _asset$actions;
992
+
993
+ var newOpenedSubActions = ((_asset$actions = asset === null || asset === void 0 ? void 0 : asset.actions) !== null && _asset$actions !== void 0 ? _asset$actions : []).map(function () {
994
+ return false;
995
+ });
996
+ updateOpenedSubActions(newOpenedSubActions);
997
+ }, [asset]);
998
+ React.useEffect(function () {
999
+ if (!isCardHovered && openedSubActions !== null && openedSubActions !== void 0 && openedSubActions.length) {
1000
+ updateOpenedSubActions(openedSubActions.map(function () {
1001
+ return false;
1002
+ }));
1003
+ }
1004
+ }, [isCardHovered]);
1005
+ var mouseHasEnteredCard = React.useCallback(function () {
1006
+ setIsCardHovered(true);
1007
+ }, []);
1008
+ var mouseHasLeftCard = React.useCallback(function () {
1009
+ setIsCardHovered(false);
1010
+ }, []);
1011
+ var onSubActionsViewToggle = React.useCallback(function (actionIndex) {
1012
+ var newOpenedSubActions = openedSubActions.map(function (isOpened, index) {
1013
+ if (index !== actionIndex) {
1014
+ return false;
1015
+ }
1016
+
1017
+ return !isOpened;
1018
+ });
1019
+ updateOpenedSubActions(newOpenedSubActions);
1020
+ }, [openedSubActions]);
1021
+ var videoPlayerRef = React.useRef();
1022
+ var cardRef = React.useRef();
1023
+ var dragRef = React.useRef(null);
1024
+
1025
+ function onMouseEnter(event) {
1026
+ if (videoPlayerRef.current) {
1027
+ var playPromise = videoPlayerRef.current.play();
1028
+
1029
+ if (playPromise !== undefined) {
1030
+ playPromise.then(function () {})["catch"](function () {});
1031
+ }
1032
+ }
1033
+
1034
+ if (lodash.isFunction(asset.onMouseEnter)) {
1035
+ asset.onMouseEnter(event, asset);
1036
+ }
1037
+
1038
+ mouseHasEnteredCard();
1039
+ }
1040
+
1041
+ function onMouseLeave() {
1042
+ if (videoPlayerRef.current) {
1043
+ videoPlayerRef.current.pause();
1044
+ }
1045
+
1046
+ mouseHasLeftCard();
1047
+ }
1048
+
1049
+ function onClick(event) {
1050
+ if (extendedSelectMode) {
1051
+ return onSelectClick(event);
1052
+ }
1053
+
1054
+ if (lodash.isFunction(asset.onClick)) {
1055
+ asset.onClick(event, asset);
1056
+ }
1057
+ }
1058
+
1059
+ function onSelectClick(event) {
1060
+ event.preventDefault();
1061
+ event.stopPropagation();
1062
+
1063
+ if (selected) {
1064
+ return onAssetUnselected(asset.key);
1065
+ }
1066
+
1067
+ return onAssetSelected(asset.key);
1068
+ }
1069
+
1070
+ var onActionClick = React.useCallback(function (event, action, index) {
1071
+ event.preventDefault();
1072
+ event.stopPropagation();
1073
+
1074
+ if (lodash.isFunction(action === null || action === void 0 ? void 0 : action.onClick)) {
1075
+ action.onClick(asset);
1076
+ }
1077
+
1078
+ if (!lodash.isEmpty(action === null || action === void 0 ? void 0 : action.subActions)) {
1079
+ onSubActionsViewToggle(index);
1080
+ }
1081
+ }, [onSubActionsViewToggle]);
1082
+ var shouldOpenSubActions = React.useCallback(function (actionIndex) {
1083
+ return openedSubActions[actionIndex];
1084
+ }, [openedSubActions]);
1085
+
1086
+ function onContextMenu(event) {
1087
+ event.preventDefault();
1088
+ asset.onContextMenu(event);
1089
+ }
1090
+
1091
+ function renderPreview(asset) {
1092
+ var _asset$fileType, _asset$fileType2, _asset$note, _asset$note2;
1093
+
1094
+ var previewContent = null;
1095
+
1096
+ if (((_asset$fileType = asset.fileType) === null || _asset$fileType === void 0 ? void 0 : _asset$fileType.toLowerCase()) === 'video') {
1097
+ previewContent = React__default['default'].createElement(reactLazyLoadImageComponent.LazyLoadComponent, {
1098
+ scrollPosition: scrollPosition
1099
+ }, React__default['default'].createElement("video", {
1100
+ ref: videoPlayerRef,
1101
+ loop: true,
1102
+ muted: true
1103
+ }, React__default['default'].createElement("source", {
1104
+ src: asset.previewUrl,
1105
+ type: "video/mp4"
1106
+ })));
1107
+ } else if (((_asset$fileType2 = asset.fileType) === null || _asset$fileType2 === void 0 ? void 0 : _asset$fileType2.toLowerCase()) === 'audio') {
1108
+ previewContent = React__default['default'].createElement(reactLazyLoadImageComponent.LazyLoadComponent, {
1109
+ scrollPosition: scrollPosition
1110
+ }, React__default['default'].createElement("div", {
1111
+ className: "audio"
1112
+ }, React__default['default'].createElement(SvgHeadset, null)));
1113
+ } else {
1114
+ previewContent = React__default['default'].createElement(reactLazyLoadImageComponent.LazyLoadImage, {
1115
+ alt: asset.title,
1116
+ src: asset.previewUrl,
1117
+ height: "100%",
1118
+ width: "100%",
1119
+ delayMethod: "debounce",
1120
+ delayTime: 0,
1121
+ threshold: 1500,
1122
+ scrollPosition: scrollPosition
1123
+ });
1124
+ }
1125
+
1126
+ return React__default['default'].createElement(Figure, {
1127
+ selected: selected
1128
+ }, previewContent, React__default['default'].createElement(FigureOverlayBackdrop, {
1129
+ selected: selected
1130
+ }), React__default['default'].createElement(Overlay, {
1131
+ ref: cardRef
1132
+ }, React__default['default'].createElement(OverlayBackdrop, {
1133
+ softSelected: softSelected,
1134
+ selected: selected
1135
+ }), React__default['default'].createElement(OverlayInfo, null, React__default['default'].createElement(OverlayInfoTop, null, React__default['default'].createElement(OverlayInfoTopVersions, null, renderVersionsBadge()), (asset === null || asset === void 0 ? void 0 : (_asset$note = asset.note) === null || _asset$note === void 0 ? void 0 : _asset$note.title) && React__default['default'].createElement(OverlayInfoTopWarning, {
1136
+ type: asset === null || asset === void 0 ? void 0 : (_asset$note2 = asset.note) === null || _asset$note2 === void 0 ? void 0 : _asset$note2.type
1137
+ }, React__default['default'].createElement(warningCircle.SvgWarningCircle, null)), React__default['default'].createElement(OverlayInfoTopActions, {
1138
+ isCardHovered: isCardHovered
1139
+ }, asset.actions && asset.actions.map(function (action, index) {
1140
+ return React__default['default'].createElement(Tooltip.Tooltip, {
1141
+ key: "".concat(asset.key, "-").concat(action.title),
1142
+ content: action.title
1143
+ }, React__default['default'].createElement(Fragment, {
1144
+ as: ComputedActionButton,
1145
+ component: action.component,
1146
+ className: action.className,
1147
+ icon: action.icon,
1148
+ isCardHovered: isCardHovered,
1149
+ isSubActionsOpened: shouldOpenSubActions(index),
1150
+ onClick: function onClick(event) {
1151
+ return onActionClick(event, action, index);
1152
+ },
1153
+ subActions: action === null || action === void 0 ? void 0 : action.subActions
1154
+ }));
1155
+ }))), React__default['default'].createElement(OverlayInfoBottom, null, selectable && React__default['default'].createElement(OverlayInfoBottomSelectButton, {
1156
+ selected: selected
1157
+ }, React__default['default'].createElement(SvgCheckRectangleFilled, {
1158
+ onClick: onSelectClick
1159
+ })), React__default['default'].createElement(OverlayInfoBottomMediaIcon, null, renderMediaBadge()))), selectable && React__default['default'].createElement(OverlaySelected, {
1160
+ selected: selected,
1161
+ softSelected: softSelected
1162
+ })), asset.overlay && React__default['default'].createElement(ConsumerDefinedOverlay, null, asset.overlay));
1163
+ }
1164
+
1165
+ React.useEffect(function () {
1166
+ if (lodash.isFunction(asset.onContextMenu)) {
1167
+ if (cardRef.current) {
1168
+ cardRef.current.addEventListener('contextmenu', onContextMenu);
1169
+ }
1170
+
1171
+ return function () {
1172
+ if (cardRef.current) {
1173
+ cardRef.current.removeEventListener('contextmenu', onContextMenu);
1174
+ }
1175
+ };
1176
+ }
1177
+ }, []);
1178
+
1179
+ function onDragstart(event) {
1180
+ asset.onDragstart(event);
1181
+ }
1182
+
1183
+ React.useEffect(function () {
1184
+ if (lodash.isFunction(asset.onDragstart)) {
1185
+ if (dragRef.current) {
1186
+ dragRef.current.addEventListener('dragstart', onDragstart);
1187
+ }
1188
+
1189
+ return function () {
1190
+ if (dragRef.current) {
1191
+ dragRef.current.removeEventListener('dragstart', onDragstart);
1192
+ }
1193
+ };
1194
+ }
1195
+ }, []);
1196
+ React.useEffect(function () {
1197
+ if (softSelected) {
1198
+ cardRef.current.scrollIntoView({
1199
+ behavior: 'smooth',
1200
+ block: 'nearest'
1201
+ });
1202
+ }
1203
+ }, [softSelected]);
1204
+ var renderVersionsBadge = React.useCallback(function () {
1205
+ if (!(asset !== null && asset !== void 0 && asset.versions)) return null;
1206
+ return React__default['default'].createElement(Badge.Badge, {
1207
+ badgeIcon: React__default['default'].createElement(SvgLayers, null),
1208
+ badgeContent: asset.versions,
1209
+ backgroundColors: ['black', 'black'],
1210
+ colors: ['#f7f8f9', '#f7f8f9'],
1211
+ fontSize: 12,
1212
+ fontWeight: 500,
1213
+ lineHeight: 16,
1214
+ verticalPadding: 4,
1215
+ horizontalPadding: 8
1216
+ });
1217
+ }, [asset]);
1218
+ var renderMediaBadge = React.useCallback(function () {
1219
+ var badgeIcon = null;
1220
+ var badgeContent = null;
1221
+
1222
+ if ((asset === null || asset === void 0 ? void 0 : asset.fileType) === 'video') {
1223
+ badgeIcon = React__default['default'].createElement(SvgPlay, null);
1224
+ }
1225
+
1226
+ if (asset !== null && asset !== void 0 && asset.duration) {
1227
+ badgeContent = convertMsToHMS(asset.duration);
1228
+ }
1229
+
1230
+ if (!badgeIcon && !badgeContent) return null;
1231
+ return React__default['default'].createElement(Badge.Badge, {
1232
+ badgeIcon: badgeIcon,
1233
+ badgeContent: badgeContent,
1234
+ backgroundColors: ['black', 'black'],
1235
+ colors: ['#f7f8f9', '#f7f8f9'],
1236
+ fontSize: 12,
1237
+ fontWeight: 500,
1238
+ lineHeight: 16,
1239
+ verticalPadding: 4,
1240
+ horizontalPadding: 8,
1241
+ minWidth: 32,
1242
+ height: 24
1243
+ });
1244
+ }, [asset]);
1245
+ var renderSummary = React.useCallback(function () {
1246
+ var _asset$summary = asset.summary,
1247
+ title = _asset$summary.title,
1248
+ description = _asset$summary.description,
1249
+ instructions = _asset$summary.instructions,
1250
+ instructionsType = _asset$summary.instructionsType,
1251
+ footerLeft = _asset$summary.footerLeft,
1252
+ footerRight = _asset$summary.footerRight;
1253
+ return React__default['default'].createElement(SummaryCard, {
1254
+ title: title ? title : '',
1255
+ description: description ? description : '',
1256
+ instructions: instructions ? instructions : '',
1257
+ instructionsType: instructionsType ? instructionsType : '',
1258
+ footerLeft: footerLeft,
1259
+ footerRight: footerRight
1260
+ });
1261
+ }, [asset]);
1262
+ return React__default['default'].createElement(AssetGalleryWrapper, {
1263
+ disabled: asset.disabled
1264
+ }, React__default['default'].createElement(AssetGalleryGridCard$2, {
1265
+ as: ComputedRootComponent,
1266
+ component: component,
1267
+ asset: asset,
1268
+ disabled: asset.disabled,
1269
+ onClick: onClick,
1270
+ extendedSelectMode: extendedSelectMode,
1271
+ onMouseEnter: onMouseEnter,
1272
+ onMouseLeave: onMouseLeave,
1273
+ draggable: asset.draggable,
1274
+ innerRef: dragRef,
1275
+ selected: selected,
1276
+ softSelected: softSelected,
1277
+ completed: asset === null || asset === void 0 ? void 0 : asset.completed,
1278
+ hasError: asset === null || asset === void 0 ? void 0 : asset.hasError
1279
+ }, React__default['default'].createElement(ContentWrapper, {
1280
+ layout: asset.layout,
1281
+ ref: cardRef,
1282
+ softSelected: softSelected,
1283
+ selected: selected
1284
+ }, React__default['default'].createElement(Asset, {
1285
+ "data-id": "ss",
1286
+ selected: selected
1287
+ }, asset.previewUrl && renderPreview(asset)), renderSummary())));
1288
+ };
1289
+
1290
+ AssetGalleryGridCard.propTypes = process.env.NODE_ENV !== "production" ? {
1291
+ asset: defaultTheme.PropTypes.shape(assetShapeWithLayout).isRequired,
1292
+ selectable: defaultTheme.PropTypes.bool,
1293
+ selected: defaultTheme.PropTypes.bool,
1294
+ extendedSelectMode: defaultTheme.PropTypes.bool,
1295
+ onAssetSelected: defaultTheme.PropTypes.func.isRequired,
1296
+ onAssetUnselected: defaultTheme.PropTypes.func.isRequired,
1297
+ softSelected: defaultTheme.PropTypes.bool.isRequired,
1298
+ component: defaultTheme.PropTypes.func,
1299
+ scrollPosition: defaultTheme.PropTypes.number
1300
+ } : {};
1301
+ AssetGalleryGridCard.defaultProps = {};
1302
+ var AssetGalleryGridCard$1 = reactLazyLoadImageComponent.trackWindowScroll(React__default['default'].memo(AssetGalleryGridCard, function (prevProps, nextProps) {
1303
+ var reactiveProps = ['selectable', 'selected', 'extendedSelectMode', 'softSelected', 'asset.previewUrl', 'asset.overlay', 'asset.layout'];
1304
+ return reactiveProps.every(function (propKey) {
1305
+ return lodash.get(prevProps, propKey) === lodash.get(nextProps, propKey);
1306
+ });
1307
+ }));
1308
+
1309
+ var _templateObject, _templateObject2, _templateObject3;
1310
+ var AssetGalleryBase$1 = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject || (_templateObject = defaultTheme._taggedTemplateLiteral(["\n position: relative;\n"])));
1311
+ var GroupLabel = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject2 || (_templateObject2 = defaultTheme._taggedTemplateLiteral(["\n font-family: ", ";\n ", "\n display: flex;\n align-items: flex-end;\n position: absolute;\n padding-bottom: 4px;\n box-sizing: border-box;\n"])), function (props) {
1312
+ return props.theme.primaryFontFamily;
1313
+ }, function (props) {
1314
+ return props.theme.themeProp('color', props.theme.getColor('gray-100'), props.theme.getColor('gray-700'));
1315
+ });
1316
+ var AssetGalleryCardBase = styled__default['default'].div(_templateObject3 || (_templateObject3 = defaultTheme._taggedTemplateLiteral(["\n position: absolute;\n top: 0;\n left: 0;\n margin: 0;\n z-index: 1;\n will-change: transform, width, height;\n\n &:hover {\n z-index: 2;\n }\n"])));
1317
+
1318
+ var AssetGalleryBase = React__default['default'].forwardRef(function AssetGalleryBase(_ref, forwardedRef) {
1319
+ var assetsProp = _ref.assets,
1320
+ viewMode = _ref.viewMode,
1321
+ thumbnailMaxHeight = _ref.thumbnailMaxHeight,
1322
+ selectable = _ref.selectable,
1323
+ selectedAssetKeys = _ref.selectedAssetKeys,
1324
+ onAssetSelected = _ref.onAssetSelected,
1325
+ onAssetUnselected = _ref.onAssetUnselected,
1326
+ softSelectable = _ref.softSelectable,
1327
+ softSelectedAssetKey = _ref.softSelectedAssetKey,
1328
+ scrollElementProp = _ref.scrollElement,
1329
+ onAssetSoftSelectedChanged = _ref.onAssetSoftSelectedChanged,
1330
+ component = _ref.component,
1331
+ props = defaultTheme._objectWithoutProperties(_ref, ["assets", "viewMode", "thumbnailMaxHeight", "selectable", "selectedAssetKeys", "onAssetSelected", "onAssetUnselected", "softSelectable", "softSelectedAssetKey", "scrollElement", "onAssetSoftSelectedChanged", "component"]);
1332
+
1333
+ var assetGalleryDOMNode = React.useRef();
1334
+ var assetGalleryCompactRef = useMergedRefs.useMergedRefs(forwardedRef, assetGalleryDOMNode);
1335
+ var assetGalleryWidth = React.useRef(0);
1336
+ var minimumRowAspectRatio = React.useRef(0);
1337
+ var calculatedAssets = React.useRef([]);
1338
+
1339
+ var _useState = React.useState([]),
1340
+ _useState2 = defaultTheme._slicedToArray(_useState, 2),
1341
+ assets = _useState2[0],
1342
+ setAssets = _useState2[1];
1343
+
1344
+ var MAXIMUM_ROW_HEIGHT = React.useMemo(function () {
1345
+ return viewMode === 'grid' ? 450 : thumbnailMaxHeight;
1346
+ }, [viewMode, thumbnailMaxHeight]);
1347
+ var SPACE_BETWEEN_ASSETS = 8;
1348
+ var SPACE_UNDER_ASSETS = 8;
1349
+ var PRIMARY_SCROLL_BUFFER_HEIGHT = 1500;
1350
+ var SECONDARY_SCROLL_BUFFER_HEIGHT = 500;
1351
+ var GRID_VIEW_MODE_ASSET_MIN_WIDTH = 300;
1352
+ var GRID_VIEW_MODE_ASSET_HEIGHT = 427;
1353
+ var MISSING_WIDTH_PLACEHOLDER = 1920;
1354
+ var MISSING_HEIGHT_PLACEHOLDER = 1080;
1355
+ var isBrowser = typeof window !== 'undefined';
1356
+ var scrollElement = scrollElementProp || window;
1357
+ var previousYOffset = React.useRef(isBrowser ? scrollElement.pageYOffset : 0);
1358
+ var latestYOffset = React.useRef(isBrowser ? scrollElement.pageYOffset : 0);
1359
+ var scrollDirection = React.useRef('down');
1360
+ useIsomorphicLayoutEffect(function () {
1361
+ if (!assetGalleryDOMNode.current) return;
1362
+ var throttledOnResize = lodash.throttle(onResize, 1);
1363
+ var resizeObserver = new ResizeObserver__default['default'](throttledOnResize);
1364
+ resizeObserver.observe(assetGalleryDOMNode.current);
1365
+
1366
+ function onResize(entries) {
1367
+ entries.forEach(function (entry) {
1368
+ if (assetGalleryWidth.current === entry.contentRect.width) return;
1369
+ window.requestAnimationFrame(function () {
1370
+ assetGalleryWidth.current = entry.contentRect.width;
1371
+ main();
1372
+ });
1373
+ });
1374
+ }
1375
+
1376
+ return function () {
1377
+ resizeObserver.unobserve(assetGalleryDOMNode.current);
1378
+ };
1379
+ }, [assetsProp, assetGalleryDOMNode, MAXIMUM_ROW_HEIGHT]);
1380
+ React.useEffect(function () {
1381
+ main();
1382
+ }, [MAXIMUM_ROW_HEIGHT, assetsProp]);
1383
+
1384
+ var main = function main() {
1385
+ calculateAssetGalleryAspectRatio();
1386
+ calculateLayout();
1387
+ calculateVisibility();
1388
+ };
1389
+
1390
+ var calculateAssetGalleryAspectRatio = function calculateAssetGalleryAspectRatio() {
1391
+ if (assetGalleryWidth.current > 0) {
1392
+ minimumRowAspectRatio.current = calculateAspectRatio(assetGalleryWidth.current, MAXIMUM_ROW_HEIGHT);
1393
+ }
1394
+ };
1395
+
1396
+ var calculateLayout = function calculateLayout() {
1397
+ var assetsWithoutAKey = assetsProp.filter(function (a) {
1398
+ return !a.key;
1399
+ });
1400
+
1401
+ if (assetsWithoutAKey.length > 0) {
1402
+ assetsProp = assetsProp.filter(function (a) {
1403
+ return a.key;
1404
+ });
1405
+ assetsWithoutAKey.forEach(function (a) {
1406
+ return console.warn('Omitted asset from the gallery because it was missing the unique `key` property.', a);
1407
+ });
1408
+ }
1409
+
1410
+ if (viewMode === 'grid' && assetGalleryWidth.current > 0) {
1411
+ var row = [];
1412
+ var translateX = 0;
1413
+ var translateY = 0;
1414
+ var computedAssets = [];
1415
+ var lastGroup = null;
1416
+ var desiredAssetCountInRow = Math.floor(assetGalleryWidth.current / GRID_VIEW_MODE_ASSET_MIN_WIDTH) || 1;
1417
+ var desiredAssetWidth = assetGalleryWidth.current / desiredAssetCountInRow - SPACE_BETWEEN_ASSETS + SPACE_BETWEEN_ASSETS / desiredAssetCountInRow;
1418
+ assetsProp.forEach(function (asset, index) {
1419
+ var _assetsProp;
1420
+
1421
+ if (asset.group && asset.group !== lastGroup) {
1422
+ computedAssets.push({
1423
+ title: asset.group,
1424
+ key: asset.key,
1425
+ layout: {
1426
+ type: 'groupLabel',
1427
+ height: 50,
1428
+ translateX: Math.round(translateX),
1429
+ translateY: Math.round(translateY)
1430
+ }
1431
+ });
1432
+ lastGroup = asset.group;
1433
+ translateY += 50 + SPACE_UNDER_ASSETS;
1434
+ }
1435
+
1436
+ row.push(asset);
1437
+
1438
+ if (row.length === desiredAssetCountInRow || index + 1 === assetsProp.length || (_assetsProp = assetsProp[index + 1]) !== null && _assetsProp !== void 0 && _assetsProp.group && assetsProp[index + 1].group !== asset.group) {
1439
+ row.forEach(function (rowAsset) {
1440
+ computedAssets.push(defaultTheme._objectSpread2(defaultTheme._objectSpread2({}, rowAsset), {}, {
1441
+ layout: {
1442
+ type: 'asset',
1443
+ width: Math.round(desiredAssetWidth),
1444
+ height: Math.round(GRID_VIEW_MODE_ASSET_HEIGHT),
1445
+ translateX: Math.round(translateX),
1446
+ translateY: Math.round(translateY)
1447
+ }
1448
+ }));
1449
+ translateX += desiredAssetWidth + SPACE_BETWEEN_ASSETS;
1450
+ });
1451
+ row = [];
1452
+ translateX = 0;
1453
+ translateY += GRID_VIEW_MODE_ASSET_HEIGHT + SPACE_UNDER_ASSETS;
1454
+ }
1455
+ });
1456
+ calculatedAssets.current = computedAssets;
1457
+ } else {
1458
+ if (minimumRowAspectRatio.current > 0) {
1459
+ var _row = [];
1460
+ var _translateX = 0;
1461
+ var _translateY = 0;
1462
+ var rowAspectRatio = 0;
1463
+ var _lastGroup = null;
1464
+ var _computedAssets = [];
1465
+ assetsProp.forEach(function (asset, index) {
1466
+ var _assetsProp2;
1467
+
1468
+ if (asset.group && asset.group !== _lastGroup) {
1469
+ _computedAssets.push({
1470
+ title: asset.group,
1471
+ key: asset.key,
1472
+ layout: {
1473
+ type: 'groupLabel',
1474
+ height: 50,
1475
+ translateX: Math.round(_translateX),
1476
+ translateY: Math.round(_translateY)
1477
+ }
1478
+ });
1479
+
1480
+ _lastGroup = asset.group;
1481
+ _translateY += 50 + SPACE_UNDER_ASSETS;
1482
+ }
1483
+
1484
+ rowAspectRatio += calculateAspectRatio(asset.width || MISSING_WIDTH_PLACEHOLDER, asset.height || MISSING_HEIGHT_PLACEHOLDER);
1485
+
1486
+ _row.push(asset);
1487
+
1488
+ if (rowAspectRatio >= minimumRowAspectRatio.current || index + 1 === assetsProp.length || (_assetsProp2 = assetsProp[index + 1]) !== null && _assetsProp2 !== void 0 && _assetsProp2.group && assetsProp[index + 1].group !== asset.group) {
1489
+ rowAspectRatio = Math.max(rowAspectRatio, minimumRowAspectRatio.current);
1490
+ var totalDesiredWidthOfImages = assetGalleryWidth.current - SPACE_BETWEEN_ASSETS * (_row.length - 1);
1491
+ var rowHeight = totalDesiredWidthOfImages / rowAspectRatio;
1492
+
1493
+ _row.forEach(function (rowAsset) {
1494
+ var assetWidth = rowHeight * calculateAspectRatio(rowAsset.width || MISSING_WIDTH_PLACEHOLDER, rowAsset.height || MISSING_HEIGHT_PLACEHOLDER);
1495
+
1496
+ _computedAssets.push(defaultTheme._objectSpread2(defaultTheme._objectSpread2({}, rowAsset), {}, {
1497
+ layout: {
1498
+ type: 'asset',
1499
+ width: Math.round(assetWidth),
1500
+ height: Math.round(rowHeight),
1501
+ translateX: Math.round(_translateX),
1502
+ translateY: Math.round(_translateY),
1503
+ hasHeightAndWidth: Boolean(rowAsset.width && rowAsset.height)
1504
+ }
1505
+ }));
1506
+
1507
+ _translateX += assetWidth + SPACE_BETWEEN_ASSETS;
1508
+ });
1509
+
1510
+ _row = [];
1511
+ rowAspectRatio = 0;
1512
+ _translateY += rowHeight + SPACE_UNDER_ASSETS;
1513
+ _translateX = 0;
1514
+ }
1515
+ });
1516
+ calculatedAssets.current = _computedAssets;
1517
+ }
1518
+ }
1519
+ };
1520
+
1521
+ function calculateAspectRatio(width, height) {
1522
+ return width / height;
1523
+ }
1524
+
1525
+ var totalGalleryHeight = React.useMemo(function () {
1526
+ if (assets.length === 0) {
1527
+ return 0;
1528
+ }
1529
+
1530
+ var lastAsset = assets[assets.length - 1];
1531
+ return lastAsset.layout.translateY + lastAsset.layout.height;
1532
+ }, [assets]);
1533
+ React.useEffect(function () {
1534
+ var throttledOnScroll = lodash.throttle(onScroll, 200);
1535
+ scrollElement.addEventListener('scroll', throttledOnScroll, false);
1536
+ return function () {
1537
+ return scrollElement.removeEventListener('scroll', throttledOnScroll, false);
1538
+ };
1539
+ }, [assetGalleryDOMNode, calculatedAssets]);
1540
+
1541
+ function onScroll() {
1542
+ setScrollPositionAndDirection();
1543
+ calculateVisibility();
1544
+ }
1545
+
1546
+ function setScrollPositionAndDirection() {
1547
+ var newYOffset = scrollElement.pageYOffset;
1548
+ previousYOffset.current = latestYOffset.current;
1549
+ latestYOffset.current = newYOffset;
1550
+ scrollDirection.current = latestYOffset.current > previousYOffset.current ? 'down' : 'up';
1551
+ }
1552
+
1553
+ var calculateVisibility = function calculateVisibility() {
1554
+ if (!assetGalleryDOMNode.current) return;
1555
+ var bufferTop = scrollDirection.current === 'up' ? PRIMARY_SCROLL_BUFFER_HEIGHT : SECONDARY_SCROLL_BUFFER_HEIGHT;
1556
+ var bufferBottom = scrollDirection.current === 'up' ? SECONDARY_SCROLL_BUFFER_HEIGHT : PRIMARY_SCROLL_BUFFER_HEIGHT;
1557
+ var containerOffset = getOffsetTop(assetGalleryDOMNode.current);
1558
+ var scrollerHeight = scrollElement.innerHeight;
1559
+ var yOffset = latestYOffset.current;
1560
+ var minTranslateYPlusHeight = yOffset - containerOffset - bufferTop;
1561
+ var maxTranslateY = yOffset - containerOffset + scrollerHeight + bufferBottom;
1562
+ var finalizedAssets = calculatedAssets.current.map(function (asset) {
1563
+ if (scrollElement.self == window && (asset.layout.translateY + asset.layout.height < minTranslateYPlusHeight || asset.layout.translateY > maxTranslateY)) {
1564
+ asset.layout.show = false;
1565
+ } else {
1566
+ asset.layout.show = true;
1567
+ }
1568
+
1569
+ return asset;
1570
+ });
1571
+ setAssets(finalizedAssets);
1572
+ };
1573
+
1574
+ function getOffsetTop(elem) {
1575
+ var offsetTop = 0;
1576
+
1577
+ do {
1578
+ if (!isNaN(elem.offsetTop)) {
1579
+ offsetTop += elem.offsetTop;
1580
+ }
1581
+
1582
+ elem = elem.offsetParent;
1583
+ } while (elem);
1584
+
1585
+ return offsetTop;
1586
+ }
1587
+
1588
+ var handleKeyPress = React.useCallback(function (e) {
1589
+ function isElementVisible(el) {
1590
+ var rect = el.getBoundingClientRect(),
1591
+ vWidth = scrollElement.innerWidth || document.documentElement.clientWidth,
1592
+ vHeight = scrollElement.innerHeight || document.documentElement.clientHeight,
1593
+ efp = function efp(x, y) {
1594
+ return document.elementFromPoint(x, y);
1595
+ };
1596
+
1597
+ if (rect.right < 0 || rect.bottom < 0 || rect.left > vWidth || rect.top > vHeight) return false;
1598
+ return el.contains(efp(rect.left, rect.top)) || el.contains(efp(rect.right, rect.top)) || el.contains(efp(rect.right, rect.bottom)) || el.contains(efp(rect.left, rect.bottom));
1599
+ }
1600
+
1601
+ function softSelectFirstVisibleAsset() {
1602
+ var visibleAssets = assets.filter(function (asset) {
1603
+ return asset.layout.show;
1604
+ });
1605
+
1606
+ for (var i = 0; i < assetGalleryDOMNode.current.children.length; i++) {
1607
+ if (isElementVisible(assetGalleryDOMNode.current.children[i])) {
1608
+ onAssetSoftSelectedChanged(visibleAssets[i].key);
1609
+ break;
1610
+ }
1611
+ }
1612
+ }
1613
+
1614
+ if (assets.length === 0) return;
1615
+
1616
+ if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {
1617
+ if (softSelectedAssetKey === null) {
1618
+ softSelectFirstVisibleAsset();
1619
+ return;
1620
+ }
1621
+ }
1622
+
1623
+ if (e.key === 'ArrowLeft') {
1624
+ var previousAssetIndex = assets.findIndex(function (asset) {
1625
+ return asset.key === softSelectedAssetKey;
1626
+ }) - 1;
1627
+ var previousAsset = assets[previousAssetIndex];
1628
+
1629
+ if (previousAsset) {
1630
+ if (previousAsset.layout.show) {
1631
+ onAssetSoftSelectedChanged(previousAsset.key);
1632
+ } else {
1633
+ softSelectFirstVisibleAsset();
1634
+ }
1635
+ }
1636
+
1637
+ return;
1638
+ }
1639
+
1640
+ if (e.key === 'ArrowRight') {
1641
+ var nextAssetIndex = assets.findIndex(function (asset) {
1642
+ return asset.key === softSelectedAssetKey;
1643
+ }) + 1;
1644
+ var nextAsset = assets[nextAssetIndex];
1645
+
1646
+ if (nextAsset) {
1647
+ if (nextAsset.layout.show) {
1648
+ onAssetSoftSelectedChanged(nextAsset.key);
1649
+ } else {
1650
+ softSelectFirstVisibleAsset();
1651
+ }
1652
+ }
1653
+
1654
+ return;
1655
+ }
1656
+
1657
+ if (e.key === 'Enter') {
1658
+ if (softSelectedAssetKey === null) return;
1659
+
1660
+ if (selectedAssetKeys.includes(softSelectedAssetKey)) {
1661
+ onAssetUnselected(softSelectedAssetKey);
1662
+ } else {
1663
+ onAssetSelected(softSelectedAssetKey);
1664
+ }
1665
+ }
1666
+ }, [assets, softSelectedAssetKey, onAssetSoftSelectedChanged, selectedAssetKeys, assetGalleryCompactRef]);
1667
+ var handleClick = React.useCallback(function () {
1668
+ onAssetSoftSelectedChanged(null);
1669
+ }, []);
1670
+ React.useEffect(function () {
1671
+ if (softSelectable) {
1672
+ document.addEventListener('keydown', handleKeyPress);
1673
+ }
1674
+
1675
+ return function () {
1676
+ return document.removeEventListener('keydown', handleKeyPress);
1677
+ };
1678
+ }, [softSelectable, handleKeyPress]);
1679
+ React.useEffect(function () {
1680
+ if (softSelectable && softSelectedAssetKey !== null) {
1681
+ document.addEventListener('click', handleClick, true);
1682
+ }
1683
+
1684
+ return function () {
1685
+ return document.removeEventListener('click', handleClick, true);
1686
+ };
1687
+ }, [softSelectable, softSelectedAssetKey, handleClick]);
1688
+ return React__default['default'].createElement(React__default['default'].Fragment, null, React__default['default'].createElement(AssetGalleryBase$1, defaultTheme._extends({
1689
+ ref: assetGalleryCompactRef,
1690
+ style: {
1691
+ height: "".concat(totalGalleryHeight, "px")
1692
+ },
1693
+ className: props.className
1694
+ }, props), assets.map(function (asset) {
1695
+ return asset.layout.show && React__default['default'].createElement(React__default['default'].Fragment, {
1696
+ key: "asset-gallery-".concat(asset.layout.type, "-").concat(asset.key)
1697
+ }, asset.layout.type === 'groupLabel' && React__default['default'].createElement(GroupLabel, {
1698
+ style: {
1699
+ transform: "translate3d(".concat(asset.layout.translateX, "px,").concat(asset.layout.translateY, "px, 0)"),
1700
+ height: "".concat(asset.layout.height, "px")
1701
+ }
1702
+ }, asset.title), asset.layout.type === 'asset' && React__default['default'].createElement(AssetGalleryCardBase, {
1703
+ style: {
1704
+ transform: "translate3d(".concat(asset.layout.translateX, "px, ").concat(asset.layout.translateY, "px, 0)"),
1705
+ width: "".concat(asset.layout.width, "px"),
1706
+ height: "".concat(asset.layout.height, "px")
1707
+ }
1708
+ }, viewMode === 'grid' ? React__default['default'].createElement(AssetGalleryGridCard$1, {
1709
+ asset: asset,
1710
+ selectable: 'selectable' in asset ? asset.selectable : selectable,
1711
+ selected: selectedAssetKeys.includes(asset.key),
1712
+ extendedSelectMode: Boolean(selectedAssetKeys.length),
1713
+ onAssetSelected: onAssetSelected,
1714
+ onAssetUnselected: onAssetUnselected,
1715
+ softSelected: softSelectedAssetKey === asset.key,
1716
+ component: component
1717
+ }) : React__default['default'].createElement(AssetGalleryCompactCard$1, {
1718
+ asset: asset,
1719
+ hasHeightAndWidth: asset.layout.hasHeightAndWidth,
1720
+ collapseExtraInfo: asset.layout.width < 90,
1721
+ selectable: 'selectable' in asset ? asset.selectable : selectable,
1722
+ selected: selectedAssetKeys.includes(asset.key),
1723
+ extendedSelectMode: Boolean(selectedAssetKeys.length),
1724
+ onAssetSelected: onAssetSelected,
1725
+ onAssetUnselected: onAssetUnselected,
1726
+ softSelected: softSelectedAssetKey === asset.key,
1727
+ component: component
1728
+ })));
1729
+ })));
1730
+ });
1731
+ AssetGalleryBase.propTypes = process.env.NODE_ENV !== "production" ? {
1732
+ assets: defaultTheme.PropTypes.arrayOf(defaultTheme.PropTypes.shape(assetShape)),
1733
+ viewMode: defaultTheme.PropTypes.oneOf(['compact', 'grid']),
1734
+ thumbnailMaxHeight: defaultTheme.PropTypes.number,
1735
+ selectable: defaultTheme.PropTypes.bool,
1736
+ selectedAssetKeys: defaultTheme.PropTypes.oneOfType([defaultTheme.PropTypes.arrayOf(defaultTheme.PropTypes.string), defaultTheme.PropTypes.arrayOf(defaultTheme.PropTypes.number)]).isRequired,
1737
+ scrollElement: defaultTheme.PropTypes.instanceOf(Element),
1738
+ onAssetSelected: defaultTheme.PropTypes.func.isRequired,
1739
+ onAssetUnselected: defaultTheme.PropTypes.func.isRequired,
1740
+ softSelectable: defaultTheme.PropTypes.bool,
1741
+ softSelectedAssetKey: defaultTheme.PropTypes.oneOfType([defaultTheme.PropTypes.string, defaultTheme.PropTypes.number]),
1742
+ onAssetSoftSelectedChanged: defaultTheme.PropTypes.func.isRequired,
1743
+ component: defaultTheme.PropTypes.func,
1744
+ className: defaultTheme.PropTypes.string
1745
+ } : {};
1746
+
1747
+ var AssetGallery = React__default['default'].forwardRef(function AssetGallery(_ref, forwardedRef) {
1748
+ var assets = _ref.assets,
1749
+ viewMode = _ref.viewMode,
1750
+ thumbnailMaxHeight = _ref.thumbnailMaxHeight,
1751
+ selectable = _ref.selectable,
1752
+ selectedAssetKeys = _ref.selectedAssetKeys,
1753
+ onSelectedChanged = _ref.onSelectedChanged,
1754
+ softSelectable = _ref.softSelectable,
1755
+ scrollElement = _ref.scrollElement,
1756
+ onSoftSelectedChanged = _ref.onSoftSelectedChanged,
1757
+ component = _ref.component,
1758
+ props = defaultTheme._objectWithoutProperties(_ref, ["assets", "viewMode", "thumbnailMaxHeight", "selectable", "selectedAssetKeys", "onSelectedChanged", "softSelectable", "scrollElement", "onSoftSelectedChanged", "component"]);
1759
+
1760
+ var _useState = React.useState(selectedAssetKeys || []),
1761
+ _useState2 = defaultTheme._slicedToArray(_useState, 2),
1762
+ selectedAssetKeysInternalState = _useState2[0],
1763
+ setSelectedAssetKeysInternalState = _useState2[1];
1764
+
1765
+ var _useState3 = React.useState(null),
1766
+ _useState4 = defaultTheme._slicedToArray(_useState3, 2),
1767
+ softSelectedAssetKeyInternalState = _useState4[0],
1768
+ setSoftSelectedAssetKeyInternalState = _useState4[1];
1769
+
1770
+ React.useEffect(function () {
1771
+ setSelectedAssetKeysInternalState(selectedAssetKeys || []);
1772
+ }, [selectedAssetKeys]);
1773
+ React.useEffect(function () {
1774
+ setSelectedAssetKeysInternalState(function (current) {
1775
+ return current.filter(function (c) {
1776
+ return assets.some(function (a) {
1777
+ return a.key === c;
1778
+ });
1779
+ });
1780
+ });
1781
+ }, [assets.length]);
1782
+ React.useEffect(function () {
1783
+ if (selectedAssetKeys === selectedAssetKeysInternalState) return;
1784
+
1785
+ if (lodash.isFunction(onSelectedChanged)) {
1786
+ onSelectedChanged(selectedAssetKeysInternalState);
1787
+ }
1788
+ }, [selectedAssetKeysInternalState]);
1789
+ React.useEffect(function () {
1790
+ if (lodash.isFunction(onSoftSelectedChanged)) {
1791
+ onSoftSelectedChanged(softSelectedAssetKeyInternalState);
1792
+ }
1793
+ }, [softSelectedAssetKeyInternalState]);
1794
+ var onSelected = React.useCallback(function (assetKey) {
1795
+ setSelectedAssetKeysInternalState(function (currentState) {
1796
+ return [].concat(defaultTheme._toConsumableArray(currentState), [assetKey]);
1797
+ });
1798
+ }, []);
1799
+ var onUnselected = React.useCallback(function (assetKey) {
1800
+ setSelectedAssetKeysInternalState(function (currentState) {
1801
+ return currentState.filter(function (filteredAssetKey) {
1802
+ return filteredAssetKey !== assetKey;
1803
+ });
1804
+ });
1805
+ }, []);
1806
+ var onAssetSoftSelectedChanged = React.useCallback(function () {
1807
+ var assetKey = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
1808
+ setSoftSelectedAssetKeyInternalState(assetKey);
1809
+ }, []);
1810
+ return React__default['default'].createElement(AssetGalleryBase, defaultTheme._extends({
1811
+ ref: forwardedRef,
1812
+ assets: assets,
1813
+ thumbnailMaxHeight: thumbnailMaxHeight,
1814
+ selectable: selectable,
1815
+ selectedAssetKeys: selectedAssetKeysInternalState,
1816
+ onAssetSelected: onSelected,
1817
+ onAssetUnselected: onUnselected,
1818
+ softSelectable: softSelectable,
1819
+ softSelectedAssetKey: softSelectedAssetKeyInternalState,
1820
+ scrollElement: scrollElement,
1821
+ onAssetSoftSelectedChanged: onAssetSoftSelectedChanged,
1822
+ component: component,
1823
+ viewMode: viewMode
1824
+ }, props));
1825
+ });
1826
+ AssetGallery.propTypes = process.env.NODE_ENV !== "production" ? {
1827
+ assets: defaultTheme.PropTypes.arrayOf(defaultTheme.PropTypes.shape(assetShape)),
1828
+ viewMode: defaultTheme.PropTypes.oneOf(['compact', 'grid']),
1829
+ thumbnailMaxHeight: defaultTheme.PropTypes.number,
1830
+ selectable: defaultTheme.PropTypes.bool,
1831
+ selectedAssetKeys: defaultTheme.PropTypes.oneOfType([defaultTheme.PropTypes.arrayOf(defaultTheme.PropTypes.string), defaultTheme.PropTypes.arrayOf(defaultTheme.PropTypes.number)]),
1832
+ onSelectedChanged: defaultTheme.PropTypes.func,
1833
+ softSelectable: defaultTheme.PropTypes.bool,
1834
+ scrollElement: defaultTheme.PropTypes.instanceOf(Element),
1835
+ onSoftSelectedChanged: defaultTheme.PropTypes.func,
1836
+ component: defaultTheme.PropTypes.func
1837
+ } : {};
1838
+ AssetGallery.defaultProps = {
1839
+ assets: [],
1840
+ viewMode: 'compact',
1841
+ thumbnailMaxHeight: 300,
1842
+ selectedAssetKeys: []
1843
+ };
1844
+
1845
+ exports.AssetGallery = AssetGallery;
1846
+ exports.SummaryCard = SummaryCard;