@appquality/unguess-design-system 3.1.98 → 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.
- package/CHANGELOG.md +21 -0
- package/build/index.js +142 -79
- package/build/stories/avatar/InternalAvatar.d.ts +2 -0
- package/build/stories/chat/_types.d.ts +1 -1
- 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/highlight/CreateObservationButton.d.ts +17 -0
- package/build/stories/highlight/_types.d.ts +8 -0
- package/build/stories/highlight/index.stories.d.ts +1 -0
- package/build/stories/player/_types.d.ts +2 -0
- package/build/stories/player/index.stories.d.ts +1 -0
- package/build/stories/player/parts/controls.d.ts +2 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,24 @@
|
|
|
1
|
+
# v3.1.99 (Mon Jun 10 2024)
|
|
2
|
+
|
|
3
|
+
#### 🐛 Bug Fix
|
|
4
|
+
|
|
5
|
+
- New version [#385](https://github.com/AppQuality/unguess-design-system/pull/385) ([@iacopolea](https://github.com/iacopolea) [@cannarocks](https://github.com/cannarocks) [@marcbon](https://github.com/marcbon) [@Kariamos](https://github.com/Kariamos))
|
|
6
|
+
- 🚀 feat(player): add showControls prop to PlayerArgs and WrapperProps [#381](https://github.com/AppQuality/unguess-design-system/pull/381) ([@marcbon](https://github.com/marcbon))
|
|
7
|
+
- 🚀 feat(highlight): add CreateObservationButton component [#387](https://github.com/AppQuality/unguess-design-system/pull/387) ([@marcbon](https://github.com/marcbon))
|
|
8
|
+
- feat: centered tooltip attachment text [#386](https://github.com/AppQuality/unguess-design-system/pull/386) ([@Kariamos](https://github.com/Kariamos))
|
|
9
|
+
- feat: added new component for internal avatar [#384](https://github.com/AppQuality/unguess-design-system/pull/384) ([@Kariamos](https://github.com/Kariamos))
|
|
10
|
+
- Attachment error managment [#383](https://github.com/AppQuality/unguess-design-system/pull/383) ([@iacopolea](https://github.com/iacopolea) [@Kariamos](https://github.com/Kariamos))
|
|
11
|
+
- 🚀 feat(cutterButton.tsx): add styled component for Cutter button to prevent [#382](https://github.com/AppQuality/unguess-design-system/pull/382) ([@marcbon](https://github.com/marcbon))
|
|
12
|
+
|
|
13
|
+
#### Authors: 4
|
|
14
|
+
|
|
15
|
+
- Iacopo Leardini ([@iacopolea](https://github.com/iacopolea))
|
|
16
|
+
- Luca Cannarozzo ([@cannarocks](https://github.com/cannarocks))
|
|
17
|
+
- Marco ([@Kariamos](https://github.com/Kariamos))
|
|
18
|
+
- Marco Bonomo ([@marcbon](https://github.com/marcbon))
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
1
22
|
# v3.1.98 (Tue May 28 2024)
|
|
2
23
|
|
|
3
24
|
#### 🐛 Bug Fix
|
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: () => {
|
|
@@ -4299,18 +4311,22 @@ const SvgPlus$1 = props => /*#__PURE__*/React__namespace.createElement("svg", _e
|
|
|
4299
4311
|
fill: "currentColor"
|
|
4300
4312
|
})));
|
|
4301
4313
|
|
|
4314
|
+
// Prevent button from breaking on smaller screens
|
|
4315
|
+
const StyledButton$2 = styled.styled(Button) `
|
|
4316
|
+
overflow: visible;
|
|
4317
|
+
`;
|
|
4302
4318
|
const Cutter = ({ onCutHandler, isCutting, i18n, }) => {
|
|
4303
4319
|
var _a;
|
|
4304
4320
|
const { context } = Video.useVideoContext();
|
|
4305
4321
|
const videoRef = (_a = context.player) === null || _a === void 0 ? void 0 : _a.ref.current;
|
|
4306
4322
|
if (!onCutHandler)
|
|
4307
4323
|
return null;
|
|
4308
|
-
return (jsxRuntime.jsx(
|
|
4324
|
+
return (jsxRuntime.jsx(StyledButton$2, Object.assign({ isPrimary: true, isAccent: !isCutting, size: "small", onClick: (e) => {
|
|
4309
4325
|
if (videoRef) {
|
|
4310
4326
|
onCutHandler(videoRef.currentTime);
|
|
4311
4327
|
}
|
|
4312
4328
|
e.stopPropagation();
|
|
4313
|
-
} }, { 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"] })) })));
|
|
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" })] })) })));
|
|
4314
4330
|
};
|
|
4315
4331
|
|
|
4316
4332
|
var _path$e;
|
|
@@ -4478,7 +4494,7 @@ function useDebounce(value, delay) {
|
|
|
4478
4494
|
}
|
|
4479
4495
|
|
|
4480
4496
|
const ControlsWrapper = styled__default["default"].div `
|
|
4481
|
-
position: absolute;
|
|
4497
|
+
${({ showControls }) => showControls ? "position: relative;" : "position: absolute;"}
|
|
4482
4498
|
bottom: 0;
|
|
4483
4499
|
left: 0;
|
|
4484
4500
|
right: 0;
|
|
@@ -4514,7 +4530,7 @@ const CurrentTimeMarker = styled__default["default"].div `
|
|
|
4514
4530
|
z-index: 1;
|
|
4515
4531
|
background-color: white;
|
|
4516
4532
|
`;
|
|
4517
|
-
const Controls = ({ container, onCutHandler, bookmarks, isCutting, onBookMarkUpdated, i18n, }) => {
|
|
4533
|
+
const Controls = ({ container, onCutHandler, bookmarks, isCutting, onBookMarkUpdated, i18n, showControls = false, }) => {
|
|
4518
4534
|
var _a, _b, _c;
|
|
4519
4535
|
const [progress, setProgress] = React.useState(0);
|
|
4520
4536
|
const [tooltipMargin, setTooltipMargin] = React.useState(0);
|
|
@@ -4599,7 +4615,7 @@ const Controls = ({ container, onCutHandler, bookmarks, isCutting, onBookMarkUpd
|
|
|
4599
4615
|
onBookMarkUpdated === null || onBookMarkUpdated === void 0 ? void 0 : onBookMarkUpdated(debouncedMark);
|
|
4600
4616
|
}
|
|
4601
4617
|
}, [debouncedMark, onBookMarkUpdated]);
|
|
4602
|
-
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 })), !!duration &&
|
|
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 &&
|
|
4603
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 })] }))] })] })));
|
|
4604
4620
|
};
|
|
4605
4621
|
|
|
@@ -4675,9 +4691,11 @@ const VideoStyle = styled.css `
|
|
|
4675
4691
|
|
|
4676
4692
|
const Container$1 = styled__default["default"].div `
|
|
4677
4693
|
position: relative;
|
|
4678
|
-
|
|
4679
|
-
|
|
4680
|
-
|
|
4694
|
+
${({ showControls }) => !showControls && `
|
|
4695
|
+
display: flex;
|
|
4696
|
+
flex-direction: column;
|
|
4697
|
+
justify-content: center;
|
|
4698
|
+
`}
|
|
4681
4699
|
height: 100%;
|
|
4682
4700
|
width: 100%;
|
|
4683
4701
|
video {
|
|
@@ -4753,7 +4771,7 @@ const PlayerCore = React.forwardRef((props, forwardRef) => {
|
|
|
4753
4771
|
}
|
|
4754
4772
|
};
|
|
4755
4773
|
}, [setIsPlaying, videoRef]);
|
|
4756
|
-
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 }) })] })));
|
|
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 }) })] })));
|
|
4757
4775
|
});
|
|
4758
4776
|
|
|
4759
4777
|
const MediaLightBox = ({ header, onClose, slideChange, selectedImageIndex, thumbnails, videoRefs, isOpen, details }) => {
|
|
@@ -5610,6 +5628,15 @@ const Searchable = ({ text, }) => {
|
|
|
5610
5628
|
return jsxRuntime.jsx(jsxRuntime.Fragment, { children: text });
|
|
5611
5629
|
};
|
|
5612
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
|
+
|
|
5613
5640
|
const StyledWord = styled__default["default"].div `
|
|
5614
5641
|
display: inline;
|
|
5615
5642
|
font-size: ${({ theme, size }) => theme.fontSizes[size !== null && size !== void 0 ? size : "md"]};
|
|
@@ -5654,7 +5681,13 @@ const Layer = styled__default["default"].div `
|
|
|
5654
5681
|
* Use Highlight to use highlight interation on any text element
|
|
5655
5682
|
*/
|
|
5656
5683
|
const Highlight = (props) => {
|
|
5684
|
+
var _a;
|
|
5685
|
+
const { onSelectionButtonClick, search, i18n } = props;
|
|
5657
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();
|
|
5658
5691
|
const extractText = (selection) => {
|
|
5659
5692
|
if (selection.anchorNode === null || selection.focusNode === null)
|
|
5660
5693
|
return "";
|
|
@@ -5672,28 +5705,55 @@ const Highlight = (props) => {
|
|
|
5672
5705
|
};
|
|
5673
5706
|
const handleSelectionChange = React.useCallback(() => {
|
|
5674
5707
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
5675
|
-
|
|
5676
|
-
|
|
5677
|
-
|
|
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
|
+
}
|
|
5678
5752
|
}
|
|
5679
|
-
|
|
5680
|
-
|
|
5681
|
-
if (!text)
|
|
5682
|
-
return;
|
|
5683
|
-
const anchorNode = (_a = activeSelection === null || activeSelection === void 0 ? void 0 : activeSelection.anchorNode) === null || _a === void 0 ? void 0 : _a.parentElement;
|
|
5684
|
-
const focusNode = (_b = activeSelection === null || activeSelection === void 0 ? void 0 : activeSelection.focusNode) === null || _b === void 0 ? void 0 : _b.parentElement;
|
|
5685
|
-
if (anchorNode &&
|
|
5686
|
-
focusNode &&
|
|
5687
|
-
((_c = ref.current) === null || _c === void 0 ? void 0 : _c.contains(anchorNode)) && // Selection starts inside the ref
|
|
5688
|
-
((_d = ref.current) === null || _d === void 0 ? void 0 : _d.contains(focusNode)) // Selection ends inside the ref
|
|
5689
|
-
) {
|
|
5690
|
-
const selectionPart = {
|
|
5691
|
-
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")),
|
|
5692
|
-
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")),
|
|
5693
|
-
};
|
|
5694
|
-
(_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 }));
|
|
5753
|
+
else {
|
|
5754
|
+
setIsSelecting(false);
|
|
5695
5755
|
}
|
|
5696
|
-
}, [props]);
|
|
5756
|
+
}, [props, activeSelection]);
|
|
5697
5757
|
React.useEffect(() => {
|
|
5698
5758
|
if (ref.current === null)
|
|
5699
5759
|
return;
|
|
@@ -5702,7 +5762,10 @@ const Highlight = (props) => {
|
|
|
5702
5762
|
document.removeEventListener("selectionchange", handleSelectionChange);
|
|
5703
5763
|
};
|
|
5704
5764
|
}, [ref, props, handleSelectionChange]);
|
|
5705
|
-
return (jsxRuntime.
|
|
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"] })))] })));
|
|
5706
5769
|
};
|
|
5707
5770
|
const Word = (props) => {
|
|
5708
5771
|
const isActive = props.currentTime &&
|
|
@@ -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 };
|
|
@@ -21,6 +21,14 @@ export interface HighlightArgs {
|
|
|
21
21
|
text: string;
|
|
22
22
|
}) => void;
|
|
23
23
|
search?: string;
|
|
24
|
+
onSelectionButtonClick?: (part: {
|
|
25
|
+
from: number;
|
|
26
|
+
to: number;
|
|
27
|
+
text: string;
|
|
28
|
+
}) => void;
|
|
29
|
+
i18n?: {
|
|
30
|
+
selectionButtonLabel: string;
|
|
31
|
+
};
|
|
24
32
|
}
|
|
25
33
|
export interface Observation extends Omit<IBookmark, "onClick"> {
|
|
26
34
|
color?: string;
|
|
@@ -7,6 +7,7 @@ export interface StoryArgs extends HighlightArgs {
|
|
|
7
7
|
includeSearch?: boolean;
|
|
8
8
|
}
|
|
9
9
|
export declare const Default: import("@storybook/types").AnnotatedStoryFn<import("@storybook/react/dist/types-0a347bb9").R, StoryArgs>;
|
|
10
|
+
export declare const WithSelectionButton: import("@storybook/types").AnnotatedStoryFn<import("@storybook/react/dist/types-0a347bb9").R, StoryArgs>;
|
|
10
11
|
export declare const VideoSync: import("@storybook/types").AnnotatedStoryFn<import("@storybook/react/dist/types-0a347bb9").R, StoryArgs>;
|
|
11
12
|
export declare const WithSearch: import("@storybook/types").AnnotatedStoryFn<import("@storybook/react/dist/types-0a347bb9").R, StoryArgs>;
|
|
12
13
|
export declare const WithTooltip: import("@storybook/types").AnnotatedStoryFn<import("@storybook/react/dist/types-0a347bb9").R, StoryArgs>;
|
|
@@ -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;
|
|
@@ -27,6 +28,7 @@ export interface IBookmark {
|
|
|
27
28
|
export interface WrapperProps {
|
|
28
29
|
isPlaying?: boolean;
|
|
29
30
|
isLoaded?: boolean;
|
|
31
|
+
showControls?: boolean;
|
|
30
32
|
}
|
|
31
33
|
type VideoTag = {
|
|
32
34
|
group: {
|
|
@@ -2,6 +2,7 @@ import { PlayerArgs } from "./_types";
|
|
|
2
2
|
interface PlayerStoryArgs extends PlayerArgs {
|
|
3
3
|
}
|
|
4
4
|
export declare const Basic: import("@storybook/types").AnnotatedStoryFn<import("@storybook/react/dist/types-0a347bb9").R, PlayerStoryArgs>;
|
|
5
|
+
export declare const ShowControls: import("@storybook/types").AnnotatedStoryFn<import("@storybook/react/dist/types-0a347bb9").R, PlayerStoryArgs>;
|
|
5
6
|
export declare const Streaming: import("@storybook/types").AnnotatedStoryFn<import("@storybook/react/dist/types-0a347bb9").R, PlayerStoryArgs>;
|
|
6
7
|
export declare const WithBookmarks: import("@storybook/types").AnnotatedStoryFn<import("@storybook/react/dist/types-0a347bb9").R, PlayerStoryArgs>;
|
|
7
8
|
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;
|