@streamscloud/embeddable 7.0.2 → 7.1.0-1759150805460

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 (135) hide show
  1. package/dist/ads/ad-card/cmp.ad-card.svelte +13 -12
  2. package/dist/ads/ad-card/cmp.ad-card.svelte.d.ts +2 -2
  3. package/dist/content-player/cmp.content-player.svelte +224 -0
  4. package/dist/content-player/cmp.content-player.svelte.d.ts +33 -0
  5. package/dist/content-player/content-player-config.svelte.d.ts +49 -0
  6. package/dist/content-player/content-player-config.svelte.js +43 -0
  7. package/dist/content-player/controls-and-attachments.svelte +275 -0
  8. package/dist/content-player/controls-and-attachments.svelte.d.ts +28 -0
  9. package/dist/content-player/fade-mixins.scss +12 -0
  10. package/dist/content-player/index.d.ts +2 -0
  11. package/dist/content-player/index.js +2 -0
  12. package/dist/content-player/overview-panel.svelte +85 -0
  13. package/dist/content-player/overview-panel.svelte.d.ts +10 -0
  14. package/dist/{streams/stream-player → content-player}/ui-manager.svelte.d.ts +10 -9
  15. package/dist/content-player/ui-manager.svelte.js +68 -0
  16. package/dist/index.d.ts +0 -1
  17. package/dist/index.js +0 -1
  18. package/dist/media-center/config/types.d.ts +1 -1
  19. package/dist/media-center/media-center/cmp.media-center.svelte +13 -9
  20. package/dist/media-center/media-center/overview.svelte +3 -2
  21. package/dist/media-center/media-center/short-video-resources-generator.d.ts +1 -1
  22. package/dist/media-center/model/types.d.ts +12 -0
  23. package/dist/posts/attachments/cmp.attachments.svelte +50 -0
  24. package/dist/{short-videos/short-video-viewer → posts/attachments}/cmp.attachments.svelte.d.ts +3 -3
  25. package/dist/posts/attachments/index.d.ts +1 -0
  26. package/dist/posts/attachments/index.js +1 -0
  27. package/dist/{short-videos/short-video-viewer/cmp.short-video-controls.svelte → posts/controls/cmp.controls.svelte} +21 -26
  28. package/dist/posts/controls/cmp.controls.svelte.d.ts +12 -0
  29. package/dist/posts/controls/index.d.ts +1 -0
  30. package/dist/posts/controls/index.js +1 -0
  31. package/dist/posts/index.d.ts +1 -0
  32. package/dist/posts/index.js +1 -0
  33. package/dist/posts/model/index.d.ts +1 -0
  34. package/dist/posts/model/index.js +1 -0
  35. package/dist/posts/model/types.d.ts +13 -0
  36. package/dist/posts/model/types.js +1 -0
  37. package/dist/{short-videos/short-video-viewer/cmp.attachments-horizontal.svelte → posts/post-viewer/attachments-horizontal.svelte} +2 -3
  38. package/dist/posts/post-viewer/attachments-horizontal.svelte.d.ts +13 -0
  39. package/dist/posts/post-viewer/cmp.post-viewer.svelte +120 -0
  40. package/dist/{short-videos/short-video-viewer/cmp.short-video-viewer.svelte.d.ts → posts/post-viewer/cmp.post-viewer.svelte.d.ts} +3 -2
  41. package/dist/posts/post-viewer/heading.svelte +76 -0
  42. package/dist/posts/post-viewer/heading.svelte.d.ts +9 -0
  43. package/dist/posts/post-viewer/index.d.ts +4 -0
  44. package/dist/posts/post-viewer/index.js +3 -0
  45. package/dist/posts/post-viewer/mapper.d.ts +3 -0
  46. package/dist/{short-videos/short-video-viewer → posts/post-viewer}/mapper.js +33 -17
  47. package/dist/{short-videos/short-video-viewer → posts/post-viewer}/operations.generated.d.ts +2 -2
  48. package/dist/{short-videos/short-video-viewer → posts/post-viewer}/operations.generated.js +2 -2
  49. package/dist/{short-videos/short-video-viewer → posts/post-viewer}/operations.graphql +1 -1
  50. package/dist/posts/post-viewer/post-media.svelte +20 -0
  51. package/dist/posts/post-viewer/post-media.svelte.d.ts +12 -0
  52. package/dist/{short-videos/short-video-viewer/short-video-viewer-localization.d.ts → posts/post-viewer/post-viewer-localization.d.ts} +2 -3
  53. package/dist/{short-videos/short-video-viewer/short-video-viewer-localization.js → posts/post-viewer/post-viewer-localization.js} +3 -5
  54. package/dist/{short-videos/short-video-viewer → posts/post-viewer}/types.d.ts +24 -25
  55. package/dist/{short-videos/short-video-viewer → posts/post-viewer}/ui-manager.svelte.d.ts +5 -3
  56. package/dist/{short-videos/short-video-viewer → posts/post-viewer}/ui-manager.svelte.js +11 -4
  57. package/dist/posts/post-viewer/utils.d.ts +2 -0
  58. package/dist/posts/post-viewer/utils.js +13 -0
  59. package/dist/posts/social-interactions/index.d.ts +1 -0
  60. package/dist/posts/social-interactions/index.js +1 -0
  61. package/dist/posts/social-interactions/types.d.ts +9 -0
  62. package/dist/posts/social-interactions/types.js +1 -0
  63. package/dist/products/product-card/cmp.product-card.svelte +27 -8
  64. package/dist/products/product-card/cmp.product-card.svelte.d.ts +2 -1
  65. package/dist/short-videos/short-videos-player/cmp.short-videos-player.svelte +11 -17
  66. package/dist/short-videos/short-videos-player/cmp.short-videos-player.svelte.d.ts +1 -5
  67. package/dist/short-videos/short-videos-player/index.d.ts +20 -5
  68. package/dist/short-videos/short-videos-player/internal-short-video-analytics-handler.d.ts +1 -1
  69. package/dist/short-videos/short-videos-player/internal-short-video-analytics-handler.js +1 -1
  70. package/dist/short-videos/short-videos-player/internal-short-video-player-provider.d.ts +1 -1
  71. package/dist/short-videos/short-videos-player/mapper.js +2 -2
  72. package/dist/short-videos/short-videos-player/short-videos-player-view.svelte +50 -248
  73. package/dist/short-videos/short-videos-player/short-videos-player-view.svelte.d.ts +2 -10
  74. package/dist/short-videos/short-videos-player/types.d.ts +6 -7
  75. package/dist/streams/layout/element-views/cmp.short-video-stream-element.svelte +3 -3
  76. package/dist/streams/layout/models/index.d.ts +1 -1
  77. package/dist/streams/layout/models/index.js +1 -1
  78. package/dist/streams/layout/models/mapper.d.ts +2 -2
  79. package/dist/streams/layout/models/mapper.js +6 -6
  80. package/dist/streams/stream-player/index.d.ts +25 -4
  81. package/dist/streams/stream-player/internal-stream-analytics-handler.d.ts +2 -0
  82. package/dist/streams/stream-player/internal-stream-analytics-handler.js +2 -0
  83. package/dist/streams/stream-player/stream-overview.svelte +47 -123
  84. package/dist/streams/stream-player/stream-overview.svelte.d.ts +1 -5
  85. package/dist/streams/stream-player/stream-player-buffer.svelte.d.ts +1 -1
  86. package/dist/streams/stream-player/stream-player-localization.d.ts +1 -5
  87. package/dist/streams/stream-player/stream-player-localization.js +2 -10
  88. package/dist/streams/stream-player/stream-player-view.svelte +229 -0
  89. package/dist/streams/stream-player/stream-player-view.svelte.d.ts +8 -0
  90. package/dist/streams/stream-player/types.d.ts +4 -4
  91. package/dist/ui/{player → player-slider}/cmp.player-slider.svelte.d.ts +2 -10
  92. package/dist/ui/{player → player-slider}/types.d.ts +9 -0
  93. package/dist/ui/player-slider/types.js +1 -0
  94. package/package.json +5 -1
  95. package/dist/short-videos/short-video-viewer/cmp.attachments-horizontal.svelte.d.ts +0 -13
  96. package/dist/short-videos/short-video-viewer/cmp.attachments.svelte +0 -52
  97. package/dist/short-videos/short-video-viewer/cmp.short-video-controls.svelte.d.ts +0 -19
  98. package/dist/short-videos/short-video-viewer/cmp.short-video-heading.svelte +0 -89
  99. package/dist/short-videos/short-video-viewer/cmp.short-video-heading.svelte.d.ts +0 -9
  100. package/dist/short-videos/short-video-viewer/cmp.short-video-product-card.svelte +0 -26
  101. package/dist/short-videos/short-video-viewer/cmp.short-video-product-card.svelte.d.ts +0 -16
  102. package/dist/short-videos/short-video-viewer/cmp.short-video-viewer.svelte +0 -146
  103. package/dist/short-videos/short-video-viewer/index.d.ts +0 -5
  104. package/dist/short-videos/short-video-viewer/index.js +0 -4
  105. package/dist/short-videos/short-video-viewer/mapper.d.ts +0 -3
  106. package/dist/short-videos/short-video-viewer/short-video-attachments-localization.d.ts +0 -5
  107. package/dist/short-videos/short-video-viewer/short-video-attachments-localization.js +0 -7
  108. package/dist/short-videos/short-videos-player/controls.svelte +0 -269
  109. package/dist/short-videos/short-videos-player/controls.svelte.d.ts +0 -23
  110. package/dist/short-videos/short-videos-player/fade-mixins.scss +0 -12
  111. package/dist/short-videos/short-videos-player/short-videos-player-localization.d.ts +0 -7
  112. package/dist/short-videos/short-videos-player/short-videos-player-localization.js +0 -11
  113. package/dist/short-videos/short-videos-player/ui-manager.svelte.d.ts +0 -24
  114. package/dist/short-videos/short-videos-player/ui-manager.svelte.js +0 -47
  115. package/dist/streams/cmp.stream-product-card.svelte +0 -25
  116. package/dist/streams/cmp.stream-product-card.svelte.d.ts +0 -16
  117. package/dist/streams/stream-player/button-mixins.scss +0 -24
  118. package/dist/streams/stream-player/controls.svelte +0 -301
  119. package/dist/streams/stream-player/controls.svelte.d.ts +0 -20
  120. package/dist/streams/stream-player/fade-mixins.scss +0 -12
  121. package/dist/streams/stream-player/stream-player.svelte +0 -395
  122. package/dist/streams/stream-player/stream-player.svelte.d.ts +0 -16
  123. package/dist/streams/stream-player/ui-manager.svelte.js +0 -63
  124. /package/dist/{short-videos/short-videos-player → content-player}/button-mixins.scss +0 -0
  125. /package/dist/{ui/player → media-center/model}/types.js +0 -0
  126. /package/dist/{short-videos/short-video-viewer → posts/post-viewer}/types.js +0 -0
  127. /package/dist/ui/{player → player-slider}/cmp.player-slider.svelte +0 -0
  128. /package/dist/ui/{player → player-slider}/index.d.ts +0 -0
  129. /package/dist/ui/{player → player-slider}/index.js +0 -0
  130. /package/dist/ui/{player → player-slider}/player-buffer.svelte.d.ts +0 -0
  131. /package/dist/ui/{player → player-slider}/player-buffer.svelte.js +0 -0
  132. /package/dist/ui/{player → player-slider}/prevent-slider-scroll.d.ts +0 -0
  133. /package/dist/ui/{player → player-slider}/prevent-slider-scroll.js +0 -0
  134. /package/dist/ui/{player → player-slider}/wheel-gestures-adapter.d.ts +0 -0
  135. /package/dist/ui/{player → player-slider}/wheel-gestures-adapter.js +0 -0
