@dcl/asset-packs 2.3.1 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/bin/index.js +3722 -1596
  2. package/catalog.json +127 -1
  3. package/dist/admin-toolkit-ui/Active.d.ts +11 -0
  4. package/dist/admin-toolkit-ui/Active.js +32 -0
  5. package/dist/admin-toolkit-ui/Button.d.ts +22 -9
  6. package/dist/admin-toolkit-ui/Button.js +45 -28
  7. package/dist/admin-toolkit-ui/Card.d.ts +6 -0
  8. package/dist/admin-toolkit-ui/Card.js +22 -0
  9. package/dist/admin-toolkit-ui/Error.d.ts +9 -0
  10. package/dist/admin-toolkit-ui/Error.js +31 -0
  11. package/dist/admin-toolkit-ui/Header.d.ts +8 -0
  12. package/dist/admin-toolkit-ui/Header.js +17 -0
  13. package/dist/admin-toolkit-ui/Loading.d.ts +11 -0
  14. package/dist/admin-toolkit-ui/Loading.js +31 -0
  15. package/dist/admin-toolkit-ui/ModerationControl/AddUserInput.d.ts +7 -0
  16. package/dist/admin-toolkit-ui/ModerationControl/AddUserInput.js +67 -0
  17. package/dist/admin-toolkit-ui/ModerationControl/AdminList.d.ts +10 -0
  18. package/dist/admin-toolkit-ui/ModerationControl/AdminList.js +192 -0
  19. package/dist/admin-toolkit-ui/ModerationControl/RemoveAdminConfirmation.d.ts +8 -0
  20. package/dist/admin-toolkit-ui/ModerationControl/RemoveAdminConfirmation.js +75 -0
  21. package/dist/admin-toolkit-ui/ModerationControl/api.d.ts +12 -0
  22. package/dist/admin-toolkit-ui/ModerationControl/api.js +28 -0
  23. package/dist/admin-toolkit-ui/ModerationControl/index.d.ts +23 -0
  24. package/dist/admin-toolkit-ui/ModerationControl/index.js +37 -0
  25. package/dist/admin-toolkit-ui/SmartItemsControl.js +34 -56
  26. package/dist/admin-toolkit-ui/TextAnnouncementsControl.js +50 -59
  27. package/dist/admin-toolkit-ui/VideoControl/LiveStream/DeleteStreamKey.d.ts +7 -0
  28. package/dist/admin-toolkit-ui/VideoControl/LiveStream/DeleteStreamKey.js +62 -0
  29. package/dist/admin-toolkit-ui/{VideoControl.d.ts → VideoControl/LiveStream/GenerateStreamKey.d.ts} +2 -3
  30. package/dist/admin-toolkit-ui/VideoControl/LiveStream/GenerateStreamKey.js +41 -0
  31. package/dist/admin-toolkit-ui/VideoControl/LiveStream/ShowStreamKey.d.ts +11 -0
  32. package/dist/admin-toolkit-ui/VideoControl/LiveStream/ShowStreamKey.js +112 -0
  33. package/dist/admin-toolkit-ui/VideoControl/LiveStream/index.d.ts +10 -0
  34. package/dist/admin-toolkit-ui/VideoControl/LiveStream/index.js +62 -0
  35. package/dist/admin-toolkit-ui/VideoControl/VideoUrl.d.ts +9 -0
  36. package/dist/admin-toolkit-ui/VideoControl/VideoUrl.js +125 -0
  37. package/dist/admin-toolkit-ui/VideoControl/VolumeControl.d.ts +8 -0
  38. package/dist/admin-toolkit-ui/VideoControl/VolumeControl.js +82 -0
  39. package/dist/admin-toolkit-ui/VideoControl/api.d.ts +12 -0
  40. package/dist/admin-toolkit-ui/VideoControl/api.js +17 -0
  41. package/dist/admin-toolkit-ui/VideoControl/index.d.ts +28 -0
  42. package/dist/admin-toolkit-ui/VideoControl/index.js +107 -0
  43. package/dist/admin-toolkit-ui/VideoControl/utils.d.ts +28 -0
  44. package/dist/admin-toolkit-ui/VideoControl/utils.js +87 -0
  45. package/dist/admin-toolkit-ui/fetch-utils.d.ts +14 -0
  46. package/dist/admin-toolkit-ui/fetch-utils.js +41 -0
  47. package/dist/admin-toolkit-ui/index.d.ts +11 -0
  48. package/dist/admin-toolkit-ui/index.js +200 -272
  49. package/dist/admin-toolkit-ui/types.d.ts +0 -2
  50. package/dist/admin-toolkit-ui/types.js +1 -1
  51. package/dist/admin-toolkit-ui/utils.d.ts +10 -2
  52. package/dist/admin-toolkit-ui/utils.js +31 -51
  53. package/dist/bin/index.js +3722 -1596
  54. package/dist/definitions.d.ts +18 -17
  55. package/dist/definitions.js +12 -10
  56. package/dist/enums.d.ts +5 -0
  57. package/dist/enums.js +7 -1
  58. package/dist/id.d.ts +2 -4
  59. package/dist/scene-entrypoint.js +1 -1
  60. package/package.json +6 -6
  61. package/dist/admin-toolkit-ui/VideoControl.js +0 -297
