@streamscloud/embeddable 4.0.0 → 5.1.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 (58) hide show
  1. package/dist/ads/ad-card/cmp.ad-card.svelte +34 -7
  2. package/dist/ads/ad-card/cmp.ad-card.svelte.d.ts +1 -1
  3. package/dist/ads/ad-card/mapper.js +1 -0
  4. package/dist/ads/ad-card/operations.generated.d.ts +1 -0
  5. package/dist/ads/ad-card/operations.generated.js +1 -0
  6. package/dist/ads/ad-card/operations.graphql +1 -0
  7. package/dist/ads/ad-card/types.d.ts +1 -0
  8. package/dist/products/product-card/cmp.product-card.svelte +3 -2
  9. package/dist/short-videos/short-video-viewer/cmp.short-video-controls.svelte +24 -13
  10. package/dist/short-videos/short-video-viewer/cmp.short-video-controls.svelte.d.ts +2 -2
  11. package/dist/short-videos/short-video-viewer/cmp.short-video-viewer.svelte +4 -3
  12. package/dist/short-videos/short-video-viewer/cmp.short-video-viewer.svelte.d.ts +3 -2
  13. package/dist/short-videos/short-video-viewer/index.d.ts +2 -2
  14. package/dist/short-videos/short-video-viewer/index.js +1 -1
  15. package/dist/short-videos/short-video-viewer/mapper.d.ts +1 -1
  16. package/dist/short-videos/short-video-viewer/mapper.js +38 -5
  17. package/dist/short-videos/short-video-viewer/operations.generated.d.ts +1 -0
  18. package/dist/short-videos/short-video-viewer/operations.generated.js +87 -98
  19. package/dist/short-videos/short-video-viewer/operations.graphql +40 -2
  20. package/dist/short-videos/short-video-viewer/types.d.ts +35 -6
  21. package/dist/short-videos/short-video-viewer/types.js +1 -1
  22. package/dist/short-videos/short-video-viewer/ui-manager.svelte.js +2 -2
  23. package/dist/short-videos/short-videos-player/cmp.short-videos-player.svelte +3 -1
  24. package/dist/short-videos/short-videos-player/cmp.short-videos-player.svelte.d.ts +4 -0
  25. package/dist/short-videos/short-videos-player/controls.svelte +37 -20
  26. package/dist/short-videos/short-videos-player/controls.svelte.d.ts +2 -1
  27. package/dist/short-videos/short-videos-player/index.js +6 -0
  28. package/dist/short-videos/short-videos-player/operations.generated.d.ts +1 -0
  29. package/dist/short-videos/short-videos-player/operations.generated.js +73 -84
  30. package/dist/short-videos/short-videos-player/short-videos-player-view.svelte +19 -6
  31. package/dist/short-videos/short-videos-player/short-videos-player-view.svelte.d.ts +4 -0
  32. package/dist/short-videos/short-videos-player/types.d.ts +9 -9
  33. package/dist/short-videos/short-videos-player/ui-manager.svelte.d.ts +1 -0
  34. package/dist/short-videos/short-videos-player/ui-manager.svelte.js +2 -1
  35. package/dist/streams/layout/models/mapper.js +2 -1
  36. package/dist/streams/layout/models/stream-layout-short-video-model.d.ts +1 -0
  37. package/dist/streams/stream-player/cmp.stream-player.svelte +6 -4
  38. package/dist/streams/stream-player/cmp.stream-player.svelte.d.ts +2 -0
  39. package/dist/streams/stream-player/controls.svelte +25 -5
  40. package/dist/streams/stream-player/controls.svelte.d.ts +2 -0
  41. package/dist/streams/stream-player/index.d.ts +2 -0
  42. package/dist/streams/stream-player/index.js +2 -1
  43. package/dist/streams/stream-player/mapper.d.ts +1 -1
  44. package/dist/streams/stream-player/mapper.js +1 -1
  45. package/dist/streams/stream-player/ui-manager.svelte.d.ts +1 -0
  46. package/dist/streams/stream-player/ui-manager.svelte.js +2 -1
  47. package/dist/ui/line-clamp/cmp.line-clamp.svelte +35 -13
  48. package/dist/ui/player/cmp.player-slider.svelte +75 -9
  49. package/dist/ui/progress/cmp.progress.svelte +4 -1
  50. package/dist/ui/seek-bar/cmp.seek-bar.svelte +134 -28
  51. package/dist/ui/seek-bar/cmp.seek-bar.svelte.d.ts +3 -0
  52. package/dist/ui/video/cmp.video.svelte +40 -42
  53. package/dist/ui/video/cmp.video.svelte.d.ts +2 -0
  54. package/dist/ui/video/index.d.ts +1 -0
  55. package/dist/ui/video/index.js +1 -0
  56. package/dist/ui/video/types.d.ts +4 -0
  57. package/dist/ui/video/types.js +5 -0
  58. package/package.json +5 -1
@@ -10,15 +10,15 @@
10
10
  import { randomNanoid } from '../../core/utils/string-generator';
