@ntbjs/react-components 2.0.0-rc.27 → 2.0.0-rc.28

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.
@@ -1,2356 +1,45 @@
1
- import { _ as _extends$4 } from '../../_rollupPluginBabelHelpers-c245b26a.js';
2
- import { isFunction, get, mapKeys, omit, isEmpty, throttle } from 'lodash';
3
- import { P as PropTypes, a as applyDefaultTheme, s as styleInject } from '../../defaultTheme-1bcc2541.js';
4
- import * as React from 'react';
5
- import React__default, { useRef, useState, useCallback, useEffect, useMemo } from 'react';
6
- import useMergedRefs from '@restart/hooks/useMergedRefs';
7
- import ResizeObserver from 'resize-observer-polyfill';
8
- import { u as useIsomorphicLayoutEffect } from '../../MultiLevelCheckboxSelect-d8044c88.js';
9
- import styled, { css } from 'styled-components';
10
- import { S as SvgWarningCircle } from '../../warning-circle-24f3efcd.js';
11
- import { A as Alert } from '../../Alert-e6847a22.js';
12
- import { B as Badge } from '../../Badge-d93586a9.js';
13
- import { P as Popover } from '../../Popover-20050b91.js';
1
+ import '../../_rollupPluginBabelHelpers-c245b26a.js';
2
+ import 'lodash';
3
+ import '../../defaultTheme-1bcc2541.js';
4
+ import 'react';
5
+ export { A as default } from '../../AssetGallery-f67393d4.js';
6
+ import 'styled-components';
7
+ import '@restart/hooks/useMergedRefs';
8
+ import 'resize-observer-polyfill';
9
+ import '../../MultiLevelCheckboxSelect-d8044c88.js';
10
+ import '../../Alert-e6847a22.js';
11
+ import '../../Badge-d93586a9.js';
12
+ import '../../Popover-20050b91.js';
13
+ import 'polished';
14
+ import '@tippyjs/react';
15
+ import '../../shift-away-subtle-0dd94a03.js';
16
+ import 'popper-max-size-modifier';
14
17
  import '../../Tab-04d435c3.js';
15
18
  import '../../Tabs-74d1ea8a.js';
16
- import { T as Tooltip } from '../../Tooltip-c1d1199e.js';
19
+ import '../../Tooltip-c1d1199e.js';
17
20
  import '../../VerificationStatusIcon-49cb1c1b.js';
18
- import { FloatingArrow, useFloating, autoUpdate, offset, flip, shift, arrow, useTransitionStyles, useHover, useDismiss, useInteractions, useMergeRefs } from '@floating-ui/react';
19
- import { rgba } from 'polished';
20
- import { A as ActionButton } from '../../ActionButton-4db754c3.js';
21
- import '../../Button-179a2fe4.js';
22
21
  import '../../Checkbox-4a5fd716.js';
23
- import '../../CompactAutocompleteSelect-52c49513.js';
24
- import '../../CompactStarRating-9af2f427.js';
25
- import '../../CompactTextInput-42ca5d42.js';
26
- import '../../MultiSelect-9f497e62.js';
27
- import '../../Radio-73ca3ae2.js';
28
- import '../../TextArea-1e5b9201.js';
22
+ import 'nanoid';
29
23
  import '../../TextInput-fab35842.js';
30
- import '../../Switch-ecf3122b.js';
31
- import ContextMenu from '../ContextMenu/ContextMenu.js';
32
- import ContextMenuItem from '../ContextMenu/ContextMenuItem/ContextMenuItem.js';
24
+ import '../../edit-note-283a0e15.js';
33
25
  import '../../InputGroup-1294d190.js';
34
26
  import '../../SectionSeparator-f47760a2.js';
35
27
  import '../../close-a5d37608.js';
36
28
  import '@restart/hooks/useUpdateEffect';
37
- import '@tippyjs/react';
38
- import '../../shift-away-subtle-0dd94a03.js';
39
- import 'popper-max-size-modifier';
29
+ import '../../warning-circle-24f3efcd.js';
30
+ import '@floating-ui/react';
31
+ import '../../ActionButton-4db754c3.js';
32
+ import '../../Button-179a2fe4.js';
33
+ import '../ContextMenu/ContextMenu.js';
40
34
  import '../../expand-more-c5523c46.js';
41
- import 'nanoid';
35
+ import '../../CompactAutocompleteSelect-52c49513.js';
42
36
  import 'react-select';
43
37
  import 'react-select-async-paginate';
44
38
  import 'react-select/creatable';