@@ -0,0 +1,41 @@
1
+ import { Color4 } from '@dcl/sdk/math';
2
+ import ReactEcs, { UiEntity, Label } from '@dcl/react-ecs';
3
+ import { Button } from '../../Button';
4
+ import { Error } from '../../Error';
5
+ import { generateStreamKey } from '../api';
6
+ import { LoadingDots } from '../../Loading';
7
+ import { getComponents } from '../../../definitions';
8
+ import { state } from '../..';
9
+ export function GenerateStreamKey({ scaleFactor, engine, }) {
10
+ const [loading, setLoading] = ReactEcs.useState(false);
11
+ const [error, setError] = ReactEcs.useState('');
12
+ const { VideoControlState } = getComponents(engine);
13
+ return (ReactEcs.createElement(UiEntity, { uiTransform: {
14
+ width: '100%',
15
+ height: 460 * scaleFactor,
16
+ justifyContent: 'center',
17
+ alignItems: 'center',
18
+ } }, loading ? (ReactEcs.createElement(UiEntity, { uiTransform: { flexDirection: 'column' } },
19
+ ReactEcs.createElement(LoadingDots, { scaleFactor: scaleFactor, engine: engine }),
20
+ ReactEcs.createElement(Label, { value: "Generating your Stream Key", color: Color4.fromHexString('#A09BA8'), fontSize: 16 * scaleFactor, uiTransform: { margin: { top: 16 * scaleFactor } } }))) : (ReactEcs.createElement(UiEntity, { uiTransform: { flexDirection: 'column' } },
21
+ ReactEcs.createElement(UiEntity, { uiTransform: { justifyContent: 'center', width: '100%' } },
22
+ ReactEcs.createElement(Button, { id: "video_control_live_generate_key", value: "<b>Get Stream Key</b>", fontSize: 18 * scaleFactor, uiTransform: {
23
+ height: 52 * scaleFactor,
24
+ padding: 16 * scaleFactor,
25
+ margin: { bottom: 16 * scaleFactor }
26
+ }, onMouseDown: async () => {
27
+ setLoading(true);
28
+ const [error, data] = await generateStreamKey();
29
+ setLoading(false);
30
+ if (error) {
31
+ setError(error);
32
+ }
33
+ else if (data) {
34
+ const videoControl = VideoControlState.getMutable(state.adminToolkitUiEntity);
35
+ videoControl.streamKey = data.streamingKey;
36
+ videoControl.endsAt = data.endsAt;
37
+ }
38
+ } })),
39
+ error && (ReactEcs.createElement(Error, { scaleFactor: scaleFactor, text: error, uiTransform: { margin: { top: 16 * scaleFactor } } }))))));
40
+ }
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2VuZXJhdGVTdHJlYW1LZXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYWRtaW4tdG9vbGtpdC11aS9WaWRlb0NvbnRyb2wvTGl2ZVN0cmVhbS9HZW5lcmF0ZVN0cmVhbUtleS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUV0QyxPQUFPLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUMxRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3JDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDbkMsT0FBTyxFQUFFLGlCQUFpQixFQUFnQixNQUFNLFFBQVEsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sT0FBTyxDQUFBO0FBRTdCLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxFQUNoQyxXQUFXLEVBQ1gsTUFBTSxHQUlQO0lBQ0MsTUFBTSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFVLEtBQUssQ0FBQyxDQUFBO0lBQy9ELE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBUyxFQUFFLENBQUMsQ0FBQTtJQUN2RCxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUE7SUFFbkQsT0FBTyxDQUNMLHVCQUFDLFFBQVEsSUFDUCxXQUFXLEVBQUU7WUFDWCxLQUFLLEVBQUUsTUFBTTtZQUNiLE1BQU0sRUFBRSxHQUFHLEdBQUcsV0FBVztZQUN6QixjQUFjLEVBQUUsUUFBUTtZQUN4QixVQUFVLEVBQUUsUUFBUTtTQUNyQixJQUVBLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FDVCx1QkFBQyxRQUFRLElBQUMsV0FBVyxFQUFFLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRTtRQUNoRCx1QkFBQyxXQUFXLElBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxHQUFJO1FBQ3pELHVCQUFDLEtBQUssSUFDSixLQUFLLEVBQUMsNEJBQTRCLEVBQ2xDLEtBQUssRUFBRSxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUN0QyxRQUFRLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFDMUIsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxXQUFXLEVBQUUsRUFBRSxHQUNsRCxDQUNPLENBQ1osQ0FBQyxDQUFDLENBQUMsQ0FDRix1QkFBQyxRQUFRLElBQUMsV0FBVyxFQUFFLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRTtRQUNoRCx1QkFBQyxRQUFRLElBQUMsV0FBVyxFQUFFLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO1lBQ2hFLHVCQUFDLE1BQU0sSUFDTCxFQUFFLEVBQUMsaUNBQWlDLEVBQ3BDLEtBQUssRUFBQyx1QkFBdUIsRUFDN0IsUUFBUSxFQUFFLEVBQUUsR0FBRyxXQUFXLEVBQzFCLFdBQVcsRUFBRTtvQkFDWCxNQUFNLEVBQUUsRUFBRSxHQUFHLFdBQVc7b0JBQ3hCLE9BQU8sRUFBRSxFQUFFLEdBQUcsV0FBVztvQkFDekIsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxXQUFXLEVBQUU7aUJBQ3JDLEVBQ0QsV0FBVyxFQUFFLEtBQUssSUFBSSxFQUFFO29CQUN0QixVQUFVLENBQUMsSUFBSSxDQUFDLENBQUE7b0JBQ2hCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsTUFBTSxpQkFBaUIsRUFBRSxDQUFBO29CQUMvQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUE7b0JBQ2pCLElBQUksS0FBSyxFQUFFLENBQUM7d0JBQ1YsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO29CQUNqQixDQUFDO3lCQUFNLElBQUksSUFBSSxFQUFFLENBQUM7d0JBQ2hCLE1BQU0sWUFBWSxHQUFHLGlCQUFpQixDQUFDLFVBQVUsQ0FDL0MsS0FBSyxDQUFDLG9CQUFvQixDQUMzQixDQUFBO3dCQUNELFlBQVksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQTt3QkFDMUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFBO29CQUNuQyxDQUFDO2dCQUNILENBQUMsR0FDRCxDQUNPO1FBQ1YsS0FBSyxJQUFJLENBQ1IsdUJBQUMsS0FBSyxJQUNKLFdBQVcsRUFBRSxXQUFXLEVBQ3hCLElBQUksRUFBRSxLQUFLLEVBQ1gsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxXQUFXLEVBQUUsRUFBRSxHQUNsRCxDQUNILENBQ1EsQ0FDWixDQUNRLENBQ1osQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2xvcjQgfSBmcm9tICdAZGNsL3Nkay9tYXRoJ1xuaW1wb3J0IHsgSUVuZ2luZSB9IGZyb20gJ0BkY2wvZWNzJ1xuaW1wb3J0IFJlYWN0RWNzLCB7IFVpRW50aXR5LCBMYWJlbCB9IGZyb20gJ0BkY2wvcmVhY3QtZWNzJ1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vLi4vQnV0dG9uJ1xuaW1wb3J0IHsgRXJyb3IgfSBmcm9tICcuLi8uLi9FcnJvcidcbmltcG9ydCB7IGdlbmVyYXRlU3RyZWFtS2V5LCBnZXRTdHJlYW1LZXkgfSBmcm9tICcuLi9hcGknXG5pbXBvcnQgeyBMb2FkaW5nRG90cyB9IGZyb20gJy4uLy4uL0xvYWRpbmcnXG5pbXBvcnQgeyBnZXRDb21wb25lbnRzIH0gZnJvbSAnLi4vLi4vLi4vZGVmaW5pdGlvbnMnXG5pbXBvcnQgeyBzdGF0ZSB9IGZyb20gJy4uLy4uJ1xuXG5leHBvcnQgZnVuY3Rpb24gR2VuZXJhdGVTdHJlYW1LZXkoe1xuICBzY2FsZUZhY3RvcixcbiAgZW5naW5lLFxufToge1xuICBzY2FsZUZhY3RvcjogbnVtYmVyXG4gIGVuZ2luZTogSUVuZ2luZVxufSkge1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSBSZWFjdEVjcy51c2VTdGF0ZTxib29sZWFuPihmYWxzZSlcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSBSZWFjdEVjcy51c2VTdGF0ZTxzdHJpbmc+KCcnKVxuICBjb25zdCB7IFZpZGVvQ29udHJvbFN0YXRlIH0gPSBnZXRDb21wb25lbnRzKGVuZ2luZSlcblxuICByZXR1cm4gKFxuICAgIDxVaUVudGl0eVxuICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgaGVpZ2h0OiA0NjAgKiBzY2FsZUZhY3RvcixcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgIH19XG4gICAgPlxuICAgICAge2xvYWRpbmcgPyAoXG4gICAgICAgIDxVaUVudGl0eSB1aVRyYW5zZm9ybT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICA8TG9hZGluZ0RvdHMgc2NhbGVGYWN0b3I9e3NjYWxlRmFjdG9yfSBlbmdpbmU9e2VuZ2luZX0gLz5cbiAgICAgICAgICA8TGFiZWxcbiAgICAgICAgICAgIHZhbHVlPVwiR2VuZXJhdGluZyB5b3VyIFN0cmVhbSBLZXlcIlxuICAgICAgICAgICAgY29sb3I9e0NvbG9yNC5mcm9tSGV4U3RyaW5nKCcjQTA5QkE4Jyl9XG4gICAgICAgICAgICBmb250U2l6ZT17MTYgKiBzY2FsZUZhY3Rvcn1cbiAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7IG1hcmdpbjogeyB0b3A6IDE2ICogc2NhbGVGYWN0b3IgfSB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICApIDogKFxuICAgICAgICA8VWlFbnRpdHkgdWlUcmFuc2Zvcm09e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgPFVpRW50aXR5IHVpVHJhbnNmb3JtPXt7IGp1c3RpZnlDb250ZW50OiAnY2VudGVyJywgd2lkdGg6ICcxMDAlJyB9fT5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgaWQ9XCJ2aWRlb19jb250cm9sX2xpdmVfZ2VuZXJhdGVfa2V5XCJcbiAgICAgICAgICAgICAgdmFsdWU9XCI8Yj5HZXQgU3RyZWFtIEtleTwvYj5cIlxuICAgICAgICAgICAgICBmb250U2l6ZT17MTggKiBzY2FsZUZhY3Rvcn1cbiAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDUyICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgICAgcGFkZGluZzogMTYgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgICAgICBtYXJnaW46IHsgYm90dG9tOiAxNiAqIHNjYWxlRmFjdG9yIH1cbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgb25Nb3VzZURvd249e2FzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKHRydWUpXG4gICAgICAgICAgICAgICAgY29uc3QgW2Vycm9yLCBkYXRhXSA9IGF3YWl0IGdlbmVyYXRlU3RyZWFtS2V5KClcbiAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgc2V0RXJyb3IoZXJyb3IpXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB2aWRlb0NvbnRyb2wgPSBWaWRlb0NvbnRyb2xTdGF0ZS5nZXRNdXRhYmxlKFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hZG1pblRvb2xraXRVaUVudGl0eSxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIHZpZGVvQ29udHJvbC5zdHJlYW1LZXkgPSBkYXRhLnN0cmVhbWluZ0tleVxuICAgICAgICAgICAgICAgICAgdmlkZW9Db250cm9sLmVuZHNBdCA9IGRhdGEuZW5kc0F0XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1VpRW50aXR5PlxuICAgICAgICAgIHtlcnJvciAmJiAoXG4gICAgICAgICAgICA8RXJyb3JcbiAgICAgICAgICAgICAgc2NhbGVGYWN0b3I9e3NjYWxlRmFjdG9yfVxuICAgICAgICAgICAgICB0ZXh0PXtlcnJvcn1cbiAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3sgbWFyZ2luOiB7IHRvcDogMTYgKiBzY2FsZUZhY3RvciB9IH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICApfVxuICAgIDwvVWlFbnRpdHk+XG4gIClcbn1cbiJdfQ==
@@ -0,0 +1,11 @@
1
+ import { DeepReadonlyObject, Entity, IEngine, PBVideoPlayer } from '@dcl/ecs';
2
+ import ReactEcs from '@dcl/react-ecs';
3
+ export declare function ShowStreamKey({ scaleFactor, engine, video, entity, onReset, streamKey, endsAt, }: {
4
+ streamKey: string;
5
+ endsAt: number;
6
+ scaleFactor: number;
7
+ engine: IEngine;
8
+ entity: Entity;
9
+ video: DeepReadonlyObject<PBVideoPlayer> | undefined;
10
+ onReset(): void;
11
+ }): ReactEcs.JSX.Element;
@@ -0,0 +1,112 @@
1
+ import { Color4 } from '@dcl/sdk/math';
2
+ import ReactEcs, { UiEntity, Label } from '@dcl/react-ecs';
3
+ import { COLORS } from '..';
4
+ import { createVideoPlayerControls, } from '../utils';
5
+ import { VideoControlVolume } from '../VolumeControl';
6
+ import { Button } from '../../Button';
7
+ import { LIVEKIT_STREAM_SRC } from '../../../definitions';
8
+ import { ERROR_ICON } from '../../Error';
9
+ import { CONTENT_URL } from '../../constants';
10
+ const STREAM_ICONS = {
11
+ eyeShow: `${CONTENT_URL}/admin_toolkit/assets/icons/eye.png`,
12
+ eyeHide: `${CONTENT_URL}/admin_toolkit/assets/icons/eye-off.png`,
13
+ };
14
+ export function ShowStreamKey({ scaleFactor, engine, video, entity, onReset, streamKey, endsAt, }) {
15
+ const controls = createVideoPlayerControls(entity, engine);
16
+ const [showStreamkey, setShowStreamkey] = ReactEcs.useState(false);
17
+ return (ReactEcs.createElement(UiEntity, { uiTransform: { flexDirection: 'column' } },
18
+ ReactEcs.createElement(Label, { value: "<b>RMTP Server<b>", color: Color4.White(), fontSize: 16 * scaleFactor, uiTransform: {
19
+ margin: { top: 16 * scaleFactor, bottom: 8 * scaleFactor },
20
+ } }),
21
+ ReactEcs.createElement(UiEntity, { uiTransform: {
22
+ width: '100%',
23
+ margin: { bottom: 8 * scaleFactor, top: 8 * scaleFactor },
24
+ height: 42 * scaleFactor,
25
+ borderRadius: 12 * scaleFactor,
26
+ }, uiBackground: { color: Color4.White() } },
27
+ ReactEcs.createElement(Label, { uiTransform: { margin: { left: 16 * scaleFactor } }, fontSize: 16 * scaleFactor, value: "<b>rtmps://dcl.rtmp.livekit.cloud/x</b>", color: Color4.fromHexString('#A09BA8') })),
28
+ ReactEcs.createElement(Label, { value: "<b>Stream Key<b>", color: Color4.White(), fontSize: 16 * scaleFactor, uiTransform: {
29
+ margin: { top: 16 * scaleFactor, bottom: 8 * scaleFactor },
30
+ } }),
31
+ ReactEcs.createElement(UiEntity, { uiTransform: {
32
+ width: '100%',
33
+ margin: { bottom: 8 * scaleFactor, top: 8 * scaleFactor },
34
+ height: 42 * scaleFactor,
35
+ borderRadius: 12 * scaleFactor,
36
+ flexDirection: 'row',
37
+ justifyContent: 'space-between',
38
+ alignItems: 'center',
39
+ }, uiBackground: { color: Color4.White() } },
40
+ ReactEcs.createElement(Label, { uiTransform: { margin: { left: 16 * scaleFactor } }, fontSize: 16 * scaleFactor, value: `<b>${showStreamkey ? streamKey : '*********************************'}</b>`, color: Color4.fromHexString('#A09BA8') }),
41
+ ReactEcs.createElement(UiEntity, { uiTransform: {
42
+ width: 25 * scaleFactor,
43
+ height: 25 * scaleFactor,
44
+ margin: { right: 10 * scaleFactor },
45
+ }, uiBackground: {
46
+ textureMode: 'stretch',
47
+ texture: {
48
+ src: showStreamkey ? STREAM_ICONS.eyeHide : STREAM_ICONS.eyeShow,
49
+ },
50
+ color: Color4.Black(),
51
+ }, onMouseDown: () => setShowStreamkey(!showStreamkey) })),
52
+ ReactEcs.createElement(UiEntity, { uiTransform: {
53
+ width: '100%',
54
+ height: 40 * scaleFactor,
55
+ flexDirection: 'row',
56
+ justifyContent: 'space-between',
57
+ margin: { top: 10 * scaleFactor, bottom: 16 * scaleFactor },
58
+ } },
59
+ endsAt > Date.now() ? (ReactEcs.createElement(UiEntity, { uiTransform: { flexDirection: 'column' } },
60
+ ReactEcs.createElement(Label, { value: "Stream expires in:", color: Color4.fromHexString('#FFFFFFB2'), fontSize: 14 * scaleFactor }),
61
+ ReactEcs.createElement(Label, { value: formatTimeRemaining(endsAt), color: Color4.fromHexString('#FFFFFFB2'), fontSize: 14 * scaleFactor }))) : (ReactEcs.createElement(UiEntity, { uiTransform: {
62
+ flexDirection: 'row',
63
+ margin: { right: 10 * scaleFactor },
64
+ borderWidth: 2,
65
+ borderColor: Color4.Green(),
66
+ } },
67
+ ReactEcs.createElement(UiEntity, { uiTransform: {
68
+ width: 15 * scaleFactor,
69
+ height: 15 * scaleFactor,
70
+ margin: { right: 4 * scaleFactor, top: 4 * scaleFactor },
71
+ }, uiBackground: {
72
+ textureMode: 'stretch',
73
+ texture: {
74
+ src: ERROR_ICON,
75
+ },
76
+ } }),
77
+ ReactEcs.createElement(Label, { fontSize: 14 * scaleFactor, textAlign: "middle-left", color: Color4.fromHexString('#FF0000'), value: "Stream timed out. Please restart stream in broadcasting software." }))),
78
+ video?.src === LIVEKIT_STREAM_SRC ? (ReactEcs.createElement(Button, { id: "video_control_share_screen_clear", value: "<b>Deactivate</b>", variant: "text", fontSize: 16 * scaleFactor, color: Color4.White(), uiTransform: {
79
+ minWidth: 120 * scaleFactor,
80
+ margin: { right: 8 * scaleFactor },
81
+ padding: { left: 8 * scaleFactor, right: 8 * scaleFactor },
82
+ }, onMouseDown: () => {
83
+ controls.setSource('');
84
+ } })) : (ReactEcs.createElement(Button, { id: "video_control_share_screen_share", value: "<b>Activate</b>", labelTransform: {
85
+ margin: { left: 20 * scaleFactor, right: 20 * scaleFactor },
86
+ }, uiTransform: {
87
+ minWidth: 120 * scaleFactor,
88
+ }, fontSize: 16 * scaleFactor, uiBackground: { color: COLORS.SUCCESS }, color: Color4.Black(), onMouseDown: () => {
89
+ controls.setSource(LIVEKIT_STREAM_SRC);
90
+ } }))),
91
+ ReactEcs.createElement(VideoControlVolume, { engine: engine, label: "<b>Stream Volume</b>", entity: entity, video: video }),
92
+ ReactEcs.createElement(UiEntity, null,
93
+ ReactEcs.createElement(Button, { id: "video_control_reset_stream_key", value: "<b>Reset Stream Key</b>", variant: "text", fontSize: 16 * scaleFactor, color: Color4.fromHexString('#FB3B3B'), uiTransform: {
94
+ margin: { right: 8 * scaleFactor, top: 20 * scaleFactor },
95
+ padding: { left: 8 * scaleFactor, right: 8 * scaleFactor },
96
+ }, onMouseDown: () => onReset() }))));
97
+ }
98
+ function formatTimeRemaining(endsAt) {
99
+ const now = Date.now();
100
+ const timeRemaining = Math.max(0, endsAt - now);
101
+ const days = Math.floor(timeRemaining / (1000 * 60 * 60 * 24));
102
+ if (days >= 1) {
103
+ return `${days} ${days === 1 ? 'day' : 'days'}`;
104
+ }
105
+ else {
106
+ const hours = Math.floor(timeRemaining / (1000 * 60 * 60));
107
+ const minutes = Math.floor((timeRemaining % (1000 * 60 * 60)) / (1000 * 60));
108
+ const seconds = Math.floor((timeRemaining % (1000 * 60)) / 1000);
109
+ return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;
110
+ }
111
+ }
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2hvd1N0cmVhbUtleS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hZG1pbi10b29sa2l0LXVpL1ZpZGVvQ29udHJvbC9MaXZlU3RyZWFtL1Nob3dTdHJlYW1LZXkudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFdEMsT0FBTyxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDMUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQUksQ0FBQTtBQUMzQixPQUFPLEVBQ0wseUJBQXlCLEdBQzFCLE1BQU0sVUFBVSxDQUFBO0FBQ2pCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDckMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFFN0MsTUFBTSxZQUFZLEdBQUc7SUFDbkIsT0FBTyxFQUFFLEdBQUcsV0FBVyxxQ0FBcUM7SUFDNUQsT0FBTyxFQUFFLEdBQUcsV0FBVyx5Q0FBeUM7Q0FDakUsQ0FBQTtBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsRUFDNUIsV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLE9BQU8sRUFDUCxTQUFTLEVBQ1QsTUFBTSxHQVNQO0lBQ0MsTUFBTSxRQUFRLEdBQUcseUJBQXlCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQzFELE1BQU0sQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxD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QUFDLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQTtJQUM3SCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbG9yNCB9IGZyb20gJ0BkY2wvc2RrL21hdGgnXG5pbXBvcnQgeyBEZWVwUmVhZG9ubHlPYmplY3QsIEVudGl0eSwgSUVuZ2luZSwgUEJWaWRlb1BsYXllciB9IGZyb20gJ0BkY2wvZWNzJ1xuaW1wb3J0IFJlYWN0RWNzLCB7IFVpRW50aXR5LCBMYWJlbCB9IGZyb20gJ0BkY2wvcmVhY3QtZWNzJ1xuaW1wb3J0IHsgQ09MT1JTIH0gZnJvbSAnLi4nXG5pbXBvcnQge1xuICBjcmVhdGVWaWRlb1BsYXllckNvbnRyb2xzLFxufSBmcm9tICcuLi91dGlscydcbmltcG9ydCB7IFZpZGVvQ29udHJvbFZvbHVtZSB9IGZyb20gJy4uL1ZvbHVtZUNvbnRyb2wnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi8uLi9CdXR0b24nXG5pbXBvcnQgeyBMSVZFS0lUX1NUUkVBTV9TUkMgfSBmcm9tICcuLi8uLi8uLi9kZWZpbml0aW9ucydcbmltcG9ydCB7IEVSUk9SX0lDT04gfSBmcm9tICcuLi8uLi9FcnJvcidcbmltcG9ydCB7IENPTlRFTlRfVVJMIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJ1xuXG5jb25zdCBTVFJFQU1fSUNPTlMgPSB7XG4gIGV5ZVNob3c6IGAke0NPTlRFTlRfVVJMfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9pY29ucy9leWUucG5nYCxcbiAgZXllSGlkZTogYCR7Q09OVEVOVF9VUkx9L2FkbWluX3Rvb2xraXQvYXNzZXRzL2ljb25zL2V5ZS1vZmYucG5nYCxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNob3dTdHJlYW1LZXkoe1xuICBzY2FsZUZhY3RvcixcbiAgZW5naW5lLFxuICB2aWRlbyxcbiAgZW50aXR5LFxuICBvblJlc2V0LFxuICBzdHJlYW1LZXksXG4gIGVuZHNBdCxcbn06IHtcbiAgc3RyZWFtS2V5OiBzdHJpbmdcbiAgZW5kc0F0OiBudW1iZXIsXG4gIHNjYWxlRmFjdG9yOiBudW1iZXJcbiAgZW5naW5lOiBJRW5naW5lXG4gIGVudGl0eTogRW50aXR5XG4gIHZpZGVvOiBEZWVwUmVhZG9ubHlPYmplY3Q8UEJWaWRlb1BsYXllcj4gfCB1bmRlZmluZWRcbiAgb25SZXNldCgpOiB2b2lkXG59KSB7XG4gIGNvbnN0IGNvbnRyb2xzID0gY3JlYXRlVmlkZW9QbGF5ZXJDb250cm9scyhlbnRpdHksIGVuZ2luZSlcbiAgY29uc3QgW3Nob3dTdHJlYW1rZXksIHNldFNob3dTdHJlYW1rZXldID0gUmVhY3RFY3MudXNlU3RhdGUoZmFsc2UpXG5cbiAgcmV0dXJuIChcbiAgICA8VWlFbnRpdHkgdWlUcmFuc2Zvcm09e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICA8TGFiZWxcbiAgICAgICAgdmFsdWU9XCI8Yj5STVRQIFNlcnZlcjxiPlwiXG4gICAgICAgIGNvbG9yPXtDb2xvcjQuV2hpdGUoKX1cbiAgICAgICAgZm9udFNpemU9ezE2ICogc2NhbGVGYWN0b3J9XG4gICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgbWFyZ2luOiB7IHRvcDogMTYgKiBzY2FsZUZhY3RvciwgYm90dG9tOiA4ICogc2NhbGVGYWN0b3IgfSxcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgICA8VWlFbnRpdHlcbiAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgIG1hcmdpbjogeyBib3R0b206IDggKiBzY2FsZUZhY3RvciwgdG9wOiA4ICogc2NhbGVGYWN0b3IgfSxcbiAgICAgICAgICBoZWlnaHQ6IDQyICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgYm9yZGVyUmFkaXVzOiAxMiAqIHNjYWxlRmFjdG9yLFxuICAgICAgICB9fVxuICAgICAgICB1aUJhY2tncm91bmQ9e3sgY29sb3I6IENvbG9yNC5XaGl0ZSgpIH19XG4gICAgICA+XG4gICAgICAgIDxMYWJlbFxuICAgICAgICAgIHVpVHJhbnNmb3JtPXt7IG1hcmdpbjogeyBsZWZ0OiAxNiAqIHNjYWxlRmFjdG9yIH0gfX1cbiAgICAgICAgICBmb250U2l6ZT17MTYgKiBzY2FsZUZhY3Rvcn1cbiAgICAgICAgICB2YWx1ZT1cIjxiPnJ0bXBzOi8vZGNsLnJ0bXAubGl2ZWtpdC5jbG91ZC94PC9iPlwiXG4gICAgICAgICAgY29sb3I9e0NvbG9yNC5mcm9tSGV4U3RyaW5nKCcjQTA5QkE4Jyl9XG4gICAgICAgIC8+XG4gICAgICA8L1VpRW50aXR5PlxuICAgICAgPExhYmVsXG4gICAgICAgIHZhbHVlPVwiPGI+U3RyZWFtIEtleTxiPlwiXG4gICAgICAgIGNvbG9yPXtDb2xvcjQuV2hpdGUoKX1cbiAgICAgICAgZm9udFNpemU9ezE2ICogc2NhbGVGYWN0b3J9XG4gICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgbWFyZ2luOiB7IHRvcDogMTYgKiBzY2FsZUZhY3RvciwgYm90dG9tOiA4ICogc2NhbGVGYWN0b3IgfSxcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgICA8VWlFbnRpdHlcbiAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgIG1hcmdpbjogeyBib3R0b206IDggKiBzY2FsZUZhY3RvciwgdG9wOiA4ICogc2NhbGVGYWN0b3IgfSxcbiAgICAgICAgICBoZWlnaHQ6IDQyICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgYm9yZGVyUmFkaXVzOiAxMiAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsXG4gICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgIH19XG4gICAgICAgIHVpQmFja2dyb3VuZD17eyBjb2xvcjogQ29sb3I0LldoaXRlKCkgfX1cbiAgICAgID5cbiAgICAgICAgPExhYmVsXG4gICAgICAgICAgdWlUcmFuc2Zvcm09e3sgbWFyZ2luOiB7IGxlZnQ6IDE2ICogc2NhbGVGYWN0b3IgfSB9fVxuICAgICAgICAgIGZvbnRTaXplPXsxNiAqIHNjYWxlRmFjdG9yfVxuICAgICAgICAgIHZhbHVlPXtgPGI+JHtzaG93U3RyZWFta2V5ID8gc3RyZWFtS2V5IDogJyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKid9PC9iPmB9XG4gICAgICAgICAgY29sb3I9e0NvbG9yNC5mcm9tSGV4U3RyaW5nKCcjQTA5QkE4Jyl9XG4gICAgICAgIC8+XG4gICAgICAgIDxVaUVudGl0eVxuICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICB3aWR0aDogMjUgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgIGhlaWdodDogMjUgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgIG1hcmdpbjogeyByaWdodDogMTAgKiBzY2FsZUZhY3RvciB9LFxuICAgICAgICAgIH19XG4gICAgICAgICAgdWlCYWNrZ3JvdW5kPXt7XG4gICAgICAgICAgICB0ZXh0dXJlTW9kZTogJ3N0cmV0Y2gnLFxuICAgICAgICAgICAgdGV4dHVyZToge1xuICAgICAgICAgICAgICBzcmM6IHNob3dTdHJlYW1rZXkgPyBTVFJFQU1fSUNPTlMuZXllSGlkZSA6IFNUUkVBTV9JQ09OUy5leWVTaG93LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbG9yOiBDb2xvcjQuQmxhY2soKSxcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uTW91c2VEb3duPXsoKSA9PiBzZXRTaG93U3RyZWFta2V5KCFzaG93U3RyZWFta2V5KX1cbiAgICAgICAgLz5cbiAgICAgIDwvVWlFbnRpdHk+XG5cbiAgICAgIDxVaUVudGl0eVxuICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgaGVpZ2h0OiA0MCAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsXG4gICAgICAgICAgbWFyZ2luOiB7IHRvcDogMTAgKiBzY2FsZUZhY3RvciwgYm90dG9tOiAxNiAqIHNjYWxlRmFjdG9yIH0sXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHtlbmRzQXQgPiBEYXRlLm5vdygpID8gKFxuICAgICAgICAgIDxVaUVudGl0eSB1aVRyYW5zZm9ybT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICAgIDxMYWJlbFxuICAgICAgICAgICAgICB2YWx1ZT1cIlN0cmVhbSBleHBpcmVzIGluOlwiXG4gICAgICAgICAgICAgIGNvbG9yPXtDb2xvcjQuZnJvbUhleFN0cmluZygnI0ZGRkZGRkIyJyl9XG4gICAgICAgICAgICAgIGZvbnRTaXplPXsxNCAqIHNjYWxlRmFjdG9yfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxMYWJlbFxuICAgICAgICAgICAgICB2YWx1ZT17Zm9ybWF0VGltZVJlbWFpbmluZyhlbmRzQXQpfVxuICAgICAgICAgICAgICBjb2xvcj17Q29sb3I0LmZyb21IZXhTdHJpbmcoJyNGRkZGRkZCMicpfVxuICAgICAgICAgICAgICBmb250U2l6ZT17MTQgKiBzY2FsZUZhY3Rvcn1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8VWlFbnRpdHlcbiAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgICAgICAgICAgICBtYXJnaW46IHsgcmlnaHQ6IDEwICogc2NhbGVGYWN0b3IgfSxcbiAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6IDIsXG4gICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBDb2xvcjQuR3JlZW4oKSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFVpRW50aXR5XG4gICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDE1ICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxNSAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgICAgIG1hcmdpbjogeyByaWdodDogNCAqIHNjYWxlRmFjdG9yLCB0b3A6IDQgKiBzY2FsZUZhY3RvciB9LFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB1aUJhY2tncm91bmQ9e3tcbiAgICAgICAgICAgICAgICB0ZXh0dXJlTW9kZTogJ3N0cmV0Y2gnLFxuICAgICAgICAgICAgICAgIHRleHR1cmU6IHtcbiAgICAgICAgICAgICAgICAgIHNyYzogRVJST1JfSUNPTixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxMYWJlbFxuICAgICAgICAgICAgICBmb250U2l6ZT17MTQgKiBzY2FsZUZhY3Rvcn1cbiAgICAgICAgICAgICAgdGV4dEFsaWduPVwibWlkZGxlLWxlZnRcIlxuICAgICAgICAgICAgICBjb2xvcj17Q29sb3I0LmZyb21IZXhTdHJpbmcoJyNGRjAwMDAnKX1cbiAgICAgICAgICAgICAgdmFsdWU9XCJTdHJlYW0gdGltZWQgb3V0LiBQbGVhc2UgcmVzdGFydCBzdHJlYW0gaW4gYnJvYWRjYXN0aW5nIHNvZnR3YXJlLlwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICAgICl9XG4gICAgICAgIHt2aWRlbz8uc3JjID09PSBMSVZFS0lUX1NUUkVBTV9TUkMgPyAoXG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgaWQ9XCJ2aWRlb19jb250cm9sX3NoYXJlX3NjcmVlbl9jbGVhclwiXG4gICAgICAgICAgICB2YWx1ZT1cIjxiPkRlYWN0aXZhdGU8L2I+XCJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJ0ZXh0XCJcbiAgICAgICAgICAgIGZvbnRTaXplPXsxNiAqIHNjYWxlRmFjdG9yfVxuICAgICAgICAgICAgY29sb3I9e0NvbG9yNC5XaGl0ZSgpfVxuICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgbWluV2lkdGg6IDEyMCAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgICBtYXJnaW46IHsgcmlnaHQ6IDggKiBzY2FsZUZhY3RvciB9LFxuICAgICAgICAgICAgICBwYWRkaW5nOiB7IGxlZnQ6IDggKiBzY2FsZUZhY3RvciwgcmlnaHQ6IDggKiBzY2FsZUZhY3RvciB9LFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uTW91c2VEb3duPXsoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnRyb2xzLnNldFNvdXJjZSgnJylcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBpZD1cInZpZGVvX2NvbnRyb2xfc2hhcmVfc2NyZWVuX3NoYXJlXCJcbiAgICAgICAgICAgIHZhbHVlPVwiPGI+QWN0aXZhdGU8L2I+XCJcbiAgICAgICAgICAgIGxhYmVsVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgIG1hcmdpbjogeyBsZWZ0OiAyMCAqIHNjYWxlRmFjdG9yLCByaWdodDogMjAgKiBzY2FsZUZhY3RvciB9LFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgIG1pbldpZHRoOiAxMjAgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBmb250U2l6ZT17MTYgKiBzY2FsZUZhY3Rvcn1cbiAgICAgICAgICAgIHVpQmFja2dyb3VuZD17eyBjb2xvcjogQ09MT1JTLlNVQ0NFU1MgfX1cbiAgICAgICAgICAgIGNvbG9yPXtDb2xvcjQuQmxhY2soKX1cbiAgICAgICAgICAgIG9uTW91c2VEb3duPXsoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnRyb2xzLnNldFNvdXJjZShMSVZFS0lUX1NUUkVBTV9TUkMpXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L1VpRW50aXR5PlxuICAgICAgPFZpZGVvQ29udHJvbFZvbHVtZVxuICAgICAgICBlbmdpbmU9e2VuZ2luZX1cbiAgICAgICAgbGFiZWw9XCI8Yj5TdHJlYW0gVm9sdW1lPC9iPlwiXG4gICAgICAgIGVudGl0eT17ZW50aXR5fVxuICAgICAgICB2aWRlbz17dmlkZW99XG4gICAgICAvPlxuICAgICAgPFVpRW50aXR5PlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgaWQ9XCJ2aWRlb19jb250cm9sX3Jlc2V0X3N0cmVhbV9rZXlcIlxuICAgICAgICAgIHZhbHVlPVwiPGI+UmVzZXQgU3RyZWFtIEtleTwvYj5cIlxuICAgICAgICAgIHZhcmlhbnQ9XCJ0ZXh0XCJcbiAgICAgICAgICBmb250U2l6ZT17MTYgKiBzY2FsZUZhY3Rvcn1cbiAgICAgICAgICBjb2xvcj17Q29sb3I0LmZyb21IZXhTdHJpbmcoJyNGQjNCM0InKX1cbiAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgbWFyZ2luOiB7IHJpZ2h0OiA4ICogc2NhbGVGYWN0b3IsIHRvcDogMjAgKiBzY2FsZUZhY3RvciB9LFxuICAgICAgICAgICAgcGFkZGluZzogeyBsZWZ0OiA4ICogc2NhbGVGYWN0b3IsIHJpZ2h0OiA4ICogc2NhbGVGYWN0b3IgfSxcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uTW91c2VEb3duPXsoKSA9PiBvblJlc2V0KCl9XG4gICAgICAgIC8+XG4gICAgICA8L1VpRW50aXR5PlxuICAgIDwvVWlFbnRpdHk+XG4gIClcbn1cblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGZvcm1hdCB0aW1lIHJlbWFpbmluZyAtIHNob3dzIGRheXMgaWYgPiAxIGRheSwgb3RoZXJ3aXNlIHNob3dzIGhoOm1tOnNzXG5mdW5jdGlvbiBmb3JtYXRUaW1lUmVtYWluaW5nKGVuZHNBdDogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKVxuICBjb25zdCB0aW1lUmVtYWluaW5nID0gTWF0aC5tYXgoMCwgZW5kc0F0IC0gbm93KVxuXG4gIGNvbnN0IGRheXMgPSBNYXRoLmZsb29yKHRpbWVSZW1haW5pbmcgLyAoMTAwMCAqIDYwICogNjAgKiAyNCkpXG5cbiAgaWYgKGRheXMgPj0gMSkge1xuICAgIHJldHVybiBgJHtkYXlzfSAke2RheXMgPT09IDEgPyAnZGF5JyA6ICdkYXlzJ31gXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKHRpbWVSZW1haW5pbmcgLyAoMTAwMCAqIDYwICogNjApKVxuICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKCh0aW1lUmVtYWluaW5nICUgKDEwMDAgKiA2MCAqIDYwKSkgLyAoMTAwMCAqIDYwKSlcbiAgICBjb25zdCBzZWNvbmRzID0gTWF0aC5mbG9vcigodGltZVJlbWFpbmluZyAlICgxMDAwICogNjApKSAvIDEwMDApXG4gICAgcmV0dXJuIGAke2hvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06JHttaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06JHtzZWNvbmRzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1gXG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,10 @@
1
+ import { DeepReadonlyObject, Entity, IEngine, PBVideoPlayer } from '@dcl/ecs';
2
+ import ReactEcs from '@dcl/react-ecs';
3
+ export declare const LIVEKIT_STREAM_SRC = "livekit-video://current-stream";
4
+ export declare const STREAMING_SUPPORT_URL = "https://docs.decentraland.org//creator/editor/live-streaming";
5
+ export declare function LiveStream({ engine, scaleFactor, entity, video }: {
6
+ engine: IEngine;
7
+ scaleFactor: number;
8
+ entity: Entity;
9
+ video: DeepReadonlyObject<PBVideoPlayer> | undefined;
10
+ }): ReactEcs.JSX.Element;
@@ -0,0 +1,62 @@
1
+ import { Color4 } from '@dcl/sdk/math';
2
+ import ReactEcs, { UiEntity, Label } from '@dcl/react-ecs';
3
+ import { ICONS } from '..';
4
+ import { Header } from '../../Header';
5
+ import { ShowStreamKey } from './ShowStreamKey';
6
+ import { GenerateStreamKey } from './GenerateStreamKey';
7
+ import { DeleteStreamKeyConfirmation } from './DeleteStreamKey';
8
+ import { state } from '../..';
9
+ import { getComponents } from '../../../definitions';
10
+ import { getStreamKey } from '../api';
11
+ import { LoadingDots } from '../../Loading';
12
+ import { openExternalUrl } from '~system/RestrictedActions';
13
+ import { HELP_ICON } from '../VideoUrl';
14
+ export const LIVEKIT_STREAM_SRC = 'livekit-video://current-stream';
15
+ export const STREAMING_SUPPORT_URL = 'https://docs.decentraland.org//creator/editor/live-streaming';
16
+ export function LiveStream({ engine, scaleFactor, entity, video }) {
17
+ const [showResetStreamKey, setResetStreamKey] = ReactEcs.useState(false);
18
+ const [loading, setLoading] = ReactEcs.useState(false);
19
+ const { VideoControlState } = getComponents(engine);
20
+ const videoControlState = VideoControlState.getOrNull(state.adminToolkitUiEntity);
21
+ const streamKey = videoControlState?.streamKey;
22
+ const streamKeyEndsAt = videoControlState?.endsAt;
23
+ ReactEcs.useEffect(() => {
24
+ async function streamKeyFn() {
25
+ if (!streamKey)
26
+ setLoading(true);
27
+ const [error, data] = await getStreamKey();
28
+ const videoControlState = VideoControlState.getMutable(state.adminToolkitUiEntity);
29
+ if (error) {
30
+ videoControlState.endsAt = undefined;
31
+ videoControlState.streamKey = undefined;
32
+ }
33
+ else {
34
+ videoControlState.endsAt = data?.endsAt;
35
+ videoControlState.streamKey = data?.streamingKey ?? '';
36
+ }
37
+ setLoading(false);
38
+ }
39
+ streamKeyFn();
40
+ }, []);
41
+ if (showResetStreamKey) {
42
+ return ReactEcs.createElement(DeleteStreamKeyConfirmation, { scaleFactor: scaleFactor, engine: engine, onCancel: () => setResetStreamKey(false) });
43
+ }
44
+ return (ReactEcs.createElement(UiEntity, { uiTransform: { flexDirection: 'column', width: '100%' } },
45
+ ReactEcs.createElement(UiEntity, { uiTransform: { width: '100%', justifyContent: 'space-between' } },
46
+ ReactEcs.createElement(Header, { iconSrc: ICONS.LIVE_SOURCE, title: "Live Stream", scaleFactor: scaleFactor }),
47
+ ReactEcs.createElement(UiEntity, { onMouseDown: () => openExternalUrl({ url: STREAMING_SUPPORT_URL }), uiTransform: {
48
+ width: 25 * scaleFactor,
49
+ height: 25 * scaleFactor,
50
+ alignItems: 'center',
51
+ }, uiBackground: {
52
+ textureMode: 'stretch',
53
+ color: Color4.White(),
54
+ texture: {
55
+ src: HELP_ICON,
56
+ },
57
+ } })),
58
+ ReactEcs.createElement(Label, { textAlign: "middle-left", value: "Use the RTMP server and stream key below in your broadcasting software to start streaming to this screen.", color: Color4.fromHexString('#A09BA8'), fontSize: 16 * scaleFactor }),
59
+ loading ? (ReactEcs.createElement(LoadingDots, { uiTransform: { minHeight: 400 * scaleFactor }, scaleFactor: scaleFactor, engine: engine })) : streamKey ? (ReactEcs.createElement(ShowStreamKey, { streamKey: streamKey ?? '', endsAt: streamKeyEndsAt ?? 0, scaleFactor: scaleFactor, engine: engine, entity: entity, video: video, onReset: () => setResetStreamKey(true) })) : (ReactEcs.createElement(GenerateStreamKey, { scaleFactor: scaleFactor, engine: engine })),
60
+ !streamKey && ReactEcs.createElement(Label, { fontSize: 14 * scaleFactor, color: Color4.fromHexString('#FF2D55'), value: "Do not share your stream key with anyone, and be careful not to display it on screen while streaming." })));
61
+ }
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYWRtaW4tdG9vbGtpdC11aS9WaWRlb0NvbnRyb2wvTGl2ZVN0cmVhbS9pbmRleC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUV0QyxPQUFPLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUMxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBQzFCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3ZELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQy9ELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxPQUFPLENBQUE7QUFDN0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDckMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFDM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUV2QyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxnQ0FBZ0MsQ0FBQTtBQUNsRSxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyw4REFBOEQsQ0FBQTtBQUVuRyxNQUFNLFVBQVUsVUFBVSxDQUFDLEVBQ3pCLE1BQU0sRUFDTixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFNTjtJQUNDLE1BQU0sQ0FBQyxrQkFB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QUUsRUFBRSxHQUFHLFdBQVcsR0FDMUI7UUFDRCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQ1QsdUJBQUMsV0FBVyxJQUNWLFdBQVcsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEdBQUcsV0FBVyxFQUFFLEVBQzdDLFdBQVcsRUFBRSxXQUFXLEVBQ3hCLE1BQU0sRUFBRSxNQUFNLEdBQ2QsQ0FDSCxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQ2QsdUJBQUMsYUFBYSxJQUNaLFNBQVMsRUFBRSxTQUFTLElBQUksRUFBRSxFQUMxQixNQUFNLEVBQUUsZUFBZSxJQUFJLENBQUMsRUFDNUIsV0FBVyxFQUFFLFdBQVcsRUFDeEIsTUFBTSxFQUFFLE1BQU0sRUFDZCxNQUFNLEVBQUUsTUFBTSxFQUNkLEtBQUssRUFBRSxLQUFLLEVBQ1osT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUN0QyxDQUNILENBQUMsQ0FBQyxDQUFDLENBQ0YsdUJBQUMsaUJBQWlCLElBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxHQUFJLENBQ2hFO1FBQ0EsQ0FBQyxTQUFTLElBQUksdUJBQUMsS0FBSyxJQUNuQixRQUFRLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFDMUIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQ3RDLEtBQUssRUFBQyx1R0FBdUcsR0FDN0csQ0FDTyxDQUNaLENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29sb3I0IH0gZnJvbSAnQGRjbC9zZGsvbWF0aCdcbmltcG9ydCB7IERlZXBSZWFkb25seU9iamVjdCwgRW50aXR5LCBJRW5naW5lLCBQQlZpZGVvUGxheWVyIH0gZnJvbSAnQGRjbC9lY3MnXG5pbXBvcnQgUmVhY3RFY3MsIHsgVWlFbnRpdHksIExhYmVsIH0gZnJvbSAnQGRjbC9yZWFjdC1lY3MnXG5pbXBvcnQgeyBJQ09OUyB9IGZyb20gJy4uJ1xuaW1wb3J0IHsgSGVhZGVyIH0gZnJvbSAnLi4vLi4vSGVhZGVyJ1xuaW1wb3J0IHsgU2hvd1N0cmVhbUtleSB9IGZyb20gJy4vU2hvd1N0cmVhbUtleSdcbmltcG9ydCB7IEdlbmVyYXRlU3RyZWFtS2V5IH0gZnJvbSAnLi9HZW5lcmF0ZVN0cmVhbUtleSdcbmltcG9ydCB7IERlbGV0ZVN0cmVhbUtleUNvbmZpcm1hdGlvbiB9IGZyb20gJy4vRGVsZXRlU3RyZWFtS2V5J1xuaW1wb3J0IHsgc3RhdGUgfSBmcm9tICcuLi8uLidcbmltcG9ydCB7IGdldENvbXBvbmVudHMgfSBmcm9tICcuLi8uLi8uLi9kZWZpbml0aW9ucydcbmltcG9ydCB7IGdldFN0cmVhbUtleSB9IGZyb20gJy4uL2FwaSdcbmltcG9ydCB7IExvYWRpbmdEb3RzIH0gZnJvbSAnLi4vLi4vTG9hZGluZydcbmltcG9ydCB7IG9wZW5FeHRlcm5hbFVybCB9IGZyb20gJ35zeXN0ZW0vUmVzdHJpY3RlZEFjdGlvbnMnXG5pbXBvcnQgeyBIRUxQX0lDT04gfSBmcm9tICcuLi9WaWRlb1VybCdcblxuZXhwb3J0IGNvbnN0IExJVkVLSVRfU1RSRUFNX1NSQyA9ICdsaXZla2l0LXZpZGVvOi8vY3VycmVudC1zdHJlYW0nXG5leHBvcnQgY29uc3QgU1RSRUFNSU5HX1NVUFBPUlRfVVJMID0gJ2h0dHBzOi8vZG9jcy5kZWNlbnRyYWxhbmQub3JnLy9jcmVhdG9yL2VkaXRvci9saXZlLXN0cmVhbWluZydcblxuZXhwb3J0IGZ1bmN0aW9uIExpdmVTdHJlYW0oe1xuICBlbmdpbmUsXG4gIHNjYWxlRmFjdG9yLFxuICBlbnRpdHksXG4gIHZpZGVvXG59OiB7XG4gIGVuZ2luZTogSUVuZ2luZVxuICBzY2FsZUZhY3RvcjogbnVtYmVyXG4gIGVudGl0eTogRW50aXR5XG4gIHZpZGVvOiBEZWVwUmVhZG9ubHlPYmplY3Q8UEJWaWRlb1BsYXllcj4gfCB1bmRlZmluZWRcbn0pIHtcbiAgY29uc3QgW3Nob3dSZXNldFN0cmVhbUtleSwgc2V0UmVzZXRTdHJlYW1LZXldID0gUmVhY3RFY3MudXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpXG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IFJlYWN0RWNzLnVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKVxuICBjb25zdCB7IFZpZGVvQ29udHJvbFN0YXRlIH0gPSBnZXRDb21wb25lbnRzKGVuZ2luZSlcbiAgY29uc3QgdmlkZW9Db250cm9sU3RhdGUgPSBWaWRlb0NvbnRyb2xTdGF0ZS5nZXRPck51bGwoc3RhdGUuYWRtaW5Ub29sa2l0VWlFbnRpdHkpXG4gIGNvbnN0IHN0cmVhbUtleSA9IHZpZGVvQ29udHJvbFN0YXRlPy5zdHJlYW1LZXlcbiAgY29uc3Qgc3RyZWFtS2V5RW5kc0F0ID0gdmlkZW9Db250cm9sU3RhdGU/LmVuZHNBdFxuXG4gIFJlYWN0RWNzLnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYXN5bmMgZnVuY3Rpb24gc3RyZWFtS2V5Rm4oKSB7XG4gICAgICBpZiAoIXN0cmVhbUtleSkgc2V0TG9hZGluZyh0cnVlKVxuICAgICAgY29uc3QgW2Vycm9yLCBkYXRhXSA9IGF3YWl0IGdldFN0cmVhbUtleSgpXG4gICAgICBjb25zdCB2aWRlb0NvbnRyb2xTdGF0ZSA9IFZpZGVvQ29udHJvbFN0YXRlLmdldE11dGFibGUoXG4gICAgICAgIHN0YXRlLmFkbWluVG9vbGtpdFVpRW50aXR5LFxuICAgICAgKVxuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHZpZGVvQ29udHJvbFN0YXRlLmVuZHNBdCA9IHVuZGVmaW5lZFxuICAgICAgICB2aWRlb0NvbnRyb2xTdGF0ZS5zdHJlYW1LZXkgPSB1bmRlZmluZWRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZpZGVvQ29udHJvbFN0YXRlLmVuZHNBdCA9IGRhdGE/LmVuZHNBdFxuICAgICAgICB2aWRlb0NvbnRyb2xTdGF0ZS5zdHJlYW1LZXkgPSBkYXRhPy5zdHJlYW1pbmdLZXkgPz8gJydcbiAgICAgIH1cbiAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgfVxuICAgIHN0cmVhbUtleUZuKClcbiAgfSwgW10pXG5cblxuICBpZiAoc2hvd1Jlc2V0U3RyZWFtS2V5KSB7XG4gICAgcmV0dXJuIDxEZWxldGVTdHJlYW1LZXlDb25maXJtYXRpb25cbiAgICAgIHNjYWxlRmFjdG9yPXtzY2FsZUZhY3Rvcn1cbiAgICAgIGVuZ2luZT17ZW5naW5lfVxuICAgICAgb25DYW5jZWw9eygpID0+IHNldFJlc2V0U3RyZWFtS2V5KGZhbHNlKX1cbiAgICAvPlxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8VWlFbnRpdHkgdWlUcmFuc2Zvcm09e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHdpZHRoOiAnMTAwJScgfX0+XG4gICAgICA8VWlFbnRpdHlcbiAgICAgICAgdWlUcmFuc2Zvcm09e3sgd2lkdGg6ICcxMDAlJywganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyB9fVxuICAgICAgPlxuICAgICAgICA8SGVhZGVyXG4gICAgICAgICAgaWNvblNyYz17SUNPTlMuTElWRV9TT1VSQ0V9XG4gICAgICAgICAgdGl0bGU9XCJMaXZlIFN0cmVhbVwiXG4gICAgICAgICAgc2NhbGVGYWN0b3I9e3NjYWxlRmFjdG9yfVxuICAgICAgICAvPlxuICAgICAgICA8VWlFbnRpdHlcbiAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4gb3BlbkV4dGVybmFsVXJsKHsgdXJsOiBTVFJFQU1JTkdfU1VQUE9SVF9VUkwgfSl9XG4gICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgIHdpZHRoOiAyNSAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgaGVpZ2h0OiAyNSAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgfX1cbiAgICAgICAgICB1aUJhY2tncm91bmQ9e3tcbiAgICAgICAgICAgIHRleHR1cmVNb2RlOiAnc3RyZXRjaCcsXG4gICAgICAgICAgICBjb2xvcjogQ29sb3I0LldoaXRlKCksXG4gICAgICAgICAgICB0ZXh0dXJlOiB7XG4gICAgICAgICAgICAgIHNyYzogSEVMUF9JQ09OLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgPC9VaUVudGl0eT5cbiAgICAgIDxMYWJlbFxuICAgICAgICB0ZXh0QWxpZ249XCJtaWRkbGUtbGVmdFwiXG4gICAgICAgIHZhbHVlPVwiVXNlIHRoZSBSVE1QIHNlcnZlciBhbmQgc3RyZWFtIGtleSBiZWxvdyBpbiB5b3VyIGJyb2FkY2FzdGluZyBzb2Z0d2FyZSB0byBzdGFydCBzdHJlYW1pbmcgdG8gdGhpcyBzY3JlZW4uXCJcbiAgICAgICAgY29sb3I9e0NvbG9yNC5mcm9tSGV4U3RyaW5nKCcjQTA5QkE4Jyl9XG4gICAgICAgIGZvbnRTaXplPXsxNiAqIHNjYWxlRmFjdG9yfVxuICAgICAgLz5cbiAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICA8TG9hZGluZ0RvdHNcbiAgICAgICAgICB1aVRyYW5zZm9ybT17eyBtaW5IZWlnaHQ6IDQwMCAqIHNjYWxlRmFjdG9yIH19XG4gICAgICAgICAgc2NhbGVGYWN0b3I9e3NjYWxlRmFjdG9yfVxuICAgICAgICAgIGVuZ2luZT17ZW5naW5lfVxuICAgICAgICAvPlxuICAgICAgKSA6IHN0cmVhbUtleSA/IChcbiAgICAgICAgPFNob3dTdHJlYW1LZXlcbiAgICAgICAgICBzdHJlYW1LZXk9e3N0cmVhbUtleSA/PyAnJ31cbiAgICAgICAgICBlbmRzQXQ9e3N0cmVhbUtleUVuZHNBdCA/PyAwfVxuICAgICAgICAgIHNjYWxlRmFjdG9yPXtzY2FsZUZhY3Rvcn1cbiAgICAgICAgICBlbmdpbmU9e2VuZ2luZX1cbiAgICAgICAgICBlbnRpdHk9e2VudGl0eX1cbiAgICAgICAgICB2aWRlbz17dmlkZW99XG4gICAgICAgICAgb25SZXNldD17KCkgPT4gc2V0UmVzZXRTdHJlYW1LZXkodHJ1ZSl9XG4gICAgICAgIC8+XG4gICAgICApIDogKFxuICAgICAgICA8R2VuZXJhdGVTdHJlYW1LZXkgc2NhbGVGYWN0b3I9e3NjYWxlRmFjdG9yfSBlbmdpbmU9e2VuZ2luZX0gLz5cbiAgICAgICl9XG4gICAgICB7IXN0cmVhbUtleSAmJiA8TGFiZWxcbiAgICAgICAgZm9udFNpemU9ezE0ICogc2NhbGVGYWN0b3J9XG4gICAgICAgIGNvbG9yPXtDb2xvcjQuZnJvbUhleFN0cmluZygnI0ZGMkQ1NScpfVxuICAgICAgICB2YWx1ZT1cIkRvIG5vdCBzaGFyZSB5b3VyIHN0cmVhbSBrZXkgd2l0aCBhbnlvbmUsIGFuZCBiZSBjYXJlZnVsIG5vdCB0byBkaXNwbGF5IGl0IG9uIHNjcmVlbiB3aGlsZSBzdHJlYW1pbmcuXCJcbiAgICAgIC8+fVxuICAgIDwvVWlFbnRpdHk+XG4gIClcbn1cblxuIl19
@@ -0,0 +1,9 @@
1
+ import { DeepReadonlyObject, IEngine, PBVideoPlayer, Entity } from '@dcl/ecs';
2
+ import ReactEcs from '@dcl/react-ecs';
3
+ export declare const HELP_ICON = "https://builder-items.decentraland.org/admin_toolkit/assets/icons/help.png";
4
+ export declare function VideoControlURL({ engine, scaleFactor, video, entity, }: {
5
+ engine: IEngine;
6
+ scaleFactor: number;
7
+ entity: Entity;
8
+ video: DeepReadonlyObject<PBVideoPlayer> | undefined;
9
+ }): ReactEcs.JSX.Element;
@@ -0,0 +1,125 @@
1
+ import { Color4 } from '@dcl/sdk/math';
2
+ import ReactEcs, { UiEntity, Input, Label } from '@dcl/react-ecs';
3
+ import { COLORS, ICONS } from '.';
4
+ import { createVideoPlayerControls } from './utils';
5
+ import { VideoControlVolume } from './VolumeControl';
6
+ import { Button } from '../Button';
7
+ import { Header } from '../Header';
8
+ import { openExternalUrl } from '~system/RestrictedActions';
9
+ import { LIVEKIT_STREAM_SRC } from '../../definitions';
10
+ import { CONTENT_URL } from '../constants';
11
+ const VIDEO_PLAYER_HELP_URL = 'https://docs.decentraland.org/creator/editor/scene-admin/#video-playing';
12
+ export const HELP_ICON = `${CONTENT_URL}/admin_toolkit/assets/icons/help.png`;
13
+ export function VideoControlURL({ engine, scaleFactor, video, entity, }) {
14
+ const [videoURL, setVideoURL] = ReactEcs.useState("");
15
+ ReactEcs.useEffect(() => {
16
+ const url = video?.src === LIVEKIT_STREAM_SRC ? '' : video?.src;
17
+ setVideoURL(url ?? "");
18
+ }, [entity]);
19
+ const controls = createVideoPlayerControls(entity, engine);
20
+ const isActive = video && video.src.startsWith('https://');
21
+ return (ReactEcs.createElement(UiEntity, { uiTransform: { flexDirection: 'column', width: '100%' } },
22
+ ReactEcs.createElement(UiEntity, { uiTransform: { width: '100%', justifyContent: 'space-between' } },
23
+ ReactEcs.createElement(Header, { iconSrc: ICONS.VIDEO_SOURCE, title: "Video URL", scaleFactor: scaleFactor }),
24
+ ReactEcs.createElement(UiEntity, { onMouseDown: () => openExternalUrl({ url: VIDEO_PLAYER_HELP_URL }), uiTransform: {
25
+ width: 25 * scaleFactor,
26
+ height: 25 * scaleFactor,
27
+ alignItems: 'center',
28
+ }, uiBackground: {
29
+ textureMode: 'stretch',
30
+ color: Color4.White(),
31
+ texture: { src: HELP_ICON },
32
+ } })),
33
+ ReactEcs.createElement(Label, { value: "Play videos from Vimeo by pasting a video URL below.", color: Color4.fromHexString('#A09BA8'), fontSize: 16 * scaleFactor }),
34
+ ReactEcs.createElement(Label, { value: "<b>Video URL<b>", color: Color4.White(), fontSize: 16 * scaleFactor, uiTransform: {
35
+ margin: { top: 16 * scaleFactor, bottom: 8 * scaleFactor },
36
+ } }),
37
+ ReactEcs.createElement(Input, { onChange: setVideoURL, value: videoURL, fontSize: 16 * scaleFactor, textAlign: "top-left", placeholder: "Paste your video URL", placeholderColor: Color4.create(160 / 255, 155 / 255, 168 / 255, 1), color: isActive ? Color4.Black() : Color4.fromHexString('#A09BA8'), uiBackground: { color: Color4.fromHexString('#FCFCFC') }, uiTransform: {
38
+ borderRadius: 12,
39
+ borderColor: Color4.White(),
40
+ width: '100%',
41
+ height: 80 * scaleFactor
42
+ } }),
43
+ ReactEcs.createElement(UiEntity, { uiTransform: {
44
+ width: '100%',
45
+ height: 40 * scaleFactor,
46
+ flexDirection: 'row',
47
+ justifyContent: 'flex-end',
48
+ margin: { top: 10 * scaleFactor },
49
+ } },
50
+ video?.src.startsWith('https://') && (ReactEcs.createElement(Button, { id: "video_control_share_screen_clear", value: "<b>Deactivate</b>", variant: "text", fontSize: 16 * scaleFactor, color: Color4.White(), uiTransform: {
51
+ margin: { right: 8 * scaleFactor },
52
+ padding: { left: 8 * scaleFactor, right: 8 * scaleFactor },
53
+ }, onMouseDown: () => {
54
+ controls.setSource('');
55
+ } })),
56
+ (!videoURL || videoURL !== video?.src) && (ReactEcs.createElement(Button, { disabled: !videoURL.startsWith('https://'), id: "video_control_share_screen_share", value: video?.src &&
57
+ videoURL !== video.src &&
58
+ video.src !== LIVEKIT_STREAM_SRC
59
+ ? '<b>Update</b>'
60
+ : '<b>Activate</b>', labelTransform: {
61
+ margin: { left: 6 * scaleFactor, right: 6 * scaleFactor },
62
+ }, fontSize: 16 * scaleFactor, uiBackground: {
63
+ color: videoURL.startsWith('https://')
64
+ ? COLORS.SUCCESS
65
+ : Color4.fromHexString('#274431'),
66
+ }, color: Color4.Black(), onMouseDown: () => {
67
+ controls.setSource(videoURL);
68
+ } }))),
69
+ ReactEcs.createElement(Label, { value: "<b>Video Playback</b>", fontSize: 16 * scaleFactor, color: Color4.White(), uiTransform: { margin: { bottom: 10 * scaleFactor } } }),
70
+ ReactEcs.createElement(UiEntity, { uiTransform: {
71
+ flexDirection: 'row',
72
+ width: '100%',
73
+ margin: { bottom: 10 * scaleFactor },
74
+ } },
75
+ ReactEcs.createElement(Button, { disabled: !isActive, id: "video_control_play", value: "<b>Play</b>", fontSize: 18 * scaleFactor, labelTransform: { margin: { right: 10 * scaleFactor } }, uiTransform: {
76
+ margin: { top: 0, right: 16 * scaleFactor, bottom: 0, left: 0 },
77
+ height: 42 * scaleFactor,
78
+ minWidth: 69 * scaleFactor,
79
+ alignItems: 'center',
80
+ justifyContent: 'center',
81
+ padding: 0,
82
+ }, icon: ICONS.PLAY_BUTTON, iconTransform: {
83
+ width: 35 * scaleFactor,
84
+ height: 35 * scaleFactor,
85
+ }, onMouseDown: () => {
86
+ controls.play();
87
+ } }),
88
+ ReactEcs.createElement(Button, { disabled: !isActive, id: "video_control_pause", value: "<b>Pause</b>", fontSize: 18 * scaleFactor, labelTransform: {
89
+ margin: { left: 6 * scaleFactor, right: 6 * scaleFactor },
90
+ }, uiTransform: {
91
+ margin: { top: 0, right: 16 * scaleFactor, bottom: 0, left: 0 },
92
+ height: 42 * scaleFactor,
93
+ minWidth: 78 * scaleFactor,
94
+ alignItems: 'center',
95
+ justifyContent: 'center',
96
+ padding: 0,
97
+ }, onMouseDown: () => {
98
+ controls.pause();
99
+ } }),
100
+ ReactEcs.createElement(Button, { disabled: !isActive, id: "video_control_restart", value: "<b>Restart</b>", labelTransform: {
101
+ margin: { left: 6 * scaleFactor, right: 6 * scaleFactor },
102
+ }, fontSize: 18 * scaleFactor, uiTransform: {
103
+ margin: { top: 0, right: 16 * scaleFactor, bottom: 0, left: 0 },
104
+ height: 42 * scaleFactor,
105
+ minWidth: 88 * scaleFactor,
106
+ alignItems: 'center',
107
+ justifyContent: 'center',
108
+ padding: 0,
109
+ }, onMouseDown: () => {
110
+ controls.restart();
111
+ } }),
112
+ ReactEcs.createElement(Button, { disabled: !isActive, id: "video_control_loop", onlyIcon: true, variant: video?.loop ? 'primary' : 'secondary', uiTransform: {
113
+ height: 42 * scaleFactor,
114
+ width: 49 * scaleFactor,
115
+ alignItems: 'center',
116
+ justifyContent: 'center',
117
+ padding: 0,
118
+ }, icon: ICONS.LOOP, iconTransform: { width: 25 * scaleFactor, height: 25 * scaleFactor }, iconBackground: {
119
+ color: !video?.loop ? Color4.White() : Color4.Black(),
120
+ }, color: Color4.White(), onMouseDown: () => {
121
+ controls.setLoop(!video?.loop);
122
+ } })),
123
+ ReactEcs.createElement(VideoControlVolume, { engine: engine, entity: entity, video: video, label: "<b>Video Volume</b>" })));
124
+ }
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmlkZW9VcmwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWRtaW4tdG9vbGtpdC11aS9WaWRlb0NvbnRyb2wvVmlkZW9VcmwudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFdEMsT0FBTyxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ2pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sR0FBRyxDQUFBO0FBQ2pDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQ2xDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDbEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFFMUMsTUFBTSxxQkFBcUIsR0FBRyx5RUFBeUUsQ0FBQTtBQUN2RyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsR0FBRyxXQUFXLHNDQUFzQyxDQUFBO0FBRzdFLE1BQU0sVUFBVSxlQUFlLENBQUMsRUFDOUIsTUFBTSxFQUNOLFdBQVcsRUFDWCxLQUFLLEVBQ0wsTUFBTSxHQU1QO0lBQ0MsTUFBTSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ3JELFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ3RCLE1BQU0sR0FBRyxHQUFHLEtB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LFFBQVE7b0JBQ3BCLGNBQWMsRUFBRSxRQUFRO29CQUN4QixPQUFPLEVBQUUsQ0FBQztpQkFDWCxFQUNELElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUNoQixhQUFhLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFBRSxFQUNwRSxjQUFjLEVBQUU7b0JBQ2QsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO2lCQUN0RCxFQUNELEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQ3JCLFdBQVcsRUFBRSxHQUFHLEVBQUU7b0JBQ2hCLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUE7Z0JBQ2hDLENBQUMsR0FDRCxDQUNPO1FBRVgsdUJBQUMsa0JBQWtCLElBQ2pCLE1BQU0sRUFBRSxNQUFNLEVBQ2QsTUFBTSxFQUFFLE1BQU0sRUFDZCxLQUFLLEVBQUUsS0FBSyxFQUNaLEtBQUssRUFBQyxxQkFBcUIsR0FDM0IsQ0FDTyxDQUNaLENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29sb3I0IH0gZnJvbSAnQGRjbC9zZGsvbWF0aCdcbmltcG9ydCB7IERlZXBSZWFkb25seU9iamVjdCwgSUVuZ2luZSwgUEJWaWRlb1BsYXllciwgRW50aXR5IH0gZnJvbSAnQGRjbC9lY3MnXG5pbXBvcnQgUmVhY3RFY3MsIHsgVWlFbnRpdHksIElucHV0LCBMYWJlbCB9IGZyb20gJ0BkY2wvcmVhY3QtZWNzJ1xuaW1wb3J0IHsgQ09MT1JTLCBJQ09OUyB9IGZyb20gJy4nXG5pbXBvcnQgeyBjcmVhdGVWaWRlb1BsYXllckNvbnRyb2xzIH0gZnJvbSAnLi91dGlscydcbmltcG9ydCB7IFZpZGVvQ29udHJvbFZvbHVtZSB9IGZyb20gJy4vVm9sdW1lQ29udHJvbCdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uL0J1dHRvbidcbmltcG9ydCB7IEhlYWRlciB9IGZyb20gJy4uL0hlYWRlcidcbmltcG9ydCB7IG9wZW5FeHRlcm5hbFVybCB9IGZyb20gJ35zeXN0ZW0vUmVzdHJpY3RlZEFjdGlvbnMnXG5pbXBvcnQgeyBMSVZFS0lUX1NUUkVBTV9TUkMgfSBmcm9tICcuLi8uLi9kZWZpbml0aW9ucydcbmltcG9ydCB7IENPTlRFTlRfVVJMIH0gZnJvbSAnLi4vY29uc3RhbnRzJ1xuXG5jb25zdCBWSURFT19QTEFZRVJfSEVMUF9VUkwgPSAnaHR0cHM6Ly9kb2NzLmRlY2VudHJhbGFuZC5vcmcvY3JlYXRvci9lZGl0b3Ivc2NlbmUtYWRtaW4vI3ZpZGVvLXBsYXlpbmcnXG5leHBvcnQgY29uc3QgSEVMUF9JQ09OID0gYCR7Q09OVEVOVF9VUkx9L2FkbWluX3Rvb2xraXQvYXNzZXRzL2ljb25zL2hlbHAucG5nYFxuXG5cbmV4cG9ydCBmdW5jdGlvbiBWaWRlb0NvbnRyb2xVUkwoe1xuICBlbmdpbmUsXG4gIHNjYWxlRmFjdG9yLFxuICB2aWRlbyxcbiAgZW50aXR5LFxufToge1xuICBlbmdpbmU6IElFbmdpbmVcbiAgc2NhbGVGYWN0b3I6IG51bWJlclxuICBlbnRpdHk6IEVudGl0eVxuICB2aWRlbzogRGVlcFJlYWRvbmx5T2JqZWN0PFBCVmlkZW9QbGF5ZXI+IHwgdW5kZWZpbmVkXG59KSB7XG4gIGNvbnN0IFt2aWRlb1VSTCwgc2V0VmlkZW9VUkxdID0gUmVhY3RFY3MudXNlU3RhdGUoXCJcIilcbiAgUmVhY3RFY3MudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB1cmwgPSB2aWRlbz8uc3JjID09PSBMSVZFS0lUX1NUUkVBTV9TUkMgPyAnJyA6IHZpZGVvPy5zcmNcbiAgICBzZXRWaWRlb1VSTCh1cmwgPz8gXCJcIilcbiAgfSwgW2VudGl0eV0pXG4gIGNvbnN0IGNvbnRyb2xzID0gY3JlYXRlVmlkZW9QbGF5ZXJDb250cm9scyhlbnRpdHksIGVuZ2luZSlcbiAgY29uc3QgaXNBY3RpdmUgPSB2aWRlbyAmJiB2aWRlby5zcmMuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKVxuICByZXR1cm4gKFxuICAgIDxVaUVudGl0eSB1aVRyYW5zZm9ybT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgd2lkdGg6ICcxMDAlJyB9fT5cbiAgICAgIDxVaUVudGl0eVxuICAgICAgICB1aVRyYW5zZm9ybT17eyB3aWR0aDogJzEwMCUnLCBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nIH19XG4gICAgICA+XG4gICAgICAgIDxIZWFkZXJcbiAgICAgICAgICBpY29uU3JjPXtJQ09OUy5WSURFT19TT1VSQ0V9XG4gICAgICAgICAgdGl0bGU9XCJWaWRlbyBVUkxcIlxuICAgICAgICAgIHNjYWxlRmFjdG9yPXtzY2FsZUZhY3Rvcn1cbiAgICAgICAgLz5cbiAgICAgICAgPFVpRW50aXR5XG4gICAgICAgICAgb25Nb3VzZURvd249eygpID0+IG9wZW5FeHRlcm5hbFVybCh7IHVybDogVklERU9fUExBWUVSX0hFTFBfVVJMIH0pfVxuICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICB3aWR0aDogMjUgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgIGhlaWdodDogMjUgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgIH19XG4gICAgICAgICAgdWlCYWNrZ3JvdW5kPXt7XG4gICAgICAgICAgICB0ZXh0dXJlTW9kZTogJ3N0cmV0Y2gnLFxuICAgICAgICAgICAgY29sb3I6IENvbG9yNC5XaGl0ZSgpLFxuICAgICAgICAgICAgdGV4dHVyZTogeyBzcmM6IEhFTFBfSUNPTiB9LFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICA8L1VpRW50aXR5PlxuICAgICAgPExhYmVsXG4gICAgICAgIHZhbHVlPVwiUGxheSB2aWRlb3MgZnJvbSBWaW1lbyBieSBwYXN0aW5nIGEgdmlkZW8gVVJMIGJlbG93LlwiXG4gICAgICAgIGNvbG9yPXtDb2xvcjQuZnJvbUhleFN0cmluZygnI0EwOUJBOCcpfVxuICAgICAgICBmb250U2l6ZT17MTYgKiBzY2FsZUZhY3Rvcn1cbiAgICAgIC8+XG4gICAgICA8TGFiZWxcbiAgICAgICAgdmFsdWU9XCI8Yj5WaWRlbyBVUkw8Yj5cIlxuICAgICAgICBjb2xvcj17Q29sb3I0LldoaXRlKCl9XG4gICAgICAgIGZvbnRTaXplPXsxNiAqIHNjYWxlRmFjdG9yfVxuICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgIG1hcmdpbjogeyB0b3A6IDE2ICogc2NhbGVGYWN0b3IsIGJvdHRvbTogOCAqIHNjYWxlRmFjdG9yIH0sXG4gICAgICAgIH19XG4gICAgICAvPlxuXG4gICAgICA8SW5wdXRcbiAgICAgICAgb25DaGFuZ2U9e3NldFZpZGVvVVJMfVxuICAgICAgICB2YWx1ZT17dmlkZW9VUkx9XG4gICAgICAgIGZvbnRTaXplPXsxNiAqIHNjYWxlRmFjdG9yfVxuICAgICAgICB0ZXh0QWxpZ249XCJ0b3AtbGVmdFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiUGFzdGUgeW91ciB2aWRlbyBVUkxcIlxuICAgICAgICBwbGFjZWhvbGRlckNvbG9yPXtDb2xvcjQuY3JlYXRlKDE2MCAvIDI1NSwgMTU1IC8gMjU1LCAxNjggLyAyNTUsIDEpfVxuICAgICAgICBjb2xvcj17aXNBY3RpdmUgPyBDb2xvcjQuQmxhY2soKSA6IENvbG9yNC5mcm9tSGV4U3RyaW5nKCcjQTA5QkE4Jyl9XG4gICAgICAgIHVpQmFja2dyb3VuZD17eyBjb2xvcjogQ29sb3I0LmZyb21IZXhTdHJpbmcoJyNGQ0ZDRkMnKSB9fVxuICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgIGJvcmRlclJhZGl1czogMTIsXG4gICAgICAgICAgYm9yZGVyQ29sb3I6IENvbG9yNC5XaGl0ZSgpLFxuICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgaGVpZ2h0OiA4MCAqIHNjYWxlRmFjdG9yXG4gICAgICAgIH19XG4gICAgICAvPlxuXG4gICAgICA8VWlFbnRpdHlcbiAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgIGhlaWdodDogNDAgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJyxcbiAgICAgICAgICBtYXJnaW46IHsgdG9wOiAxMCAqIHNjYWxlRmFjdG9yIH0sXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHt2aWRlbz8uc3JjLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykgJiYgKFxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGlkPVwidmlkZW9fY29udHJvbF9zaGFyZV9zY3JlZW5fY2xlYXJcIlxuICAgICAgICAgICAgdmFsdWU9XCI8Yj5EZWFjdGl2YXRlPC9iPlwiXG4gICAgICAgICAgICB2YXJpYW50PVwidGV4dFwiXG4gICAgICAgICAgICBmb250U2l6ZT17MTYgKiBzY2FsZUZhY3Rvcn1cbiAgICAgICAgICAgIGNvbG9yPXtDb2xvcjQuV2hpdGUoKX1cbiAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgIG1hcmdpbjogeyByaWdodDogOCAqIHNjYWxlRmFjdG9yIH0sXG4gICAgICAgICAgICAgIHBhZGRpbmc6IHsgbGVmdDogOCAqIHNjYWxlRmFjdG9yLCByaWdodDogOCAqIHNjYWxlRmFjdG9yIH0sXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHtcbiAgICAgICAgICAgICAgY29udHJvbHMuc2V0U291cmNlKCcnKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7KCF2aWRlb1VSTCB8fCB2aWRlb1VSTCAhPT0gdmlkZW8/LnNyYykgJiYgKFxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGRpc2FibGVkPXshdmlkZW9VUkwuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKX1cbiAgICAgICAgICAgIGlkPVwidmlkZW9fY29udHJvbF9zaGFyZV9zY3JlZW5fc2hhcmVcIlxuICAgICAgICAgICAgdmFsdWU9e1xuICAgICAgICAgICAgICB2aWRlbz8uc3JjICYmXG4gICAgICAgICAgICAgIHZpZGVvVVJMICE9PSB2aWRlby5zcmMgJiZcbiAgICAgICAgICAgICAgdmlkZW8uc3JjICE9PSBMSVZFS0lUX1NUUkVBTV9TUkNcbiAgICAgICAgICAgICAgICA/ICc8Yj5VcGRhdGU8L2I+J1xuICAgICAgICAgICAgICAgIDogJzxiPkFjdGl2YXRlPC9iPidcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhYmVsVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgIG1hcmdpbjogeyBsZWZ0OiA2ICogc2NhbGVGYWN0b3IsIHJpZ2h0OiA2ICogc2NhbGVGYWN0b3IgfSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBmb250U2l6ZT17MTYgKiBzY2FsZUZhY3Rvcn1cbiAgICAgICAgICAgIHVpQmFja2dyb3VuZD17e1xuICAgICAgICAgICAgICBjb2xvcjogdmlkZW9VUkwuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKVxuICAgICAgICAgICAgICAgID8gQ09MT1JTLlNVQ0NFU1NcbiAgICAgICAgICAgICAgICA6IENvbG9yNC5mcm9tSGV4U3RyaW5nKCcjMjc0NDMxJyksXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgY29sb3I9e0NvbG9yNC5CbGFjaygpfVxuICAgICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHtcbiAgICAgICAgICAgICAgY29udHJvbHMuc2V0U291cmNlKHZpZGVvVVJMKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgPC9VaUVudGl0eT5cblxuICAgICAgPExhYmVsXG4gICAgICAgIHZhbHVlPVwiPGI+VmlkZW8gUGxheWJhY2s8L2I+XCJcbiAgICAgICAgZm9udFNpemU9ezE2ICogc2NhbGVGYWN0b3J9XG4gICAgICAgIGNvbG9yPXtDb2xvcjQuV2hpdGUoKX1cbiAgICAgICAgdWlUcmFuc2Zvcm09e3sgbWFyZ2luOiB7IGJvdHRvbTogMTAgKiBzY2FsZUZhY3RvciB9IH19XG4gICAgICAvPlxuXG4gICAgICA8VWlFbnRpdHlcbiAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgIG1hcmdpbjogeyBib3R0b206IDEwICogc2NhbGVGYWN0b3IgfSxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIGRpc2FibGVkPXshaXNBY3RpdmV9XG4gICAgICAgICAgaWQ9XCJ2aWRlb19jb250cm9sX3BsYXlcIlxuICAgICAgICAgIHZhbHVlPVwiPGI+UGxheTwvYj5cIlxuICAgICAgICAgIGZvbnRTaXplPXsxOCAqIHNjYWxlRmFjdG9yfVxuICAgICAgICAgIGxhYmVsVHJhbnNmb3JtPXt7IG1hcmdpbjogeyByaWdodDogMTAgKiBzY2FsZUZhY3RvciB9IH19XG4gICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgIG1hcmdpbjogeyB0b3A6IDAsIHJpZ2h0OiAxNiAqIHNjYWxlRmFjdG9yLCBib3R0b206IDAsIGxlZnQ6IDAgfSxcbiAgICAgICAgICAgIGhlaWdodDogNDIgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgIG1pbldpZHRoOiA2OSAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAgIH19XG4gICAgICAgICAgaWNvbj17SUNPTlMuUExBWV9CVVRUT059XG4gICAgICAgICAgaWNvblRyYW5zZm9ybT17e1xuICAgICAgICAgICAgd2lkdGg6IDM1ICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICBoZWlnaHQ6IDM1ICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgICAgY29udHJvbHMucGxheSgpXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIGRpc2FibGVkPXshaXNBY3RpdmV9XG4gICAgICAgICAgaWQ9XCJ2aWRlb19jb250cm9sX3BhdXNlXCJcbiAgICAgICAgICB2YWx1ZT1cIjxiPlBhdXNlPC9iPlwiXG4gICAgICAgICAgZm9udFNpemU9ezE4ICogc2NhbGVGYWN0b3J9XG4gICAgICAgICAgbGFiZWxUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgIG1hcmdpbjogeyBsZWZ0OiA2ICogc2NhbGVGYWN0b3IsIHJpZ2h0OiA2ICogc2NhbGVGYWN0b3IgfSxcbiAgICAgICAgICB9fVxuICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICBtYXJnaW46IHsgdG9wOiAwLCByaWdodDogMTYgKiBzY2FsZUZhY3RvciwgYm90dG9tOiAwLCBsZWZ0OiAwIH0sXG4gICAgICAgICAgICBoZWlnaHQ6IDQyICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICBtaW5XaWR0aDogNzggKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uTW91c2VEb3duPXsoKSA9PiB7XG4gICAgICAgICAgICBjb250cm9scy5wYXVzZSgpXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIGRpc2FibGVkPXshaXNBY3RpdmV9XG4gICAgICAgICAgaWQ9XCJ2aWRlb19jb250cm9sX3Jlc3RhcnRcIlxuICAgICAgICAgIHZhbHVlPVwiPGI+UmVzdGFydDwvYj5cIlxuICAgICAgICAgIGxhYmVsVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICBtYXJnaW46IHsgbGVmdDogNiAqIHNjYWxlRmFjdG9yLCByaWdodDogNiAqIHNjYWxlRmFjdG9yIH0sXG4gICAgICAgICAgfX1cbiAgICAgICAgICBmb250U2l6ZT17MTggKiBzY2FsZUZhY3Rvcn1cbiAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgbWFyZ2luOiB7IHRvcDogMCwgcmlnaHQ6IDE2ICogc2NhbGVGYWN0b3IsIGJvdHRvbTogMCwgbGVmdDogMCB9LFxuICAgICAgICAgICAgaGVpZ2h0OiA0MiAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgbWluV2lkdGg6IDg4ICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgICAgY29udHJvbHMucmVzdGFydCgpXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIGRpc2FibGVkPXshaXNBY3RpdmV9XG4gICAgICAgICAgaWQ9XCJ2aWRlb19jb250cm9sX2xvb3BcIlxuICAgICAgICAgIG9ubHlJY29uXG4gICAgICAgICAgdmFyaWFudD17dmlkZW8/Lmxvb3AgPyAncHJpbWFyeScgOiAnc2Vjb25kYXJ5J31cbiAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgaGVpZ2h0OiA0MiAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgd2lkdGg6IDQ5ICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBpY29uPXtJQ09OUy5MT09QfVxuICAgICAgICAgIGljb25UcmFuc2Zvcm09e3sgd2lkdGg6IDI1ICogc2NhbGVGYWN0b3IsIGhlaWdodDogMjUgKiBzY2FsZUZhY3RvciB9fVxuICAgICAgICAgIGljb25CYWNrZ3JvdW5kPXt7XG4gICAgICAgICAgICBjb2xvcjogIXZpZGVvPy5sb29wID8gQ29sb3I0LldoaXRlKCkgOiBDb2xvcjQuQmxhY2soKSxcbiAgICAgICAgICB9fVxuICAgICAgICAgIGNvbG9yPXtDb2xvcjQuV2hpdGUoKX1cbiAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgICAgY29udHJvbHMuc2V0TG9vcCghdmlkZW8/Lmxvb3ApXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgIDwvVWlFbnRpdHk+XG5cbiAgICAgIDxWaWRlb0NvbnRyb2xWb2x1bWVcbiAgICAgICAgZW5naW5lPXtlbmdpbmV9XG4gICAgICAgIGVudGl0eT17ZW50aXR5fVxuICAgICAgICB2aWRlbz17dmlkZW99XG4gICAgICAgIGxhYmVsPVwiPGI+VmlkZW8gVm9sdW1lPC9iPlwiXG4gICAgICAvPlxuICAgIDwvVWlFbnRpdHk+XG4gIClcbn1cbiJdfQ==
@@ -0,0 +1,8 @@
1
+ import { DeepReadonlyObject, Entity, IEngine, PBVideoPlayer } from '@dcl/ecs';
2
+ import ReactEcs from '@dcl/react-ecs';
3
+ export declare function VideoControlVolume({ engine, label, entity, video, }: {
4
+ engine: IEngine;
5
+ label: string;
6
+ entity: Entity;
7
+ video: DeepReadonlyObject<PBVideoPlayer> | undefined;
8
+ }): ReactEcs.JSX.Element;
@@ -0,0 +1,82 @@
1
+ import ReactEcs, { Label, UiEntity } from '@dcl/react-ecs';
2
+ import { Color4 } from '@dcl/ecs-math';
3
+ import { getScaleUIFactor } from '../../ui';
4
+ import { Button } from '../Button';
5
+ import { createVideoPlayerControls, getAdminToolkitVideoControl } from './utils';
6
+ import { COLORS, DEFAULT_VOLUME, ICONS, VOLUME_STEP } from '.';
7
+ export function VideoControlVolume({ engine, label, entity, video, }) {
8
+ const scaleFactor = getScaleUIFactor(engine);
9
+ const controls = createVideoPlayerControls(entity, engine);
10
+ const videoControl = getAdminToolkitVideoControl(engine);
11
+ const isSoundDisabled = videoControl?.disableVideoPlayersSound;
12
+ const volumePercentage = `${Math.round((video?.volume ?? DEFAULT_VOLUME) * 100)}%`;
13
+ if (isSoundDisabled) {
14
+ return (ReactEcs.createElement(UiEntity, { uiTransform: { margin: { top: 4 * scaleFactor } } },
15
+ ReactEcs.createElement(UiEntity, { uiTransform: { width: 24 * scaleFactor, height: 24 * scaleFactor, margin: { right: 8 * scaleFactor } }, uiBackground: {
16
+ textureMode: 'stretch',
17
+ texture: {
18
+ src: ICONS.MUTE,
19
+ },
20
+ color: Color4.fromHexString('#A09BA8'),
21
+ } }),
22
+ ReactEcs.createElement(Label, { value: "Sound is disabled for all screens", color: Color4.fromHexString('#A09BA8'), fontSize: 14 * scaleFactor }),
23
+ ReactEcs.createElement(UiEntity, { uiTransform: { width: 25 * scaleFactor, height: 25 * scaleFactor, margin: { left: 8 * scaleFactor } }, uiBackground: {
24
+ textureMode: 'stretch',
25
+ texture: {
26
+ src: ICONS.INFO,
27
+ },
28
+ color: Color4.White()
29
+ } })));
30
+ }
31
+ return (ReactEcs.createElement(UiEntity, { uiTransform: {
32
+ flexDirection: 'column',
33
+ margin: { top: 16 * scaleFactor },
34
+ } },
35
+ ReactEcs.createElement(Label, { value: label, fontSize: 16 * scaleFactor, color: COLORS.WHITE, uiTransform: {
36
+ margin: { top: 0, right: 0, bottom: 10 * scaleFactor, left: 0 },
37
+ } }),
38
+ ReactEcs.createElement(UiEntity, { uiTransform: {
39
+ flexDirection: 'row',
40
+ } },
41
+ ReactEcs.createElement(Button, { id: "video_control_volume_minus", value: "Minus", fontSize: 14 * scaleFactor, uiTransform: {
42
+ margin: { top: 0, right: 16 * scaleFactor, bottom: 0, left: 0 },
43
+ width: 49 * scaleFactor,
44
+ alignItems: 'center',
45
+ justifyContent: 'center',
46
+ padding: 0,
47
+ }, icon: ICONS.VOLUME_MINUS_BUTTON, onlyIcon: true, iconTransform: {
48
+ width: 25 * scaleFactor,
49
+ height: 25 * scaleFactor,
50
+ }, onMouseDown: () => controls.setVolume(-VOLUME_STEP), disabled: isSoundDisabled || !video?.volume }),
51
+ ReactEcs.createElement(Label, { value: volumePercentage, fontSize: 18 * scaleFactor, color: COLORS.GRAY, uiTransform: {
52
+ margin: { top: 0, right: 16 * scaleFactor, bottom: 0, left: 0 },
53
+ alignItems: 'center',
54
+ justifyContent: 'center',
55
+ padding: 0,
56
+ width: 50 * scaleFactor
57
+ } }),
58
+ ReactEcs.createElement(Button, { id: "video_control_volume_plus", value: "Plus", fontSize: 14 * scaleFactor, icon: ICONS.VOLUME_PLUS_BUTTON, onlyIcon: true, iconTransform: {
59
+ width: 25 * scaleFactor,
60
+ height: 25 * scaleFactor,
61
+ }, uiTransform: {
62
+ margin: { top: 0, right: 16 * scaleFactor, bottom: 0, left: 0 },
63
+ width: 49 * scaleFactor,
64
+ alignItems: 'center',
65
+ justifyContent: 'center',
66
+ padding: 0,
67
+ }, onMouseDown: () => controls.setVolume(VOLUME_STEP), disabled: isSoundDisabled || video?.volume === 1 }),
68
+ ReactEcs.createElement(Button, { id: "video_control_volume_mute", variant: !video?.volume ? "primary" : "secondary", fontSize: 18 * scaleFactor, iconTransform: { width: 24 * scaleFactor, height: 24 * scaleFactor }, onlyIcon: true, icon: ICONS.MUTE, iconBackground: {
69
+ color: video?.volume ? Color4.White() : Color4.Black()
70
+ }, uiTransform: {
71
+ borderColor: Color4.fromHexString('#FCFCFC'),
72
+ borderWidth: 2,
73
+ width: 49 * scaleFactor,
74
+ height: 42 * scaleFactor,
75
+ alignItems: 'center',
76
+ justifyContent: 'center',
77
+ padding: 0,
78
+ }, onMouseDown: () => {
79
+ controls.setVolume(!video?.volume ? 100 : 0);
80
+ }, disabled: isSoundDisabled }))));
81
+ }
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVm9sdW1lQ29udHJvbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hZG1pbi10b29sa2l0LXVpL1ZpZGVvQ29udHJvbC9Wb2x1bWVDb250cm9sLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUMxRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ3RDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQ2xDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUNoRixPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sR0FBRyxDQUFBO0FBRTlELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxFQUNqQyxNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixLQUFLLEdBTU47SUFDQyxNQUFNLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUM1QyxNQUFNLFFBQVEsR0FBRyx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDMUQsTUFBTSxZQUFZLEdBQUcsMkJBQTJCLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDeEQsTUFBTSxlQUFlLEdBQUcsWUFBWSxFQUFFLHdCQUF3QixDQUFBO0lBQzlELE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sSUFBSSxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFBO0lBRWxGLElBQUksZUFBZSxFQUFFLENBQUM7UUFDcEIsT0FBTyxDQUNMLHVCQUFDLFFBQVEsSUFB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QUFDLE1BQU0sSUFDTCxFQUFFLEVBQUMsMkJBQTJCLEVBQzlCLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUNqRCxRQUFRLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFDMUIsYUFBYSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxXQUFXLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxXQUFXLEVBQUMsRUFDbkUsUUFBUSxRQUNSLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUNoQixjQUFjLEVBQUU7b0JBQ2QsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtpQkFDdkQsRUFDRCxXQUFXLEVBQUU7b0JBQ1gsV0FBVyxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO29CQUM1QyxXQUFXLEVBQUUsQ0FBQztvQkFDZCxLQUFLLEVBQUUsRUFBRSxHQUFHLFdBQVc7b0JBQ3ZCLE1BQU0sRUFBRSxFQUFFLEdBQUcsV0FBVztvQkFDeEIsVUFBVSxFQUFFLFFBQVE7b0JBQ3BCLGNBQWMsRUFBRSxRQUFRO29CQUN4QixPQUFPLEVBQUUsQ0FBQztpQkFDWCxFQUNELFdBQVcsRUFBRSxHQUFHLEVBQUU7b0JBQ2hCLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUM5QyxDQUFDLEVBQ0QsUUFBUSxFQUFFLGVBQWUsR0FDekIsQ0FDTyxDQUNGLENBQ1osQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWVwUmVhZG9ubHlPYmplY3QsIEVudGl0eSwgSUVuZ2luZSwgUEJWaWRlb1BsYXllciB9IGZyb20gJ0BkY2wvZWNzJ1xuaW1wb3J0IFJlYWN0RWNzLCB7IExhYmVsLCBVaUVudGl0eSB9IGZyb20gJ0BkY2wvcmVhY3QtZWNzJ1xuaW1wb3J0IHsgQ29sb3I0IH0gZnJvbSAnQGRjbC9lY3MtbWF0aCdcbmltcG9ydCB7IGdldFNjYWxlVUlGYWN0b3IgfSBmcm9tICcuLi8uLi91aSdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uL0J1dHRvbidcbmltcG9ydCB7IGNyZWF0ZVZpZGVvUGxheWVyQ29udHJvbHMsIGdldEFkbWluVG9vbGtpdFZpZGVvQ29udHJvbCB9IGZyb20gJy4vdXRpbHMnXG5pbXBvcnQgeyBDT0xPUlMsIERFRkFVTFRfVk9MVU1FLCBJQ09OUywgVk9MVU1FX1NURVAgfSBmcm9tICcuJ1xuXG5leHBvcnQgZnVuY3Rpb24gVmlkZW9Db250cm9sVm9sdW1lKHtcbiAgZW5naW5lLFxuICBsYWJlbCxcbiAgZW50aXR5LFxuICB2aWRlbyxcbn06IHtcbiAgZW5naW5lOiBJRW5naW5lXG4gIGxhYmVsOiBzdHJpbmdcbiAgZW50aXR5OiBFbnRpdHlcbiAgdmlkZW86IERlZXBSZWFkb25seU9iamVjdDxQQlZpZGVvUGxheWVyPiB8IHVuZGVmaW5lZFxufSkge1xuICBjb25zdCBzY2FsZUZhY3RvciA9IGdldFNjYWxlVUlGYWN0b3IoZW5naW5lKVxuICBjb25zdCBjb250cm9scyA9IGNyZWF0ZVZpZGVvUGxheWVyQ29udHJvbHMoZW50aXR5LCBlbmdpbmUpXG4gIGNvbnN0IHZpZGVvQ29udHJvbCA9IGdldEFkbWluVG9vbGtpdFZpZGVvQ29udHJvbChlbmdpbmUpXG4gIGNvbnN0IGlzU291bmREaXNhYmxlZCA9IHZpZGVvQ29udHJvbD8uZGlzYWJsZVZpZGVvUGxheWVyc1NvdW5kXG4gIGNvbnN0IHZvbHVtZVBlcmNlbnRhZ2UgPSBgJHtNYXRoLnJvdW5kKCh2aWRlbz8udm9sdW1lID8/IERFRkFVTFRfVk9MVU1FKSAqIDEwMCl9JWBcblxuICBpZiAoaXNTb3VuZERpc2FibGVkKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxVaUVudGl0eSB1aVRyYW5zZm9ybT17eyBtYXJnaW46IHsgdG9wOiA0ICogc2NhbGVGYWN0b3IgfSB9fT5cbiAgICAgICAgPFVpRW50aXR5XG4gICAgICAgICAgdWlUcmFuc2Zvcm09e3sgd2lkdGg6IDI0ICogc2NhbGVGYWN0b3IsIGhlaWdodDogMjQgKiBzY2FsZUZhY3RvciwgbWFyZ2luOiB7IHJpZ2h0OiA4ICogc2NhbGVGYWN0b3IgfSB9fVxuICAgICAgICAgIHVpQmFja2dyb3VuZD17e1xuICAgICAgICAgICAgdGV4dHVyZU1vZGU6ICdzdHJldGNoJyxcbiAgICAgICAgICAgIHRleHR1cmU6IHtcbiAgICAgICAgICAgICAgc3JjOiBJQ09OUy5NVVRFLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbG9yOiBDb2xvcjQuZnJvbUhleFN0cmluZygnI0EwOUJBOCcpLFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICAgIDxMYWJlbFxuICAgICAgICAgIHZhbHVlPVwiU291bmQgaXMgZGlzYWJsZWQgZm9yIGFsbCBzY3JlZW5zXCJcbiAgICAgICAgICBjb2xvcj17Q29sb3I0LmZyb21IZXhTdHJpbmcoJyNBMDlCQTgnKX1cbiAgICAgICAgICBmb250U2l6ZT17MTQgKiBzY2FsZUZhY3Rvcn1cbiAgICAgICAgLz5cbiAgICAgICAgPFVpRW50aXR5XG4gICAgICAgICAgdWlUcmFuc2Zvcm09e3sgd2lkdGg6IDI1ICogc2NhbGVGYWN0b3IsIGhlaWdodDogMjUgKiBzY2FsZUZhY3RvciwgbWFyZ2luOiB7IGxlZnQ6IDggKiBzY2FsZUZhY3RvciB9IH19XG4gICAgICAgICAgdWlCYWNrZ3JvdW5kPXt7XG4gICAgICAgICAgICB0ZXh0dXJlTW9kZTogJ3N0cmV0Y2gnLFxuICAgICAgICAgICAgdGV4dHVyZToge1xuICAgICAgICAgICAgICBzcmM6IElDT05TLklORk8sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29sb3I6IENvbG9yNC5XaGl0ZSgpXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgIDwvVWlFbnRpdHk+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8VWlFbnRpdHlcbiAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICBtYXJnaW46IHsgdG9wOiAxNiAqIHNjYWxlRmFjdG9yIH0sXG4gICAgICB9fVxuICAgID5cbiAgICAgIDxMYWJlbFxuICAgICAgICB2YWx1ZT17bGFiZWx9XG4gICAgICAgIGZvbnRTaXplPXsxNiAqIHNjYWxlRmFjdG9yfVxuICAgICAgICBjb2xvcj17Q09MT1JTLldISVRFfVxuICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgIG1hcmdpbjogeyB0b3A6IDAsIHJpZ2h0OiAwLCBib3R0b206IDEwICogc2NhbGVGYWN0b3IsIGxlZnQ6IDAgfSxcbiAgICAgICAgfX1cbiAgICAgIC8+XG5cbiAgICAgIDxVaUVudGl0eVxuICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgaWQ9XCJ2aWRlb19jb250cm9sX3ZvbHVtZV9taW51c1wiXG4gICAgICAgICAgdmFsdWU9XCJNaW51c1wiXG4gICAgICAgICAgZm9udFNpemU9ezE0ICogc2NhbGVGYWN0b3J9XG4gICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgIG1hcmdpbjogeyB0b3A6IDAsIHJpZ2h0OiAxNiAqIHNjYWxlRmFjdG9yLCBib3R0b206IDAsIGxlZnQ6IDAgfSxcbiAgICAgICAgICAgIHdpZHRoOiA0OSAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAgIH19XG4gICAgICAgICAgaWNvbj17SUNPTlMuVk9MVU1FX01JTlVTX0JVVFRPTn1cbiAgICAgICAgICBvbmx5SWNvbj17dHJ1ZX1cbiAgICAgICAgICBpY29uVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICB3aWR0aDogMjUgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgIGhlaWdodDogMjUgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uTW91c2VEb3duPXsoKSA9PiBjb250cm9scy5zZXRWb2x1bWUoLVZPTFVNRV9TVEVQKX1cbiAgICAgICAgICBkaXNhYmxlZD17aXNTb3VuZERpc2FibGVkIHx8ICF2aWRlbz8udm9sdW1lfVxuICAgICAgICAvPlxuICAgICAgICA8TGFiZWxcbiAgICAgICAgICB2YWx1ZT17dm9sdW1lUGVyY2VudGFnZX1cbiAgICAgICAgICBmb250U2l6ZT17MTggKiBzY2FsZUZhY3Rvcn1cbiAgICAgICAgICBjb2xvcj17Q09MT1JTLkdSQVl9XG4gICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgIG1hcmdpbjogeyB0b3A6IDAsIHJpZ2h0OiAxNiAqIHNjYWxlRmFjdG9yLCBib3R0b206IDAsIGxlZnQ6IDAgfSxcbiAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICAgIHdpZHRoOiA1MCAqIHNjYWxlRmFjdG9yXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIGlkPVwidmlkZW9fY29udHJvbF92b2x1bWVfcGx1c1wiXG4gICAgICAgICAgdmFsdWU9XCJQbHVzXCJcbiAgICAgICAgICBmb250U2l6ZT17MTQgKiBzY2FsZUZhY3Rvcn1cbiAgICAgICAgICBpY29uPXtJQ09OUy5WT0xVTUVfUExVU19CVVRUT059XG4gICAgICAgICAgb25seUljb249e3RydWV9XG4gICAgICAgICAgaWNvblRyYW5zZm9ybT17e1xuICAgICAgICAgICAgd2lkdGg6IDI1ICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICBoZWlnaHQ6IDI1ICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgfX1cbiAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgbWFyZ2luOiB7IHRvcDogMCwgcmlnaHQ6IDE2ICogc2NhbGVGYWN0b3IsIGJvdHRvbTogMCwgbGVmdDogMCB9LFxuICAgICAgICAgICAgd2lkdGg6IDQ5ICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4gY29udHJvbHMuc2V0Vm9sdW1lKFZPTFVNRV9TVEVQKX1cbiAgICAgICAgICBkaXNhYmxlZD17aXNTb3VuZERpc2FibGVkIHx8IHZpZGVvPy52b2x1bWUgPT09IDF9XG4gICAgICAgIC8+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBpZD1cInZpZGVvX2NvbnRyb2xfdm9sdW1lX211dGVcIlxuICAgICAgICAgIHZhcmlhbnQ9eyF2aWRlbz8udm9sdW1lID8gXCJwcmltYXJ5XCIgOiBcInNlY29uZGFyeVwifVxuICAgICAgICAgIGZvbnRTaXplPXsxOCAqIHNjYWxlRmFjdG9yfVxuICAgICAgICAgIGljb25UcmFuc2Zvcm09e3sgd2lkdGg6IDI0ICogc2NhbGVGYWN0b3IsIGhlaWdodDogMjQgKiBzY2FsZUZhY3Rvcn19XG4gICAgICAgICAgb25seUljb25cbiAgICAgICAgICBpY29uPXtJQ09OUy5NVVRFfVxuICAgICAgICAgIGljb25CYWNrZ3JvdW5kPXt7XG4gICAgICAgICAgICBjb2xvcjogdmlkZW8/LnZvbHVtZSA/IENvbG9yNC5XaGl0ZSgpIDogQ29sb3I0LkJsYWNrKClcbiAgICAgICAgICB9fVxuICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICBib3JkZXJDb2xvcjogQ29sb3I0LmZyb21IZXhTdHJpbmcoJyNGQ0ZDRkMnKSxcbiAgICAgICAgICAgIGJvcmRlcldpZHRoOiAyLFxuICAgICAgICAgICAgd2lkdGg6IDQ5ICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICBoZWlnaHQ6IDQyICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgICAgY29udHJvbHMuc2V0Vm9sdW1lKCF2aWRlbz8udm9sdW1lID8gMTAwIDogMClcbiAgICAgICAgICB9fVxuICAgICAgICAgIGRpc2FibGVkPXtpc1NvdW5kRGlzYWJsZWR9XG4gICAgICAgIC8+XG4gICAgICA8L1VpRW50aXR5PlxuICAgIDwvVWlFbnRpdHk+XG4gIClcbn1cbiJdfQ==