@@ -1,25 +1,19 @@
1
- <script lang="ts">import { MediaCenter, MediaCenterMode } from '../../media-center/media-center';
2
- import { createShadowRoot } from '../../ui/shadow-dom';
1
+ <script lang="ts">import { createShadowRoot } from '../../ui/shadow-dom';
2
+ import { default as ShortVideoPlayerView } from './short-videos-player-view.svelte';
3
3
  import { mount, unmount } from 'svelte';
4
- let { dataProvider, socialInteractionsHandler, locale, showStreamsCloudWatermark, disableBackground, analyticsHandler, on, mediaCenterConfig } = $props();
4
+ let { dataProvider, socialInteractionsHandler, locale, showStreamsCloudWatermark, disableBackground, analyticsHandler, on } = $props();
5
5
  const initHost = (node) => {
6
6
  const shadowRoot = createShadowRoot(node);
7
- const mounted = mount(MediaCenter, {
7
+ const mounted = mount(ShortVideoPlayerView, {
8
8
  target: shadowRoot,
9
9
  props: {
10
- config: mediaCenterConfig || null,
11
- playerProps: {
12
- mode: MediaCenterMode.ShortVideos,
13
- props: {
14
- dataProvider,
15
- socialInteractionsHandler,
16
- disableBackground,
17
- locale,
18
- showStreamsCloudWatermark,
19
- analyticsHandler,
20
- on
21
- }
22
- }
10
+ dataProvider,
11
+ socialInteractionsHandler,
12
+ disableBackground,
13
+ locale,
14
+ showStreamsCloudWatermark,
15
+ analyticsHandler,
16
+ on
23
17
  }
24
18
  });
25
19
  return {
@@ -1,8 +1,4 @@
1
- import type { IMediaCenterConfig } from '../../media-center/config/types';
2
1
  import type { ShortVideoPlayerProps } from './types';
3
- type $$ComponentProps = ShortVideoPlayerProps & {
4
- mediaCenterConfig?: IMediaCenterConfig;
5
- };
6
- declare const Cmp: import("svelte").Component<$$ComponentProps, {}, "">;
2
+ declare const Cmp: import("svelte").Component<ShortVideoPlayerProps, {}, "">;
7
3
  type Cmp = ReturnType<typeof Cmp>;
8
4
  export default Cmp;
@@ -1,9 +1,10 @@
1
+ import type { Locale } from '../../core/locale';
1
2
  import { type IMediaCenterConfig } from '../../media-center/config/types';
2
- import type { IPostSocialInteractionsHandler } from '../short-video-viewer';
3
- import type { IPlayerItemsProvider } from '../../ui/player';
3
+ import type { IPostSocialInteractionsHandler } from '../../posts/social-interactions';
4
+ import type { IPlayerItemsProvider } from '../../ui/player-slider';
4
5
  import { default as ShortVideosPlayer } from './cmp.short-videos-player.svelte';
5
6
  import { mapToShortVideoPlayerModel } from './mapper';
6
- import { type PlayerSettings, type IShortVideoAnalyticsHandler, type ShortVideoPlayerModel } from './types';
7
+ import { type IShortVideoAnalyticsHandler, type ShortVideoPlayerModel } from './types';
7
8
  export { ShortVideosPlayer, type ShortVideoPlayerModel };
8
9
  export type { IMediaCenterConfig, IPlayerItemsProvider, IShortVideoAnalyticsHandler };
9
10
  export { mapToShortVideoPlayerModel };
@@ -88,16 +89,30 @@ export { mapToShortVideoPlayerModel };
88
89
  * });
89
90
  * ```
90
91
  */
91
- export declare function openShortVideosPlayer(init: PlayerSettings & {
92
+ export declare function openShortVideosPlayer(init: {
92
93
  shortVideosProvider: IPlayerItemsProvider<ShortVideoPlayerModel>;
93
94
  mediaCenterConfig?: IMediaCenterConfig;
94
95
  analyticsHandler?: IShortVideoAnalyticsHandler;
95
96
  socialInteractionsHandler?: IPostSocialInteractionsHandler;
97
+ disableBackground?: boolean;
98
+ locale?: Locale;
99
+ showStreamsCloudWatermark?: boolean;
100
+ on?: {
101
+ playerClosed?: () => void;
102
+ videoActivated?: (id: string) => void;
103
+ };
96
104
  }): void;
97
- export declare function openShortVideosPlayer(init: PlayerSettings & {
105
+ export declare function openShortVideosPlayer(init: {
98
106
  ids: string[];
99
107
  initiator: string;
100
108
  graphqlOrigin?: string;
101
109
  initialId?: string;
102
110
  mediaPageId?: string;
111
+ disableBackground?: boolean;
112
+ locale?: Locale;
113
+ showStreamsCloudWatermark?: boolean;
114
+ on?: {
115
+ playerClosed?: () => void;
116
+ videoActivated?: (id: string) => void;
117
+ };
103
118
  }): void;
@@ -5,6 +5,6 @@ export declare class InternalShortVideoAnalyticsHandler implements IShortVideoAn
5
5
  trackShortVideoView: (videoId: string) => void;
6
6
  trackShortVideoProductImpression: (productId: string, videoId: string) => void;
7
7
  trackShortVideoProductClick: (productId: string, videoId: string) => void;
8
- trackAdImpression: (adId: string) => void;
9
8
  trackAdClick: (adId: string) => void;
9
+ trackAdImpression: (adId: string) => void;
10
10
  }
@@ -10,6 +10,6 @@ export class InternalShortVideoAnalyticsHandler {
10
10
  trackShortVideoView = (videoId) => AppEventsTracker.trackShortVideoView(videoId);
11
11
  trackShortVideoProductImpression = (productId, videoId) => AppEventsTracker.trackShortVideoProductImpression(productId, videoId);
12
12
  trackShortVideoProductClick = (productId, videoId) => AppEventsTracker.trackShortVideoProductClick(productId, videoId);
13
- trackAdImpression = (adId) => AppEventsTracker.trackAdImpression(adId);
14
13
  trackAdClick = (adId) => AppEventsTracker.trackAdClick(adId);
14
+ trackAdImpression = (adId) => AppEventsTracker.trackAdImpression(adId);
15
15
  }
@@ -1,4 +1,4 @@
1
- import type { IPlayerItemsProvider } from '../../ui/player';
1
+ import type { IPlayerItemsProvider } from '../../ui/player-slider';
2
2
  import type { ShortVideoPlayerModel } from './types';
3
3
  export declare class InternalShortVideoPlayerProvider implements IPlayerItemsProvider<ShortVideoPlayerModel> {
4
4
  initialData: IPlayerItemsProvider<ShortVideoPlayerModel>['initialData'];
@@ -1,7 +1,7 @@
1
1
  import { ProfileType } from '../../core/enums';
2
- import { mapToShortVideoViewerModel } from '../short-video-viewer';
2
+ import { mapToPostViewerModel } from '../../posts/post-viewer';
3
3
  export const mapToShortVideoPlayerModel = (payload) => {
4
- const viewerModel = mapToShortVideoViewerModel(payload);
4
+ const viewerModel = mapToPostViewerModel(payload);
5
5
  return {
6
6
  ...viewerModel,
7
7
  analyticsOrganizationId: payload.ownerProfile.type === ProfileType.Organization ? payload.ownerProfile.id : null
@@ -7,275 +7,77 @@
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
- import { handleEsc } from '../../core/document.event-handlers';
10
+ import { ContentPlayer, ContentPlayerConfig } from '../../content-player';
11
11
  import { preloadImage } from '../../core/image-preloader';
12
- import { ShortVideoViewer } from '../short-video-viewer';
13
- import { Icon } from '../../ui/icon';
14
- import { Loading } from '../../ui/loading';
15
- import { PlayerBuffer, PlayerSlider } from '../../ui/player';
16
- import { SpotlightLayout } from '../../ui/spotlight-layout';
17
- import { SwipeIndicator } from '../../ui/swipe-indicator';
18
- import { default as Controls } from './controls.svelte';
12
+ import { getPostCoverImage } from '../../posts/post-viewer';
13
+ import { PlayerBuffer } from '../../ui/player-slider';
19
14
  import { InternalShortVideoPlayerProvider } from './internal-short-video-player-provider';
20
- import { ShortVideosPlayerLocalization } from './short-videos-player-localization';
21
- import { ShortVideosPlayerUiManager } from './ui-manager.svelte';
22
- import IconDismiss from '@fluentui/svg-icons/icons/dismiss_28_regular.svg?raw';
23
15
  import { untrack } from 'svelte';
24
- let { dataProvider, socialInteractionsHandler, locale = 'en', showStreamsCloudWatermark, disableBackground, analyticsHandler, on, categoriesSwitcher, playerLogo = null, fadeContent = false } = $props();
25
- const localization = $derived(new ShortVideosPlayerLocalization(locale));
26
- let everTouched = $state(false);
27
- let background = $state(null);
28
- let bufferIsLoading = $state(false);
29
- let buffer = $state.raw(null);
16
+ let { dataProvider, socialInteractionsHandler, locale = 'en', showStreamsCloudWatermark, disableBackground, analyticsHandler, on, mediaCenterData } = $props();
30
17
  $effect(() => {
31
18
  void dataProvider;
32
19
  untrack(() => {
20
+ contentPlayerConfig.playerBuffer = null;
33
21
  initBuffer(dataProvider);
34
22
  });
35
23
  });
24
+ $effect(() => contentPlayerConfig.updateMediaCenterData(mediaCenterData));
36
25
  const initBuffer = (dataProvider) => __awaiter(void 0, void 0, void 0, function* () {
37
- bufferIsLoading = true;
38
26
  if (dataProvider instanceof InternalShortVideoPlayerProvider) {
39
27
  yield dataProvider.prefetch();
40
28
  }
41
29
  new PlayerBuffer(dataProvider, {
42
30
  preloaded: (instance) => __awaiter(void 0, void 0, void 0, function* () {
43
31
  if (instance.loaded.length) {
44
- const coverUrl = resolveVideoCover(instance.loaded[0]);
32
+ const coverUrl = getPostCoverImage(instance.loaded[0]);
45
33
  yield preloadImage(coverUrl);
46
- background = coverUrl;
34
+ contentPlayerConfig.setBackgroundImageUrl(coverUrl);
47
35
  }
48
- buffer = instance;
49
- bufferIsLoading = false;
36
+ contentPlayerConfig.playerBuffer = instance;
50
37
  })
51
38
  });
52
39
  });
53
- const uiManager = new ShortVideosPlayerUiManager();
54
- const onItemActivated = (id) => {
55
- var _a;
56
- const shortVideo = buffer === null || buffer === void 0 ? void 0 : buffer.loaded.find((x) => x.id === id);
57
- if (!shortVideo) {
58
- return;
59
- }
60
- background = resolveVideoCover(shortVideo);
61
- if (shortVideo.analyticsOrganizationId) {
62
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.setOrganizationId(shortVideo.analyticsOrganizationId);
40
+ const contentPlayerConfig = new ContentPlayerConfig({
41
+ playerBuffer: null,
42
+ mappers: {
43
+ postModelFromCurrentItem: (item) => item
44
+ },
45
+ disableBackground,
46
+ locale,
47
+ showStreamsCloudWatermark,
48
+ socialInteractionsHandler,
49
+ mediaCenterData,
50
+ callbacks: {
51
+ close: on === null || on === void 0 ? void 0 : on.playerClosed,
52
+ productClick: (id, videoId) => {
53
+ analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackShortVideoProductClick(id, videoId);
54
+ },
55
+ productImpression: (id, videoId) => {
56
+ analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackShortVideoProductImpression(id, videoId);
57
+ },
58
+ adClick: (id) => {
59
+ analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackAdClick(id);
60
+ },
61
+ adImpression: (id) => {
62
+ analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackAdImpression(id);
63
+ }
64
+ },
65
+ playerSliderCallbacks: {
66
+ itemActivated: (id) => {
67
+ var _a, _b;
68
+ const shortVideo = (_a = contentPlayerConfig.playerBuffer) === null || _a === void 0 ? void 0 : _a.loaded.find((x) => x.id === id);
69
+ if (!shortVideo) {
70
+ return;
71
+ }
72
+ contentPlayerConfig.setBackgroundImageUrl(getPostCoverImage(shortVideo));
73
+ if (shortVideo.analyticsOrganizationId) {
74
+ analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.setOrganizationId(shortVideo.analyticsOrganizationId);
75
+ }
76
+ analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackShortVideoView(id);
77
+ (_b = on === null || on === void 0 ? void 0 : on.videoActivated) === null || _b === void 0 ? void 0 : _b.call(on, id);
78
+ }
63
79
  }
64
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackShortVideoView(id);
65
- (_a = on === null || on === void 0 ? void 0 : on.videoActivated) === null || _a === void 0 ? void 0 : _a.call(on, id);
66
- };
67
- const resolveVideoCover = (shortVideo) => {
68
- return shortVideo.media.isImage ? shortVideo.media.url : shortVideo.media.thumbnailUrl;
69
- };
70
- const contentMounted = (node) => {
71
- const markAsTouched = () => {
72
- everTouched = true;
73
- node.removeEventListener('touchstart', markAsTouched);
74
- node.removeEventListener('wheel', markAsTouched);
75
- node.removeEventListener('click', markAsTouched);
76
- node.removeEventListener('keypress', markAsTouched);
77
- };
78
- node.addEventListener('touchstart', markAsTouched);
79
- node.addEventListener('wheel', markAsTouched);
80
- node.addEventListener('click', markAsTouched);
81
- node.addEventListener('keypress', markAsTouched);
82
- };
83
- const handleDimensionsChanged = (dimensions) => {
84
- uiManager.updateDimensions({
85
- mainViewColumnWidth: dimensions.mainSceneWidth,
86
- viewTotalWidth: dimensions.totalWidth
87
- });
88
- };
89
- const onMediaCenterHeaderMounted = (data) => {
90
- uiManager.updateMediaCenterHeaderHeight(data.height);
91
- };
92
- const onPlayerClose = () => {
93
- var _a;
94
- (_a = on === null || on === void 0 ? void 0 : on.playerClosed) === null || _a === void 0 ? void 0 : _a.call(on);
95
- };
96
- const onShortVideoProductClick = (productId, videoId) => {
97
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackShortVideoProductClick(productId, videoId);
98
- };
99
- const onShortVideoProductImpression = (productId, videoId) => {
100
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackShortVideoProductImpression(productId, videoId);
101
- };
102
- const onShortVideoAdClick = (adId) => {
103
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackAdClick(adId);
104
- };
105
- const onShortVideoAdImpression = (adId) => {
106
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackAdImpression(adId);
107
- };
80
+ });
108
81
  </script>
109
82
 
110
- <svelte:document onkeydown={(e) => handleEsc(e, onPlayerClose)} />
111
-
112
- <div
113
- class="short-videos-player-container"
114
- class:short-videos-player-container--background-enabled={!disableBackground}
115
- class:short-videos-player-container--background-loading={!disableBackground && !background}
116
- class:short-videos-player-container--faded={fadeContent}
117
- style={background && !disableBackground ? `--background-image: url(${background})` : null}>
118
- {#if categoriesSwitcher}
119
- {#snippet closeButton()}
120
- <button type="button" class="close-button" onclick={onPlayerClose}>
121
- <Icon src={IconDismiss} />
122
- </button>
123
- {/snippet}
124
- <div class="short-videos-player-container__media-center">
125
- {@render categoriesSwitcher({
126
- maxItemsWidth: Math.min(uiManager.mainViewColumnWidth * 1.4, uiManager.viewTotalWidth),
127
- onMounted: onMediaCenterHeaderMounted,
128
- closeButton: on?.playerClosed && closeButton
129
- })}
130
- </div>
131
- {/if}
132
-
133
- <div class="short-videos-player" style={uiManager.globalCssVariables}>
134
- {#if showStreamsCloudWatermark}
135
- <div class="short-videos-player__watermark">
136
- <a href="https://streamscloud.com/" tabindex="-1" aria-label="none">
137
- <img src="https://embedabble-assets.streamscloud-cdn.com/watermark.svg" alt="StreamsCloud" />
138
- </a>
139
- </div>
140
- {/if}
141
- {#if buffer && !bufferIsLoading}
142
- <SpotlightLayout ratio={9 / 16} on={{ dimensionsChanged: handleDimensionsChanged }}>
143
- <div class="short-videos-player__content" use:contentMounted>
144
- <PlayerSlider
145
- buffer={buffer}
146
- on={{
147
- itemActivated: onItemActivated
148
- }}>
149
- {#snippet children({ item })}
150
- <ShortVideoViewer
151
- model={item}
152
- socialInteractionsHandler={socialInteractionsHandler}
153
- autoplay="on-appearance"
154
- showAttachments={uiManager.showShortVideoOverlayAttachments}
155
- showControls={uiManager.showShortVideoOverlayControls}
156
- locale={localization.shortVideoViewerLocale}
157
- on={{
158
- productClick: (productId) => onShortVideoProductClick(productId, item.id),
159
- productImpression: (productId, videoId) => onShortVideoProductImpression(productId, videoId),
160
- adClick: onShortVideoAdClick,
161
- adImpression: onShortVideoAdImpression
162
- }} />
163
- {/snippet}
164
- </PlayerSlider>
165
- {#if uiManager.isMobileView && buffer.loaded.length > 1 && !everTouched}
166
- <SwipeIndicator locale={localization.swipeIndicatorLocale} />
167
- {/if}
168
- </div>
169
- </SpotlightLayout>
170
- <Controls
171
- buffer={buffer}
172
- uiManager={uiManager}
173
- localization={localization}
174
- socialInteractionsHandler={socialInteractionsHandler}
175
- playerLogo={playerLogo}
176
- showCloseButton={!categoriesSwitcher}
177
- on={{
178
- closePlayer: on?.playerClosed,
179
- productClick: (productId) => onShortVideoProductClick(productId, buffer?.current?.id || ''),
180
- productImpression: onShortVideoProductImpression,
181
- adClick: onShortVideoAdClick,
182
- adImpression: onShortVideoAdImpression
183
- }} />
184
- {:else}
185
- <Loading positionFixedCenter={true} timeout={1000} />
186
- {/if}
187
- </div>
188
- </div>
189
-
190
- <style>@keyframes fadeIn {
191
- 0% {
192
- opacity: 1;
193
- }
194
- 50% {
195
- opacity: 0.4;
196
- }
197
- 100% {
198
- opacity: 1;
199
- }
200
- }
201
- .short-videos-player-container {
202
- --short-videos-player--elements-opacity: 1;
203
- width: 100%;
204
- min-width: 100%;
205
- max-width: 100%;
206
- height: 100%;
207
- min-height: 100%;
208
- max-height: 100%;
209
- container-type: inline-size;
210
- display: flex;
211
- position: relative;
212
- }
213
- .short-videos-player-container--background-enabled {
214
- background-color: #c1c1c1;
215
- background-image: var(--background-image);
216
- background-size: cover;
217
- background-blend-mode: multiply;
218
- }
219
- .short-videos-player-container--background-loading {
220
- background-color: transparent;
221
- }
222
- .short-videos-player-container--faded {
223
- --short-videos-player--elements-opacity: 0;
224
- }
225
- .short-videos-player-container__media-center {
226
- position: absolute;
227
- top: 0;
228
- left: 0;
229
- right: 0;
230
- z-index: 1;
231
- }
232
-
233
- .short-videos-player {
234
- display: flex;
235
- flex: 1;
236
- padding: var(--short-videos-player--padding);
237
- backdrop-filter: blur(30px);
238
- position: relative;
239
- /* Set 'container-type: inline-size;' to reference container*/
240
- }
241
- @container (width < 576px) {
242
- .short-videos-player {
243
- padding: 0;
244
- }
245
- }
246
- .short-videos-player__watermark {
247
- position: absolute;
248
- bottom: 5rem;
249
- left: 5rem;
250
- opacity: var(--short-videos-player--elements-opacity);
251
- transition: opacity 0.3s ease-in-out;
252
- }
253
- .short-videos-player__content {
254
- width: 100%;
255
- height: 100%;
256
- opacity: var(--short-videos-player--elements-opacity);
257
- transition: opacity 0.3s ease-in-out;
258
- }
259
-
260
- .close-button {
261
- width: 3rem;
262
- min-width: 3rem;
263
- max-width: 3rem;
264
- height: 3rem;
265
- min-height: 3rem;
266
- max-height: 3rem;
267
- background-color: rgba(0, 0, 0, 0.6);
268
- border: 1px solid #1c1c1c;
269
- border-radius: 50%;
270
- text-align: center;
271
- --icon--color: #ffffff;
272
- --icon--size: 1.75rem;
273
- }
274
- .close-button:hover {
275
- background-color: rgba(0, 0, 0, 0.9);
276
- transition: background-color 0.5s;
277
- }
278
- .close-button:disabled {
279
- opacity: 0.5;
280
- cursor: default;
281
- }</style>
83
+ <ContentPlayer config={contentPlayerConfig} />
@@ -1,15 +1,7 @@
1
+ import type { MediaCenterData } from '../../media-center/model/types';
1
2
  import type { ShortVideoPlayerProps } from './types';
2
- import { type Snippet } from 'svelte';
3
3
  type $$ComponentProps = ShortVideoPlayerProps & {
4
- categoriesSwitcher?: Snippet<[{
5
- maxItemsWidth: number;
6
- onMounted: (data: {
7
- height: number;
8
- }) => void;
9
- closeButton?: Snippet;
10
- }]>;
11
- playerLogo?: string | null;
12
- fadeContent?: boolean;
4
+ mediaCenterData?: MediaCenterData;
13
5
  };
14
6
  declare const ShortVideosPlayerView: import("svelte").Component<$$ComponentProps, {}, "">;
15
7
  type ShortVideosPlayerView = ReturnType<typeof ShortVideosPlayerView>;
@@ -1,23 +1,22 @@
1
1
  import type { Locale } from '../../core/locale';
2
- import type { ShortVideoViewerModel, IPostSocialInteractionsHandler } from '../short-video-viewer';
3
- import type { IPlayerItemsProvider } from '../../ui/player';
2
+ import type { PostViewerModel } from '../../posts/post-viewer';
3
+ import type { IPostSocialInteractionsHandler } from '../../posts/social-interactions';
4
+ import type { IPlayerItemsProvider } from '../../ui/player-slider';
4
5
  export interface IShortVideoAnalyticsHandler {
5
6
  setOrganizationId: (organizationId: string) => void;
6
7
  trackShortVideoView: (videoId: string) => void;
7
8
  trackShortVideoProductImpression: (productId: string, videoId: string) => void;
8
9
  trackShortVideoProductClick: (productId: string, videoId: string) => void;
9
- trackAdImpression: (adId: string) => void;
10
10
  trackAdClick: (adId: string) => void;
11
+ trackAdImpression: (adId: string) => void;
11
12
  }
12
- export type ShortVideoPlayerModel = ShortVideoViewerModel & {
13
+ export type ShortVideoPlayerModel = PostViewerModel & {
13
14
  analyticsOrganizationId: string | null;
14
15
  };
15
- export type ShortVideoPlayerProps = PlayerSettings & {
16
+ export type ShortVideoPlayerProps = {
16
17
  dataProvider: IPlayerItemsProvider<ShortVideoPlayerModel>;
17
18
  socialInteractionsHandler?: IPostSocialInteractionsHandler;
18
19
  analyticsHandler?: IShortVideoAnalyticsHandler;
19
- };
20
- export type PlayerSettings = {
21
20
  disableBackground?: boolean;
22
21
  locale?: Locale;
23
22
  showStreamsCloudWatermark?: boolean;
@@ -1,8 +1,8 @@
1
- <script lang="ts">import { ShortVideoViewer } from '../../../short-videos/short-video-viewer';
1
+ <script lang="ts">import { PostViewer } from '../../../posts/post-viewer';
2
2
  import { ShortVideoStreamElementLocalization } from './short-video-stream-element-localization';
3
- import { mapToShortVideoViewerModel } from '../models';
3
+ import { mapToPostViewerModel } from '../models';
4
4
  let { data, locale, on } = $props();
5
5
  const localization = $derived(new ShortVideoStreamElementLocalization(locale));
6
6
  </script>
7
7
 
8
- <ShortVideoViewer model={mapToShortVideoViewerModel(data)} autoplay={false} showControls={false} locale={localization.shortVideoViewerLocale} on={on} />
8
+ <PostViewer model={mapToPostViewerModel(data)} autoplay={false} showControls={false} locale={localization.shortVideoViewerLocale} on={on} />
@@ -1,4 +1,4 @@
1
- export { mapToShortVideoViewerModel } from './mapper';
1
+ export { mapToPostViewerModel } from './mapper';
2
2
  export type { StreamLayoutBlobModel } from './stream-layout-blob-model';
3
3
  export type { StreamLayoutMediaItemModel } from './stream-layout-media-item-model';
4
4
  export type { StreamLayoutPostHeaderModel } from './stream-layout-post-header-model';
@@ -1 +1 @@
1
- export { mapToShortVideoViewerModel } from './mapper';
1
+ export { mapToPostViewerModel } from './mapper';
@@ -1,3 +1,3 @@
1
- import type { ShortVideoViewerModel } from '../../../short-videos/short-video-viewer';
1
+ import type { PostViewerModel } from '../../../posts/post-viewer';
2
2
  import type { StreamLayoutShortVideoModel } from '../models/stream-layout-short-video-model';
3
- export declare const mapToShortVideoViewerModel: (model: StreamLayoutShortVideoModel) => ShortVideoViewerModel;
3
+ export declare const mapToPostViewerModel: (model: StreamLayoutShortVideoModel) => PostViewerModel;
@@ -1,13 +1,14 @@
1
1
  import { MediaType } from '../../../core/enums';
2
- export const mapToShortVideoViewerModel = (model) => {
2
+ export const mapToPostViewerModel = (model) => {
3
3
  return {
4
4
  id: model.id,
5
5
  media: model.media.type === MediaType.Image
6
- ? { isImage: true, url: model.media.url }
6
+ ? { type: 'image', url: model.media.url, isMutable: false }
7
7
  : {
8
- isImage: false,
8
+ type: 'video',
9
9
  url: model.media.url,
10
- thumbnailUrl: model.media.thumbnailUrl
10
+ thumbnailUrl: model.media.thumbnailUrl,
11
+ isMutable: true
11
12
  },
12
13
  text: model.text,
13
14
  heading: model.header && {
@@ -17,8 +18,7 @@ export const mapToShortVideoViewerModel = (model) => {
17
18
  viewsCount: model.header.postViewsCount
18
19
  },
19
20
  enableSocialInteractions: model.enableSocialInteractions,
20
- hasAttachments: !!(model.products.length || model.ad),
21
- ad: model.ad ? mapToAdViewModel(model.ad) : null,
21
+ ads: model.ad ? [mapToAdViewModel(model.ad)] : [],
22
22
  products: model.products.map(mapToProductCardModel)
23
23
  // uncomment if you want to test many products behavior
24
24
  // .flatMap(x =>
@@ -1,8 +1,9 @@
1
+ import type { Locale } from '../../core/locale';
1
2
  import { type IMediaCenterConfig } from '../../media-center/config/types';
2
- import type { IPostSocialInteractionsHandler } from '../../short-videos/short-video-viewer';
3
+ import type { IPostSocialInteractionsHandler } from '../../posts/social-interactions';
3
4
  import type { StreamPageViewerModel } from '../stream-page-viewer/types';
4
5
  import { mapToStreamPlayerModel } from './mapper';
5
- import type { IStreamAnalyticsHandler, IStreamPlayerDataProvider, PlayerSettings, StreamPlayerModel } from './types';
6
+ import type { IStreamAnalyticsHandler, IStreamPlayerDataProvider, StreamPlayerModel } from './types';
6
7
  export { type StreamPlayerModel, type StreamPageViewerModel, mapToStreamPlayerModel };
7
8
  export type { IStreamPlayerDataProvider, IStreamAnalyticsHandler, IMediaCenterConfig };
8
9
  /**
@@ -88,16 +89,36 @@ export type { IStreamPlayerDataProvider, IStreamAnalyticsHandler, IMediaCenterCo
88
89
  * });
89
90
  * ```
90
91
  */
91
- export declare function openStreamPlayer(init: PlayerSettings & {
92
+ export declare function openStreamPlayer(init: {
92
93
  streamId: string;
93
94
  dataProvider: IStreamPlayerDataProvider;
94
95
  mediaCenterConfig?: IMediaCenterConfig;
95
96
  postSocialInteractionsHandler?: IPostSocialInteractionsHandler;
96
97
  analyticsHandler?: IStreamAnalyticsHandler;
98
+ disableBackground?: boolean;
99
+ locale?: Locale;
100
+ showStreamsCloudWatermark?: boolean;
101
+ on?: {
102
+ streamActivated?: (data: {
103
+ title: string;
104
+ image: string | null;
105
+ }) => void;
106
+ playerClosed?: () => void;
107
+ };
97
108
  }): void;
98
- export declare function openStreamPlayer(init: PlayerSettings & {
109
+ export declare function openStreamPlayer(init: {
99
110
  streamId: string;
100
111
  initiator: string;
101
112
  graphqlOrigin?: string;
102
113
  mediaPageId?: string;
114
+ disableBackground?: boolean;
115
+ locale?: Locale;
116
+ showStreamsCloudWatermark?: boolean;
117
+ on?: {
118
+ streamActivated?: (data: {
119
+ title: string;
120
+ image: string | null;
121
+ }) => void;
122
+ playerClosed?: () => void;
123
+ };
103
124
  }): void;
@@ -13,4 +13,6 @@ export declare class InternalStreamAnalyticsHandler implements IStreamAnalyticsH
13
13
  trackShortVideoProductImpression: (productId: string, videoId: string) => void;
14
14
  trackShortVideoProductClick: (productId: string, videoId: string) => void;
15
15
  trackShortVideoProgress: (pageId: string, videoId: string, progress: number, streamId: string) => void;
16
+ trackAdClick: (adId: string) => void;
17
+ trackAdImpression: (adId: string) => void;
16
18
  }
@@ -18,4 +18,6 @@ export class InternalStreamAnalyticsHandler {
18
18
  trackShortVideoProductImpression = (productId, videoId) => AppEventsTracker.trackShortVideoProductImpression(productId, videoId);
19
19
  trackShortVideoProductClick = (productId, videoId) => AppEventsTracker.trackShortVideoProductClick(productId, videoId);
20
20
  trackShortVideoProgress = (pageId, videoId, progress, streamId) => AppEventsTracker.trackShortVideoProgress(pageId, videoId, progress, streamId);
21
+ trackAdClick = (adId) => AppEventsTracker.trackAdClick(adId);
22
+ trackAdImpression = (adId) => AppEventsTracker.trackAdImpression(adId);
21
23
  }