@ntbjs/react-components 1.2.0-rc.11 → 1.2.0-rc.13

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 (75) hide show
  1. package/{ActionButton-f150aedb.js → ActionButton-06df3d6c.js} +15 -5
  2. package/Alert-13b75102.js +117 -0
  3. package/AssetGallery-d2914de2.js +1847 -0
  4. package/{AssetPreviewTopBar-d4e976ab.js → AssetPreviewTopBar-c28715f7.js} +15 -15
  5. package/Badge-aec841c8.js +221 -0
  6. package/{Button-772b513a.js → Button-c38d56a0.js} +3 -3
  7. package/{Checkbox-0cb45351.js → Checkbox-68dc38a8.js} +1 -1
  8. package/{CompactAutocompleteSelect-ad337fac.js → CompactAutocompleteSelect-43e79e21.js} +10 -10
  9. package/{CompactStarRating-147445be.js → CompactStarRating-9c81ca6e.js} +9 -9
  10. package/{CompactTextInput-bb50a388.js → CompactTextInput-c7d0ac82.js} +16 -22
  11. package/{ContextMenu-8c9d90a1.js → ContextMenu-4ec3d9f3.js} +1 -1
  12. package/ContextMenuItem-1fe17ed5.js +110 -0
  13. package/{InputGroup-53a44ae6.js → InputGroup-49fbc423.js} +1 -1
  14. package/{Instructions-ba0d244e.js → Instructions-ea9e5aa9.js} +16 -6
  15. package/{MultiLevelCheckboxSelect-048be731.js → MultiLevelCheckboxSelect-c4060a73.js} +27 -26
  16. package/{MultiSelect-7e865f37.js → MultiSelect-4b8d3d0d.js} +2 -2
  17. package/{Popover-6fcff6de.js → Popover-e4ecb887.js} +2 -2
  18. package/{Radio-a6ba38ed.js → Radio-32d0513a.js} +1 -1
  19. package/{SectionSeparator-961ec4de.js → SectionSeparator-259a22ed.js} +1 -1
  20. package/{Switch-9e68deb2.js → Switch-4a41585f.js} +1 -1
  21. package/{Tab-3580786b.js → Tab-f499ecbc.js} +1 -1
  22. package/{Tabs-511523e0.js → Tabs-c2261e7e.js} +2 -2
  23. package/{TextArea-7270a924.js → TextArea-9ddf9649.js} +30 -30
  24. package/{TextInput-97f7da4d.js → TextInput-0d109708.js} +1 -1
  25. package/{Tooltip-5ccdfe34.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-0dd58df6.js → defaultTheme-ea44e34a.js} +1 -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 +26 -26
  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-4c3da560.js → react-select-creatable.esm-2f23d6c6.js} +3 -3
  62. package/shift-away-subtle-0bed9a3c.js +9 -0
  63. package/styles/config.scss +3 -1
  64. package/widgets/AssetGallery/index.js +31 -30
  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 +34 -32
  71. package/Alert-d7863c58.js +0 -62
  72. package/AssetGallery-61762c98.js +0 -1396
  73. package/Badge-fa8f327e.js +0 -154
  74. package/check-555d831b.js +0 -213
  75. package/shift-away-subtle-3cede45b.js +0 -9
