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

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-06df3d6c.js → ActionButton-f150aedb.js} +5 -15
  2. package/Alert-d7863c58.js +62 -0
  3. package/AssetGallery-9dc1076e.js +1396 -0
  4. package/{AssetPreviewTopBar-c28715f7.js → AssetPreviewTopBar-d4e976ab.js} +15 -15
  5. package/Badge-fa8f327e.js +154 -0
  6. package/{Button-c38d56a0.js → Button-772b513a.js} +3 -3
  7. package/{Checkbox-68dc38a8.js → Checkbox-0cb45351.js} +1 -1
  8. package/{CompactAutocompleteSelect-43e79e21.js → CompactAutocompleteSelect-ad337fac.js} +10 -10
  9. package/{CompactStarRating-9c81ca6e.js → CompactStarRating-147445be.js} +9 -9
  10. package/{CompactTextInput-c7d0ac82.js → CompactTextInput-bb50a388.js} +22 -16
  11. package/{ContextMenu-4ec3d9f3.js → ContextMenu-8c9d90a1.js} +1 -1
  12. package/{InputGroup-49fbc423.js → InputGroup-53a44ae6.js} +1 -1
  13. package/{Instructions-ea9e5aa9.js → Instructions-ba0d244e.js} +6 -16
  14. package/{MultiLevelCheckboxSelect-c4060a73.js → MultiLevelCheckboxSelect-a16cdf3d.js} +28 -29
  15. package/{MultiSelect-4b8d3d0d.js → MultiSelect-7e865f37.js} +2 -2
  16. package/{Popover-e4ecb887.js → Popover-6fcff6de.js} +2 -2
  17. package/{Radio-32d0513a.js → Radio-a6ba38ed.js} +1 -1
  18. package/{SectionSeparator-259a22ed.js → SectionSeparator-961ec4de.js} +1 -1
  19. package/{Switch-4a41585f.js → Switch-9e68deb2.js} +1 -1
  20. package/{Tab-f499ecbc.js → Tab-3580786b.js} +1 -1
  21. package/{Tabs-c2261e7e.js → Tabs-511523e0.js} +2 -2
  22. package/{TextArea-9ddf9649.js → TextArea-7270a924.js} +30 -30
  23. package/{TextInput-0d109708.js → TextInput-97f7da4d.js} +1 -1
  24. package/{Tooltip-6b6f0b0a.js → Tooltip-5ccdfe34.js} +2 -2
  25. package/check-555d831b.js +213 -0
  26. package/data/Alert/index.js +2 -3
  27. package/data/Badge/index.js +2 -2
  28. package/data/Popover/index.js +3 -3
  29. package/data/Tab/index.js +2 -2
  30. package/data/Tabs/index.js +3 -3
  31. package/data/Tooltip/index.js +3 -3
  32. package/data/index.js +8 -10
  33. package/{defaultTheme-ea44e34a.js → defaultTheme-0dd58df6.js} +1 -1
  34. package/icons/download.svg +3 -3
  35. package/icons/play.svg +3 -3
  36. package/inputs/ActionButton/index.js +2 -3
  37. package/inputs/Button/index.js +5 -5
  38. package/inputs/Checkbox/index.js +2 -2
  39. package/inputs/CompactAutocompleteSelect/index.js +4 -3
  40. package/inputs/CompactStarRating/index.js +3 -2
  41. package/inputs/CompactTextInput/index.js +10 -10
  42. package/inputs/MultiSelect/index.js +3 -3
  43. package/inputs/Radio/index.js +2 -2
  44. package/inputs/Switch/index.js +2 -2
  45. package/inputs/TextArea/index.js +3 -2
  46. package/inputs/TextInput/index.js +2 -2
  47. package/inputs/index.js +26 -26
  48. package/layout/InputGroup/index.js +2 -2
  49. package/layout/SectionSeparator/index.js +2 -2
  50. package/layout/index.js +3 -3
  51. package/package.json +1 -1
  52. package/{react-select-creatable.esm-2f23d6c6.js → react-select-creatable.esm-4c3da560.js} +3 -3
  53. package/shift-away-subtle-3cede45b.js +9 -0
  54. package/styles/config.scss +1 -3
  55. package/widgets/AssetGallery/index.js +30 -31
  56. package/widgets/AssetPreview/AssetPreviewTopBar/index.js +2 -2
  57. package/widgets/ContextMenu/ContextMenuItem/index.js +105 -5
  58. package/widgets/ContextMenu/ContextMenuItemsGroup/index.js +1 -1
  59. package/widgets/ContextMenu/index.js +2 -2
  60. package/widgets/Instructions/index.js +6 -5
  61. package/widgets/index.js +32 -34
  62. package/Alert-13b75102.js +0 -117
  63. package/AssetGallery-d2914de2.js +0 -1847
  64. package/Badge-aec841c8.js +0 -221
  65. package/ContextMenuItem-1fe17ed5.js +0 -110
  66. package/VerificationStatusIcon-b574fd21.js +0 -106
  67. package/icons/add.svg +0 -3
  68. package/icons/album.svg +0 -3
  69. package/icons/check-rectangle-filled.svg +0 -3
  70. package/icons/corporate.svg +0 -3
  71. package/icons/index.js +0 -77
  72. package/icons/layers.svg +0 -3
  73. package/icons/shopping_cart_add.svg +0 -3
  74. package/icons/verification.svg +0 -3
  75. package/shift-away-subtle-0bed9a3c.js +0 -9
