@appquality/unguess-design-system 3.1.91-alpha-marks → 3.1.91-highlight-obs
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.
- package/build/index.js +261 -106
- package/build/stories/avatar/InternalAvatar.d.ts +2 -0
- package/build/stories/buttons/button/index.stories.d.ts +1 -0
- package/build/stories/buttons/utils.d.ts +27 -27
- package/build/stories/chat/_types.d.ts +1 -1
- package/build/stories/chat/index.stories.d.ts +1 -0
- package/build/stories/chat/parts/ThumbnailContainer/Thumbnail.d.ts +2 -2
- package/build/stories/chat/parts/ThumbnailContainer/index.d.ts +0 -8
- package/build/stories/dropdowns/select/index.stories.d.ts +1 -0
- package/build/stories/editor/index.stories.d.ts +1 -0
- package/build/stories/highlight/CreateObservationButton.d.ts +17 -0
- package/build/stories/highlight/_types.d.ts +6 -4
- package/build/stories/highlight/index.stories.d.ts +4 -2
- package/build/stories/player/_types.d.ts +3 -0
- package/build/stories/player/index.stories.d.ts +2 -0
- package/build/stories/player/parts/CutStart.d.ts +4 -0
- package/build/stories/player/parts/controls.d.ts +2 -1
- package/build/stories/player/parts/floatingControls.d.ts +1 -0
- package/package.json +1 -1
package/build/index.js
CHANGED
|
@@ -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(
|
|
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
|
};
|
|
@@ -2337,40 +2346,26 @@ const ChatContextProvider = ({ onSave, onFileUpload, onDeleteThumbnail, setMenti
|
|
|
2337
2346
|
setEditor,
|
|
2338
2347
|
thumbnails,
|
|
2339
2348
|
setThumbnails,
|
|
2340
|
-
afterUploadCallback: (failed) => {
|
|
2341
|
-
|
|
2342
|
-
if (failed.includes(file.id)) {
|
|
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 }) => {
|
|
2349
|
+
afterUploadCallback: (failed) => { },
|
|
2350
|
+
addThumbnails: ({ files }) => __awaiter(void 0, void 0, void 0, function* () {
|
|
2354
2351
|
setThumbnails((prev) => [...prev, ...files]);
|
|
2355
|
-
if (onFileUpload)
|
|
2356
|
-
|
|
2357
|
-
|
|
2358
|
-
|
|
2359
|
-
|
|
2360
|
-
|
|
2361
|
-
|
|
2362
|
-
|
|
2363
|
-
|
|
2364
|
-
|
|
2365
|
-
else {
|
|
2366
|
-
file.isError = false;
|
|
2367
|
-
}
|
|
2368
|
-
return file;
|
|
2369
|
-
});
|
|
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;
|
|
2370
2362
|
});
|
|
2371
2363
|
});
|
|
2372
2364
|
}
|
|
2373
|
-
|
|
2365
|
+
catch (e) {
|
|
2366
|
+
console.log("Error uploading files", e);
|
|
2367
|
+
}
|
|
2368
|
+
}),
|
|
2374
2369
|
clearInput: () => {
|
|
2375
2370
|
if (editor && !editor.isEmpty) {
|
|
2376
2371
|
editor.commands.clearContent();
|
|
@@ -3115,7 +3110,7 @@ const CommentBar = ({ editor, i18n, }) => {
|
|
|
3115
3110
|
}
|
|
3116
3111
|
};
|
|
3117
3112
|
};
|
|
3118
|
-
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({ 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, {}) })) }))] })) }));
|
|
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, {}) })) }))] })) }));
|
|
3119
3114
|
};
|
|
3120
3115
|
|
|
3121
3116
|
const CustomMention = Mention__default["default"].extend({
|
|
@@ -3398,6 +3393,7 @@ const StyledDeleteThumbnailX = styled__default["default"].div `
|
|
|
3398
3393
|
opacity: 0;
|
|
3399
3394
|
transition: opacity 0.2s;
|
|
3400
3395
|
z-index: 2;
|
|
3396
|
+
color: ${({ theme }) => theme.palette.grey[800]};
|
|
3401
3397
|
`;
|
|
3402
3398
|
const DeleteThumbnailX = ({ deleteThumbnail }) => {
|
|
3403
3399
|
return (jsxRuntime.jsx(StyledDeleteThumbnailX, Object.assign({ className: "deleteThumbnail" }, { children: jsxRuntime.jsx(SvgRemoveMediaIcon, { onClick: (e) => deleteThumbnail(e) }) })));
|
|
@@ -3425,19 +3421,19 @@ const ImageCard = styled__default["default"](SpecialCard) `
|
|
|
3425
3421
|
padding: 0;
|
|
3426
3422
|
position: relative;
|
|
3427
3423
|
overflow: hidden;
|
|
3428
|
-
|
|
3424
|
+
width: 90px;
|
|
3429
3425
|
|
|
3430
3426
|
&:before {
|
|
3431
3427
|
content: "";
|
|
3428
|
+
font-size: ${({ theme }) => theme.fontSizes.xs};
|
|
3432
3429
|
position: absolute;
|
|
3430
|
+
padding: ${({ theme }) => theme.space.xs};
|
|
3433
3431
|
top: 0;
|
|
3434
3432
|
left: 0;
|
|
3435
3433
|
width: 100%;
|
|
3436
3434
|
height: 100%;
|
|
3437
|
-
background-color: ${({ theme }) => theme.palette.grey[800]};
|
|
3438
|
-
opacity: 0;
|
|
3435
|
+
background-color: ${({ theme }) => theme.palette.grey[800]}00; // 0% opacity
|
|
3439
3436
|
transition: opacity 0.2s;
|
|
3440
|
-
z-index: 1;
|
|
3441
3437
|
}
|
|
3442
3438
|
|
|
3443
3439
|
&:hover {
|
|
@@ -3445,12 +3441,26 @@ const ImageCard = styled__default["default"](SpecialCard) `
|
|
|
3445
3441
|
opacity: 1;
|
|
3446
3442
|
}
|
|
3447
3443
|
&:before {
|
|
3448
|
-
|
|
3444
|
+
background-color: ${({ theme }) => theme.palette.grey[800]}4d; // 30% opacity
|
|
3449
3445
|
}
|
|
3450
3446
|
}
|
|
3451
|
-
|
|
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
|
+
`}
|
|
3452
3461
|
&.video {
|
|
3453
3462
|
svg {
|
|
3463
|
+
color: ${({ theme }) => theme.palette.grey[800]};
|
|
3454
3464
|
position: absolute;
|
|
3455
3465
|
top: 50%;
|
|
3456
3466
|
left: 50%;
|
|
@@ -3467,8 +3477,9 @@ const Preview = styled__default["default"].div `
|
|
|
3467
3477
|
align-items: center;
|
|
3468
3478
|
height: 100px;
|
|
3469
3479
|
width: 100%;
|
|
3470
|
-
|
|
3471
|
-
|
|
3480
|
+
color: ${({ theme }) => theme.palette.white};
|
|
3481
|
+
|
|
3482
|
+
${p => p.url &&
|
|
3472
3483
|
`
|
|
3473
3484
|
background-image: url(${p.url});
|
|
3474
3485
|
background-color: ${p.theme.palette.grey[100]};
|
|
@@ -3482,19 +3493,19 @@ const Preview = styled__default["default"].div `
|
|
|
3482
3493
|
height: 100%;
|
|
3483
3494
|
}
|
|
3484
3495
|
`;
|
|
3485
|
-
const Thumbnail = ({ src, type, removeThumbnail, clickThumbnail, showX, isLoadingMedia
|
|
3496
|
+
const Thumbnail = ({ src, type, removeThumbnail, clickThumbnail, showX, isLoadingMedia, error = "", }) => {
|
|
3486
3497
|
const handleCancel = (e) => {
|
|
3487
3498
|
e.stopPropagation();
|
|
3488
3499
|
if (removeThumbnail)
|
|
3489
3500
|
removeThumbnail();
|
|
3490
3501
|
};
|
|
3491
|
-
return (jsxRuntime.
|
|
3492
|
-
|
|
3493
|
-
|
|
3494
|
-
|
|
3495
|
-
|
|
3496
|
-
|
|
3497
|
-
|
|
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" })] }))] }))) })));
|
|
3498
3509
|
};
|
|
3499
3510
|
|
|
3500
3511
|
const FlexContainer = styled.styled.div `
|
|
@@ -3511,12 +3522,13 @@ const ThumbnailContainer = ({ openLightbox }) => {
|
|
|
3511
3522
|
previewUrl: file.url,
|
|
3512
3523
|
id: file.id,
|
|
3513
3524
|
isLoadingMedia: file.isLoadingMedia,
|
|
3525
|
+
error: file.error,
|
|
3514
3526
|
}));
|
|
3515
3527
|
}, [thumbnails]);
|
|
3516
3528
|
if (!mediaFiles || mediaFiles.length === 0) {
|
|
3517
3529
|
return null;
|
|
3518
3530
|
}
|
|
3519
|
-
return (jsxRuntime.jsx(FlexContainer, { children: mediaFiles.map((file, index) => (jsxRuntime.jsx(Thumbnail, { src: file.previewUrl, showX: true, type: file.fileType, isLoadingMedia: file.isLoadingMedia, removeThumbnail: () => {
|
|
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: () => {
|
|
3520
3532
|
removeThumbnail(index);
|
|
3521
3533
|
onDeleteThumbnail(file.id);
|
|
3522
3534
|
}, clickThumbnail: () => {
|
|
@@ -4037,6 +4049,9 @@ const StyledGrabber = styled.styled.div `
|
|
|
4037
4049
|
const activeBookMark = styled.css `
|
|
4038
4050
|
height: 250%;
|
|
4039
4051
|
transform: translateY(-30%);
|
|
4052
|
+
cursor: pointer;
|
|
4053
|
+
z-index: 2;
|
|
4054
|
+
border-radius: 4px;
|
|
4040
4055
|
|
|
4041
4056
|
${StyledGrabber} {
|
|
4042
4057
|
display: block;
|
|
@@ -4045,17 +4060,19 @@ const activeBookMark = styled.css `
|
|
|
4045
4060
|
const Rect = styled.styled.div `
|
|
4046
4061
|
position: absolute;
|
|
4047
4062
|
height: 110%;
|
|
4048
|
-
background-color: ${({ hue, theme }) => hue || theme.palette.grey[800]};
|
|
4063
|
+
background-color: ${({ hue, theme }) => getColor(hue || theme.palette.grey[800], undefined, undefined, 0.8)};
|
|
4049
4064
|
z-index: 1;
|
|
4050
4065
|
border-radius: 2px;
|
|
4066
|
+
color: white;
|
|
4067
|
+
transition: width 0.1s ease;
|
|
4068
|
+
|
|
4051
4069
|
&:hover {
|
|
4070
|
+
background-color: ${({ hue, theme }) => hue || theme.palette.grey[800]};
|
|
4052
4071
|
${activeBookMark}
|
|
4053
|
-
border-radius: 4px;
|
|
4054
4072
|
}
|
|
4055
|
-
color: white;
|
|
4056
|
-
${({ isActive }) => isActive && activeBookMark}
|
|
4057
4073
|
|
|
4058
|
-
|
|
4074
|
+
${({ isActive }) => isActive && activeBookMark}
|
|
4075
|
+
${({ isFocused }) => isFocused && activeBookMark}
|
|
4059
4076
|
`;
|
|
4060
4077
|
const StyledTooltip$1 = styled.styled(Tooltip) `
|
|
4061
4078
|
margin-bottom: ${({ theme }) => theme.space.sm};
|
|
@@ -4087,7 +4104,7 @@ const Bookmark = (props) => {
|
|
|
4087
4104
|
}
|
|
4088
4105
|
if (start > videoEnd || start < videoStart)
|
|
4089
4106
|
return null;
|
|
4090
|
-
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
|
+
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, isFocused: props.isFocused, style: {
|
|
4091
4108
|
left: `${((start - videoStart) / duration) * 100}%`,
|
|
4092
4109
|
width: `${((end - start) / duration) * 100}%`,
|
|
4093
4110
|
}, onClick: props.onClick }, { children: [jsxRuntime.jsx(Grabber, { observation: props }), jsxRuntime.jsx(Grabber, { isEnd: true, observation: props })] })) })));
|
|
@@ -4295,18 +4312,22 @@ const SvgPlus$1 = props => /*#__PURE__*/React__namespace.createElement("svg", _e
|
|
|
4295
4312
|
fill: "currentColor"
|
|
4296
4313
|
})));
|
|
4297
4314
|
|
|
4315
|
+
// Prevent button from breaking on smaller screens
|
|
4316
|
+
const StyledButton$2 = styled.styled(Button) `
|
|
4317
|
+
overflow: visible;
|
|
4318
|
+
`;
|
|
4298
4319
|
const Cutter = ({ onCutHandler, isCutting, i18n, }) => {
|
|
4299
4320
|
var _a;
|
|
4300
4321
|
const { context } = Video.useVideoContext();
|
|
4301
4322
|
const videoRef = (_a = context.player) === null || _a === void 0 ? void 0 : _a.ref.current;
|
|
4302
4323
|
if (!onCutHandler)
|
|
4303
4324
|
return null;
|
|
4304
|
-
return (jsxRuntime.jsx(
|
|
4325
|
+
return (jsxRuntime.jsx(StyledButton$2, Object.assign({ isPrimary: true, isAccent: !isCutting, size: "small", onClick: (e) => {
|
|
4305
4326
|
if (videoRef) {
|
|
4306
4327
|
onCutHandler(videoRef.currentTime);
|
|
4307
4328
|
}
|
|
4308
4329
|
e.stopPropagation();
|
|
4309
|
-
} }, { children: isCutting ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(Button.StartIcon, { children: jsxRuntime.jsx(SvgTagStroke, {}) }), (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, {}) }), (i18n === null || i18n === void 0 ? void 0 : i18n.beforeHighlight) || "Start observation"] })) })));
|
|
4330
|
+
} }, { 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" })] })) })));
|
|
4310
4331
|
};
|
|
4311
4332
|
|
|
4312
4333
|
var _path$e;
|
|
@@ -4473,13 +4494,40 @@ function useDebounce(value, delay) {
|
|
|
4473
4494
|
return debouncedValue;
|
|
4474
4495
|
}
|
|
4475
4496
|
|
|
4476
|
-
const
|
|
4497
|
+
const Pin = styled.styled.div `
|
|
4498
|
+
width: 2px;
|
|
4499
|
+
bottom: 0;
|
|
4500
|
+
left: ${({ left }) => `${left}%`};
|
|
4477
4501
|
position: absolute;
|
|
4502
|
+
height: 250%;
|
|
4503
|
+
z-index: 2;
|
|
4504
|
+
background-color: ${({ theme }) => theme.palette.grey[600]};
|
|
4505
|
+
margin-left: -2px; // To not override the current time marker
|
|
4506
|
+
|
|
4507
|
+
&:after {
|
|
4508
|
+
content: "";
|
|
4509
|
+
position: absolute;
|
|
4510
|
+
bottom: 100%;
|
|
4511
|
+
left: 50%;
|
|
4512
|
+
width: 10px;
|
|
4513
|
+
height: 10px;
|
|
4514
|
+
border-radius: 50%;
|
|
4515
|
+
transform: translate(-50%, 0);
|
|
4516
|
+
background-color: ${({ theme }) => theme.palette.grey[600]};
|
|
4517
|
+
}
|
|
4518
|
+
`;
|
|
4519
|
+
const CutStart = ({ left }) => {
|
|
4520
|
+
return jsxRuntime.jsx(Pin, { id: "obs-start-pin", left: left });
|
|
4521
|
+
};
|
|
4522
|
+
|
|
4523
|
+
const ControlsWrapper = styled__default["default"].div `
|
|
4524
|
+
${({ showControls }) => showControls ? "position: relative;" : "position: absolute;"}
|
|
4478
4525
|
bottom: 0;
|
|
4479
4526
|
left: 0;
|
|
4480
4527
|
right: 0;
|
|
4481
4528
|
padding: ${({ theme }) => theme.space.xxs} 0;
|
|
4482
4529
|
background-color: ${({ theme }) => theme.palette.grey[100]};
|
|
4530
|
+
height: 80px;
|
|
4483
4531
|
${({ isPlaying }) => isPlaying && "display: none;"}
|
|
4484
4532
|
z-index: 2;
|
|
4485
4533
|
`;
|
|
@@ -4501,7 +4549,16 @@ const StyledDiv$1 = styled__default["default"].div `
|
|
|
4501
4549
|
display: flex;
|
|
4502
4550
|
align-items: center;
|
|
4503
4551
|
`;
|
|
4504
|
-
const
|
|
4552
|
+
const CurrentTimeMarker = styled__default["default"].div `
|
|
4553
|
+
width: 2px;
|
|
4554
|
+
top: 0;
|
|
4555
|
+
left: ${({ left }) => `${left}%`};
|
|
4556
|
+
position: absolute;
|
|
4557
|
+
height: 110%;
|
|
4558
|
+
z-index: 1;
|
|
4559
|
+
background-color: white;
|
|
4560
|
+
`;
|
|
4561
|
+
const Controls = ({ container, onCutHandler, bookmarks, isCutting, onBookMarkUpdated, i18n, showControls = false, }) => {
|
|
4505
4562
|
var _a, _b, _c;
|
|
4506
4563
|
const [progress, setProgress] = React.useState(0);
|
|
4507
4564
|
const [tooltipMargin, setTooltipMargin] = React.useState(0);
|
|
@@ -4511,7 +4568,11 @@ const Controls = ({ container, onCutHandler, bookmarks, isCutting, onBookMarkUpd
|
|
|
4511
4568
|
const progressRef = React.useRef(null);
|
|
4512
4569
|
const { context, setCurrentTime } = Video.useVideoContext();
|
|
4513
4570
|
const debouncedMark = useDebounce(updatedMark, 500);
|
|
4571
|
+
const [cutStart, setCutStart] = React.useState(0);
|
|
4514
4572
|
const { reset, isGrabbing, activeBookmark, fromEnd } = useProgressContext();
|
|
4573
|
+
React.useEffect(() => {
|
|
4574
|
+
setMarks(bookmarks);
|
|
4575
|
+
}, [bookmarks]);
|
|
4515
4576
|
const relCurrentTime = ((_a = context.player) === null || _a === void 0 ? void 0 : _a.currentTime)
|
|
4516
4577
|
? ((_b = context.player) === null || _b === void 0 ? void 0 : _b.currentTime) - context.part.start
|
|
4517
4578
|
: 0;
|
|
@@ -4583,8 +4644,14 @@ const Controls = ({ container, onCutHandler, bookmarks, isCutting, onBookMarkUpd
|
|
|
4583
4644
|
onBookMarkUpdated === null || onBookMarkUpdated === void 0 ? void 0 : onBookMarkUpdated(debouncedMark);
|
|
4584
4645
|
}
|
|
4585
4646
|
}, [debouncedMark, onBookMarkUpdated]);
|
|
4586
|
-
|
|
4587
|
-
|
|
4647
|
+
React.useEffect(() => {
|
|
4648
|
+
if (isCutting) {
|
|
4649
|
+
setCutStart(progress);
|
|
4650
|
+
}
|
|
4651
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
4652
|
+
}, [isCutting]);
|
|
4653
|
+
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 &&
|
|
4654
|
+
(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 }), isCutting && jsxRuntime.jsx(CutStart, { left: cutStart }), 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 })] }))] })] })));
|
|
4588
4655
|
};
|
|
4589
4656
|
|
|
4590
4657
|
var _path$c;
|
|
@@ -4606,8 +4673,9 @@ const FloatingContainer = styled__default["default"].div `
|
|
|
4606
4673
|
top: 0;
|
|
4607
4674
|
left: 0;
|
|
4608
4675
|
right: 0;
|
|
4609
|
-
${({ isPlaying }) => isPlaying && "display: none;"}
|
|
4610
4676
|
z-index: 1;
|
|
4677
|
+
${({ isPlaying }) => isPlaying && "display: none;"}
|
|
4678
|
+
${({ showControls }) => showControls ? "height: 100%" : "height: calc(100% - 80px)"};
|
|
4611
4679
|
`;
|
|
4612
4680
|
const PlayIcon = styled__default["default"](SvgPlayIcon) ``;
|
|
4613
4681
|
const BigButton = styled__default["default"](IconButton) `
|
|
@@ -4632,8 +4700,8 @@ const ButtonsContainer = styled__default["default"].div `
|
|
|
4632
4700
|
height: 100%;
|
|
4633
4701
|
`;
|
|
4634
4702
|
const FloatingControls = (props) => {
|
|
4635
|
-
const { isPlaying, onClick } = props;
|
|
4636
|
-
return (jsxRuntime.jsx(FloatingContainer, Object.assign({ isPlaying: isPlaying, onClick: onClick }, { children: jsxRuntime.jsx(ButtonsContainer, { children: !isPlaying && (jsxRuntime.jsx(BigButton, Object.assign({ isPrimary: true, size: "large" }, { children: jsxRuntime.jsx(PlayIcon, { color: "red" }) }))) }) })));
|
|
4703
|
+
const { isPlaying, showControls, onClick } = props;
|
|
4704
|
+
return (jsxRuntime.jsx(FloatingContainer, Object.assign({ isPlaying: isPlaying, showControls: showControls, onClick: onClick }, { children: jsxRuntime.jsx(ButtonsContainer, { children: !isPlaying && (jsxRuntime.jsx(BigButton, Object.assign({ isPrimary: true, size: "large" }, { children: jsxRuntime.jsx(PlayIcon, { color: "red" }) }))) }) })));
|
|
4637
4705
|
};
|
|
4638
4706
|
|
|
4639
4707
|
const VideoStyle = styled.css `
|
|
@@ -4659,9 +4727,13 @@ const VideoStyle = styled.css `
|
|
|
4659
4727
|
|
|
4660
4728
|
const Container$1 = styled__default["default"].div `
|
|
4661
4729
|
position: relative;
|
|
4662
|
-
|
|
4663
|
-
|
|
4664
|
-
|
|
4730
|
+
${({ showControls }) => !showControls ? `
|
|
4731
|
+
display: flex;
|
|
4732
|
+
flex-direction: column;
|
|
4733
|
+
justify-content: center;
|
|
4734
|
+
` : `
|
|
4735
|
+
margin-bottom: 80px;
|
|
4736
|
+
`}
|
|
4665
4737
|
height: 100%;
|
|
4666
4738
|
width: 100%;
|
|
4667
4739
|
video {
|
|
@@ -4737,7 +4809,7 @@ const PlayerCore = React.forwardRef((props, forwardRef) => {
|
|
|
4737
4809
|
}
|
|
4738
4810
|
};
|
|
4739
4811
|
}, [setIsPlaying, videoRef]);
|
|
4740
|
-
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(ProgressContextProvider, { children: jsxRuntime.jsx(Controls, { container: containerRef.current, onCutHandler: onCutHandler, bookmarks: bookmarks, isCutting: isCutting, onBookMarkUpdated: props.handleBookmarkUpdate, i18n: props.i18n }) })] })));
|
|
4812
|
+
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, showControls: props.showControls, 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 }) })] })));
|
|
4741
4813
|
});
|
|
4742
4814
|
|
|
4743
4815
|
const MediaLightBox = ({ header, onClose, slideChange, selectedImageIndex, thumbnails, videoRefs, isOpen, details }) => {
|
|
@@ -5594,65 +5666,139 @@ const Searchable = ({ text, }) => {
|
|
|
5594
5666
|
return jsxRuntime.jsx(jsxRuntime.Fragment, { children: text });
|
|
5595
5667
|
};
|
|
5596
5668
|
|
|
5597
|
-
const
|
|
5669
|
+
const CreateObservationButton = styled.styled(Button) `
|
|
5670
|
+
user-select: none;
|
|
5671
|
+
position: absolute;
|
|
5672
|
+
left: ${({ position: { x } }) => x}px;
|
|
5673
|
+
top: ${({ position: { y } }) => y}px;
|
|
5674
|
+
transform: translate(-50%, 0);
|
|
5675
|
+
z-index: ${({ theme }) => theme.levels.front};
|
|
5676
|
+
`;
|
|
5677
|
+
|
|
5678
|
+
const getFocusedObs = (observations) => {
|
|
5679
|
+
return observations.find((obs) => obs.isFocused);
|
|
5680
|
+
};
|
|
5681
|
+
const StyledWord = styled__default["default"].div `
|
|
5682
|
+
display: inline-block;
|
|
5598
5683
|
font-size: ${({ theme, size }) => theme.fontSizes[size !== null && size !== void 0 ? size : "md"]};
|
|
5599
5684
|
padding: ${({ theme }) => theme.space.xxs} 0;
|
|
5685
|
+
position: relative;
|
|
5686
|
+
color: ${({ theme }) => theme.palette.grey[700]};
|
|
5687
|
+
white-space: pre;
|
|
5600
5688
|
|
|
5601
|
-
${({
|
|
5602
|
-
var _a
|
|
5603
|
-
return
|
|
5604
|
-
`
|
|
5605
|
-
|
|
5606
|
-
color: ${(_b = observation.color) !== null && _b !== void 0 ? _b : "white"};
|
|
5689
|
+
${({ observations, theme }) => {
|
|
5690
|
+
var _a;
|
|
5691
|
+
return observations && observations.length > 0 &&
|
|
5692
|
+
`
|
|
5693
|
+
color: ${(_a = observations[observations.length - 1].color) !== null && _a !== void 0 ? _a : theme.palette.grey[600]};
|
|
5607
5694
|
box-sizing: border-box;
|
|
5695
|
+
font-weight: ${getFocusedObs(observations) ? theme.fontWeights.extrabold : theme.fontWeights.semibold};
|
|
5696
|
+
font-style: ${getFocusedObs(observations) ? 'italic' : 'normal'};
|
|
5697
|
+
z-index: 1;
|
|
5608
5698
|
&:focus {
|
|
5609
5699
|
outline: none;
|
|
5610
5700
|
}
|
|
5611
|
-
|
|
5612
|
-
+ span:not([observation]) {
|
|
5613
|
-
margin-left: 2px;
|
|
5614
|
-
}
|
|
5615
5701
|
`;
|
|
5616
5702
|
}}
|
|
5617
5703
|
`;
|
|
5618
5704
|
const ActiveWord = styled__default["default"].span `
|
|
5705
|
+
position: relative;
|
|
5706
|
+
z-index: 2;
|
|
5619
5707
|
background-color: ${({ theme }) => getColor(theme.palette.fuschia, 400, undefined, 0.4)};
|
|
5620
|
-
padding: 0 2px;
|
|
5621
5708
|
`;
|
|
5622
5709
|
const WordsContainer = styled__default["default"].div `
|
|
5623
5710
|
box-sizing: border-box;
|
|
5624
5711
|
${StyledWord}, span {
|
|
5625
5712
|
&::selection {
|
|
5626
|
-
background-color: ${({ theme }) => getColor(theme.palette.
|
|
5713
|
+
background-color: ${({ theme }) => getColor(theme.palette.grey, 400, undefined, 0.5)};
|
|
5627
5714
|
}
|
|
5628
5715
|
}
|
|
5629
5716
|
`;
|
|
5717
|
+
const Layer = styled__default["default"].div `
|
|
5718
|
+
position: absolute;
|
|
5719
|
+
top: 0;
|
|
5720
|
+
left: 0;
|
|
5721
|
+
width: 100%;
|
|
5722
|
+
height: 100%;
|
|
5723
|
+
z-index: 0;
|
|
5724
|
+
background-color: ${({ color }) => getColor(color, undefined, undefined, 0.2)};
|
|
5725
|
+
`;
|
|
5630
5726
|
/**
|
|
5631
5727
|
* Use Highlight to use highlight interation on any text element
|
|
5632
5728
|
*/
|
|
5633
5729
|
const Highlight = (props) => {
|
|
5730
|
+
var _a;
|
|
5731
|
+
const { onSelectionButtonClick, search, i18n, children } = props;
|
|
5634
5732
|
const ref = React.useRef(null);
|
|
5733
|
+
const [isSelecting, setIsSelecting] = React.useState(false);
|
|
5734
|
+
const [position, setPosition] = React.useState();
|
|
5735
|
+
const [selection, setSelection] = React.useState();
|
|
5736
|
+
const activeSelection = document.getSelection();
|
|
5737
|
+
const extractText = (selection) => {
|
|
5738
|
+
if (selection.anchorNode === null || selection.focusNode === null)
|
|
5739
|
+
return "";
|
|
5740
|
+
var range = selection.getRangeAt(0);
|
|
5741
|
+
var tempDiv = document.createElement("div");
|
|
5742
|
+
tempDiv.appendChild(range.cloneContents());
|
|
5743
|
+
var items = tempDiv.querySelectorAll("div");
|
|
5744
|
+
items.forEach(function (item) {
|
|
5745
|
+
if (item.getAttribute("data-unselectable")) {
|
|
5746
|
+
item.remove();
|
|
5747
|
+
}
|
|
5748
|
+
});
|
|
5749
|
+
var filteredText = tempDiv.textContent || tempDiv.innerText;
|
|
5750
|
+
return filteredText.length ? filteredText.trim() : selection.toString();
|
|
5751
|
+
};
|
|
5635
5752
|
const handleSelectionChange = React.useCallback(() => {
|
|
5636
|
-
var _a, _b, _c, _d, _e, _f, _g, _h
|
|
5637
|
-
|
|
5638
|
-
|
|
5639
|
-
|
|
5640
|
-
|
|
5753
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
5754
|
+
if (activeSelection && activeSelection.toString().length > 0) {
|
|
5755
|
+
// Extract the text from the selection cleaning unselectable items
|
|
5756
|
+
const text = extractText(activeSelection);
|
|
5757
|
+
if (!text)
|
|
5758
|
+
return;
|
|
5759
|
+
const anchorNode = (_a = activeSelection === null || activeSelection === void 0 ? void 0 : activeSelection.anchorNode) === null || _a === void 0 ? void 0 : _a.parentElement;
|
|
5760
|
+
const focusNode = (_b = activeSelection === null || activeSelection === void 0 ? void 0 : activeSelection.focusNode) === null || _b === void 0 ? void 0 : _b.parentElement;
|
|
5761
|
+
if (anchorNode &&
|
|
5762
|
+
focusNode &&
|
|
5763
|
+
((_c = ref.current) === null || _c === void 0 ? void 0 : _c.contains(anchorNode)) && // Selection starts inside the ref
|
|
5764
|
+
((_d = ref.current) === null || _d === void 0 ? void 0 : _d.contains(focusNode)) // Selection ends inside the ref
|
|
5765
|
+
) {
|
|
5766
|
+
if (onSelectionButtonClick) {
|
|
5767
|
+
setIsSelecting(true);
|
|
5768
|
+
const range = activeSelection.getRangeAt(0);
|
|
5769
|
+
const rects = range.getClientRects();
|
|
5770
|
+
const lastRect = rects[rects.length - 1];
|
|
5771
|
+
const containerRect = ref && ref.current
|
|
5772
|
+
? ref.current.getBoundingClientRect()
|
|
5773
|
+
: null;
|
|
5774
|
+
if (!lastRect || !containerRect)
|
|
5775
|
+
return;
|
|
5776
|
+
const relativeY = lastRect.bottom - containerRect.top + ref.current.scrollTop;
|
|
5777
|
+
const relativeX = lastRect.right - containerRect.left + ref.current.scrollLeft;
|
|
5778
|
+
if (relativeY > 0 || relativeX > 0)
|
|
5779
|
+
// Fix to avoid the button to be placed sometimes at the top left corner of the screen (X: 0, Y: 0)
|
|
5780
|
+
setPosition({
|
|
5781
|
+
x: relativeX,
|
|
5782
|
+
y: relativeY + 15,
|
|
5783
|
+
});
|
|
5784
|
+
}
|
|
5785
|
+
else {
|
|
5786
|
+
setIsSelecting(false);
|
|
5787
|
+
}
|
|
5788
|
+
const selectionPart = {
|
|
5789
|
+
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")),
|
|
5790
|
+
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")),
|
|
5791
|
+
};
|
|
5792
|
+
setSelection(Object.assign(Object.assign({}, selectionPart), { text }));
|
|
5793
|
+
}
|
|
5794
|
+
else {
|
|
5795
|
+
setIsSelecting(false);
|
|
5796
|
+
}
|
|
5641
5797
|
}
|
|
5642
|
-
|
|
5643
|
-
|
|
5644
|
-
if (anchorNode &&
|
|
5645
|
-
focusNode &&
|
|
5646
|
-
((_c = ref.current) === null || _c === void 0 ? void 0 : _c.contains(anchorNode)) && // Selection starts inside the ref
|
|
5647
|
-
((_d = ref.current) === null || _d === void 0 ? void 0 : _d.contains(focusNode)) // Selection ends inside the ref
|
|
5648
|
-
) {
|
|
5649
|
-
const selectionPart = {
|
|
5650
|
-
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")),
|
|
5651
|
-
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")),
|
|
5652
|
-
};
|
|
5653
|
-
(_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 }));
|
|
5798
|
+
else {
|
|
5799
|
+
setIsSelecting(false);
|
|
5654
5800
|
}
|
|
5655
|
-
}, [
|
|
5801
|
+
}, [onSelectionButtonClick, activeSelection]);
|
|
5656
5802
|
React.useEffect(() => {
|
|
5657
5803
|
if (ref.current === null)
|
|
5658
5804
|
return;
|
|
@@ -5661,19 +5807,28 @@ const Highlight = (props) => {
|
|
|
5661
5807
|
document.removeEventListener("selectionchange", handleSelectionChange);
|
|
5662
5808
|
};
|
|
5663
5809
|
}, [ref, props, handleSelectionChange]);
|
|
5664
|
-
return (jsxRuntime.
|
|
5810
|
+
return (jsxRuntime.jsxs(HighlightContextProvider, Object.assign({ term: search }, { children: [jsxRuntime.jsx(WordsContainer, Object.assign({ ref: ref }, { children: children })), onSelectionButtonClick && isSelecting && selection && (jsxRuntime.jsxs(CreateObservationButton, Object.assign({ isAccent: true, isPrimary: true, position: position !== null && position !== void 0 ? position : {
|
|
5811
|
+
x: 0,
|
|
5812
|
+
y: 0,
|
|
5813
|
+
}, 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"] })))] })));
|
|
5665
5814
|
};
|
|
5666
5815
|
const Word = (props) => {
|
|
5667
|
-
var _a;
|
|
5668
5816
|
const isActive = props.currentTime &&
|
|
5669
5817
|
props.currentTime >= props.start &&
|
|
5670
5818
|
props.currentTime < props.end;
|
|
5671
|
-
//
|
|
5672
|
-
const
|
|
5673
|
-
|
|
5674
|
-
return (
|
|
5819
|
+
// Are there any observations containing this word?
|
|
5820
|
+
const foundObservations = React.useMemo(() => {
|
|
5821
|
+
var _a, _b;
|
|
5822
|
+
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 : [];
|
|
5823
|
+
}, [props.observations, props.start, props.end]);
|
|
5824
|
+
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) => {
|
|
5825
|
+
var _a;
|
|
5826
|
+
return (jsxRuntime.jsx(Layer, { color: (_a = obs.hue) !== null && _a !== void 0 ? _a : theme.palette.grey[600] }, obs.id));
|
|
5827
|
+
}), isActive ? (jsxRuntime.jsx(ActiveWord, Object.assign({ "data-start": props.start, "data-end": props.end }, { children: jsxRuntime.jsx(Searchable, { text: props.text }) }))) : (jsxRuntime.jsx(Searchable, { text: props.text })), " "] }))), [props, foundObservations, isActive]);
|
|
5828
|
+
if (props.tooltipContent !== undefined && foundObservations.length > 0) {
|
|
5829
|
+
return (jsxRuntime.jsx(Tooltip, Object.assign({ content: props.tooltipContent(foundObservations), isTransparent: true }, { children: ObsWord })));
|
|
5675
5830
|
}
|
|
5676
|
-
return
|
|
5831
|
+
return jsxRuntime.jsx(jsxRuntime.Fragment, { children: ObsWord });
|
|
5677
5832
|
};
|
|
5678
5833
|
Highlight.Word = Word;
|
|
5679
5834
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
1
2
|
import { ButtonArgs } from "./_types";
|
|
2
3
|
export declare const Default: import("@storybook/types").AnnotatedStoryFn<import("@storybook/react/dist/types-0a347bb9").R, ButtonArgs>;
|
|
3
4
|
export declare const Basic: import("@storybook/types").AnnotatedStoryFn<import("@storybook/react/dist/types-0a347bb9").R, ButtonArgs>;
|
|
@@ -8,18 +8,18 @@ export declare const variants: readonly [{}, {
|
|
|
8
8
|
readonly disabled: true;
|
|
9
9
|
}];
|
|
10
10
|
export declare const Row: import("styled-components").IStyledComponent<"web", {
|
|
11
|
-
alignItems?: "
|
|
12
|
-
alignItemsXs?: "
|
|
13
|
-
alignItemsSm?: "
|
|
14
|
-
alignItemsMd?: "
|
|
15
|
-
alignItemsLg?: "
|
|
16
|
-
alignItemsXl?: "
|
|
17
|
-
justifyContent?: "
|
|
18
|
-
justifyContentXs?: "
|
|
19
|
-
justifyContentSm?: "
|
|
20
|
-
justifyContentMd?: "
|
|
21
|
-
justifyContentLg?: "
|
|
22
|
-
justifyContentXl?: "
|
|
11
|
+
alignItems?: "center" | "start" | "end" | "baseline" | "stretch" | undefined;
|
|
12
|
+
alignItemsXs?: "center" | "start" | "end" | "baseline" | "stretch" | undefined;
|
|
13
|
+
alignItemsSm?: "center" | "start" | "end" | "baseline" | "stretch" | undefined;
|
|
14
|
+
alignItemsMd?: "center" | "start" | "end" | "baseline" | "stretch" | undefined;
|
|
15
|
+
alignItemsLg?: "center" | "start" | "end" | "baseline" | "stretch" | undefined;
|
|
16
|
+
alignItemsXl?: "center" | "start" | "end" | "baseline" | "stretch" | undefined;
|
|
17
|
+
justifyContent?: "center" | "start" | "end" | "between" | "around" | undefined;
|
|
18
|
+
justifyContentXs?: "center" | "start" | "end" | "between" | "around" | undefined;
|
|
19
|
+
justifyContentSm?: "center" | "start" | "end" | "between" | "around" | undefined;
|
|
20
|
+
justifyContentMd?: "center" | "start" | "end" | "between" | "around" | undefined;
|
|
21
|
+
justifyContentLg?: "center" | "start" | "end" | "between" | "around" | undefined;
|
|
22
|
+
justifyContentXl?: "center" | "start" | "end" | "between" | "around" | undefined;
|
|
23
23
|
wrap?: "wrap" | "nowrap" | "wrap-reverse" | undefined;
|
|
24
24
|
wrapXs?: "wrap" | "nowrap" | "wrap-reverse" | undefined;
|
|
25
25
|
wrapSm?: "wrap" | "nowrap" | "wrap-reverse" | undefined;
|
|
@@ -73,7 +73,7 @@ export declare const Row: import("styled-components").IStyledComponent<"web", {
|
|
|
73
73
|
results?: number | undefined;
|
|
74
74
|
security?: string | undefined;
|
|
75
75
|
unselectable?: "on" | "off" | undefined;
|
|
76
|
-
inputMode?: "
|
|
76
|
+
inputMode?: "none" | "search" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | undefined;
|
|
77
77
|
is?: string | undefined;
|
|
78
78
|
"aria-activedescendant"?: string | undefined;
|
|
79
79
|
"aria-atomic"?: (boolean | "true" | "false") | undefined;
|
|
@@ -299,18 +299,18 @@ export declare const Col: import("styled-components").IStyledComponent<"web", {
|
|
|
299
299
|
md?: string | number | boolean | undefined;
|
|
300
300
|
lg?: string | number | boolean | undefined;
|
|
301
301
|
xl?: string | number | boolean | undefined;
|
|
302
|
-
alignSelf?: "
|
|
303
|
-
alignSelfXs?: "
|
|
304
|
-
alignSelfSm?: "
|
|
305
|
-
alignSelfMd?: "
|
|
306
|
-
alignSelfLg?: "
|
|
307
|
-
alignSelfXl?: "
|
|
308
|
-
textAlign?: "
|
|
309
|
-
textAlignXs?: "
|
|
310
|
-
textAlignSm?: "
|
|
311
|
-
textAlignMd?: "
|
|
312
|
-
textAlignLg?: "
|
|
313
|
-
textAlignXl?: "
|
|
302
|
+
alignSelf?: "center" | "start" | "end" | "baseline" | "stretch" | "auto" | undefined;
|
|
303
|
+
alignSelfXs?: "center" | "start" | "end" | "baseline" | "stretch" | "auto" | undefined;
|
|
304
|
+
alignSelfSm?: "center" | "start" | "end" | "baseline" | "stretch" | "auto" | undefined;
|
|
305
|
+
alignSelfMd?: "center" | "start" | "end" | "baseline" | "stretch" | "auto" | undefined;
|
|
306
|
+
alignSelfLg?: "center" | "start" | "end" | "baseline" | "stretch" | "auto" | undefined;
|
|
307
|
+
alignSelfXl?: "center" | "start" | "end" | "baseline" | "stretch" | "auto" | undefined;
|
|
308
|
+
textAlign?: "center" | "start" | "end" | "justify" | undefined;
|
|
309
|
+
textAlignXs?: "center" | "start" | "end" | "justify" | undefined;
|
|
310
|
+
textAlignSm?: "center" | "start" | "end" | "justify" | undefined;
|
|
311
|
+
textAlignMd?: "center" | "start" | "end" | "justify" | undefined;
|
|
312
|
+
textAlignLg?: "center" | "start" | "end" | "justify" | undefined;
|
|
313
|
+
textAlignXl?: "center" | "start" | "end" | "justify" | undefined;
|
|
314
314
|
offset?: string | number | undefined;
|
|
315
315
|
offsetXs?: string | number | undefined;
|
|
316
316
|
offsetSm?: string | number | undefined;
|
|
@@ -370,7 +370,7 @@ export declare const Col: import("styled-components").IStyledComponent<"web", {
|
|
|
370
370
|
results?: number | undefined;
|
|
371
371
|
security?: string | undefined;
|
|
372
372
|
unselectable?: "on" | "off" | undefined;
|
|
373
|
-
inputMode?: "
|
|
373
|
+
inputMode?: "none" | "search" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | undefined;
|
|
374
374
|
is?: string | undefined;
|
|
375
375
|
"aria-activedescendant"?: string | undefined;
|
|
376
376
|
"aria-atomic"?: (boolean | "true" | "false") | undefined;
|
|
@@ -640,7 +640,7 @@ export declare const MD: import("styled-components").IStyledComponent<"web", {
|
|
|
640
640
|
results?: number | undefined;
|
|
641
641
|
security?: string | undefined;
|
|
642
642
|
unselectable?: "on" | "off" | undefined;
|
|
643
|
-
inputMode?: "
|
|
643
|
+
inputMode?: "none" | "search" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | undefined;
|
|
644
644
|
is?: string | undefined;
|
|
645
645
|
"aria-activedescendant"?: string | undefined;
|
|
646
646
|
"aria-atomic"?: (boolean | "true" | "false") | undefined;
|
|
@@ -5,7 +5,7 @@ interface Props {
|
|
|
5
5
|
isLoadingMedia?: boolean;
|
|
6
6
|
removeThumbnail?: () => void;
|
|
7
7
|
showX?: boolean;
|
|
8
|
-
|
|
8
|
+
error?: string;
|
|
9
9
|
}
|
|
10
|
-
declare const Thumbnail: ({ src, type, removeThumbnail, clickThumbnail, showX, isLoadingMedia,
|
|
10
|
+
declare const Thumbnail: ({ src, type, removeThumbnail, clickThumbnail, showX, isLoadingMedia, error, }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
11
11
|
export default Thumbnail;
|
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
export interface FileElement {
|
|
2
|
-
fileName: string;
|
|
3
|
-
fileType: string;
|
|
4
|
-
errorCode?: "FILE_TOO_BIG" | "INVALID_FILE_EXTENSION" | "GENERIC_ERROR";
|
|
5
|
-
previewUrl: string;
|
|
6
|
-
internal_id: string;
|
|
7
|
-
isLoadingMedia: boolean;
|
|
8
|
-
}
|
|
9
1
|
interface Props {
|
|
10
2
|
openLightbox: (index: number) => void;
|
|
11
3
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
declare const CreateObservationButton: import("styled-components").IStyledComponent<"web", import("styled-components/dist/types").Substitute<import("../buttons/button/_types").ButtonArgs & import("react").RefAttributes<HTMLButtonElement>, {
|
|
3
|
+
position: {
|
|
4
|
+
x: number;
|
|
5
|
+
y: number;
|
|
6
|
+
};
|
|
7
|
+
}>> & import("react").ForwardRefExoticComponent<import("../buttons/button/_types").ButtonArgs & import("react").RefAttributes<HTMLButtonElement>> & {
|
|
8
|
+
EndIcon: {
|
|
9
|
+
(props: import("@zendeskgarden/react-buttons").IButtonEndIconProps): JSX.Element;
|
|
10
|
+
displayName: string;
|
|
11
|
+
};
|
|
12
|
+
StartIcon: {
|
|
13
|
+
(props: import("@zendeskgarden/react-buttons").IButtonEndIconProps): JSX.Element;
|
|
14
|
+
displayName: string;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
export { CreateObservationButton };
|
|
@@ -15,12 +15,15 @@ export interface HighlightArgs {
|
|
|
15
15
|
isMonospace?: boolean;
|
|
16
16
|
/** Adjusts the font size. By default font size is medium */
|
|
17
17
|
size?: "xs" | "sm" | "md" | "lg" | "xl" | "xxl" | "xxxl";
|
|
18
|
-
|
|
18
|
+
search?: string;
|
|
19
|
+
onSelectionButtonClick?: (part: {
|
|
19
20
|
from: number;
|
|
20
21
|
to: number;
|
|
21
22
|
text: string;
|
|
22
23
|
}) => void;
|
|
23
|
-
|
|
24
|
+
i18n?: {
|
|
25
|
+
selectionButtonLabel: string;
|
|
26
|
+
};
|
|
24
27
|
}
|
|
25
28
|
export interface Observation extends Omit<IBookmark, "onClick"> {
|
|
26
29
|
color?: string;
|
|
@@ -31,7 +34,6 @@ export interface WordProps extends ISpanProps {
|
|
|
31
34
|
currentTime?: number;
|
|
32
35
|
observations?: Observation[];
|
|
33
36
|
text: string;
|
|
34
|
-
/** Adjusts the font size. By default font size is medium */
|
|
35
37
|
size?: "xs" | "sm" | "md" | "lg" | "xl" | "xxl" | "xxxl";
|
|
36
|
-
tooltipContent?: (
|
|
38
|
+
tooltipContent?: (observations: Observation[]) => ReactNode;
|
|
37
39
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
1
2
|
import { HighlightArgs, WordProps } from "./_types";
|
|
2
3
|
export interface StoryArgs extends HighlightArgs {
|
|
3
4
|
words: Array<WordProps & {
|
|
@@ -7,9 +8,10 @@ export interface StoryArgs extends HighlightArgs {
|
|
|
7
8
|
includeSearch?: boolean;
|
|
8
9
|
}
|
|
9
10
|
export declare const Default: import("@storybook/types").AnnotatedStoryFn<import("@storybook/react/dist/types-0a347bb9").R, StoryArgs>;
|
|
10
|
-
export declare const
|
|
11
|
-
export declare const WithSearch: import("@storybook/types").AnnotatedStoryFn<import("@storybook/react/dist/types-0a347bb9").R, StoryArgs>;
|
|
11
|
+
export declare const WithSelectionButton: import("@storybook/types").AnnotatedStoryFn<import("@storybook/react/dist/types-0a347bb9").R, StoryArgs>;
|
|
12
12
|
export declare const WithTooltip: import("@storybook/types").AnnotatedStoryFn<import("@storybook/react/dist/types-0a347bb9").R, StoryArgs>;
|
|
13
|
+
export declare const WithSearch: import("@storybook/types").AnnotatedStoryFn<import("@storybook/react/dist/types-0a347bb9").R, StoryArgs>;
|
|
14
|
+
export declare const VideoSync: import("@storybook/types").AnnotatedStoryFn<import("@storybook/react/dist/types-0a347bb9").R, StoryArgs>;
|
|
13
15
|
export declare const Demo: import("@storybook/types").AnnotatedStoryFn<import("@storybook/react/dist/types-0a347bb9").R, StoryArgs>;
|
|
14
16
|
declare const _default: import("@storybook/types").ComponentAnnotations<import("@storybook/react/dist/types-0a347bb9").R, HighlightArgs & {
|
|
15
17
|
children?: import("react").ReactNode;
|
|
@@ -9,6 +9,7 @@ export interface PlayerArgs extends HTMLAttributes<HTMLVideoElement> {
|
|
|
9
9
|
bookmarks?: IBookmark[];
|
|
10
10
|
handleBookmarkUpdate?: (bookmark: IBookmark) => void;
|
|
11
11
|
i18n?: PlayerI18n;
|
|
12
|
+
showControls?: boolean;
|
|
12
13
|
}
|
|
13
14
|
export interface PlayerI18n {
|
|
14
15
|
beforeHighlight?: string;
|
|
@@ -21,12 +22,14 @@ export interface IBookmark {
|
|
|
21
22
|
hue?: string;
|
|
22
23
|
label?: string;
|
|
23
24
|
tooltipContent?: ReactNode;
|
|
25
|
+
isFocused?: boolean;
|
|
24
26
|
onClick?: () => void;
|
|
25
27
|
tags?: VideoTag[];
|
|
26
28
|
}
|
|
27
29
|
export interface WrapperProps {
|
|
28
30
|
isPlaying?: boolean;
|
|
29
31
|
isLoaded?: boolean;
|
|
32
|
+
showControls?: boolean;
|
|
30
33
|
}
|
|
31
34
|
type VideoTag = {
|
|
32
35
|
group: {
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
1
2
|
import { PlayerArgs } from "./_types";
|
|
2
3
|
interface PlayerStoryArgs extends PlayerArgs {
|
|
3
4
|
}
|
|
4
5
|
export declare const Basic: import("@storybook/types").AnnotatedStoryFn<import("@storybook/react/dist/types-0a347bb9").R, PlayerStoryArgs>;
|
|
6
|
+
export declare const ShowControls: import("@storybook/types").AnnotatedStoryFn<import("@storybook/react/dist/types-0a347bb9").R, PlayerStoryArgs>;
|
|
5
7
|
export declare const Streaming: import("@storybook/types").AnnotatedStoryFn<import("@storybook/react/dist/types-0a347bb9").R, PlayerStoryArgs>;
|
|
6
8
|
export declare const WithBookmarks: import("@storybook/types").AnnotatedStoryFn<import("@storybook/react/dist/types-0a347bb9").R, PlayerStoryArgs>;
|
|
7
9
|
declare const _default: import("@storybook/types").ComponentAnnotations<import("@storybook/react/dist/types-0a347bb9").R, PlayerArgs & import("react").RefAttributes<HTMLVideoElement>>;
|
|
@@ -268,11 +268,12 @@ export declare const ControlsBar: import("styled-components").IStyledComponent<"
|
|
|
268
268
|
onTransitionEnd?: import("react").TransitionEventHandler<HTMLDivElement> | undefined;
|
|
269
269
|
onTransitionEndCapture?: import("react").TransitionEventHandler<HTMLDivElement> | undefined;
|
|
270
270
|
}>;
|
|
271
|
-
export declare const Controls: ({ container, onCutHandler, bookmarks, isCutting, onBookMarkUpdated, i18n, }: {
|
|
271
|
+
export declare const Controls: ({ container, onCutHandler, bookmarks, isCutting, onBookMarkUpdated, i18n, showControls, }: {
|
|
272
272
|
container: HTMLDivElement | null;
|
|
273
273
|
onCutHandler?: ((time: number) => void) | undefined;
|
|
274
274
|
bookmarks?: IBookmark[] | undefined;
|
|
275
275
|
isCutting?: boolean | undefined;
|
|
276
276
|
onBookMarkUpdated?: ((bookmark: IBookmark) => void) | undefined;
|
|
277
277
|
i18n?: PlayerI18n | undefined;
|
|
278
|
+
showControls?: boolean | undefined;
|
|
278
279
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -3,5 +3,6 @@ import { WrapperProps } from "../_types";
|
|
|
3
3
|
export declare const FloatingContainer: import("styled-components").IStyledComponent<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, WrapperProps>>;
|
|
4
4
|
export declare const FloatingControls: (props: {
|
|
5
5
|
isPlaying?: boolean;
|
|
6
|
+
showControls?: boolean;
|
|
6
7
|
onClick?: () => void;
|
|
7
8
|
}) => import("react/jsx-runtime").JSX.Element;
|