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