@@ -0,0 +1,1847 @@
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-c4060a73.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-e4ecb887.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-c38d56a0.js');
21
+ require('./Checkbox-68dc38a8.js');
22
+ require('./CompactAutocompleteSelect-43e79e21.js');
23
+ require('./CompactStarRating-9c81ca6e.js');
24
+ require('./CompactTextInput-c7d0ac82.js');
25
+ require('./MultiSelect-4b8d3d0d.js');
26
+ require('./Radio-32d0513a.js');
27
+ require('./TextArea-9ddf9649.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
+ React.useEffect(function () {
485
+ var _asset$actions;
486
+
487
+ var newOpenedSubActions = ((_asset$actions = asset === null || asset === void 0 ? void 0 : asset.actions) !== null && _asset$actions !== void 0 ? _asset$actions : []).map(function () {
488
+ return false;
489
+ });
490
+ updateOpenedSubActions(newOpenedSubActions);
491
+ }, [asset]);
492
+ React.useEffect(function () {
493
+ if (!isOverlayHovered && openedSubActions !== null && openedSubActions !== void 0 && openedSubActions.length) {
494
+ updateOpenedSubActions(openedSubActions.map(function () {
495
+ return false;
496
+ }));
497
+ }
498
+ }, [isOverlayHovered]);
499
+ var mouseHasEnteredOverlay = React.useCallback(function () {
500
+ setIsOverlayHovered(true);
501
+ }, []);
502
+ var mouseHasLeftOverlay = React.useCallback(function () {
503
+ setIsOverlayHovered(false);
504
+ }, []);
505
+ var onSubActionsViewToggle = React.useCallback(function (actionIndex) {
506
+ var newOpenedSubActions = openedSubActions.map(function (isOpened, index) {
507
+ if (index !== actionIndex) {
508
+ return false;
509
+ }
510
+
511
+ return !isOpened;
512
+ });
513
+ updateOpenedSubActions(newOpenedSubActions);
514
+ }, [openedSubActions]);
515
+ var shouldOpenSubActions = React.useCallback(function (actionIndex) {
516
+ return openedSubActions[actionIndex];
517
+ }, [openedSubActions]);
518
+ var isAnySubActionsOpened = React.useMemo(function () {
519
+ return openedSubActions.some(function (isOpened) {
520
+ return isOpened;
521
+ });
522
+ }, [openedSubActions]);
523
+
524
+ function onClick(event) {
525
+ if (extendedSelectMode) {
526
+ return onSelectClick(event);
527
+ }
528
+
529
+ if (lodash.isFunction(asset.onClick)) {
530
+ asset.onClick(event, asset);
531
+ }
532
+ }
533
+
534
+ function onSelectClick(event) {
535
+ event.preventDefault();
536
+ event.stopPropagation();
537
+
538
+ if (selected) {
539
+ return onAssetUnselected(asset.key);
540
+ }
541
+
542
+ if (selectable) {
543
+ return onAssetSelected(asset.key);
544
+ }
545
+ }
546
+
547
+ var onActionClick = React.useCallback(function (event, action, index) {
548
+ event.preventDefault();
549
+ event.stopPropagation();
550
+
551
+ if (lodash.isFunction(action === null || action === void 0 ? void 0 : action.onClick)) {
552
+ action.onClick(asset);
553
+ }
554
+
555
+ if (!lodash.isEmpty(action === null || action === void 0 ? void 0 : action.subActions)) {
556
+ onSubActionsViewToggle(index);
557
+ }
558
+ }, [onSubActionsViewToggle]);
559
+
560
+ function onContextMenu(event) {
561
+ event.preventDefault();
562
+ asset.onContextMenu(event);
563
+ }
564
+
565
+ React.useEffect(function () {
566
+ if (lodash.isFunction(asset.onContextMenu)) {
567
+ if (cardRef.current) {
568
+ cardRef.current.addEventListener('contextmenu', onContextMenu);
569
+ }
570
+
571
+ return function () {
572
+ if (cardRef.current) {
573
+ cardRef.current.removeEventListener('contextmenu', onContextMenu);
574
+ }
575
+ };
576
+ }
577
+ }, []);
578
+
579
+ function onDragstart(event) {
580
+ asset.onDragstart(event);
581
+ }
582
+
583
+ React.useEffect(function () {
584
+ if (lodash.isFunction(asset.onDragstart)) {
585
+ if (dragRef.current) {
586
+ dragRef.current.addEventListener('dragstart', onDragstart);
587
+ }
588
+
589
+ return function () {
590
+ if (dragRef.current) {
591
+ dragRef.current.removeEventListener('dragstart', onDragstart);
592
+ }
593
+ };
594
+ }
595
+ }, []);
596
+ var videoPlayerRef = React.useRef();
597
+ var cardRef = React.useRef();
598
+ var dragRef = React.useRef(null);
599
+
600
+ function onMouseEnter(event) {
601
+ if (videoPlayerRef.current) {
602
+ var playPromise = videoPlayerRef.current.play();
603
+
604
+ if (playPromise !== undefined) {
605
+ playPromise.then(function () {})["catch"](function () {});
606
+ }
607
+ }
608
+
609
+ if (lodash.isFunction(asset.onMouseEnter)) {
610
+ asset.onMouseEnter(event, asset);
611
+ }
612
+ }
613
+
614
+ function onMouseLeave() {
615
+ if (videoPlayerRef.current) {
616
+ videoPlayerRef.current.pause();
617
+ }
618
+ }
619
+
620
+ var renderPreview = function renderPreview(asset) {
621
+ var _asset$fileType, _asset$fileType2;
622
+
623
+ var previewContent = null;
624
+
625
+ if ((asset === null || asset === void 0 ? void 0 : (_asset$fileType = asset.fileType) === null || _asset$fileType === void 0 ? void 0 : _asset$fileType.toLowerCase()) === 'video') {
626
+ previewContent = React__default['default'].createElement(reactLazyLoadImageComponent.LazyLoadComponent, {
627
+ scrollPosition: scrollPosition
628
+ }, React__default['default'].createElement("video", {
629
+ ref: videoPlayerRef,
630
+ loop: true,
631
+ muted: true
632
+ }, React__default['default'].createElement("source", {
633
+ src: asset.previewUrl,
634
+ type: "video/mp4"
635
+ })));
636
+ } else if ((asset === null || asset === void 0 ? void 0 : (_asset$fileType2 = asset.fileType) === null || _asset$fileType2 === void 0 ? void 0 : _asset$fileType2.toLowerCase()) === 'audio') {
637
+ previewContent = React__default['default'].createElement(reactLazyLoadImageComponent.LazyLoadComponent, {
638
+ scrollPosition: scrollPosition
639
+ }, React__default['default'].createElement("div", {
640
+ className: "audio"
641
+ }, React__default['default'].createElement(SvgHeadset, null)));
642
+ } else {
643
+ previewContent = React__default['default'].createElement(reactLazyLoadImageComponent.LazyLoadImage, {
644
+ alt: asset === null || asset === void 0 ? void 0 : asset.title,
645
+ src: asset === null || asset === void 0 ? void 0 : asset.previewUrl,
646
+ height: "100%",
647
+ width: "100%",
648
+ delayMethod: "debounce",
649
+ delayTime: 0,
650
+ threshold: 1500,
651
+ scrollPosition: scrollPosition
652
+ });
653
+ }
654
+
655
+ return React__default['default'].createElement(Figure$1, {
656
+ hasHeightAndWidth: hasHeightAndWidth
657
+ }, previewContent, React__default['default'].createElement(FigureOverlayBackdrop$1, {
658
+ selected: selected
659
+ }));
660
+ };
661
+
662
+ React.useEffect(function () {
663
+ if (softSelected) {
664
+ cardRef.current.scrollIntoView({
665
+ behavior: 'smooth',
666
+ block: 'nearest'
667
+ });
668
+ }
669
+ }, [softSelected]);
670
+ var renderVersionsBadge = React.useCallback(function () {
671
+ if (!(asset !== null && asset !== void 0 && asset.versions)) return null;
672
+ return React__default['default'].createElement(Badge.Badge, {
673
+ badgeIcon: React__default['default'].createElement(SvgLayers, null),
674
+ badgeContent: asset.versions,
675
+ backgroundColors: ['black', 'black'],
676
+ colors: ['#f7f8f9', '#f7f8f9'],
677
+ fontSize: 12,
678
+ fontWeight: 500,
679
+ lineHeight: 16,
680
+ verticalPadding: 4,
681
+ horizontalPadding: 8
682
+ });
683
+ }, [asset]);
684
+ var renderMediaBadge = React.useCallback(function () {
685
+ var badgeIcon = null;
686
+ var badgeContent = null;
687
+
688
+ if ((asset === null || asset === void 0 ? void 0 : asset.fileType) === 'video') {
689
+ badgeIcon = React__default['default'].createElement(SvgPlay, null);
690
+ }
691
+
692
+ if (asset !== null && asset !== void 0 && asset.duration) {
693
+ badgeContent = convertMsToHMS(asset.duration);
694
+ }
695
+
696
+ if (!badgeIcon && !badgeContent) return null;
697
+ return React__default['default'].createElement(Badge.Badge, {
698
+ badgeIcon: badgeIcon,
699
+ badgeContent: badgeContent,
700
+ backgroundColors: ['black', 'black'],
701
+ colors: ['#f7f8f9', '#f7f8f9'],
702
+ fontSize: 12,
703
+ fontWeight: 500,
704
+ lineHeight: 16,
705
+ verticalPadding: 4,
706
+ horizontalPadding: 8,
707
+ minWidth: 32,
708
+ height: 24
709
+ });
710
+ }, [asset]);
711
+ var renderSummaryCardHeaderLeft = React.useCallback(function () {
712
+ return React__default['default'].createElement(React__default['default'].Fragment, null, renderVersionsBadge(), renderMediaBadge());
713
+ }, [asset]);
714
+ var renderPopoverContent = React.useCallback(function () {
715
+ var _asset$summary, _asset$summary2, _asset$summary3, _asset$summary4, _asset$summary5, _asset$summary6, _asset$summary7, _asset$summary8;
716
+
717
+ return React__default['default'].createElement(SummaryCard, {
718
+ title: (asset === null || asset === void 0 ? void 0 : (_asset$summary = asset.summary) === null || _asset$summary === void 0 ? void 0 : _asset$summary.title) || '',
719
+ description: (asset === null || asset === void 0 ? void 0 : (_asset$summary2 = asset.summary) === null || _asset$summary2 === void 0 ? void 0 : _asset$summary2.description) || '',
720
+ instructions: (asset === null || asset === void 0 ? void 0 : (_asset$summary3 = asset.summary) === null || _asset$summary3 === void 0 ? void 0 : _asset$summary3.instructions) || '',
721
+ instructionsType: (asset === null || asset === void 0 ? void 0 : (_asset$summary4 = asset.summary) === null || _asset$summary4 === void 0 ? void 0 : _asset$summary4.instructionsType) || '',
722
+ headerRight: (asset === null || asset === void 0 ? void 0 : (_asset$summary5 = asset.summary) === null || _asset$summary5 === void 0 ? void 0 : _asset$summary5.headerRight) || '',
723
+ 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) || ''),
724
+ footerLeft: (asset === null || asset === void 0 ? void 0 : (_asset$summary7 = asset.summary) === null || _asset$summary7 === void 0 ? void 0 : _asset$summary7.footerLeft) || '',
725
+ footerRight: (asset === null || asset === void 0 ? void 0 : (_asset$summary8 = asset.summary) === null || _asset$summary8 === void 0 ? void 0 : _asset$summary8.footerRight) || '',
726
+ width: 375
727
+ });
728
+ }, [asset]);
729
+ return React__default['default'].createElement(AssetGalleryWrapper$1, {
730
+ disabled: asset.disabled
731
+ }, React__default['default'].createElement(AssetGalleryCompactCard$2, {
732
+ as: ComputedRootComponent$1,
733
+ component: component,
734
+ disabled: asset.disabled,
735
+ asset: asset,
736
+ onClick: onClick,
737
+ extendedSelectMode: extendedSelectMode,
738
+ onMouseEnter: onMouseEnter,
739
+ onMouseLeave: onMouseLeave,
740
+ draggable: asset.draggable,
741
+ innerRef: dragRef,
742
+ selected: selected
743
+ }, asset.previewUrl && renderPreview(asset), React__default['default'].createElement(Popover.Popover, {
744
+ content: renderPopoverContent(),
745
+ placement: 'bottom',
746
+ visible: isOverlayHovered && !isAnySubActionsOpened && activeSummaryCard,
747
+ zIndex: 10000
748
+ }, React__default['default'].createElement(Overlay$1, {
749
+ ref: cardRef,
750
+ onMouseEnter: mouseHasEnteredOverlay,
751
+ onMouseLeave: mouseHasLeftOverlay
752
+ }, React__default['default'].createElement(OverlayBackdrop$1, {
753
+ softSelected: softSelected,
754
+ selected: selected
755
+ }), React__default['default'].createElement(OverlayInfoTopActions$1, {
756
+ isOverlayHovered: isOverlayHovered
757
+ }, asset.actions && asset.actions.map(function (action, index) {
758
+ return React__default['default'].createElement(Tooltip.Tooltip, {
759
+ key: "".concat(asset.key, "-").concat(action.title),
760
+ content: action.title
761
+ }, React__default['default'].createElement(Fragment$1, {
762
+ as: ComputedActionButton$1,
763
+ component: action.component,
764
+ className: action.className,
765
+ icon: action.icon,
766
+ isSubActionsOpened: shouldOpenSubActions(index),
767
+ subActions: action.subActions,
768
+ onClick: function onClick(event) {
769
+ return onActionClick(event, action, index);
770
+ }
771
+ }));
772
+ })), React__default['default'].createElement(OverlayInfo$1, null, React__default['default'].createElement(OverlayInfoTop$1, null, React__default['default'].createElement(OverlayInfoTopVersions$1, {
773
+ collapseExtraInfo: collapseExtraInfo
774
+ }, 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, {
775
+ type: asset === null || asset === void 0 ? void 0 : (_asset$note2 = asset.note) === null || _asset$note2 === void 0 ? void 0 : _asset$note2.type
776
+ }, React__default['default'].createElement(warningCircle.SvgWarningCircle, null))), React__default['default'].createElement(OverlayInfoBottom$1, null, selectable && React__default['default'].createElement(OverlayInfoBottomSelectButton$1, {
777
+ selected: selected
778
+ }, React__default['default'].createElement(SvgCheckRectangleFilled, {
779
+ onClick: onSelectClick
780
+ })), React__default['default'].createElement(OverlayInfoBottomMediaIcon$1, null, renderMediaBadge()))), asset.completed && React__default['default'].createElement(OverlayCompleted, {
781
+ softSelected: softSelected
782
+ }), asset.hasError && React__default['default'].createElement(OverlayHasError, {
783
+ softSelected: softSelected
784
+ }), selectable && React__default['default'].createElement(OverlaySelected$1, {
785
+ selected: selected,
786
+ softSelected: softSelected
787
+ }))), asset.overlay && React__default['default'].createElement(ConsumerDefinedOverlay$1, null, asset.overlay)));
788
+ };
789
+
790
+ AssetGalleryCompactCard.propTypes = process.env.NODE_ENV !== "production" ? {
791
+ asset: defaultTheme.PropTypes.shape(assetShapeWithLayout).isRequired,
792
+ hasHeightAndWidth: defaultTheme.PropTypes.bool.isRequired,
793
+ selectable: defaultTheme.PropTypes.bool,
794
+ selected: defaultTheme.PropTypes.bool,
795
+ extendedSelectMode: defaultTheme.PropTypes.bool,
796
+ onAssetSelected: defaultTheme.PropTypes.func.isRequired,
797
+ onAssetUnselected: defaultTheme.PropTypes.func.isRequired,
798
+ softSelected: defaultTheme.PropTypes.bool.isRequired,
799
+ component: defaultTheme.PropTypes.func,
800
+ scrollPosition: defaultTheme.PropTypes.number,
801
+ collapseExtraInfo: defaultTheme.PropTypes.bool
802
+ } : {};
803
+ AssetGalleryCompactCard.defaultProps = {};
804
+ var AssetGalleryCompactCard$1 = reactLazyLoadImageComponent.trackWindowScroll(React__default['default'].memo(AssetGalleryCompactCard, function (prevProps, nextProps) {
805
+ var reactiveProps = ['selectable', 'selected', 'extendedSelectMode', 'softSelected', 'asset.previewUrl', 'asset.overlay', 'hasHeightAndWidth', 'collapseExtraInfo'];
806
+ return reactiveProps.every(function (propKey) {
807
+ return lodash.get(prevProps, propKey) === lodash.get(nextProps, propKey);
808
+ });
809
+ }));
810
+
811
+ 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;
812
+ var AssetGalleryWrapper = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject || (_templateObject = defaultTheme._taggedTemplateLiteral(["\n ", ";\n"])), function (props) {
813
+ return props.disabled && styled.css(_templateObject2 || (_templateObject2 = defaultTheme._taggedTemplateLiteral(["\n cursor: not-allowed;\n "])));
814
+ });
815
+ 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) {
816
+ var selected = props.selected,
817
+ softSelected = props.softSelected,
818
+ hasError = props.hasError,
819
+ completed = props.completed;
820
+ return selected || softSelected || hasError || completed ? 3 : 1;
821
+ }, function (props) {
822
+ return props.theme.themeProp('color', props.theme.getColor('gray-300'), props.theme.getColor('gray-700'));
823
+ }, function (props) {
824
+ return props.disabled && styled.css(_templateObject4 || (_templateObject4 = defaultTheme._taggedTemplateLiteral(["\n pointer-events: none;\n opacity: 0.4;\n "])));
825
+ }, function (props) {
826
+ return props.extendedSelectMode && styled.css(_templateObject5 || (_templateObject5 = defaultTheme._taggedTemplateLiteral(["\n cursor: pointer;\n "])));
827
+ }, function (props) {
828
+ if (props.softSelected) {
829
+ return props.theme.themeProp('border-color', polished.rgba(props.theme.getColor('gray-100'), 0.5), polished.rgba(props.theme.getColor('gray-700'), 0.5));
830
+ }
831
+
832
+ if (props.selected) {
833
+ return props.theme.themeProp('border-color', props.theme.getColor('gray-100'), props.theme.getColor('gray-700'));
834
+ }
835
+
836
+ if (props.completed) {
837
+ return props.theme.themeProp('border-color', props.theme.getColor('emerald-500'), polished.rgba(props.theme.getColor('emerald-500'), 0.7));
838
+ }
839
+
840
+ if (props.hasError) {
841
+ return props.theme.themeProp('border-color', props.theme.getColor('red-600'), polished.rgba(props.theme.getColor('red-500'), 0.7));
842
+ }
843
+
844
+ return props.theme.themeProp('border-color', props.theme.getColor('gray-700'), props.theme.getColor('gray-300'));
845
+ });
846
+ 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) {
847
+ return props.selected || props.softSelected ? 4 : 0;
848
+ });
849
+ 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"])));
850
+ 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) {
851
+ 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 "])));
852
+ });
853
+ 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) {
854
+ return props.selected ? 0.6 : 0;
855
+ }, function (props) {
856
+ return props.selected ? '#ACCEF7' : 'transparent';
857
+ });
858
+ 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"])));
859
+ 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) {
860
+ 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;
861
+ }, function (props) {
862
+ return (props.selected || props.softSelected) && styled.css(_templateObject15 || (_templateObject15 = defaultTheme._taggedTemplateLiteral(["\n opacity: 1;\n "])));
863
+ }, Overlay, AssetGalleryGridCard$2);
864
+ 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) {
865
+ return props.theme.getColor('gray-100');
866
+ });
867
+ 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"])));
868
+ 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"])));
869
+ 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);
870
+ 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) {
871
+ return props.type === 'error' ? 0 : '4px';
872
+ }, function (props) {
873
+ return props.type === 'error' ? props.theme.getColor('red-500') : props.theme.getColor('gray-100');
874
+ }, function (props) {
875
+ return props.type === 'error' ? props.theme.getColor('gray-100') : props.theme.getColor('gray-700');
876
+ }, AssetGalleryGridCard$2);
877
+ 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) {
878
+ return props.theme.themeProp('color', props.theme.getColor('gray-300'), props.theme.getColor('gray-700'));
879
+ }, function (props) {
880
+ return props.isCardHovered ? 1 : 0;
881
+ });
882
+ 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"])));
883
+ 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) {
884
+ return props.selected ? 1 : 0;
885
+ }, function (props) {
886
+ return props.selected ? 1 : 0.5;
887
+ }, Overlay, AssetGalleryGridCard$2);
888
+ 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);
889
+ 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"])));
890
+ var Fragment = styled__default['default'].div(_templateObject26 || (_templateObject26 = defaultTheme._taggedTemplateLiteral(["\n margin: 4px;\n"])));
891
+
892
+ var ComputedRootComponent = function ComputedRootComponent(_ref) {
893
+ var component = _ref.component,
894
+ asset = _ref.asset,
895
+ props = defaultTheme._objectWithoutProperties(_ref, ["component", "asset"]);
896
+
897
+ var newProps = lodash.mapKeys(lodash.omit(props, ['theme', 'extendedSelectMode']), function (_, key) {
898
+ return key === 'innerRef' ? 'ref' : key;
899
+ });
900
+
901
+ if (component) {
902
+ if (!lodash.isFunction(component)) throw Error('Expected a function in component-prop');
903
+
904
+ if (React__default['default'].isValidElement(component(asset, newProps.children))) {
905
+ return React__default['default'].cloneElement(component(asset, newProps.children), lodash.omit(newProps, ['children']));
906
+ }
907
+ }
908
+
909
+ return React__default['default'].createElement(AssetGalleryGridCard$2, defaultTheme._extends({
910
+ ref: newProps.ref
911
+ }, newProps));
912
+ };
913
+
914
+ ComputedRootComponent.propTypes = process.env.NODE_ENV !== "production" ? {} : {};
915
+ var ComputedActionButton = React__default['default'].forwardRef(function ComputedActionButton(_ref2, forwardedRef) {
916
+ var component = _ref2.component,
917
+ className = _ref2.className,
918
+ _ref2$subActions = _ref2.subActions,
919
+ subActions = _ref2$subActions === void 0 ? [] : _ref2$subActions,
920
+ isSubActionsOpened = _ref2.isSubActionsOpened,
921
+ props = defaultTheme._objectWithoutProperties(_ref2, ["component", "className", "subActions", "isSubActionsOpened"]);
922
+
923
+ var newProps = props;
924
+
925
+ if (!lodash.isEmpty(subActions)) {
926
+ var contextMenuItems = subActions.map(function (subAction, key) {
927
+ var onClick = subAction.onClick,
928
+ title = subAction.title,
929
+ icon = subAction.icon;
930
+ return React__default['default'].createElement(ContextMenuItem.ContextMenuItem, {
931
+ key: key,
932
+ onClickEffect: onClick,
933
+ title: title,
934
+ icon: icon
935
+ });
936
+ });
937
+ var contextMenu = React__default['default'].createElement(ContextMenu.ContextMenu, null, contextMenuItems);
938
+ newProps.children = React__default['default'].createElement(Popover.Popover, {
939
+ contextMenu: true,
940
+ content: contextMenu,
941
+ placement: 'bottom-end',
942
+ visible: isSubActionsOpened,
943
+ zIndex: 10001,
944
+ offset: [0, -8]
945
+ }, React__default['default'].createElement(ActionButton.ActionButton, {
946
+ useShadow: true,
947
+ active: true,
948
+ ref: forwardedRef,
949
+ className: className,
950
+ icon: newProps.icon,
951
+ backgroundColors: ['black', 'white'],
952
+ onClick: newProps.onClick
953
+ }));
954
+ } else {
955
+ newProps.children = React__default['default'].createElement(ActionButton.ActionButton, {
956
+ useShadow: true,
957
+ active: true,
958
+ ref: forwardedRef,
959
+ className: className,
960
+ icon: newProps.icon,
961
+ onClick: newProps.onClick,
962
+ backgroundColors: ['black', 'white']
963
+ });
964
+ }
965
+
966
+ if (component) {
967
+ if (!lodash.isFunction(component)) throw Error('Expected a function in component-prop');
968
+
969
+ if (React__default['default'].isValidElement(component())) {
970
+ return React__default['default'].cloneElement(component(), defaultTheme._objectSpread2({}, lodash.omit(newProps, 'icon')));
971
+ }
972
+ }
973
+
974
+ return React__default['default'].createElement(React__default['default'].Fragment, null, newProps.children);
975
+ });
976
+
977
+ var AssetGalleryGridCard = function AssetGalleryGridCard(props) {
978
+ var asset = props.asset,
979
+ selectable = props.selectable,
980
+ selected = props.selected,
981
+ extendedSelectMode = props.extendedSelectMode,
982
+ onAssetSelected = props.onAssetSelected,
983
+ onAssetUnselected = props.onAssetUnselected,
984
+ softSelected = props.softSelected,
985
+ component = props.component,
986
+ scrollPosition = props.scrollPosition;
987
+
988
+ var _React$useState = React__default['default'].useState(false),
989
+ _React$useState2 = defaultTheme._slicedToArray(_React$useState, 2),
990
+ isCardHovered = _React$useState2[0],
991
+ setIsCardHovered = _React$useState2[1];
992
+
993
+ var _React$useState3 = React__default['default'].useState([]),
994
+ _React$useState4 = defaultTheme._slicedToArray(_React$useState3, 2),
995
+ openedSubActions = _React$useState4[0],
996
+ updateOpenedSubActions = _React$useState4[1];
997
+
998
+ React.useEffect(function () {
999
+ var _asset$actions;
1000
+
1001
+ var newOpenedSubActions = ((_asset$actions = asset === null || asset === void 0 ? void 0 : asset.actions) !== null && _asset$actions !== void 0 ? _asset$actions : []).map(function () {
1002
+ return false;
1003
+ });
1004
+ updateOpenedSubActions(newOpenedSubActions);
1005
+ }, [asset]);
1006
+ React.useEffect(function () {
1007
+ if (!isCardHovered && openedSubActions !== null && openedSubActions !== void 0 && openedSubActions.length) {
1008
+ updateOpenedSubActions(openedSubActions.map(function () {
1009
+ return false;
1010
+ }));
1011
+ }
1012
+ }, [isCardHovered]);
1013
+ var mouseHasEnteredCard = React.useCallback(function () {
1014
+ setIsCardHovered(true);
1015
+ }, []);
1016
+ var mouseHasLeftCard = React.useCallback(function () {
1017
+ setIsCardHovered(false);
1018
+ }, []);
1019
+ var onSubActionsViewToggle = React.useCallback(function (actionIndex) {
1020
+ var newOpenedSubActions = openedSubActions.map(function (isOpened, index) {
1021
+ if (index !== actionIndex) {
1022
+ return false;
1023
+ }
1024
+
1025
+ return !isOpened;
1026
+ });
1027
+ updateOpenedSubActions(newOpenedSubActions);
1028
+ }, [openedSubActions]);
1029
+ var videoPlayerRef = React.useRef();
1030
+ var cardRef = React.useRef();
1031
+ var dragRef = React.useRef(null);
1032
+
1033
+ function onMouseEnter(event) {
1034
+ if (videoPlayerRef.current) {
1035
+ var playPromise = videoPlayerRef.current.play();
1036
+
1037
+ if (playPromise !== undefined) {
1038
+ playPromise.then(function () {})["catch"](function () {});
1039
+ }
1040
+ }
1041
+
1042
+ if (lodash.isFunction(asset.onMouseEnter)) {
1043
+ asset.onMouseEnter(event, asset);
1044
+ }
1045
+
1046
+ mouseHasEnteredCard();
1047
+ }
1048
+
1049
+ function onMouseLeave() {
1050
+ if (videoPlayerRef.current) {
1051
+ videoPlayerRef.current.pause();
1052
+ }
1053
+
1054
+ mouseHasLeftCard();
1055
+ }
1056
+
1057
+ function onClick(event) {
1058
+ if (extendedSelectMode) {
1059
+ return onSelectClick(event);
1060
+ }
1061
+
1062
+ if (lodash.isFunction(asset.onClick)) {
1063
+ asset.onClick(event, asset);
1064
+ }
1065
+ }
1066
+
1067
+ function onSelectClick(event) {
1068
+ event.preventDefault();
1069
+ event.stopPropagation();
1070
+
1071
+ if (selected) {
1072
+ return onAssetUnselected(asset.key);
1073
+ }
1074
+
1075
+ return onAssetSelected(asset.key);
1076
+ }
1077
+
1078
+ var onActionClick = React.useCallback(function (event, action, index) {
1079
+ event.preventDefault();
1080
+ event.stopPropagation();
1081
+
1082
+ if (lodash.isFunction(action === null || action === void 0 ? void 0 : action.onClick)) {
1083
+ action.onClick(asset);
1084
+ }
1085
+
1086
+ if (!lodash.isEmpty(action === null || action === void 0 ? void 0 : action.subActions)) {
1087
+ onSubActionsViewToggle(index);
1088
+ }
1089
+ }, [onSubActionsViewToggle]);
1090
+ var shouldOpenSubActions = React.useCallback(function (actionIndex) {
1091
+ return openedSubActions[actionIndex];
1092
+ }, [openedSubActions]);
1093
+
1094
+ function onContextMenu(event) {
1095
+ event.preventDefault();
1096
+ asset.onContextMenu(event);
1097
+ }
1098
+
1099
+ function renderPreview(asset) {
1100
+ var _asset$fileType, _asset$fileType2, _asset$note, _asset$note2;
1101
+
1102
+ var previewContent = null;
1103
+
1104
+ if (((_asset$fileType = asset.fileType) === null || _asset$fileType === void 0 ? void 0 : _asset$fileType.toLowerCase()) === 'video') {
1105
+ previewContent = React__default['default'].createElement(reactLazyLoadImageComponent.LazyLoadComponent, {
1106
+ scrollPosition: scrollPosition
1107
+ }, React__default['default'].createElement("video", {
1108
+ ref: videoPlayerRef,
1109
+ loop: true,
1110
+ muted: true
1111
+ }, React__default['default'].createElement("source", {
1112
+ src: asset.previewUrl,
1113
+ type: "video/mp4"
1114
+ })));
1115
+ } else if (((_asset$fileType2 = asset.fileType) === null || _asset$fileType2 === void 0 ? void 0 : _asset$fileType2.toLowerCase()) === 'audio') {
1116
+ previewContent = React__default['default'].createElement(reactLazyLoadImageComponent.LazyLoadComponent, {
1117
+ scrollPosition: scrollPosition
1118
+ }, React__default['default'].createElement("div", {
1119
+ className: "audio"
1120
+ }, React__default['default'].createElement(SvgHeadset, null)));
1121
+ } else {
1122
+ previewContent = React__default['default'].createElement(reactLazyLoadImageComponent.LazyLoadImage, {
1123
+ alt: asset.title,
1124
+ src: asset.previewUrl,
1125
+ height: "100%",
1126
+ width: "100%",
1127
+ delayMethod: "debounce",
1128
+ delayTime: 0,
1129
+ threshold: 1500,
1130
+ scrollPosition: scrollPosition
1131
+ });
1132
+ }
1133
+
1134
+ return React__default['default'].createElement(Figure, {
1135
+ selected: selected
1136
+ }, previewContent, React__default['default'].createElement(FigureOverlayBackdrop, {
1137
+ selected: selected
1138
+ }), React__default['default'].createElement(Overlay, {
1139
+ ref: cardRef
1140
+ }, React__default['default'].createElement(OverlayBackdrop, {
1141
+ softSelected: softSelected,
1142
+ selected: selected
1143
+ }), 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, {
1144
+ type: asset === null || asset === void 0 ? void 0 : (_asset$note2 = asset.note) === null || _asset$note2 === void 0 ? void 0 : _asset$note2.type
1145
+ }, React__default['default'].createElement(warningCircle.SvgWarningCircle, null)), React__default['default'].createElement(OverlayInfoTopActions, {
1146
+ isCardHovered: isCardHovered
1147
+ }, asset.actions && asset.actions.map(function (action, index) {
1148
+ return React__default['default'].createElement(Tooltip.Tooltip, {
1149
+ key: "".concat(asset.key, "-").concat(action.title),
1150
+ content: action.title
1151
+ }, React__default['default'].createElement(Fragment, {
1152
+ as: ComputedActionButton,
1153
+ component: action.component,
1154
+ className: action.className,
1155
+ icon: action.icon,
1156
+ isCardHovered: isCardHovered,
1157
+ isSubActionsOpened: shouldOpenSubActions(index),
1158
+ onClick: function onClick(event) {
1159
+ return onActionClick(event, action, index);
1160
+ },
1161
+ subActions: action === null || action === void 0 ? void 0 : action.subActions
1162
+ }));
1163
+ }))), React__default['default'].createElement(OverlayInfoBottom, null, selectable && React__default['default'].createElement(OverlayInfoBottomSelectButton, {
1164
+ selected: selected
1165
+ }, React__default['default'].createElement(SvgCheckRectangleFilled, {
1166
+ onClick: onSelectClick
1167
+ })), React__default['default'].createElement(OverlayInfoBottomMediaIcon, null, renderMediaBadge()))), selectable && React__default['default'].createElement(OverlaySelected, {
1168
+ selected: selected,
1169
+ softSelected: softSelected
1170
+ })), asset.overlay && React__default['default'].createElement(ConsumerDefinedOverlay, null, asset.overlay));
1171
+ }
1172
+
1173
+ React.useEffect(function () {
1174
+ if (lodash.isFunction(asset.onContextMenu)) {
1175
+ if (cardRef.current) {
1176
+ cardRef.current.addEventListener('contextmenu', onContextMenu);
1177
+ }
1178
+
1179
+ return function () {
1180
+ if (cardRef.current) {
1181
+ cardRef.current.removeEventListener('contextmenu', onContextMenu);
1182
+ }
1183
+ };
1184
+ }
1185
+ }, []);
1186
+
1187
+ function onDragstart(event) {
1188
+ asset.onDragstart(event);
1189
+ }
1190
+
1191
+ React.useEffect(function () {
1192
+ if (lodash.isFunction(asset.onDragstart)) {
1193
+ if (dragRef.current) {
1194
+ dragRef.current.addEventListener('dragstart', onDragstart);
1195
+ }
1196
+
1197
+ return function () {
1198
+ if (dragRef.current) {
1199
+ dragRef.current.removeEventListener('dragstart', onDragstart);
1200
+ }
1201
+ };
1202
+ }
1203
+ }, []);
1204
+ React.useEffect(function () {
1205
+ if (softSelected) {
1206
+ cardRef.current.scrollIntoView({
1207
+ behavior: 'smooth',
1208
+ block: 'nearest'
1209
+ });
1210
+ }
1211
+ }, [softSelected]);
1212
+ var renderVersionsBadge = React.useCallback(function () {
1213
+ if (!(asset !== null && asset !== void 0 && asset.versions)) return null;
1214
+ return React__default['default'].createElement(Badge.Badge, {
1215
+ badgeIcon: React__default['default'].createElement(SvgLayers, null),
1216
+ badgeContent: asset.versions,
1217
+ backgroundColors: ['black', 'black'],
1218
+ colors: ['#f7f8f9', '#f7f8f9'],
1219
+ fontSize: 12,
1220
+ fontWeight: 500,
1221
+ lineHeight: 16,
1222
+ verticalPadding: 4,
1223
+ horizontalPadding: 8
1224
+ });
1225
+ }, [asset]);
1226
+ var renderMediaBadge = React.useCallback(function () {
1227
+ var badgeIcon = null;
1228
+ var badgeContent = null;
1229
+
1230
+ if ((asset === null || asset === void 0 ? void 0 : asset.fileType) === 'video') {
1231
+ badgeIcon = React__default['default'].createElement(SvgPlay, null);
1232
+ }
1233
+
1234
+ if (asset !== null && asset !== void 0 && asset.duration) {
1235
+ badgeContent = convertMsToHMS(asset.duration);
1236
+ }
1237
+
1238
+ if (!badgeIcon && !badgeContent) return null;
1239
+ return React__default['default'].createElement(Badge.Badge, {
1240
+ badgeIcon: badgeIcon,
1241
+ badgeContent: badgeContent,
1242
+ backgroundColors: ['black', 'black'],
1243
+ colors: ['#f7f8f9', '#f7f8f9'],
1244
+ fontSize: 12,
1245
+ fontWeight: 500,
1246
+ lineHeight: 16,
1247
+ verticalPadding: 4,
1248
+ horizontalPadding: 8,
1249
+ minWidth: 32,
1250
+ height: 24
1251
+ });
1252
+ }, [asset]);
1253
+ var renderSummary = React.useCallback(function () {
1254
+ var _asset$summary, _asset$summary2, _asset$summary3, _asset$summary4, _asset$summary5, _asset$summary6;
1255
+
1256
+ return React__default['default'].createElement(SummaryCard, {
1257
+ title: (asset === null || asset === void 0 ? void 0 : (_asset$summary = asset.summary) === null || _asset$summary === void 0 ? void 0 : _asset$summary.title) || '',
1258
+ description: (asset === null || asset === void 0 ? void 0 : (_asset$summary2 = asset.summary) === null || _asset$summary2 === void 0 ? void 0 : _asset$summary2.description) || '',
1259
+ instructions: (asset === null || asset === void 0 ? void 0 : (_asset$summary3 = asset.summary) === null || _asset$summary3 === void 0 ? void 0 : _asset$summary3.instructions) || '',
1260
+ instructionsType: (asset === null || asset === void 0 ? void 0 : (_asset$summary4 = asset.summary) === null || _asset$summary4 === void 0 ? void 0 : _asset$summary4.instructionsType) || '',
1261
+ footerLeft: (asset === null || asset === void 0 ? void 0 : (_asset$summary5 = asset.summary) === null || _asset$summary5 === void 0 ? void 0 : _asset$summary5.footerLeft) || '',
1262
+ footerRight: (asset === null || asset === void 0 ? void 0 : (_asset$summary6 = asset.summary) === null || _asset$summary6 === void 0 ? void 0 : _asset$summary6.footerRight) || ''
1263
+ });
1264
+ }, [asset]);
1265
+ return React__default['default'].createElement(AssetGalleryWrapper, {
1266
+ disabled: asset.disabled
1267
+ }, React__default['default'].createElement(AssetGalleryGridCard$2, {
1268
+ as: ComputedRootComponent,
1269
+ component: component,
1270
+ asset: asset,
1271
+ disabled: asset.disabled,
1272
+ onClick: onClick,
1273
+ extendedSelectMode: extendedSelectMode,
1274
+ onMouseEnter: onMouseEnter,
1275
+ onMouseLeave: onMouseLeave,
1276
+ draggable: asset.draggable,
1277
+ innerRef: dragRef,
1278
+ selected: selected,
1279
+ softSelected: softSelected,
1280
+ completed: asset === null || asset === void 0 ? void 0 : asset.completed,
1281
+ hasError: asset === null || asset === void 0 ? void 0 : asset.hasError
1282
+ }, React__default['default'].createElement(ContentWrapper, {
1283
+ layout: asset.layout,
1284
+ ref: cardRef,
1285
+ softSelected: softSelected,
1286
+ selected: selected
1287
+ }, React__default['default'].createElement(Asset, {
1288
+ "data-id": "ss",
1289
+ selected: selected
1290
+ }, asset.previewUrl && renderPreview(asset)), renderSummary())));
1291
+ };
1292
+
1293
+ AssetGalleryGridCard.propTypes = process.env.NODE_ENV !== "production" ? {
1294
+ asset: defaultTheme.PropTypes.shape(assetShapeWithLayout).isRequired,
1295
+ selectable: defaultTheme.PropTypes.bool,
1296
+ selected: defaultTheme.PropTypes.bool,
1297
+ extendedSelectMode: defaultTheme.PropTypes.bool,
1298
+ onAssetSelected: defaultTheme.PropTypes.func.isRequired,
1299
+ onAssetUnselected: defaultTheme.PropTypes.func.isRequired,
1300
+ softSelected: defaultTheme.PropTypes.bool.isRequired,
1301
+ component: defaultTheme.PropTypes.func,
1302
+ scrollPosition: defaultTheme.PropTypes.number
1303
+ } : {};
1304
+ AssetGalleryGridCard.defaultProps = {};
1305
+ var AssetGalleryGridCard$1 = reactLazyLoadImageComponent.trackWindowScroll(React__default['default'].memo(AssetGalleryGridCard, function (prevProps, nextProps) {
1306
+ var reactiveProps = ['selectable', 'selected', 'extendedSelectMode', 'softSelected', 'asset.previewUrl', 'asset.overlay', 'asset.layout'];
1307
+ return reactiveProps.every(function (propKey) {
1308
+ return lodash.get(prevProps, propKey) === lodash.get(nextProps, propKey);
1309
+ });
1310
+ }));
1311
+
1312
+ var AssetGalleryBase = React__default['default'].forwardRef(function AssetGalleryBase(_ref, forwardedRef) {
1313
+ var assetsProp = _ref.assets,
1314
+ activeSummaryCard = _ref.activeSummaryCard,
1315
+ viewMode = _ref.viewMode,
1316
+ thumbnailMaxHeight = _ref.thumbnailMaxHeight,
1317
+ selectable = _ref.selectable,
1318
+ selectedAssetKeys = _ref.selectedAssetKeys,
1319
+ onAssetSelected = _ref.onAssetSelected,
1320
+ onAssetUnselected = _ref.onAssetUnselected,
1321
+ softSelectable = _ref.softSelectable,
1322
+ softSelectedAssetKey = _ref.softSelectedAssetKey,
1323
+ scrollElementProp = _ref.scrollElement,
1324
+ onAssetSoftSelectedChanged = _ref.onAssetSoftSelectedChanged,
1325
+ component = _ref.component,
1326
+ props = defaultTheme._objectWithoutProperties(_ref, ["assets", "activeSummaryCard", "viewMode", "thumbnailMaxHeight", "selectable", "selectedAssetKeys", "onAssetSelected", "onAssetUnselected", "softSelectable", "softSelectedAssetKey", "scrollElement", "onAssetSoftSelectedChanged", "component"]);
1327
+
1328
+ var assetGalleryDOMNode = React.useRef();
1329
+ var assetGalleryCompactRef = useMergedRefs.useMergedRefs(forwardedRef, assetGalleryDOMNode);
1330
+ var assetGalleryWidth = React.useRef(0);
1331
+ var minimumRowAspectRatio = React.useRef(0);
1332
+ var calculatedAssets = React.useRef([]);
1333
+
1334
+ var _useState = React.useState([]),
1335
+ _useState2 = defaultTheme._slicedToArray(_useState, 2),
1336
+ assets = _useState2[0],
1337
+ setAssets = _useState2[1];
1338
+
1339
+ var MAXIMUM_ROW_HEIGHT = React.useMemo(function () {
1340
+ return viewMode === 'grid' ? 450 : thumbnailMaxHeight;
1341
+ }, [viewMode, thumbnailMaxHeight]);
1342
+ var SPACE_BETWEEN_ASSETS = 8;
1343
+ var SPACE_UNDER_ASSETS = 8;
1344
+ var PRIMARY_SCROLL_BUFFER_HEIGHT = 1500;
1345
+ var SECONDARY_SCROLL_BUFFER_HEIGHT = 500;
1346
+ var GRID_VIEW_MODE_ASSET_MIN_WIDTH = 300;
1347
+ var GRID_VIEW_MODE_ASSET_HEIGHT = 427;
1348
+ var MISSING_WIDTH_PLACEHOLDER = 1920;
1349
+ var MISSING_HEIGHT_PLACEHOLDER = 1080;
1350
+ var isBrowser = typeof window !== 'undefined';
1351
+ var scrollElement = scrollElementProp || window;
1352
+ var previousYOffset = React.useRef(isBrowser ? scrollElement.pageYOffset : 0);
1353
+ var latestYOffset = React.useRef(isBrowser ? scrollElement.pageYOffset : 0);
1354
+ var scrollDirection = React.useRef('down');
1355
+ MultiLevelCheckboxSelect.useIsomorphicLayoutEffect(function () {
1356
+ if (!assetGalleryDOMNode.current) return;
1357
+ var throttledOnResize = lodash.throttle(onResize, 1);
1358
+ var resizeObserver = new ResizeObserver__default['default'](throttledOnResize);
1359
+ resizeObserver.observe(assetGalleryDOMNode.current);
1360
+
1361
+ function onResize(entries) {
1362
+ entries.forEach(function (entry) {
1363
+ if (assetGalleryWidth.current === entry.contentRect.width) return;
1364
+ window.requestAnimationFrame(function () {
1365
+ assetGalleryWidth.current = entry.contentRect.width;
1366
+ main();
1367
+ });
1368
+ });
1369
+ }
1370
+
1371
+ return function () {
1372
+ resizeObserver.unobserve(assetGalleryDOMNode.current);
1373
+ };
1374
+ }, [assetsProp, assetGalleryDOMNode, MAXIMUM_ROW_HEIGHT]);
1375
+ React.useEffect(function () {
1376
+ main();
1377
+ }, [MAXIMUM_ROW_HEIGHT, assetsProp]);
1378
+
1379
+ var main = function main() {
1380
+ calculateAssetGalleryAspectRatio();
1381
+ calculateLayout();
1382
+ calculateVisibility();
1383
+ };
1384
+
1385
+ var calculateAssetGalleryAspectRatio = function calculateAssetGalleryAspectRatio() {
1386
+ if (assetGalleryWidth.current > 0) {
1387
+ minimumRowAspectRatio.current = calculateAspectRatio(assetGalleryWidth.current, MAXIMUM_ROW_HEIGHT);
1388
+ }
1389
+ };
1390
+
1391
+ var calculateLayout = function calculateLayout() {
1392
+ var assetsWithoutAKey = assetsProp.filter(function (a) {
1393
+ return !a.key;
1394
+ });
1395
+
1396
+ if (assetsWithoutAKey.length > 0) {
1397
+ assetsProp = assetsProp.filter(function (a) {
1398
+ return a.key;
1399
+ });
1400
+ assetsWithoutAKey.forEach(function (a) {
1401
+ return console.warn('Omitted asset from the gallery because it was missing the unique `key` property.', a);
1402
+ });
1403
+ }
1404
+
1405
+ if (viewMode === 'grid' && assetGalleryWidth.current > 0) {
1406
+ var row = [];
1407
+ var translateX = 0;
1408
+ var translateY = 0;
1409
+ var computedAssets = [];
1410
+ var lastGroup = null;
1411
+ var desiredAssetCountInRow = Math.floor(assetGalleryWidth.current / GRID_VIEW_MODE_ASSET_MIN_WIDTH) || 1;
1412
+ var desiredAssetWidth = assetGalleryWidth.current / desiredAssetCountInRow - SPACE_BETWEEN_ASSETS + SPACE_BETWEEN_ASSETS / desiredAssetCountInRow;
1413
+ assetsProp.forEach(function (asset, index) {
1414
+ var _assetsProp;
1415
+
1416
+ if (asset.group && asset.group !== lastGroup) {
1417
+ computedAssets.push({
1418
+ title: asset.group,
1419
+ key: asset.key,
1420
+ layout: {
1421
+ type: 'groupLabel',
1422
+ height: 50,
1423
+ translateX: Math.round(translateX),
1424
+ translateY: Math.round(translateY)
1425
+ }
1426
+ });
1427
+ lastGroup = asset.group;
1428
+ translateY += 50 + SPACE_UNDER_ASSETS;
1429
+ }
1430
+
1431
+ row.push(asset);
1432
+
1433
+ if (row.length === desiredAssetCountInRow || index + 1 === assetsProp.length || (_assetsProp = assetsProp[index + 1]) !== null && _assetsProp !== void 0 && _assetsProp.group && assetsProp[index + 1].group !== asset.group) {
1434
+ row.forEach(function (rowAsset) {
1435
+ computedAssets.push(defaultTheme._objectSpread2(defaultTheme._objectSpread2({}, rowAsset), {}, {
1436
+ layout: {
1437
+ type: 'asset',
1438
+ width: Math.round(desiredAssetWidth),
1439
+ height: Math.round(GRID_VIEW_MODE_ASSET_HEIGHT),
1440
+ translateX: Math.round(translateX),
1441
+ translateY: Math.round(translateY)
1442
+ }
1443
+ }));
1444
+ translateX += desiredAssetWidth + SPACE_BETWEEN_ASSETS;
1445
+ });
1446
+ row = [];
1447
+ translateX = 0;
1448
+ translateY += GRID_VIEW_MODE_ASSET_HEIGHT + SPACE_UNDER_ASSETS;
1449
+ }
1450
+ });
1451
+ calculatedAssets.current = computedAssets;
1452
+ } else {
1453
+ if (minimumRowAspectRatio.current > 0) {
1454
+ var _row = [];
1455
+ var _translateX = 0;
1456
+ var _translateY = 0;
1457
+ var rowAspectRatio = 0;
1458
+ var _lastGroup = null;
1459
+ var _computedAssets = [];
1460
+ assetsProp.forEach(function (asset, index) {
1461
+ var _assetsProp2;
1462
+
1463
+ if (asset.group && asset.group !== _lastGroup) {
1464
+ _computedAssets.push({
1465
+ title: asset.group,
1466
+ key: asset.key,
1467
+ layout: {
1468
+ type: 'groupLabel',
1469
+ height: 50,
1470
+ translateX: Math.round(_translateX),
1471
+ translateY: Math.round(_translateY)
1472
+ }
1473
+ });
1474
+
1475
+ _lastGroup = asset.group;
1476
+ _translateY += 50 + SPACE_UNDER_ASSETS;
1477
+ }
1478
+
1479
+ rowAspectRatio += calculateAspectRatio(asset.width || MISSING_WIDTH_PLACEHOLDER, asset.height || MISSING_HEIGHT_PLACEHOLDER);
1480
+
1481
+ _row.push(asset);
1482
+
1483
+ if (rowAspectRatio >= minimumRowAspectRatio.current || index + 1 === assetsProp.length || (_assetsProp2 = assetsProp[index + 1]) !== null && _assetsProp2 !== void 0 && _assetsProp2.group && assetsProp[index + 1].group !== asset.group) {
1484
+ rowAspectRatio = Math.max(rowAspectRatio, minimumRowAspectRatio.current);
1485
+ var totalDesiredWidthOfImages = assetGalleryWidth.current - SPACE_BETWEEN_ASSETS * (_row.length - 1);
1486
+ var rowHeight = totalDesiredWidthOfImages / rowAspectRatio;
1487
+
1488
+ _row.forEach(function (rowAsset) {
1489
+ var assetWidth = rowHeight * calculateAspectRatio(rowAsset.width || MISSING_WIDTH_PLACEHOLDER, rowAsset.height || MISSING_HEIGHT_PLACEHOLDER);
1490
+
1491
+ _computedAssets.push(defaultTheme._objectSpread2(defaultTheme._objectSpread2({}, rowAsset), {}, {
1492
+ layout: {
1493
+ type: 'asset',
1494
+ width: Math.round(assetWidth),
1495
+ height: Math.round(rowHeight),
1496
+ translateX: Math.round(_translateX),
1497
+ translateY: Math.round(_translateY),
1498
+ hasHeightAndWidth: Boolean(rowAsset.width && rowAsset.height)
1499
+ }
1500
+ }));
1501
+
1502
+ _translateX += assetWidth + SPACE_BETWEEN_ASSETS;
1503
+ });
1504
+
1505
+ _row = [];
1506
+ rowAspectRatio = 0;
1507
+ _translateY += rowHeight + SPACE_UNDER_ASSETS;
1508
+ _translateX = 0;
1509
+ }
1510
+ });
1511
+ calculatedAssets.current = _computedAssets;
1512
+ }
1513
+ }
1514
+ };
1515
+
1516
+ function calculateAspectRatio(width, height) {
1517
+ return width / height;
1518
+ }
1519
+
1520
+ var totalGalleryHeight = React.useMemo(function () {
1521
+ if (assets.length === 0) {
1522
+ return 0;
1523
+ }
1524
+
1525
+ var lastAsset = assets[assets.length - 1];
1526
+ return lastAsset.layout.translateY + lastAsset.layout.height;
1527
+ }, [assets]);
1528
+ React.useEffect(function () {
1529
+ var throttledOnScroll = lodash.throttle(onScroll, 200);
1530
+ scrollElement.addEventListener('scroll', throttledOnScroll, false);
1531
+ return function () {
1532
+ return scrollElement.removeEventListener('scroll', throttledOnScroll, false);
1533
+ };
1534
+ }, [assetGalleryDOMNode, calculatedAssets]);
1535
+
1536
+ function onScroll() {
1537
+ setScrollPositionAndDirection();
1538
+ calculateVisibility();
1539
+ }
1540
+
1541
+ function setScrollPositionAndDirection() {
1542
+ var newYOffset = scrollElement.pageYOffset;
1543
+ previousYOffset.current = latestYOffset.current;
1544
+ latestYOffset.current = newYOffset;
1545
+ scrollDirection.current = latestYOffset.current > previousYOffset.current ? 'down' : 'up';
1546
+ }
1547
+
1548
+ var calculateVisibility = function calculateVisibility() {
1549
+ if (!assetGalleryDOMNode.current) return;
1550
+ var bufferTop = scrollDirection.current === 'up' ? PRIMARY_SCROLL_BUFFER_HEIGHT : SECONDARY_SCROLL_BUFFER_HEIGHT;
1551
+ var bufferBottom = scrollDirection.current === 'up' ? SECONDARY_SCROLL_BUFFER_HEIGHT : PRIMARY_SCROLL_BUFFER_HEIGHT;
1552
+ var containerOffset = getOffsetTop(assetGalleryDOMNode.current);
1553
+ var scrollerHeight = scrollElement.innerHeight;
1554
+ var yOffset = latestYOffset.current;
1555
+ var minTranslateYPlusHeight = yOffset - containerOffset - bufferTop;
1556
+ var maxTranslateY = yOffset - containerOffset + scrollerHeight + bufferBottom;
1557
+ var finalizedAssets = calculatedAssets.current.map(function (asset) {
1558
+ if (scrollElement.self == window && (asset.layout.translateY + asset.layout.height < minTranslateYPlusHeight || asset.layout.translateY > maxTranslateY)) {
1559
+ asset.layout.show = false;
1560
+ } else {
1561
+ asset.layout.show = true;
1562
+ }
1563
+
1564
+ return asset;
1565
+ });
1566
+ setAssets(finalizedAssets);
1567
+ };
1568
+
1569
+ function getOffsetTop(elem) {
1570
+ var offsetTop = 0;
1571
+
1572
+ do {
1573
+ if (!isNaN(elem.offsetTop)) {
1574
+ offsetTop += elem.offsetTop;
1575
+ }
1576
+
1577
+ elem = elem.offsetParent;
1578
+ } while (elem);
1579
+
1580
+ return offsetTop;
1581
+ }
1582
+
1583
+ var handleKeyPress = React.useCallback(function (e) {
1584
+ function isElementVisible(el) {
1585
+ var rect = el.getBoundingClientRect(),
1586
+ vWidth = scrollElement.innerWidth || document.documentElement.clientWidth,
1587
+ vHeight = scrollElement.innerHeight || document.documentElement.clientHeight,
1588
+ efp = function efp(x, y) {
1589
+ return document.elementFromPoint(x, y);
1590
+ };
1591
+
1592
+ if (rect.right < 0 || rect.bottom < 0 || rect.left > vWidth || rect.top > vHeight) return false;
1593
+ 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));
1594
+ }
1595
+
1596
+ function softSelectFirstVisibleAsset() {
1597
+ var visibleAssets = assets.filter(function (asset) {
1598
+ return asset.layout.show;
1599
+ });
1600
+
1601
+ for (var i = 0; i < assetGalleryDOMNode.current.children.length; i++) {
1602
+ if (isElementVisible(assetGalleryDOMNode.current.children[i])) {
1603
+ onAssetSoftSelectedChanged(visibleAssets[i].key);
1604
+ break;
1605
+ }
1606
+ }
1607
+ }
1608
+
1609
+ if (assets.length === 0) return;
1610
+
1611
+ if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {
1612
+ if (softSelectedAssetKey === null) {
1613
+ softSelectFirstVisibleAsset();
1614
+ return;
1615
+ }
1616
+ }
1617
+
1618
+ if (e.key === 'ArrowLeft') {
1619
+ var previousAssetIndex = assets.findIndex(function (asset) {
1620
+ return asset.key === softSelectedAssetKey;
1621
+ }) - 1;
1622
+ var previousAsset = assets[previousAssetIndex];
1623
+
1624
+ if (previousAsset) {
1625
+ if (previousAsset.layout.show) {
1626
+ onAssetSoftSelectedChanged(previousAsset.key);
1627
+ } else {
1628
+ softSelectFirstVisibleAsset();
1629
+ }
1630
+ }
1631
+
1632
+ return;
1633
+ }
1634
+
1635
+ if (e.key === 'ArrowRight') {
1636
+ var nextAssetIndex = assets.findIndex(function (asset) {
1637
+ return asset.key === softSelectedAssetKey;
1638
+ }) + 1;
1639
+ var nextAsset = assets[nextAssetIndex];
1640
+
1641
+ if (nextAsset) {
1642
+ if (nextAsset.layout.show) {
1643
+ onAssetSoftSelectedChanged(nextAsset.key);
1644
+ } else {
1645
+ softSelectFirstVisibleAsset();
1646
+ }
1647
+ }
1648
+
1649
+ return;
1650
+ }
1651
+
1652
+ if (e.key === 'Enter') {
1653
+ if (softSelectedAssetKey === null) return;
1654
+
1655
+ if (selectedAssetKeys.includes(softSelectedAssetKey)) {
1656
+ onAssetUnselected(softSelectedAssetKey);
1657
+ } else {
1658
+ onAssetSelected(softSelectedAssetKey);
1659
+ }
1660
+ }
1661
+ }, [assets, softSelectedAssetKey, onAssetSoftSelectedChanged, selectedAssetKeys, assetGalleryCompactRef]);
1662
+ var handleClick = React.useCallback(function () {
1663
+ onAssetSoftSelectedChanged(null);
1664
+ }, []);
1665
+ React.useEffect(function () {
1666
+ if (softSelectable) {
1667
+ document.addEventListener('keydown', handleKeyPress);
1668
+ }
1669
+
1670
+ return function () {
1671
+ return document.removeEventListener('keydown', handleKeyPress);
1672
+ };
1673
+ }, [softSelectable, handleKeyPress]);
1674
+ React.useEffect(function () {
1675
+ if (softSelectable && softSelectedAssetKey !== null) {
1676
+ document.addEventListener('click', handleClick, true);
1677
+ }
1678
+
1679
+ return function () {
1680
+ return document.removeEventListener('click', handleClick, true);
1681
+ };
1682
+ }, [softSelectable, softSelectedAssetKey, handleClick]);
1683
+ return React__default['default'].createElement(React__default['default'].Fragment, null, React__default['default'].createElement(AssetGalleryBase$1, defaultTheme._extends({
1684
+ ref: assetGalleryCompactRef,
1685
+ style: {
1686
+ height: "".concat(totalGalleryHeight, "px")
1687
+ },
1688
+ className: props.className
1689
+ }, props), assets.map(function (asset) {
1690
+ return asset.layout.show && React__default['default'].createElement(React__default['default'].Fragment, {
1691
+ key: "asset-gallery-".concat(asset.layout.type, "-").concat(asset.key)
1692
+ }, asset.layout.type === 'groupLabel' && React__default['default'].createElement(GroupLabel, {
1693
+ style: {
1694
+ transform: "translate3d(".concat(asset.layout.translateX, "px,").concat(asset.layout.translateY, "px, 0)"),
1695
+ height: "".concat(asset.layout.height, "px")
1696
+ }
1697
+ }, asset.title), asset.layout.type === 'asset' && React__default['default'].createElement(AssetGalleryCardBase, {
1698
+ style: {
1699
+ transform: "translate3d(".concat(asset.layout.translateX, "px, ").concat(asset.layout.translateY, "px, 0)"),
1700
+ width: "".concat(asset.layout.width, "px"),
1701
+ height: "".concat(asset.layout.height, "px")
1702
+ }
1703
+ }, viewMode === 'grid' ? React__default['default'].createElement(AssetGalleryGridCard$1, {
1704
+ asset: asset,
1705
+ selectable: 'selectable' in asset ? asset.selectable : selectable,
1706
+ selected: selectedAssetKeys.includes(asset.key),
1707
+ extendedSelectMode: Boolean(selectedAssetKeys.length),
1708
+ onAssetSelected: onAssetSelected,
1709
+ onAssetUnselected: onAssetUnselected,
1710
+ softSelected: softSelectedAssetKey === asset.key,
1711
+ component: component
1712
+ }) : React__default['default'].createElement(AssetGalleryCompactCard$1, {
1713
+ asset: asset,
1714
+ activeSummaryCard: activeSummaryCard,
1715
+ hasHeightAndWidth: asset.layout.hasHeightAndWidth,
1716
+ collapseExtraInfo: asset.layout.width < 90,
1717
+ selectable: 'selectable' in asset ? asset.selectable : selectable,
1718
+ selected: selectedAssetKeys.includes(asset.key),
1719
+ extendedSelectMode: Boolean(selectedAssetKeys.length),
1720
+ onAssetSelected: onAssetSelected,
1721
+ onAssetUnselected: onAssetUnselected,
1722
+ softSelected: softSelectedAssetKey === asset.key,
1723
+ component: component
1724
+ })));
1725
+ })));
1726
+ });
1727
+ AssetGalleryBase.propTypes = process.env.NODE_ENV !== "production" ? {
1728
+ assets: defaultTheme.PropTypes.arrayOf(defaultTheme.PropTypes.shape(assetShape)),
1729
+ activeSummaryCard: defaultTheme.PropTypes.bool,
1730
+ viewMode: defaultTheme.PropTypes.oneOf(['compact', 'grid']),
1731
+ thumbnailMaxHeight: defaultTheme.PropTypes.number,
1732
+ selectable: defaultTheme.PropTypes.bool,
1733
+ selectedAssetKeys: defaultTheme.PropTypes.oneOfType([defaultTheme.PropTypes.arrayOf(defaultTheme.PropTypes.string), defaultTheme.PropTypes.arrayOf(defaultTheme.PropTypes.number)]).isRequired,
1734
+ scrollElement: defaultTheme.PropTypes.instanceOf(Element),
1735
+ onAssetSelected: defaultTheme.PropTypes.func.isRequired,
1736
+ onAssetUnselected: defaultTheme.PropTypes.func.isRequired,
1737
+ softSelectable: defaultTheme.PropTypes.bool,
1738
+ softSelectedAssetKey: defaultTheme.PropTypes.oneOfType([defaultTheme.PropTypes.string, defaultTheme.PropTypes.number]),
1739
+ onAssetSoftSelectedChanged: defaultTheme.PropTypes.func.isRequired,
1740
+ component: defaultTheme.PropTypes.func,
1741
+ className: defaultTheme.PropTypes.string
1742
+ } : {};
1743
+
1744
+ var AssetGallery = React__default['default'].forwardRef(function AssetGallery(_ref, forwardedRef) {
1745
+ var assets = _ref.assets,
1746
+ activeSummaryCard = _ref.activeSummaryCard,
1747
+ viewMode = _ref.viewMode,
1748
+ thumbnailMaxHeight = _ref.thumbnailMaxHeight,
1749
+ selectable = _ref.selectable,
1750
+ selectedAssetKeys = _ref.selectedAssetKeys,
1751
+ onSelectedChanged = _ref.onSelectedChanged,
1752
+ softSelectable = _ref.softSelectable,
1753
+ scrollElement = _ref.scrollElement,
1754
+ onSoftSelectedChanged = _ref.onSoftSelectedChanged,
1755
+ component = _ref.component,
1756
+ props = defaultTheme._objectWithoutProperties(_ref, ["assets", "activeSummaryCard", "viewMode", "thumbnailMaxHeight", "selectable", "selectedAssetKeys", "onSelectedChanged", "softSelectable", "scrollElement", "onSoftSelectedChanged", "component"]);
1757
+
1758
+ var _useState = React.useState(selectedAssetKeys || []),
1759
+ _useState2 = defaultTheme._slicedToArray(_useState, 2),
1760
+ selectedAssetKeysInternalState = _useState2[0],
1761
+ setSelectedAssetKeysInternalState = _useState2[1];
1762
+
1763
+ var _useState3 = React.useState(null),
1764
+ _useState4 = defaultTheme._slicedToArray(_useState3, 2),
1765
+ softSelectedAssetKeyInternalState = _useState4[0],
1766
+ setSoftSelectedAssetKeyInternalState = _useState4[1];
1767
+
1768
+ React.useEffect(function () {
1769
+ setSelectedAssetKeysInternalState(selectedAssetKeys || []);
1770
+ }, [selectedAssetKeys]);
1771
+ React.useEffect(function () {
1772
+ setSelectedAssetKeysInternalState(function (current) {
1773
+ return current.filter(function (c) {
1774
+ return assets.some(function (a) {
1775
+ return a.key === c;
1776
+ });
1777
+ });
1778
+ });
1779
+ }, [assets.length]);
1780
+ React.useEffect(function () {
1781
+ if (selectedAssetKeys === selectedAssetKeysInternalState) return;
1782
+
1783
+ if (lodash.isFunction(onSelectedChanged)) {
1784
+ onSelectedChanged(selectedAssetKeysInternalState);
1785
+ }
1786
+ }, [selectedAssetKeysInternalState]);
1787
+ React.useEffect(function () {
1788
+ if (lodash.isFunction(onSoftSelectedChanged)) {
1789
+ onSoftSelectedChanged(softSelectedAssetKeyInternalState);
1790
+ }
1791
+ }, [softSelectedAssetKeyInternalState]);
1792
+ var onSelected = React.useCallback(function (assetKey) {
1793
+ setSelectedAssetKeysInternalState(function (currentState) {
1794
+ return [].concat(defaultTheme._toConsumableArray(currentState), [assetKey]);
1795
+ });
1796
+ }, []);
1797
+ var onUnselected = React.useCallback(function (assetKey) {
1798
+ setSelectedAssetKeysInternalState(function (currentState) {
1799
+ return currentState.filter(function (filteredAssetKey) {
1800
+ return filteredAssetKey !== assetKey;
1801
+ });
1802
+ });
1803
+ }, []);
1804
+ var onAssetSoftSelectedChanged = React.useCallback(function () {
1805
+ var assetKey = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
1806
+ setSoftSelectedAssetKeyInternalState(assetKey);
1807
+ }, []);
1808
+ return React__default['default'].createElement(AssetGalleryBase, defaultTheme._extends({
1809
+ ref: forwardedRef,
1810
+ assets: assets,
1811
+ activeSummaryCard: activeSummaryCard,
1812
+ thumbnailMaxHeight: thumbnailMaxHeight,
1813
+ selectable: selectable,
1814
+ selectedAssetKeys: selectedAssetKeysInternalState,
1815
+ onAssetSelected: onSelected,
1816
+ onAssetUnselected: onUnselected,
1817
+ softSelectable: softSelectable,
1818
+ softSelectedAssetKey: softSelectedAssetKeyInternalState,
1819
+ scrollElement: scrollElement,
1820
+ onAssetSoftSelectedChanged: onAssetSoftSelectedChanged,
1821
+ component: component,
1822
+ viewMode: viewMode
1823
+ }, props));
1824
+ });
1825
+ AssetGallery.propTypes = process.env.NODE_ENV !== "production" ? {
1826
+ assets: defaultTheme.PropTypes.arrayOf(defaultTheme.PropTypes.shape(assetShape)),
1827
+ activeSummaryCard: defaultTheme.PropTypes.bool,
1828
+ viewMode: defaultTheme.PropTypes.oneOf(['compact', 'grid']),
1829
+ thumbnailMaxHeight: defaultTheme.PropTypes.number,
1830
+ selectable: defaultTheme.PropTypes.bool,
1831
+ selectedAssetKeys: defaultTheme.PropTypes.oneOfType([defaultTheme.PropTypes.arrayOf(defaultTheme.PropTypes.string), defaultTheme.PropTypes.arrayOf(defaultTheme.PropTypes.number)]),
1832
+ onSelectedChanged: defaultTheme.PropTypes.func,
1833
+ softSelectable: defaultTheme.PropTypes.bool,
1834
+ scrollElement: defaultTheme.PropTypes.instanceOf(Element),
1835
+ onSoftSelectedChanged: defaultTheme.PropTypes.func,
1836
+ component: defaultTheme.PropTypes.func
1837
+ } : {};
1838
+ AssetGallery.defaultProps = {
1839
+ assets: [],
1840
+ viewMode: 'compact',
1841
+ thumbnailMaxHeight: 300,
1842
+ selectedAssetKeys: [],
1843
+ activeSummaryCard: false
1844
+ };
1845
+
1846
+ exports.AssetGallery = AssetGallery;
1847
+ exports.SummaryCard = SummaryCard;