@@ -0,0 +1,1396 @@
1
+ 'use strict';
2
+
3
+ var defaultTheme = require('./defaultTheme-0dd58df6.js');
4
+ var React = require('react');
5
+ var lodash = require('lodash');
6
+ var MultiLevelCheckboxSelect = require('./MultiLevelCheckboxSelect-a16cdf3d.js');
7
+ var useMergedRefs = require('./useMergedRefs-b6d2f8fc.js');
8
+ var ResizeObserver = require('resize-observer-polyfill');
9
+ var reactLazyLoadImageComponent = require('react-lazy-load-image-component');
10
+ var ActionButton = require('./ActionButton-f150aedb.js');
11
+ require('./Button-772b513a.js');
12
+ require('./Checkbox-0cb45351.js');
13
+ require('./CompactAutocompleteSelect-ad337fac.js');
14
+ require('./CompactStarRating-147445be.js');
15
+ require('./CompactTextInput-bb50a388.js');
16
+ require('./MultiSelect-7e865f37.js');
17
+ require('./Radio-a6ba38ed.js');
18
+ require('./TextArea-7270a924.js');
19
+ require('./TextInput-97f7da4d.js');
20
+ require('./Switch-9e68deb2.js');
21
+ require('./Alert-d7863c58.js');
22
+ require('./Badge-fa8f327e.js');
23
+ require('./Popover-6fcff6de.js');
24
+ require('./Tab-3580786b.js');
25
+ require('./Tabs-511523e0.js');
26
+ var Tooltip = require('./Tooltip-5ccdfe34.js');
27
+ var styled = require('styled-components');
28
+ var polished = require('polished');
29
+ var warningCircle = require('./warning-circle-24522402.js');
30
+
31
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
32
+
33
+ function _interopNamespace(e) {
34
+ if (e && e.__esModule) return e;
35
+ var n = Object.create(null);
36
+ if (e) {
37
+ Object.keys(e).forEach(function (k) {
38
+ if (k !== 'default') {
39
+ var d = Object.getOwnPropertyDescriptor(e, k);
40
+ Object.defineProperty(n, k, d.get ? d : {
41
+ enumerable: true,
42
+ get: function () {
43
+ return e[k];
44
+ }
45
+ });
46
+ }
47
+ });
48
+ }
49
+ n['default'] = e;
50
+ return Object.freeze(n);
51
+ }
52
+
53
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
54
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
55
+ var ResizeObserver__default = /*#__PURE__*/_interopDefaultLegacy(ResizeObserver);
56
+ var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
57
+
58
+ var assetShape = {
59
+ key: defaultTheme.PropTypes.oneOfType([defaultTheme.PropTypes.string, defaultTheme.PropTypes.number]).isRequired,
60
+ previewUrl: defaultTheme.PropTypes.string,
61
+ title: defaultTheme.PropTypes.string,
62
+ note: defaultTheme.PropTypes.shape({
63
+ icon: defaultTheme.PropTypes.element,
64
+ message: defaultTheme.PropTypes.string
65
+ }),
66
+ width: defaultTheme.PropTypes.number,
67
+ height: defaultTheme.PropTypes.number,
68
+ fileType: defaultTheme.PropTypes.oneOf(['image', 'video', 'pdf', 'file', 'audio']).isRequired,
69
+ fileTypeIconPosition: defaultTheme.PropTypes.oneOf(['top-left', 'top-right']),
70
+ group: defaultTheme.PropTypes.string,
71
+ actions: defaultTheme.PropTypes.arrayOf(defaultTheme.PropTypes.shape({
72
+ title: defaultTheme.PropTypes.string.isRequired,
73
+ icon: defaultTheme.PropTypes.element.isRequired,
74
+ onClick: defaultTheme.PropTypes.func.isRequired,
75
+ className: defaultTheme.PropTypes.shape,
76
+ component: defaultTheme.PropTypes.func
77
+ })),
78
+ overlay: defaultTheme.PropTypes.element,
79
+ completed: defaultTheme.PropTypes.bool,
80
+ hasError: defaultTheme.PropTypes.bool,
81
+ disabled: defaultTheme.PropTypes.bool,
82
+ onClick: defaultTheme.PropTypes.func,
83
+ onContextMenu: defaultTheme.PropTypes.func,
84
+ onMouseEnter: defaultTheme.PropTypes.func
85
+ };
86
+ var assetShapeWithLayout = defaultTheme._objectSpread2(defaultTheme._objectSpread2({}, assetShape), {}, {
87
+ layout: defaultTheme.PropTypes.shape({
88
+ width: defaultTheme.PropTypes.number.isRequired,
89
+ height: defaultTheme.PropTypes.number.isRequired,
90
+ translateX: defaultTheme.PropTypes.number.isRequired,
91
+ translateY: defaultTheme.PropTypes.number.isRequired,
92
+ type: defaultTheme.PropTypes.oneOf(['groupLabel', 'asset']).isRequired,
93
+ hasHeightAndWidth: defaultTheme.PropTypes.bool
94
+ }).isRequired
95
+ });
96
+
97
+ 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";
98
+ defaultTheme.styleInject(css_248z);
99
+
100
+ var _templateObject$2, _templateObject2$2, _templateObject3$2, _templateObject4$1, _templateObject5$1, _templateObject6$1, _templateObject7$1, _templateObject8$1, _templateObject9$1, _templateObject10$1, _templateObject11$1, _templateObject12$1, _templateObject13$1, _templateObject14$1, _templateObject15$1, _templateObject16$1, _templateObject17$1, _templateObject18$1, _templateObject19$1, _templateObject20$1, _templateObject21, _templateObject22, _templateObject23, _templateObject24, _templateObject25, _templateObject26, _templateObject27, _templateObject28, _templateObject29, _templateObject30;
101
+ var AssetGalleryCompactCard$2 = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject$2 || (_templateObject$2 = defaultTheme._taggedTemplateLiteral(["\n display: block;\n height: 100%;\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) {
102
+ return props.theme.themeProp('background', props.theme.getColor('gray-700'), props.theme.getColor('gray-300'));
103
+ }, function (props) {
104
+ return props.disabled && styled.css(_templateObject2$2 || (_templateObject2$2 = defaultTheme._taggedTemplateLiteral(["\n pointer-events: none;\n opacity: 0.4;\n "])));
105
+ }, function (props) {
106
+ return props.extendedSelectMode && styled.css(_templateObject3$2 || (_templateObject3$2 = defaultTheme._taggedTemplateLiteral(["\n cursor: pointer;\n "])));
107
+ });
108
+ var Figure = styled__default['default'].figure(_templateObject4$1 || (_templateObject4$1 = defaultTheme._taggedTemplateLiteral(["\n margin: 0;\n width: 100%;\n height: 100%;\n\n .lazy-load-image-background {\n display: block !important;\n }\n\n img {\n display: block;\n height: 100%;\n width: 100%;\n ", "\n }\n"])), function (props) {
109
+ return props.hasHeightAndWidth ? styled.css(_templateObject5$1 || (_templateObject5$1 = defaultTheme._taggedTemplateLiteral(["\n object-fit: cover;\n "]))) : styled.css(_templateObject6$1 || (_templateObject6$1 = defaultTheme._taggedTemplateLiteral(["\n object-fit: contain;\n "])));
110
+ });
111
+ var Overlay = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject7$1 || (_templateObject7$1 = defaultTheme._taggedTemplateLiteral(["\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n"])));
112
+ var OverlayBackdrop = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject8$1 || (_templateObject8$1 = defaultTheme._taggedTemplateLiteral(["\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n opacity: 0;\n background: linear-gradient(rgba(0, 0, 0, 0.6), transparent 70%, rgba(0, 0, 0, 0.6));\n transition: opacity 220ms;\n\n ", "\n\n ", ":hover & {\n opacity: 1;\n }\n"])), function (props) {
113
+ return props.softSelected && styled.css(_templateObject9$1 || (_templateObject9$1 = defaultTheme._taggedTemplateLiteral(["\n opacity: 1;\n "])));
114
+ }, Overlay);
115
+ var OverlayInfo = 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 display: flex;\n flex-direction: column;\n justify-content: space-between;\n padding: 15px 12px 10px;\n color: ", ";\n"])), function (props) {
116
+ return props.theme.getColor('gray-100');
117
+ });
118
+ var OverlayInfoTopTitleAndFileType = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject11$1 || (_templateObject11$1 = defaultTheme._taggedTemplateLiteral(["\n display: flex;\n"])));
119
+ var OverlayInfoTopTitle = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject12$1 || (_templateObject12$1 = defaultTheme._taggedTemplateLiteral(["\n flex-grow: 1;\n font-family: ", ";\n font-weight: 400;\n line-height: 1.4;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n margin-right: 20px;\n opacity: 0;\n transition: opacity 220ms;\n\n ", "\n\n ", ":hover & {\n opacity: 1;\n }\n"])), function (props) {
120
+ return props.theme.primaryFontFamily;
121
+ }, function (props) {
122
+ return props.softSelected && styled.css(_templateObject13$1 || (_templateObject13$1 = defaultTheme._taggedTemplateLiteral(["\n opacity: 1;\n "])));
123
+ }, Overlay);
124
+ var OverlayInfoTopFileType = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject14$1 || (_templateObject14$1 = defaultTheme._taggedTemplateLiteral(["\n flex-shrink: 0;\n width: auto;\n max-width: 19px;\n max-height: 19px;\n"])));
125
+ var OverlayInfoTopNoteAndFileType = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject15$1 || (_templateObject15$1 = defaultTheme._taggedTemplateLiteral(["\n display: flex;\n"])));
126
+ var OverlayInfoTopNote = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject16$1 || (_templateObject16$1 = defaultTheme._taggedTemplateLiteral(["\n display: flex;\n padding-top: 5px;\n transform: translate3d(0, -100%, 0);\n transition: transform 250ms;\n\n svg {\n max-width: 20px;\n max-height: 20px;\n width: 100%;\n flex-shrink: 0;\n }\n\n ", ":hover && {\n ", "\n }\n"])), Overlay, function (props) {
127
+ var _props$assetTitle;
128
+
129
+ return ((_props$assetTitle = props.assetTitle) === null || _props$assetTitle === void 0 ? void 0 : _props$assetTitle.trim().length) > 0 ? styled.css(_templateObject17$1 || (_templateObject17$1 = defaultTheme._taggedTemplateLiteral(["\n transform: translate3d(0, 0, 0);\n "]))) : styled.css(_templateObject18$1 || (_templateObject18$1 = defaultTheme._taggedTemplateLiteral(["\n transform: translate3d(0, -100%, 0);\n "])));
130
+ });
131
+ var OverlayInfoTopFileTypeTopLeft = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject19$1 || (_templateObject19$1 = defaultTheme._taggedTemplateLiteral(["\n display: flex;\n padding-top: 5px;\n transform: translate3d(0, -100%, 0);\n transition: transform 250ms;\n margin-right: 5px;\n\n svg {\n max-width: 20px;\n max-height: 20px;\n width: 100%;\n flex-shrink: 0;\n }\n\n ", ":hover && {\n ", "\n }\n"])), Overlay, function (props) {
132
+ var _props$assetTitle2;
133
+
134
+ return ((_props$assetTitle2 = props.assetTitle) === null || _props$assetTitle2 === void 0 ? void 0 : _props$assetTitle2.trim().length) > 0 ? styled.css(_templateObject20$1 || (_templateObject20$1 = defaultTheme._taggedTemplateLiteral(["\n transform: translate3d(0, 0, 0);\n "]))) : styled.css(_templateObject21 || (_templateObject21 = defaultTheme._taggedTemplateLiteral(["\n transform: translate3d(0, -100%, 0);\n "])));
135
+ });
136
+ var OverlayInfoTopNoteTitle = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject22 || (_templateObject22 = defaultTheme._taggedTemplateLiteral(["\n font-family: ", ";\n font-weight: 400;\n line-height: 1.4;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n margin-left: 5px;\n opacity: 0;\n transition: opacity 250ms;\n\n ", ":hover & {\n opacity: 1;\n }\n"])), function (props) {
137
+ return props.theme.primaryFontFamily;
138
+ }, Overlay);
139
+ var OverlayCompleted$1 = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject23 || (_templateObject23 = 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: 4px solid\n ", ";\n"])), function (props) {
140
+ return !props.softSelected && polished.rgba(props.theme.getColor('emerald-500'), 0.7);
141
+ });
142
+ var OverlayHasError$1 = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject24 || (_templateObject24 = 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: 4px solid ", ";\n"])), function (props) {
143
+ return !props.softSelected && polished.rgba(props.theme.getColor('red-500'), 0.7);
144
+ });
145
+ var OverlaySelected$1 = 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 transition: border-color 120ms;\n border: 4px solid\n ", ";\n"])), function (props) {
146
+ return props.softSelected ? polished.rgba(props.theme.getColor('orange-500'), 0.5) : props.selected ? props.theme.getColor('orange-500') : 'transparent';
147
+ });
148
+ var OverlayInfoBottom = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject26 || (_templateObject26 = defaultTheme._taggedTemplateLiteral(["\n display: flex;\n"])));
149
+ var OverlayInfoBottomSelectButton = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject27 || (_templateObject27 = 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: color 120ms;\n color: ", ";\n }\n\n ", ":hover & {\n opacity: 1;\n }\n"])), function (props) {
150
+ return props.selected ? 1 : 0;
151
+ }, function (props) {
152
+ return props.selected ? props.theme.getColor('orange-500') : 'inherit';
153
+ }, Overlay);
154
+ var OverlayInfoBottomActions = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject28 || (_templateObject28 = defaultTheme._taggedTemplateLiteral(["\n display: flex;\n justify-content: space-between;\n margin-left: auto;\n opacity: 0;\n transition: opacity 220ms;\n\n ", ":hover & {\n opacity: 1;\n }\n"])), Overlay);
155
+ var ConsumerDefinedOverlay$1 = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject29 || (_templateObject29 = defaultTheme._taggedTemplateLiteral(["\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n pointer-events: none;\n"])));
156
+ var Fragment$1 = styled__default['default'].div(_templateObject30 || (_templateObject30 = defaultTheme._taggedTemplateLiteral([""])));
157
+
158
+ function _extends$5() { _extends$5 = 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$5.apply(this, arguments); }
159
+
160
+ var _ref$5 = /*#__PURE__*/React__namespace.createElement("path", {
161
+ fill: "currentColor",
162
+ d: "M12 0a12 12 0 1012 12A12 12 0 0012 0zM9.6 18l-6-6 1.69-1.69L9.6 14.6l9.11-9.1 1.69 1.7z",
163
+ fillOpacity: 0.9
164
+ });
165
+
166
+ function SvgCheckCircleFilled(props) {
167
+ return /*#__PURE__*/React__namespace.createElement("svg", _extends$5({
168
+ xmlns: "http://www.w3.org/2000/svg",
169
+ viewBox: "0 0 24 24"
170
+ }, props), _ref$5);
171
+ }
172
+
173
+ function _extends$4() { _extends$4 = 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$4.apply(this, arguments); }
174
+
175
+ var _ref$4 = /*#__PURE__*/React__namespace.createElement("path", {
176
+ fill: "currentColor",
177
+ d: "M3.43 6.24l9 5.76-9 5.76V6.24M0 0v24l18.86-12z"
178
+ });
179
+
180
+ function SvgPlay(props) {
181
+ return /*#__PURE__*/React__namespace.createElement("svg", _extends$4({
182
+ xmlns: "http://www.w3.org/2000/svg",
183
+ viewBox: "0 0 18.86 24"
184
+ }, props), _ref$4);
185
+ }
186
+
187
+ 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); }
188
+
189
+ var _ref$3 = /*#__PURE__*/React__namespace.createElement("path", {
190
+ fill: "currentColor",
191
+ d: "M21 0H3A3 3 0 00.05 2.9V21A3 3 0 003 24h18.1a3 3 0 002.95-3V3A3.11 3.11 0 0021 0zm0 21H3V3h18.1v18zm-6-6v-4.52a1.56 1.56 0 00-1.55-1.55h-3.01v7.58h2.94A1.47 1.47 0 0014.93 15zm-3-4.52h1.54V15H12zm6 3.08h1.55V12H18v-1.52h1.55V9.07h-2.94v7.58h1.55v-3.09zm-12.07 0h1.56A1.55 1.55 0 009 12v-1.52a1.56 1.56 0 00-1.51-1.55H4.4v7.58h1.54zm0-3.08h1.56V12H5.94z"
192
+ });
193
+
194
+ function SvgPdf(props) {
195
+ return /*#__PURE__*/React__namespace.createElement("svg", _extends$3({
196
+ xmlns: "http://www.w3.org/2000/svg",
197
+ viewBox: "0 0 24 24"
198
+ }, props), _ref$3);
199
+ }
200
+
201
+ 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); }
202
+
203
+ var _ref$2 = /*#__PURE__*/React__namespace.createElement("path", {
204
+ fill: "currentColor",
205
+ d: "M12 0H2.4A2.4 2.4 0 000 2.4v19.2A2.4 2.4 0 002.39 24H16.8a2.41 2.41 0 002.4-2.4V7.2zM2.4 21.6V2.4h8.4v6h6v13.2z"
206
+ });
207
+
208
+ function SvgFile(props) {
209
+ return /*#__PURE__*/React__namespace.createElement("svg", _extends$2({
210
+ xmlns: "http://www.w3.org/2000/svg",
211
+ viewBox: "0 0 19.2 24"
212
+ }, props), _ref$2);
213
+ }
214
+
215
+ 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); }
216
+
217
+ var _ref$1 = /*#__PURE__*/React__namespace.createElement("path", {
218
+ fill: "currentColor",
219
+ d: "M10 21q-1.65 0-2.825-1.175Q6 18.65 6 17q0-1.65 1.175-2.825Q8.35 13 10 13q.575 0 1.062.137.488.138.938.413V3h6v4h-4v10q0 1.65-1.175 2.825Q11.65 21 10 21z"
220
+ });
221
+
222
+ function SvgAudio(props) {
223
+ return /*#__PURE__*/React__namespace.createElement("svg", _extends$1({
224
+ xmlns: "http://www.w3.org/2000/svg",
225
+ viewBox: "0 0 18.86 24"
226
+ }, props), _ref$1);
227
+ }
228
+
229
+ 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); }
230
+
231
+ var _ref = /*#__PURE__*/React__namespace.createElement("path", {
232
+ 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"
233
+ });
234
+
235
+ function SvgHeadset(props) {
236
+ return /*#__PURE__*/React__namespace.createElement("svg", _extends({
237
+ xmlns: "http://www.w3.org/2000/svg",
238
+ fill: "currentColor",
239
+ viewBox: "0 0 24 24"
240
+ }, props), _ref);
241
+ }
242
+
243
+ var ComputedRootComponent$1 = function ComputedRootComponent(_ref) {
244
+ var component = _ref.component,
245
+ asset = _ref.asset,
246
+ props = defaultTheme._objectWithoutProperties(_ref, ["component", "asset"]);
247
+
248
+ var newProps = lodash.mapKeys(lodash.omit(props, ['theme', 'extendedSelectMode']), function (_, key) {
249
+ return key === 'innerRef' ? 'ref' : key;
250
+ });
251
+
252
+ if (component) {
253
+ if (!lodash.isFunction(component)) throw Error('Expected a function in component-prop');
254
+
255
+ if (React__default['default'].isValidElement(component(asset, newProps.children))) {
256
+ return React__default['default'].cloneElement(component(asset, newProps.children), lodash.omit(newProps, ['children']));
257
+ }
258
+ }
259
+
260
+ return React__default['default'].createElement(AssetGalleryCompactCard$2, defaultTheme._extends({
261
+ ref: newProps.ref
262
+ }, newProps));
263
+ };
264
+
265
+ var ComputedActionButton$1 = React__default['default'].forwardRef(function ComputedActionButton(_ref2, forwardedRef) {
266
+ var component = _ref2.component,
267
+ className = _ref2.className,
268
+ props = defaultTheme._objectWithoutProperties(_ref2, ["component", "className"]);
269
+
270
+ var newProps = props;
271
+ newProps.children = React__default['default'].createElement(ActionButton.ActionButton, {
272
+ ref: forwardedRef,
273
+ className: className,
274
+ icon: newProps.icon,
275
+ onClick: newProps.onClick
276
+ });
277
+
278
+ if (component) {
279
+ if (!lodash.isFunction(component)) throw Error('Expected a function in component-prop');
280
+
281
+ if (React__default['default'].isValidElement(component())) {
282
+ return React__default['default'].cloneElement(component(), defaultTheme._objectSpread2({}, lodash.omit(newProps, 'icon')));
283
+ }
284
+ }
285
+
286
+ return React__default['default'].createElement(React__default['default'].Fragment, null, newProps.children);
287
+ });
288
+
289
+ var AssetGalleryCompactCard = function AssetGalleryCompactCard(props) {
290
+ var _asset$note;
291
+
292
+ var asset = props.asset,
293
+ selectable = props.selectable,
294
+ hasHeightAndWidth = props.hasHeightAndWidth,
295
+ selected = props.selected,
296
+ extendedSelectMode = props.extendedSelectMode,
297
+ onAssetSelected = props.onAssetSelected,
298
+ onAssetUnselected = props.onAssetUnselected,
299
+ softSelected = props.softSelected,
300
+ component = props.component,
301
+ scrollPosition = props.scrollPosition;
302
+
303
+ function onClick(event) {
304
+ if (extendedSelectMode) {
305
+ return onSelectClick(event);
306
+ }
307
+
308
+ if (lodash.isFunction(asset.onClick)) {
309
+ asset.onClick(event, asset);
310
+ }
311
+ }
312
+
313
+ function onSelectClick(event) {
314
+ event.preventDefault();
315
+ event.stopPropagation();
316
+
317
+ if (selected) {
318
+ return onAssetUnselected(asset.key);
319
+ }
320
+
321
+ if (selectable) {
322
+ return onAssetSelected(asset.key);
323
+ }
324
+ }
325
+
326
+ function onActionClick(event, action) {
327
+ event.preventDefault();
328
+ event.stopPropagation();
329
+ action.onClick(asset);
330
+ }
331
+
332
+ function onContextMenu(event) {
333
+ event.preventDefault();
334
+ asset.onContextMenu(event);
335
+ }
336
+
337
+ React.useEffect(function () {
338
+ if (lodash.isFunction(asset.onContextMenu)) {
339
+ if (cardRef.current) {
340
+ cardRef.current.addEventListener('contextmenu', onContextMenu);
341
+ }
342
+
343
+ return function () {
344
+ if (cardRef.current) {
345
+ cardRef.current.removeEventListener('contextmenu', onContextMenu);
346
+ }
347
+ };
348
+ }
349
+ }, []);
350
+
351
+ function onDragstart(event) {
352
+ asset.onDragstart(event);
353
+ }
354
+
355
+ React.useEffect(function () {
356
+ if (lodash.isFunction(asset.onDragstart)) {
357
+ if (dragRef.current) {
358
+ dragRef.current.addEventListener('dragstart', onDragstart);
359
+ }
360
+
361
+ return function () {
362
+ if (dragRef.current) {
363
+ dragRef.current.removeEventListener('dragstart', onDragstart);
364
+ }
365
+ };
366
+ }
367
+ }, []);
368
+ var videoPlayerRef = React.useRef();
369
+ var cardRef = React.useRef();
370
+ var dragRef = React.useRef(null);
371
+
372
+ function onMouseEnter(event) {
373
+ event.stopPropagation();
374
+
375
+ if (videoPlayerRef.current) {
376
+ var playPromise = videoPlayerRef.current.play();
377
+
378
+ if (playPromise !== undefined) {
379
+ playPromise.then(function () {})["catch"](function () {});
380
+ }
381
+ }
382
+
383
+ if (lodash.isFunction(asset.onMouseEnter)) {
384
+ asset.onMouseEnter(event, asset);
385
+ }
386
+ }
387
+
388
+ function onMouseLeave(event) {
389
+ event.stopPropagation();
390
+
391
+ if (videoPlayerRef.current) {
392
+ videoPlayerRef.current.pause();
393
+ }
394
+ }
395
+
396
+ var typeIcon = React.useMemo(function () {
397
+ switch (asset.fileType) {
398
+ case 'video':
399
+ {
400
+ return React__default['default'].createElement(OverlayInfoTopFileType, {
401
+ as: SvgPlay
402
+ });
403
+ }
404
+
405
+ case 'pdf':
406
+ {
407
+ return React__default['default'].createElement(OverlayInfoTopFileType, {
408
+ as: SvgPdf
409
+ });
410
+ }
411
+
412
+ case 'audio':
413
+ {
414
+ return React__default['default'].createElement(OverlayInfoTopFileType, {
415
+ as: SvgAudio
416
+ });
417
+ }
418
+
419
+ case 'file':
420
+ {
421
+ return React__default['default'].createElement(OverlayInfoTopFileType, {
422
+ as: SvgFile
423
+ });
424
+ }
425
+
426
+ default:
427
+ {
428
+ return null;
429
+ }
430
+ }
431
+ }, [asset.fileType]);
432
+
433
+ var renderPreview = function renderPreview(asset) {
434
+ if (['video'].includes(asset.fileType)) {
435
+ return React__default['default'].createElement(reactLazyLoadImageComponent.LazyLoadComponent, {
436
+ scrollPosition: scrollPosition
437
+ }, React__default['default'].createElement("video", {
438
+ ref: videoPlayerRef,
439
+ loop: true,
440
+ muted: true
441
+ }, React__default['default'].createElement("source", {
442
+ src: asset.previewUrl,
443
+ type: "video/mp4"
444
+ })));
445
+ }
446
+
447
+ if (['audio'].includes(asset.fileType)) {
448
+ return React__default['default'].createElement(reactLazyLoadImageComponent.LazyLoadComponent, {
449
+ scrollPosition: scrollPosition
450
+ }, React__default['default'].createElement("div", {
451
+ className: "audio"
452
+ }, React__default['default'].createElement(SvgHeadset, null)));
453
+ }
454
+
455
+ return React__default['default'].createElement(Figure, {
456
+ hasHeightAndWidth: hasHeightAndWidth
457
+ }, React__default['default'].createElement(reactLazyLoadImageComponent.LazyLoadImage, {
458
+ alt: asset.title,
459
+ src: asset.previewUrl,
460
+ height: "100%",
461
+ width: "100%",
462
+ delayMethod: "debounce",
463
+ delayTime: 0,
464
+ threshold: 1500,
465
+ scrollPosition: scrollPosition
466
+ }));
467
+ };
468
+
469
+ React.useEffect(function () {
470
+ if (softSelected) {
471
+ cardRef.current.scrollIntoView({
472
+ behavior: 'smooth',
473
+ block: 'nearest'
474
+ });
475
+ }
476
+ }, [softSelected]);
477
+ return React__default['default'].createElement(AssetGalleryCompactCard$2, {
478
+ as: ComputedRootComponent$1,
479
+ component: component,
480
+ disabled: asset.disabled,
481
+ asset: asset,
482
+ onClick: onClick,
483
+ extendedSelectMode: extendedSelectMode,
484
+ onMouseEnter: onMouseEnter,
485
+ onMouseLeave: onMouseLeave,
486
+ draggable: asset.draggable,
487
+ innerRef: dragRef
488
+ }, asset.previewUrl && renderPreview(asset), React__default['default'].createElement(Overlay, {
489
+ ref: cardRef
490
+ }, React__default['default'].createElement(OverlayBackdrop, {
491
+ softSelected: softSelected
492
+ }), React__default['default'].createElement(OverlayInfo, null, React__default['default'].createElement("div", null, React__default['default'].createElement(OverlayInfoTopTitleAndFileType, null, React__default['default'].createElement(OverlayInfoTopTitle, {
493
+ title: asset.title,
494
+ softSelected: softSelected
495
+ }, asset.title || "\xA0"), (!asset.fileTypeIconPosition || asset.fileTypeIconPosition === 'top-right') && typeIcon), React__default['default'].createElement(OverlayInfoTopNoteAndFileType, null, asset.fileTypeIconPosition === 'top-left' && React__default['default'].createElement(OverlayInfoTopFileTypeTopLeft, {
496
+ assetTitle: asset.title
497
+ }, typeIcon), ((_asset$note = asset.note) === null || _asset$note === void 0 ? void 0 : _asset$note.title) && React__default['default'].createElement(OverlayInfoTopNote, {
498
+ title: asset.note.title,
499
+ assetTitle: asset.title
500
+ }, asset.note.icon ? asset.note.icon : React__default['default'].createElement(warningCircle.SvgWarningCircle, null), React__default['default'].createElement(OverlayInfoTopNoteTitle, null, asset.note.title)))), React__default['default'].createElement(OverlayInfoBottom, null, selectable && React__default['default'].createElement(OverlayInfoBottomSelectButton, {
501
+ selected: selected
502
+ }, React__default['default'].createElement(SvgCheckCircleFilled, {
503
+ onClick: onSelectClick
504
+ })), React__default['default'].createElement(OverlayInfoBottomActions, null, asset.actions && asset.actions.map(function (action) {
505
+ return React__default['default'].createElement(Tooltip.Tooltip, {
506
+ key: "".concat(asset.key, "-").concat(action.title),
507
+ content: action.title
508
+ }, React__default['default'].createElement(Fragment$1, {
509
+ as: ComputedActionButton$1,
510
+ component: action.component,
511
+ className: action.className,
512
+ icon: action.icon,
513
+ onClick: function onClick(event) {
514
+ return onActionClick(event, action);
515
+ }
516
+ }));
517
+ })))), asset.completed && React__default['default'].createElement(OverlayCompleted$1, {
518
+ softSelected: softSelected
519
+ }), asset.hasError && React__default['default'].createElement(OverlayHasError$1, {
520
+ softSelected: softSelected
521
+ }), selectable && React__default['default'].createElement(OverlaySelected$1, {
522
+ selected: selected,
523
+ softSelected: softSelected
524
+ })), asset.overlay && React__default['default'].createElement(ConsumerDefinedOverlay$1, null, asset.overlay));
525
+ };
526
+
527
+ AssetGalleryCompactCard.propTypes = process.env.NODE_ENV !== "production" ? {
528
+ asset: defaultTheme.PropTypes.shape(assetShapeWithLayout).isRequired,
529
+ hasHeightAndWidth: defaultTheme.PropTypes.bool.isRequired,
530
+ selectable: defaultTheme.PropTypes.bool,
531
+ selected: defaultTheme.PropTypes.bool,
532
+ extendedSelectMode: defaultTheme.PropTypes.bool,
533
+ onAssetSelected: defaultTheme.PropTypes.func.isRequired,
534
+ onAssetUnselected: defaultTheme.PropTypes.func.isRequired,
535
+ softSelected: defaultTheme.PropTypes.bool.isRequired,
536
+ component: defaultTheme.PropTypes.func,
537
+ scrollPosition: defaultTheme.PropTypes.number
538
+ } : {};
539
+ AssetGalleryCompactCard.defaultProps = {};
540
+ var AssetGalleryCompactCard$1 = reactLazyLoadImageComponent.trackWindowScroll(React__default['default'].memo(AssetGalleryCompactCard, function (prevProps, nextProps) {
541
+ var reactiveProps = ['selectable', 'selected', 'extendedSelectMode', 'softSelected', 'asset.previewUrl', 'asset.overlay', 'hasHeightAndWidth'];
542
+ return reactiveProps.every(function (propKey) {
543
+ return lodash.get(prevProps, propKey) === lodash.get(nextProps, propKey);
544
+ });
545
+ }));
546
+
547
+ var _templateObject$1, _templateObject2$1, _templateObject3$1, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14, _templateObject15, _templateObject16, _templateObject17, _templateObject18, _templateObject19, _templateObject20;
548
+ var AssetGalleryGridCard$2 = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject$1 || (_templateObject$1 = defaultTheme._taggedTemplateLiteral(["\n display: block;\n height: 100%;\n margin: 0;\n ", "\n border: 1px solid;\n ", ";\n ", ";\n ", "\n box-sizing: border-box;\n text-decoration: none;\n"])), function (props) {
549
+ return props.theme.themeProp('color', props.theme.getColor('gray-300'), props.theme.getColor('gray-700'));
550
+ }, function (props) {
551
+ return props.theme.themeProp('border-color', props.theme.getColor('gray-700'), props.theme.getColor('gray-300'));
552
+ }, function (props) {
553
+ return props.disabled && styled.css(_templateObject2$1 || (_templateObject2$1 = defaultTheme._taggedTemplateLiteral(["\n pointer-events: none;\n opacity: 0.4;\n "])));
554
+ }, function (props) {
555
+ return props.extendedSelectMode && styled.css(_templateObject3$1 || (_templateObject3$1 = defaultTheme._taggedTemplateLiteral(["\n cursor: pointer;\n "])));
556
+ });
557
+ var ContentWrapper = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject4 || (_templateObject4 = defaultTheme._taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n height: ", "px;\n"])), function (props) {
558
+ return props.layout.height;
559
+ });
560
+ var Note = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject5 || (_templateObject5 = defaultTheme._taggedTemplateLiteral(["\n display: flex;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n padding: 9px 15px 7px;\n\n svg {\n max-width: 18px;\n max-height: 18px;\n width: auto;\n flex-shrink: 0;\n }\n"])));
561
+ var NoteTitle = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject6 || (_templateObject6 = defaultTheme._taggedTemplateLiteral(["\n font-family: ", ";\n text-transform: uppercase;\n font-size: 0.875rem;\n font-weight: 400;\n line-height: 1.4;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n margin-left: 5px;\n"])), function (props) {
562
+ return props.theme.secondaryFontFamily;
563
+ });
564
+ var Asset = styled__default['default'].div(_templateObject7 || (_templateObject7 = defaultTheme._taggedTemplateLiteral(["\n padding-top: 35px;\n padding-left: 8px;\n padding-right: 8px;\n\n video {\n display: block;\n width: 100%;\n height: 200px;\n }\n\n .audio {\n display: flex;\n justify-content: center;\n height: 200px;\n svg {\n width: 25%;\n }\n }\n"])));
565
+ var AssetFigure = styled__default['default'].figure(_templateObject8 || (_templateObject8 = defaultTheme._taggedTemplateLiteral(["\n margin: 0;\n width: 100%;\n height: 200px;\n\n img {\n object-fit: contain;\n height: 100%;\n width: 100%;\n }\n"])));
566
+ var Info = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject9 || (_templateObject9 = defaultTheme._taggedTemplateLiteral(["\n font-family: ", ";\n font-size: 0.875rem;\n font-weight: 400;\n line-height: 1.7;\n padding: 15px 15px 5px;\n"])), function (props) {
567
+ return props.theme.primaryFontFamily;
568
+ });
569
+ var InfoTitle = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject10 || (_templateObject10 = defaultTheme._taggedTemplateLiteral(["\n flex-grow: 1;\n font-weight: 500;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 1;\n -webkit-box-orient: vertical;\n margin-bottom: 4px;\n"])));
570
+ var InfoFileType = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject11 || (_templateObject11 = defaultTheme._taggedTemplateLiteral(["\n flex-shrink: 0;\n width: auto;\n max-width: 18px;\n max-height: 18px;\n"])));
571
+ var InfoDescription = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject12 || (_templateObject12 = defaultTheme._taggedTemplateLiteral(["\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n"])));
572
+ var Bottom = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject13 || (_templateObject13 = defaultTheme._taggedTemplateLiteral(["\n display: flex;\n margin-top: auto;\n padding: 0 10px 10px;\n"])));
573
+ var BottomSelectButton = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject14 || (_templateObject14 = 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: color 120ms;\n color: ", ";\n }\n\n ", ":hover & {\n opacity: 1;\n }\n"])), function (props) {
574
+ return props.selected ? 1 : 0;
575
+ }, function (props) {
576
+ return props.selected ? props.theme.getColor('orange-500') : 'inherit';
577
+ }, AssetGalleryGridCard$2);
578
+ var BottomActions = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject15 || (_templateObject15 = defaultTheme._taggedTemplateLiteral(["\n display: flex;\n margin-left: auto;\n opacity: 0;\n transition: opacity 220ms;\n\n ", ":hover & {\n opacity: 1;\n }\n"])), AssetGalleryGridCard$2);
579
+ var OverlayCompleted = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject16 || (_templateObject16 = defaultTheme._taggedTemplateLiteral(["\n position: absolute;\n top: -1px;\n bottom: -1px;\n left: -1px;\n right: -1px;\n pointer-events: none;\n transition: border-color 120ms;\n border: 4px solid\n ", ";\n"])), function (props) {
580
+ return !props.softSelected && polished.rgba(props.theme.getColor('emerald-500'), 0.7);
581
+ });
582
+ var OverlayHasError = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject17 || (_templateObject17 = defaultTheme._taggedTemplateLiteral(["\n position: absolute;\n top: -1px;\n bottom: -1px;\n left: -1px;\n right: -1px;\n pointer-events: none;\n transition: border-color 120ms;\n border: 4px solid ", ";\n"])), function (props) {
583
+ return !props.softSelected && polished.rgba(props.theme.getColor('red-500'), 0.7);
584
+ });
585
+ var OverlaySelected = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject18 || (_templateObject18 = defaultTheme._taggedTemplateLiteral(["\n position: absolute;\n top: -1px;\n bottom: -1px;\n left: -1px;\n right: -1px;\n pointer-events: none;\n transition: border-color 120ms;\n border: 4px solid\n ", ";\n"])), function (props) {
586
+ return props.softSelected ? polished.rgba(props.theme.getColor('orange-500'), 0.5) : props.selected ? props.theme.getColor('orange-500') : 'transparent';
587
+ });
588
+ var ConsumerDefinedOverlay = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject19 || (_templateObject19 = defaultTheme._taggedTemplateLiteral(["\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n pointer-events: none;\n"])));
589
+ var Fragment = styled__default['default'].div(_templateObject20 || (_templateObject20 = defaultTheme._taggedTemplateLiteral([""])));
590
+
591
+ var ComputedRootComponent = function ComputedRootComponent(_ref) {
592
+ var component = _ref.component,
593
+ asset = _ref.asset,
594
+ props = defaultTheme._objectWithoutProperties(_ref, ["component", "asset"]);
595
+
596
+ var newProps = lodash.mapKeys(lodash.omit(props, ['theme', 'extendedSelectMode']), function (_, key) {
597
+ return key === 'innerRef' ? 'ref' : key;
598
+ });
599
+
600
+ if (component) {
601
+ if (!lodash.isFunction(component)) throw Error('Expected a function in component-prop');
602
+
603
+ if (React__default['default'].isValidElement(component(asset, newProps.children))) {
604
+ return React__default['default'].cloneElement(component(asset, newProps.children), lodash.omit(newProps, ['children']));
605
+ }
606
+ }
607
+
608
+ return React__default['default'].createElement(AssetGalleryGridCard$2, defaultTheme._extends({
609
+ ref: newProps.ref
610
+ }, newProps));
611
+ };
612
+
613
+ ComputedRootComponent.propTypes = process.env.NODE_ENV !== "production" ? {} : {};
614
+ var ComputedActionButton = React__default['default'].forwardRef(function ComputedActionButton(_ref2, forwardedRef) {
615
+ var component = _ref2.component,
616
+ className = _ref2.className,
617
+ props = defaultTheme._objectWithoutProperties(_ref2, ["component", "className"]);
618
+
619
+ var newProps = props;
620
+ newProps.children = React__default['default'].createElement(ActionButton.ActionButton, {
621
+ ref: forwardedRef,
622
+ className: className,
623
+ icon: newProps.icon,
624
+ onClick: newProps.onClick
625
+ });
626
+
627
+ if (component) {
628
+ if (!lodash.isFunction(component)) throw Error('Expected a function in component-prop');
629
+
630
+ if (React__default['default'].isValidElement(component())) {
631
+ return React__default['default'].cloneElement(component(), defaultTheme._objectSpread2({}, lodash.omit(newProps, 'icon')));
632
+ }
633
+ }
634
+
635
+ return React__default['default'].createElement(React__default['default'].Fragment, null, newProps.children);
636
+ });
637
+
638
+ var AssetGalleryGridCard = function AssetGalleryGridCard(props) {
639
+ var _asset$note;
640
+
641
+ var asset = props.asset,
642
+ selectable = props.selectable,
643
+ selected = props.selected,
644
+ extendedSelectMode = props.extendedSelectMode,
645
+ onAssetSelected = props.onAssetSelected,
646
+ onAssetUnselected = props.onAssetUnselected,
647
+ softSelected = props.softSelected,
648
+ component = props.component,
649
+ scrollPosition = props.scrollPosition;
650
+ var videoPlayerRef = React.useRef();
651
+ var cardRef = React.useRef();
652
+ var dragRef = React.useRef(null);
653
+
654
+ function onMouseEnter(event) {
655
+ event.stopPropagation();
656
+
657
+ if (videoPlayerRef.current) {
658
+ var playPromise = videoPlayerRef.current.play();
659
+
660
+ if (playPromise !== undefined) {
661
+ playPromise.then(function () {})["catch"](function () {});
662
+ }
663
+ }
664
+
665
+ if (lodash.isFunction(asset.onMouseEnter)) {
666
+ asset.onMouseEnter(event, asset);
667
+ }
668
+ }
669
+
670
+ function onMouseLeave(event) {
671
+ event.stopPropagation();
672
+
673
+ if (videoPlayerRef.current) {
674
+ videoPlayerRef.current.pause();
675
+ }
676
+ }
677
+
678
+ function onClick(event) {
679
+ if (extendedSelectMode) {
680
+ return onSelectClick(event);
681
+ }
682
+
683
+ if (lodash.isFunction(asset.onClick)) {
684
+ asset.onClick(event, asset);
685
+ }
686
+ }
687
+
688
+ function onSelectClick(event) {
689
+ event.preventDefault();
690
+ event.stopPropagation();
691
+
692
+ if (selected) {
693
+ return onAssetUnselected(asset.key);
694
+ }
695
+
696
+ return onAssetSelected(asset.key);
697
+ }
698
+
699
+ function onActionClick(event, action) {
700
+ event.preventDefault();
701
+ event.stopPropagation();
702
+ action.onClick(asset);
703
+ }
704
+
705
+ function onContextMenu(event) {
706
+ event.preventDefault();
707
+ asset.onContextMenu(event);
708
+ }
709
+
710
+ function renderPreview(asset) {
711
+ if (['video'].includes(asset.fileType)) {
712
+ return React__default['default'].createElement(reactLazyLoadImageComponent.LazyLoadComponent, {
713
+ scrollPosition: scrollPosition
714
+ }, React__default['default'].createElement("video", {
715
+ ref: videoPlayerRef,
716
+ loop: true,
717
+ muted: true
718
+ }, React__default['default'].createElement("source", {
719
+ src: asset.previewUrl,
720
+ type: "video/mp4"
721
+ })));
722
+ }
723
+
724
+ if (['audio'].includes(asset.fileType)) {
725
+ return React__default['default'].createElement(reactLazyLoadImageComponent.LazyLoadComponent, {
726
+ scrollPosition: scrollPosition
727
+ }, React__default['default'].createElement("div", {
728
+ className: "audio"
729
+ }, React__default['default'].createElement(SvgHeadset, null)));
730
+ }
731
+
732
+ return React__default['default'].createElement(AssetFigure, null, React__default['default'].createElement(reactLazyLoadImageComponent.LazyLoadImage, {
733
+ alt: asset.title,
734
+ src: asset.previewUrl,
735
+ height: "100%",
736
+ width: "100%",
737
+ delayMethod: "debounce",
738
+ delayTime: 0,
739
+ threshold: 1500,
740
+ scrollPosition: scrollPosition
741
+ }));
742
+ }
743
+
744
+ React.useEffect(function () {
745
+ if (lodash.isFunction(asset.onContextMenu)) {
746
+ if (cardRef.current) {
747
+ cardRef.current.addEventListener('contextmenu', onContextMenu);
748
+ }
749
+
750
+ return function () {
751
+ if (cardRef.current) {
752
+ cardRef.current.removeEventListener('contextmenu', onContextMenu);
753
+ }
754
+ };
755
+ }
756
+ }, []);
757
+
758
+ function onDragstart(event) {
759
+ asset.onDragstart(event);
760
+ }
761
+
762
+ React.useEffect(function () {
763
+ if (lodash.isFunction(asset.onDragstart)) {
764
+ if (dragRef.current) {
765
+ dragRef.current.addEventListener('dragstart', onDragstart);
766
+ }
767
+
768
+ return function () {
769
+ if (dragRef.current) {
770
+ dragRef.current.removeEventListener('dragstart', onDragstart);
771
+ }
772
+ };
773
+ }
774
+ }, []);
775
+ React.useEffect(function () {
776
+ if (softSelected) {
777
+ cardRef.current.scrollIntoView({
778
+ behavior: 'smooth',
779
+ block: 'nearest'
780
+ });
781
+ }
782
+ }, [softSelected]);
783
+ return React__default['default'].createElement(AssetGalleryGridCard$2, {
784
+ as: ComputedRootComponent,
785
+ component: component,
786
+ asset: asset,
787
+ disabled: asset.disabled,
788
+ onClick: onClick,
789
+ extendedSelectMode: extendedSelectMode,
790
+ onMouseEnter: onMouseEnter,
791
+ onMouseLeave: onMouseLeave,
792
+ draggable: asset.draggable,
793
+ innerRef: dragRef
794
+ }, React__default['default'].createElement(ContentWrapper, {
795
+ layout: asset.layout,
796
+ ref: cardRef
797
+ }, ((_asset$note = asset.note) === null || _asset$note === void 0 ? void 0 : _asset$note.title) && React__default['default'].createElement(Note, {
798
+ title: asset.note.title
799
+ }, asset.note.icon ? asset.note.icon : React__default['default'].createElement(warningCircle.SvgWarningCircle, null), React__default['default'].createElement(NoteTitle, null, asset.note.title)), React__default['default'].createElement(Asset, {
800
+ "data-id": "ss"
801
+ }, asset.previewUrl && renderPreview(asset)), React__default['default'].createElement(Info, null, React__default['default'].createElement("div", {
802
+ style: {
803
+ display: 'flex'
804
+ }
805
+ }, React__default['default'].createElement(InfoTitle, {
806
+ title: asset.title
807
+ }, asset.title || '—'), asset.fileType === 'video' && React__default['default'].createElement(InfoFileType, {
808
+ as: SvgPlay
809
+ }), asset.fileType === 'audio' && React__default['default'].createElement(InfoFileType, {
810
+ as: SvgAudio
811
+ }), asset.fileType === 'pdf' && React__default['default'].createElement(InfoFileType, {
812
+ as: SvgPdf
813
+ }), asset.fileType === 'file' && React__default['default'].createElement(InfoFileType, {
814
+ as: SvgFile
815
+ })), React__default['default'].createElement(InfoDescription, null, asset.description)), React__default['default'].createElement(Bottom, null, selectable && React__default['default'].createElement(BottomSelectButton, {
816
+ selected: selected
817
+ }, React__default['default'].createElement(SvgCheckCircleFilled, {
818
+ onClick: onSelectClick
819
+ })), React__default['default'].createElement(BottomActions, null, asset.actions && asset.actions.map(function (action) {
820
+ return React__default['default'].createElement(Tooltip.Tooltip, {
821
+ key: "".concat(asset.key, "-").concat(action.title),
822
+ content: action.title
823
+ }, React__default['default'].createElement(Fragment, {
824
+ as: ComputedActionButton,
825
+ component: action.component,
826
+ className: action.className,
827
+ icon: action.icon,
828
+ onClick: function onClick(event) {
829
+ return onActionClick(event, action);
830
+ }
831
+ }));
832
+ })))), asset.completed && React__default['default'].createElement(OverlayCompleted, {
833
+ softSelected: softSelected
834
+ }), asset.hasError && React__default['default'].createElement(OverlayHasError, {
835
+ softSelected: softSelected
836
+ }), selectable && React__default['default'].createElement(OverlaySelected, {
837
+ selected: selected,
838
+ softSelected: softSelected
839
+ }), asset.overlay && React__default['default'].createElement(ConsumerDefinedOverlay, null, asset.overlay));
840
+ };
841
+
842
+ AssetGalleryGridCard.propTypes = process.env.NODE_ENV !== "production" ? {
843
+ asset: defaultTheme.PropTypes.shape(assetShapeWithLayout).isRequired,
844
+ selectable: defaultTheme.PropTypes.bool,
845
+ selected: defaultTheme.PropTypes.bool,
846
+ extendedSelectMode: defaultTheme.PropTypes.bool,
847
+ onAssetSelected: defaultTheme.PropTypes.func.isRequired,
848
+ onAssetUnselected: defaultTheme.PropTypes.func.isRequired,
849
+ softSelected: defaultTheme.PropTypes.bool.isRequired,
850
+ component: defaultTheme.PropTypes.func,
851
+ scrollPosition: defaultTheme.PropTypes.number
852
+ } : {};
853
+ AssetGalleryGridCard.defaultProps = {};
854
+ var AssetGalleryGridCard$1 = reactLazyLoadImageComponent.trackWindowScroll(React__default['default'].memo(AssetGalleryGridCard, function (prevProps, nextProps) {
855
+ var reactiveProps = ['selectable', 'selected', 'extendedSelectMode', 'softSelected', 'asset.previewUrl', 'asset.overlay', 'asset.layout'];
856
+ return reactiveProps.every(function (propKey) {
857
+ return lodash.get(prevProps, propKey) === lodash.get(nextProps, propKey);
858
+ });
859
+ }));
860
+
861
+ var _templateObject, _templateObject2, _templateObject3;
862
+ var AssetGalleryBase$1 = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject || (_templateObject = defaultTheme._taggedTemplateLiteral(["\n position: relative;\n"])));
863
+ var GroupLabel = styled__default['default'].div.attrs(defaultTheme.applyDefaultTheme)(_templateObject2 || (_templateObject2 = defaultTheme._taggedTemplateLiteral(["\n font-family: ", ";\n ", "\n display: flex;\n align-items: flex-end;\n position: absolute;\n padding-bottom: 4px;\n box-sizing: border-box;\n"])), function (props) {
864
+ return props.theme.primaryFontFamily;
865
+ }, function (props) {
866
+ return props.theme.themeProp('color', props.theme.getColor('gray-100'), props.theme.getColor('gray-700'));
867
+ });
868
+ var AssetGalleryCardBase = styled__default['default'].div(_templateObject3 || (_templateObject3 = defaultTheme._taggedTemplateLiteral(["\n position: absolute;\n top: 0;\n left: 0;\n margin: 0;\n overflow: hidden;\n will-change: transform, width, height;\n"])));
869
+
870
+ var AssetGalleryBase = React__default['default'].forwardRef(function AssetGalleryBase(_ref, forwardedRef) {
871
+ var assetsProp = _ref.assets,
872
+ viewMode = _ref.viewMode,
873
+ thumbnailMaxHeight = _ref.thumbnailMaxHeight,
874
+ selectable = _ref.selectable,
875
+ selectedAssetKeys = _ref.selectedAssetKeys,
876
+ onAssetSelected = _ref.onAssetSelected,
877
+ onAssetUnselected = _ref.onAssetUnselected,
878
+ softSelectable = _ref.softSelectable,
879
+ softSelectedAssetKey = _ref.softSelectedAssetKey,
880
+ scrollElementProp = _ref.scrollElement,
881
+ onAssetSoftSelectedChanged = _ref.onAssetSoftSelectedChanged,
882
+ component = _ref.component,
883
+ props = defaultTheme._objectWithoutProperties(_ref, ["assets", "viewMode", "thumbnailMaxHeight", "selectable", "selectedAssetKeys", "onAssetSelected", "onAssetUnselected", "softSelectable", "softSelectedAssetKey", "scrollElement", "onAssetSoftSelectedChanged", "component"]);
884
+
885
+ var assetGalleryDOMNode = React.useRef();
886
+ var assetGalleryCompactRef = useMergedRefs.useMergedRefs(forwardedRef, assetGalleryDOMNode);
887
+ var assetGalleryWidth = React.useRef(0);
888
+ var minimumRowAspectRatio = React.useRef(0);
889
+ var calculatedAssets = React.useRef([]);
890
+
891
+ var _useState = React.useState([]),
892
+ _useState2 = defaultTheme._slicedToArray(_useState, 2),
893
+ assets = _useState2[0],
894
+ setAssets = _useState2[1];
895
+
896
+ var MAXIMUM_ROW_HEIGHT = React.useMemo(function () {
897
+ return viewMode === 'grid' ? 450 : thumbnailMaxHeight;
898
+ }, [viewMode, thumbnailMaxHeight]);
899
+ var SPACE_BETWEEN_ASSETS = 8;
900
+ var SPACE_UNDER_ASSETS = 8;
901
+ var PRIMARY_SCROLL_BUFFER_HEIGHT = 1500;
902
+ var SECONDARY_SCROLL_BUFFER_HEIGHT = 500;
903
+ var GRID_VIEW_MODE_ASSET_MIN_WIDTH = 300;
904
+ var GRID_VIEW_MODE_ASSET_HEIGHT = 403;
905
+ var MISSING_WIDTH_PLACEHOLDER = 1920;
906
+ var MISSING_HEIGHT_PLACEHOLDER = 1080;
907
+ var isBrowser = typeof window !== 'undefined';
908
+ var scrollElement = scrollElementProp || window;
909
+ var previousYOffset = React.useRef(isBrowser ? scrollElement.pageYOffset : 0);
910
+ var latestYOffset = React.useRef(isBrowser ? scrollElement.pageYOffset : 0);
911
+ var scrollDirection = React.useRef('down');
912
+ MultiLevelCheckboxSelect.useIsomorphicLayoutEffect(function () {
913
+ if (!assetGalleryDOMNode.current) return;
914
+ var throttledOnResize = lodash.throttle(onResize, 1);
915
+ var resizeObserver = new ResizeObserver__default['default'](throttledOnResize);
916
+ resizeObserver.observe(assetGalleryDOMNode.current);
917
+
918
+ function onResize(entries) {
919
+ entries.forEach(function (entry) {
920
+ if (assetGalleryWidth.current === entry.contentRect.width) return;
921
+ window.requestAnimationFrame(function () {
922
+ assetGalleryWidth.current = entry.contentRect.width;
923
+ main();
924
+ });
925
+ });
926
+ }
927
+
928
+ return function () {
929
+ resizeObserver.unobserve(assetGalleryDOMNode.current);
930
+ };
931
+ }, [assetsProp, assetGalleryDOMNode, MAXIMUM_ROW_HEIGHT]);
932
+ React.useEffect(function () {
933
+ main();
934
+ }, [MAXIMUM_ROW_HEIGHT, assetsProp]);
935
+
936
+ var main = function main() {
937
+ calculateAssetGalleryAspectRatio();
938
+ calculateLayout();
939
+ calculateVisibility();
940
+ };
941
+
942
+ var calculateAssetGalleryAspectRatio = function calculateAssetGalleryAspectRatio() {
943
+ if (assetGalleryWidth.current > 0) {
944
+ minimumRowAspectRatio.current = calculateAspectRatio(assetGalleryWidth.current, MAXIMUM_ROW_HEIGHT);
945
+ }
946
+ };
947
+
948
+ var calculateLayout = function calculateLayout() {
949
+ var assetsWithoutAKey = assetsProp.filter(function (a) {
950
+ return !a.key;
951
+ });
952
+
953
+ if (assetsWithoutAKey.length > 0) {
954
+ assetsProp = assetsProp.filter(function (a) {
955
+ return a.key;
956
+ });
957
+ assetsWithoutAKey.forEach(function (a) {
958
+ return console.warn('Omitted asset from the gallery because it was missing the unique `key` property.', a);
959
+ });
960
+ }
961
+
962
+ if (viewMode === 'grid' && assetGalleryWidth.current > 0) {
963
+ var row = [];
964
+ var translateX = 0;
965
+ var translateY = 0;
966
+ var computedAssets = [];
967
+ var lastGroup = null;
968
+ var desiredAssetCountInRow = Math.floor(assetGalleryWidth.current / GRID_VIEW_MODE_ASSET_MIN_WIDTH) || 1;
969
+ var desiredAssetWidth = assetGalleryWidth.current / desiredAssetCountInRow - SPACE_BETWEEN_ASSETS + SPACE_BETWEEN_ASSETS / desiredAssetCountInRow;
970
+ assetsProp.forEach(function (asset, index) {
971
+ var _assetsProp;
972
+
973
+ if (asset.group && asset.group !== lastGroup) {
974
+ computedAssets.push({
975
+ title: asset.group,
976
+ key: asset.key,
977
+ layout: {
978
+ type: 'groupLabel',
979
+ height: 50,
980
+ translateX: Math.round(translateX),
981
+ translateY: Math.round(translateY)
982
+ }
983
+ });
984
+ lastGroup = asset.group;
985
+ translateY += 50 + SPACE_UNDER_ASSETS;
986
+ }
987
+
988
+ row.push(asset);
989
+
990
+ if (row.length === desiredAssetCountInRow || index + 1 === assetsProp.length || (_assetsProp = assetsProp[index + 1]) !== null && _assetsProp !== void 0 && _assetsProp.group && assetsProp[index + 1].group !== asset.group) {
991
+ row.forEach(function (rowAsset) {
992
+ computedAssets.push(defaultTheme._objectSpread2(defaultTheme._objectSpread2({}, rowAsset), {}, {
993
+ layout: {
994
+ type: 'asset',
995
+ width: Math.round(desiredAssetWidth),
996
+ height: Math.round(GRID_VIEW_MODE_ASSET_HEIGHT),
997
+ translateX: Math.round(translateX),
998
+ translateY: Math.round(translateY)
999
+ }
1000
+ }));
1001
+ translateX += desiredAssetWidth + SPACE_BETWEEN_ASSETS;
1002
+ });
1003
+ row = [];
1004
+ translateX = 0;
1005
+ translateY += GRID_VIEW_MODE_ASSET_HEIGHT + SPACE_UNDER_ASSETS;
1006
+ }
1007
+ });
1008
+ calculatedAssets.current = computedAssets;
1009
+ } else {
1010
+ if (minimumRowAspectRatio.current > 0) {
1011
+ var _row = [];
1012
+ var _translateX = 0;
1013
+ var _translateY = 0;
1014
+ var rowAspectRatio = 0;
1015
+ var _lastGroup = null;
1016
+ var _computedAssets = [];
1017
+ assetsProp.forEach(function (asset, index) {
1018
+ var _assetsProp2;
1019
+
1020
+ if (asset.group && asset.group !== _lastGroup) {
1021
+ _computedAssets.push({
1022
+ title: asset.group,
1023
+ key: asset.key,
1024
+ layout: {
1025
+ type: 'groupLabel',
1026
+ height: 50,
1027
+ translateX: Math.round(_translateX),
1028
+ translateY: Math.round(_translateY)
1029
+ }
1030
+ });
1031
+
1032
+ _lastGroup = asset.group;
1033
+ _translateY += 50 + SPACE_UNDER_ASSETS;
1034
+ }
1035
+
1036
+ rowAspectRatio += calculateAspectRatio(asset.width || MISSING_WIDTH_PLACEHOLDER, asset.height || MISSING_HEIGHT_PLACEHOLDER);
1037
+
1038
+ _row.push(asset);
1039
+
1040
+ if (rowAspectRatio >= minimumRowAspectRatio.current || index + 1 === assetsProp.length || (_assetsProp2 = assetsProp[index + 1]) !== null && _assetsProp2 !== void 0 && _assetsProp2.group && assetsProp[index + 1].group !== asset.group) {
1041
+ rowAspectRatio = Math.max(rowAspectRatio, minimumRowAspectRatio.current);
1042
+ var totalDesiredWidthOfImages = assetGalleryWidth.current - SPACE_BETWEEN_ASSETS * (_row.length - 1);
1043
+ var rowHeight = totalDesiredWidthOfImages / rowAspectRatio;
1044
+
1045
+ _row.forEach(function (rowAsset) {
1046
+ var assetWidth = rowHeight * calculateAspectRatio(rowAsset.width || MISSING_WIDTH_PLACEHOLDER, rowAsset.height || MISSING_HEIGHT_PLACEHOLDER);
1047
+
1048
+ _computedAssets.push(defaultTheme._objectSpread2(defaultTheme._objectSpread2({}, rowAsset), {}, {
1049
+ layout: {
1050
+ type: 'asset',
1051
+ width: Math.round(assetWidth),
1052
+ height: Math.round(rowHeight),
1053
+ translateX: Math.round(_translateX),
1054
+ translateY: Math.round(_translateY),
1055
+ hasHeightAndWidth: Boolean(rowAsset.width && rowAsset.height)
1056
+ }
1057
+ }));
1058
+
1059
+ _translateX += assetWidth + SPACE_BETWEEN_ASSETS;
1060
+ });
1061
+
1062
+ _row = [];
1063
+ rowAspectRatio = 0;
1064
+ _translateY += rowHeight + SPACE_UNDER_ASSETS;
1065
+ _translateX = 0;
1066
+ }
1067
+ });
1068
+ calculatedAssets.current = _computedAssets;
1069
+ }
1070
+ }
1071
+ };
1072
+
1073
+ function calculateAspectRatio(width, height) {
1074
+ return width / height;
1075
+ }
1076
+
1077
+ var totalGalleryHeight = React.useMemo(function () {
1078
+ if (assets.length === 0) {
1079
+ return 0;
1080
+ }
1081
+
1082
+ var lastAsset = assets[assets.length - 1];
1083
+ return lastAsset.layout.translateY + lastAsset.layout.height;
1084
+ }, [assets]);
1085
+ React.useEffect(function () {
1086
+ var throttledOnScroll = lodash.throttle(onScroll, 200);
1087
+ scrollElement.addEventListener('scroll', throttledOnScroll, false);
1088
+ return function () {
1089
+ return scrollElement.removeEventListener('scroll', throttledOnScroll, false);
1090
+ };
1091
+ }, [assetGalleryDOMNode, calculatedAssets]);
1092
+
1093
+ function onScroll() {
1094
+ setScrollPositionAndDirection();
1095
+ calculateVisibility();
1096
+ }
1097
+
1098
+ function setScrollPositionAndDirection() {
1099
+ var newYOffset = scrollElement.pageYOffset;
1100
+ previousYOffset.current = latestYOffset.current;
1101
+ latestYOffset.current = newYOffset;
1102
+ scrollDirection.current = latestYOffset.current > previousYOffset.current ? 'down' : 'up';
1103
+ }
1104
+
1105
+ var calculateVisibility = function calculateVisibility() {
1106
+ if (!assetGalleryDOMNode.current) return;
1107
+ var bufferTop = scrollDirection.current === 'up' ? PRIMARY_SCROLL_BUFFER_HEIGHT : SECONDARY_SCROLL_BUFFER_HEIGHT;
1108
+ var bufferBottom = scrollDirection.current === 'up' ? SECONDARY_SCROLL_BUFFER_HEIGHT : PRIMARY_SCROLL_BUFFER_HEIGHT;
1109
+ var containerOffset = getOffsetTop(assetGalleryDOMNode.current);
1110
+ var scrollerHeight = scrollElement.innerHeight;
1111
+ var yOffset = latestYOffset.current;
1112
+ var minTranslateYPlusHeight = yOffset - containerOffset - bufferTop;
1113
+ var maxTranslateY = yOffset - containerOffset + scrollerHeight + bufferBottom;
1114
+ var finalizedAssets = calculatedAssets.current.map(function (asset) {
1115
+ if (scrollElement.self == window && (asset.layout.translateY + asset.layout.height < minTranslateYPlusHeight || asset.layout.translateY > maxTranslateY)) {
1116
+ asset.layout.show = false;
1117
+ } else {
1118
+ asset.layout.show = true;
1119
+ }
1120
+
1121
+ return asset;
1122
+ });
1123
+ setAssets(finalizedAssets);
1124
+ };
1125
+
1126
+ function getOffsetTop(elem) {
1127
+ var offsetTop = 0;
1128
+
1129
+ do {
1130
+ if (!isNaN(elem.offsetTop)) {
1131
+ offsetTop += elem.offsetTop;
1132
+ }
1133
+
1134
+ elem = elem.offsetParent;
1135
+ } while (elem);
1136
+
1137
+ return offsetTop;
1138
+ }
1139
+
1140
+ var handleKeyPress = React.useCallback(function (e) {
1141
+ function isElementVisible(el) {
1142
+ var rect = el.getBoundingClientRect(),
1143
+ vWidth = scrollElement.innerWidth || document.documentElement.clientWidth,
1144
+ vHeight = scrollElement.innerHeight || document.documentElement.clientHeight,
1145
+ efp = function efp(x, y) {
1146
+ return document.elementFromPoint(x, y);
1147
+ };
1148
+
1149
+ if (rect.right < 0 || rect.bottom < 0 || rect.left > vWidth || rect.top > vHeight) return false;
1150
+ 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));
1151
+ }
1152
+
1153
+ function softSelectFirstVisibleAsset() {
1154
+ var visibleAssets = assets.filter(function (asset) {
1155
+ return asset.layout.show;
1156
+ });
1157
+
1158
+ for (var i = 0; i < assetGalleryDOMNode.current.children.length; i++) {
1159
+ if (isElementVisible(assetGalleryDOMNode.current.children[i])) {
1160
+ onAssetSoftSelectedChanged(visibleAssets[i].key);
1161
+ break;
1162
+ }
1163
+ }
1164
+ }
1165
+
1166
+ if (assets.length === 0) return;
1167
+
1168
+ if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {
1169
+ if (softSelectedAssetKey === null) {
1170
+ softSelectFirstVisibleAsset();
1171
+ return;
1172
+ }
1173
+ }
1174
+
1175
+ if (e.key === 'ArrowLeft') {
1176
+ var previousAssetIndex = assets.findIndex(function (asset) {
1177
+ return asset.key === softSelectedAssetKey;
1178
+ }) - 1;
1179
+ var previousAsset = assets[previousAssetIndex];
1180
+
1181
+ if (previousAsset) {
1182
+ if (previousAsset.layout.show) {
1183
+ onAssetSoftSelectedChanged(previousAsset.key);
1184
+ } else {
1185
+ softSelectFirstVisibleAsset();
1186
+ }
1187
+ }
1188
+
1189
+ return;
1190
+ }
1191
+
1192
+ if (e.key === 'ArrowRight') {
1193
+ var nextAssetIndex = assets.findIndex(function (asset) {
1194
+ return asset.key === softSelectedAssetKey;
1195
+ }) + 1;
1196
+ var nextAsset = assets[nextAssetIndex];
1197
+
1198
+ if (nextAsset) {
1199
+ if (nextAsset.layout.show) {
1200
+ onAssetSoftSelectedChanged(nextAsset.key);
1201
+ } else {
1202
+ softSelectFirstVisibleAsset();
1203
+ }
1204
+ }
1205
+
1206
+ return;
1207
+ }
1208
+
1209
+ if (e.key === 'Enter') {
1210
+ if (softSelectedAssetKey === null) return;
1211
+
1212
+ if (selectedAssetKeys.includes(softSelectedAssetKey)) {
1213
+ onAssetUnselected(softSelectedAssetKey);
1214
+ } else {
1215
+ onAssetSelected(softSelectedAssetKey);
1216
+ }
1217
+ }
1218
+ }, [assets, softSelectedAssetKey, onAssetSoftSelectedChanged, selectedAssetKeys, assetGalleryCompactRef]);
1219
+ var handleClick = React.useCallback(function () {
1220
+ onAssetSoftSelectedChanged(null);
1221
+ }, []);
1222
+ React.useEffect(function () {
1223
+ if (softSelectable) {
1224
+ document.addEventListener('keydown', handleKeyPress);
1225
+ }
1226
+
1227
+ return function () {
1228
+ return document.removeEventListener('keydown', handleKeyPress);
1229
+ };
1230
+ }, [softSelectable, handleKeyPress]);
1231
+ React.useEffect(function () {
1232
+ if (softSelectable && softSelectedAssetKey !== null) {
1233
+ document.addEventListener('click', handleClick, true);
1234
+ }
1235
+
1236
+ return function () {
1237
+ return document.removeEventListener('click', handleClick, true);
1238
+ };
1239
+ }, [softSelectable, softSelectedAssetKey, handleClick]);
1240
+ return React__default['default'].createElement(React__default['default'].Fragment, null, React__default['default'].createElement(AssetGalleryBase$1, defaultTheme._extends({
1241
+ ref: assetGalleryCompactRef,
1242
+ style: {
1243
+ height: "".concat(totalGalleryHeight, "px")
1244
+ },
1245
+ className: props.className
1246
+ }, props), assets.map(function (asset) {
1247
+ return asset.layout.show && React__default['default'].createElement(React__default['default'].Fragment, {
1248
+ key: "asset-gallery-".concat(asset.layout.type, "-").concat(asset.key)
1249
+ }, asset.layout.type === 'groupLabel' && React__default['default'].createElement(GroupLabel, {
1250
+ style: {
1251
+ transform: "translate3d(".concat(asset.layout.translateX, "px,").concat(asset.layout.translateY, "px, 0)"),
1252
+ height: "".concat(asset.layout.height, "px")
1253
+ }
1254
+ }, asset.title), asset.layout.type === 'asset' && React__default['default'].createElement(AssetGalleryCardBase, {
1255
+ style: {
1256
+ transform: "translate3d(".concat(asset.layout.translateX, "px, ").concat(asset.layout.translateY, "px, 0)"),
1257
+ width: "".concat(asset.layout.width, "px"),
1258
+ height: "".concat(asset.layout.height, "px")
1259
+ }
1260
+ }, viewMode === 'grid' ? React__default['default'].createElement(AssetGalleryGridCard$1, {
1261
+ asset: asset,
1262
+ selectable: 'selectable' in asset ? asset.selectable : selectable,
1263
+ selected: selectedAssetKeys.includes(asset.key),
1264
+ extendedSelectMode: Boolean(selectedAssetKeys.length),
1265
+ onAssetSelected: onAssetSelected,
1266
+ onAssetUnselected: onAssetUnselected,
1267
+ softSelected: softSelectedAssetKey === asset.key,
1268
+ component: component
1269
+ }) : React__default['default'].createElement(AssetGalleryCompactCard$1, {
1270
+ asset: asset,
1271
+ hasHeightAndWidth: asset.layout.hasHeightAndWidth,
1272
+ selectable: 'selectable' in asset ? asset.selectable : selectable,
1273
+ selected: selectedAssetKeys.includes(asset.key),
1274
+ extendedSelectMode: Boolean(selectedAssetKeys.length),
1275
+ onAssetSelected: onAssetSelected,
1276
+ onAssetUnselected: onAssetUnselected,
1277
+ softSelected: softSelectedAssetKey === asset.key,
1278
+ component: component
1279
+ })));
1280
+ })));
1281
+ });
1282
+ AssetGalleryBase.propTypes = process.env.NODE_ENV !== "production" ? {
1283
+ assets: defaultTheme.PropTypes.arrayOf(defaultTheme.PropTypes.shape(assetShape)),
1284
+ viewMode: defaultTheme.PropTypes.oneOf(['compact', 'grid']),
1285
+ thumbnailMaxHeight: defaultTheme.PropTypes.number,
1286
+ selectable: defaultTheme.PropTypes.bool,
1287
+ selectedAssetKeys: defaultTheme.PropTypes.oneOfType([defaultTheme.PropTypes.arrayOf(defaultTheme.PropTypes.string), defaultTheme.PropTypes.arrayOf(defaultTheme.PropTypes.number)]).isRequired,
1288
+ scrollElement: defaultTheme.PropTypes.instanceOf(Element),
1289
+ onAssetSelected: defaultTheme.PropTypes.func.isRequired,
1290
+ onAssetUnselected: defaultTheme.PropTypes.func.isRequired,
1291
+ softSelectable: defaultTheme.PropTypes.bool,
1292
+ softSelectedAssetKey: defaultTheme.PropTypes.oneOfType([defaultTheme.PropTypes.string, defaultTheme.PropTypes.number]),
1293
+ onAssetSoftSelectedChanged: defaultTheme.PropTypes.func.isRequired,
1294
+ component: defaultTheme.PropTypes.func,
1295
+ className: defaultTheme.PropTypes.string
1296
+ } : {};
1297
+
1298
+ var AssetGallery = React__default['default'].forwardRef(function AssetGallery(_ref, forwardedRef) {
1299
+ var assets = _ref.assets,
1300
+ viewMode = _ref.viewMode,
1301
+ thumbnailMaxHeight = _ref.thumbnailMaxHeight,
1302
+ selectable = _ref.selectable,
1303
+ selectedAssetKeys = _ref.selectedAssetKeys,
1304
+ onSelectedChanged = _ref.onSelectedChanged,
1305
+ softSelectable = _ref.softSelectable,
1306
+ scrollElement = _ref.scrollElement,
1307
+ onSoftSelectedChanged = _ref.onSoftSelectedChanged,
1308
+ component = _ref.component,
1309
+ props = defaultTheme._objectWithoutProperties(_ref, ["assets", "viewMode", "thumbnailMaxHeight", "selectable", "selectedAssetKeys", "onSelectedChanged", "softSelectable", "scrollElement", "onSoftSelectedChanged", "component"]);
1310
+
1311
+ var _useState = React.useState(selectedAssetKeys || []),
1312
+ _useState2 = defaultTheme._slicedToArray(_useState, 2),
1313
+ selectedAssetKeysInternalState = _useState2[0],
1314
+ setSelectedAssetKeysInternalState = _useState2[1];
1315
+
1316
+ var _useState3 = React.useState(null),
1317
+ _useState4 = defaultTheme._slicedToArray(_useState3, 2),
1318
+ softSelectedAssetKeyInternalState = _useState4[0],
1319
+ setSoftSelectedAssetKeyInternalState = _useState4[1];
1320
+
1321
+ React.useEffect(function () {
1322
+ setSelectedAssetKeysInternalState(selectedAssetKeys || []);
1323
+ }, [selectedAssetKeys]);
1324
+ React.useEffect(function () {
1325
+ setSelectedAssetKeysInternalState(function (current) {
1326
+ return current.filter(function (c) {
1327
+ return assets.some(function (a) {
1328
+ return a.key === c;
1329
+ });
1330
+ });
1331
+ });
1332
+ }, [assets.length]);
1333
+ React.useEffect(function () {
1334
+ if (selectedAssetKeys === selectedAssetKeysInternalState) return;
1335
+
1336
+ if (lodash.isFunction(onSelectedChanged)) {
1337
+ onSelectedChanged(selectedAssetKeysInternalState);
1338
+ }
1339
+ }, [selectedAssetKeysInternalState]);
1340
+ React.useEffect(function () {
1341
+ if (lodash.isFunction(onSoftSelectedChanged)) {
1342
+ onSoftSelectedChanged(softSelectedAssetKeyInternalState);
1343
+ }
1344
+ }, [softSelectedAssetKeyInternalState]);
1345
+ var onSelected = React.useCallback(function (assetKey) {
1346
+ setSelectedAssetKeysInternalState(function (currentState) {
1347
+ return [].concat(defaultTheme._toConsumableArray(currentState), [assetKey]);
1348
+ });
1349
+ }, []);
1350
+ var onUnselected = React.useCallback(function (assetKey) {
1351
+ setSelectedAssetKeysInternalState(function (currentState) {
1352
+ return currentState.filter(function (filteredAssetKey) {
1353
+ return filteredAssetKey !== assetKey;
1354
+ });
1355
+ });
1356
+ }, []);
1357
+ var onAssetSoftSelectedChanged = React.useCallback(function () {
1358
+ var assetKey = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
1359
+ setSoftSelectedAssetKeyInternalState(assetKey);
1360
+ }, []);
1361
+ return React__default['default'].createElement(AssetGalleryBase, defaultTheme._extends({
1362
+ ref: forwardedRef,
1363
+ assets: assets,
1364
+ thumbnailMaxHeight: thumbnailMaxHeight,
1365
+ selectable: selectable,
1366
+ selectedAssetKeys: selectedAssetKeysInternalState,
1367
+ onAssetSelected: onSelected,
1368
+ onAssetUnselected: onUnselected,
1369
+ softSelectable: softSelectable,
1370
+ softSelectedAssetKey: softSelectedAssetKeyInternalState,
1371
+ scrollElement: scrollElement,
1372
+ onAssetSoftSelectedChanged: onAssetSoftSelectedChanged,
1373
+ component: component,
1374
+ viewMode: viewMode
1375
+ }, props));
1376
+ });
1377
+ AssetGallery.propTypes = process.env.NODE_ENV !== "production" ? {
1378
+ assets: defaultTheme.PropTypes.arrayOf(defaultTheme.PropTypes.shape(assetShape)),
1379
+ viewMode: defaultTheme.PropTypes.oneOf(['compact', 'grid']),
1380
+ thumbnailMaxHeight: defaultTheme.PropTypes.number,
1381
+ selectable: defaultTheme.PropTypes.bool,
1382
+ selectedAssetKeys: defaultTheme.PropTypes.oneOfType([defaultTheme.PropTypes.arrayOf(defaultTheme.PropTypes.string), defaultTheme.PropTypes.arrayOf(defaultTheme.PropTypes.number)]),
1383
+ onSelectedChanged: defaultTheme.PropTypes.func,
1384
+ softSelectable: defaultTheme.PropTypes.bool,
1385
+ scrollElement: defaultTheme.PropTypes.instanceOf(Element),
1386
+ onSoftSelectedChanged: defaultTheme.PropTypes.func,
1387
+ component: defaultTheme.PropTypes.func
1388
+ } : {};
1389
+ AssetGallery.defaultProps = {
1390
+ assets: [],
1391
+ viewMode: 'compact',
1392
+ thumbnailMaxHeight: 300,
1393
+ selectedAssetKeys: []
1394
+ };
1395
+
1396
+ exports.AssetGallery = AssetGallery;