@appquality/unguess-design-system 3.1.99-beta-attachments → 3.1.99

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/CHANGELOG.md +440 -0
  2. package/build/index.d.ts +1 -0
  3. package/build/index.js +1093 -669
  4. package/build/stories/avatar/InternalAvatar.d.ts +2 -0
  5. package/build/stories/buttons/button/index.stories.d.ts +0 -1
  6. package/build/stories/buttons/utils.d.ts +39 -39
  7. package/build/stories/chat/_types.d.ts +8 -6
  8. package/build/stories/chat/context/chatContext.d.ts +4 -4
  9. package/build/stories/chat/hooks/useMedia.d.ts +8 -0
  10. package/build/stories/chat/index.stories.d.ts +3 -4
  11. package/build/stories/chat/parts/MediaLightbox.d.ts +14 -0
  12. package/build/stories/chat/parts/ThumbnailContainer/Thumbnail.d.ts +11 -0
  13. package/build/stories/chat/parts/ThumbnailContainer/index.d.ts +1 -9
  14. package/build/stories/chat/parts/comment.d.ts +2 -7
  15. package/build/stories/dropdowns/select/index.stories.d.ts +0 -1
  16. package/build/stories/editor/index.stories.d.ts +0 -1
  17. package/build/stories/highlight/CreateObservationButton.d.ts +17 -0
  18. package/build/stories/highlight/_types.d.ts +44 -0
  19. package/build/stories/highlight/demo-parts/data.d.ts +55 -0
  20. package/build/stories/highlight/demo-parts/sentiment-tag.d.ts +7 -0
  21. package/build/stories/highlight/demo-parts/transcript-base.d.ts +5 -0
  22. package/build/stories/highlight/demo-parts/transcript-diarization.d.ts +5 -0
  23. package/build/stories/highlight/demo-parts/transcript-paragraph.d.ts +5 -0
  24. package/build/stories/highlight/demo-parts/transcript-sentiment.d.ts +5 -0
  25. package/build/stories/highlight/highlightContext.d.ts +10 -0
  26. package/build/stories/highlight/index.d.ts +10 -0
  27. package/build/stories/highlight/index.stories.d.ts +18 -0
  28. package/build/stories/highlight/searchable.d.ts +3 -0
  29. package/build/stories/player/_types.d.ts +36 -1
  30. package/build/stories/player/context/progressContext.d.ts +16 -0
  31. package/build/stories/player/index.stories.d.ts +2 -2
  32. package/build/stories/player/parts/bookmark.d.ts +2 -0
  33. package/build/stories/player/parts/controlButton.d.ts +289 -0
  34. package/build/stories/player/parts/controls.d.ts +8 -2
  35. package/build/stories/player/parts/controlsCenterGroup.d.ts +2 -1
  36. package/build/stories/player/parts/cutterButton.d.ts +6 -0
  37. package/build/stories/player/parts/progress.d.ts +11 -0
  38. package/build/stories/player/parts/timeLabel.d.ts +2 -2
  39. package/build/stories/tooltip/_types.d.ts +1 -0
  40. package/build/stories/tooltip/index.d.ts +1 -0
  41. package/build/stories/tooltip/index.stories.d.ts +1 -0
  42. package/package.json +2 -1
  43. package/build/stories/chat/parts/ThumbnailContainer/ImageThumbnail.d.ts +0 -11
  44. package/build/stories/chat/parts/ThumbnailContainer/VideoThumbnail.d.ts +0 -11
  45. /package/build/stories/player/{parts/utils.d.ts → utils.d.ts} +0 -0
package/build/index.js CHANGED
@@ -25,9 +25,9 @@ var sunburst = require('@nivo/sunburst');
25
25
  var waffle = require('@nivo/waffle');
26
26
  var line = require('@nivo/line');
27
27
  var reactForms = require('@zendeskgarden/react-forms');
28
- var uuid = require('uuid');
29
28
  var react = require('@tiptap/react');
30
29
  var reactTooltips = require('@zendeskgarden/react-tooltips');
30
+ var uuid = require('uuid');
31
31
  var Typography = require('@tiptap/extension-typography');
32
32
  var Link = require('@tiptap/extension-link');
33
33
  var StarterKit = require('@tiptap/starter-kit');
@@ -38,10 +38,10 @@ var Mention = require('@tiptap/extension-mention');
38
38
  var tippy = require('tippy.js');
39
39
  var Image$2 = require('@tiptap/extension-image');
40
40
  var Dropcursor = require('@tiptap/extension-dropcursor');
41
- var reactGrid = require('@zendeskgarden/react-grid');
42
41
  var reactModals = require('@zendeskgarden/react-modals');
43
42
  var SlickSlider = require('react-slick');
44
43
  var Video = require('@appquality/stream-player');
44
+ var reactGrid = require('@zendeskgarden/react-grid');
45
45
  var containerUtilities = require('@zendeskgarden/container-utilities');
46
46
  var reactColorpickers = require('@zendeskgarden/react-colorpickers');
47
47
  var reactDropdowns = require('@zendeskgarden/react-dropdowns');
@@ -334,8 +334,8 @@ const UgContainerCard = styled__default["default"](reactNotifications.Well) `
334
334
  `;
335
335
  const ContainerCard = (props) => jsxRuntime.jsx(UgContainerCard, Object.assign({}, props));
336
336
 