45
- import '../../edit-note-283a0e15.js';
46
-
47
- var _path$3;
48
- function _extends$3() { return _extends$3 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$3.apply(null, arguments); }
49
- function SvgCheckRectangleFilled(props) {
50
- return /*#__PURE__*/React.createElement("svg", _extends$3({
51
- xmlns: "http://www.w3.org/2000/svg",
52
- viewBox: "0 0 24 24"
53
- }, props), _path$3 || (_path$3 = /*#__PURE__*/React.createElement("path", {
54
- fill: "currentColor",
55
- 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"
56
- })));
57
- }
58
-
59
- var _path$2;
60
- function _extends$2() { return _extends$2 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$2.apply(null, arguments); }
61
- function SvgHeadset(props) {
62
- return /*#__PURE__*/React.createElement("svg", _extends$2({
63
- xmlns: "http://www.w3.org/2000/svg",
64
- fill: "currentColor",
65
- viewBox: "0 0 24 24"
66
- }, props), _path$2 || (_path$2 = /*#__PURE__*/React.createElement("path", {
67
- 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"
68
- })));
69
- }
70
-
71
- var _path$1;
72
- function _extends$1() { return _extends$1 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$1.apply(null, arguments); }
73
- function SvgLayers(props) {
74
- return /*#__PURE__*/React.createElement("svg", _extends$1({
75
- xmlns: "http://www.w3.org/2000/svg",
76
- viewBox: "-1 0 24 24"
77
- }, props), _path$1 || (_path$1 = /*#__PURE__*/React.createElement("path", {
78
- fill: "currentColor",
79
- 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"
80
- })));
81
- }
82
-
83
- var _path;
84
- function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
85
- function SvgPlay(props) {
86
- return /*#__PURE__*/React.createElement("svg", _extends({
87
- xmlns: "http://www.w3.org/2000/svg",
88
- viewBox: "-3 -0.25 24 24"
89
- }, props), _path || (_path = /*#__PURE__*/React.createElement("path", {
90
- fill: "currentColor",
91
- d: "M0 23.52V0l18.48 11.76L0 23.52z"
92
- })));
93
- }
94
-
95
- const assetShape = {
96
- key: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
97
- previewUrl: PropTypes.string,
98
- title: PropTypes.string,
99
- note: PropTypes.shape({
100
- icon: PropTypes.element,
101
- message: PropTypes.string
102
- }),
103
- width: PropTypes.number,
104
- height: PropTypes.number,
105
- fileType: PropTypes.oneOf(['image', 'video', 'pdf', 'file', 'audio']).isRequired,
106
- fileTypeIconPosition: PropTypes.oneOf(['top-left', 'top-right']),
107
- group: PropTypes.string,
108
- actions: PropTypes.arrayOf(PropTypes.shape({
109
- title: PropTypes.string.isRequired,
110
- icon: PropTypes.element.isRequired,
111
- onClick: PropTypes.func.isRequired,
112
- className: PropTypes.shape,
113
- component: PropTypes.func
114
- })),
115
- overlay: PropTypes.element,
116
- completed: PropTypes.bool,
117
- hasError: PropTypes.bool,
118
- disabled: PropTypes.bool,
119
- onClick: PropTypes.func,
120
- onContextMenu: PropTypes.func,
121
- onMouseEnter: PropTypes.func,
122
- summary: PropTypes.shape({
123
- title: PropTypes.string,
124
- description: PropTypes.string,
125
- instructions: PropTypes.string,
126
- instructionsType: PropTypes.oneOf(['warning', 'error', 'info']),
127
- headerLeft: PropTypes.node,
128
- headerRight: PropTypes.node,
129
- footerLeft: PropTypes.node,
130
- footerRight: PropTypes.node
131
- })
132
- };
133
- const assetShapeWithLayout = {
134
- ...assetShape,
135
- layout: PropTypes.shape({
136
- width: PropTypes.number.isRequired,
137
- height: PropTypes.number.isRequired,
138
- translateX: PropTypes.number.isRequired,
139
- translateY: PropTypes.number.isRequired,
140
- type: PropTypes.oneOf(['groupLabel', 'asset']).isRequired,
141
- hasHeightAndWidth: PropTypes.bool
142
- }).isRequired
143
- };
144
-
145
- const AssetGalleryBase$1 = styled.div.attrs(applyDefaultTheme)`
146
- position: relative;
147
- `;
148
- const GroupLabel = styled.div.attrs(applyDefaultTheme)`
149
- font-family: ${props => props.theme.primaryFontFamily};
150
- ${props => props.theme.themeProp('color', props.theme.getColor('gray-100'), props.theme.getColor('gray-700'))}
151
- display: flex;
152
- align-items: flex-end;
153
- position: absolute;
154
- padding-bottom: 4px;
155
- box-sizing: border-box;
156
- `;
157
- const AssetGalleryCardBase = styled.div.attrs(applyDefaultTheme)`
158
- position: absolute;
159
- top: 0;
160
- left: 0;
161
- margin: 0;
162
- z-index: 1;
163
- will-change: transform, width, height;
164
-
165
- &:hover {
166
- z-index: 2;
167
- }
168
- `;
169
-
170
- var build = {exports: {}};
171
-
172
- (()=>{var e={296:(e,t,r)=>{var o=/^\s+|\s+$/g,n=/^[-+]0x[0-9a-f]+$/i,i=/^0b[01]+$/i,c=/^0o[0-7]+$/i,u=parseInt,s="object"==typeof r.g&&r.g&&r.g.Object===Object&&r.g,l="object"==typeof self&&self&&self.Object===Object&&self,a=s||l||Function("return this")(),f=Object.prototype.toString,p=Math.max,y=Math.min,b=function(){return a.Date.now()};function d(e){var t=typeof e;return !!e&&("object"==t||"function"==t)}function h(e){if("number"==typeof e)return e;if(function(e){return "symbol"==typeof e||function(e){return !!e&&"object"==typeof e}(e)&&"[object Symbol]"==f.call(e)}(e))return NaN;if(d(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=d(t)?t+"":t;}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(o,"");var r=i.test(e);return r||c.test(e)?u(e.slice(2),r?2:8):n.test(e)?NaN:+e}e.exports=function(e,t,r){var o,n,i,c,u,s,l=0,a=!1,f=!1,v=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function m(t){var r=o,i=n;return o=n=void 0,l=t,c=e.apply(i,r)}function O(e){var r=e-s;return void 0===s||r>=t||r<0||f&&e-l>=i}function w(){var e=b();if(O(e))return g(e);u=setTimeout(w,function(e){var r=t-(e-s);return f?y(r,i-(e-l)):r}(e));}function g(e){return u=void 0,v&&o?m(e):(o=n=void 0,c)}function P(){var e=b(),r=O(e);if(o=arguments,n=this,s=e,r){if(void 0===u)return function(e){return l=e,u=setTimeout(w,t),a?m(e):c}(s);if(f)return u=setTimeout(w,t),m(s)}return void 0===u&&(u=setTimeout(w,t)),c}return t=h(t)||0,d(r)&&(a=!!r.leading,i=(f="maxWait"in r)?p(h(r.maxWait)||0,t):i,v="trailing"in r?!!r.trailing:v),P.cancel=function(){void 0!==u&&clearTimeout(u),l=0,o=s=n=u=void 0;},P.flush=function(){return void 0===u?c:g(b())},P};},96:(e,t,r)=>{var o="Expected a function",n=NaN,i="[object Symbol]",c=/^\s+|\s+$/g,u=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,l=/^0o[0-7]+$/i,a=parseInt,f="object"==typeof r.g&&r.g&&r.g.Object===Object&&r.g,p="object"==typeof self&&self&&self.Object===Object&&self,y=f||p||Function("return this")(),b=Object.prototype.toString,d=Math.max,h=Math.min,v=function(){return y.Date.now()};function m(e){var t=typeof e;return !!e&&("object"==t||"function"==t)}function O(e){if("number"==typeof e)return e;if(function(e){return "symbol"==typeof e||function(e){return !!e&&"object"==typeof e}(e)&&b.call(e)==i}(e))return n;if(m(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=m(t)?t+"":t;}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(c,"");var r=s.test(e);return r||l.test(e)?a(e.slice(2),r?2:8):u.test(e)?n:+e}e.exports=function(e,t,r){var n=!0,i=!0;if("function"!=typeof e)throw new TypeError(o);return m(r)&&(n="leading"in r?!!r.leading:n,i="trailing"in r?!!r.trailing:i),function(e,t,r){var n,i,c,u,s,l,a=0,f=!1,p=!1,y=!0;if("function"!=typeof e)throw new TypeError(o);function b(t){var r=n,o=i;return n=i=void 0,a=t,u=e.apply(o,r)}function w(e){var r=e-l;return void 0===l||r>=t||r<0||p&&e-a>=c}function g(){var e=v();if(w(e))return P(e);s=setTimeout(g,function(e){var r=t-(e-l);return p?h(r,c-(e-a)):r}(e));}function P(e){return s=void 0,y&&n?b(e):(n=i=void 0,u)}function j(){var e=v(),r=w(e);if(n=arguments,i=this,l=e,r){if(void 0===s)return function(e){return a=e,s=setTimeout(g,t),f?b(e):u}(l);if(p)return s=setTimeout(g,t),b(l)}return void 0===s&&(s=setTimeout(g,t)),u}return t=O(t)||0,m(r)&&(f=!!r.leading,c=(p="maxWait"in r)?d(O(r.maxWait)||0,t):c,y="trailing"in r?!!r.trailing:y),j.cancel=function(){void 0!==s&&clearTimeout(s),a=0,n=l=i=s=void 0;},j.flush=function(){return void 0===s?u:P(v())},j}(e,t,{leading:n,maxWait:t,trailing:i})};},703:(e,t,r)=>{var o=r(414);function n(){}function i(){}i.resetWarningCache=n,e.exports=function(){function e(e,t,r,n,i,c){if(c!==o){var u=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}function t(){return e}e.isRequired=e;var r={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:n};return r.PropTypes=r,r};},697:(e,t,r)=>{e.exports=r(703)();},414:e=>{e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";}},t={};function r(o){var n=t[o];if(void 0!==n)return n.exports;var i=t[o]={exports:{}};return e[o](i,i.exports,r),i.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]});},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0});};var o={};(()=>{r.r(o),r.d(o,{LazyLoadComponent:()=>Y,LazyLoadImage:()=>ne,trackWindowScroll:()=>D});const e=React__default;var t=r.n(e),n=r(697);function i(){return "undefined"!=typeof window&&"IntersectionObserver"in window&&"isIntersecting"in window.IntersectionObserverEntry.prototype}function c(e){return c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c(e)}function u(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o);}return r}function s(e,t,r){return (t=a(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){for(var r=0;r<t.length;r++){var o=t[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,a(o.key),o);}}function a(e){var t=function(e,t){if("object"!==c(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,"string");if("object"!==c(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return "symbol"===c(t)?t:String(t)}function f(e,t){return f=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},f(e,t)}function p(e){return p=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},p(e)}var y=function(e){e.forEach((function(e){e.isIntersecting&&e.target.onVisible();}));},b={},d=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&f(e,t);}(h,e);var r,o,n,a,d=(n=h,a=function(){if("undefined"==typeof Reflect||!Reflect.construct)return !1;if(Reflect.construct.sham)return !1;if("function"==typeof Proxy)return !0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return !1}}(),function(){var e,t=p(n);if(a){var r=p(this).constructor;e=Reflect.construct(t,arguments,r);}else e=t.apply(this,arguments);return function(e,t){if(t&&("object"===c(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,e)});function h(e){var t;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,h),(t=d.call(this,e)).supportsObserver=!e.scrollPosition&&e.useIntersectionObserver&&i(),t.supportsObserver){var r=e.threshold;t.observer=function(e){return b[e]=b[e]||new IntersectionObserver(y,{rootMargin:e+"px"}),b[e]}(r);}return t}return r=h,o=[{key:"componentDidMount",value:function(){this.placeholder&&this.observer&&(this.placeholder.onVisible=this.props.onVisible,this.observer.observe(this.placeholder)),this.supportsObserver||this.updateVisibility();}},{key:"componentWillUnmount",value:function(){this.observer&&this.placeholder&&this.observer.unobserve(this.placeholder);}},{key:"componentDidUpdate",value:function(){this.supportsObserver||this.updateVisibility();}},{key:"getPlaceholderBoundingBox",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.props.scrollPosition,t=this.placeholder.getBoundingClientRect(),r=this.placeholder.style,o=parseInt(r.getPropertyValue("margin-left"),10)||0,n=parseInt(r.getPropertyValue("margin-top"),10)||0;return {bottom:e.y+t.bottom+n,left:e.x+t.left+o,right:e.x+t.right+o,top:e.y+t.top+n}}},{key:"isPlaceholderInViewport",value:function(){if("undefined"==typeof window||!this.placeholder)return !1;var e=this.props,t=e.scrollPosition,r=e.threshold,o=this.getPlaceholderBoundingBox(t),n=t.y+window.innerHeight,i=t.x,c=t.x+window.innerWidth,u=t.y;return Boolean(u-r<=o.bottom&&n+r>=o.top&&i-r<=o.right&&c+r>=o.left)}},{key:"updateVisibility",value:function(){this.isPlaceholderInViewport()&&this.props.onVisible();}},{key:"render",value:function(){var e=this,r=this.props,o=r.className,n=r.height,i=r.placeholder,c=r.style,l=r.width;if(i&&"function"!=typeof i.type)return t().cloneElement(i,{ref:function(t){return e.placeholder=t}});var a=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?u(Object(r),!0).forEach((function(t){s(e,t,r[t]);})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):u(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t));}));}return e}({display:"inline-block"},c);return void 0!==l&&(a.width=l),void 0!==n&&(a.height=n),t().createElement("span",{className:o,ref:function(t){return e.placeholder=t},style:a},i)}}],o&&l(r.prototype,o),Object.defineProperty(r,"prototype",{writable:!1}),h}(t().Component);d.propTypes={onVisible:n.PropTypes.func.isRequired,className:n.PropTypes.string,height:n.PropTypes.oneOfType([n.PropTypes.number,n.PropTypes.string]),placeholder:n.PropTypes.element,threshold:n.PropTypes.number,useIntersectionObserver:n.PropTypes.bool,scrollPosition:n.PropTypes.shape({x:n.PropTypes.number.isRequired,y:n.PropTypes.number.isRequired}),width:n.PropTypes.oneOfType([n.PropTypes.number,n.PropTypes.string])},d.defaultProps={className:"",placeholder:null,threshold:100,useIntersectionObserver:!0};const h=d;var v=r(296),m=r.n(v),O=r(96),w=r.n(O),g=function(e){var t=getComputedStyle(e,null);return t.getPropertyValue("overflow")+t.getPropertyValue("overflow-y")+t.getPropertyValue("overflow-x")};const P=function(e){if(!(e instanceof HTMLElement))return window;for(var t=e;t&&t instanceof HTMLElement;){if(/(scroll|auto)/.test(g(t)))return t;t=t.parentNode;}return window};function j(e){return j="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},j(e)}var T=["delayMethod","delayTime"];function S(){return S=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o]);}return e},S.apply(this,arguments)}function E(e,t){for(var r=0;r<t.length;r++){var o=t[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,(n=function(e,t){if("object"!==j(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,"string");if("object"!==j(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(o.key),"symbol"===j(n)?n:String(n)),o);}var n;}function L(e,t){return L=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},L(e,t)}function _(e,t){if(t&&("object"===j(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return I(e)}function I(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function x(e){return x=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},x(e)}var R=function(){return "undefined"==typeof window?0:window.scrollX||window.pageXOffset},k=function(){return "undefined"==typeof window?0:window.scrollY||window.pageYOffset};const D=function(e){var r=function(r){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&L(e,t);}(l,r);var o,n,c,u,s=(c=l,u=function(){if("undefined"==typeof Reflect||!Reflect.construct)return !1;if(Reflect.construct.sham)return !1;if("function"==typeof Proxy)return !0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return !1}}(),function(){var e,t=x(c);if(u){var r=x(this).constructor;e=Reflect.construct(t,arguments,r);}else e=t.apply(this,arguments);return _(this,e)});function l(e){var r;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,l),(r=s.call(this,e)).useIntersectionObserver=e.useIntersectionObserver&&i(),r.useIntersectionObserver)return _(r);var o=r.onChangeScroll.bind(I(r));return "debounce"===e.delayMethod?r.delayedScroll=m()(o,e.delayTime):"throttle"===e.delayMethod&&(r.delayedScroll=w()(o,e.delayTime)),r.state={scrollPosition:{x:R(),y:k()}},r.baseComponentRef=t().createRef(),r}return o=l,(n=[{key:"componentDidMount",value:function(){this.addListeners();}},{key:"componentWillUnmount",value:function(){this.removeListeners();}},{key:"componentDidUpdate",value:function(){"undefined"==typeof window||this.useIntersectionObserver||P(this.baseComponentRef.current)!==this.scrollElement&&(this.removeListeners(),this.addListeners());}},{key:"addListeners",value:function(){"undefined"==typeof window||this.useIntersectionObserver||(this.scrollElement=P(this.baseComponentRef.current),this.scrollElement.addEventListener("scroll",this.delayedScroll,{passive:!0}),window.addEventListener("resize",this.delayedScroll,{passive:!0}),this.scrollElement!==window&&window.addEventListener("scroll",this.delayedScroll,{passive:!0}));}},{key:"removeListeners",value:function(){"undefined"==typeof window||this.useIntersectionObserver||(this.scrollElement.removeEventListener("scroll",this.delayedScroll),window.removeEventListener("resize",this.delayedScroll),this.scrollElement!==window&&window.removeEventListener("scroll",this.delayedScroll));}},{key:"onChangeScroll",value:function(){this.useIntersectionObserver||this.setState({scrollPosition:{x:R(),y:k()}});}},{key:"render",value:function(){var r=this.props,o=(r.delayMethod,r.delayTime,function(e,t){if(null==e)return {};var r,o,n=function(e,t){if(null==e)return {};var r,o,n={},i=Object.keys(e);for(o=0;o<i.length;o++)r=i[o],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o<i.length;o++)r=i[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r]);}return n}(r,T)),n=this.useIntersectionObserver?null:this.state.scrollPosition;return t().createElement(e,S({forwardRef:this.baseComponentRef,scrollPosition:n},o))}}])&&E(o.prototype,n),Object.defineProperty(o,"prototype",{writable:!1}),l}(t().Component);return r.propTypes={delayMethod:n.PropTypes.oneOf(["debounce","throttle"]),delayTime:n.PropTypes.number,useIntersectionObserver:n.PropTypes.bool},r.defaultProps={delayMethod:"throttle",delayTime:300,useIntersectionObserver:!0},r};function C(e){return C="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},C(e)}function B(e,t){for(var r=0;r<t.length;r++){var o=t[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,(n=function(e,t){if("object"!==C(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,"string");if("object"!==C(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(o.key),"symbol"===C(n)?n:String(n)),o);}var n;}function M(e,t){return M=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},M(e,t)}function N(e){return N=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},N(e)}var V=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&M(e,t);}(u,e);var r,o,n,i,c=(n=u,i=function(){if("undefined"==typeof Reflect||!Reflect.construct)return !1;if(Reflect.construct.sham)return !1;if("function"==typeof Proxy)return !0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return !1}}(),function(){var e,t=N(n);if(i){var r=N(this).constructor;e=Reflect.construct(t,arguments,r);}else e=t.apply(this,arguments);return function(e,t){if(t&&("object"===C(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,e)});function u(e){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,u),c.call(this,e)}return r=u,(o=[{key:"render",value:function(){return t().createElement(h,this.props)}}])&&B(r.prototype,o),Object.defineProperty(r,"prototype",{writable:!1}),u}(t().Component);const W=D(V);function z(e){return z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},z(e)}function $(e,t){for(var r=0;r<t.length;r++){var o=t[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,(n=function(e,t){if("object"!==z(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,"string");if("object"!==z(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(o.key),"symbol"===z(n)?n:String(n)),o);}var n;}function U(e,t){return U=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},U(e,t)}function F(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function q(e){return q=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},q(e)}var H=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&U(e,t);}(s,e);var r,o,n,c,u=(n=s,c=function(){if("undefined"==typeof Reflect||!Reflect.construct)return !1;if(Reflect.construct.sham)return !1;if("function"==typeof Proxy)return !0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return !1}}(),function(){var e,t=q(n);if(c){var r=q(this).constructor;e=Reflect.construct(t,arguments,r);}else e=t.apply(this,arguments);return function(e,t){if(t&&("object"===z(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return F(e)}(this,e)});function s(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,s),t=u.call(this,e);var r=e.afterLoad,o=e.beforeLoad,n=e.scrollPosition,i=e.visibleByDefault;return t.state={visible:i},i&&(o(),r()),t.onVisible=t.onVisible.bind(F(t)),t.isScrollTracked=Boolean(n&&Number.isFinite(n.x)&&n.x>=0&&Number.isFinite(n.y)&&n.y>=0),t}return r=s,(o=[{key:"componentDidUpdate",value:function(e,t){t.visible!==this.state.visible&&this.props.afterLoad();}},{key:"onVisible",value:function(){this.props.beforeLoad(),this.setState({visible:!0});}},{key:"render",value:function(){if(this.state.visible)return this.props.children;var e=this.props,r=e.className,o=e.delayMethod,n=e.delayTime,c=e.height,u=e.placeholder,s=e.scrollPosition,l=e.style,a=e.threshold,f=e.useIntersectionObserver,p=e.width;return this.isScrollTracked||f&&i()?t().createElement(h,{className:r,height:c,onVisible:this.onVisible,placeholder:u,scrollPosition:s,style:l,threshold:a,useIntersectionObserver:f,width:p}):t().createElement(W,{className:r,delayMethod:o,delayTime:n,height:c,onVisible:this.onVisible,placeholder:u,style:l,threshold:a,width:p})}}])&&$(r.prototype,o),Object.defineProperty(r,"prototype",{writable:!1}),s}(t().Component);H.propTypes={afterLoad:n.PropTypes.func,beforeLoad:n.PropTypes.func,useIntersectionObserver:n.PropTypes.bool,visibleByDefault:n.PropTypes.bool},H.defaultProps={afterLoad:function(){return {}},beforeLoad:function(){return {}},useIntersectionObserver:!0,visibleByDefault:!1};const Y=H;function X(e){return X="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},X(e)}var A=["afterLoad","beforeLoad","delayMethod","delayTime","effect","placeholder","placeholderSrc","scrollPosition","threshold","useIntersectionObserver","visibleByDefault","wrapperClassName","wrapperProps"];function G(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o);}return r}function J(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?G(Object(r),!0).forEach((function(t){K(e,t,r[t]);})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):G(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t));}));}return e}function K(e,t,r){return (t=ee(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Q(){return Q=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o]);}return e},Q.apply(this,arguments)}function Z(e,t){for(var r=0;r<t.length;r++){var o=t[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,ee(o.key),o);}}function ee(e){var t=function(e,t){if("object"!==X(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,"string");if("object"!==X(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return "symbol"===X(t)?t:String(t)}function te(e,t){return te=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},te(e,t)}function re(e){return re=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},re(e)}var oe=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&te(e,t);}(u,e);var r,o,n,i,c=(n=u,i=function(){if("undefined"==typeof Reflect||!Reflect.construct)return !1;if(Reflect.construct.sham)return !1;if("function"==typeof Proxy)return !0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return !1}}(),function(){var e,t=re(n);if(i){var r=re(this).constructor;e=Reflect.construct(t,arguments,r);}else e=t.apply(this,arguments);return function(e,t){if(t&&("object"===X(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,e)});function u(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,u),(t=c.call(this,e)).state={loaded:!1},t}return r=u,(o=[{key:"onImageLoad",value:function(){var e=this;return this.state.loaded?null:function(t){e.props.onLoad(t),e.props.afterLoad(),e.setState({loaded:!0});}}},{key:"getImg",value:function(){var e=this.props,r=(e.afterLoad,e.beforeLoad,e.delayMethod,e.delayTime,e.effect,e.placeholder,e.placeholderSrc,e.scrollPosition,e.threshold,e.useIntersectionObserver,e.visibleByDefault,e.wrapperClassName,e.wrapperProps,function(e,t){if(null==e)return {};var r,o,n=function(e,t){if(null==e)return {};var r,o,n={},i=Object.keys(e);for(o=0;o<i.length;o++)r=i[o],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o<i.length;o++)r=i[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r]);}return n}(e,A));return t().createElement("img",Q({},r,{onLoad:this.onImageLoad()}))}},{key:"getLazyLoadImage",value:function(){var e=this.props,r=e.beforeLoad,o=e.className,n=e.delayMethod,i=e.delayTime,c=e.height,u=e.placeholder,s=e.scrollPosition,l=e.style,a=e.threshold,f=e.useIntersectionObserver,p=e.visibleByDefault,y=e.width;return t().createElement(Y,{beforeLoad:r,className:o,delayMethod:n,delayTime:i,height:c,placeholder:u,scrollPosition:s,style:l,threshold:a,useIntersectionObserver:f,visibleByDefault:p,width:y},this.getImg())}},{key:"getWrappedLazyLoadImage",value:function(e){var r=this.props,o=r.effect,n=r.height,i=r.placeholderSrc,c=r.width,u=r.wrapperClassName,s=r.wrapperProps,l=this.state.loaded,a=l?" lazy-load-image-loaded":"",f=l||!i?{}:{backgroundImage:"url(".concat(i,")"),backgroundSize:"100% 100%"};return t().createElement("span",Q({className:u+" lazy-load-image-background "+o+a,style:J(J({},f),{},{color:"transparent",display:"inline-block",height:n,width:c})},s),e)}},{key:"render",value:function(){var e=this.props,t=e.effect,r=e.placeholderSrc,o=e.visibleByDefault,n=e.wrapperClassName,i=e.wrapperProps,c=this.getLazyLoadImage();return (t||r)&&!o||n||i?this.getWrappedLazyLoadImage(c):c}}])&&Z(r.prototype,o),Object.defineProperty(r,"prototype",{writable:!1}),u}(t().Component);oe.propTypes={onLoad:n.PropTypes.func,afterLoad:n.PropTypes.func,beforeLoad:n.PropTypes.func,delayMethod:n.PropTypes.string,delayTime:n.PropTypes.number,effect:n.PropTypes.string,placeholderSrc:n.PropTypes.string,threshold:n.PropTypes.number,useIntersectionObserver:n.PropTypes.bool,visibleByDefault:n.PropTypes.bool,wrapperClassName:n.PropTypes.string,wrapperProps:n.PropTypes.object},oe.defaultProps={onLoad:function(){},afterLoad:function(){return {}},beforeLoad:function(){return {}},delayMethod:"throttle",delayTime:300,effect:"",placeholderSrc:null,threshold:100,useIntersectionObserver:!0,visibleByDefault:!1,wrapperClassName:""};const ne=oe;})(),build.exports=o;})();
173
-
174
- 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";
175
- styleInject(css_248z);
176
-
177
- const convertMsToHMS = ms => {
178
- const seconds = Math.floor(ms / 1000);
179
- const minutes = Math.floor(seconds / 60);
180
- const hours = Math.floor(minutes / 60);
181
- const secondsLeft = seconds % 60;
182
- const minutesLeft = minutes % 60;
183
- let hmsString = '';
184
- if (hours) {
185
- hmsString += hours < 10 ? `0${hours}:` : `${hours}:`;
186
- }
187
- hmsString += `${minutesLeft < 10 ? `0${minutesLeft}` : `${minutesLeft}`}:`;
188
- hmsString += secondsLeft < 10 ? `0${secondsLeft}` : `${secondsLeft}`;
189
- return hmsString;
190
- };
191
-
192
- const shouldForwardProp$1 = prop => {
193
- return prop !== 'theme' && !prop.startsWith('$');
194
- };
195
- const SummaryCard$1 = styled.div.withConfig({
196
- shouldForwardProp: shouldForwardProp$1
197
- }).attrs(applyDefaultTheme)`
198
- display: flex;
199
- flex-direction: column;
200
- border-radius: 4px;
201
- width: ${props => props.width ? `${props.width}px` : '100%'};
202
- ${props => props.view === 'compact' ? props.theme.themeProp('background', props.theme.getColor('gray-700'), props.theme.getColor('white')) : 'background: transparent'};
203
-
204
- ${props => props.$useBorder ? props.theme.themeProp('border', `1px solid ${props.theme.getColor('gray-500')}`, `1px solid ${props.theme.getColor('gray-300')}`) : null}
205
- `;
206
- const Gutter = styled.div.withConfig({
207
- shouldForwardProp: shouldForwardProp$1
208
- }).attrs(applyDefaultTheme)`
209
- ${props => {
210
- if (props.renderAsMargin) {
211
- return css`
212
- margin-bottom: ${props.$gutter || 8}px;
213
- `;
214
- } else {
215
- return css`
216
- padding-bottom: ${props.$gutter || 8}px;
217
- `;
218
- }
219
- }}
220
- padding-bottom: ${props => props.$gutter || 8}px;
221
- `;
222
- const Header = styled.div.withConfig({
223
- shouldForwardProp: shouldForwardProp$1
224
- }).attrs(applyDefaultTheme)`
225
- display: flex;
226
- align-items: center;
227
- justify-content: space-between;
228
- padding: 0 16px;
229
- `;
230
- const HeaderLeft = styled.div.withConfig({
231
- shouldForwardProp: shouldForwardProp$1
232
- }).attrs(applyDefaultTheme)`
233
- display: flex;
234
- align-items: center;
235
- justify-content: flex-start;
236
-
237
- > * {
238
- margin-right: 4px;
239
- }
240
- `;
241
- const HeaderRight = styled.div.withConfig({
242
- shouldForwardProp: shouldForwardProp$1
243
- }).attrs(applyDefaultTheme)`
244
- display: flex;
245
- align-items: center;
246
- justify-content: flex-end;
247
-
248
- > * {
249
- margin-left: 4px;
250
- }
251
- `;
252
- const Title = styled.span.withConfig({
253
- shouldForwardProp: shouldForwardProp$1
254
- }).attrs(applyDefaultTheme)`
255
- display: inline-block;
256
- padding: 0 16px;
257
- font: normal normal 500 14px/19px Roboto;
258
- letter-spacing: 0.28px;
259
- display: -webkit-box;
260
- -webkit-line-clamp: 1;
261
- -webkit-box-orient: vertical;
262
- overflow: hidden;
263
- text-overflow: ellipsis;
264
- box-sizing: border-box;
265
-
266
- ${props => props.theme.themeProp('color', props.theme.getColor('white'), props.theme.getColor('gray-700'))};
267
- `;
268
- const Description = styled.span.withConfig({
269
- shouldForwardProp: shouldForwardProp$1
270
- }).attrs(applyDefaultTheme)`
271
- padding: 0 16px;
272
- text-align: left;
273
- font: normal normal normal 12px/16px Roboto;
274
- letter-spacing: 0.24px;
275
- display: -webkit-box;
276
- -webkit-line-clamp: 3;
277
- -webkit-box-orient: vertical;
278
- overflow: hidden;
279
- text-overflow: ellipsis;
280
- box-sizing: border-box;
281
-
282
- ${props => props.theme.themeProp('color', props.theme.getColor('white'), props.theme.getColor('gray-700'))};
283
- `;
284
- const Instruction = styled.div.withConfig({
285
- shouldForwardProp: shouldForwardProp$1
286
- }).attrs(applyDefaultTheme)``;
287
- const Footer = styled.div.withConfig({
288
- shouldForwardProp: shouldForwardProp$1
289
- }).attrs(applyDefaultTheme)`
290
- display: flex;
291
- align-items: center;
292
- justify-content: space-between;
293
- padding: 0 16px;
294
- `;
295
- const FooterLeft = styled.div.withConfig({
296
- shouldForwardProp: shouldForwardProp$1
297
- }).attrs(applyDefaultTheme)`
298
- display: flex;
299
- align-items: center;
300
- justify-content: flex-start;
301
-
302
- > * {
303
- margin-right: 4px;
304
- }
305
- `;
306
- const FooterRight = styled.div.withConfig({
307
- shouldForwardProp: shouldForwardProp$1
308
- }).attrs(applyDefaultTheme)`
309
- display: flex;
310
- align-items: center;
311
- justify-content: flex-end;
312
-
313
- > * {
314
- margin-left: 4px;
315
- }
316
- `;
317
- styled(FloatingArrow).withConfig({
318
- shouldForwardProp: shouldForwardProp$1
319
- }).attrs(applyDefaultTheme)`
320
- ${props => props.theme.themeProp('fill', props.theme.getColor('gray-700'), props.theme.getColor('white'))}
321
- `;
322
-
323
- const SummaryCard = React__default.forwardRef(function AssetSummaryCard({
324
- activeSummaryCard,
325
- title,
326
- description,
327
- instructions,
328
- instructionsType,
329
- headerLeft,
330
- headerRight,
331
- footerLeft,
332
- footerRight,
333
- width,
334
- useBorder,
335
- view,
336
- ...props
337
- }, forwardedRef) {
338
- const shouldRenderInstructions = !!instructions;
339
- const shouldRenderHeader = !!headerLeft || !!headerRight;
340
- const shouldRenderFooter = !!footerLeft || !!footerRight;
341
- const shouldAddGutterAfterInstructions = shouldRenderInstructions && shouldRenderFooter;
342
- const shouldAddGutterAfterTitle = !!title && (!!description || !!instructions || shouldRenderFooter);
343
- if (!activeSummaryCard) return null;
344
- return React__default.createElement(SummaryCard$1, _extends$4({
345
- ref: forwardedRef,
346
- width: width,
347
- useBorder: useBorder
348
- }, props, {
349
- view: view
350
- }), shouldRenderHeader && React__default.createElement(React__default.Fragment, null, React__default.createElement(Gutter, {
351
- gutter: 8
352
- }), React__default.createElement(Header, null, React__default.createElement(HeaderLeft, null, headerLeft), React__default.createElement(HeaderRight, null, headerRight))), React__default.createElement(Gutter, {
353
- gutter: shouldRenderHeader ? 8 : 16
354
- }), title && React__default.createElement(Title, null, title), shouldAddGutterAfterTitle && React__default.createElement(Gutter, {
355
- gutter: 4
356
- }), description && React__default.createElement(Description, null, description), React__default.createElement(Gutter, {
357
- gutter: 16
358
- }), shouldRenderInstructions && React__default.createElement(Instruction, null, React__default.createElement(Alert, {
359
- icon: React__default.createElement(SvgWarningCircle, null),
360
- alertMessage: instructions,
361
- type: instructionsType,
362
- fontSize: 12,
363
- verticalPadding: 12,
364
- horizontalPadding: 16,
365
- width: width,
366
- lineClamp: 1
367
- })), shouldAddGutterAfterInstructions && React__default.createElement(Gutter, {
368
- gutter: 16
369
- }), shouldRenderFooter && React__default.createElement(Footer, null, React__default.createElement(FooterLeft, null, footerLeft), React__default.createElement(FooterRight, null, footerRight)), shouldRenderFooter && React__default.createElement(Gutter, {
370
- gutter: 16
371
- }));
372
- });
373
- SummaryCard.propTypes = process.env.NODE_ENV !== "production" ? {
374
- activeSummaryCard: PropTypes.bool,
375
- title: PropTypes.string,
376
- description: PropTypes.string,
377
- instructions: PropTypes.string,
378
- instructionsType: PropTypes.oneOf(['warning', 'error', 'info']),
379
- headerLeft: PropTypes.node,
380
- headerRight: PropTypes.node,
381
- footerLeft: PropTypes.node,
382
- footerRight: PropTypes.node,
383
- width: PropTypes.number,
384
- useBorder: PropTypes.bool,
385
- view: PropTypes.string
386
- } : {};
387
- SummaryCard.defaultProps = {
388
- title: '',
389
- description: '',
390
- instructions: '',
391
- instructionsType: 'info',
392
- headerLeft: null,
393
- headerRight: null,
394
- footerLeft: null,
395
- footerRight: null,
396
- useBorder: false,
397
- activeSummaryCard: false
398
- };
399
-
400
- const shouldForwardProp = prop => {
401
- return prop !== 'theme' && !prop.startsWith('$');
402
- };
403
- const AssetGalleryWrapper$1 = styled.div.withConfig({
404
- shouldForwardProp
405
- }).attrs(applyDefaultTheme)`
406
- ${props => props.disabled && css`
407
- cursor: not-allowed;
408
- `};
409
- `;
410
- const Reference = styled.div.withConfig({
411
- shouldForwardProp
412
- }).attrs(applyDefaultTheme)`
413
- width: 100%;
414
- height: 100%;
415
- `;
416
- const AssetGalleryCompactCard$2 = styled.div.withConfig({
417
- shouldForwardProp
418
- }).attrs(applyDefaultTheme)`
419
- display: block;
420
- height: 100%;
421
- padding-left: ${props => props.selected ? 1 : 0}px;
422
- padding-right: ${props => props.selected ? 1 : 0}px;
423
- padding-top: ${props => props.selected ? 1 : 0}px;
424
- box-sizing: border-box;
425
- cursor: pointer;
426
-
427
- ${props => props.theme.themeProp('background', props.theme.getColor('gray-700'), props.theme.getColor('gray-300'))};
428
-
429
- ${props => props.theme.themeProp('color', props.theme.getColor('gray-100'), props.theme.getColor('gray-700'))};
430
-
431
- ${props => props.disabled && css`
432
- pointer-events: none;
433
- opacity: 0.4;
434
- `};
435
-
436
- ${props => props.extendedSelectMode && css`
437
- cursor: pointer;
438
- `}
439
- video {
440
- width: 100%;
441
- height: 100%;
442
- }
443
-
444
- .audio {
445
- display: flex;
446
- justify-content: center;
447
- svg {
448
- width: 25%;
449
- }
450
- }
451
- `;
452
- const Figure$1 = styled.figure`
453
- display: flex;
454
- flex-direction: row;
455
- flex-wrap: nowrap;
456
- justify-content: center;
457
- align-items: center;
458
- position: relative;
459
- margin: 0;
460
- width: 100%;
461
- height: 100%;
462
- box-sizing: border-box;
463
-
464
- .lazy-load-image-background {
465
- display: block !important;
466
- }
467
-
468
- img {
469
- display: block;
470
- height: 100%;
471
- width: 100%;
472
- ${props => props.$hasHeightAndWidth ? css`
473
- object-fit: cover;
474
- ` : css`
475
- object-fit: contain;
476
- `}
477
- }
478
- `;
479
- const FigureOverlayBackdrop$1 = styled.div.withConfig({
480
- shouldForwardProp
481
- }).attrs(applyDefaultTheme)`
482
- position: absolute;
483
- inset: 0;
484
- opacity: ${props => props.selected ? 0.6 : 0};
485
- background-color: ${props => props.selected ? '#ACCEF7' : 'transparent'};
486
- `;
487
- const Overlay$1 = styled.div.withConfig({
488
- shouldForwardProp
489
- }).attrs(applyDefaultTheme)`
490
- position: absolute;
491
- top: 0;
492
- bottom: 0;
493
- left: 0;
494
- right: 0;
495
- `;
496
- const OverlayBackdrop$1 = styled.div.withConfig({
497
- shouldForwardProp
498
- }).attrs(applyDefaultTheme)`
499
- position: absolute;
500
- top: 0;
501
- bottom: 0;
502
- left: 0;
503
- right: 0;
504
- opacity: 0;
505
- transition: opacity 220ms;
506
-
507
- ${props => !props.selected ? css`
508
- background: radial-gradient(
509
- ellipse at center,
510
- rgba(0, 0, 0, 0.3) 27%,
511
- rgba(0, 0, 0, 0.5) 60%,
512
- rgba(0, 0, 0, 0.7) 90%
513
- );
514
- ` : null}
515
- ${props => (props.selected || props.$softSelected) && css`
516
- opacity: 1;
517
- `}
518
- ${Overlay$1}:hover & {
519
- opacity: 1;
520
- }
521
- `;
522
- const OverlayInfo$1 = styled.div.withConfig({
523
- shouldForwardProp
524
- }).attrs(applyDefaultTheme)`
525
- position: absolute;
526
- top: 0;
527
- bottom: 0;
528
- left: 0;
529
- right: 0;
530
- display: flex;
531
- flex-direction: column;
532
- justify-content: space-between;
533
- padding: 15px 50px 10px 12px;
534
- color: ${props => props.theme.getColor('gray-100')};
535
- & span {
536
- overflow: hidden;
537
- word-wrap: break-word;
538
- }
539
- `;
540
- const OverlayCompleted = styled.div.withConfig({
541
- shouldForwardProp
542
- }).attrs(applyDefaultTheme)`
543
- position: absolute;
544
- top: 0;
545
- bottom: 0;
546
- left: 0;
547
- right: 0;
548
- pointer-events: none;
549
- transition: border-color 120ms;
550
- border: 3px solid;
551
- ${props => {
552
- if (props.$softSelected) return null;
553
- return props.theme.themeProp('border-color', props.theme.getColor('emerald-500'), rgba(props.theme.getColor('emerald-500'), 0.7));
554
- }};
555
- `;
556
- const OverlayHasError = styled.div.withConfig({
557
- shouldForwardProp
558
- }).attrs(applyDefaultTheme)`
559
- position: absolute;
560
- top: 0;
561
- bottom: 0;
562
- left: 0;
563
- right: 0;
564
- pointer-events: none;
565
- transition: border-color 120ms;
566
- border: 3px solid;
567
- ${props => {
568
- if (props.$softSelected) return null;
569
- return props.theme.themeProp('border-color', props.theme.getColor('red-600'), rgba(props.theme.getColor('red-500'), 0.7));
570
- }}
571
- `;
572
- const OverlaySelected$1 = styled.div.withConfig({
573
- shouldForwardProp
574
- }).attrs(applyDefaultTheme)`
575
- position: absolute;
576
- top: 0;
577
- bottom: 0;
578
- left: 0;
579
- right: 0;
580
- pointer-events: none;
581
- transition: border-color 120ms;
582
- border-style: solid;
583
- border-width: 3px;
584
-
585
- ${props => {
586
- if (props.$softSelected) {
587
- return props.theme.themeProp('border-color', rgba(props.theme.getColor('gray-100'), 0.5), rgba(props.theme.getColor('gray-700'), 0.5));
588
- }
589
- if (props.selected) {
590
- if (props.customSelectedBorder) {
591
- return props.theme.themeProp('border-color', props.customSelectedBorder[0], props.customSelectedBorder[1]);
592
- } else {
593
- return props.theme.themeProp('border-color', props.theme.getColor('gray-100'), props.theme.getColor('gray-700'));
594
- }
595
- }
596
- return props.theme.themeProp('border-color', 'transparent', 'transparent');
597
- }};
598
- `;
599
- const OverlayInfoTop$1 = styled.div.withConfig({
600
- shouldForwardProp
601
- }).attrs(applyDefaultTheme)`
602
- position: absolute;
603
- left: 0;
604
- right: 0;
605
- top: 0;
606
- padding: 8px;
607
- display: flex;
608
- `;
609
- const OverlayInfoTopActions$1 = styled.div.withConfig({
610
- shouldForwardProp
611
- }).attrs(applyDefaultTheme)`
612
- position: absolute;
613
- top: 0;
614
- right: 0;
615
- padding: 4px;
616
- display: flex;
617
- flex-direction: column;
618
- justify-content: space-between;
619
- transition: opacity 220ms;
620
- z-index: 99999;
621
- ${props => props.theme.themeProp('color', props.theme.getColor('gray-300'), props.theme.getColor('gray-700'))}
622
-
623
- opacity: ${props => props.$isOverlayHovered ? 1 : 0};
624
- `;
625
- const OverlayInfoTopLeft = styled.div.withConfig({
626
- shouldForwardProp
627
- }).attrs(applyDefaultTheme)`
628
- opacity: 1;
629
- display: ${props => props?.$collapseExtraInfo ? 'none' : 'block'};
630
-
631
- ${Overlay$1}:hover & {
632
- opacity: 0;
633
- }
634
- `;
635
- const OverlayInfoTopWarning$1 = styled.div.withConfig({
636
- shouldForwardProp
637
- }).attrs(applyDefaultTheme)`
638
- margin-left: auto;
639
- height: 24px;
640
- width: 24px;
641
- border-radius: 50%;
642
- box-sizing: border-box;
643
- padding: ${props => props.type === 'error' ? 0 : '3px 4px'};
644
- background-color: ${props => props.type === 'error' ? props.theme.getColor('red-500') : props.theme.getColor('gray-100')};
645
- opacity: 1;
646
-
647
- svg {
648
- width: 100%;
649
- color: ${props => props.type === 'error' ? props.theme.getColor('gray-100') : props.theme.getColor('gray-700')};
650
- }
651
-
652
- ${Overlay$1}:hover & {
653
- opacity: 0;
654
- }
655
- `;
656
- const OverlayInfoBottom$1 = styled.div.withConfig({
657
- shouldForwardProp
658
- }).attrs(applyDefaultTheme)`
659
- position: absolute;
660
- left: 0;
661
- right: 0;
662
- bottom: 0;
663
- padding: 8px;
664
- display: flex;
665
- `;
666
- const OverlayInfoBottomSelectButton$1 = styled.div.withConfig({
667
- shouldForwardProp
668
- }).attrs(applyDefaultTheme)`
669
- opacity: ${props => props.selected ? 1 : 0};
670
- flex-shrink: 0;
671
- cursor: pointer;
672
- transition: opacity 220ms;
673
- height: 24px;
674
-
675
- > svg {
676
- width: 24px;
677
- height: 24px;
678
- transition: opacity 120ms;
679
- opacity: ${props => props.selected ? 1 : 0.5};
680
- }
681
-
682
- ${Overlay$1}:hover & {
683
- opacity: 1;
684
- }
685
- `;
686
- const OverlayInfoBottomMediaIcon$1 = styled.div.withConfig({
687
- shouldForwardProp
688
- }).attrs(applyDefaultTheme)`
689
- margin-left: auto;
690
- opacity: 1;
691
-
692
- ${Overlay$1}:hover & {
693
- opacity: 0;
694
- }
695
- `;
696
- const ConsumerDefinedOverlay$1 = styled.div.withConfig({
697
- shouldForwardProp
698
- }).attrs(applyDefaultTheme)`
699
- position: absolute;
700
- top: 0;
701
- bottom: 0;
702
- left: 0;
703
- right: 0;
704
- pointer-events: none;
705
- `;
706
- styled.div`
707
- margin: 4px;
708
- `;
709
- styled.div.withConfig({
710
- shouldForwardProp
711
- }).attrs(applyDefaultTheme)`
712
- ${props => props.theme.themeProp('background', props.theme.getColor('gray-700'), props.theme.getColor('white'))}
713
- padding: 4px 8px;
714
- border-radius: 4px;
715
- `;
716
- const StyledFloatingArrow$1 = styled(FloatingArrow).withConfig({
717
- shouldForwardProp
718
- }).attrs(applyDefaultTheme)`
719
- ${props => props.theme.themeProp('fill', props.theme.getColor('gray-700'), props.theme.getColor('white'))}
720
- `;
721
-
722
- const AssetActions = styled.div.attrs(applyDefaultTheme)`
723
- font-family: ${props => props.theme.primaryFontFamily};
724
- font-size: 1rem;
725
- font-weight: 500;
726
- display: flex;
727
- flex-direction: column;
728
- padding: 2px;
729
- gap: 8px;
730
- `;
731
-
732
- const AssetAction$1 = styled.div.attrs(applyDefaultTheme)`
733
- font-family: ${props => props.theme.primaryFontFamily};
734
- `;
735
- const AssetActionButton = styled.div.attrs(applyDefaultTheme)`
736
- border-radius: 50%;
737
- width: ${props => props.actionWidthHeight ? `${props.actionWidthHeight[0]}px` : 'auto'};
738
- height: ${props => props.actionWidthHeight ? `${props.actionWidthHeight[1]}px` : 'auto'};
739
- cursor: pointer;
740
- display: flex;
741
- justify-content: center;
742
- align-items: center;
743
- box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16);
744
- ${props => props.theme.themeProp('background-color', props.theme.getColor('gray-900'), props.theme.getColor('white'))};
745
- svg {
746
- pointer-events: none;
747
- width: ${props => props.actionWidthHeight ? `${props.actionWidthHeight[0] - 14}px` : 'auto'};
748
- height: ${props => props.actionWidthHeight ? `${props.actionWidthHeight[1] - 14}px` : 'auto'};
749
- ${props => props.theme.themeProp('color', props.theme.getColor('gray-900'), props.theme.getColor('white'))};
750
- }
751
- `;
752
- const ActionTitle = styled.div.attrs(applyDefaultTheme)`
753
- font-size: 14px;
754
- border-radius: 4px;
755
- padding: 8px 12px;
756
- white-space: nowrap;
757
- color: white;
758
- background: ${props => props.theme.getColor('gray-700')};
759
- `;
760
- const StyledFloatingArrow = styled(FloatingArrow).attrs(applyDefaultTheme)`
761
- fill: ${props => props.theme.getColor('gray-700')};
762
- `;
763
- const Floating = styled.div.attrs(applyDefaultTheme)`
764
- pointer-events: none;
765
- `;
766
-
767
- const AssetAction = React__default.forwardRef(function AssetAction({
768
- action,
769
- asset,
770
- itemKey,
771
- ...props
772
- }, forwardedRef) {
773
- const ARROW_WIDTH = 10;
774
- const ARROW_HEIGHT = 5;
775
- const GAP = 3;
776
- const arrowRef = useRef(null);
777
- const [isOpen, setIsOpen] = useState(false);
778
- const [placement] = useState('bottom');
779
- const {
780
- refs,
781
- floatingStyles,
782
- context
783
- } = useFloating({
784
- placement,
785
- open: isOpen,
786
- onOpenChange: setIsOpen,
787
- whileElementsMounted: autoUpdate,
788
- middleware: [offset(ARROW_HEIGHT + GAP), flip({
789
- padding: 5
790
- }), shift({
791
- padding: 5
792
- }), arrow({
793
- element: arrowRef
794
- })]
795
- });
796
- const {
797
- isMounted,
798
- styles
799
- } = useTransitionStyles(context, {
800
- initial: {
801
- transform: 'translateY(-8px)',
802
- opacity: 0
803
- },
804
- duration: {
805
- open: 200,
806
- close: 100
807
- }
808
- });
809
- const hover = useHover(context);
810
- const dismiss = useDismiss(context, {
811
- referencePress: true
812
- });
813
- const {
814
- getReferenceProps,
815
- getFloatingProps
816
- } = useInteractions([dismiss, hover]);
817
- const onActionClick = useCallback((e, action) => {
818
- e.preventDefault();
819
- e.stopPropagation();
820
- if (isFunction(action?.onClick)) {
821
- action.onClick(asset);
822
- }
823
- }, [action]);
824
- return React__default.createElement(AssetAction$1, _extends$4({
825
- ref: forwardedRef
826
- }, props), React__default.createElement(AssetActionButton, _extends$4({
827
- key: itemKey,
828
- ref: refs.setReference
829
- }, getReferenceProps(), {
830
- onClick: e => onActionClick(e, action.onClick(asset), itemKey),
831
- actionWidthHeight: action.actionWidthHeight
832
- }), action.icon), isOpen && isMounted && React__default.createElement(Floating, _extends$4({
833
- className: "floating",
834
- ref: refs.setFloating,
835
- style: floatingStyles
836
- }, getFloatingProps()), React__default.createElement(ActionTitle, {
837
- style: styles
838
- }, action.title), React__default.createElement(StyledFloatingArrow, {
839
- ref: arrowRef,
840
- context: context,
841
- width: ARROW_WIDTH,
842
- height: ARROW_HEIGHT
843
- })));
844
- });
845
- AssetAction.propTypes = process.env.NODE_ENV !== "production" ? {
846
- action: PropTypes.shape({
847
- icon: PropTypes.node,
848
- onClick: PropTypes.func,
849
- actionWidthHeight: PropTypes.arrayOf(PropTypes.number),
850
- title: PropTypes.string
851
- }),
852
- asset: PropTypes.object,
853
- itemKey: PropTypes.string
854
- } : {};
855
- AssetAction.defaultProps = {};
856
-
857
- const AssetActionsBase = React__default.forwardRef(function AssetActionsBase({
858
- actions,
859
- asset,
860
- ...props
861
- }, forwardedRef) {
862
- const assetActions = actions.map((action, index) => React__default.createElement(AssetAction, _extends$4({
863
- key: `index_${action.title}`,
864
- ref: forwardedRef
865
- }, props, {
866
- action: action,
867
- asset: asset,
868
- itemKey: `${index}-${action.title}`
869
- })));
870
- return React__default.createElement(AssetActions, null, assetActions);
871
- });
872
- AssetActionsBase.propTypes = process.env.NODE_ENV !== "production" ? {
873
- actions: PropTypes.arrayOf(PropTypes.object),
874
- asset: PropTypes.object
875
- } : {};
876
- AssetActionsBase.defaultProps = {};
877
-
878
- const ComputedRootComponent$1 = ({
879
- component,
880
- asset,
881
- ...props
882
- }) => {
883
- const newProps = mapKeys(omit(props, ['theme', 'extendedSelectMode']), (_, key) => key === 'innerRef' ? 'ref' : key);
884
- if (component) {
885
- if (!isFunction(component)) throw Error('Expected a function in component-prop');
886
- if (React__default.isValidElement(component(asset, newProps.children))) {
887
- return React__default.cloneElement(component(asset, newProps.children), omit(newProps, ['children']));
888
- }
889
- }
890
- return React__default.createElement(AssetGalleryCompactCard$2, _extends$4({
891
- ref: newProps.ref
892
- }, newProps));
893
- };
894
- const AssetGalleryCompactCard = props => {
895
- const {
896
- asset,
897
- activeSummaryCard,
898
- displayIcon,
899
- selectable,
900
- hasHeightAndWidth,
901
- selected,
902
- customSelectedBorder,
903
- extendedSelectMode,
904
- onAssetSelected,
905
- onAssetUnselected,
906
- softSelected,
907
- component,
908
- scrollPosition,
909
- collapseExtraInfo
910
- } = props;
911
- const ARROW_WIDTH = 30;
912
- const ARROW_HEIGHT = 15;
913
- const GAP = 8;
914
- const arrowRef = useRef(null);
915
- const [isOpen, setIsOpen] = useState(false);
916
- const [placement] = useState('bottom');
917
- const [isOverlayHovered, setIsOverlayHovered] = useState(false);
918
- const [openedSubActions, updateOpenedSubActions] = useState([]);
919
- const {
920
- refs,
921
- floatingStyles,
922
- context
923
- } = useFloating({
924
- placement,
925
- open: isOpen,
926
- onOpenChange: setIsOpen,
927
- whileElementsMounted: autoUpdate,
928
- middleware: [offset(ARROW_HEIGHT + GAP), flip({
929
- padding: 5
930
- }), shift({
931
- padding: 5
932
- }), arrow({
933
- element: arrowRef
934
- })]
935
- });
936
- const {
937
- isMounted,
938
- styles
939
- } = useTransitionStyles(context, {
940
- initial: {
941
- transform: 'translateY(-8px)',
942
- opacity: 0
943
- },
944
- duration: {
945
- open: 200,
946
- close: 100
947
- }
948
- });
949
- const hover = useHover(context, {
950
- restMs: 100
951
- });
952
- const dismiss = useDismiss(context, {
953
- referencePress: true,
954
- ancestorScroll: true,
955
- windowScroll: true,
956
- windowBlur: true
957
- });
958
- const {
959
- getReferenceProps,
960
- getFloatingProps
961
- } = useInteractions([dismiss, hover]);
962
- useEffect(() => {
963
- const newOpenedSubActions = (asset?.actions ?? []).map(() => false);
964
- updateOpenedSubActions(newOpenedSubActions);
965
- }, [asset]);
966
- useEffect(() => {
967
- if (!isOverlayHovered && openedSubActions?.length) {
968
- updateOpenedSubActions(openedSubActions.map(() => false));
969
- }
970
- }, [isOverlayHovered]);
971
- const mouseHasEnteredOverlay = useCallback(() => {
972
- setIsOverlayHovered(true);
973
- }, []);
974
- const mouseHasLeftOverlay = useCallback(() => {
975
- setIsOverlayHovered(false);
976
- }, []);
977
- const isAnySubActionsOpened = useMemo(() => {
978
- return openedSubActions.some(isOpened => isOpened);
979
- }, [openedSubActions]);
980
- function onClick(event) {
981
- if (extendedSelectMode) {
982
- return onSelectClick(event);
983
- }
984
- if (isFunction(asset.onClick)) {
985
- asset.onClick(event, asset);
986
- }
987
- }
988
- function onSelectClick(event) {
989
- event.preventDefault();
990
- event.stopPropagation();
991
- if (selected) {
992
- return onAssetUnselected(asset.key);
993
- }
994
- if (selectable) {
995
- return onAssetSelected(asset.key);
996
- }
997
- }
998
- function onContextMenu(event) {
999
- event.preventDefault();
1000
- asset.onContextMenu(event);
1001
- }
1002
- useEffect(() => {
1003
- if (isFunction(asset.onContextMenu)) {
1004
- if (cardRef.current) {
1005
- cardRef.current.addEventListener('contextmenu', onContextMenu);
1006
- }
1007
- return () => {
1008
- if (cardRef.current) {
1009
- cardRef.current.removeEventListener('contextmenu', onContextMenu);
1010
- }
1011
- };
1012
- }
1013
- }, []);
1014
- function onDragstart(event) {
1015
- asset.onDragstart(event);
1016
- }
1017
- useEffect(() => {
1018
- if (isFunction(asset.onDragstart)) {
1019
- if (dragRef.current) {
1020
- dragRef.current.addEventListener('dragstart', onDragstart);
1021
- }
1022
- return () => {
1023
- if (dragRef.current) {
1024
- dragRef.current.removeEventListener('dragstart', onDragstart);
1025
- }
1026
- };
1027
- }
1028
- }, []);
1029
- const videoPlayerRef = useRef();
1030
- const cardRef = useRef();
1031
- const dragRef = useRef(null);
1032
- const overlayCompactRef = useMergeRefs([cardRef, refs.setReference]);
1033
- function onMouseEnter(event) {
1034
- if (videoPlayerRef.current) {
1035
- const playPromise = videoPlayerRef.current.play();
1036
- if (playPromise !== undefined) {
1037
- playPromise.then(() => {}).catch(() => {});
1038
- }
1039
- }
1040
- if (isFunction(asset.onMouseEnter)) {
1041
- asset.onMouseEnter(event, asset);
1042
- }
1043
- }
1044
- function onMouseLeave() {
1045
- if (videoPlayerRef.current) {
1046
- videoPlayerRef.current.pause();
1047
- }
1048
- }
1049
- const renderPreview = asset => {
1050
- let previewContent = null;
1051
- if (asset?.fileType?.toLowerCase() === 'video') {
1052
- previewContent = React__default.createElement(build.exports.LazyLoadComponent, {
1053
- scrollPosition: scrollPosition
1054
- }, React__default.createElement("video", {
1055
- ref: videoPlayerRef,
1056
- loop: true,
1057
- muted: true
1058
- }, React__default.createElement("source", {
1059
- src: asset.previewUrl,
1060
- type: "video/mp4"
1061
- })));
1062
- } else if (asset?.fileType?.toLowerCase() === 'audio') {
1063
- previewContent = React__default.createElement(build.exports.LazyLoadComponent, {
1064
- scrollPosition: scrollPosition
1065
- }, React__default.createElement("div", {
1066
- className: "audio"
1067
- }, React__default.createElement(SvgHeadset, null)));
1068
- } else {
1069
- previewContent = React__default.createElement(build.exports.LazyLoadImage, {
1070
- alt: asset?.title,
1071
- src: asset?.previewUrl,
1072
- height: "100%",
1073
- width: "100%",
1074
- delayMethod: "debounce",
1075
- delayTime: 0,
1076
- threshold: 1500,
1077
- scrollPosition: scrollPosition
1078
- });
1079
- }
1080
- return React__default.createElement(Figure$1, {
1081
- hasHeightAndWidth: hasHeightAndWidth
1082
- }, previewContent, React__default.createElement(FigureOverlayBackdrop$1, {
1083
- selected: selected
1084
- }));
1085
- };
1086
- useEffect(() => {
1087
- if (softSelected) {
1088
- cardRef.current.scrollIntoView({
1089
- behavior: 'smooth',
1090
- block: 'nearest'
1091
- });
1092
- }
1093
- }, [softSelected]);
1094
- const renderVersionsBadge = useCallback(() => {
1095
- if (!asset?.versions) return null;
1096
- return React__default.createElement(Badge, {
1097
- badgeIcon: React__default.createElement(SvgLayers, null),
1098
- badgeContent: asset.versions,
1099
- backgroundColors: ['black', 'black'],
1100
- colors: ['#f7f8f9', '#f7f8f9'],
1101
- fontSize: 12,
1102
- fontWeight: 500,
1103
- lineHeight: 16,
1104
- verticalPadding: 4,
1105
- horizontalPadding: 8
1106
- });
1107
- }, [asset]);
1108
- const renderVerificationBadge = useCallback(() => {
1109
- if (!asset?.verifications) return null;
1110
- return asset?.verifications;
1111
- }, [asset]);
1112
- const renderdynamicBadge = useCallback(() => {
1113
- if (asset?.verifications) return renderVerificationBadge();
1114
- if (asset?.versions) return renderVersionsBadge();
1115
- return null;
1116
- });
1117
- const renderBadge = () => {
1118
- switch (displayIcon) {
1119
- case 'versions':
1120
- return renderVersionsBadge();
1121
- case 'verifications':
1122
- return renderVerificationBadge();
1123
- case 'dynamic':
1124
- return renderdynamicBadge();
1125
- default:
1126
- return null;
1127
- }
1128
- };
1129
- const renderMediaBadge = useCallback(() => {
1130
- let badgeIcon = null;
1131
- let badgeContent = null;
1132
- if (asset?.fileType === 'video') {
1133
- badgeIcon = React__default.createElement(SvgPlay, null);
1134
- }
1135
- if (asset?.duration) {
1136
- badgeContent = convertMsToHMS(asset.duration);
1137
- }
1138
- if (!badgeIcon && !badgeContent) return null;
1139
- return React__default.createElement(Badge, {
1140
- badgeIcon: badgeIcon,
1141
- badgeContent: badgeContent,
1142
- backgroundColors: ['black', 'black'],
1143
- colors: ['#f7f8f9', '#f7f8f9'],
1144
- fontSize: 12,
1145
- fontWeight: 500,
1146
- lineHeight: 16,
1147
- verticalPadding: 4,
1148
- horizontalPadding: 8,
1149
- minWidth: 32,
1150
- height: 24
1151
- });
1152
- }, [asset]);
1153
- const renderSummaryCardHeaderLeft = useCallback(() => {
1154
- return React__default.createElement(React__default.Fragment, null, renderVersionsBadge(), renderMediaBadge());
1155
- }, [asset]);
1156
- const renderPopoverContent = useCallback(() => {
1157
- return React__default.createElement(SummaryCard, {
1158
- activeSummaryCard: activeSummaryCard,
1159
- title: asset?.title || '',
1160
- description: asset?.description || '',
1161
- instructions: asset?.imageRights || '',
1162
- instructionsType: 'warning',
1163
- headerRight: asset?.summary?.headerRight || '',
1164
- headerLeft: React__default.createElement(React__default.Fragment, null, renderSummaryCardHeaderLeft(), asset?.summary?.headerLeft || ''),
1165
- footerLeft: asset?.summary?.footerLeft || '',
1166
- footerRight: asset?.summary?.footerRight || '',
1167
- width: 375,
1168
- view: 'compact'
1169
- });
1170
- }, [asset]);
1171
- return React__default.createElement(AssetGalleryWrapper$1, {
1172
- disabled: asset.disabled
1173
- }, React__default.createElement(AssetGalleryCompactCard$2, _extends$4({
1174
- as: ComputedRootComponent$1,
1175
- component: component,
1176
- disabled: asset.disabled,
1177
- asset: asset,
1178
- onClick: onClick,
1179
- extendedSelectMode: extendedSelectMode,
1180
- onMouseEnter: onMouseEnter,
1181
- onMouseLeave: onMouseLeave,
1182
- draggable: asset.draggable,
1183
- innerRef: dragRef,
1184
- selected: selected
1185
- }, getReferenceProps()), React__default.createElement(Reference, {
1186
- ref: refs.setReference
1187
- }, asset.previewUrl && renderPreview(asset)), React__default.createElement(Overlay$1, _extends$4({
1188
- ref: overlayCompactRef,
1189
- onMouseEnter: mouseHasEnteredOverlay,
1190
- onMouseLeave: mouseHasLeftOverlay,
1191
- style: {
1192
- height: '100%'
1193
- }
1194
- }, getReferenceProps()), React__default.createElement(OverlayBackdrop$1, {
1195
- softSelected: softSelected,
1196
- selected: selected
1197
- }), asset?.actions && React__default.createElement(OverlayInfoTopActions$1, {
1198
- $isOverlayHovered: isOverlayHovered
1199
- }, React__default.createElement(AssetActionsBase, {
1200
- actions: asset.actions,
1201
- asset: asset
1202
- })), React__default.createElement(OverlayInfo$1, null, isOverlayHovered && React__default.createElement("span", null, asset.title), React__default.createElement(OverlayInfoTop$1, null, React__default.createElement(OverlayInfoTopLeft, {
1203
- collapseExtraInfo: collapseExtraInfo
1204
- }, renderBadge()), asset?.note?.title && React__default.createElement(OverlayInfoTopWarning$1, {
1205
- type: asset?.note?.type
1206
- }, React__default.createElement(SvgWarningCircle, null))), React__default.createElement(OverlayInfoBottom$1, null, selectable && React__default.createElement(OverlayInfoBottomSelectButton$1, {
1207
- selected: selected
1208
- }, React__default.createElement(SvgCheckRectangleFilled, {
1209
- onClick: onSelectClick
1210
- })), React__default.createElement(OverlayInfoBottomMediaIcon$1, null, renderMediaBadge()))), asset.completed && React__default.createElement(OverlayCompleted, {
1211
- softSelected: softSelected
1212
- }), asset.hasError && React__default.createElement(OverlayHasError, {
1213
- softSelected: softSelected
1214
- }), selectable && React__default.createElement(OverlaySelected$1, {
1215
- selected: selected,
1216
- softSelected: softSelected,
1217
- customSelectedBorder: customSelectedBorder
1218
- }), isOpen && isOverlayHovered && isMounted && activeSummaryCard && !isAnySubActionsOpened && React__default.createElement("div", _extends$4({
1219
- ref: refs.setFloating,
1220
- style: floatingStyles
1221
- }, getFloatingProps()), React__default.createElement("div", {
1222
- style: styles,
1223
- className: "floating"
1224
- }, renderPopoverContent(), React__default.createElement(StyledFloatingArrow$1, {
1225
- ref: arrowRef,
1226
- context: context,
1227
- width: ARROW_WIDTH,
1228
- height: ARROW_HEIGHT
1229
- })))), asset.overlay && React__default.createElement(ConsumerDefinedOverlay$1, null, asset.overlay)));
1230
- };
1231
- AssetGalleryCompactCard.propTypes = process.env.NODE_ENV !== "production" ? {
1232
- asset: PropTypes.shape(assetShapeWithLayout).isRequired,
1233
- hasHeightAndWidth: PropTypes.bool,
1234
- selectable: PropTypes.bool,
1235
- selected: PropTypes.bool,
1236
- customSelectedBorder: PropTypes.arrayOf(PropTypes.string),
1237
- extendedSelectMode: PropTypes.bool,
1238
- onAssetSelected: PropTypes.func.isRequired,
1239
- onAssetUnselected: PropTypes.func.isRequired,
1240
- softSelected: PropTypes.bool.isRequired,
1241
- component: PropTypes.func,
1242
- scrollPosition: PropTypes.number,
1243
- collapseExtraInfo: PropTypes.bool,
1244
- activeSummaryCard: PropTypes.bool,
1245
- displayIcon: PropTypes.oneOf(['dynamic', 'versions', 'verifications', ''])
1246
- } : {};
1247
- var AssetGalleryCompactCard$1 = build.exports.trackWindowScroll(React__default.memo(AssetGalleryCompactCard, (prevProps, nextProps) => {
1248
- const reactiveProps = ['selectable', 'selected', 'extendedSelectMode', 'softSelected', 'asset.previewUrl', 'asset.overlay', 'hasHeightAndWidth', 'collapseExtraInfo'];
1249
- return reactiveProps.every(propKey => get(prevProps, propKey) === get(nextProps, propKey));
1250
- }));
1251
-
1252
- const AssetGalleryWrapper = styled.div.attrs(applyDefaultTheme)`
1253
- ${props => props.disabled && css`
1254
- cursor: not-allowed;
1255
- `};
1256
- `;
1257
- const AssetGalleryGridCard$2 = styled.div.attrs(applyDefaultTheme)`
1258
- display: block;
1259
- position: relative;
1260
- height: 100%;
1261
- margin: 0;
1262
- box-sizing: border-box;
1263
- border-width: ${props => {
1264
- const {
1265
- selected,
1266
- softSelected,
1267
- hasError,
1268
- completed
1269
- } = props;
1270
- return selected || softSelected || hasError || completed ? 3 : 1;
1271
- }}px;
1272
- border-style: solid;
1273
- text-decoration: none;
1274
- cursor: pointer;
1275
-
1276
- ${props => props.theme.themeProp('color', props.theme.getColor('gray-300'), props.theme.getColor('gray-700'))}
1277
-
1278
- ${props => props.disabled && css`
1279
- pointer-events: none;
1280
- opacity: 0.4;
1281
- `};
1282
-
1283
- ${props => props.extendedSelectMode && css`
1284
- cursor: pointer;
1285
- `}
1286
-
1287
- ${props => {
1288
- if (props.$softSelected) {
1289
- return props.theme.themeProp('border-color', rgba(props.theme.getColor('gray-100'), 0.5), rgba(props.theme.getColor('gray-700'), 0.5));
1290
- }
1291
- if (props.selected) {
1292
- if (props.customSelectedBorder) {
1293
- return props.theme.themeProp('border-color', props.customSelectedBorder[0], props.customSelectedBorder[1]);
1294
- } else {
1295
- return props.theme.themeProp('border-color', props.theme.getColor('gray-100'), props.theme.getColor('gray-700'));
1296
- }
1297
- }
1298
- if (props.completed) {
1299
- return props.theme.themeProp('border-color', props.theme.getColor('emerald-500'), rgba(props.theme.getColor('emerald-500'), 0.7));
1300
- }
1301
- if (props.hasError) {
1302
- return props.theme.themeProp('border-color', props.theme.getColor('red-600'), rgba(props.theme.getColor('red-500'), 0.7));
1303
- }
1304
- return props.theme.themeProp('border-color', props.theme.getColor('gray-700'), props.theme.getColor('gray-300'));
1305
- }};
1306
- `;
1307
- const ContentWrapper = styled.div.attrs(applyDefaultTheme)`
1308
- display: flex;
1309
- flex-direction: column;
1310
- box-sizing: border-box;
1311
- padding: ${props => props.selected || props.softSelected ? 4 : 0}px;
1312
- padding-top: 35px;
1313
- height: 100%;
1314
- `;
1315
- const Asset = styled.div`
1316
- display: flex;
1317
- flex-direction: column;
1318
- align-items: center;
1319
- justify-content: flex-start;
1320
- position: relative;
1321
- padding: 0 36px;
1322
- min-height: 200px;
1323
- box-sizing: border-box;
1324
-
1325
- video {
1326
- display: block;
1327
- }
1328
-
1329
- .audio {
1330
- display: flex;
1331
- justify-content: center;
1332
- svg {
1333
- width: 25%;
1334
- }
1335
- }
1336
- `;
1337
- const Figure = styled.figure`
1338
- position: relative;
1339
- display: flex;
1340
- flex-direction: column;
1341
- justify-content: flex-start;
1342
- margin: 0;
1343
-
1344
- img,
1345
- video,
1346
- .audio {
1347
- display: block;
1348
- max-height: 200px;
1349
- width: 100%;
1350
- box-sizing: border-box;
1351
-
1352
- ${props => props.hasHeightAndWidth ? css`
1353
- object-fit: cover;
1354
- ` : css`
1355
- object-fit: contain;
1356
- `}
1357
- }
1358
-
1359
- .audio {
1360
- display: flex;
1361
- height: 200px;
1362
- justify-content: center;
1363
- svg {
1364
- width: 25%;
1365
- }
1366
- }
1367
- `;
1368
- const FigureOverlayBackdrop = styled.div.attrs(applyDefaultTheme)`
1369
- position: absolute;
1370
- inset: 0;
1371
- opacity: ${props => props.selected ? 0.6 : 0};
1372
- background-color: ${props => props.selected ? '#ACCEF7' : 'transparent'};
1373
- `;
1374
- const Overlay = styled.div.attrs(applyDefaultTheme)`
1375
- position: absolute;
1376
- top: 0;
1377
- bottom: 0;
1378
- left: 0;
1379
- right: 0;
1380
- `;
1381
- const OverlayBackdrop = styled.div.attrs(applyDefaultTheme)`
1382
- position: absolute;
1383
- top: 0;
1384
- bottom: 0;
1385
- left: 0;
1386
- right: 0;
1387
- opacity: 0;
1388
- transition: opacity 220ms;
1389
- ${props => !props.selected ? css`
1390
- background: radial-gradient(
1391
- ellipse at center,
1392
- rgba(0, 0, 0, 0.3) 27%,
1393
- rgba(0, 0, 0, 0.5) 60%,
1394
- rgba(0, 0, 0, 0.7) 90%
1395
- );
1396
- ` : null}
1397
-
1398
- ${props => (props.selected || props.softSelected) && css`
1399
- opacity: 1;
1400
- `}
1401
-
1402
- ${Overlay}:hover & {
1403
- opacity: 1;
1404
- }
1405
-
1406
- ${AssetGalleryGridCard$2}:hover & {
1407
- opacity: 1;
1408
- }
1409
- `;
1410
- const OverlayInfo = styled.div.attrs(applyDefaultTheme)`
1411
- position: absolute;
1412
- top: 0;
1413
- bottom: 0;
1414
- left: 0;
1415
- right: 0;
1416
- display: flex;
1417
- flex-direction: column;
1418
- justify-content: space-between;
1419
- padding: 15px 12px 10px;
1420
- color: ${props => props.theme.getColor('gray-100')};
1421
- `;
1422
- const OverlaySelected = styled.div.attrs(applyDefaultTheme)`
1423
- position: absolute;
1424
- top: 0;
1425
- bottom: 0;
1426
- left: 0;
1427
- right: 0;
1428
- pointer-events: none;
1429
- `;
1430
- const OverlayInfoTop = styled.div.attrs(applyDefaultTheme)`
1431
- position: absolute;
1432
- left: 0;
1433
- right: 0;
1434
- top: 0;
1435
- padding: 8px;
1436
- display: flex;
1437
- `;
1438
- const OverlayInfoTopVersions = styled.div.attrs(applyDefaultTheme)`
1439
- opacity: 1;
1440
-
1441
- ${AssetGalleryGridCard$2}:hover & {
1442
- opacity: 0;
1443
- }
1444
- `;
1445
- const OverlayInfoTopWarning = styled.div.attrs(applyDefaultTheme)`
1446
- margin-left: auto;
1447
- height: 24px;
1448
- width: 24px;
1449
- border-radius: 50%;
1450
- box-sizing: border-box;
1451
- padding: ${props => props.type === 'error' ? 0 : '4px'};
1452
- background-color: ${props => props.type === 'error' ? props.theme.getColor('red-500') : props.theme.getColor('gray-100')};
1453
- opacity: 1;
1454
-
1455
- svg {
1456
- width: 100%;
1457
- color: ${props => props.type === 'error' ? props.theme.getColor('gray-100') : props.theme.getColor('gray-700')};
1458
- }
1459
-
1460
- ${AssetGalleryGridCard$2}:hover & {
1461
- opacity: 0;
1462
- }
1463
- `;
1464
- const OverlayInfoTopActions = styled.div.attrs(applyDefaultTheme)`
1465
- position: absolute;
1466
- top: 0;
1467
- right: 0;
1468
- padding: 4px;
1469
- display: flex;
1470
- flex-direction: column;
1471
- justify-content: space-between;
1472
- transition: opacity 220ms;
1473
- z-index: 99999;
1474
- ${props => props.theme.themeProp('color', props.theme.getColor('gray-300'), props.theme.getColor('gray-700'))}
1475
-
1476
- opacity: ${props => props.isCardHovered ? 1 : 0};
1477
- `;
1478
- const OverlayInfoBottom = styled.div.attrs(applyDefaultTheme)`
1479
- position: absolute;
1480
- left: 0;
1481
- right: 0;
1482
- bottom: 0;
1483
- padding: 8px;
1484
- display: flex;
1485
- `;
1486
- const OverlayInfoBottomSelectButton = styled.div.attrs(applyDefaultTheme)`
1487
- opacity: ${props => props.selected ? 1 : 0};
1488
- flex-shrink: 0;
1489
- cursor: pointer;
1490
- transition: opacity 220ms;
1491
-
1492
- > svg {
1493
- width: 23px;
1494
- height: 100%;
1495
- transition: opacity 120ms;
1496
- opacity: ${props => props.selected ? 1 : 0.5};
1497
- }
1498
-
1499
- ${Overlay}:hover & {
1500
- opacity: 1;
1501
- }
1502
-
1503
- ${AssetGalleryGridCard$2}:hover & {
1504
- opacity: 1;
1505
- }
1506
- `;
1507
- const OverlayInfoBottomMediaIcon = styled.div.attrs(applyDefaultTheme)`
1508
- margin-left: auto;
1509
- opacity: 1;
1510
- ${AssetGalleryGridCard$2}:hover & {
1511
- opacity: 0;
1512
- }
1513
- `;
1514
- const ConsumerDefinedOverlay = styled.div.attrs(applyDefaultTheme)`
1515
- position: absolute;
1516
- top: 0;
1517
- bottom: 0;
1518
- left: 0;
1519
- right: 0;
1520
- pointer-events: none;
1521
- `;
1522
- const Fragment = styled.div`
1523
- margin: 4px;
1524
- `;
1525
-
1526
- const ComputedRootComponent = ({
1527
- component,
1528
- asset,
1529
- ...props
1530
- }) => {
1531
- const newProps = mapKeys(omit(props, ['theme', 'extendedSelectMode']), (_, key) => key === 'innerRef' ? 'ref' : key);
1532
- if (component) {
1533
- if (!isFunction(component)) throw Error('Expected a function in component-prop');
1534
- if (React__default.isValidElement(component(asset, newProps.children))) {
1535
- return React__default.cloneElement(component(asset, newProps.children), omit(newProps, ['children']));
1536
- }
1537
- }
1538
- return React__default.createElement(AssetGalleryGridCard$2, _extends$4({
1539
- ref: newProps.ref
1540
- }, newProps));
1541
- };
1542
- const ComputedActionButton = React__default.forwardRef(function ComputedActionButton({
1543
- component,
1544
- className,
1545
- subActions = [],
1546
- isSubActionsOpened,
1547
- ...props
1548
- }, forwardedRef) {
1549
- const newProps = props;
1550
- if (!isEmpty(subActions)) {
1551
- const contextMenuItems = subActions.map((subAction, key) => {
1552
- const {
1553
- onClick,
1554
- title,
1555
- icon
1556
- } = subAction;
1557
- return React__default.createElement(ContextMenuItem, {
1558
- key: key,
1559
- onClickEffect: onClick,
1560
- title: title,
1561
- icon: icon
1562
- });
1563
- });
1564
- const contextMenu = React__default.createElement(ContextMenu, null, contextMenuItems);
1565
- newProps.children = React__default.createElement(Popover, {
1566
- contextMenu: true,
1567
- content: contextMenu,
1568
- placement: 'bottom-end',
1569
- visible: isSubActionsOpened,
1570
- zIndex: 10001,
1571
- offset: [0, -8]
1572
- }, React__default.createElement(ActionButton, {
1573
- useShadow: true,
1574
- active: true,
1575
- ref: forwardedRef,
1576
- className: className,
1577
- icon: newProps.icon,
1578
- backgroundColors: ['black', 'white'],
1579
- onClick: newProps.onClick,
1580
- actionWidthHeight: newProps.actionWidthHeight
1581
- }));
1582
- } else {
1583
- newProps.children = React__default.createElement(ActionButton, {
1584
- useShadow: true,
1585
- active: true,
1586
- ref: forwardedRef,
1587
- className: className,
1588
- icon: newProps.icon,
1589
- onClick: newProps.onClick,
1590
- backgroundColors: ['black', 'white'],
1591
- actionWidthHeight: newProps.actionWidthHeight
1592
- });
1593
- }
1594
- if (component) {
1595
- if (!isFunction(component)) throw Error('Expected a function in component-prop');
1596
- if (React__default.isValidElement(component())) {
1597
- return React__default.cloneElement(component(), {
1598
- ...omit(newProps, 'icon')
1599
- });
1600
- }
1601
- }
1602
- return React__default.createElement(React__default.Fragment, null, newProps.children);
1603
- });
1604
- const AssetGalleryGridCard = props => {
1605
- const {
1606
- asset,
1607
- selectable,
1608
- selected,
1609
- customSelectedBorder,
1610
- extendedSelectMode,
1611
- onAssetSelected,
1612
- onAssetUnselected,
1613
- softSelected,
1614
- component,
1615
- scrollPosition
1616
- } = props;
1617
- const [isCardHovered, setIsCardHovered] = React__default.useState(false);
1618
- const [openedSubActions, updateOpenedSubActions] = React__default.useState([]);
1619
- useEffect(() => {
1620
- const newOpenedSubActions = (asset?.actions ?? []).map(() => false);
1621
- updateOpenedSubActions(newOpenedSubActions);
1622
- }, [asset]);
1623
- useEffect(() => {
1624
- if (!isCardHovered && openedSubActions?.length) {
1625
- updateOpenedSubActions(openedSubActions.map(() => false));
1626
- }
1627
- }, [isCardHovered]);
1628
- const mouseHasEnteredCard = useCallback(() => {
1629
- setIsCardHovered(true);
1630
- }, []);
1631
- const mouseHasLeftCard = useCallback(() => {
1632
- setIsCardHovered(false);
1633
- }, []);
1634
- const onSubActionsViewToggle = useCallback(actionIndex => {
1635
- const newOpenedSubActions = openedSubActions.map((isOpened, index) => {
1636
- if (index !== actionIndex) {
1637
- return false;
1638
- }
1639
- return !isOpened;
1640
- });
1641
- updateOpenedSubActions(newOpenedSubActions);
1642
- }, [openedSubActions]);
1643
- const videoPlayerRef = useRef();
1644
- const cardRef = useRef();
1645
- const dragRef = useRef(null);
1646
- function onMouseEnter(event) {
1647
- if (videoPlayerRef.current) {
1648
- const playPromise = videoPlayerRef.current.play();
1649
- if (playPromise !== undefined) {
1650
- playPromise.then(() => {}).catch(() => {});
1651
- }
1652
- }
1653
- if (isFunction(asset.onMouseEnter)) {
1654
- asset.onMouseEnter(event, asset);
1655
- }
1656
- mouseHasEnteredCard();
1657
- }
1658
- function onMouseLeave() {
1659
- if (videoPlayerRef.current) {
1660
- videoPlayerRef.current.pause();
1661
- }
1662
- mouseHasLeftCard();
1663
- }
1664
- function onClick(event) {
1665
- if (extendedSelectMode) {
1666
- return onSelectClick(event);
1667
- }
1668
- if (isFunction(asset.onClick)) {
1669
- asset.onClick(event, asset);
1670
- }
1671
- }
1672
- function onSelectClick(event) {
1673
- event.preventDefault();
1674
- event.stopPropagation();
1675
- if (selected) {
1676
- return onAssetUnselected(asset.key);
1677
- }
1678
- return onAssetSelected(asset.key);
1679
- }
1680
- const onActionClick = useCallback((event, action, index) => {
1681
- event.preventDefault();
1682
- event.stopPropagation();
1683
- if (isFunction(action?.onClick)) {
1684
- action.onClick(asset);
1685
- }
1686
- if (!isEmpty(action?.subActions)) {
1687
- onSubActionsViewToggle(index);
1688
- }
1689
- }, [onSubActionsViewToggle]);
1690
- const shouldOpenSubActions = useCallback(actionIndex => openedSubActions[actionIndex], [openedSubActions]);
1691
- function onContextMenu(event) {
1692
- event.preventDefault();
1693
- asset.onContextMenu(event);
1694
- }
1695
- function renderPreview(asset) {
1696
- let previewContent = null;
1697
- if (asset.fileType?.toLowerCase() === 'video') {
1698
- previewContent = React__default.createElement(build.exports.LazyLoadComponent, {
1699
- scrollPosition: scrollPosition
1700
- }, React__default.createElement("video", {
1701
- ref: videoPlayerRef,
1702
- loop: true,
1703
- muted: true
1704
- }, React__default.createElement("source", {
1705
- src: asset.previewUrl,
1706
- type: "video/mp4"
1707
- })));
1708
- } else if (asset.fileType?.toLowerCase() === 'audio') {
1709
- previewContent = React__default.createElement(build.exports.LazyLoadComponent, {
1710
- scrollPosition: scrollPosition
1711
- }, React__default.createElement("div", {
1712
- className: "audio"
1713
- }, React__default.createElement(SvgHeadset, null)));
1714
- } else {
1715
- previewContent = React__default.createElement(build.exports.LazyLoadImage, {
1716
- alt: asset.title,
1717
- src: asset.previewUrl,
1718
- height: "100%",
1719
- width: "100%",
1720
- delayMethod: "debounce",
1721
- delayTime: 0,
1722
- threshold: 1500,
1723
- scrollPosition: scrollPosition
1724
- });
1725
- }
1726
- return React__default.createElement(Figure, {
1727
- selected: selected
1728
- }, previewContent, React__default.createElement(FigureOverlayBackdrop, {
1729
- selected: selected
1730
- }), React__default.createElement(Overlay, {
1731
- ref: cardRef
1732
- }, React__default.createElement(OverlayBackdrop, {
1733
- $softSelected: softSelected,
1734
- selected: selected
1735
- }), React__default.createElement(OverlayInfo, null, React__default.createElement(OverlayInfoTop, null, React__default.createElement(OverlayInfoTopVersions, null, renderVersionsBadge()), asset?.note?.title && React__default.createElement(OverlayInfoTopWarning, {
1736
- type: asset?.note?.type
1737
- }, React__default.createElement(SvgWarningCircle, null)), React__default.createElement(OverlayInfoTopActions, {
1738
- isCardHovered: isCardHovered
1739
- }, asset.actions && asset.actions.map((action, index) => React__default.createElement(Tooltip, {
1740
- key: `${asset.key}-${action.title}`,
1741
- content: action.title
1742
- }, React__default.createElement(Fragment, {
1743
- key: `${asset.key}-${action.title}`,
1744
- as: ComputedActionButton,
1745
- component: action.component,
1746
- className: action.className,
1747
- icon: action.icon,
1748
- isCardHovered: isCardHovered,
1749
- isSubActionsOpened: shouldOpenSubActions(index),
1750
- onClick: event => onActionClick(event, action, index),
1751
- subActions: action?.subActions,
1752
- actionWidthHeight: action.actionWidthHeight
1753
- }))))), React__default.createElement(OverlayInfoBottom, null, selectable && React__default.createElement(OverlayInfoBottomSelectButton, {
1754
- selected: selected
1755
- }, React__default.createElement(SvgCheckRectangleFilled, {
1756
- onClick: onSelectClick
1757
- })), React__default.createElement(OverlayInfoBottomMediaIcon, null, renderMediaBadge()))), selectable && React__default.createElement(OverlaySelected, {
1758
- selected: selected,
1759
- $softSelected: softSelected,
1760
- customSelectedBorder: customSelectedBorder
1761
- })), asset.overlay && React__default.createElement(ConsumerDefinedOverlay, null, asset.overlay));
1762
- }
1763
- useEffect(() => {
1764
- if (isFunction(asset.onContextMenu)) {
1765
- if (cardRef.current) {
1766
- cardRef.current.addEventListener('contextmenu', onContextMenu);
1767
- }
1768
- return () => {
1769
- if (cardRef.current) {
1770
- cardRef.current.removeEventListener('contextmenu', onContextMenu);
1771
- }
1772
- };
1773
- }
1774
- }, []);
1775
- function onDragstart(event) {
1776
- asset.onDragstart(event);
1777
- }
1778
- useEffect(() => {
1779
- if (isFunction(asset.onDragstart)) {
1780
- if (dragRef.current) {
1781
- dragRef.current.addEventListener('dragstart', onDragstart);
1782
- }
1783
- return () => {
1784
- if (dragRef.current) {
1785
- dragRef.current.removeEventListener('dragstart', onDragstart);
1786
- }
1787
- };
1788
- }
1789
- }, []);
1790
- useEffect(() => {
1791
- if (softSelected) {
1792
- cardRef.current.scrollIntoView({
1793
- behavior: 'smooth',
1794
- block: 'nearest'
1795
- });
1796
- }
1797
- }, [softSelected]);
1798
- const renderVersionsBadge = useCallback(() => {
1799
- if (!asset?.versions) return null;
1800
- return React__default.createElement(Badge, {
1801
- badgeIcon: React__default.createElement(SvgLayers, null),
1802
- badgeContent: asset.versions,
1803
- backgroundColors: ['black', 'black'],
1804
- colors: ['#f7f8f9', '#f7f8f9'],
1805
- fontSize: 12,
1806
- fontWeight: 500,
1807
- lineHeight: 16,
1808
- verticalPadding: 4,
1809
- horizontalPadding: 8
1810
- });
1811
- }, [asset]);
1812
- const renderMediaBadge = useCallback(() => {
1813
- let badgeIcon = null;
1814
- let badgeContent = null;
1815
- if (asset?.fileType === 'video') {
1816
- badgeIcon = React__default.createElement(SvgPlay, null);
1817
- }
1818
- if (asset?.duration) {
1819
- badgeContent = convertMsToHMS(asset.duration);
1820
- }
1821
- if (!badgeIcon && !badgeContent) return null;
1822
- return React__default.createElement(Badge, {
1823
- badgeIcon: badgeIcon,
1824
- badgeContent: badgeContent,
1825
- backgroundColors: ['black', 'black'],
1826
- colors: ['#f7f8f9', '#f7f8f9'],
1827
- fontSize: 12,
1828
- fontWeight: 500,
1829
- lineHeight: 16,
1830
- verticalPadding: 4,
1831
- horizontalPadding: 8,
1832
- minWidth: 32,
1833
- height: 24
1834
- });
1835
- }, [asset]);
1836
- const renderSummary = useCallback(() => {
1837
- return React__default.createElement(SummaryCard, {
1838
- activeSummaryCard: true,
1839
- title: asset?.title || '',
1840
- description: asset?.description || '',
1841
- instructions: asset?.imageRights || '',
1842
- instructionsType: 'warning',
1843
- footerLeft: asset?.summary?.footerLeft || '',
1844
- footerRight: asset?.summary?.footerRight || '',
1845
- compact: false
1846
- });
1847
- }, [asset]);
1848
- return React__default.createElement(AssetGalleryWrapper, {
1849
- disabled: asset.disabled
1850
- }, React__default.createElement(AssetGalleryGridCard$2, {
1851
- as: ComputedRootComponent,
1852
- component: component,
1853
- asset: asset,
1854
- disabled: asset.disabled,
1855
- onClick: onClick,
1856
- extendedSelectMode: extendedSelectMode,
1857
- onMouseEnter: onMouseEnter,
1858
- onMouseLeave: onMouseLeave,
1859
- draggable: asset.draggable,
1860
- innerRef: dragRef,
1861
- selected: selected,
1862
- $softSelected: softSelected,
1863
- completed: asset?.completed,
1864
- $hasError: asset?.hasError,
1865
- customSelectedBorder: customSelectedBorder
1866
- }, React__default.createElement(ContentWrapper, {
1867
- layout: asset.layout,
1868
- ref: cardRef,
1869
- $softSelected: softSelected,
1870
- selected: selected,
1871
- customSelectedBorder: customSelectedBorder
1872
- }, React__default.createElement(Asset, {
1873
- "data-id": "ss",
1874
- selected: selected
1875
- }, asset.previewUrl && renderPreview(asset)), renderSummary())));
1876
- };
1877
- AssetGalleryGridCard.propTypes = process.env.NODE_ENV !== "production" ? {
1878
- asset: PropTypes.shape(assetShapeWithLayout).isRequired,
1879
- selectable: PropTypes.bool,
1880
- selected: PropTypes.bool,
1881
- customSelectedBorder: PropTypes.arrayOf(PropTypes.string),
1882
- extendedSelectMode: PropTypes.bool,
1883
- onAssetSelected: PropTypes.func.isRequired,
1884
- onAssetUnselected: PropTypes.func.isRequired,
1885
- softSelected: PropTypes.bool.isRequired,
1886
- component: PropTypes.func,
1887
- scrollPosition: PropTypes.number
1888
- } : {};
1889
- AssetGalleryGridCard.defaultProps = {};
1890
- var AssetGalleryGridCard$1 = build.exports.trackWindowScroll(React__default.memo(AssetGalleryGridCard, (prevProps, nextProps) => {
1891
- const reactiveProps = ['selectable', 'selected', 'extendedSelectMode', 'softSelected', 'asset.previewUrl', 'asset.overlay', 'asset.layout'];
1892
- return reactiveProps.every(propKey => get(prevProps, propKey) === get(nextProps, propKey));
1893
- }));
1894
-
1895
- const AssetGalleryBase = React__default.forwardRef(function AssetGalleryBase({
1896
- assets: assetsProp,
1897
- activeSummaryCard,
1898
- displayIcon,
1899
- viewMode,
1900
- thumbnailMaxHeight,
1901
- selectable,
1902
- customSelectedBorder,
1903
- selectedAssetKeys,
1904
- onAssetSelected,
1905
- onAssetUnselected,
1906
- softSelectable,
1907
- softSelectedAssetKey,
1908
- scrollElement: scrollElementProp,
1909
- onAssetSoftSelectedChanged,
1910
- component,
1911
- ...props
1912
- }, forwardedRef) {
1913
- const assetGalleryDOMNode = useRef();
1914
- const assetGalleryCompactRef = useMergedRefs(forwardedRef, assetGalleryDOMNode);
1915
- const assetGalleryWidth = useRef(0);
1916
- const minimumRowAspectRatio = useRef(0);
1917
- const calculatedAssets = useRef([]);
1918
- const [assets, setAssets] = useState([]);
1919
- const MAXIMUM_ROW_HEIGHT = useMemo(() => viewMode === 'grid' ? 450 : thumbnailMaxHeight, [viewMode, thumbnailMaxHeight]);
1920
- const SPACE_BETWEEN_ASSETS = 8;
1921
- const SPACE_UNDER_ASSETS = 8;
1922
- const PRIMARY_SCROLL_BUFFER_HEIGHT = 1500;
1923
- const SECONDARY_SCROLL_BUFFER_HEIGHT = 500;
1924
- const GRID_VIEW_MODE_ASSET_MIN_WIDTH = 300;
1925
- const GRID_VIEW_MODE_ASSET_HEIGHT = 427;
1926
- const MISSING_WIDTH_PLACEHOLDER = 1920;
1927
- const MISSING_HEIGHT_PLACEHOLDER = 1080;
1928
- const isBrowser = typeof window !== 'undefined';
1929
- const scrollElement = scrollElementProp || window;
1930
- const previousYOffset = useRef(isBrowser ? scrollElement.pageYOffset : 0);
1931
- const latestYOffset = useRef(isBrowser ? scrollElement.pageYOffset : 0);
1932
- const scrollDirection = useRef('down');
1933
- useIsomorphicLayoutEffect(() => {
1934
- if (!assetGalleryDOMNode.current) return;
1935
- const throttledOnResize = throttle(onResize, 1);
1936
- const resizeObserver = new ResizeObserver(throttledOnResize);
1937
- resizeObserver.observe(assetGalleryDOMNode.current);
1938
- function onResize(entries) {
1939
- entries.forEach(entry => {
1940
- if (assetGalleryWidth.current === entry.contentRect.width) return;
1941
- window.requestAnimationFrame(() => {
1942
- assetGalleryWidth.current = entry.contentRect.width;
1943
- main();
1944
- });
1945
- });
1946
- }
1947
- return () => {
1948
- resizeObserver.unobserve(assetGalleryDOMNode.current);
1949
- };
1950
- }, [assetsProp, assetGalleryDOMNode, MAXIMUM_ROW_HEIGHT]);
1951
- useEffect(() => {
1952
- main();
1953
- }, [MAXIMUM_ROW_HEIGHT, assetsProp]);
1954
- const main = () => {
1955
- calculateAssetGalleryAspectRatio();
1956
- calculateLayout();
1957
- calculateVisibility();
1958
- };
1959
- const calculateAssetGalleryAspectRatio = () => {
1960
- if (assetGalleryWidth.current > 0) {
1961
- minimumRowAspectRatio.current = calculateAspectRatio(assetGalleryWidth.current, MAXIMUM_ROW_HEIGHT);
1962
- }
1963
- };
1964
- const calculateLayout = () => {
1965
- const assetsWithoutAKey = assetsProp.filter(a => !a.key);
1966
- if (assetsWithoutAKey.length > 0) {
1967
- assetsProp = assetsProp.filter(a => a.key);
1968
- assetsWithoutAKey.forEach(a => console.warn('Omitted asset from the gallery because it was missing the unique `key` property.', a));
1969
- }
1970
- if (viewMode === 'grid' && assetGalleryWidth.current > 0) {
1971
- let row = [];
1972
- let translateX = 0;
1973
- let translateY = 0;
1974
- const computedAssets = [];
1975
- let lastGroup = null;
1976
- const desiredAssetCountInRow = Math.floor(assetGalleryWidth.current / GRID_VIEW_MODE_ASSET_MIN_WIDTH) || 1;
1977
- const desiredAssetWidth = assetGalleryWidth.current / desiredAssetCountInRow - SPACE_BETWEEN_ASSETS + SPACE_BETWEEN_ASSETS / desiredAssetCountInRow;
1978
- assetsProp.forEach((asset, index) => {
1979
- if (asset.group && asset.group !== lastGroup) {
1980
- computedAssets.push({
1981
- title: asset.group,
1982
- key: asset.key,
1983
- layout: {
1984
- type: 'groupLabel',
1985
- height: 50,
1986
- translateX: Math.round(translateX),
1987
- translateY: Math.round(translateY)
1988
- }
1989
- });
1990
- lastGroup = asset.group;
1991
- translateY += 50 + SPACE_UNDER_ASSETS;
1992
- }
1993
- row.push(asset);
1994
- if (row.length === desiredAssetCountInRow || index + 1 === assetsProp.length || assetsProp[index + 1]?.group && assetsProp[index + 1].group !== asset.group) {
1995
- row.forEach(rowAsset => {
1996
- computedAssets.push({
1997
- ...rowAsset,
1998
- layout: {
1999
- type: 'asset',
2000
- width: Math.round(desiredAssetWidth),
2001
- height: Math.round(GRID_VIEW_MODE_ASSET_HEIGHT),
2002
- translateX: Math.round(translateX),
2003
- translateY: Math.round(translateY)
2004
- }
2005
- });
2006
- translateX += desiredAssetWidth + SPACE_BETWEEN_ASSETS;
2007
- });
2008
- row = [];
2009
- translateX = 0;
2010
- translateY += GRID_VIEW_MODE_ASSET_HEIGHT + SPACE_UNDER_ASSETS;
2011
- }
2012
- });
2013
- calculatedAssets.current = computedAssets;
2014
- } else {
2015
- if (minimumRowAspectRatio.current > 0) {
2016
- let row = [];
2017
- let translateX = 0;
2018
- let translateY = 0;
2019
- let rowAspectRatio = 0;
2020
- let lastGroup = null;
2021
- const computedAssets = [];
2022
- assetsProp.forEach((asset, index) => {
2023
- if (asset.group && asset.group !== lastGroup) {
2024
- computedAssets.push({
2025
- title: asset.group,
2026
- key: asset.key,
2027
- layout: {
2028
- type: 'groupLabel',
2029
- height: 50,
2030
- translateX: Math.round(translateX),
2031
- translateY: Math.round(translateY)
2032
- }
2033
- });
2034
- lastGroup = asset.group;
2035
- translateY += 50 + SPACE_UNDER_ASSETS;
2036
- }
2037
- rowAspectRatio += calculateAspectRatio(asset.width || MISSING_WIDTH_PLACEHOLDER, asset.height || MISSING_HEIGHT_PLACEHOLDER);
2038
- row.push(asset);
2039
- if (rowAspectRatio >= minimumRowAspectRatio.current || index + 1 === assetsProp.length || assetsProp[index + 1]?.group && assetsProp[index + 1].group !== asset.group) {
2040
- rowAspectRatio = Math.max(rowAspectRatio, minimumRowAspectRatio.current);
2041
- const totalDesiredWidthOfImages = assetGalleryWidth.current - SPACE_BETWEEN_ASSETS * (row.length - 1);
2042
- const rowHeight = totalDesiredWidthOfImages / rowAspectRatio;
2043
- row.forEach(rowAsset => {
2044
- const assetWidth = rowHeight * calculateAspectRatio(rowAsset.width || MISSING_WIDTH_PLACEHOLDER, rowAsset.height || MISSING_HEIGHT_PLACEHOLDER);
2045
- computedAssets.push({
2046
- ...rowAsset,
2047
- layout: {
2048
- type: 'asset',
2049
- width: Math.round(assetWidth),
2050
- height: Math.round(rowHeight),
2051
- translateX: Math.round(translateX),
2052
- translateY: Math.round(translateY),
2053
- hasHeightAndWidth: Boolean(rowAsset.width && rowAsset.height)
2054
- }
2055
- });
2056
- translateX += assetWidth + SPACE_BETWEEN_ASSETS;
2057
- });
2058
- row = [];
2059
- rowAspectRatio = 0;
2060
- translateY += rowHeight + SPACE_UNDER_ASSETS;
2061
- translateX = 0;
2062
- }
2063
- });
2064
- calculatedAssets.current = computedAssets;
2065
- }
2066
- }
2067
- };
2068
- function calculateAspectRatio(width, height) {
2069
- return width / height;
2070
- }
2071
- const totalGalleryHeight = useMemo(() => {
2072
- if (assets.length === 0) {
2073
- return 0;
2074
- }
2075
- const lastAsset = assets[assets.length - 1];
2076
- if (assets.length < 8) {
2077
- return (lastAsset.layout.translateY + lastAsset.layout.height) * 2;
2078
- }
2079
- return lastAsset.layout.translateY + lastAsset.layout.height;
2080
- }, [assets]);
2081
- useEffect(() => {
2082
- const throttledOnScroll = throttle(onScroll, 200);
2083
- scrollElement.addEventListener('scroll', throttledOnScroll, false);
2084
- return () => scrollElement.removeEventListener('scroll', throttledOnScroll, false);
2085
- }, [assetGalleryDOMNode, calculatedAssets]);
2086
- function onScroll() {
2087
- setScrollPositionAndDirection();
2088
- calculateVisibility();
2089
- }
2090
- function setScrollPositionAndDirection() {
2091
- const newYOffset = scrollElement.pageYOffset;
2092
- previousYOffset.current = latestYOffset.current;
2093
- latestYOffset.current = newYOffset;
2094
- scrollDirection.current = latestYOffset.current > previousYOffset.current ? 'down' : 'up';
2095
- }
2096
- const calculateVisibility = () => {
2097
- if (!assetGalleryDOMNode.current) return;
2098
- const bufferTop = scrollDirection.current === 'up' ? PRIMARY_SCROLL_BUFFER_HEIGHT : SECONDARY_SCROLL_BUFFER_HEIGHT;
2099
- const bufferBottom = scrollDirection.current === 'up' ? SECONDARY_SCROLL_BUFFER_HEIGHT : PRIMARY_SCROLL_BUFFER_HEIGHT;
2100
- const containerOffset = getOffsetTop(assetGalleryDOMNode.current);
2101
- const scrollerHeight = scrollElement.innerHeight;
2102
- const yOffset = latestYOffset.current;
2103
- const minTranslateYPlusHeight = yOffset - containerOffset - bufferTop;
2104
- const maxTranslateY = yOffset - containerOffset + scrollerHeight + bufferBottom;
2105
- const finalizedAssets = calculatedAssets.current.map(asset => {
2106
- if (scrollElement.self == window && (asset.layout.translateY + asset.layout.height < minTranslateYPlusHeight || asset.layout.translateY > maxTranslateY)) {
2107
- asset.layout.show = false;
2108
- } else {
2109
- asset.layout.show = true;
2110
- }
2111
- return asset;
2112
- });
2113
- setAssets(finalizedAssets);
2114
- };
2115
- function getOffsetTop(elem) {
2116
- let offsetTop = 0;
2117
- do {
2118
- if (!isNaN(elem.offsetTop)) {
2119
- offsetTop += elem.offsetTop;
2120
- }
2121
- elem = elem.offsetParent;
2122
- } while (elem);
2123
- return offsetTop;
2124
- }
2125
- const handleKeyPress = useCallback(e => {
2126
- function isElementVisible(el) {
2127
- const rect = el.getBoundingClientRect(),
2128
- vWidth = scrollElement.innerWidth || document.documentElement.clientWidth,
2129
- vHeight = scrollElement.innerHeight || document.documentElement.clientHeight,
2130
- efp = function (x, y) {
2131
- return document.elementFromPoint(x, y);
2132
- };
2133
- if (rect.right < 0 || rect.bottom < 0 || rect.left > vWidth || rect.top > vHeight) return false;
2134
- 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));
2135
- }
2136
- function softSelectFirstVisibleAsset() {
2137
- const visibleAssets = assets.filter(asset => asset.layout.show);
2138
- for (let i = 0; i < assetGalleryDOMNode.current.children.length; i++) {
2139
- if (isElementVisible(assetGalleryDOMNode.current.children[i])) {
2140
- onAssetSoftSelectedChanged(visibleAssets[i].key);
2141
- break;
2142
- }
2143
- }
2144
- }
2145
- if (assets.length === 0) return;
2146
- if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {
2147
- if (softSelectedAssetKey === null) {
2148
- softSelectFirstVisibleAsset();
2149
- return;
2150
- }
2151
- }
2152
- if (e.key === 'ArrowLeft') {
2153
- const previousAssetIndex = assets.findIndex(asset => asset.key === softSelectedAssetKey) - 1;
2154
- const previousAsset = assets[previousAssetIndex];
2155
- if (previousAsset) {
2156
- if (previousAsset.layout.show) {
2157
- onAssetSoftSelectedChanged(previousAsset.key);
2158
- } else {
2159
- softSelectFirstVisibleAsset();
2160
- }
2161
- }
2162
- return;
2163
- }
2164
- if (e.key === 'ArrowRight') {
2165
- const nextAssetIndex = assets.findIndex(asset => asset.key === softSelectedAssetKey) + 1;
2166
- const nextAsset = assets[nextAssetIndex];
2167
- if (nextAsset) {
2168
- if (nextAsset.layout.show) {
2169
- onAssetSoftSelectedChanged(nextAsset.key);
2170
- } else {
2171
- softSelectFirstVisibleAsset();
2172
- }
2173
- }
2174
- return;
2175
- }
2176
- if (e.key === 'Enter') {
2177
- if (softSelectedAssetKey === null) return;
2178
- if (selectedAssetKeys.includes(softSelectedAssetKey)) {
2179
- onAssetUnselected(softSelectedAssetKey);
2180
- } else {
2181
- onAssetSelected(softSelectedAssetKey);
2182
- }
2183
- }
2184
- }, [assets, softSelectedAssetKey, onAssetSoftSelectedChanged, selectedAssetKeys, assetGalleryCompactRef]);
2185
- const handleClick = useCallback(() => {
2186
- onAssetSoftSelectedChanged(null);
2187
- }, []);
2188
- useEffect(() => {
2189
- if (softSelectable) {
2190
- document.addEventListener('keydown', handleKeyPress);
2191
- }
2192
- return () => document.removeEventListener('keydown', handleKeyPress);
2193
- }, [softSelectable, handleKeyPress]);
2194
- useEffect(() => {
2195
- if (softSelectable && softSelectedAssetKey !== null) {
2196
- document.addEventListener('click', handleClick, true);
2197
- }
2198
- return () => document.removeEventListener('click', handleClick, true);
2199
- }, [softSelectable, softSelectedAssetKey, handleClick]);
2200
- return React__default.createElement(React__default.Fragment, null, React__default.createElement(AssetGalleryBase$1, _extends$4({
2201
- ref: assetGalleryCompactRef,
2202
- style: {
2203
- height: `${totalGalleryHeight}px`
2204
- },
2205
- className: props.className
2206
- }, props), assets.map(asset => asset.layout.show && React__default.createElement(React__default.Fragment, {
2207
- key: `asset-gallery-${asset.layout.type}-${asset.key}`
2208
- }, asset.layout.type === 'groupLabel' && React__default.createElement(GroupLabel, {
2209
- style: {
2210
- transform: `translate3d(${asset.layout.translateX}px,${asset.layout.translateY}px, 0)`,
2211
- height: `${asset.layout.height}px`
2212
- }
2213
- }, asset.title), asset.layout.type === 'asset' && React__default.createElement(AssetGalleryCardBase, {
2214
- style: {
2215
- transform: `translate3d(${asset.layout.translateX}px, ${asset.layout.translateY}px, 0)`,
2216
- width: `${asset.layout.width}px`,
2217
- height: `${asset.layout.height}px`,
2218
- display: 'flex',
2219
- justifyContent: 'center'
2220
- }
2221
- }, viewMode === 'grid' ? React__default.createElement(AssetGalleryGridCard$1, {
2222
- asset: asset,
2223
- selectable: 'selectable' in asset ? asset.selectable : selectable,
2224
- selected: selectedAssetKeys.includes(asset.key),
2225
- customSelectedBorder: customSelectedBorder,
2226
- extendedSelectMode: Boolean(selectedAssetKeys.length),
2227
- onAssetSelected: onAssetSelected,
2228
- onAssetUnselected: onAssetUnselected,
2229
- $softSelected: softSelectedAssetKey === asset.key,
2230
- component: component
2231
- }) : React__default.createElement(AssetGalleryCompactCard$1, {
2232
- asset: asset,
2233
- activeSummaryCard: activeSummaryCard,
2234
- displayIcon: displayIcon,
2235
- $hasHeightAndWidth: asset.layout.hasHeightAndWidth,
2236
- $collapseExtraInfo: asset.layout.width < 90,
2237
- selectable: 'selectable' in asset ? asset.selectable : selectable,
2238
- selected: selectedAssetKeys.includes(asset.key),
2239
- customSelectedBorder: customSelectedBorder,
2240
- extendedSelectMode: Boolean(selectedAssetKeys.length),
2241
- onAssetSelected: onAssetSelected,
2242
- onAssetUnselected: onAssetUnselected,
2243
- $softSelected: softSelectedAssetKey === asset.key,
2244
- component: component
2245
- }))))));
2246
- });
2247
- AssetGalleryBase.propTypes = process.env.NODE_ENV !== "production" ? {
2248
- assets: PropTypes.arrayOf(PropTypes.shape(assetShape)),
2249
- activeSummaryCard: PropTypes.bool,
2250
- displayIcon: PropTypes.string,
2251
- viewMode: PropTypes.oneOf(['compact', 'grid']),
2252
- thumbnailMaxHeight: PropTypes.number,
2253
- selectable: PropTypes.bool,
2254
- customSelectedBorder: PropTypes.arrayOf(PropTypes.string),
2255
- selectedAssetKeys: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.arrayOf(PropTypes.number)]).isRequired,
2256
- scrollElement: PropTypes.instanceOf(Element),
2257
- onAssetSelected: PropTypes.func.isRequired,
2258
- onAssetUnselected: PropTypes.func.isRequired,
2259
- softSelectable: PropTypes.bool,
2260
- softSelectedAssetKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
2261
- onAssetSoftSelectedChanged: PropTypes.func.isRequired,
2262
- component: PropTypes.func,
2263
- className: PropTypes.string
2264
- } : {};
2265
-
2266
- const AssetGallery = React__default.forwardRef(function AssetGallery({
2267
- assets,
2268
- activeSummaryCard,
2269
- viewMode,
2270
- thumbnailMaxHeight,
2271
- selectable,
2272
- customSelectedBorder,
2273
- selectedAssetKeys,
2274
- onSelectedChanged,
2275
- softSelectable,
2276
- scrollElement,
2277
- onSoftSelectedChanged,
2278
- component,
2279
- displayIcon,
2280
- ...props
2281
- }, forwardedRef) {
2282
- const [selectedAssetKeysInternalState, setSelectedAssetKeysInternalState] = useState(selectedAssetKeys || []);
2283
- const [softSelectedAssetKeyInternalState, setSoftSelectedAssetKeyInternalState] = useState(null);
2284
- useEffect(() => {
2285
- setSelectedAssetKeysInternalState(selectedAssetKeys || []);
2286
- }, [selectedAssetKeys]);
2287
- useEffect(() => {
2288
- setSelectedAssetKeysInternalState(current => {
2289
- return current.filter(c => assets.some(a => a.key === c));
2290
- });
2291
- }, [assets.length]);
2292
- useEffect(() => {
2293
- if (selectedAssetKeys === selectedAssetKeysInternalState) return;
2294
- if (isFunction(onSelectedChanged)) {
2295
- onSelectedChanged(selectedAssetKeysInternalState);
2296
- }
2297
- }, [selectedAssetKeysInternalState]);
2298
- useEffect(() => {
2299
- if (isFunction(onSoftSelectedChanged)) {
2300
- onSoftSelectedChanged(softSelectedAssetKeyInternalState);
2301
- }
2302
- }, [softSelectedAssetKeyInternalState]);
2303
- const onSelected = useCallback(assetKey => {
2304
- setSelectedAssetKeysInternalState(currentState => [...currentState, assetKey]);
2305
- }, []);
2306
- const onUnselected = useCallback(assetKey => {
2307
- setSelectedAssetKeysInternalState(currentState => currentState.filter(filteredAssetKey => filteredAssetKey !== assetKey));
2308
- }, []);
2309
- const onAssetSoftSelectedChanged = useCallback((assetKey = null) => {
2310
- setSoftSelectedAssetKeyInternalState(assetKey);
2311
- }, []);
2312
- return React__default.createElement(AssetGalleryBase, _extends$4({
2313
- ref: forwardedRef,
2314
- assets: assets,
2315
- activeSummaryCard: activeSummaryCard,
2316
- displayIcon: displayIcon,
2317
- thumbnailMaxHeight: thumbnailMaxHeight,
2318
- selectable: selectable,
2319
- customSelectedBorder: customSelectedBorder,
2320
- selectedAssetKeys: selectedAssetKeysInternalState,
2321
- onAssetSelected: onSelected,
2322
- onAssetUnselected: onUnselected,
2323
- softSelectable: softSelectable,
2324
- softSelectedAssetKey: softSelectedAssetKeyInternalState,
2325
- scrollElement: scrollElement,
2326
- onAssetSoftSelectedChanged: onAssetSoftSelectedChanged,
2327
- component: component,
2328
- viewMode: viewMode
2329
- }, props));
2330
- });
2331
- AssetGallery.propTypes = process.env.NODE_ENV !== "production" ? {
2332
- assets: PropTypes.arrayOf(PropTypes.shape(assetShape)),
2333
- displayIcon: PropTypes.string,
2334
- activeSummaryCard: PropTypes.bool,
2335
- viewMode: PropTypes.oneOf(['compact', 'grid']),
2336
- thumbnailMaxHeight: PropTypes.number,
2337
- selectable: PropTypes.bool,
2338
- customSelectedBorder: PropTypes.arrayOf(PropTypes.string),
2339
- selectedAssetKeys: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.arrayOf(PropTypes.number)]),
2340
- onSelectedChanged: PropTypes.func,
2341
- softSelectable: PropTypes.bool,
2342
- scrollElement: PropTypes.instanceOf(Element),
2343
- onSoftSelectedChanged: PropTypes.func,
2344
- component: PropTypes.func
2345
- } : {};
2346
- AssetGallery.defaultProps = {
2347
- assets: [],
2348
- viewMode: 'compact',
2349
- thumbnailMaxHeight: 300,
2350
- selectedAssetKeys: [],
2351
- customSelectedBorder: [],
2352
- activeSummaryCard: false,
2353
- displayIcon: ''
2354
- };
2355
-
2356
- export { AssetGallery as default };
39
+ import '../../CompactStarRating-9af2f427.js';
40
+ import '../../CompactTextInput-42ca5d42.js';
41
+ import '../../MultiSelect-9f497e62.js';
42
+ import '../../Radio-73ca3ae2.js';
43
+ import '../../TextArea-1e5b9201.js';
44
+ import '../../Switch-ecf3122b.js';
45
+ import '../ContextMenu/ContextMenuItem/ContextMenuItem.js';