11
11
  import { Icon, IconColor } from '../icon';
12
12
  import { MediaVolumeManager, PlaybackManager } from '../media-playback';
13
- import { Progress } from '../progress';
14
13
  import { SeekBar } from '../seek-bar';
14
+ import { ScrubberPosition } from './types';
15
15
  import IconPause from '@fluentui/svg-icons/icons/pause_20_regular.svg?raw';
16
16
  import IconPlay from '@fluentui/svg-icons/icons/play_20_regular.svg?raw';
17
17
  import IconSpeaker from '@fluentui/svg-icons/icons/speaker_2_20_regular.svg?raw';
18
18
  import IconSpeakerMute from '@fluentui/svg-icons/icons/speaker_mute_20_regular.svg?raw';
19
19
  import { onDestroy, onMount, untrack } from 'svelte';
20
- import { slide } from 'svelte/transition';
21
- let { src, poster, id = randomNanoid(), controls = true, autoplay = false, loop = false, inert = false, hideSpeaker = false, intersectionContainer, on } = $props();
20
+ import { fade } from 'svelte/transition';
21
+ let { src, poster, id = randomNanoid(), controls = true, autoplay = false, loop = false, inert = false, hideSpeaker = false, intersectionContainer, scrubberPosition = ScrubberPosition.Bottom, on } = $props();
22
22
  onMount(() => {
23
23
  var _a;
24
24
  PlaybackManager.registerMountedPlayer(id, {
@@ -29,12 +29,10 @@ onMount(() => {
29
29
  pause();
30
30
  },
31
31
  onStop: (inRespectToNewlyActivatedVideo) => {
32
- if (inRespectToNewlyActivatedVideo && autoplay === 'on-appearance') {
33
- pause();
34
- }
35
- else {
36
- stop();
32
+ if (autoplay === 'on-appearance' && inRespectToNewlyActivatedVideo) {
33
+ return;
37
34
  }
35
+ stop();
38
36
  },
39
37
  onToggle: () => {
40
38
  togglePlay();
@@ -50,8 +48,8 @@ onMount(() => {
50
48
  }
51
49
  });
52
50
  (_a = on === null || on === void 0 ? void 0 : on.loaded) === null || _a === void 0 ? void 0 : _a.call(on, { id, src });
53
- if (video) {
54
- intersectionObserver.observe(video);
51
+ if (videoContainerRef) {
52
+ intersectionObserver.observe(videoContainerRef);
55
53
  }
56
54
  });
57
55
  onDestroy(() => {
@@ -64,8 +62,8 @@ onDestroy(() => {
64
62
  }
65
63
  });
66
64
  let video = $state.raw(undefined);
65
+ let videoContainerRef = $state.raw(undefined);
67
66
  let showControlsOnHover = $state(false);
68
- let needShowProgress = $state(false);
69
67
  let isVideoPaused = $state(true);
70
68
  let percentageCompleted = $state(0);
71
69
  let everActivated = $state(false);
@@ -187,9 +185,7 @@ const onTimeUpdate = (e) => {
187
185
  percentageCompleted = video.currentTime / video.duration || 0;
188
186
  notifyProgress();
189
187
  };
190
- const onLoaded = (e) => __awaiter(void 0, void 0, void 0, function* () {
191
- const video = e.target;
192
- needShowProgress = video.duration >= 8;
188
+ const onLoaded = () => __awaiter(void 0, void 0, void 0, function* () {
193
189
  setVolume(MediaVolumeManager.volumeLevel);
194
190
  setMuted(MediaVolumeManager.isMuted);
195
191
  });
@@ -233,11 +229,13 @@ const notifyProgress = () => {
233
229
  const handleSeek = (percent) => {
234
230
  if (video) {
235
231
  video.currentTime = video.duration * percent;
232
+ percentageCompleted = percent;
233
+ notifyProgress();
236
234
  }
237
235
  };
238
236
  </script>
239
237
 
240
- <div class="video" onmouseenter={() => setShowControlsOnHover(true)} onmouseleave={() => setShowControlsOnHover(false)} role="none" inert={inert}>
238
+ <div class="video" role="none" inert={inert} bind:this={videoContainerRef}>
241
239
  <video
242
240
  class="video__video"
243
241
  class:video__video--not-activated={!everActivated}
@@ -281,18 +279,22 @@ const handleSeek = (percent) => {
281
279
  {/if}
282
280
 
283
281
  {#if everActivated}
284
- <div class="video__progress-container">
285
- {#if needShowProgress}
286
- {#if showControlsOnHover}
287
- <div class="video__seek-bar" onclick={(e) => e.stopPropagation()} onkeydown={() => ({})} role="none" transition:slide>
288
- <SeekBar value={percentageCompleted} on={{ seek: handleSeek }} />
289
- </div>
290
- {/if}
291
- {#if !showControlsOnHover}
292
- <div class="video__progress" in:slide>
293
- <Progress value={percentageCompleted} />
294
- </div>
295
- {/if}
282
+ <div
283
+ class="video__progress-container"
284
+ class:video__progress-container--top={scrubberPosition === ScrubberPosition.Top}
285
+ class:video__progress-container--bottom={scrubberPosition === ScrubberPosition.Bottom}
286
+ onmouseenter={() => setShowControlsOnHover(true)}
287
+ onmouseleave={() => setShowControlsOnHover(false)}
288
+ role="none">
289
+ {#if showControlsOnHover || (!showControlsOnHover && isVideoPaused)}
290
+ <div
291
+ class="video__seek-bar"
292
+ transition:fade={{ duration: isVideoPaused ? 0 : 300 }}
293
+ onclick={(e) => e.stopPropagation()}
294
+ onkeydown={() => ({})}
295
+ role="none">
296
+ <SeekBar value={percentageCompleted} on={{ seek: handleSeek }} />
297
+ </div>
296
298
  {/if}
297
299
  </div>
298
300
  {/if}
@@ -316,9 +318,6 @@ const handleSeek = (percent) => {
316
318
  --_video--border-radius: var(--video--border-radius, 0);
317
319
  --_video--media-fit: var(--video--media-fit, contain);
318
320
  --_video--poster--media-fit: var(--video--poster--media-fit, cover);
319
- --_video--progress--background-color: var(--video--progress--background-color, hsla(0, 0%, 0%, 0.5));
320
- --_video--progress--back-color: var(--video--progress--back-color);
321
- --_video--progress--front-color: var(--video--progress--front-color);
322
321
  height: 100%;
323
322
  min-height: 100%;
324
323
  max-height: 100%;
@@ -382,20 +381,19 @@ const handleSeek = (percent) => {
382
381
  }
383
382
  .video__progress-container {
384
383
  position: absolute;
385
- bottom: 0;
386
384
  left: 0;
387
385
  right: 0;
386
+ z-index: 1;
387
+ height: 2.5rem;
388
+ padding: 0.625rem 0.25rem;
388
389
  }
389
- .video__progress {
390
- margin-bottom: 1px;
391
- --progress--height: 0.125em;
392
- --progress--back-color: var(--_video--progress--back-color);
393
- --progress--front-color: var(--_video--progress--front-color);
390
+ .video__progress-container--top {
391
+ top: -0.625rem;
392
+ bottom: auto;
393
+ padding-bottom: 0.9375rem;
394
394
  }
395
- .video__seek-bar {
396
- padding: 0.625em 0.5em;
397
- background: var(--_video--progress--background-color);
398
- cursor: default;
399
- --seek-bar--back-color: var(--_video--progress--back-color);
400
- --seek-bar--front-color: var(--_video--progress--front-color);
395
+ .video__progress-container--bottom {
396
+ top: auto;
397
+ bottom: -0.625rem;
398
+ padding-top: 0.9375rem;
401
399
  }</style>
@@ -1,3 +1,4 @@
1
+ import { ScrubberPosition } from './types';
1
2
  type Props = {
2
3
  src: string;
3
4
  poster: string | null;
@@ -8,6 +9,7 @@ type Props = {
8
9
  intersectionContainer?: HTMLElement;
9
10
  inert?: boolean;
10
11
  hideSpeaker?: boolean;
12
+ scrubberPosition?: ScrubberPosition;
11
13
  on?: {
12
14
  loaded?: (data: {
13
15
  id: string;
@@ -1 +1,2 @@
1
1
  export { default as Video } from './cmp.video.svelte';
2
+ export { ScrubberPosition } from './types';
@@ -1 +1,2 @@
1
1
  export { default as Video } from './cmp.video.svelte';
2
+ export { ScrubberPosition } from './types';
@@ -0,0 +1,4 @@
1
+ export declare enum ScrubberPosition {
2
+ Top = 0,
3
+ Bottom = 1
4
+ }
@@ -0,0 +1,5 @@
1
+ export var ScrubberPosition;
2
+ (function (ScrubberPosition) {
3
+ ScrubberPosition[ScrubberPosition["Top"] = 0] = "Top";
4
+ ScrubberPosition[ScrubberPosition["Bottom"] = 1] = "Bottom";
5
+ })(ScrubberPosition || (ScrubberPosition = {}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@streamscloud/embeddable",
3
- "version": "4.0.0",
3
+ "version": "5.1.0",
4
4
  "author": "StreamsCloud",
5
5
  "repository": "https://github.com/StreamsCloud/streamscloud-frontend-packages.git",
6
6
  "type": "module",
@@ -36,6 +36,10 @@
36
36
  "types": "./dist/short-videos/short-videos-player/index.d.ts",
37
37
  "svelte": "./dist/short-videos/short-videos-player/index.js"
38
38
  },
39
+ "./short-video-viewer": {
40
+ "types": "./dist/short-videos/short-video-viewer/index.d.ts",
41
+ "svelte": "./dist/short-videos/short-video-viewer/index.js"
42
+ },
39
43
  "./stream-layout": {
40
44
  "types": "./dist/streams/layout/index.d.ts",
41
45
  "import": "./dist/streams/layout/index.js",