@ntbjs/react-components 1.1.2 → 1.2.0-rc.10

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