337
- var _a, _b, _c, _d, _e, _f, _g$c, _h;
338
- const components = Object.assign(Object.assign(Object.assign(Object.assign({}, reactTheming.DEFAULT_THEME.components), { chrome: Object.assign(Object.assign({}, (_a = reactTheming.DEFAULT_THEME.components) === null || _a === void 0 ? void 0 : _a.chrome), { header: Object.assign(Object.assign({}, (_c = (_b = reactTheming.DEFAULT_THEME.components) === null || _b === void 0 ? void 0 : _b.chrome) === null || _c === void 0 ? void 0 : _c.header), { height: "64px" }), nav: Object.assign(Object.assign({}, (_e = (_d = reactTheming.DEFAULT_THEME.components) === null || _d === void 0 ? void 0 : _d.chrome) === null || _e === void 0 ? void 0 : _e.nav), { openWidth: 240, closedWidth: 36, workspaceDropdownWidth: 192 }) }), notification: Object.assign(Object.assign({}, (_f = reactTheming.DEFAULT_THEME.components) === null || _f === void 0 ? void 0 : _f.notification), { card: Object.assign(Object.assign({}, (_h = (_g$c = reactTheming.DEFAULT_THEME.components) === null || _g$c === void 0 ? void 0 : _g$c.notification) === null || _h === void 0 ? void 0 : _h.well), { padding: "16px" }) }) }), cardCmponentStyle), { "text.primary": () => ({
337
+ var _a, _b, _c, _d, _e, _f, _g$d, _h;
338
+ const components = Object.assign(Object.assign(Object.assign(Object.assign({}, reactTheming.DEFAULT_THEME.components), { chrome: Object.assign(Object.assign({}, (_a = reactTheming.DEFAULT_THEME.components) === null || _a === void 0 ? void 0 : _a.chrome), { header: Object.assign(Object.assign({}, (_c = (_b = reactTheming.DEFAULT_THEME.components) === null || _b === void 0 ? void 0 : _b.chrome) === null || _c === void 0 ? void 0 : _c.header), { height: "64px" }), nav: Object.assign(Object.assign({}, (_e = (_d = reactTheming.DEFAULT_THEME.components) === null || _d === void 0 ? void 0 : _d.chrome) === null || _e === void 0 ? void 0 : _e.nav), { openWidth: 240, closedWidth: 36, workspaceDropdownWidth: 192 }) }), notification: Object.assign(Object.assign({}, (_f = reactTheming.DEFAULT_THEME.components) === null || _f === void 0 ? void 0 : _f.notification), { card: Object.assign(Object.assign({}, (_h = (_g$d = reactTheming.DEFAULT_THEME.components) === null || _g$d === void 0 ? void 0 : _g$d.notification) === null || _h === void 0 ? void 0 : _h.well), { padding: "16px" }) }) }), cardCmponentStyle), { "text.primary": () => ({
339
339
  color: getColor(colors.primaryHue, 600),
340
340
  }), "text.success": () => ({
341
341
  color: getColor(colors.successHue, 700),
@@ -642,6 +642,15 @@ Alert.Close = reactNotifications.Close;
642
642
 
643
643
  var img$2 = "data:image/svg+xml,%3csvg width='26' height='26' viewBox='0 0 26 26' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M17.2597 12.9199V14.767H17.2367C17.075 17.4452 15.5974 18.969 13.127 18.969C10.4949 18.969 8.92496 17.4452 8.76335 14.767H8.74026V12.9199H5V14.767V14.7901C5.20779 19.4538 8.34777 22.4322 13.1039 22.4322C17.8139 22.4322 20.7922 19.5231 21 14.7901V12.9199H17.2597Z' fill='%23003A57'/%3e%3cpath d='M8.78629 3.5H5.02295V7.26335H8.78629V3.5Z' fill='%2370C38A'/%3e%3cpath d='M20.9768 3.5H17.1672V7.30952H20.9768V3.5Z' fill='%23003A57'/%3e%3c/svg%3e";
644
644
 
645
+ const StyledInternalAvatar = styled__default["default"].div `
646
+ display: flex;
647
+ align-items: center;
648
+ justify-content: center;
649
+ `;
650
+ const InternalAvatar = () => {
651
+ return (jsxRuntime.jsx(StyledInternalAvatar, { children: jsxRuntime.jsx("img", { alt: "avatar", src: img$2 }) }));
652
+ };
653
+
645
654
  const UgAvatar = styled__default["default"](reactAvatars.Avatar) `
646
655
  text-transform: uppercase;
647
656
 
@@ -673,7 +682,7 @@ const Avatar = (_a) => {
673
682
  if (type === "text")
674
683
  return jsxRuntime.jsx(Avatar.Text, { children: props.children });
675
684
  if (type === "system")
676
- return jsxRuntime.jsx("img", { alt: "avatar", src: img$2 });
685
+ return jsxRuntime.jsx(InternalAvatar, {});
677
686
  };
678
687
  return (jsxRuntime.jsx(UgAvatar, Object.assign({}, props, { badge: fixedBadge, isSystem: props.avatarType === "system" || isSystem, children: wrapChildren(props.avatarType || "text"), size: props.size || "small" })));
679
688
  };
@@ -842,48 +851,48 @@ Tag.Avatar = StyledAvatar;
842
851
  Tag.Close = StyledClose;
843
852
  Tag.SecondaryText = StyledSpan;
844
853
 
845
- var _path$E;
846
- function _extends$Q() { _extends$Q = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$Q.apply(this, arguments); }
847
- const SvgUgSquare = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$Q({
854
+ var _path$G;
855
+ function _extends$T() { _extends$T = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$T.apply(this, arguments); }
856
+ const SvgUgSquare = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$T({
848
857
  width: 24,
849
858
  height: 24,
850
859
  viewBox: "0 0 24 24",
851
860
  fill: "none",
852
861
  xmlns: "http://www.w3.org/2000/svg"
853
- }, props), _path$E || (_path$E = /*#__PURE__*/React__namespace.createElement("path", {
862
+ }, props), _path$G || (_path$G = /*#__PURE__*/React__namespace.createElement("path", {
854
863
  d: "M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM18 19H6C5.45 19 5 18.55 5 18V6C5 5.45 5.45 5 6 5H18C18.55 5 19 5.45 19 6V18C19 18.55 18.55 19 18 19Z",
855
864
  fill: "#E80C7A"
856
865
  })));
857
866
 
858
- var _path$D;
859
- function _extends$P() { _extends$P = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$P.apply(this, arguments); }
860
- const SvgUgCircle = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$P({
867
+ var _path$F;
868
+ function _extends$S() { _extends$S = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$S.apply(this, arguments); }
869
+ const SvgUgCircle = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$S({
861
870
  width: 24,
862
871
  height: 24,
863
872
  viewBox: "0 0 24 24",
864
873
  fill: "none",
865
874
  xmlns: "http://www.w3.org/2000/svg"
866
- }, props), _path$D || (_path$D = /*#__PURE__*/React__namespace.createElement("path", {
875
+ }, props), _path$F || (_path$F = /*#__PURE__*/React__namespace.createElement("path", {
867
876
  d: "M12 2C6.47 2 2 6.47 2 12C2 17.53 6.47 22 12 22C17.53 22 22 17.53 22 12C22 6.47 17.53 2 12 2ZM12 20C7.58 20 4 16.42 4 12C4 7.58 7.58 4 12 4C16.42 4 20 7.58 20 12C20 16.42 16.42 20 12 20Z",
868
877
  fill: "#FFCD1A"
869
878
  })));
870
879
 
871
- var _path$C;
872
- function _extends$O() { _extends$O = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$O.apply(this, arguments); }
873
- const SvgUgTriangle = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$O({
880
+ var _path$E;
881
+ function _extends$R() { _extends$R = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$R.apply(this, arguments); }
882
+ const SvgUgTriangle = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$R({
874
883
  width: 24,
875
884
  height: 24,
876
885
  viewBox: "0 0 24 24",
877
886
  fill: "none",
878
887
  xmlns: "http://www.w3.org/2000/svg"
879
- }, props), _path$C || (_path$C = /*#__PURE__*/React__namespace.createElement("path", {
888
+ }, props), _path$E || (_path$E = /*#__PURE__*/React__namespace.createElement("path", {
880
889
  d: "M11.9993 7.32625L18.3893 17.5563H5.60929L11.9993 7.32625ZM11.1493 4.91625L2.94929 18.0262C2.53929 18.6962 3.01929 19.5563 3.79929 19.5563H20.1993C20.9893 19.5563 21.4593 18.6962 21.0493 18.0262L12.8493 4.91625C12.4593 4.28625 11.5393 4.28625 11.1493 4.91625Z",
881
890
  fill: "#7B0DFF"
882
891
  })));
883
892
 
884
- var _rect$4, _path$B, _path2$c, _path3$4;
885
- function _extends$N() { _extends$N = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$N.apply(this, arguments); }
886
- const SvgCampaignCompleted = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$N({
893
+ var _rect$4, _path$D, _path2$c, _path3$4;
894
+ function _extends$Q() { _extends$Q = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$Q.apply(this, arguments); }
895
+ const SvgCampaignCompleted = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$Q({
887
896
  width: 24,
888
897
  height: 24,
889
898
  viewBox: "0 0 24 24",
@@ -894,7 +903,7 @@ const SvgCampaignCompleted = props => /*#__PURE__*/React__namespace.createElemen
894
903
  height: 24,
895
904
  rx: 12,
896
905
  fill: "#F6F6F8"
897
- })), _path$B || (_path$B = /*#__PURE__*/React__namespace.createElement("path", {
906
+ })), _path$D || (_path$D = /*#__PURE__*/React__namespace.createElement("path", {
898
907
  d: "M20.6953 5.73905C21.0148 5.41953 21.0148 4.90149 20.6953 4.58197C20.3758 4.26245 19.8577 4.26245 19.5382 4.58197L11.88 12.2402L10.0849 9.95981C9.80539 9.60476 9.29098 9.54352 8.93593 9.82303C8.58088 10.1025 8.51963 10.6169 8.79914 10.972L11.1642 13.9763C11.3089 14.16 11.5252 14.2731 11.7586 14.2869C11.9921 14.3008 12.2203 14.2141 12.3856 14.0487L20.6953 5.73905Z",
899
908
  fill: "#50BF95"
900
909
  })), _path2$c || (_path2$c = /*#__PURE__*/React__namespace.createElement("path", {
@@ -905,9 +914,9 @@ const SvgCampaignCompleted = props => /*#__PURE__*/React__namespace.createElemen
905
914
  fill: "#007345"
906
915
  })));
907
916
 
908
- var _rect$3, _path$A, _path2$b;
909
- function _extends$M() { _extends$M = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$M.apply(this, arguments); }
910
- const SvgCampaignLocked = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$M({
917
+ var _rect$3, _path$C, _path2$b;
918
+ function _extends$P() { _extends$P = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$P.apply(this, arguments); }
919
+ const SvgCampaignLocked = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$P({
911
920
  width: 24,
912
921
  height: 24,
913
922
  viewBox: "0 0 24 24",
@@ -918,7 +927,7 @@ const SvgCampaignLocked = props => /*#__PURE__*/React__namespace.createElement("
918
927
  height: 24,
919
928
  rx: 12,
920
929
  fill: "#F6F6F8"
921
- })), _path$A || (_path$A = /*#__PURE__*/React__namespace.createElement("path", {
930
+ })), _path$C || (_path$C = /*#__PURE__*/React__namespace.createElement("path", {
922
931
  fillRule: "evenodd",
923
932
  clipRule: "evenodd",
924
933
  d: "M13.55 19.0875C14.25 19.7875 15.1063 20.1375 16.1188 20.1375C17.1313 20.1375 17.9875 19.7875 18.6875 19.0875C19.3875 18.3875 19.7375 17.5312 19.7375 16.5187C19.7375 15.5062 19.3875 14.65 18.6875 13.95C17.9875 13.25 17.1313 12.9 16.1188 12.9C15.1063 12.9 14.25 13.25 13.55 13.95C12.85 14.65 12.5 15.5062 12.5 16.5187C12.5 17.5312 12.85 18.3875 13.55 19.0875ZM17.5062 18.2812C17.4187 18.2812 17.3375 18.25 17.2625 18.1875L15.7438 16.7812C15.6813 16.6687 15.65 16.6 15.65 16.575V14.55C15.65 14.4375 15.6875 14.3437 15.7625 14.2687C15.8375 14.1937 15.9313 14.1562 16.0438 14.1562C16.1563 14.1562 16.25 14.1937 16.325 14.2687C16.4 14.3437 16.4375 14.4375 16.4375 14.55V16.4813L17.7313 17.6625C17.8063 17.725 17.8469 17.8062 17.8531 17.9062C17.8594 18.0063 17.825 18.0938 17.75 18.1688C17.675 18.2438 17.5937 18.2812 17.5062 18.2812Z",
@@ -930,9 +939,9 @@ const SvgCampaignLocked = props => /*#__PURE__*/React__namespace.createElement("
930
939
  fill: "#F4AC1A"
931
940
  })));
932
941
 
933
- var _rect$2, _path$z, _path2$a;
934
- function _extends$L() { _extends$L = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$L.apply(this, arguments); }
935
- const SvgCampaignIncoming = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$L({
942
+ var _rect$2, _path$B, _path2$a;
943
+ function _extends$O() { _extends$O = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$O.apply(this, arguments); }
944
+ const SvgCampaignIncoming = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$O({
936
945
  width: 24,
937
946
  height: 24,
938
947
  viewBox: "0 0 24 24",
@@ -943,7 +952,7 @@ const SvgCampaignIncoming = props => /*#__PURE__*/React__namespace.createElement
943
952
  height: 24,
944
953
  rx: 12,
945
954
  fill: "#F6F6F8"
946
- })), _path$z || (_path$z = /*#__PURE__*/React__namespace.createElement("path", {
955
+ })), _path$B || (_path$B = /*#__PURE__*/React__namespace.createElement("path", {
947
956
  d: "M11.2266 13.0313H14.997M11.2266 9.26075V13.0313V9.26075ZM11.2266 13.0313L20.121 5.03906L11.2266 13.0313Z",
948
957
  stroke: "#024780",
949
958
  strokeWidth: 1.5,
@@ -957,9 +966,9 @@ const SvgCampaignIncoming = props => /*#__PURE__*/React__namespace.createElement
957
966
  strokeLinejoin: "round"
958
967
  })));
959
968
 
960
- var _rect$1, _path$y, _path2$9, _path3$3, _path4$1, _path5$1, _path6$1, _path7$1, _path8$1, _path9$1, _path10$1;
961
- function _extends$K() { _extends$K = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$K.apply(this, arguments); }
962
- const SvgCampaignProgress = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$K({
969
+ var _rect$1, _path$A, _path2$9, _path3$3, _path4$1, _path5$1, _path6$1, _path7$1, _path8$1, _path9$1, _path10$1;
970
+ function _extends$N() { _extends$N = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$N.apply(this, arguments); }
971
+ const SvgCampaignProgress = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$N({
963
972
  width: 24,
964
973
  height: 24,
965
974
  viewBox: "0 0 24 24",
@@ -970,7 +979,7 @@ const SvgCampaignProgress = props => /*#__PURE__*/React__namespace.createElement
970
979
  height: 24,
971
980
  rx: 12,
972
981
  fill: "#F6F6F8"
973
- })), _path$y || (_path$y = /*#__PURE__*/React__namespace.createElement("path", {
982
+ })), _path$A || (_path$A = /*#__PURE__*/React__namespace.createElement("path", {
974
983
  d: "M13.059 16.7647C13.059 16.1799 12.585 15.7059 12.0002 15.7059C11.4154 15.7059 10.9414 16.1799 10.9414 16.7647V19.9412C10.9414 20.5259 11.4154 21 12.0002 21C12.585 21 13.059 20.5259 13.059 19.9412V16.7647Z",
975
984
  fill: "#D1820A"
976
985
  })), _path2$9 || (_path2$9 = /*#__PURE__*/React__namespace.createElement("path", {
@@ -1002,21 +1011,21 @@ const SvgCampaignProgress = props => /*#__PURE__*/React__namespace.createElement
1002
1011
  fill: "#FFB65A"
1003
1012
  })));
1004
1013
 
1005
- var _g$b, _path$x, _path2$8, _path3$2, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11;
1006
- function _extends$J() { _extends$J = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$J.apply(this, arguments); }
1007
- const SvgCampaignExperiential = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$J({
1014
+ var _g$c, _path$z, _path2$8, _path3$2, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11;
1015
+ function _extends$M() { _extends$M = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$M.apply(this, arguments); }
1016
+ const SvgCampaignExperiential = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$M({
1008
1017
  width: 24,
1009
1018
  height: 24,
1010
1019
  viewBox: "0 0 24 24",
1011
1020
  fill: "none",
1012
1021
  xmlns: "http://www.w3.org/2000/svg"
1013
- }, props), _g$b || (_g$b = /*#__PURE__*/React__namespace.createElement("g", {
1022
+ }, props), _g$c || (_g$c = /*#__PURE__*/React__namespace.createElement("g", {
1014
1023
  opacity: 0.3
1015
1024
  }, /*#__PURE__*/React__namespace.createElement("path", {
1016
1025
  opacity: 0.3,
1017
1026
  d: "M12 24C18.6274 24 24 18.6274 24 12C24 5.37258 18.6274 0 12 0C5.37258 0 0 5.37258 0 12C0 18.6274 5.37258 24 12 24Z",
1018
1027
  fill: "#50BF95"
1019
- }))), _path$x || (_path$x = /*#__PURE__*/React__namespace.createElement("path", {
1028
+ }))), _path$z || (_path$z = /*#__PURE__*/React__namespace.createElement("path", {
1020
1029
  d: "M12.487 3.19652C8.68003 3.19652 5.59895 6.27761 5.59895 10.0846C5.59895 10.2597 5.59895 10.4348 5.62438 10.5855C5.29857 11.1863 4.82307 12.013 4.24678 12.514C3.82117 12.8897 3.92096 13.2908 3.97085 13.4405C4.09609 13.7663 4.44635 14.0413 5.02265 14.2418C5.22322 14.3172 5.44825 14.3671 5.64883 14.417L5.67427 16.8464C5.67427 17.7984 6.47559 18.6251 7.45304 18.6251L8.93044 18.1496L9.08111 19.0263C9.18091 19.6026 9.68185 20.0282 10.2836 20.0282C10.3589 20.0282 10.4343 20.0282 10.5086 20.0028L15.1424 19.177C15.8185 19.0517 16.2441 18.4256 16.1443 17.7495L15.8185 16.1214C17.9974 14.9189 19.375 12.5892 19.375 10.0845C19.375 6.30279 16.2696 3.19641 12.4869 3.19641L12.487 3.19652Z",
1021
1030
  fill: "#2B8473",
1022
1031
  stroke: "#2B8473"
@@ -1072,21 +1081,21 @@ const SvgCampaignExperiential = props => /*#__PURE__*/React__namespace.createEle
1072
1081
  fill: "#ECF4F2"
1073
1082
  })));
1074
1083
 
1075
- var _g$a, _path$w;
1076
- function _extends$I() { _extends$I = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$I.apply(this, arguments); }
1077
- const SvgCampaignFunctional = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$I({
1084
+ var _g$b, _path$y;
1085
+ function _extends$L() { _extends$L = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$L.apply(this, arguments); }
1086
+ const SvgCampaignFunctional = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$L({
1078
1087
  width: 24,
1079
1088
  height: 24,
1080
1089
  viewBox: "0 0 24 24",
1081
1090
  fill: "none",
1082
1091
  xmlns: "http://www.w3.org/2000/svg"
1083
- }, props), _g$a || (_g$a = /*#__PURE__*/React__namespace.createElement("g", {
1092
+ }, props), _g$b || (_g$b = /*#__PURE__*/React__namespace.createElement("g", {
1084
1093
  opacity: 0.3
1085
1094
  }, /*#__PURE__*/React__namespace.createElement("path", {
1086
1095
  opacity: 0.3,
1087
1096
  d: "M12 24C18.6274 24 24 18.6274 24 12C24 5.37258 18.6274 0 12 0C5.37258 0 0 5.37258 0 12C0 18.6274 5.37258 24 12 24Z",
1088
1097
  fill: "#003A57"
1089
- }))), _path$w || (_path$w = /*#__PURE__*/React__namespace.createElement("path", {
1098
+ }))), _path$y || (_path$y = /*#__PURE__*/React__namespace.createElement("path", {
1090
1099
  d: "M17.9983 7.16705C17.5188 6.58566 17.1422 6.73039 17.1422 6.73039C17.1422 6.73039 16.406 7.02453 16.0401 7.16303C15.6742 7.30153 15.2408 7.17357 15.2408 7.17357L14.7579 6.8851C14.7579 6.8851 14.4296 6.56554 14.3656 6.18067C14.3123 5.78958 14.1888 5.00269 14.1888 5.00269C14.1888 5.00269 14.1356 4.61159 13.3938 4.47257C12.652 4.33356 12.4678 4.68715 12.4678 4.68715C12.4678 4.68715 12.0932 5.38344 11.9091 5.73703C11.7249 6.09062 11.3114 6.27118 11.3114 6.27118L10.7639 6.36908C10.7639 6.36908 10.3144 6.33771 10.0176 6.07271L9.12712 5.27769C9.12712 5.27769 8.8303 5.01268 8.18313 5.38632C7.53595 5.75997 7.61705 6.14953 7.61705 6.14953L7.86033 7.3182C7.94143 7.70776 7.74381 8.11275 7.74381 8.11275L7.38528 8.53794C7.38528 8.53794 7.02217 8.80577 6.62387 8.78845C6.22557 8.77114 5.43527 8.7474 5.43527 8.7474C5.43527 8.7474 5.03697 8.73009 4.78646 9.44201C4.53595 10.1539 4.84804 10.3956 4.84804 10.3956C4.84804 10.3956 5.46774 10.896 5.77983 11.1376C6.09192 11.3793 6.19373 11.8296 6.19373 11.8296L6.20207 12.3921C6.20207 12.3921 6.09618 12.8314 5.79331 13.079C5.49043 13.3266 4.86759 13.8171 4.86759 13.8171C4.86759 13.8171 4.56471 14.0647 4.81769 14.7769C5.08144 15.4828 5.46713 15.4783 5.46713 15.4783C5.46713 15.4783 6.26012 15.4569 6.64582 15.4524C7.03152 15.4479 7.40116 15.7145 7.40116 15.7145L7.76458 16.1447C7.76458 16.1447 7.96976 16.5499 7.89441 16.9425C7.81907 17.3351 7.66208 18.1094 7.66208 18.1094C7.66208 18.1094 7.58674 18.502 8.23785 18.8824C8.88895 19.2629 9.18553 19.0044 9.18553 19.0044C9.18553 19.0044 9.7724 18.4765 10.069 18.218C10.3655 17.9595 10.8115 17.9347 10.8115 17.9347L11.3609 18.0394C11.3609 18.0394 11.77 18.225 11.9608 18.5803C12.1516 18.9356 12.5268 19.6354 12.5268 19.6354C12.5268 19.6354 12.7176 19.9907 13.4583 19.8539C14.1946 19.7343 14.2529 19.337 14.2529 19.337C14.2529 19.337 14.3586 18.5487 14.4232 18.1623C14.4814 17.765 14.8086 17.4598 14.8086 17.4598L15.2939 17.1796C15.2939 17.1796 15.7281 17.0598 16.095 17.1971C16.4682 17.3453 17.1975 17.637 17.1975 17.637C17.1975 17.637 17.5707 17.7851 18.0424 17.2073C18.5142 16.6295 18.3189 16.2913 18.3189 16.2913C18.3189 16.2913 17.9006 15.6164 17.6882 15.2736C17.4759 14.9307 17.5197 14.4836 17.5197 14.4836L17.7038 13.9555C17.7038 13.9555 17.9482 13.5816 18.3203 13.454C18.6925 13.3264 19.4431 13.0822 19.4431 13.0822C19.4431 13.0822 19.8153 12.9546 19.8113 12.2005C19.8074 11.4464 19.4297 11.3153 19.4297 11.3153C19.4297 11.3153 18.6807 11.0641 18.303 10.9331C17.9253 10.802 17.677 10.4217 17.677 10.4217L17.4861 9.8919C17.4861 9.8919 17.4293 9.4447 17.6368 9.1067C17.8443 8.7687 18.2486 8.09891 18.2486 8.09891C18.2486 8.09891 18.4778 7.74844 17.9983 7.16707L17.9983 7.16705ZM9.33902 8.38466L10.6176 10.5992C10.0433 11.149 9.82793 11.9715 10.0567 12.7413L7.86713 14.0054C6.98868 12.0106 7.60355 9.66286 9.33905 8.38457L9.33902 8.38466ZM13.9748 16.414C11.9998 17.2778 9.65918 16.6363 8.37099 14.8783L10.5605 13.6141C11.1128 14.1971 11.9329 14.4219 12.6961 14.1994L13.9748 16.414ZM12.6552 13.132C12.1159 13.4434 11.4325 13.2561 11.1176 12.7107C10.8027 12.1652 10.9822 11.4797 11.5215 11.1684C12.0608 10.857 12.7441 11.0443 13.0591 11.5897C13.374 12.1352 13.1945 12.8207 12.6552 13.132ZM14.8376 15.9158L13.5591 13.7012C14.1333 13.1515 14.3487 12.3289 14.12 11.5591L16.3095 10.295C17.188 12.2898 16.5731 14.6376 14.8376 15.9159L14.8376 15.9158ZM13.6161 10.6863C13.0638 10.1034 12.2437 9.87862 11.4805 10.1011L10.2019 7.88652C12.1769 7.02266 14.5112 7.65314 15.8057 9.42223L13.6161 10.6863Z",
1091
1100
  fill: "#003A57"
1092
1101
  })));
@@ -1947,15 +1956,15 @@ const WaffleChart = ({ height, width, data, total, tooltip, }) => {
1947
1956
  } }) })));
1948
1957
  };
1949
1958
 
1950
- var _g$9, _defs$4;
1951
- function _extends$H() { _extends$H = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$H.apply(this, arguments); }
1952
- const SvgSentiment1 = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$H({
1959
+ var _g$a, _defs$4;
1960
+ function _extends$K() { _extends$K = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$K.apply(this, arguments); }
1961
+ const SvgSentiment1 = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$K({
1953
1962
  width: 27,
1954
1963
  height: 26,
1955
1964
  viewBox: "0 0 27 26",
1956
1965
  fill: "none",
1957
1966
  xmlns: "http://www.w3.org/2000/svg"
1958
- }, props), _g$9 || (_g$9 = /*#__PURE__*/React__namespace.createElement("g", {
1967
+ }, props), _g$a || (_g$a = /*#__PURE__*/React__namespace.createElement("g", {
1959
1968
  clipPath: "url(#clip0_21_19131)"
1960
1969
  }, /*#__PURE__*/React__namespace.createElement("path", {
1961
1970
  d: "M26.5525 13C26.5525 20.1796 20.6084 26 13.2762 26C5.94481 26 0 20.1796 0 13C0 5.82111 5.94481 0 13.2762 0C20.6084 0 26.5525 5.82111 26.5525 13Z",
@@ -1971,15 +1980,15 @@ const SvgSentiment1 = props => /*#__PURE__*/React__namespace.createElement("svg"
1971
1980
  fill: "white"
1972
1981
  })))));
1973
1982
 
1974
- var _g$8, _defs$3;
1975
- function _extends$G() { _extends$G = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$G.apply(this, arguments); }
1976
- const SvgSentiment2 = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$G({
1983
+ var _g$9, _defs$3;
1984
+ function _extends$J() { _extends$J = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$J.apply(this, arguments); }
1985
+ const SvgSentiment2 = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$J({
1977
1986
  width: 27,
1978
1987
  height: 26,
1979
1988
  viewBox: "0 0 27 26",
1980
1989
  fill: "none",
1981
1990
  xmlns: "http://www.w3.org/2000/svg"
1982
- }, props), _g$8 || (_g$8 = /*#__PURE__*/React__namespace.createElement("g", {
1991
+ }, props), _g$9 || (_g$9 = /*#__PURE__*/React__namespace.createElement("g", {
1983
1992
  clipPath: "url(#clip0_21_19130)"
1984
1993
  }, /*#__PURE__*/React__namespace.createElement("path", {
1985
1994
  d: "M26.5525 13C26.5525 20.1796 20.6084 26 13.2762 26C5.94481 26 0 20.1796 0 13C0 5.82111 5.94481 0 13.2762 0C20.6084 0 26.5525 5.82111 26.5525 13Z",
@@ -1995,15 +2004,15 @@ const SvgSentiment2 = props => /*#__PURE__*/React__namespace.createElement("svg"
1995
2004
  fill: "white"
1996
2005
  })))));
1997
2006
 
1998
- var _g$7, _defs$2;
1999
- function _extends$F() { _extends$F = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$F.apply(this, arguments); }
2000
- const SvgSentiment3 = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$F({
2007
+ var _g$8, _defs$2;
2008
+ function _extends$I() { _extends$I = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$I.apply(this, arguments); }
2009
+ const SvgSentiment3 = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$I({
2001
2010
  width: 27,
2002
2011
  height: 26,
2003
2012
  viewBox: "0 0 27 26",
2004
2013
  fill: "none",
2005
2014
  xmlns: "http://www.w3.org/2000/svg"
2006
- }, props), _g$7 || (_g$7 = /*#__PURE__*/React__namespace.createElement("g", {
2015
+ }, props), _g$8 || (_g$8 = /*#__PURE__*/React__namespace.createElement("g", {
2007
2016
  clipPath: "url(#clip0_21_19129)"
2008
2017
  }, /*#__PURE__*/React__namespace.createElement("path", {
2009
2018
  d: "M26.5525 13C26.5525 20.1796 20.6084 26 13.2762 26C5.94481 26 0 20.1796 0 13C0 5.82111 5.94481 0 13.2762 0C20.6084 0 26.5525 5.82111 26.5525 13Z",
@@ -2025,15 +2034,15 @@ const SvgSentiment3 = props => /*#__PURE__*/React__namespace.createElement("svg"
2025
2034
  fill: "white"
2026
2035
  })))));
2027
2036
 
2028
- var _g$6, _defs$1;
2029
- function _extends$E() { _extends$E = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$E.apply(this, arguments); }
2030
- const SvgSentiment4 = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$E({
2037
+ var _g$7, _defs$1;
2038
+ function _extends$H() { _extends$H = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$H.apply(this, arguments); }
2039
+ const SvgSentiment4 = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$H({
2031
2040
  width: 27,
2032
2041
  height: 26,
2033
2042
  viewBox: "0 0 27 26",
2034
2043
  fill: "none",
2035
2044
  xmlns: "http://www.w3.org/2000/svg"
2036
- }, props), _g$6 || (_g$6 = /*#__PURE__*/React__namespace.createElement("g", {
2045
+ }, props), _g$7 || (_g$7 = /*#__PURE__*/React__namespace.createElement("g", {
2037
2046
  clipPath: "url(#clip0_21_19127)"
2038
2047
  }, /*#__PURE__*/React__namespace.createElement("path", {
2039
2048
  d: "M26.5525 13C26.5525 20.1796 20.6084 26 13.2762 26C5.94481 26 0 20.1796 0 13C0 5.82111 5.94481 0 13.2762 0C20.6084 0 26.5525 5.82111 26.5525 13Z",
@@ -2055,15 +2064,15 @@ const SvgSentiment4 = props => /*#__PURE__*/React__namespace.createElement("svg"
2055
2064
  fill: "white"
2056
2065
  })))));
2057
2066
 
2058
- var _g$5, _defs;
2059
- function _extends$D() { _extends$D = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$D.apply(this, arguments); }
2060
- const SvgSentiment5 = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$D({
2067
+ var _g$6, _defs;
2068
+ function _extends$G() { _extends$G = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$G.apply(this, arguments); }
2069
+ const SvgSentiment5 = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$G({
2061
2070
  width: 26,
2062
2071
  height: 26,
2063
2072
  viewBox: "0 0 26 26",
2064
2073
  fill: "none",
2065
2074
  xmlns: "http://www.w3.org/2000/svg"
2066
- }, props), _g$5 || (_g$5 = /*#__PURE__*/React__namespace.createElement("g", {
2075
+ }, props), _g$6 || (_g$6 = /*#__PURE__*/React__namespace.createElement("g", {
2067
2076
  clipPath: "url(#clip0_21_19125)"
2068
2077
  }, /*#__PURE__*/React__namespace.createElement("path", {
2069
2078
  d: "M25.2051 13C25.2051 20.1796 19.5626 26 12.6025 26C5.64314 26 0 20.1796 0 13C0 5.82111 5.64314 0 12.6025 0C19.5626 0 25.2051 5.82111 25.2051 13Z",
@@ -2337,41 +2346,26 @@ const ChatContextProvider = ({ onSave, onFileUpload, onDeleteThumbnail, setMenti
2337
2346
  setEditor,
2338
2347
  thumbnails,
2339
2348
  setThumbnails,
2340
- afterUploadCallback: (failed) => {
2341
- setThumbnails(thumbnails.map((file) => {
2342
- if (failed.includes(file.name)) {
2343
- file.isLoadingMedia = false;
2344
- //file.isError = true;
2345
- }
2346
- else {
2347
- file.isLoadingMedia = false;
2348
- //file.isError = false
2349
- }
2350
- return file;
2351
- }));
2352
- },
2353
- addThumbnails: ({ files }) => {
2354
- files.forEach((file) => (file.isLoadingMedia = true));
2349
+ afterUploadCallback: (failed) => { },
2350
+ addThumbnails: ({ files }) => __awaiter(void 0, void 0, void 0, function* () {
2355
2351
  setThumbnails((prev) => [...prev, ...files]);
2356
- if (onFileUpload) {
2357
- onFileUpload(files).then((data) => {
2358
- var _a;
2359
- const failed = (_a = data.failed) === null || _a === void 0 ? void 0 : _a.map((f) => f.name);
2360
- setThumbnails((prev) => {
2361
- return prev.map((file) => {
2362
- file.isLoadingMedia = false;
2363
- if ((failed === null || failed === void 0 ? void 0 : failed.length) && failed.includes(file.name)) {
2364
- file.isError = true;
2365
- }
2366
- else {
2367
- file.isError = false;
2368
- }
2369
- return file;
2370
- });
2352
+ if (!onFileUpload)
2353
+ return;
2354
+ try {
2355
+ const data = yield onFileUpload(files);
2356
+ setThumbnails((prev) => {
2357
+ return prev.map(file => {
2358
+ var _a, _b;
2359
+ file.isLoadingMedia = false;
2360
+ file.error = (_b = (_a = data.failed) === null || _a === void 0 ? void 0 : _a.find(f => f.name === file.name)) === null || _b === void 0 ? void 0 : _b.errorCode;
2361
+ return file;
2371
2362
  });
2372
2363
  });
2373
2364
  }
2374
- },
2365
+ catch (e) {
2366
+ console.log("Error uploading files", e);
2367
+ }
2368
+ }),
2375
2369
  clearInput: () => {
2376
2370
  if (editor && !editor.isEmpty) {
2377
2371
  editor.commands.clearContent();
@@ -2737,96 +2731,28 @@ const ChatTitle = styled__default["default"](Title$1) `
2737
2731
  padding: ${({ theme }) => `${theme.space.sm} ${theme.space.md}`};
2738
2732
  `;
2739
2733
 
2740
- const UgClose$1 = styled__default["default"](reactNotifications.Close) `
2741
- display: flex;
2742
- align-items: center;
2743
- justify-content: center;
2744
- width: ${({ theme }) => theme.space.xl};
2745
- height: ${({ theme }) => theme.space.xl};
2746
- `;
2747
- /**
2748
- * Title is a basic component used to display a title. Often used in card headers.
2749
- */
2750
- const Close = (props) => jsxRuntime.jsx(UgClose$1, Object.assign({}, props));
2751
-
2752
- const NOTIFICATION_COMPONENT_ID = "notifications.notification";
2753
- const CLOSE_COMPONENT_ID = "notifications.notification.close";
2754
- const CLOSE_ICON_COMPONENT_ID = "notifications.notification.close-icon";
2755
- const TITLE_COMPONENT_ID = "notifications.notification.title";
2756
- const UgClose = styled__default["default"](Close).attrs((props) => {
2757
- var _a;
2758
- return ({
2759
- "data-custom-id": (_a = props["data-custom-id"]) !== null && _a !== void 0 ? _a : CLOSE_ICON_COMPONENT_ID,
2760
- });
2761
- }) `
2762
- ${(props) => reactTheming.retrieveComponentStyles(CLOSE_ICON_COMPONENT_ID, props)};
2763
- `;
2764
- const UgAnchor = styled__default["default"](reactButtons.Anchor).attrs((props) => {
2765
- var _a;
2766
- return ({
2767
- "data-custom-id": (_a = props["data-custom-id"]) !== null && _a !== void 0 ? _a : CLOSE_COMPONENT_ID,
2768
- });
2769
- }) `
2770
- ${(props) => reactTheming.retrieveComponentStyles(CLOSE_COMPONENT_ID, props)};
2771
- `;
2772
- const UgTitle = styled__default["default"](Title$1).attrs((props) => {
2773
- var _a;
2774
- return ({
2775
- "data-custom-id": (_a = props["data-custom-id"]) !== null && _a !== void 0 ? _a : TITLE_COMPONENT_ID,
2776
- });
2777
- }) `
2778
- ${(props) => reactTheming.retrieveComponentStyles(TITLE_COMPONENT_ID, props)};
2779
- `;
2780
- const UgNotification = styled__default["default"](reactNotifications.Notification) `
2781
- display: flex;
2782
- align-items: center;
2783
- justify-content: space-between;
2784
- padding-right: ${({ theme }) => theme.space.md};
2785
- white-space: pre;
2786
-
2787
- ${UgAnchor} {
2788
- flex-shrink: 0;
2789
- margin-left: ${({ theme }) => theme.space.md};
2790
- }
2791
-
2792
- ${(props) => reactTheming.retrieveComponentStyles(NOTIFICATION_COMPONENT_ID, props)};
2793
- `;
2794
- /**
2795
- * A Notification is a passive status update that keeps users informed of system progress.
2796
- * <hr>
2797
- * Used for this:
2798
- - For a passive status update about user or system activity
2799
- */
2800
- const Notification = (_a) => {
2801
- var { closeText, message, onClose, type, isPrimary, isRegular } = _a, props = __rest(_a, ["closeText", "message", "onClose", "type", "isPrimary", "isRegular"]);
2802
- return (jsxRuntime.jsxs(UgNotification, Object.assign({ type: type, isPrimary: isPrimary }, props, { children: [jsxRuntime.jsx(UgTitle, Object.assign({ isRegular: isRegular, type: type, isPrimary: isPrimary }, { children: message })), jsxRuntime.jsx(UgAnchor, Object.assign({ type: type, isPrimary: isPrimary, onClick: onClose }, { children: closeText !== null && closeText !== void 0 ? closeText : jsxRuntime.jsx(UgClose, {}) }))] })));
2803
- };
2804
- // ToastProvider
2805
- const ToastProvider = (props) => (jsxRuntime.jsx(reactNotifications.ToastProvider, Object.assign({}, props)));
2806
- const useToast = reactNotifications.useToast;
2807
-
2808
- var _path$v;
2809
- function _extends$C() { _extends$C = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$C.apply(this, arguments); }
2810
- const SvgBoldFill = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$C({
2734
+ var _path$x;
2735
+ function _extends$F() { _extends$F = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$F.apply(this, arguments); }
2736
+ const SvgBoldFill = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$F({
2811
2737
  xmlns: "http://www.w3.org/2000/svg",
2812
2738
  width: 16,
2813
2739
  height: 16,
2814
2740
  focusable: "false",
2815
2741
  viewBox: "0 0 16 16"
2816
- }, props), _path$v || (_path$v = /*#__PURE__*/React__namespace.createElement("path", {
2742
+ }, props), _path$x || (_path$x = /*#__PURE__*/React__namespace.createElement("path", {
2817
2743
  fill: "currentColor",
2818
2744
  d: "M7.5 0C9.952 0 12 2.048 12 4.5a4.483 4.483 0 01-1.27 3.108C12.078 8.39 13 9.855 13 11.5c0 2.452-2.048 4.5-4.5 4.5H4a1 1 0 01-1-1V1a1 1 0 011-1h3.5zM5 14h3.5c1.348 0 2.5-1.152 2.5-2.5S9.848 9 8.5 9H5v5zM7.5 2H5v5h2.5C8.848 7 10 5.848 10 4.5S8.848 2 7.5 2z"
2819
2745
  })));
2820
2746
 
2821
- var _path$u;
2822
- function _extends$B() { _extends$B = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$B.apply(this, arguments); }
2823
- const SvgItalicFill = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$B({
2747
+ var _path$w;
2748
+ function _extends$E() { _extends$E = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$E.apply(this, arguments); }
2749
+ const SvgItalicFill = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$E({
2824
2750
  xmlns: "http://www.w3.org/2000/svg",
2825
2751
  width: 16,
2826
2752
  height: 16,
2827
2753
  focusable: "false",
2828
2754
  viewBox: "0 0 16 16"
2829
- }, props), _path$u || (_path$u = /*#__PURE__*/React__namespace.createElement("path", {
2755
+ }, props), _path$w || (_path$w = /*#__PURE__*/React__namespace.createElement("path", {
2830
2756
  fill: "none",
2831
2757
  stroke: "currentColor",
2832
2758
  strokeLinecap: "round",
@@ -2834,15 +2760,15 @@ const SvgItalicFill = props => /*#__PURE__*/React__namespace.createElement("svg"
2834
2760
  d: "M8 1h3M9.5 1l-3 14M5 15h3"
2835
2761
  })));
2836
2762
 
2837
- var _path$t, _path2$7;
2838
- function _extends$A() { _extends$A = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$A.apply(this, arguments); }
2839
- const SvgQuoteFill = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$A({
2763
+ var _path$v, _path2$7;
2764
+ function _extends$D() { _extends$D = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$D.apply(this, arguments); }
2765
+ const SvgQuoteFill = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$D({
2840
2766
  xmlns: "http://www.w3.org/2000/svg",
2841
2767
  width: 16,
2842
2768
  height: 16,
2843
2769
  focusable: "false",
2844
2770
  viewBox: "0 0 16 16"
2845
- }, props), _path$t || (_path$t = /*#__PURE__*/React__namespace.createElement("path", {
2771
+ }, props), _path$v || (_path$v = /*#__PURE__*/React__namespace.createElement("path", {
2846
2772
  fill: "currentColor",
2847
2773
  d: "M7 8H4c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v3c0 .55-.45 1-1 1zm6 0h-3c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v3c0 .55-.45 1-1 1z"
2848
2774
  })), _path2$7 || (_path2$7 = /*#__PURE__*/React__namespace.createElement("path", {
@@ -2853,15 +2779,15 @@ const SvgQuoteFill = props => /*#__PURE__*/React__namespace.createElement("svg",
2853
2779
  d: "M5.5 12C6.5 11 7 9.5 7 8V6m4.5 6c1-1 1.5-2.5 1.5-4V6"
2854
2780
  })));
2855
2781
 
2856
- var _g$4;
2857
- function _extends$z() { _extends$z = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$z.apply(this, arguments); }
2858
- const SvgH1Fill = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$z({
2782
+ var _g$5;
2783
+ function _extends$C() { _extends$C = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$C.apply(this, arguments); }
2784
+ const SvgH1Fill = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$C({
2859
2785
  xmlns: "http://www.w3.org/2000/svg",
2860
2786
  width: 16,
2861
2787
  height: 16,
2862
2788
  focusable: "false",
2863
2789
  viewBox: "0 0 16 16"
2864
- }, props), _g$4 || (_g$4 = /*#__PURE__*/React__namespace.createElement("g", {
2790
+ }, props), _g$5 || (_g$5 = /*#__PURE__*/React__namespace.createElement("g", {
2865
2791
  transform: "translate(-464 -332)"
2866
2792
  }, /*#__PURE__*/React__namespace.createElement("rect", {
2867
2793
  width: 16,
@@ -2881,15 +2807,15 @@ const SvgH1Fill = props => /*#__PURE__*/React__namespace.createElement("svg", _e
2881
2807
  transform: "translate(474.469 331)"
2882
2808
  }))));
2883
2809
 
2884
- var _g$3;
2885
- function _extends$y() { _extends$y = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$y.apply(this, arguments); }
2886
- const SvgH2Fill = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$y({
2810
+ var _g$4;
2811
+ function _extends$B() { _extends$B = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$B.apply(this, arguments); }
2812
+ const SvgH2Fill = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$B({
2887
2813
  xmlns: "http://www.w3.org/2000/svg",
2888
2814
  width: 16,
2889
2815
  height: 16,
2890
2816
  focusable: "false",
2891
2817
  viewBox: "0 0 16 16"
2892
- }, props), _g$3 || (_g$3 = /*#__PURE__*/React__namespace.createElement("g", {
2818
+ }, props), _g$4 || (_g$4 = /*#__PURE__*/React__namespace.createElement("g", {
2893
2819
  transform: "translate(-464 -332)"
2894
2820
  }, /*#__PURE__*/React__namespace.createElement("rect", {
2895
2821
  width: 16,
@@ -2909,15 +2835,15 @@ const SvgH2Fill = props => /*#__PURE__*/React__namespace.createElement("svg", _e
2909
2835
  transform: "translate(469.359 331)"
2910
2836
  }))));
2911
2837
 
2912
- var _g$2;
2913
- function _extends$x() { _extends$x = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$x.apply(this, arguments); }
2914
- const SvgH3Fill = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$x({
2838
+ var _g$3;
2839
+ function _extends$A() { _extends$A = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$A.apply(this, arguments); }
2840
+ const SvgH3Fill = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$A({
2915
2841
  xmlns: "http://www.w3.org/2000/svg",
2916
2842
  width: 16,
2917
2843
  height: 16,
2918
2844
  focusable: "false",
2919
2845
  viewBox: "0 0 16 16"
2920
- }, props), _g$2 || (_g$2 = /*#__PURE__*/React__namespace.createElement("g", {
2846
+ }, props), _g$3 || (_g$3 = /*#__PURE__*/React__namespace.createElement("g", {
2921
2847
  transform: "translate(-464 -332)"
2922
2848
  }, /*#__PURE__*/React__namespace.createElement("rect", {
2923
2849
  width: 16,
@@ -2978,140 +2904,213 @@ const FloatingMenu = (props) => {
2978
2904
  const TooltipComponent = (props) => {
2979
2905
  var _a;
2980
2906
  const theme = React.useContext(styled.ThemeContext);
2981
- return jsxRuntime.jsx(reactTooltips.Tooltip, Object.assign({}, props, { zIndex: (_a = props.zIndex) !== null && _a !== void 0 ? _a : theme.levels.front }));
2907
+ return (jsxRuntime.jsx(reactTooltips.Tooltip, Object.assign({}, props, { zIndex: (_a = props.zIndex) !== null && _a !== void 0 ? _a : theme.levels.front })));
2982
2908
  };
2983
2909
  const Tooltip = styled__default["default"](TooltipComponent) `
2984
2910
  box-shadow: ${({ theme }) => theme.shadows.lg(`${theme.space.base * 3}px`, `${theme.space.base * 5}px`, getColor("neutralHue", 600, theme, 0.15))};
2911
+
2912
+ ${({ isTransparent }) => isTransparent &&
2913
+ `
2914
+ box-shadow: none;
2915
+ background-color: transparent;
2916
+ border: none;
2917
+ `};
2985
2918
  `;
2986
2919
 
2987
- var _path$s;
2988
- function _extends$w() { _extends$w = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$w.apply(this, arguments); }
2989
- const SvgBoldStroke = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$w({
2920
+ var _path$u;
2921
+ function _extends$z() { _extends$z = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$z.apply(this, arguments); }
2922
+ const SvgBoldStroke = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$z({
2990
2923
  xmlns: "http://www.w3.org/2000/svg",
2991
2924
  width: 16,
2992
2925
  height: 16,
2993
2926
  focusable: "false",
2994
2927
  viewBox: "0 0 16 16"
2995
- }, props), _path$s || (_path$s = /*#__PURE__*/React__namespace.createElement("path", {
2928
+ }, props), _path$u || (_path$u = /*#__PURE__*/React__namespace.createElement("path", {
2996
2929
  fill: "currentColor",
2997
2930
  d: "M7 1c2.176 0 4 1.824 4 4 0 1.315-.666 2.501-1.673 3.234C10.869 8.792 12 10.287 12 12c0 2.176-1.824 4-4 4H3.5a.5.5 0 01-.5-.5v-14a.5.5 0 01.5-.5H7zM4 15h4c1.624 0 3-1.376 3-3S9.624 9 8 9H4v6zM7 2H4v6h3c1.624 0 3-1.376 3-3S8.624 2 7 2z"
2998
2931
  })));
2999
2932
 
3000
- var _path$r;
3001
- function _extends$v() { _extends$v = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$v.apply(this, arguments); }
3002
- const SvgItalicStroke = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$v({
2933
+ var _path$t;
2934
+ function _extends$y() { _extends$y = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$y.apply(this, arguments); }
2935
+ const SvgItalicStroke = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$y({
3003
2936
  xmlns: "http://www.w3.org/2000/svg",
3004
2937
  width: 16,
3005
2938
  height: 16,
3006
2939
  focusable: "false",
3007
2940
  viewBox: "0 0 16 16"
3008
- }, props), _path$r || (_path$r = /*#__PURE__*/React__namespace.createElement("path", {
2941
+ }, props), _path$t || (_path$t = /*#__PURE__*/React__namespace.createElement("path", {
3009
2942
  fill: "none",
3010
2943
  stroke: "currentColor",
3011
2944
  strokeLinecap: "round",
3012
2945
  d: "M7.5 1.5h3M9 1.5l-3 14m-1.5 0h3"
3013
2946
  })));
3014
2947
 
3015
- var _path$q;
3016
- function _extends$u() { _extends$u = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$u.apply(this, arguments); }
3017
- const SvgAtStroke = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$u({
2948
+ var _path$s;
2949
+ function _extends$x() { _extends$x = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$x.apply(this, arguments); }
2950
+ const SvgAtStroke = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$x({
3018
2951
  xmlns: "http://www.w3.org/2000/svg",
3019
2952
  width: 16,
3020
2953
  height: 16,
3021
2954
  focusable: "false",
3022
2955
  role: "presentation"
3023
- }, props), _path$q || (_path$q = /*#__PURE__*/React__namespace.createElement("path", {
2956
+ }, props), _path$s || (_path$s = /*#__PURE__*/React__namespace.createElement("path", {
3024
2957
  fill: "none",
3025
2958
  stroke: "currentColor",
3026
2959
  strokeLinecap: "round",
3027
2960
  d: "M11.5 4.5V8h0A3.5 3.5 0 018 11.5h0A3.5 3.5 0 014.5 8h0A3.5 3.5 0 018 4.5h0A3.5 3.5 0 0111.5 8h0v1.5a2 2 0 002 2h0a2 2 0 002-2V8h0A7.5 7.5 0 008 .5h0A7.5 7.5 0 00.5 8h0A7.5 7.5 0 008 15.5h3.41"
3028
2961
  })));
3029
2962
 
3030
- var _path$p;
3031
- function _extends$t() { _extends$t = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$t.apply(this, arguments); }
3032
- const SvgClipboard = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$t({
2963
+ var _path$r;
2964
+ function _extends$w() { _extends$w = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$w.apply(this, arguments); }
2965
+ const SvgClipboard = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$w({
3033
2966
  xmlns: "http://www.w3.org/2000/svg",
3034
2967
  width: 16,
3035
2968
  height: 16,
3036
2969
  focusable: "false",
3037
2970
  role: "presentation"
3038
- }, props), _path$p || (_path$p = /*#__PURE__*/React__namespace.createElement("path", {
2971
+ }, props), _path$r || (_path$r = /*#__PURE__*/React__namespace.createElement("path", {
3039
2972
  fill: "none",
3040
2973
  stroke: "currentColor",
3041
2974
  strokeLinecap: "round",
3042
2975
  d: "M9.5 4v7.7c0 .8-.7 1.5-1.5 1.5s-1.5-.7-1.5-1.5V3C6.5 1.6 7.6.5 9 .5s2.5 1.1 2.5 2.5v9c0 1.9-1.6 3.5-3.5 3.5S4.5 13.9 4.5 12V4"
3043
2976
  })));
3044
2977
 
3045
- const MenuContainer = styled__default["default"].div `
3046
- padding: ${({ theme }) => theme.space.xs} 0;
2978
+ const UgClose$1 = styled__default["default"](reactNotifications.Close) `
2979
+ display: flex;
2980
+ align-items: center;
2981
+ justify-content: center;
2982
+ width: ${({ theme }) => theme.space.xl};
2983
+ height: ${({ theme }) => theme.space.xl};
2984
+ `;
2985
+ /**
2986
+ * Title is a basic component used to display a title. Often used in card headers.
2987
+ */
2988
+ const Close = (props) => jsxRuntime.jsx(UgClose$1, Object.assign({}, props));
2989
+
2990
+ const NOTIFICATION_COMPONENT_ID = "notifications.notification";
2991
+ const CLOSE_COMPONENT_ID = "notifications.notification.close";
2992
+ const CLOSE_ICON_COMPONENT_ID = "notifications.notification.close-icon";
2993
+ const TITLE_COMPONENT_ID = "notifications.notification.title";
2994
+ const UgClose = styled__default["default"](Close).attrs((props) => {
2995
+ var _a;
2996
+ return ({
2997
+ "data-custom-id": (_a = props["data-custom-id"]) !== null && _a !== void 0 ? _a : CLOSE_ICON_COMPONENT_ID,
2998
+ });
2999
+ }) `
3000
+ ${(props) => reactTheming.retrieveComponentStyles(CLOSE_ICON_COMPONENT_ID, props)};
3001
+ `;
3002
+ const UgAnchor = styled__default["default"](reactButtons.Anchor).attrs((props) => {
3003
+ var _a;
3004
+ return ({
3005
+ "data-custom-id": (_a = props["data-custom-id"]) !== null && _a !== void 0 ? _a : CLOSE_COMPONENT_ID,
3006
+ });
3007
+ }) `
3008
+ ${(props) => reactTheming.retrieveComponentStyles(CLOSE_COMPONENT_ID, props)};
3009
+ `;
3010
+ const UgTitle = styled__default["default"](Title$1).attrs((props) => {
3011
+ var _a;
3012
+ return ({
3013
+ "data-custom-id": (_a = props["data-custom-id"]) !== null && _a !== void 0 ? _a : TITLE_COMPONENT_ID,
3014
+ });
3015
+ }) `
3016
+ ${(props) => reactTheming.retrieveComponentStyles(TITLE_COMPONENT_ID, props)};
3017
+ `;
3018
+ const UgNotification = styled__default["default"](reactNotifications.Notification) `
3047
3019
  display: flex;
3048
- flex-direction: row;
3049
- justify-content: flex-start;
3050
3020
  align-items: center;
3051
- gap: ${({ theme }) => theme.space.xxs};
3052
- `;
3053
- const VerticalDivider = styled__default["default"].div `
3054
- width: 2px;
3055
- height: 24px;
3056
- background-color: ${({ theme }) => theme.palette.grey[300]};
3057
- margin: 0 ${({ theme }) => theme.space.xs};
3021
+ justify-content: space-between;
3022
+ padding-right: ${({ theme }) => theme.space.md};
3023
+ white-space: pre;
3024
+
3025
+ ${UgAnchor} {
3026
+ flex-shrink: 0;
3027
+ margin-left: ${({ theme }) => theme.space.md};
3028
+ }
3029
+
3030
+ ${(props) => reactTheming.retrieveComponentStyles(NOTIFICATION_COMPONENT_ID, props)};
3058
3031
  `;
3059
- const CommentBar = ({ editor, i18n, }) => {
3060
- var _a, _b, _c, _d, _e, _f, _g, _h;
3061
- const { addThumbnails } = useChatContext();
3062
- if (!editor)
3063
- return null;
3064
- const getIcon = (type) => {
3065
- switch (type) {
3066
- case "bold":
3067
- return jsxRuntime.jsx(SvgBoldStroke, {});
3068
- case "italic":
3069
- return jsxRuntime.jsx(SvgItalicStroke, {});
3070
- case "mention":
3071
- return jsxRuntime.jsx(SvgAtStroke, {});
3072
- case "attachment":
3073
- return jsxRuntime.jsx(SvgClipboard, {});
3074
- default:
3075
- return null;
3076
- }
3077
- };
3078
- const handleClick = (type) => {
3079
- switch (type) {
3080
- case "bold":
3081
- return editor.chain().focus().toggleBold().run();
3082
- case "italic":
3083
- return editor.chain().focus().toggleItalic().run();
3084
- case "mention":
3085
- const { from } = editor.state.selection;
3086
- const char = from > 1 ? " @" : "@";
3087
- return editor.chain().focus().insertContent(char).run();
3088
- case "attachment":
3089
- //open a file browser to select one or more images
3090
- const fileInput = document.createElement("input");
3091
- fileInput.type = "file";
3092
- fileInput.accept = "image/*,video/*";
3093
- fileInput.multiple = true;
3094
- fileInput.click();
3095
- fileInput.onchange = () => {
3096
- const files = fileInput.files;
3097
- if (files) {
3098
- const mediaFiles = Array.from(files).map((file) => {
3099
- return Object.assign(file, {
3100
- isLoadingMedia: false,
3101
- internal_id: uuid.v4(),
3102
- });
3103
- });
3104
- if (mediaFiles.length === 0)
3105
- return;
3106
- addThumbnails({ files: mediaFiles });
3107
- }
3108
- };
3109
- return;
3110
- default:
3111
- return;
3032
+ /**
3033
+ * A Notification is a passive status update that keeps users informed of system progress.
3034
+ * <hr>
3035
+ * Used for this:
3036
+ - For a passive status update about user or system activity
3037
+ */
3038
+ const Notification = (_a) => {
3039
+ var { closeText, message, onClose, type, isPrimary, isRegular } = _a, props = __rest(_a, ["closeText", "message", "onClose", "type", "isPrimary", "isRegular"]);
3040
+ return (jsxRuntime.jsxs(UgNotification, Object.assign({ type: type, isPrimary: isPrimary }, props, { children: [jsxRuntime.jsx(UgTitle, Object.assign({ isRegular: isRegular, type: type, isPrimary: isPrimary }, { children: message })), jsxRuntime.jsx(UgAnchor, Object.assign({ type: type, isPrimary: isPrimary, onClick: onClose }, { children: closeText !== null && closeText !== void 0 ? closeText : jsxRuntime.jsx(UgClose, {}) }))] })));
3041
+ };
3042
+ // ToastProvider
3043
+ const ToastProvider = (props) => (jsxRuntime.jsx(reactNotifications.ToastProvider, Object.assign({}, props)));
3044
+ const useToast = reactNotifications.useToast;
3045
+
3046
+ const acceptedMediaTypes = /^(image|video)\//;
3047
+ function useMedia() {
3048
+ const { addToast } = useToast();
3049
+ function getValidMedia(data) {
3050
+ const wrongFiles = Array.from(data).filter((file) => !acceptedMediaTypes.test(file.type));
3051
+ if (wrongFiles.length) {
3052
+ addToast(({ close }) => (jsxRuntime.jsx(Notification, { onClose: close, type: "error", message: wrongFiles.length === 1
3053
+ ? `${wrongFiles[0].name} not supported, please upload video or image only`
3054
+ : "Some attachments are not supported, please upload video or image only", isPrimary: true })), { placement: "top" });
3112
3055
  }
3056
+ return Array.from(data).filter((file) => acceptedMediaTypes.test(file.type));
3057
+ }
3058
+ function getMedia(data) {
3059
+ return getValidMedia(data).map((file) => {
3060
+ return Object.assign(file, {
3061
+ url: URL.createObjectURL(file),
3062
+ isLoadingMedia: true,
3063
+ id: uuid.v4(),
3064
+ });
3065
+ });
3066
+ }
3067
+ return { getMedia };
3068
+ }
3069
+
3070
+ const MenuContainer = styled__default["default"].div `
3071
+ padding: ${({ theme }) => theme.space.xs} 0;
3072
+ display: flex;
3073
+ flex-direction: row;
3074
+ justify-content: flex-start;
3075
+ align-items: center;
3076
+ gap: ${({ theme }) => theme.space.xxs};
3077
+ `;
3078
+ const VerticalDivider = styled__default["default"].div `
3079
+ width: 2px;
3080
+ height: 24px;
3081
+ background-color: ${({ theme }) => theme.palette.grey[300]};
3082
+ margin: 0 ${({ theme }) => theme.space.xs};
3083
+ `;
3084
+ const CommentBar = ({ editor, i18n, }) => {
3085
+ var _a, _b, _c, _d, _e, _f, _g, _h;
3086
+ const { addThumbnails } = useChatContext();
3087
+ const { getMedia } = useMedia();
3088
+ if (!editor)
3089
+ return null;
3090
+ const handleBoldClick = () => {
3091
+ editor.chain().focus().toggleBold().run();
3092
+ };
3093
+ const handleItalicClick = () => {
3094
+ editor.chain().focus().toggleItalic().run();
3095
+ };
3096
+ const handleMentionClick = () => {
3097
+ const { from } = editor.state.selection;
3098
+ const char = from > 1 ? " @" : "@";
3099
+ editor.chain().focus().insertContent(char).run();
3100
+ };
3101
+ const handleAttachmentClick = () => {
3102
+ const fileInput = document.createElement("input");
3103
+ fileInput.type = "file";
3104
+ fileInput.accept = "image/*,video/*";
3105
+ fileInput.multiple = true;
3106
+ fileInput.click();
3107
+ fileInput.onchange = () => {
3108
+ if (fileInput.files) {
3109
+ addThumbnails({ files: getMedia(fileInput.files) });
3110
+ }
3111
+ };
3113
3112
  };
3114
- return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(MenuContainer, Object.assign({ id: "menu-container" }, { children: [jsxRuntime.jsx(Tooltip, Object.assign({ content: `${(_b = (_a = i18n === null || i18n === void 0 ? void 0 : i18n.menu) === null || _a === void 0 ? void 0 : _a.bold) !== null && _b !== void 0 ? _b : "Bold text"} ${isMac() ? "Cmd" : "Ctrl"} + B`, placement: "top", type: "light", size: "small", hasArrow: false }, { children: jsxRuntime.jsx(IconButton, Object.assign({ size: "small", isBasic: !editor.isActive("bold"), isPrimary: editor.isActive("bold"), isPill: false, onClick: () => handleClick("bold") }, { children: getIcon("bold") })) })), jsxRuntime.jsx(Tooltip, Object.assign({ content: `${(_d = (_c = i18n === null || i18n === void 0 ? void 0 : i18n.menu) === null || _c === void 0 ? void 0 : _c.italic) !== null && _d !== void 0 ? _d : "Italic text"} ${isMac() ? "Cmd" : "Ctrl"} + I`, placement: "top", type: "light", size: "small", hasArrow: false }, { children: jsxRuntime.jsx(IconButton, Object.assign({ size: "small", isBasic: !editor.isActive("italic"), isPrimary: editor.isActive("italic"), isPill: false, onClick: () => handleClick("italic") }, { children: getIcon("italic") })) })), jsxRuntime.jsx(VerticalDivider, {}), jsxRuntime.jsx(Tooltip, Object.assign({ content: (_f = (_e = i18n === null || i18n === void 0 ? void 0 : i18n.menu) === null || _e === void 0 ? void 0 : _e.mention) !== null && _f !== void 0 ? _f : "Add a mention", placement: "top", type: "light", size: "small", hasArrow: false }, { children: jsxRuntime.jsx(IconButton, Object.assign({ size: "small", isBasic: !editor.isActive("mention"), isPrimary: editor.isActive("mention"), isPill: false, onClick: () => handleClick("mention") }, { children: getIcon("mention") })) })), jsxRuntime.jsx(Tooltip, Object.assign({ content: (_h = (_g = i18n === null || i18n === void 0 ? void 0 : i18n.menu) === null || _g === void 0 ? void 0 : _g.attachment) !== null && _h !== void 0 ? _h : "Upload images and video. Max size: 5GB", placement: "top", type: "light", size: "small", hasArrow: true }, { children: jsxRuntime.jsx(IconButton, Object.assign({ size: "small", isBasic: !editor.isActive("attachment"), isPrimary: editor.isActive("attachment"), isPill: false, onClick: () => handleClick("attachment") }, { children: getIcon("attachment") })) }))] })) }));
3113
+ return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(MenuContainer, Object.assign({ id: "menu-container" }, { children: [jsxRuntime.jsx(Tooltip, Object.assign({ content: `${(_b = (_a = i18n === null || i18n === void 0 ? void 0 : i18n.menu) === null || _a === void 0 ? void 0 : _a.bold) !== null && _b !== void 0 ? _b : "Bold text"} ${isMac() ? "Cmd" : "Ctrl"} + B`, placement: "top", type: "light", size: "small", hasArrow: false }, { children: jsxRuntime.jsx(IconButton, Object.assign({ size: "small", isBasic: !editor.isActive("bold"), isPrimary: editor.isActive("bold"), isPill: false, onClick: handleBoldClick }, { children: jsxRuntime.jsx(SvgBoldStroke, {}) })) })), jsxRuntime.jsx(Tooltip, Object.assign({ content: `${(_d = (_c = i18n === null || i18n === void 0 ? void 0 : i18n.menu) === null || _c === void 0 ? void 0 : _c.italic) !== null && _d !== void 0 ? _d : "Italic text"} ${isMac() ? "Cmd" : "Ctrl"} + I`, placement: "top", type: "light", size: "small", hasArrow: false }, { children: jsxRuntime.jsx(IconButton, Object.assign({ size: "small", isBasic: !editor.isActive("italic"), isPrimary: editor.isActive("italic"), isPill: false, onClick: handleItalicClick }, { children: jsxRuntime.jsx(SvgItalicStroke, {}) })) })), jsxRuntime.jsx(VerticalDivider, {}), jsxRuntime.jsx(Tooltip, Object.assign({ content: (_f = (_e = i18n === null || i18n === void 0 ? void 0 : i18n.menu) === null || _e === void 0 ? void 0 : _e.mention) !== null && _f !== void 0 ? _f : "Add a mention", placement: "top", type: "light", size: "small", hasArrow: false }, { children: jsxRuntime.jsx(IconButton, Object.assign({ size: "small", isBasic: !editor.isActive("mention"), isPrimary: editor.isActive("mention"), isPill: false, onClick: handleMentionClick }, { children: jsxRuntime.jsx(SvgAtStroke, {}) })) })), jsxRuntime.jsx(Tooltip, Object.assign({ style: { textAlign: "center" }, content: (_h = (_g = i18n === null || i18n === void 0 ? void 0 : i18n.menu) === null || _g === void 0 ? void 0 : _g.attachment) !== null && _h !== void 0 ? _h : (jsxRuntime.jsxs("span", { children: ["Upload images and video.", " ", jsxRuntime.jsxs("span", Object.assign({ style: { color: theme.palette.grey[600] } }, { children: [" ", jsxRuntime.jsx("br", {}), " Max size: 5GB", " "] }))] })), placement: "top", type: "light", size: "small", hasArrow: true }, { children: jsxRuntime.jsx(IconButton, Object.assign({ size: "small", isBasic: !editor.isActive("attachment"), isPrimary: editor.isActive("attachment"), isPill: false, onClick: handleAttachmentClick }, { children: jsxRuntime.jsx(SvgClipboard, {}) })) }))] })) }));
3115
3114
  };
3116
3115
 
3117
3116
  const CustomMention = Mention__default["default"].extend({
@@ -3288,7 +3287,7 @@ const editorExtensions = ({ placeholderOptions, mentionableUsers, }) => {
3288
3287
  },
3289
3288
  }),
3290
3289
  Dropcursor__default["default"].configure({
3291
- color: "#ff0000",
3290
+ color: getColor(colors.accentHue, 700),
3292
3291
  width: 3,
3293
3292
  }),
3294
3293
  Placeholder__default["default"].configure(Object.assign({ placeholder: ({ node }) => {
@@ -3360,20 +3359,20 @@ const editorExtensions = ({ placeholderOptions, mentionableUsers, }) => {
3360
3359
  ];
3361
3360
  };
3362
3361
 
3363
- var _circle$2, _path$o, _path2$6;
3364
- function _extends$s() { _extends$s = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$s.apply(this, arguments); }
3365
- const SvgRemoveMediaIcon = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$s({
3362
+ var _circle$3, _path$q, _path2$6;
3363
+ function _extends$v() { _extends$v = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$v.apply(this, arguments); }
3364
+ const SvgRemoveMediaIcon = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$v({
3366
3365
  width: 56,
3367
3366
  height: 56,
3368
3367
  viewBox: "0 0 56 56",
3369
3368
  fill: "#68737d",
3370
3369
  xmlns: "http://www.w3.org/2000/svg"
3371
- }, props), _circle$2 || (_circle$2 = /*#__PURE__*/React__namespace.createElement("circle", {
3370
+ }, props), _circle$3 || (_circle$3 = /*#__PURE__*/React__namespace.createElement("circle", {
3372
3371
  cx: 28,
3373
3372
  cy: 28,
3374
3373
  r: 28,
3375
3374
  fill: "#edf7ff"
3376
- })), _path$o || (_path$o = /*#__PURE__*/React__namespace.createElement("path", {
3375
+ })), _path$q || (_path$q = /*#__PURE__*/React__namespace.createElement("path", {
3377
3376
  d: "M16.929 16.929L39.071 39.071",
3378
3377
  stroke: "currentColor",
3379
3378
  strokeWidth: 4
@@ -3392,182 +3391,149 @@ const StyledDeleteThumbnailX = styled__default["default"].div `
3392
3391
  width: 32px;
3393
3392
  height: 32px;
3394
3393
  opacity: 0;
3394
+ transition: opacity 0.2s;
3395
3395
  z-index: 2;
3396
+ color: ${({ theme }) => theme.palette.grey[800]};
3396
3397
  `;
3397
3398
  const DeleteThumbnailX = ({ deleteThumbnail }) => {
3398
3399
  return (jsxRuntime.jsx(StyledDeleteThumbnailX, Object.assign({ className: "deleteThumbnail" }, { children: jsxRuntime.jsx(SvgRemoveMediaIcon, { onClick: (e) => deleteThumbnail(e) }) })));
3399
3400
  };
3400
3401
 
3401
- const ImageCard = styled__default["default"](SpecialCard) `
3402
- padding: 0;
3403
- :hover .deleteThumbnail {
3404
- opacity: 1;
3405
- }
3406
- `;
3407
- const Preview$1 = styled__default["default"].div `
3408
- display: flex;
3409
- justify-content: center;
3410
- align-items: center;
3411
- height: 150px;
3412
- width: 100%;
3413
- background-image: url(${(props) => props.url});
3414
- background-color: ${({ theme }) => theme.palette.grey[100]};
3415
- background-size: contain;
3416
- background-position: center;
3417
- background-repeat: no-repeat;
3418
- `;
3419
- const ImageThumbnail = ({ src, index = 0, removeThumbnail, clickThumbnail, showX = true, isLoadingMedia = true, isError = false, }) => {
3420
- const handleCancel = (e) => {
3421
- e.stopPropagation();
3422
- if (removeThumbnail)
3423
- removeThumbnail(index);
3424
- };
3425
- return (jsxRuntime.jsxs(ImageCard, Object.assign({ onClick: clickThumbnail }, { children: [isLoadingMedia && (jsxRuntime.jsx(Preview$1, Object.assign({ url: "" }, { children: jsxRuntime.jsx(reactLoaders.Spinner, { style: {
3426
- display: "flex",
3427
- alignItems: "center",
3428
- justifyContent: "center",
3429
- }, size: "large" }) }))), isError && (
3430
- // todo: add error icon
3431
- jsxRuntime.jsx("span", { children: "error uploading media" })), !isLoadingMedia && (jsxRuntime.jsx(Preview$1, Object.assign({ url: src }, { children: showX && (jsxRuntime.jsx(DeleteThumbnailX, { deleteThumbnail: (e) => handleCancel(e) })) })))] })));
3432
- };
3433
-
3434
- var _circle$1, _path$n;
3435
- function _extends$r() { _extends$r = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$r.apply(this, arguments); }
3436
- const SvgVideoPlayIcon = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$r({
3402
+ var _circle$2, _path$p;
3403
+ function _extends$u() { _extends$u = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$u.apply(this, arguments); }
3404
+ const SvgVideoPlayIcon = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$u({
3437
3405
  width: 56,
3438
3406
  height: 56,
3439
3407
  viewBox: "0 0 56 56",
3440
3408
  fill: "none",
3441
3409
  xmlns: "http://www.w3.org/2000/svg"
3442
- }, props), _circle$1 || (_circle$1 = /*#__PURE__*/React__namespace.createElement("circle", {
3410
+ }, props), _circle$2 || (_circle$2 = /*#__PURE__*/React__namespace.createElement("circle", {
3443
3411
  cx: 28,
3444
3412
  cy: 28,
3445
3413
  r: 28,
3446
3414
  fill: "white"
3447
- })), _path$n || (_path$n = /*#__PURE__*/React__namespace.createElement("path", {
3415
+ })), _path$p || (_path$p = /*#__PURE__*/React__namespace.createElement("path", {
3448
3416
  d: "M47 28L18.5 44.4545L18.5 11.5455L47 28Z",
3449
3417
  fill: "currentColor"
3450
3418
  })));
3451
3419
 
3452
- const VideoCard = styled__default["default"](SpecialCard) `
3420
+ const ImageCard = styled__default["default"](SpecialCard) `
3453
3421
  padding: 0;
3454
3422
  position: relative;
3455
3423
  overflow: hidden;
3456
-
3457
- &:hover .deleteThumbnail {
3458
- opacity: 1;
3459
- z-index: 9999;
3460
- }
3424
+ width: 90px;
3461
3425
 
3462
3426
  &:before {
3463
3427
  content: "";
3428
+ font-size: ${({ theme }) => theme.fontSizes.xs};
3464
3429
  position: absolute;
3430
+ padding: ${({ theme }) => theme.space.xs};
3465
3431
  top: 0;
3466
3432
  left: 0;
3467
3433
  width: 100%;
3468
3434
  height: 100%;
3469
- background-color: ${({ theme }) => theme.palette.grey[800]};
3470
- opacity: 0.3;
3471
- z-index: 1;
3435
+ background-color: ${({ theme }) => theme.palette.grey[800]}00; // 0% opacity
3436
+ transition: opacity 0.2s;
3472
3437
  }
3473
3438
 
3474
- > svg {
3475
- position: absolute;
3476
- top: 50%;
3477
- left: 50%;
3478
- transform: translate(-50%, -50%);
3479
- width: 32px;
3480
- height: 32px;
3481
- z-index: 2;
3439
+ &:hover {
3440
+ .deleteThumbnail {
3441
+ opacity: 1;
3442
+ }
3443
+ &:before {
3444
+ background-color: ${({ theme }) => theme.palette.grey[800]}4d; // 30% opacity
3445
+ }
3446
+ }
3447
+ ${(p) => p.error &&
3448
+ `
3449
+ &:before{
3450
+ content: "Error: ${p.error}";
3451
+ color: ${p.theme.palette.white};
3452
+ background-color: ${p.theme.palette.grey[800]}b3; // 0.7 opacity
3453
+ }
3454
+ `}
3455
+ ${(p) => p.isLoading &&
3456
+ `
3457
+ &:before{
3458
+ background-color: ${p.theme.palette.grey[800]}b3; // 0.7 opacity
3459
+ }
3460
+ `}
3461
+ &.video {
3462
+ svg {
3463
+ color: ${({ theme }) => theme.palette.grey[800]};
3464
+ position: absolute;
3465
+ top: 50%;
3466
+ left: 50%;
3467
+ transform: translate(-50%, -50%);
3468
+ width: 32px;
3469
+ height: 32px;
3470
+ z-index: 2;
3471
+ }
3482
3472
  }
3483
3473
  `;
3484
3474
  const Preview = styled__default["default"].div `
3485
- padding: ${({ theme }) => theme.space.md};
3486
3475
  display: flex;
3487
3476
  justify-content: center;
3488
3477
  align-items: center;
3489
- height: 150px;
3478
+ height: 100px;
3490
3479
  width: 100%;
3480
+ color: ${({ theme }) => theme.palette.white};
3481
+
3482
+ ${p => p.url &&
3483
+ `
3484
+ background-image: url(${p.url});
3485
+ background-color: ${p.theme.palette.grey[100]};
3486
+ background-size: cover;
3487
+ background-position: center;
3488
+ background-repeat: no-repeat;
3489
+ `}
3491
3490
 
3492
3491
  > video {
3493
3492
  width: 100%;
3494
3493
  height: 100%;
3495
3494
  }
3496
3495
  `;
3497
- const VideoThumbnail = ({ src, index = 0, removeThumbnail, clickThumbnail, showX = true, isLoadingMedia = true, isError = false, }) => {
3496
+ const Thumbnail = ({ src, type, removeThumbnail, clickThumbnail, showX, isLoadingMedia, error = "", }) => {
3498
3497
  const handleCancel = (e) => {
3499
3498
  e.stopPropagation();
3500
3499
  if (removeThumbnail)
3501
- removeThumbnail(index);
3500
+ removeThumbnail();
3502
3501
  };
3503
- return (jsxRuntime.jsxs(VideoCard, Object.assign({ onClick: clickThumbnail }, { children: [isLoadingMedia && (jsxRuntime.jsx(Preview, { children: jsxRuntime.jsx(reactLoaders.Spinner, { style: {
3504
- display: "flex",
3505
- alignItems: "center",
3506
- justifyContent: "center",
3507
- }, size: "large" }) })), isError && (
3508
- // todo: add error icon
3509
- jsxRuntime.jsx("span", { children: "error uploading media" })), !isLoadingMedia && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [showX && (jsxRuntime.jsx(DeleteThumbnailX, { deleteThumbnail: (e) => handleCancel(e) })), jsxRuntime.jsx(Preview, { children: jsxRuntime.jsx("video", Object.assign({ src: src }, { children: jsxRuntime.jsx("track", { kind: "captions" }) })) }), jsxRuntime.jsx(SvgVideoPlayIcon, {})] }))] })));
3502
+ return (jsxRuntime.jsx(ImageCard, Object.assign({ onClick: clickThumbnail, className: type.includes("video") ? "video" : "image", error: error, isLoading: isLoadingMedia }, { children: isLoadingMedia ? (jsxRuntime.jsx(Preview, Object.assign({ url: src }, { children: jsxRuntime.jsx(reactLoaders.Spinner, { style: {
3503
+ display: "flex",
3504
+ position: "absolute",
3505
+ color: "white",
3506
+ alignItems: "center",
3507
+ justifyContent: "center",
3508
+ }, size: "large" }) }))) : (jsxRuntime.jsxs(Preview, Object.assign({ url: src }, { children: [showX && (jsxRuntime.jsx(DeleteThumbnailX, { deleteThumbnail: (e) => handleCancel(e) })), type.includes("video") && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("video", Object.assign({ src: src }, { children: jsxRuntime.jsx("track", { kind: "captions" }) })), jsxRuntime.jsx(SvgVideoPlayIcon, { opacity: error ? "0.3" : "1" })] }))] }))) })));
3510
3509
  };
3511
3510
 
3512
- const UgGrid = styled__default["default"](reactGrid.Grid) `
3513
- padding-left: 0;
3514
- padding-right: 0;
3515
- `;
3516
- /**
3517
- * The Grid component is a framework for building modular layouts.
3518
- * <hr>
3519
- * Used for this:
3520
- - To structure the layout of a page
3521
- */
3522
- const Grid = (props) => jsxRuntime.jsx(UgGrid, Object.assign({}, props));
3523
-
3524
- const Row$1 = (props) => jsxRuntime.jsx(reactGrid.Row, Object.assign({}, props));
3525
-
3526
- const StyledCol$1 = styled__default["default"](reactGrid.Col) `
3527
- margin-bottom: ${theme.space.lg};
3528
-
3529
- @media screen and (max-width: ${theme.breakpoints.sm}) {
3530
- margin-bottom: ${theme.space.md};
3531
- }
3511
+ const FlexContainer = styled.styled.div `
3512
+ display: flex;
3513
+ gap: ${({ theme }) => theme.space.xs};
3514
+ flex-wrap: wrap;
3532
3515
  `;
3533
- const Col = (props) => jsxRuntime.jsx(StyledCol$1, Object.assign({}, props));
3534
-
3535
3516
  const ThumbnailContainer = ({ openLightbox }) => {
3536
3517
  const { thumbnails, removeThumbnail, onDeleteThumbnail } = useChatContext();
3537
- if (!thumbnails || thumbnails.length === 0) {
3538
- return null;
3539
- }
3540
- const mediaFiles = [];
3541
- thumbnails.forEach((file) => {
3542
- mediaFiles.push({
3518
+ const mediaFiles = React.useMemo(() => {
3519
+ return thumbnails.map((file) => ({
3543
3520
  fileName: file.name,
3544
3521
  fileType: file.type,
3545
- previewUrl: URL.createObjectURL(file),
3546
- internal_id: file.internal_id,
3522
+ previewUrl: file.url,
3523
+ id: file.id,
3547
3524
  isLoadingMedia: file.isLoadingMedia,
3548
- });
3549
- });
3525
+ error: file.error,
3526
+ }));
3527
+ }, [thumbnails]);
3550
3528
  if (!mediaFiles || mediaFiles.length === 0) {
3551
3529
  return null;
3552
3530
  }
3553
- return (jsxRuntime.jsx(Grid, { children: jsxRuntime.jsx(Row$1, Object.assign({ className: "responsive-container" }, { children: mediaFiles.map((file, index) => {
3554
- // Check if item is an image or a video
3555
- if (file.fileType.includes("image"))
3556
- return (jsxRuntime.jsx(Col, Object.assign({ xs: 12, sm: 3, xl: 3, lg: 3, className: "flex-3-sm" }, { children: jsxRuntime.jsx(ImageThumbnail, { src: file.previewUrl, index: index, showX: true, isLoadingMedia: file.isLoadingMedia, removeThumbnail: () => {
3557
- removeThumbnail(index);
3558
- onDeleteThumbnail(file.internal_id);
3559
- }, clickThumbnail: () => {
3560
- openLightbox(thumbnails[index], index);
3561
- } }, index) })));
3562
- if (file.fileType.includes("video"))
3563
- return (jsxRuntime.jsx(Col, Object.assign({ xs: 12, sm: 3, className: "flex-3-sm" }, { children: jsxRuntime.jsx(VideoThumbnail, { src: file.previewUrl, index: index, showX: true, isLoadingMedia: file.isLoadingMedia, removeThumbnail: () => {
3564
- removeThumbnail(index);
3565
- onDeleteThumbnail(file.internal_id);
3566
- }, clickThumbnail: () => {
3567
- openLightbox(thumbnails[index], index);
3568
- } }, index) })));
3569
- return null;
3570
- }) })) }));
3531
+ return (jsxRuntime.jsx(FlexContainer, { children: mediaFiles.map((file, index) => (jsxRuntime.jsx(Thumbnail, { src: file.previewUrl, showX: true, type: file.fileType, isLoadingMedia: file.isLoadingMedia, error: file.error, removeThumbnail: () => {
3532
+ removeThumbnail(index);
3533
+ onDeleteThumbnail(file.id);
3534
+ }, clickThumbnail: () => {
3535
+ openLightbox(index);
3536
+ } }, file.id))) }));
3571
3537
  };
3572
3538
 
3573
3539
  const UgModalBody = styled__default["default"](reactModals.Body) `
@@ -3636,28 +3602,28 @@ Lightbox.Body = ModalBody; // Includes Main and Details
3636
3602
  Lightbox.Footer = Footer$3;
3637
3603
  Lightbox.Close = reactModals.Close;
3638
3604
 
3639
- var _path$m;
3640
- function _extends$q() { _extends$q = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$q.apply(this, arguments); }
3641
- const SvgChevronLeftStroke = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$q({
3605
+ var _path$o;
3606
+ function _extends$t() { _extends$t = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$t.apply(this, arguments); }
3607
+ const SvgChevronLeftStroke = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$t({
3642
3608
  xmlns: "http://www.w3.org/2000/svg",
3643
3609
  width: 16,
3644
3610
  height: 16,
3645
3611
  focusable: "false",
3646
3612
  viewBox: "0 0 16 16"
3647
- }, props), _path$m || (_path$m = /*#__PURE__*/React__namespace.createElement("path", {
3613
+ }, props), _path$o || (_path$o = /*#__PURE__*/React__namespace.createElement("path", {
3648
3614
  fill: "currentColor",
3649
3615
  d: "M10.39 12.688a.5.5 0 01-.718.69l-.062-.066-4-5a.5.5 0 01-.054-.542l.054-.082 4-5a.5.5 0 01.83.55l-.05.074L6.641 8l3.75 4.688z"
3650
3616
  })));
3651
3617
 
3652
- var _path$l;
3653
- function _extends$p() { _extends$p = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$p.apply(this, arguments); }
3654
- const SvgChevronRightStroke = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$p({
3618
+ var _path$n;
3619
+ function _extends$s() { _extends$s = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$s.apply(this, arguments); }
3620
+ const SvgChevronRightStroke = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$s({
3655
3621
  xmlns: "http://www.w3.org/2000/svg",
3656
3622
  width: 16,
3657
3623
  height: 16,
3658
3624
  focusable: "false",
3659
3625
  viewBox: "0 0 16 16"
3660
- }, props), _path$l || (_path$l = /*#__PURE__*/React__namespace.createElement("path", {
3626
+ }, props), _path$n || (_path$n = /*#__PURE__*/React__namespace.createElement("path", {
3661
3627
  fill: "currentColor",
3662
3628
  d: "M5.61 3.312a.5.5 0 01.718-.69l.062.066 4 5a.5.5 0 01.054.542l-.054.082-4 5a.5.5 0 01-.83-.55l.05-.074L9.359 8l-3.75-4.688z"
3663
3629
  })));
@@ -3880,94 +3846,283 @@ Slider.Slide = Slide;
3880
3846
  Slider.PrevButton = PrevButton;
3881
3847
  Slider.NextButton = NextButton;
3882
3848
 
3883
- const UgProgress = styled__default["default"](reactLoaders.Progress) ``;
3884
- /**
3885
- * A Progress loader communicates progress when downloading or uploading content.
3886
- * <hr>
3887
- * Used for this:
3888
- * - To communicate the amount of time left when downloading or uploading content
3889
- *
3890
- Not for this:
3891
- - When the loading time is unknown, use a Spinner instead
3892
- - When loading page content, use a Skeleton loader instead
3893
- */
3894
- const Progress = React.forwardRef((props, ref) => (jsxRuntime.jsx(UgProgress, Object.assign({ ref: ref }, props))));
3895
-
3896
- const Wrapper$1 = styled__default["default"].div `
3897
- position: absolute;
3898
- bottom: ${({ theme }) => theme.space.sm};
3899
- z-index: 1;
3900
- `;
3901
- const Content$1 = styled__default["default"].div `
3902
- display: flex;
3903
- background-color: ${({ theme }) => theme.palette.grey[800]};
3904
- border-radius: 2px;
3905
- width: auto;
3906
- padding: 2px 4px;
3907
- display: inline-flex;
3908
- color: white;
3909
- align-items: center;
3910
- justify-content: center;
3911
- min-height: 16px;
3912
- `;
3913
- const PlayerTooltip = (_a) => {
3914
- var { children } = _a, props = __rest(_a, ["children"]);
3915
- return (jsxRuntime.jsx(Wrapper$1, Object.assign({}, props, { children: jsxRuntime.jsx(Content$1, { children: children }) })));
3916
- };
3849
+ var _path$m, _path2$5;
3850
+ function _extends$r() { _extends$r = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$r.apply(this, arguments); }
3851
+ const SvgVolumeMutedFill = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$r({
3852
+ xmlns: "http://www.w3.org/2000/svg",
3853
+ width: 16,
3854
+ height: 16,
3855
+ focusable: "false",
3856
+ viewBox: "0 0 16 16"
3857
+ }, props), _path$m || (_path$m = /*#__PURE__*/React__namespace.createElement("path", {
3858
+ stroke: "currentColor",
3859
+ strokeLinecap: "round",
3860
+ d: "M11.5 10l4-4m-4 0l4 4"
3861
+ })), _path2$5 || (_path2$5 = /*#__PURE__*/React__namespace.createElement("path", {
3862
+ fill: "currentColor",
3863
+ d: "M9 15.29c-.26 0-.51-.1-.71-.29l-4-4H1c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h3.29l4-4a1.002 1.002 0 011.71.71V14.3a.986.986 0 01-1 .99z"
3864
+ })));
3917
3865
 
3918
- var _path$k;
3919
- function _extends$o() { _extends$o = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$o.apply(this, arguments); }
3920
- const SvgPlayFill = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$o({
3866
+ var _path$l, _path2$4;
3867
+ function _extends$q() { _extends$q = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$q.apply(this, arguments); }
3868
+ const SvgVolumeUnmutedFill = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$q({
3921
3869
  xmlns: "http://www.w3.org/2000/svg",
3922
3870
  width: 16,
3923
3871
  height: 16,
3924
3872
  focusable: "false",
3925
3873
  viewBox: "0 0 16 16"
3926
- }, props), _path$k || (_path$k = /*#__PURE__*/React__namespace.createElement("path", {
3874
+ }, props), _path$l || (_path$l = /*#__PURE__*/React__namespace.createElement("path", {
3927
3875
  fill: "currentColor",
3928
- d: "M6 15.79c-.13 0-.26-.03-.38-.08a.977.977 0 01-.62-.92V1.21a1 1 0 01.62-.93C6 .12 6.42.21 6.71.5l6.44 6.44c.58.58.58 1.54 0 2.12L6.71 15.5c-.19.19-.45.29-.71.29z"
3876
+ d: "M9 15.29c-.26 0-.51-.1-.71-.29l-4-4H1c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h3.29l4-4a1.002 1.002 0 011.71.71V14.3a.986.986 0 01-1 .99z"
3877
+ })), _path2$4 || (_path2$4 = /*#__PURE__*/React__namespace.createElement("path", {
3878
+ fill: "none",
3879
+ stroke: "currentColor",
3880
+ strokeLinecap: "round",
3881
+ d: "M11.77 9.77c.45-.45.73-1.08.73-1.77s-.28-1.31-.73-1.77m2.17 5.6c.97-.99 1.56-2.34 1.56-3.83 0-1.52-.62-2.89-1.61-3.89"
3929
3882
  })));
3930
3883
 
3931
- var _g$1;
3932
- function _extends$n() { _extends$n = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$n.apply(this, arguments); }
3933
- const SvgPauseFill = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$n({
3884
+ const ControlButton = styled__default["default"](IconButton) `
3885
+ color: ${({ theme }) => theme.palette.grey[700]};
3886
+ `;
3887
+
3888
+ const AudioButton = () => {
3889
+ const [hasAudio, setHasAudio] = React.useState(false);
3890
+ const { isMuted, setMuted, context } = Video.useVideoContext();
3891
+ const { player } = context;
3892
+ const checkAudio = (video) => {
3893
+ if (!video) {
3894
+ return false;
3895
+ }
3896
+ const videohasAudio = video.mozHasAudio ||
3897
+ Boolean(video.webkitAudioDecodedByteCount) ||
3898
+ Boolean(video.audioTracks && video.audioTracks.length);
3899
+ setHasAudio(videohasAudio);
3900
+ };
3901
+ const hasVolume = (video) => {
3902
+ if (!video) {
3903
+ return false;
3904
+ }
3905
+ return video.volume > 0;
3906
+ };
3907
+ React.useEffect(() => {
3908
+ if (player && (player === null || player === void 0 ? void 0 : player.ref)) {
3909
+ setMuted(!hasVolume(player.ref.current));
3910
+ checkAudio(player.ref.current);
3911
+ }
3912
+ }, [context.isPlaying, isMuted, player, setMuted]);
3913
+ return (jsxRuntime.jsx(ControlButton, Object.assign({ disabled: !hasAudio, onClick: () => {
3914
+ if (player === null || player === void 0 ? void 0 : player.ref.current) {
3915
+ player.ref.current.volume = player.ref.current.volume > 0 ? 0 : 1;
3916
+ setMuted(!player.ref.current.volume);
3917
+ }
3918
+ } }, { children: isMuted || !hasAudio ? jsxRuntime.jsx(SvgVolumeMutedFill, {}) : jsxRuntime.jsx(SvgVolumeUnmutedFill, {}) })));
3919
+ };
3920
+
3921
+ const ProgressContext = React.createContext(null);
3922
+ const ProgressContextProvider = ({ children, }) => {
3923
+ const [isGrabbing, setIsGrabbing] = React.useState(false);
3924
+ const [fromEnd, setFromEnd] = React.useState(false);
3925
+ const [activeBookmark, setactiveBookmark] = React.useState(undefined);
3926
+ const progressContextValue = React.useMemo(() => ({
3927
+ isGrabbing,
3928
+ fromEnd,
3929
+ activeBookmark,
3930
+ setIsGrabbing,
3931
+ setFromEnd,
3932
+ setactiveBookmark,
3933
+ reset: () => {
3934
+ setIsGrabbing(false);
3935
+ setFromEnd(false);
3936
+ setactiveBookmark(undefined);
3937
+ },
3938
+ }), [isGrabbing, fromEnd, activeBookmark]);
3939
+ return (jsxRuntime.jsx(ProgressContext.Provider, Object.assign({ value: progressContextValue }, { children: children })));
3940
+ };
3941
+ const useProgressContext = () => {
3942
+ const context = React.useContext(ProgressContext);
3943
+ if (!context)
3944
+ throw new Error("Provider not found for ProgressContextProvider");
3945
+ return context; // Now we can use the context in the component, SAFELY.
3946
+ };
3947
+
3948
+ var _g$2;
3949
+ function _extends$p() { _extends$p = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$p.apply(this, arguments); }
3950
+ const SvgGrip = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$p({
3934
3951
  xmlns: "http://www.w3.org/2000/svg",
3935
3952
  width: 16,
3936
3953
  height: 16,
3937
3954
  focusable: "false",
3938
3955
  viewBox: "0 0 16 16"
3939
- }, props), _g$1 || (_g$1 = /*#__PURE__*/React__namespace.createElement("g", {
3956
+ }, props), _g$2 || (_g$2 = /*#__PURE__*/React__namespace.createElement("g", {
3940
3957
  fill: "currentColor"
3941
3958
  }, /*#__PURE__*/React__namespace.createElement("rect", {
3942
- width: 4,
3943
- height: 14,
3944
- x: 3,
3959
+ width: 2,
3960
+ height: 2,
3961
+ x: 5,
3945
3962
  y: 1,
3946
- rx: 1,
3947
- ry: 1
3963
+ rx: 0.5,
3964
+ ry: 0.5
3948
3965
  }), /*#__PURE__*/React__namespace.createElement("rect", {
3949
- width: 4,
3950
- height: 14,
3966
+ width: 2,
3967
+ height: 2,
3951
3968
  x: 9,
3952
3969
  y: 1,
3953
- rx: 1,
3954
- ry: 1
3970
+ rx: 0.5,
3971
+ ry: 0.5
3972
+ }), /*#__PURE__*/React__namespace.createElement("rect", {
3973
+ width: 2,
3974
+ height: 2,
3975
+ x: 5,
3976
+ y: 5,
3977
+ rx: 0.5,
3978
+ ry: 0.5
3979
+ }), /*#__PURE__*/React__namespace.createElement("rect", {
3980
+ width: 2,
3981
+ height: 2,
3982
+ x: 9,
3983
+ y: 5,
3984
+ rx: 0.5,
3985
+ ry: 0.5
3986
+ }), /*#__PURE__*/React__namespace.createElement("rect", {
3987
+ width: 2,
3988
+ height: 2,
3989
+ x: 5,
3990
+ y: 9,
3991
+ rx: 0.5,
3992
+ ry: 0.5
3993
+ }), /*#__PURE__*/React__namespace.createElement("rect", {
3994
+ width: 2,
3995
+ height: 2,
3996
+ x: 9,
3997
+ y: 9,
3998
+ rx: 0.5,
3999
+ ry: 0.5
4000
+ }), /*#__PURE__*/React__namespace.createElement("rect", {
4001
+ width: 2,
4002
+ height: 2,
4003
+ x: 5,
4004
+ y: 13,
4005
+ rx: 0.5,
4006
+ ry: 0.5
4007
+ }), /*#__PURE__*/React__namespace.createElement("rect", {
4008
+ width: 2,
4009
+ height: 2,
4010
+ x: 9,
4011
+ y: 13,
4012
+ rx: 0.5,
4013
+ ry: 0.5
3955
4014
  }))));
3956
4015
 
3957
- var _path$j, _path2$5, _path3$1;
3958
- function _extends$m() { _extends$m = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$m.apply(this, arguments); }
3959
- const SvgForwardSecondsFill = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$m({
4016
+ const StyledGrabber = styled.styled.div `
4017
+ position: absolute;
4018
+ display: none;
4019
+ ${({ isEnd }) => isEnd
4020
+ ? `
4021
+ right: 0;
4022
+ border-top-right-radius: 2px;
4023
+ border-bottom-right-radius: 2px;
4024
+ `
4025
+ : `
4026
+ left: 0;
4027
+ border-top-left-radius: 2px;
4028
+ border-bottom-left-radius: 2px;
4029
+ `}
4030
+ height: 100%;
4031
+ width: 8px;
4032
+ background-color: white;
4033
+ z-index: 2;
4034
+ cursor: ew-resize;
4035
+
4036
+ div {
4037
+ display: flex;
4038
+ justify-content: center;
4039
+ align-items: center;
4040
+ height: 100%;
4041
+ width: 100%;
4042
+ color: ${({ theme }) => theme.palette.grey[500]};
4043
+ svg {
4044
+ width: auto;
4045
+ height: 50%;
4046
+ }
4047
+ }
4048
+ `;
4049
+ const activeBookMark = styled.css `
4050
+ height: 250%;
4051
+ transform: translateY(-30%);
4052
+ cursor: pointer;
4053
+ z-index: 2;
4054
+ border-radius: 4px;
4055
+
4056
+ ${StyledGrabber} {
4057
+ display: block;
4058
+ }
4059
+ `;
4060
+ const Rect = styled.styled.div `
4061
+ position: absolute;
4062
+ height: 110%;
4063
+ background-color: ${({ hue, theme }) => getColor(hue || theme.palette.grey[800], undefined, undefined, 0.8)};
4064
+ z-index: 1;
4065
+ border-radius: 2px;
4066
+ color: white;
4067
+ transition: width 0.1s ease;
4068
+
4069
+ &:hover {
4070
+ background-color: ${({ hue, theme }) => hue || theme.palette.grey[800]};
4071
+ ${activeBookMark}
4072
+ }
4073
+
4074
+ ${({ isActive }) => isActive && activeBookMark}
4075
+ `;
4076
+ const StyledTooltip$1 = styled.styled(Tooltip) `
4077
+ margin-bottom: ${({ theme }) => theme.space.sm};
4078
+ color: ${({ tooltipColor }) => tooltipColor};
4079
+
4080
+ `;
4081
+ const Grabber = (props) => {
4082
+ const { observation } = props;
4083
+ const { setIsGrabbing, setactiveBookmark, setFromEnd } = useProgressContext();
4084
+ const handleDragStart = (e) => {
4085
+ setIsGrabbing(true);
4086
+ setactiveBookmark(observation);
4087
+ setFromEnd(!!props.isEnd);
4088
+ e.preventDefault();
4089
+ e.stopPropagation();
4090
+ };
4091
+ return (jsxRuntime.jsx(StyledGrabber, Object.assign({ isEnd: props.isEnd, onMouseDown: handleDragStart, onMouseMove: props.handleMouseMove }, { children: jsxRuntime.jsx("div", { children: jsxRuntime.jsx(SvgGrip, {}) }) })));
4092
+ };
4093
+ const Bookmark = (props) => {
4094
+ var _a, _b;
4095
+ const { start, end, hue, tooltipContent } = props;
4096
+ const { context } = Video.useVideoContext();
4097
+ const videoStart = context.part.start || 0;
4098
+ const videoEnd = context.part.end || ((_a = context.player) === null || _a === void 0 ? void 0 : _a.totalTime) || 0;
4099
+ const duration = videoEnd - videoStart || ((_b = context.player) === null || _b === void 0 ? void 0 : _b.totalTime) || 0; //relative
4100
+ const { activeBookmark } = useProgressContext();
4101
+ if (!context.player || !context.player.ref) {
4102
+ return null;
4103
+ }
4104
+ if (start > videoEnd || start < videoStart)
4105
+ return null;
4106
+ return (jsxRuntime.jsx(StyledTooltip$1, Object.assign({ content: tooltipContent, type: "light", size: "large", isTransparent: true }, { children: jsxRuntime.jsxs(Rect, Object.assign({ isActive: activeBookmark && activeBookmark.id === props.id, hue: hue, style: {
4107
+ left: `${((start - videoStart) / duration) * 100}%`,
4108
+ width: `${((end - start) / duration) * 100}%`,
4109
+ }, onClick: props.onClick }, { children: [jsxRuntime.jsx(Grabber, { observation: props }), jsxRuntime.jsx(Grabber, { isEnd: true, observation: props })] })) })));
4110
+ };
4111
+
4112
+ var _path$k, _path2$3, _path3$1;
4113
+ function _extends$o() { _extends$o = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$o.apply(this, arguments); }
4114
+ const SvgBackSecondsFill = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$o({
3960
4115
  width: 16,
3961
4116
  height: 16,
3962
4117
  viewBox: "0 0 16 16",
3963
4118
  fill: "none",
3964
4119
  xmlns: "http://www.w3.org/2000/svg"
3965
- }, props), _path$j || (_path$j = /*#__PURE__*/React__namespace.createElement("path", {
4120
+ }, props), _path$k || (_path$k = /*#__PURE__*/React__namespace.createElement("path", {
3966
4121
  fillRule: "evenodd",
3967
4122
  clipRule: "evenodd",
3968
- d: "M11.659 3.5C10.7411 2.85974 9.65081 2.5 8.5 2.5C5.45228 2.5 3 4.95228 3 8C3 11.0477 5.45228 13.5 8.5 13.5C10.2023 13.5 11.7457 12.7171 12.8191 11.3753C13.1641 10.944 13.7934 10.8741 14.2247 11.2191C14.656 11.5641 14.7259 12.1934 14.3809 12.6247C12.9372 14.4292 10.8263 15.5 8.5 15.5C4.34772 15.5 1 12.1523 1 8C1 3.84772 4.34772 0.5 8.5 0.5C10.1564 0.5 11.7168 1.04496 13 2.00147V1C13 0.447715 13.4477 0 14 0C14.5523 0 15 0.447715 15 1V4C15 4.85228 14.3523 5.5 13.5 5.5H10.5C9.94771 5.5 9.5 5.05228 9.5 4.5C9.5 3.94772 9.94771 3.5 10.5 3.5H11.659Z",
4123
+ d: "M4.34099 3.5C5.25886 2.85974 6.34919 2.5 7.5 2.5C10.5477 2.5 13 4.95228 13 8C13 11.0477 10.5477 13.5 7.5 13.5C5.79771 13.5 4.25432 12.7171 3.18087 11.3753C2.83586 10.944 2.20657 10.8741 1.7753 11.2191C1.34404 11.5641 1.27412 12.1934 1.61913 12.6247C3.06275 14.4292 5.17372 15.5 7.5 15.5C11.6523 15.5 15 12.1523 15 8C15 3.84772 11.6523 0.5 7.5 0.5C5.84359 0.5 4.28318 1.04496 3 2.00147V1C3 0.447715 2.55229 0 2 0C1.44771 0 1 0.447715 1 1V4C1 4.85228 1.64772 5.5 2.5 5.5H5.5C6.05229 5.5 6.5 5.05228 6.5 4.5C6.5 3.94772 6.05229 3.5 5.5 3.5H4.34099Z",
3969
4124
  fill: "currentColor"
3970
- })), _path2$5 || (_path2$5 = /*#__PURE__*/React__namespace.createElement("path", {
4125
+ })), _path2$3 || (_path2$3 = /*#__PURE__*/React__namespace.createElement("path", {
3971
4126
  d: "M5.5 7.63073V7.07008H6.67566V11H6.02566V7.63073H5.5Z",
3972
4127
  fill: "currentColor"
3973
4128
  })), _path3$1 || (_path3$1 = /*#__PURE__*/React__namespace.createElement("path", {
@@ -3975,20 +4130,20 @@ const SvgForwardSecondsFill = props => /*#__PURE__*/React__namespace.createEleme
3975
4130
  fill: "currentColor"
3976
4131
  })));
3977
4132
 
3978
- var _path$i, _path2$4, _path3;
3979
- function _extends$l() { _extends$l = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$l.apply(this, arguments); }
3980
- const SvgBackSecondsFill = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$l({
4133
+ var _path$j, _path2$2, _path3;
4134
+ function _extends$n() { _extends$n = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$n.apply(this, arguments); }
4135
+ const SvgForwardSecondsFill = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$n({
3981
4136
  width: 16,
3982
4137
  height: 16,
3983
4138
  viewBox: "0 0 16 16",
3984
4139
  fill: "none",
3985
4140
  xmlns: "http://www.w3.org/2000/svg"
3986
- }, props), _path$i || (_path$i = /*#__PURE__*/React__namespace.createElement("path", {
4141
+ }, props), _path$j || (_path$j = /*#__PURE__*/React__namespace.createElement("path", {
3987
4142
  fillRule: "evenodd",
3988
4143
  clipRule: "evenodd",
3989
- d: "M4.34099 3.5C5.25886 2.85974 6.34919 2.5 7.5 2.5C10.5477 2.5 13 4.95228 13 8C13 11.0477 10.5477 13.5 7.5 13.5C5.79771 13.5 4.25432 12.7171 3.18087 11.3753C2.83586 10.944 2.20657 10.8741 1.7753 11.2191C1.34404 11.5641 1.27412 12.1934 1.61913 12.6247C3.06275 14.4292 5.17372 15.5 7.5 15.5C11.6523 15.5 15 12.1523 15 8C15 3.84772 11.6523 0.5 7.5 0.5C5.84359 0.5 4.28318 1.04496 3 2.00147V1C3 0.447715 2.55229 0 2 0C1.44771 0 1 0.447715 1 1V4C1 4.85228 1.64772 5.5 2.5 5.5H5.5C6.05229 5.5 6.5 5.05228 6.5 4.5C6.5 3.94772 6.05229 3.5 5.5 3.5H4.34099Z",
4144
+ d: "M11.659 3.5C10.7411 2.85974 9.65081 2.5 8.5 2.5C5.45228 2.5 3 4.95228 3 8C3 11.0477 5.45228 13.5 8.5 13.5C10.2023 13.5 11.7457 12.7171 12.8191 11.3753C13.1641 10.944 13.7934 10.8741 14.2247 11.2191C14.656 11.5641 14.7259 12.1934 14.3809 12.6247C12.9372 14.4292 10.8263 15.5 8.5 15.5C4.34772 15.5 1 12.1523 1 8C1 3.84772 4.34772 0.5 8.5 0.5C10.1564 0.5 11.7168 1.04496 13 2.00147V1C13 0.447715 13.4477 0 14 0C14.5523 0 15 0.447715 15 1V4C15 4.85228 14.3523 5.5 13.5 5.5H10.5C9.94771 5.5 9.5 5.05228 9.5 4.5C9.5 3.94772 9.94771 3.5 10.5 3.5H11.659Z",
3990
4145
  fill: "currentColor"
3991
- })), _path2$4 || (_path2$4 = /*#__PURE__*/React__namespace.createElement("path", {
4146
+ })), _path2$2 || (_path2$2 = /*#__PURE__*/React__namespace.createElement("path", {
3992
4147
  d: "M5.5 7.63073V7.07008H6.67566V11H6.02566V7.63073H5.5Z",
3993
4148
  fill: "currentColor"
3994
4149
  })), _path3 || (_path3 = /*#__PURE__*/React__namespace.createElement("path", {
@@ -3996,7 +4151,46 @@ const SvgBackSecondsFill = props => /*#__PURE__*/React__namespace.createElement(
3996
4151
  fill: "currentColor"
3997
4152
  })));
3998
4153
 
3999
- var _path$h, _path2$3;
4154
+ var _g$1;
4155
+ function _extends$m() { _extends$m = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$m.apply(this, arguments); }
4156
+ const SvgPauseFill = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$m({
4157
+ xmlns: "http://www.w3.org/2000/svg",
4158
+ width: 16,
4159
+ height: 16,
4160
+ focusable: "false",
4161
+ viewBox: "0 0 16 16"
4162
+ }, props), _g$1 || (_g$1 = /*#__PURE__*/React__namespace.createElement("g", {
4163
+ fill: "currentColor"
4164
+ }, /*#__PURE__*/React__namespace.createElement("rect", {
4165
+ width: 4,
4166
+ height: 14,
4167
+ x: 3,
4168
+ y: 1,
4169
+ rx: 1,
4170
+ ry: 1
4171
+ }), /*#__PURE__*/React__namespace.createElement("rect", {
4172
+ width: 4,
4173
+ height: 14,
4174
+ x: 9,
4175
+ y: 1,
4176
+ rx: 1,
4177
+ ry: 1
4178
+ }))));
4179
+
4180
+ var _path$i;
4181
+ function _extends$l() { _extends$l = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$l.apply(this, arguments); }
4182
+ const SvgPlayFill = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$l({
4183
+ xmlns: "http://www.w3.org/2000/svg",
4184
+ width: 16,
4185
+ height: 16,
4186
+ focusable: "false",
4187
+ viewBox: "0 0 16 16"
4188
+ }, props), _path$i || (_path$i = /*#__PURE__*/React__namespace.createElement("path", {
4189
+ fill: "currentColor",
4190
+ d: "M6 15.79c-.13 0-.26-.03-.38-.08a.977.977 0 01-.62-.92V1.21a1 1 0 01.62-.93C6 .12 6.42.21 6.71.5l6.44 6.44c.58.58.58 1.54 0 2.12L6.71 15.5c-.19.19-.45.29-.71.29z"
4191
+ })));
4192
+
4193
+ var _path$h, _path2$1;
4000
4194
  function _extends$k() { _extends$k = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$k.apply(this, arguments); }
4001
4195
  const SvgPreviousFill = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$k({
4002
4196
  xmlns: "http://www.w3.org/2000/svg",
@@ -4007,7 +4201,7 @@ const SvgPreviousFill = props => /*#__PURE__*/React__namespace.createElement("sv
4007
4201
  }, props), _path$h || (_path$h = /*#__PURE__*/React__namespace.createElement("path", {
4008
4202
  d: "M2.75 20C2.75 20.5523 3.19772 21 3.75 21C4.30228 21 4.75 20.5523 4.75 20L4.75 4C4.75 3.44772 4.30229 3 3.75 3C3.19772 3 2.75 3.44772 2.75 4V20Z",
4009
4203
  fill: "currentColor"
4010
- })), _path2$3 || (_path2$3 = /*#__PURE__*/React__namespace.createElement("path", {
4204
+ })), _path2$1 || (_path2$1 = /*#__PURE__*/React__namespace.createElement("path", {
4011
4205
  d: "M20.75 19.0526C20.75 20.4774 19.1383 21.305 17.9803 20.4748L7.51062 12.9682C6.50574 12.2477 6.54467 10.7407 7.5854 10.073L18.0551 3.35665C19.2198 2.60946 20.75 3.44583 20.75 4.82961L20.75 19.0526Z",
4012
4206
  fill: "currentColor"
4013
4207
  })));
@@ -4037,8 +4231,9 @@ const getNextPlaybackRate = (rate = 1) => {
4037
4231
  const StyledDiv$3 = styled__default["default"].div `
4038
4232
  display: flex;
4039
4233
  align-items: center;
4234
+ justify-content: center;
4040
4235
  `;
4041
- const ControlsGroupCenter = () => {
4236
+ const ControlsGroupCenter = (props) => {
4042
4237
  var _a;
4043
4238
  const [playBackRate, setPlayBackRate] = React.useState(1);
4044
4239
  const { context, togglePlay } = Video.useVideoContext();
@@ -4061,107 +4256,77 @@ const ControlsGroupCenter = () => {
4061
4256
  const nextTime = videoRef.currentTime + 10;
4062
4257
  videoRef.currentTime = nextTime;
4063
4258
  };
4064
- return (jsxRuntime.jsxs(StyledDiv$3, { children: [jsxRuntime.jsx(IconButton, Object.assign({ isBright: true, onClick: (e) => {
4259
+ return (jsxRuntime.jsxs(StyledDiv$3, Object.assign({}, props, { children: [jsxRuntime.jsx(ControlButton, Object.assign({ onClick: (e) => {
4065
4260
  if (videoRef) {
4066
4261
  videoRef.currentTime = 0;
4067
4262
  }
4068
4263
  e.stopPropagation();
4069
- } }, { children: jsxRuntime.jsx(SvgPreviousFill, {}) })), jsxRuntime.jsx(IconButton, Object.assign({ isBright: true, onClick: (e) => {
4264
+ } }, { children: jsxRuntime.jsx(SvgPreviousFill, {}) })), jsxRuntime.jsx(ControlButton, Object.assign({ onClick: (e) => {
4070
4265
  onRewind();
4071
4266
  e.stopPropagation();
4072
- } }, { children: jsxRuntime.jsx(SvgBackSecondsFill, {}) })), jsxRuntime.jsx(IconButton, Object.assign({ isBright: true, size: "large", onClick: togglePlay }, { children: isPlaying ? (jsxRuntime.jsx(SvgPauseFill, { style: { width: "24px", height: "24px" } })) : (jsxRuntime.jsx(SvgPlayFill, { style: { width: "24px", height: "24px" } })) })), jsxRuntime.jsx(IconButton, Object.assign({ isBright: true, onClick: (e) => {
4267
+ } }, { children: jsxRuntime.jsx(SvgBackSecondsFill, {}) })), jsxRuntime.jsx(ControlButton, Object.assign({ size: "large", onClick: togglePlay }, { children: isPlaying ? (jsxRuntime.jsx(SvgPauseFill, { style: { width: "24px", height: "24px" } })) : (jsxRuntime.jsx(SvgPlayFill, { style: { width: "24px", height: "24px" } })) })), jsxRuntime.jsx(ControlButton, Object.assign({ onClick: (e) => {
4073
4268
  onForward();
4074
4269
  e.stopPropagation();
4075
- } }, { children: jsxRuntime.jsx(SvgForwardSecondsFill, {}) })), jsxRuntime.jsx(IconButton, Object.assign({ isBright: true, isPill: true, onClick: (e) => {
4270
+ } }, { children: jsxRuntime.jsx(SvgForwardSecondsFill, {}) })), jsxRuntime.jsx(ControlButton, Object.assign({ isPill: true, onClick: (e) => {
4076
4271
  const newSpeed = getNextPlaybackRate(playBackRate);
4077
4272
  if (videoRef === null || videoRef === void 0 ? void 0 : videoRef.playbackRate) {
4078
4273
  setPlayBackRate(newSpeed);
4079
4274
  videoRef.playbackRate = newSpeed;
4080
4275
  }
4081
4276
  e.stopPropagation();
4082
- } }, { children: jsxRuntime.jsxs(SM, Object.assign({ isBold: true, style: { lineHeight: "16px" } }, { children: [playBackRate, "x"] })) }))] }));
4277
+ } }, { children: jsxRuntime.jsxs(SM, Object.assign({ isBold: true, style: { lineHeight: "16px" } }, { children: [playBackRate, "x"] })) }))] })));
4083
4278
  };
4084
4279
 
4085
- const StyledDiv$2 = styled__default["default"].div `
4086
- position: absolute;
4087
- bottom: ${({ theme }) => theme.space.sm};
4088
- right: 0;
4089
-
4090
- padding: 0 ${({ theme }) => theme.space.xs};
4091
-
4092
- span {
4093
- color: ${({ theme }) => theme.palette.grey[300]};
4094
- }
4095
- `;
4096
- const TimeLabel = ({ current, duration, }) => (jsxRuntime.jsx(StyledDiv$2, { children: jsxRuntime.jsxs(SM, Object.assign({ tag: "span" }, { children: [current, "/", duration] })) }));
4097
-
4098
- var _path$g, _path2$2;
4280
+ var _path$g, _circle$1;
4099
4281
  function _extends$j() { _extends$j = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$j.apply(this, arguments); }
4100
- const SvgVolumeMutedFill = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$j({
4101
- xmlns: "http://www.w3.org/2000/svg",
4102
- width: 16,
4103
- height: 16,
4104
- focusable: "false",
4105
- viewBox: "0 0 16 16"
4106
- }, props), _path$g || (_path$g = /*#__PURE__*/React__namespace.createElement("path", {
4107
- stroke: "currentColor",
4108
- strokeLinecap: "round",
4109
- d: "M11.5 10l4-4m-4 0l4 4"
4110
- })), _path2$2 || (_path2$2 = /*#__PURE__*/React__namespace.createElement("path", {
4111
- fill: "currentColor",
4112
- d: "M9 15.29c-.26 0-.51-.1-.71-.29l-4-4H1c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h3.29l4-4a1.002 1.002 0 011.71.71V14.3a.986.986 0 01-1 .99z"
4113
- })));
4114
-
4115
- var _path$f, _path2$1;
4116
- function _extends$i() { _extends$i = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$i.apply(this, arguments); }
4117
- const SvgVolumeUnmutedFill = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$i({
4282
+ const SvgTagStroke = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$j({
4118
4283
  xmlns: "http://www.w3.org/2000/svg",
4119
4284
  width: 16,
4120
- height: 16,
4121
- focusable: "false",
4122
- viewBox: "0 0 16 16"
4123
- }, props), _path$f || (_path$f = /*#__PURE__*/React__namespace.createElement("path", {
4124
- fill: "currentColor",
4125
- d: "M9 15.29c-.26 0-.51-.1-.71-.29l-4-4H1c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h3.29l4-4a1.002 1.002 0 011.71.71V14.3a.986.986 0 01-1 .99z"
4126
- })), _path2$1 || (_path2$1 = /*#__PURE__*/React__namespace.createElement("path", {
4285
+ height: 16,
4286
+ focusable: "false",
4287
+ viewBox: "0 0 16 16"
4288
+ }, props), _path$g || (_path$g = /*#__PURE__*/React__namespace.createElement("path", {
4127
4289
  fill: "none",
4128
4290
  stroke: "currentColor",
4129
- strokeLinecap: "round",
4130
- d: "M11.77 9.77c.45-.45.73-1.08.73-1.77s-.28-1.31-.73-1.77m2.17 5.6c.97-.99 1.56-2.34 1.56-3.83 0-1.52-.62-2.89-1.61-3.89"
4291
+ d: "M.5 1v5.3c0 .1.1.3.1.4l8.5 8.5c.2.2.5.2.7 0l5.3-5.3c.2-.2.2-.5 0-.7L6.6.6S6.4.5 6.3.5H1C.7.5.5.7.5 1z"
4292
+ })), _circle$1 || (_circle$1 = /*#__PURE__*/React__namespace.createElement("circle", {
4293
+ cx: 4,
4294
+ cy: 4,
4295
+ r: 1,
4296
+ fill: "currentColor"
4131
4297
  })));
4132
4298
 
4133
- const AudioButton = () => {
4134
- const [hasAudio, setHasAudio] = React.useState(false);
4135
- const { isMuted, setMuted, context } = Video.useVideoContext();
4136
- const { player } = context;
4137
- const checkAudio = (video) => {
4138
- if (!video) {
4139
- return false;
4140
- }
4141
- console.log("hasAudio?", video);
4142
- const videohasAudio = video.mozHasAudio ||
4143
- Boolean(video.webkitAudioDecodedByteCount) ||
4144
- Boolean(video.audioTracks && video.audioTracks.length);
4145
- setHasAudio(videohasAudio);
4146
- };
4147
- const hasVolume = (video) => {
4148
- if (!video) {
4149
- return false;
4150
- }
4151
- return video.volume > 0;
4152
- };
4153
- React.useEffect(() => {
4154
- if (player && (player === null || player === void 0 ? void 0 : player.ref)) {
4155
- setMuted(!hasVolume(player.ref.current));
4156
- checkAudio(player.ref.current);
4157
- }
4158
- }, [context.isPlaying, isMuted]);
4159
- return (jsxRuntime.jsx(IconButton, Object.assign({ isBright: true, disabled: !hasAudio, onClick: () => {
4160
- if (player === null || player === void 0 ? void 0 : player.ref.current) {
4161
- player.ref.current.volume = player.ref.current.volume > 0 ? 0 : 1;
4162
- setMuted(!player.ref.current.volume);
4299
+ var _path$f;
4300
+ function _extends$i() { _extends$i = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$i.apply(this, arguments); }
4301
+ const SvgPlus$1 = props => /*#__PURE__*/React__namespace.createElement("svg", _extends$i({
4302
+ width: 12,
4303
+ height: 12,
4304
+ viewBox: "0 0 12 12",
4305
+ fill: "none",
4306
+ xmlns: "http://www.w3.org/2000/svg"
4307
+ }, props), _path$f || (_path$f = /*#__PURE__*/React__namespace.createElement("path", {
4308
+ fillRule: "evenodd",
4309
+ clipRule: "evenodd",
4310
+ d: "M6.5 1C6.19318 1 5.94444 1.24873 5.94444 1.55556V5.44444H2.05556C1.74873 5.44444 1.5 5.69318 1.5 6C1.5 6.30683 1.74873 6.55556 2.05556 6.55556H5.94444V10.4444C5.94444 10.7513 6.19318 11 6.5 11C6.80683 11 7.05556 10.7513 7.05556 10.4444V6.55556H10.9444C11.2513 6.55556 11.5 6.30683 11.5 6C11.5 5.69318 11.2513 5.44444 10.9444 5.44444H7.05556V1.55556C7.05556 1.24873 6.80683 1 6.5 1Z",
4311
+ fill: "currentColor"
4312
+ })));
4313
+
4314
+ // Prevent button from breaking on smaller screens
4315
+ const StyledButton$2 = styled.styled(Button) `
4316
+ overflow: visible;
4317
+ `;
4318
+ const Cutter = ({ onCutHandler, isCutting, i18n, }) => {
4319
+ var _a;
4320
+ const { context } = Video.useVideoContext();
4321
+ const videoRef = (_a = context.player) === null || _a === void 0 ? void 0 : _a.ref.current;
4322
+ if (!onCutHandler)
4323
+ return null;
4324
+ return (jsxRuntime.jsx(StyledButton$2, Object.assign({ isPrimary: true, isAccent: !isCutting, size: "small", onClick: (e) => {
4325
+ if (videoRef) {
4326
+ onCutHandler(videoRef.currentTime);
4163
4327
  }
4164
- } }, { children: isMuted || !hasAudio ? jsxRuntime.jsx(SvgVolumeMutedFill, {}) : jsxRuntime.jsx(SvgVolumeUnmutedFill, {}) })));
4328
+ e.stopPropagation();
4329
+ } }, { children: isCutting ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Button.StartIcon, { children: jsxRuntime.jsx(SvgTagStroke, {}) }), jsxRuntime.jsx(Span, { children: (i18n === null || i18n === void 0 ? void 0 : i18n.onHighlight) || "End observation" })] })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Button.StartIcon, { children: jsxRuntime.jsx(SvgPlus$1, {}) }), jsxRuntime.jsx(Span, { children: (i18n === null || i18n === void 0 ? void 0 : i18n.beforeHighlight) || "Start observation" })] })) })));
4165
4330
  };
4166
4331
 
4167
4332
  var _path$e;
@@ -4230,7 +4395,7 @@ const FullScreenButton = ({ container, }) => {
4230
4395
  setFullScreen(false);
4231
4396
  }
4232
4397
  }
4233
- }), [ref, isFullScreen]);
4398
+ }), [ref, isFullScreen, setFullScreen]);
4234
4399
  const canGoFullScreen = React.useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
4235
4400
  if (ref) {
4236
4401
  return (requestFullscreen ||
@@ -4255,31 +4420,89 @@ const FullScreenButton = ({ container, }) => {
4255
4420
  }
4256
4421
  };
4257
4422
  }, [ref]);
4258
- return (jsxRuntime.jsx(IconButton, Object.assign({ isBright: true, onClick: (e) => {
4423
+ return (jsxRuntime.jsx(ControlButton, Object.assign({ onClick: (e) => {
4259
4424
  handleFullScreen();
4260
4425
  e.stopPropagation();
4261
4426
  }, disabled: !canGoFullScreen() }, { children: document.fullscreenElement || isFullScreen ? (jsxRuntime.jsx(SvgMinimizeStroke, {})) : (jsxRuntime.jsx(SvgMaximizeStroke, {})) })));
4262
4427
  };
4263
4428
 
4264
- const ControlsWrapper = styled__default["default"].div `
4429
+ const UgProgress = styled__default["default"](reactLoaders.Progress) ``;
4430
+ /**
4431
+ * A Progress loader communicates progress when downloading or uploading content.
4432
+ * <hr>
4433
+ * Used for this:
4434
+ * - To communicate the amount of time left when downloading or uploading content
4435
+ *
4436
+ Not for this:
4437
+ - When the loading time is unknown, use a Spinner instead
4438
+ - When loading page content, use a Skeleton loader instead
4439
+ */
4440
+ const Progress = React.forwardRef((props, ref) => (jsxRuntime.jsx(UgProgress, Object.assign({ ref: ref }, props))));
4441
+
4442
+ const StyledProgress = styled.styled(Progress) `
4443
+ width: 100%;
4444
+ border-radius: 0;
4445
+ color: ${({ theme }) => theme.palette.grey[400]};
4446
+ cursor: pointer;
4447
+ > div {
4448
+ border-radius: 0;
4449
+ }
4450
+ `;
4451
+ const ProgressBar = React.forwardRef((props, ref) => {
4452
+ const { progress, handleSkipAhead } = props;
4453
+ return (jsxRuntime.jsx(StyledProgress, { className: "progress-bar-1", ref: ref, value: progress, onClick: (e) => handleSkipAhead(e.clientX) }));
4454
+ });
4455
+
4456
+ const StyledDiv$2 = styled__default["default"].div `
4457
+ display: flex;
4458
+ color: ${({ theme }) => theme.palette.grey[700]};
4459
+ `;
4460
+ const TimeLabel = ({ current, duration, }) => (jsxRuntime.jsx(StyledDiv$2, { children: jsxRuntime.jsxs(SM, Object.assign({ tag: "span" }, { children: [formatDuration(current), "/", formatDuration(duration)] })) }));
4461
+
4462
+ const Wrapper$1 = styled__default["default"].div `
4265
4463
  position: absolute;
4464
+ bottom: ${({ theme }) => theme.space.sm};
4465
+ z-index: 1;
4466
+ `;
4467
+ const Content$1 = styled__default["default"].div `
4468
+ display: flex;
4469
+ background-color: ${({ theme }) => theme.palette.grey[800]};
4470
+ border-radius: 2px;
4471
+ width: auto;
4472
+ padding: 2px 4px;
4473
+ display: inline-flex;
4474
+ color: white;
4475
+ font-size: ${({ theme }) => theme.fontSizes.sm};
4476
+ align-items: center;
4477
+ justify-content: center;
4478
+ min-height: 14px;
4479
+ `;
4480
+ const PlayerTooltip = (_a) => {
4481
+ var { children } = _a, props = __rest(_a, ["children"]);
4482
+ return (jsxRuntime.jsx(Wrapper$1, Object.assign({}, props, { children: jsxRuntime.jsx(Content$1, { children: children }) })));
4483
+ };
4484
+
4485
+ function useDebounce(value, delay) {
4486
+ const [debouncedValue, setDebouncedValue] = React.useState(value);
4487
+ React.useEffect(() => {
4488
+ const timer = setTimeout(() => setDebouncedValue(value), delay || 500);
4489
+ return () => {
4490
+ clearTimeout(timer);
4491
+ };
4492
+ }, [value, delay]);
4493
+ return debouncedValue;
4494
+ }
4495
+
4496
+ const ControlsWrapper = styled__default["default"].div `
4497
+ ${({ showControls }) => showControls ? "position: relative;" : "position: absolute;"}
4266
4498
  bottom: 0;
4267
4499
  left: 0;
4268
4500
  right: 0;
4269
4501
  padding: ${({ theme }) => theme.space.xxs} 0;
4270
- background-color: ${({ theme }) => reactTheming.getColor(theme.palette.grey, 700, undefined, 0.8)};
4502
+ background-color: ${({ theme }) => theme.palette.grey[100]};
4271
4503
  ${({ isPlaying }) => isPlaying && "display: none;"}
4272
4504
  z-index: 2;
4273
4505
  `;
4274
- const StyledProgress = styled__default["default"](Progress) `
4275
- width: 100%;
4276
- border-radius: 0;
4277
- color: ${({ theme }) => theme.palette.kale[700]};
4278
- cursor: pointer;
4279
- > div {
4280
- border-radius: 0;
4281
- }
4282
- `;
4283
4506
  const StyledTooltip = styled__default["default"](PlayerTooltip) `
4284
4507
  display: none;
4285
4508
  `;
@@ -4298,18 +4521,34 @@ const StyledDiv$1 = styled__default["default"].div `
4298
4521
  display: flex;
4299
4522
  align-items: center;
4300
4523
  `;
4301
- const Controls = ({ container, }) => {
4524
+ const CurrentTimeMarker = styled__default["default"].div `
4525
+ width: 2px;
4526
+ top: 0;
4527
+ left: ${({ left }) => `${left}%`};
4528
+ position: absolute;
4529
+ height: 110%;
4530
+ z-index: 1;
4531
+ background-color: white;
4532
+ `;
4533
+ const Controls = ({ container, onCutHandler, bookmarks, isCutting, onBookMarkUpdated, i18n, showControls = false, }) => {
4302
4534
  var _a, _b, _c;
4303
4535
  const [progress, setProgress] = React.useState(0);
4304
4536
  const [tooltipMargin, setTooltipMargin] = React.useState(0);
4305
4537
  const [tooltipLabel, setTooltipLabel] = React.useState("00:00");
4538
+ const [marks, setMarks] = React.useState(bookmarks);
4539
+ const [updatedMark, setUpdatedMark] = React.useState();
4306
4540
  const progressRef = React.useRef(null);
4307
4541
  const { context, setCurrentTime } = Video.useVideoContext();
4542
+ const debouncedMark = useDebounce(updatedMark, 500);
4543
+ const { reset, isGrabbing, activeBookmark, fromEnd } = useProgressContext();
4544
+ React.useEffect(() => {
4545
+ setMarks(bookmarks);
4546
+ }, [bookmarks]);
4308
4547
  const relCurrentTime = ((_a = context.player) === null || _a === void 0 ? void 0 : _a.currentTime)
4309
4548
  ? ((_b = context.player) === null || _b === void 0 ? void 0 : _b.currentTime) - context.part.start
4310
4549
  : 0;
4311
4550
  const duration = context.part.end - context.part.start || ((_c = context.player) === null || _c === void 0 ? void 0 : _c.totalTime) || 0; //relative
4312
- const getVideoPositionFromEvent = (clientX) => {
4551
+ const getVideoPositionFromEvent = React.useCallback((clientX) => {
4313
4552
  if (progressRef && progressRef.current && duration) {
4314
4553
  const bounds = progressRef.current.getBoundingClientRect();
4315
4554
  const x = clientX - bounds.left;
@@ -4317,12 +4556,18 @@ const Controls = ({ container, }) => {
4317
4556
  return videoPositionSecs;
4318
4557
  }
4319
4558
  return 0;
4320
- };
4559
+ }, [progressRef, duration]);
4560
+ const getProgress = React.useCallback((currentTime) => {
4561
+ const current = currentTime - (context.part.start || 0);
4562
+ if (duration === 0)
4563
+ return 0;
4564
+ return (current / duration) * 100;
4565
+ }, [context.part.start, duration]);
4321
4566
  const handleSkipAhead = React.useCallback((pageX) => {
4322
4567
  const time = getVideoPositionFromEvent(pageX) + (context.part.start || 0);
4323
4568
  setCurrentTime(time);
4324
4569
  setProgress(getProgress(time));
4325
- }, [context.player, context.part]);
4570
+ }, [getVideoPositionFromEvent, context.part.start, setCurrentTime, getProgress]);
4326
4571
  const onMouseEvent = (e) => {
4327
4572
  if (progressRef && progressRef.current) {
4328
4573
  const tooltipWidth = 40;
@@ -4333,20 +4578,45 @@ const Controls = ({ container, }) => {
4333
4578
  const videoTargetDuration = getVideoPositionFromEvent(e.clientX);
4334
4579
  setTooltipMargin(newTooltipMargin);
4335
4580
  setTooltipLabel(formatDuration(videoTargetDuration));
4581
+ if (isGrabbing) {
4582
+ handleBookmarkUpdate(marginX, progressRef.current.clientWidth);
4583
+ }
4336
4584
  }
4337
4585
  };
4586
+ const handleBookmarkUpdate = React.useCallback((newX, clientW) => {
4587
+ if (!activeBookmark || !marks)
4588
+ return;
4589
+ const currentObsIndex = marks.findIndex((mark) => mark.id === activeBookmark.id);
4590
+ const value = (newX / clientW) * duration + context.part.start;
4591
+ const updatedMark = Object.assign(Object.assign({}, marks[currentObsIndex]), (!!fromEnd ? { end: value } : { start: value }));
4592
+ const newMarks = [
4593
+ ...marks.slice(0, currentObsIndex),
4594
+ updatedMark,
4595
+ ...marks.slice(currentObsIndex + 1),
4596
+ ];
4597
+ setMarks(newMarks);
4598
+ setUpdatedMark(updatedMark);
4599
+ }, [activeBookmark, context.part.start, duration, fromEnd, marks]);
4338
4600
  React.useEffect(() => {
4339
4601
  var _a;
4340
4602
  const currentTime = ((_a = context.player) === null || _a === void 0 ? void 0 : _a.currentTime) || 0;
4341
4603
  setProgress(getProgress(currentTime));
4342
- }, [context.player]);
4343
- const getProgress = React.useCallback((currentTime) => {
4344
- const current = currentTime - (context.part.start || 0);
4345
- if (duration === 0)
4346
- return 0;
4347
- return (current / duration) * 100;
4348
- }, [context.player]);
4349
- return (jsxRuntime.jsxs(ControlsWrapper, Object.assign({ isPlaying: context.isPlaying }, { children: [jsxRuntime.jsxs(ProgressContainer, Object.assign({ onMouseEnter: onMouseEvent, onMouseMove: onMouseEvent, onMouseLeave: onMouseEvent }, { children: [jsxRuntime.jsx(StyledTooltip, Object.assign({ style: { marginLeft: `${tooltipMargin}px` } }, { children: tooltipLabel })), jsxRuntime.jsx(TimeLabel, { current: formatDuration(relCurrentTime), duration: formatDuration(duration) }), jsxRuntime.jsx(StyledProgress, { ref: progressRef, value: progress, onClick: (e) => handleSkipAhead(e.clientX) })] })), jsxRuntime.jsxs(ControlsBar, { children: [jsxRuntime.jsx(StyledDiv$1, { children: jsxRuntime.jsx(AudioButton, {}) }), jsxRuntime.jsx(ControlsGroupCenter, {}), jsxRuntime.jsx(StyledDiv$1, { children: jsxRuntime.jsx(FullScreenButton, { container: container }) })] })] })));
4604
+ }, [context.player, getProgress]);
4605
+ React.useEffect(() => {
4606
+ if (!marks)
4607
+ return;
4608
+ document.addEventListener("mouseup", reset);
4609
+ return () => {
4610
+ document.removeEventListener("mouseup", reset);
4611
+ };
4612
+ }, [reset, marks]);
4613
+ React.useEffect(() => {
4614
+ if (debouncedMark) {
4615
+ onBookMarkUpdated === null || onBookMarkUpdated === void 0 ? void 0 : onBookMarkUpdated(debouncedMark);
4616
+ }
4617
+ }, [debouncedMark, onBookMarkUpdated]);
4618
+ return (jsxRuntime.jsxs(ControlsWrapper, Object.assign({ showControls: showControls }, (!showControls && { isPlaying: context.isPlaying }), { children: [jsxRuntime.jsxs(ProgressContainer, Object.assign({ onMouseEnter: onMouseEvent, onMouseMove: onMouseEvent, onMouseLeave: onMouseEvent }, { children: [jsxRuntime.jsx(StyledTooltip, Object.assign({ style: { marginLeft: `${tooltipMargin}px` } }, { children: tooltipLabel })), !!duration &&
4619
+ (marks === null || marks === void 0 ? void 0 : marks.map((bookmark, index) => (jsxRuntime.jsx(Bookmark, Object.assign({}, bookmark), `${index}${bookmark.start}`)))), jsxRuntime.jsx(ProgressBar, { ref: progressRef, progress: progress, handleSkipAhead: handleSkipAhead, duration: duration }), jsxRuntime.jsx(CurrentTimeMarker, { left: progress })] })), jsxRuntime.jsxs(ControlsBar, { children: [jsxRuntime.jsxs(StyledDiv$1, Object.assign({ style: { width: "20%", justifyContent: "start" } }, { children: [jsxRuntime.jsx(AudioButton, {}), jsxRuntime.jsx(TimeLabel, { current: relCurrentTime, duration: duration })] })), jsxRuntime.jsx(ControlsGroupCenter, { style: { width: "60%" } }), jsxRuntime.jsxs(StyledDiv$1, Object.assign({ style: { width: "20%", justifyContent: "end" } }, { children: [jsxRuntime.jsx(Cutter, { onCutHandler: onCutHandler, isCutting: isCutting, i18n: i18n }), jsxRuntime.jsx(FullScreenButton, { container: container })] }))] })] })));
4350
4620
  };
4351
4621
 
4352
4622
  var _path$c;
@@ -4378,6 +4648,10 @@ const BigButton = styled__default["default"](IconButton) `
4378
4648
  min-width: ${({ theme }) => theme.space.base * 15}px;
4379
4649
  width: 80px;
4380
4650
  height: 80px;
4651
+
4652
+ box-shadow: ${({ theme }) => theme.shadows.boxShadow(theme)};
4653
+
4654
+
4381
4655
  ${PlayIcon} {
4382
4656
  width: 60%;
4383
4657
  height: 60%;
@@ -4417,9 +4691,11 @@ const VideoStyle = styled.css `
4417
4691
 
4418
4692
  const Container$1 = styled__default["default"].div `
4419
4693
  position: relative;
4420
- display: flex;
4421
- flex-direction: column;
4422
- justify-content: center;
4694
+ ${({ showControls }) => !showControls && `
4695
+ display: flex;
4696
+ flex-direction: column;
4697
+ justify-content: center;
4698
+ `}
4423
4699
  height: 100%;
4424
4700
  width: 100%;
4425
4701
  video {
@@ -4444,8 +4720,7 @@ const Container$1 = styled__default["default"].div `
4444
4720
  }
4445
4721
  }
4446
4722
  }
4447
-
4448
- background-color: ${({ theme }) => theme.palette.grey[700]};
4723
+ background: ${({ theme }) => theme.palette.grey[400]};
4449
4724
  `;
4450
4725
 
4451
4726
  const UgSpinner = styled__default["default"](reactLoaders.Spinner) ``;
@@ -4473,18 +4748,15 @@ const VideoSpinner = () => (jsxRuntime.jsx(StyledDiv, { children: jsxRuntime.jsx
4473
4748
  * Used for this:
4474
4749
  - To display a video
4475
4750
  */
4476
- const Player = React.forwardRef((props, forwardRef) => {
4477
- const videoRef = React.useRef(null);
4478
- React.useImperativeHandle(forwardRef, () => videoRef.current);
4479
- return (jsxRuntime.jsx(Video__default["default"], Object.assign({ src: props.url }, props, { children: jsxRuntime.jsx(PlayerCore, Object.assign({ ref: videoRef }, props)) })));
4480
- });
4751
+ const Player = React.forwardRef((props, forwardRef) => (jsxRuntime.jsx(Video__default["default"], Object.assign({ src: props.url }, props, { children: jsxRuntime.jsx(PlayerCore, Object.assign({ ref: forwardRef }, props)) }))));
4481
4752
  const PlayerCore = React.forwardRef((props, forwardRef) => {
4482
4753
  var _a;
4483
4754
  const { context, togglePlay, setIsPlaying } = Video.useVideoContext();
4755
+ const { onCutHandler, bookmarks, isCutting } = props;
4484
4756
  const videoRef = (_a = context.player) === null || _a === void 0 ? void 0 : _a.ref.current;
4485
4757
  const isLoaded = !!videoRef;
4486
4758
  const containerRef = React.useRef(null);
4487
- React.useImperativeHandle(forwardRef, () => videoRef);
4759
+ React.useImperativeHandle(forwardRef, () => videoRef, [videoRef]);
4488
4760
  React.useEffect(() => {
4489
4761
  if (videoRef) {
4490
4762
  videoRef.addEventListener("pause", () => {
@@ -4498,10 +4770,19 @@ const PlayerCore = React.forwardRef((props, forwardRef) => {
4498
4770
  });
4499
4771
  }
4500
4772
  };
4501
- }, [videoRef]);
4502
- return (jsxRuntime.jsxs(Container$1, Object.assign({ isLoaded: isLoaded, isPlaying: context.isPlaying, ref: containerRef }, { children: [!isLoaded ? (jsxRuntime.jsx(VideoSpinner, {})) : (jsxRuntime.jsx(FloatingControls, { isPlaying: context.isPlaying, onClick: togglePlay })), jsxRuntime.jsx(Video__default["default"].Player, { className: "player-container" }), jsxRuntime.jsx(Controls, { container: containerRef.current })] })));
4773
+ }, [setIsPlaying, videoRef]);
4774
+ return (jsxRuntime.jsxs(Container$1, Object.assign({ isLoaded: isLoaded, isPlaying: context.isPlaying, ref: containerRef, showControls: props.showControls }, { children: [!isLoaded ? (jsxRuntime.jsx(VideoSpinner, {})) : (jsxRuntime.jsx(FloatingControls, { isPlaying: context.isPlaying, onClick: togglePlay })), jsxRuntime.jsx(Video__default["default"].Player, { className: "player-container" }), jsxRuntime.jsx(ProgressContextProvider, { children: jsxRuntime.jsx(Controls, { container: containerRef.current, onCutHandler: onCutHandler, bookmarks: bookmarks, isCutting: isCutting, onBookMarkUpdated: props.handleBookmarkUpdate, i18n: props.i18n, showControls: props.showControls }) })] })));
4503
4775
  });
4504
4776
 
4777
+ const MediaLightBox = ({ header, onClose, slideChange, selectedImageIndex, thumbnails, videoRefs, isOpen, details }) => {
4778
+ if (!isOpen) {
4779
+ return null;
4780
+ }
4781
+ return (jsxRuntime.jsxs(Lightbox, Object.assign({ onClose: onClose }, { children: [jsxRuntime.jsx(Lightbox.Header, { children: header }), jsxRuntime.jsxs(Lightbox.Body, { children: [jsxRuntime.jsx(Lightbox.Body.Main, Object.assign({ style: { flex: details ? 2 : 3 } }, { children: jsxRuntime.jsx(Slider, Object.assign({ prevArrow: jsxRuntime.jsx(Slider.PrevButton, { isBright: true }), nextArrow: jsxRuntime.jsx(Slider.NextButton, { isBright: true }), onSlideChange: slideChange, initialSlide: selectedImageIndex }, { children: thumbnails.map((item) => (jsxRuntime.jsxs(Slider.Slide, { children: [item.type.includes("image") && (jsxRuntime.jsx("img", { src: item.url, alt: `media ${item.name}`, style: { maxHeight: "100%", height: "auto" } })), item.type.includes("video") && item.url && (jsxRuntime.jsx(Player, { ref: (ref) => {
4782
+ videoRefs.current.push(ref);
4783
+ }, url: item.url }))] }, item.id))) })) })), details && (jsxRuntime.jsx(Lightbox.Body.Details, Object.assign({ style: { flex: 1 } }, { children: details })))] }), jsxRuntime.jsx(Lightbox.Close, { "aria-label": "Close modal" })] })));
4784
+ };
4785
+
4505
4786
  const ChatBoxContainer = styled__default["default"].div `
4506
4787
  display: flex;
4507
4788
  border-top: 1px solid ${({ theme }) => theme.palette.grey[200]};
@@ -4521,14 +4802,19 @@ const ChatBoxContainer = styled__default["default"].div `
4521
4802
  - Simple text input, use textarea instead.
4522
4803
  */
4523
4804
  const CommentBox = (_a) => {
4805
+ var _b;
4524
4806
  var { placeholderOptions } = _a, props = __rest(_a, ["placeholderOptions"]);
4525
4807
  const { children, hasFloatingMenu, hasButtonsMenu, bubbleOptions, i18n } = props;
4526
4808
  const { editor, setEditor, mentionableUsers, triggerSave, thumbnails, addThumbnails, } = useChatContext();
4527
- const { addToast } = useToast();
4528
4809
  const [isOpen, setIsOpen] = React.useState(false);
4529
- const [selectedImage, setSelectedImage] = React.useState({});
4530
4810
  const [selectedImageIndex, setSelectedImageIndex] = React.useState(0);
4811
+ const { getMedia } = useMedia();
4531
4812
  const ext = editorExtensions({ placeholderOptions, mentionableUsers });
4813
+ function handleEvent(data) {
4814
+ if (!data || !data.files)
4815
+ return;
4816
+ addThumbnails({ files: getMedia(data.files) });
4817
+ }
4532
4818
  const closeLightbox = () => {
4533
4819
  setIsOpen(false);
4534
4820
  };
@@ -4541,10 +4827,7 @@ const CommentBox = (_a) => {
4541
4827
  }
4542
4828
  });
4543
4829
  }, [videoRefs]);
4544
- const handleOpenLightbox = (file, index) => {
4545
- if (!file)
4546
- throw Error("Error with the image");
4547
- setSelectedImage(file);
4830
+ const handleOpenLightbox = (index) => {
4548
4831
  setSelectedImageIndex(index);
4549
4832
  setIsOpen(true);
4550
4833
  };
@@ -4556,48 +4839,12 @@ const CommentBox = (_a) => {
4556
4839
  return false;
4557
4840
  },
4558
4841
  handleDrop: function (view, event, slice, moved) {
4559
- if (!event.dataTransfer || !event.dataTransfer.files)
4560
- return false;
4561
4842
  event.preventDefault();
4562
- const files = Array.from(event.dataTransfer.files).map((file) => {
4563
- return Object.assign(file, {
4564
- isLoadingMedia: false,
4565
- internal_id: uuid.v4(),
4566
- });
4567
- });
4568
- const wrongFiles = files.filter((file) => !/^(image|video)\//.test(file.type));
4569
- if (wrongFiles.length > 0) {
4570
- for (const file of wrongFiles) {
4571
- addToast(({ close }) => (jsxRuntime.jsx(Notification, { onClose: close, type: "error", message: `${props.messageBadFileFormat} - ${file.name}`, isPrimary: true })), { placement: "top" });
4572
- }
4573
- }
4574
- const mediaFiles = files.filter((file) => /^(image|video)\//.test(file.type));
4575
- if (mediaFiles.length === 0)
4576
- return false;
4577
- addThumbnails({ files: mediaFiles });
4578
- return false;
4843
+ handleEvent(event.dataTransfer);
4579
4844
  },
4580
4845
  handlePaste: (view, event, slice) => {
4581
- if (!event.clipboardData || !event.clipboardData.items)
4582
- return false;
4583
4846
  event.preventDefault();
4584
- const files = Array.from(event.clipboardData.files).map((file) => {
4585
- return Object.assign(file, {
4586
- isLoadingMedia: false,
4587
- internal_id: uuid.v4(),
4588
- });
4589
- });
4590
- const wrongFiles = files.filter((file) => !/^(image|video)\//.test(file.type));
4591
- if (wrongFiles.length > 0) {
4592
- for (const file of wrongFiles) {
4593
- addToast(({ close }) => (jsxRuntime.jsx(Notification, { onClose: close, type: "error", message: `${props.messageBadFileFormat} - ${file.name}`, isPrimary: true })), { placement: "top" });
4594
- }
4595
- }
4596
- const mediaFiles = files.filter((file) => /^(image|video)\//.test(file.type));
4597
- if (mediaFiles.length === 0)
4598
- return false;
4599
- addThumbnails({ files: mediaFiles });
4600
- return false;
4847
+ handleEvent(event.clipboardData);
4601
4848
  },
4602
4849
  } }, props));
4603
4850
  const onKeyDown = (event) => {
@@ -4610,14 +4857,32 @@ const CommentBox = (_a) => {
4610
4857
  return null;
4611
4858
  ed.on("create", ({ editor }) => setEditor(editor));
4612
4859
  ed.on("update", ({ editor }) => setEditor(editor));
4613
- const mediaFiles = thumbnails.map((file) => {
4614
- return Object.assign(file, { isLoadingMedia: file.isLoadingMedia });
4615
- });
4616
- return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [isOpen && selectedImage && (jsxRuntime.jsxs(Lightbox, Object.assign({ onClose: closeLightbox }, { children: [jsxRuntime.jsx(Lightbox.Header, { children: selectedImage.name }), jsxRuntime.jsx(Lightbox.Body, { children: jsxRuntime.jsx(Lightbox.Body.Main, Object.assign({ style: { flex: 3 } }, { children: jsxRuntime.jsx(Slider, Object.assign({ prevArrow: jsxRuntime.jsx(Slider.PrevButton, { isBright: true }), nextArrow: jsxRuntime.jsx(Slider.NextButton, { isBright: true }), onSlideChange: slideChange, initialSlide: selectedImageIndex }, { children: mediaFiles.map((item, index) => (jsxRuntime.jsxs(Slider.Slide, { children: [item.type.includes("image") && (jsxRuntime.jsx("img", { src: URL.createObjectURL(item), alt: `media ${item.name}` })), item.type.includes("video") && (jsxRuntime.jsx(Player, { ref: (ref) => {
4617
- videoRefs.current.push(ref);
4618
- }, url: URL.createObjectURL(item) }))] }))) })) })) }), jsxRuntime.jsx(Lightbox.Close, { "aria-label": "Close modal" })] }))), jsxRuntime.jsx(ChatBoxContainer, { children: jsxRuntime.jsxs(EditorContainer$1, Object.assign({ editable: true, style: { marginLeft: 0, paddingBottom: 12 } }, { children: [hasFloatingMenu && (jsxRuntime.jsx(FloatingMenu, { editor: ed, tippyOptions: Object.assign({}, bubbleOptions) })), jsxRuntime.jsx(react.EditorContent, { editor: ed, onKeyDown: onKeyDown }), jsxRuntime.jsx(ThumbnailContainer, { openLightbox: handleOpenLightbox })] })) }), hasButtonsMenu && jsxRuntime.jsx(CommentBar, { editor: ed, i18n: i18n })] }));
4860
+ return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(MediaLightBox, { isOpen: isOpen, header: (_b = thumbnails[selectedImageIndex]) === null || _b === void 0 ? void 0 : _b.name, onClose: closeLightbox, slideChange: slideChange, selectedImageIndex: selectedImageIndex, thumbnails: thumbnails, videoRefs: videoRefs }), jsxRuntime.jsx(ChatBoxContainer, { children: jsxRuntime.jsxs(EditorContainer$1, Object.assign({ editable: true, style: { marginLeft: 0, paddingBottom: 12 } }, { children: [hasFloatingMenu && (jsxRuntime.jsx(FloatingMenu, { editor: ed, tippyOptions: Object.assign({}, bubbleOptions) })), jsxRuntime.jsx(react.EditorContent, { editor: ed, onKeyDown: onKeyDown }), jsxRuntime.jsx(ThumbnailContainer, { openLightbox: handleOpenLightbox })] })) }), hasButtonsMenu && jsxRuntime.jsx(CommentBar, { editor: ed, i18n: i18n })] }));
4619
4861
  };
4620
4862
 
4863
+ const UgGrid = styled__default["default"](reactGrid.Grid) `
4864
+ padding-left: 0;
4865
+ padding-right: 0;
4866
+ `;
4867
+ /**
4868
+ * The Grid component is a framework for building modular layouts.
4869
+ * <hr>
4870
+ * Used for this:
4871
+ - To structure the layout of a page
4872
+ */
4873
+ const Grid = (props) => jsxRuntime.jsx(UgGrid, Object.assign({}, props));
4874
+
4875
+ const Row$1 = (props) => jsxRuntime.jsx(reactGrid.Row, Object.assign({}, props));
4876
+
4877
+ const StyledCol$1 = styled__default["default"](reactGrid.Col) `
4878
+ margin-bottom: ${theme.space.lg};
4879
+
4880
+ @media screen and (max-width: ${theme.breakpoints.sm}) {
4881
+ margin-bottom: ${theme.space.md};
4882
+ }
4883
+ `;
4884
+ const Col = (props) => jsxRuntime.jsx(StyledCol$1, Object.assign({}, props));
4885
+
4621
4886
  const CommentCard = styled.styled(Card) `
4622
4887
  padding: ${({ theme }) => `${theme.space.base * 3}px ${theme.space.sm}`};
4623
4888
  background-color: ${({ theme }) => theme.palette.grey[100]};
@@ -4661,13 +4926,9 @@ const Comment = ({ author, message, children, date, media = [], header, }) => {
4661
4926
  var _a, _b;
4662
4927
  const { mentionableUsers } = useChatContext();
4663
4928
  const [isOpen, setIsOpen] = React.useState(false);
4664
- const [selectedImage, setSelectedImage] = React.useState({});
4665
4929
  const [selectedImageIndex, setSelectedImageIndex] = React.useState(0);
4666
4930
  const ext = editorExtensions({ mentionableUsers });
4667
- const handleClickThumbnail = (file, index) => {
4668
- if (!file)
4669
- throw Error("Error with the image");
4670
- setSelectedImage(file);
4931
+ const handleClickThumbnail = (index) => {
4671
4932
  setSelectedImageIndex(index);
4672
4933
  setIsOpen(true);
4673
4934
  };
@@ -4676,7 +4937,6 @@ const Comment = ({ author, message, children, date, media = [], header, }) => {
4676
4937
  };
4677
4938
  const videoRefs = React.useRef([]);
4678
4939
  const slideChange = React.useCallback((index) => {
4679
- setSelectedImage(media[index]);
4680
4940
  setSelectedImageIndex(index);
4681
4941
  videoRefs.current.forEach((ref) => {
4682
4942
  if (ref) {
@@ -4693,39 +4953,12 @@ const Comment = ({ author, message, children, date, media = [], header, }) => {
4693
4953
  ed.setOptions({
4694
4954
  editable: false,
4695
4955
  });
4696
- // const downloadSelectedMedia = async () => {
4697
- // try {
4698
- // const response = await fetch(`${selectedImage.url}?antiCors`);
4699
- // const blob = await response.blob();
4700
- // const link = document.createElement("a");
4701
- // link.href = window.URL.createObjectURL(blob);
4702
- // link.download =
4703
- // "media_" + selectedImage.id.toString() || "downloadedFile";
4704
- // document.body.appendChild(link);
4705
- // link.click();
4706
- // window.URL.revokeObjectURL(link.href);
4707
- // document.body.removeChild(link);
4708
- // } catch (error) {
4709
- // console.error("An error occurred while downloading: ", error);
4710
- // }
4711
- // };
4712
- return (jsxRuntime.jsxs(CommentCard, { children: [jsxRuntime.jsxs(AuthorContainer, { children: [jsxRuntime.jsx(Avatar, Object.assign({ avatarType: (_a = author.avatarType) !== null && _a !== void 0 ? _a : "text", style: { flexShrink: 0 } }, { children: author.avatar })), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsxs(CommentTitle, { children: [(_b = author.name) !== null && _b !== void 0 ? _b : "User", " ", jsxRuntime.jsx(CommentDate, { children: date })] }), jsxRuntime.jsx(ReadOnly, { children: jsxRuntime.jsx(EditorContainer$1, Object.assign({ editable: false }, { children: jsxRuntime.jsx(react.EditorContent, { editor: ed }) })) })] })] }), jsxRuntime.jsx(Grid, { children: jsxRuntime.jsx(Row$1, Object.assign({ className: "responsive-container" }, { children: media.map((file, index) => {
4713
- // Check if item is an image or a video
4714
- if (file.type.includes("image"))
4715
- return (jsxRuntime.jsx(Col, Object.assign({ xs: 12, sm: 4, className: "flex-3-sm" }, { children: jsxRuntime.jsx(ImageThumbnail, { src: file.url, index: index, showX: false, isLoadingMedia: false, clickThumbnail: () => {
4716
- handleClickThumbnail(file, index);
4717
- } }, index) })));
4718
- if (file.type.includes("video"))
4719
- return (jsxRuntime.jsx(Col, Object.assign({ xs: 12, sm: 4, className: "flex-3-sm" }, { children: jsxRuntime.jsx(VideoThumbnail, { src: file.url, index: index, showX: false, isLoadingMedia: false, clickThumbnail: () => {
4720
- handleClickThumbnail(file, index);
4721
- } }, index) })));
4722
- return null;
4723
- }) })) }), isOpen && selectedImage && (jsxRuntime.jsxs(Lightbox, Object.assign({ onClose: closeLightbox }, { children: [jsxRuntime.jsx(Lightbox.Header, { children: jsxRuntime.jsxs(reactTypography.MD, Object.assign({ isBold: true }, { children: [jsxRuntime.jsx(Grey600Span, { children: header && header.title }), header && header.message && (jsxRuntime.jsxs(Grey800Span, { children: [" | ", header.message] }))] })) }), jsxRuntime.jsxs(Lightbox.Body, { children: [jsxRuntime.jsx(Lightbox.Body.Main, Object.assign({ style: { flex: 2 } }, { children: jsxRuntime.jsx(Slider, Object.assign({ prevArrow: jsxRuntime.jsx(Slider.PrevButton, { isBright: true }), nextArrow: jsxRuntime.jsx(Slider.NextButton, { isBright: true }), onSlideChange: slideChange, initialSlide: selectedImageIndex }, { children: media.map((item, index) => (jsxRuntime.jsxs(Slider.Slide, { children: [item.type === "image" && (jsxRuntime.jsx("img", { src: item.url, alt: `{{${item.url}}}` })), item.type === "video" && (jsxRuntime.jsx(Player, { ref: (ref) => {
4724
- videoRefs.current.push(ref);
4725
- }, url: item.url }))] }))) })) })), jsxRuntime.jsx(Lightbox.Body.Details, Object.assign({ style: { flex: 1 } }, { children: jsxRuntime.jsx(Comment, Object.assign({ header: header, author: {
4726
- avatar: author.avatar,
4727
- name: author.name,
4728
- }, date: date, message: message }, { children: jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx("br", {}) }) })) }))] }), jsxRuntime.jsx(Lightbox.Footer, {}), jsxRuntime.jsx(Lightbox.Close, { "aria-label": "Close modal" })] }))), jsxRuntime.jsx(Footer$2, { children: children })] }));
4956
+ return (jsxRuntime.jsxs(CommentCard, { children: [jsxRuntime.jsxs(AuthorContainer, { children: [jsxRuntime.jsx(Avatar, Object.assign({ avatarType: (_a = author.avatarType) !== null && _a !== void 0 ? _a : "text", style: { flexShrink: 0 } }, { children: author.avatar })), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsxs(CommentTitle, { children: [(_b = author.name) !== null && _b !== void 0 ? _b : "User", " ", jsxRuntime.jsx(CommentDate, { children: date })] }), jsxRuntime.jsx(ReadOnly, { children: jsxRuntime.jsx(EditorContainer$1, Object.assign({ editable: false }, { children: jsxRuntime.jsx(react.EditorContent, { editor: ed }) })) })] })] }), jsxRuntime.jsx(Grid, { children: jsxRuntime.jsx(Row$1, Object.assign({ className: "responsive-container" }, { children: media.map((file, index) => (jsxRuntime.jsx(Col, Object.assign({ xs: 12, sm: 4, className: "flex-3-sm" }, { children: jsxRuntime.jsx(Thumbnail, { src: file.url, type: file.type, showX: false, isLoadingMedia: false, clickThumbnail: () => {
4957
+ handleClickThumbnail(index);
4958
+ } }) }), index))) })) }), jsxRuntime.jsx(MediaLightBox, { isOpen: isOpen, header: jsxRuntime.jsxs(reactTypography.MD, Object.assign({ isBold: true }, { children: [jsxRuntime.jsx(Grey600Span, { children: header && header.title }), header && header.message && (jsxRuntime.jsxs(Grey800Span, { children: [" | ", header.message] }))] })), onClose: closeLightbox, slideChange: slideChange, selectedImageIndex: selectedImageIndex, thumbnails: media, videoRefs: videoRefs, details: jsxRuntime.jsx(Comment, Object.assign({ header: header, author: {
4959
+ avatar: author.avatar,
4960
+ name: author.name,
4961
+ }, date: date, message: message }, { children: jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx("br", {}) }) })) }), jsxRuntime.jsx(Footer$2, { children: children })] }));
4729
4962
  };
4730
4963
 
4731
4964
  /**
@@ -5364,6 +5597,196 @@ const UgToggle = styled__default["default"](reactForms.Toggle) ``;
5364
5597
  **/
5365
5598
  const Toggle = (props) => jsxRuntime.jsx(UgToggle, Object.assign({}, props));
5366
5599
 
5600
+ const HighlightContext = React.createContext(null);
5601
+ const HighlightContextProvider = ({ term, children, }) => {
5602
+ const [searchTerm, setsearchTerm] = React.useState(term !== null && term !== void 0 ? term : "");
5603
+ React.useEffect(() => {
5604
+ setsearchTerm(term !== null && term !== void 0 ? term : "");
5605
+ }, [term]);
5606
+ const HighlightContextValue = React.useMemo(() => ({
5607
+ searchTerm,
5608
+ }), [searchTerm]);
5609
+ return (jsxRuntime.jsx(HighlightContext.Provider, Object.assign({ value: HighlightContextValue }, { children: children })));
5610
+ };
5611
+ const useHighlightContext = () => {
5612
+ const context = React.useContext(HighlightContext);
5613
+ if (!context)
5614
+ throw new Error("Provider not found for HighlightContextProvider");
5615
+ return context; // Now we can use the context in the component, SAFELY.
5616
+ };
5617
+
5618
+ const StyledSearchWord = styled__default["default"].span `
5619
+ background-color: ${({ theme }) => theme.palette.product.talk};
5620
+ color: ${({ theme }) => theme.palette.grey[700]};
5621
+ `;
5622
+ const Searchable = ({ text, }) => {
5623
+ const { searchTerm } = useHighlightContext();
5624
+ if (searchTerm) {
5625
+ const parts = text.split(new RegExp(`(${searchTerm})`, "gi"));
5626
+ return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: parts.map((part, index) => part.toLowerCase() === searchTerm.toLowerCase() ? (jsxRuntime.jsx(StyledSearchWord, { children: part }, index)) : (jsxRuntime.jsx(jsxRuntime.Fragment, { children: part }))) }));
5627
+ }
5628
+ return jsxRuntime.jsx(jsxRuntime.Fragment, { children: text });
5629
+ };
5630
+
5631
+ const CreateObservationButton = styled.styled(Button) `
5632
+ user-select: none;
5633
+ position: absolute;
5634
+ left: ${({ position: { x } }) => x}px;
5635
+ top: ${({ position: { y } }) => y}px;
5636
+ transform: translate(-50%, 0);
5637
+ z-index: ${({ theme }) => theme.levels.front};
5638
+ `;
5639
+
5640
+ const StyledWord = styled__default["default"].div `
5641
+ display: inline;
5642
+ font-size: ${({ theme, size }) => theme.fontSizes[size !== null && size !== void 0 ? size : "md"]};
5643
+ padding: ${({ theme }) => theme.space.xxs} 0;
5644
+ position: relative;
5645
+
5646
+ ${({ observations, theme }) => {
5647
+ var _a;
5648
+ return observations && observations.length > 0 &&
5649
+ `
5650
+ color: ${(_a = observations[observations.length - 1].color) !== null && _a !== void 0 ? _a : theme.palette.grey[600]};
5651
+ box-sizing: border-box;
5652
+ font-weight: ${theme.fontWeights.semibold};
5653
+
5654
+ &:focus {
5655
+ outline: none;
5656
+ }
5657
+ `;
5658
+ }}
5659
+ `;
5660
+ const ActiveWord = styled__default["default"].span `
5661
+ background-color: ${({ theme }) => getColor(theme.palette.fuschia, 400, undefined, 0.4)};
5662
+ `;
5663
+ const WordsContainer = styled__default["default"].div `
5664
+ box-sizing: border-box;
5665
+ ${StyledWord}, span {
5666
+ &::selection {
5667
+ background-color: ${({ theme }) => getColor(theme.palette.kale, 700, undefined, 0.5)};
5668
+ }
5669
+ }
5670
+ `;
5671
+ const Layer = styled__default["default"].div `
5672
+ position: absolute;
5673
+ top: 0;
5674
+ left: 0;
5675
+ width: 100%;
5676
+ height: 100%;
5677
+ z-index: 0;
5678
+ background-color: ${({ color }) => getColor(color, undefined, undefined, 0.2)};
5679
+ `;
5680
+ /**
5681
+ * Use Highlight to use highlight interation on any text element
5682
+ */
5683
+ const Highlight = (props) => {
5684
+ var _a;
5685
+ const { onSelectionButtonClick, search, i18n } = props;
5686
+ const ref = React.useRef(null);
5687
+ const [isSelecting, setIsSelecting] = React.useState(false);
5688
+ const [position, setPosition] = React.useState();
5689
+ const [selection, setSelection] = React.useState();
5690
+ const activeSelection = document.getSelection();
5691
+ const extractText = (selection) => {
5692
+ if (selection.anchorNode === null || selection.focusNode === null)
5693
+ return "";
5694
+ var range = selection.getRangeAt(0);
5695
+ var tempDiv = document.createElement("div");
5696
+ tempDiv.appendChild(range.cloneContents());
5697
+ var items = tempDiv.querySelectorAll("div");
5698
+ items.forEach(function (item) {
5699
+ if (item.getAttribute("data-unselectable")) {
5700
+ item.remove();
5701
+ }
5702
+ });
5703
+ var filteredText = tempDiv.textContent || tempDiv.innerText;
5704
+ return filteredText.length ? filteredText.trim() : selection.toString();
5705
+ };
5706
+ const handleSelectionChange = React.useCallback(() => {
5707
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
5708
+ if (activeSelection && activeSelection.toString().length > 0) {
5709
+ // Extract the text from the selection cleaning unselectable items
5710
+ const text = extractText(activeSelection);
5711
+ if (!text)
5712
+ return;
5713
+ const anchorNode = (_a = activeSelection === null || activeSelection === void 0 ? void 0 : activeSelection.anchorNode) === null || _a === void 0 ? void 0 : _a.parentElement;
5714
+ const focusNode = (_b = activeSelection === null || activeSelection === void 0 ? void 0 : activeSelection.focusNode) === null || _b === void 0 ? void 0 : _b.parentElement;
5715
+ if (anchorNode &&
5716
+ focusNode &&
5717
+ ((_c = ref.current) === null || _c === void 0 ? void 0 : _c.contains(anchorNode)) && // Selection starts inside the ref
5718
+ ((_d = ref.current) === null || _d === void 0 ? void 0 : _d.contains(focusNode)) // Selection ends inside the ref
5719
+ ) {
5720
+ if (props === null || props === void 0 ? void 0 : props.onSelectionButtonClick) {
5721
+ setIsSelecting(true);
5722
+ const range = activeSelection.getRangeAt(0);
5723
+ const rects = range.getClientRects();
5724
+ const lastRect = rects[rects.length - 1];
5725
+ const containerRect = ref && ref.current
5726
+ ? ref.current.getBoundingClientRect()
5727
+ : null;
5728
+ if (!lastRect || !containerRect)
5729
+ return;
5730
+ const relativeY = lastRect.bottom - containerRect.top + ref.current.scrollTop;
5731
+ const relativeX = lastRect.right - containerRect.left + ref.current.scrollLeft;
5732
+ if (relativeY > 0 || relativeX > 0)
5733
+ // Fix to avoid the button to be placed sometimes at the top left corner of the screen (X: 0, Y: 0)
5734
+ setPosition({
5735
+ x: relativeX,
5736
+ y: relativeY + 15,
5737
+ });
5738
+ }
5739
+ else {
5740
+ setIsSelecting(false);
5741
+ }
5742
+ const selectionPart = {
5743
+ from: Math.min(Number.parseFloat((_e = anchorNode.getAttribute("data-start")) !== null && _e !== void 0 ? _e : "0"), Number.parseFloat((_f = focusNode.getAttribute("data-start")) !== null && _f !== void 0 ? _f : "0")),
5744
+ to: Math.max(Number.parseFloat((_g = anchorNode.getAttribute("data-end")) !== null && _g !== void 0 ? _g : "0"), Number.parseFloat((_h = focusNode.getAttribute("data-end")) !== null && _h !== void 0 ? _h : "0")),
5745
+ };
5746
+ (_j = props === null || props === void 0 ? void 0 : props.handleSelection) === null || _j === void 0 ? void 0 : _j.call(props, Object.assign(Object.assign({}, selectionPart), { text }));
5747
+ setSelection(Object.assign(Object.assign({}, selectionPart), { text }));
5748
+ }
5749
+ else {
5750
+ setIsSelecting(false);
5751
+ }
5752
+ }
5753
+ else {
5754
+ setIsSelecting(false);
5755
+ }
5756
+ }, [props, activeSelection]);
5757
+ React.useEffect(() => {
5758
+ if (ref.current === null)
5759
+ return;
5760
+ document.addEventListener("selectionchange", handleSelectionChange);
5761
+ return () => {
5762
+ document.removeEventListener("selectionchange", handleSelectionChange);
5763
+ };
5764
+ }, [ref, props, handleSelectionChange]);
5765
+ return (jsxRuntime.jsxs(HighlightContextProvider, Object.assign({ term: search }, { children: [jsxRuntime.jsx(WordsContainer, Object.assign({ ref: ref }, { children: props.children })), isSelecting && (jsxRuntime.jsxs(CreateObservationButton, Object.assign({ isAccent: true, isPrimary: true, position: position !== null && position !== void 0 ? position : {
5766
+ x: 0,
5767
+ y: 0,
5768
+ } }, (onSelectionButtonClick && selection && { onClick: () => onSelectionButtonClick(selection) }), { children: [jsxRuntime.jsx(CreateObservationButton.StartIcon, { children: jsxRuntime.jsx(SvgTagStroke, {}) }), (_a = i18n === null || i18n === void 0 ? void 0 : i18n.selectionButtonLabel) !== null && _a !== void 0 ? _a : "Create observation"] })))] })));
5769
+ };
5770
+ const Word = (props) => {
5771
+ const isActive = props.currentTime &&
5772
+ props.currentTime >= props.start &&
5773
+ props.currentTime < props.end;
5774
+ // Are there any observations containing this word?
5775
+ const foundObservations = React.useMemo(() => {
5776
+ var _a, _b;
5777
+ return (_b = (_a = props.observations) === null || _a === void 0 ? void 0 : _a.filter((obs) => props.start >= obs.start && props.end <= obs.end)) !== null && _b !== void 0 ? _b : [];
5778
+ }, [props.observations, props.start, props.end]);
5779
+ const ObsWord = React.useMemo(() => (jsxRuntime.jsxs(StyledWord, Object.assign({}, props, { "data-start": props.start, "data-end": props.end, className: foundObservations.length > 0 ? "highlighted" : "" }, (foundObservations && { observations: foundObservations }), { children: [foundObservations.length > 0 && foundObservations.map((obs) => {
5780
+ var _a;
5781
+ return (jsxRuntime.jsx(Layer, { color: (_a = obs.hue) !== null && _a !== void 0 ? _a : theme.palette.grey[600] }, obs.id));
5782
+ }), isActive ? (jsxRuntime.jsx(ActiveWord, { children: jsxRuntime.jsx(Searchable, { text: props.text }) })) : (jsxRuntime.jsx(Searchable, { text: props.text })), " "] }))), [props, foundObservations, isActive]);
5783
+ if (props.tooltipContent !== undefined && foundObservations.length > 0) {
5784
+ return (jsxRuntime.jsx(Tooltip, Object.assign({ content: props.tooltipContent(foundObservations), isTransparent: true }, { children: ObsWord })));
5785
+ }
5786
+ return jsxRuntime.jsx(jsxRuntime.Fragment, { children: ObsWord });
5787
+ };
5788
+ Highlight.Word = Word;
5789
+
5367
5790
  /**
5368
5791
  * The Dots loader communicates ongoing activity after a user takes an action.
5369
5792
  * It tells them that something is taking place.
@@ -6840,6 +7263,7 @@ exports.HeaderItem = HeaderItem;
6840
7263
  exports.HeaderItemIcon = HeaderItemIcon;
6841
7264
  exports.HeaderItemText = HeaderItemText;
6842
7265
  exports.HeaderRow = HeaderRow;
7266
+ exports.Highlight = Highlight;
6843
7267
  exports.Hint = Hint;
6844
7268
  exports.Icon = Icon;
6845
7269
  exports.IconButton = IconButton;