@streamscloud/embeddable 7.0.1 → 7.0.2-1759149696160

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 (133) 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/internal-media-center-config.js +2 -1
  19. package/dist/media-center/config/types.d.ts +1 -1
  20. package/dist/media-center/media-center/cmp.media-center.svelte +13 -9
  21. package/dist/media-center/media-center/overview.svelte +3 -2
  22. package/dist/media-center/media-center/short-video-resources-generator.d.ts +1 -1
  23. package/dist/media-center/model/types.d.ts +12 -0
  24. package/dist/posts/attachments/cmp.attachments.svelte +50 -0
  25. package/dist/{short-videos/short-video-viewer → posts/attachments}/cmp.attachments.svelte.d.ts +3 -3
  26. package/dist/posts/attachments/index.d.ts +1 -0
  27. package/dist/posts/attachments/index.js +1 -0
  28. package/dist/{short-videos/short-video-viewer/cmp.short-video-controls.svelte → posts/controls/cmp.controls.svelte} +21 -26
  29. package/dist/posts/controls/cmp.controls.svelte.d.ts +11 -0
  30. package/dist/posts/controls/index.d.ts +1 -0
  31. package/dist/posts/controls/index.js +1 -0
  32. package/dist/posts/index.d.ts +4 -0
  33. package/dist/posts/index.js +2 -0
  34. package/dist/posts/model/types.d.ts +13 -0
  35. package/dist/posts/model/types.js +1 -0
  36. package/dist/{short-videos/short-video-viewer/cmp.attachments-horizontal.svelte → posts/post-viewer/attachments-horizontal.svelte} +2 -3
  37. package/dist/posts/post-viewer/attachments-horizontal.svelte.d.ts +13 -0
  38. package/dist/posts/post-viewer/cmp.post-viewer.svelte +120 -0
  39. 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
  40. package/dist/posts/post-viewer/heading.svelte +76 -0
  41. package/dist/posts/post-viewer/heading.svelte.d.ts +9 -0
  42. package/dist/posts/post-viewer/index.d.ts +4 -0
  43. package/dist/posts/post-viewer/index.js +3 -0
  44. package/dist/posts/post-viewer/mapper.d.ts +3 -0
  45. package/dist/{short-videos/short-video-viewer → posts/post-viewer}/mapper.js +33 -17
  46. package/dist/{short-videos/short-video-viewer → posts/post-viewer}/operations.generated.d.ts +2 -2
  47. package/dist/{short-videos/short-video-viewer → posts/post-viewer}/operations.generated.js +2 -2
  48. package/dist/{short-videos/short-video-viewer → posts/post-viewer}/operations.graphql +1 -1
  49. package/dist/posts/post-viewer/post-media.svelte +20 -0
  50. package/dist/posts/post-viewer/post-media.svelte.d.ts +12 -0
  51. package/dist/{short-videos/short-video-viewer/short-video-viewer-localization.d.ts → posts/post-viewer/post-viewer-localization.d.ts} +2 -3
  52. package/dist/{short-videos/short-video-viewer/short-video-viewer-localization.js → posts/post-viewer/post-viewer-localization.js} +3 -5
  53. package/dist/{short-videos/short-video-viewer → posts/post-viewer}/types.d.ts +24 -25
  54. package/dist/{short-videos/short-video-viewer → posts/post-viewer}/ui-manager.svelte.d.ts +5 -3
  55. package/dist/{short-videos/short-video-viewer → posts/post-viewer}/ui-manager.svelte.js +11 -4
  56. package/dist/posts/post-viewer/utils.d.ts +2 -0
  57. package/dist/posts/post-viewer/utils.js +13 -0
  58. package/dist/posts/social-interactions/index.d.ts +1 -0
  59. package/dist/posts/social-interactions/index.js +1 -0
  60. package/dist/posts/social-interactions/types.d.ts +9 -0
  61. package/dist/posts/social-interactions/types.js +1 -0
  62. package/dist/products/product-card/cmp.product-card.svelte +27 -8
  63. package/dist/products/product-card/cmp.product-card.svelte.d.ts +2 -1
  64. package/dist/short-videos/short-videos-player/cmp.short-videos-player.svelte +11 -17
  65. package/dist/short-videos/short-videos-player/cmp.short-videos-player.svelte.d.ts +1 -5
  66. package/dist/short-videos/short-videos-player/index.d.ts +20 -5
  67. package/dist/short-videos/short-videos-player/internal-short-video-analytics-handler.d.ts +1 -1
  68. package/dist/short-videos/short-videos-player/internal-short-video-analytics-handler.js +1 -1
  69. package/dist/short-videos/short-videos-player/internal-short-video-player-provider.d.ts +1 -1
  70. package/dist/short-videos/short-videos-player/mapper.js +2 -2
  71. package/dist/short-videos/short-videos-player/short-videos-player-view.svelte +50 -216
  72. package/dist/short-videos/short-videos-player/short-videos-player-view.svelte.d.ts +2 -9
  73. package/dist/short-videos/short-videos-player/types.d.ts +6 -7
  74. package/dist/streams/layout/element-views/cmp.short-video-stream-element.svelte +3 -3
  75. package/dist/streams/layout/models/index.d.ts +1 -1
  76. package/dist/streams/layout/models/index.js +1 -1
  77. package/dist/streams/layout/models/mapper.d.ts +2 -2
  78. package/dist/streams/layout/models/mapper.js +6 -6
  79. package/dist/streams/stream-player/index.d.ts +25 -4
  80. package/dist/streams/stream-player/internal-stream-analytics-handler.d.ts +2 -0
  81. package/dist/streams/stream-player/internal-stream-analytics-handler.js +2 -0
  82. package/dist/streams/stream-player/stream-overview.svelte +47 -122
  83. package/dist/streams/stream-player/stream-overview.svelte.d.ts +1 -4
  84. package/dist/streams/stream-player/stream-player-buffer.svelte.d.ts +1 -1
  85. package/dist/streams/stream-player/stream-player-localization.d.ts +1 -5
  86. package/dist/streams/stream-player/stream-player-localization.js +2 -10
  87. package/dist/streams/stream-player/stream-player-view.svelte +229 -0
  88. package/dist/streams/stream-player/stream-player-view.svelte.d.ts +8 -0
  89. package/dist/streams/stream-player/types.d.ts +4 -4
  90. package/dist/ui/{player → player-slider}/cmp.player-slider.svelte.d.ts +2 -10
  91. package/dist/ui/{player → player-slider}/types.d.ts +9 -0
  92. package/dist/ui/player-slider/types.js +1 -0
  93. package/package.json +1 -1
  94. package/dist/short-videos/short-video-viewer/cmp.attachments-horizontal.svelte.d.ts +0 -13
  95. package/dist/short-videos/short-video-viewer/cmp.attachments.svelte +0 -52
  96. package/dist/short-videos/short-video-viewer/cmp.short-video-controls.svelte.d.ts +0 -19
  97. package/dist/short-videos/short-video-viewer/cmp.short-video-heading.svelte +0 -89
  98. package/dist/short-videos/short-video-viewer/cmp.short-video-heading.svelte.d.ts +0 -9
  99. package/dist/short-videos/short-video-viewer/cmp.short-video-product-card.svelte +0 -26
  100. package/dist/short-videos/short-video-viewer/cmp.short-video-product-card.svelte.d.ts +0 -16
  101. package/dist/short-videos/short-video-viewer/cmp.short-video-viewer.svelte +0 -146
  102. package/dist/short-videos/short-video-viewer/index.d.ts +0 -5
  103. package/dist/short-videos/short-video-viewer/index.js +0 -4
  104. package/dist/short-videos/short-video-viewer/mapper.d.ts +0 -3
  105. package/dist/short-videos/short-video-viewer/short-video-attachments-localization.d.ts +0 -5
  106. package/dist/short-videos/short-video-viewer/short-video-attachments-localization.js +0 -7
  107. package/dist/short-videos/short-videos-player/controls.svelte +0 -261
  108. package/dist/short-videos/short-videos-player/controls.svelte.d.ts +0 -22
  109. package/dist/short-videos/short-videos-player/fade-mixins.scss +0 -12
  110. package/dist/short-videos/short-videos-player/short-videos-player-localization.d.ts +0 -7
  111. package/dist/short-videos/short-videos-player/short-videos-player-localization.js +0 -11
  112. package/dist/short-videos/short-videos-player/ui-manager.svelte.d.ts +0 -24
  113. package/dist/short-videos/short-videos-player/ui-manager.svelte.js +0 -47
  114. package/dist/streams/cmp.stream-product-card.svelte +0 -25
  115. package/dist/streams/cmp.stream-product-card.svelte.d.ts +0 -16
  116. package/dist/streams/stream-player/controls.svelte +0 -301
  117. package/dist/streams/stream-player/controls.svelte.d.ts +0 -20
  118. package/dist/streams/stream-player/fade-mixins.scss +0 -12
  119. package/dist/streams/stream-player/stream-player.svelte +0 -393
  120. package/dist/streams/stream-player/stream-player.svelte.d.ts +0 -16
  121. package/dist/streams/stream-player/ui-manager.svelte.js +0 -63
  122. /package/dist/{streams/stream-player → content-player}/button-mixins.scss +0 -0
  123. /package/dist/{ui/player → media-center/model}/types.js +0 -0
  124. /package/dist/{short-videos/short-video-viewer → posts/post-viewer}/types.js +0 -0
  125. /package/dist/ui/{player → player-slider}/cmp.player-slider.svelte +0 -0
  126. /package/dist/ui/{player → player-slider}/index.d.ts +0 -0
  127. /package/dist/ui/{player → player-slider}/index.js +0 -0
  128. /package/dist/ui/{player → player-slider}/player-buffer.svelte.d.ts +0 -0
  129. /package/dist/ui/{player → player-slider}/player-buffer.svelte.js +0 -0
  130. /package/dist/ui/{player → player-slider}/prevent-slider-scroll.d.ts +0 -0
  131. /package/dist/ui/{player → player-slider}/prevent-slider-scroll.js +0 -0
  132. /package/dist/ui/{player → player-slider}/wheel-gestures-adapter.d.ts +0 -0
  133. /package/dist/ui/{player → player-slider}/wheel-gestures-adapter.js +0 -0
@@ -1,393 +0,0 @@
1
- <script lang="ts">var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import { handleEsc } from '../../core/document.event-handlers';
11
- import { preloadImage } from '../../core/image-preloader';
12
- import { toastrWarning } from '../../core/toastr';
13
- import { ShortVideoViewer } from '../../short-videos/short-video-viewer';
14
- import { mapToShortVideoViewerModel } from '../layout/models';
15
- import { StreamPageViewer } from '../stream-page-viewer';
16
- import { Icon } from '../../ui/icon';
17
- import { Loading } from '../../ui/loading';
18
- import { PlayerSlider } from '../../ui/player';
19
- import { SpotlightLayout } from '../../ui/spotlight-layout';
20
- import { SwipeIndicator } from '../../ui/swipe-indicator';
21
- import { default as Controls } from './controls.svelte';
22
- import { default as Overview } from './stream-overview.svelte';
23
- import { StreamPlayerBuffer } from './stream-player-buffer.svelte';
24
- import { StreamPlayerLocalization } from './stream-player-localization';
25
- import { StreamPlayerUiManager } from './ui-manager.svelte';
26
- import IconDismiss from '@fluentui/svg-icons/icons/dismiss_28_regular.svg?raw';
27
- import { onMount, untrack } from 'svelte';
28
- let { streamId, dataProvider, analyticsHandler, locale = 'en', showStreamsCloudWatermark, postSocialInteractionsHandler, on, categoriesSwitcher, playerLogo = null, fadeContent = false } = $props();
29
- const localization = $derived(new StreamPlayerLocalization(locale));
30
- let model = $state(null);
31
- let buffer = $state.raw(null);
32
- let bufferIsLoading = $state(false);
33
- let activePageId = $derived.by(() => { var _a, _b; return (_b = (_a = buffer === null || buffer === void 0 ? void 0 : buffer.current) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : ''; });
34
- let everTouched = $state(false);
35
- let totalEngagementTimeSeconds = 0;
36
- let inactiveTimeSeconds = 10; // // Mark as inactive after 10 seconds of no activity
37
- let isActive = true;
38
- let activityTimeout = null;
39
- let trackingInterval = null;
40
- let maxPageIndexViewed = 0;
41
- const uiManager = new StreamPlayerUiManager();
42
- const resetInactivityTimer = () => {
43
- if (!isActive) {
44
- isActive = true;
45
- }
46
- if (activityTimeout) {
47
- clearTimeout(activityTimeout);
48
- }
49
- activityTimeout = setTimeout(() => {
50
- isActive = false;
51
- }, inactiveTimeSeconds * 1000);
52
- };
53
- $effect(() => {
54
- void dataProvider;
55
- untrack(() => {
56
- initBuffer(dataProvider);
57
- });
58
- });
59
- const initBuffer = (dataProvider) => __awaiter(void 0, void 0, void 0, function* () {
60
- var _a;
61
- bufferIsLoading = true;
62
- const stream = yield dataProvider.getStream(streamId);
63
- if (!stream) {
64
- toastrWarning(localization.streamNotFound);
65
- onPlayerClose();
66
- return;
67
- }
68
- if (stream.organizationId) {
69
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.setOrganizationId(stream.organizationId);
70
- }
71
- (_a = on === null || on === void 0 ? void 0 : on.streamActivated) === null || _a === void 0 ? void 0 : _a.call(on, { title: stream.title, image: stream.cover });
72
- // start tracking the stream
73
- model = stream;
74
- buffer = new StreamPlayerBuffer({
75
- streamId,
76
- dataProvider: dataProvider,
77
- on: {
78
- preloaded: (instance) => __awaiter(void 0, void 0, void 0, function* () {
79
- if (instance.loaded.length) {
80
- const coverUrl = instance.loaded[0].cover;
81
- if (coverUrl) {
82
- yield preloadImage(coverUrl);
83
- }
84
- uiManager.setBackgroundImageUrl(coverUrl);
85
- }
86
- buffer = instance;
87
- bufferIsLoading = false;
88
- })
89
- }
90
- });
91
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackStreamView(stream.id);
92
- startActivityTracking();
93
- });
94
- onMount(() => __awaiter(void 0, void 0, void 0, function* () {
95
- uiManager.overviewCollapsed = window && window.innerWidth < window.innerHeight;
96
- }));
97
- const startActivityTracking = () => {
98
- trackingInterval = setInterval(() => {
99
- if (isActive) {
100
- totalEngagementTimeSeconds += 1;
101
- }
102
- }, 1000);
103
- window.addEventListener('mousemove', resetInactivityTimer);
104
- window.addEventListener('mousedown', resetInactivityTimer);
105
- window.addEventListener('keypress', resetInactivityTimer);
106
- window.addEventListener('touchstart', resetInactivityTimer);
107
- window.addEventListener('scroll', resetInactivityTimer);
108
- resetInactivityTimer();
109
- };
110
- const stopActivityTracking = () => {
111
- window.removeEventListener('mousemove', resetInactivityTimer);
112
- window.removeEventListener('mousedown', resetInactivityTimer);
113
- window.removeEventListener('keypress', resetInactivityTimer);
114
- window.removeEventListener('touchstart', resetInactivityTimer);
115
- window.removeEventListener('scroll', resetInactivityTimer);
116
- if (activityTimeout) {
117
- clearTimeout(activityTimeout);
118
- activityTimeout = null;
119
- }
120
- if (trackingInterval) {
121
- clearInterval(trackingInterval);
122
- trackingInterval = null;
123
- }
124
- };
125
- const handleChangePage = (index) => {
126
- if (!buffer) {
127
- return;
128
- }
129
- buffer.setIndex(index);
130
- if (uiManager.isMobileView) {
131
- uiManager.overviewCollapsed = true;
132
- }
133
- };
134
- const handleDimensionsChanged = (dimensions) => {
135
- uiManager.updateDimensions({
136
- mainViewColumnWidth: dimensions.mainSceneWidth,
137
- viewTotalWidth: dimensions.totalWidth
138
- });
139
- };
140
- const handleOverviewWidthChanged = (width) => {
141
- uiManager.updateOverviewWidth(width);
142
- };
143
- const onMediaCenterHeaderMounted = (data) => {
144
- uiManager.updateMediaCenterHeaderHeight(data.height);
145
- };
146
- const contentMounted = (node) => {
147
- const markAsTouched = () => {
148
- everTouched = true;
149
- node.removeEventListener('touchstart', markAsTouched);
150
- node.removeEventListener('wheel', markAsTouched);
151
- node.removeEventListener('click', markAsTouched);
152
- node.removeEventListener('keypress', markAsTouched);
153
- };
154
- node.addEventListener('touchstart', markAsTouched);
155
- node.addEventListener('wheel', markAsTouched);
156
- node.addEventListener('click', markAsTouched);
157
- node.addEventListener('keypress', markAsTouched);
158
- };
159
- const onPageActivated = (id) => {
160
- const page = buffer === null || buffer === void 0 ? void 0 : buffer.loaded.find((x) => x.id === id);
161
- uiManager.setBackgroundImageUrl((page === null || page === void 0 ? void 0 : page.cover) || null);
162
- if (page) {
163
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackStreamPageView(id, streamId);
164
- if (page.type === 'short-video' && page.shortVideo) {
165
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackShortVideoView(page.shortVideo.id);
166
- }
167
- const currentIndex = buffer === null || buffer === void 0 ? void 0 : buffer.loaded.findIndex((p) => p.id === id);
168
- if (currentIndex !== undefined && currentIndex > maxPageIndexViewed) {
169
- maxPageIndexViewed = currentIndex;
170
- }
171
- }
172
- };
173
- const onProductCardClick = (productId) => {
174
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackStreamProductClicked(productId, streamId);
175
- };
176
- const onShortVideoProductClick = (productId, videoId) => {
177
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackShortVideoProductClick(productId, videoId);
178
- };
179
- const onStreamProductImpression = (productId) => {
180
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackStreamProductImpression(productId, streamId);
181
- };
182
- const onShortVideoProductImpression = (productId, videoId) => {
183
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackShortVideoProductImpression(productId, videoId);
184
- };
185
- const onPlayerClose = () => {
186
- var _a;
187
- stopActivityTracking();
188
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackStreamEngagementTime(streamId, totalEngagementTimeSeconds);
189
- if (buffer && buffer.loaded.length > 0) {
190
- let scrollDepth = Math.round(((maxPageIndexViewed + 1) / buffer.loaded.length) * 100);
191
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackStreamScrollDepth(streamId, scrollDepth);
192
- }
193
- (_a = on === null || on === void 0 ? void 0 : on.playerClosed) === null || _a === void 0 ? void 0 : _a.call(on);
194
- };
195
- const onPageDeactivated = (itemId) => {
196
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.reportPageVideoViews(itemId, streamId);
197
- };
198
- const onProgress = (pageId, videoId, progress) => {
199
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackShortVideoProgress(pageId, videoId, progress, streamId);
200
- };
201
- </script>
202
-
203
- <svelte:document onkeydown={(e) => handleEsc(e, onPlayerClose)} />
204
-
205
- <div
206
- class="stream-player-container"
207
- class:stream-player-container--background-loading={!uiManager.isMobileView}
208
- class:stream-player-container--faded={fadeContent}
209
- style={uiManager.globalCssVariables}>
210
- {#if categoriesSwitcher}
211
- {#snippet closeButton()}
212
- <button type="button" class="close-button" onclick={onPlayerClose}>
213
- <Icon src={IconDismiss} />
214
- </button>
215
- {/snippet}
216
- <div class="stream-player-container__media-center">
217
- {@render categoriesSwitcher({
218
- maxItemsWidth: Math.min(uiManager.mainViewColumnWidth * 1.4, uiManager.viewTotalWidth),
219
- onMounted: onMediaCenterHeaderMounted,
220
- closeButton: on?.playerClosed && closeButton
221
- })}
222
- </div>
223
- {/if}
224
- <div class="stream-player">
225
- {#if showStreamsCloudWatermark}
226
- <div class="stream-player__watermark">
227
- <a href="https://streamscloud.com/" tabindex="-1" aria-label="none">
228
- <img src="https://embedabble-assets.streamscloud-cdn.com/watermark.svg" alt="StreamsCloud" />
229
- </a>
230
- </div>
231
- {/if}
232
- {#if buffer && model && !bufferIsLoading}
233
- <SpotlightLayout ratio={9 / 16} on={{ dimensionsChanged: handleDimensionsChanged }}>
234
- <div class="stream-player__content" use:contentMounted>
235
- <PlayerSlider
236
- buffer={buffer}
237
- on={{
238
- itemActivated: (e) => onPageActivated(e),
239
- itemDeactivated: (e) => onPageDeactivated(e)
240
- }}>
241
- {#snippet children({ item })}
242
- {#if item.type === 'general'}
243
- <StreamPageViewer
244
- page={item}
245
- locale={localization.streamPageViewerLocale}
246
- on={{
247
- progress: (videoId: String, progress: Number) => onProgress(item.id, videoId, progress),
248
- productClick: (productId: String) => onProductCardClick(productId),
249
- productImpression: (productId: String) => onStreamProductImpression(productId)
250
- }} />
251
- {:else if item.type === 'short-video'}
252
- <ShortVideoViewer
253
- model={mapToShortVideoViewerModel(item.shortVideo)}
254
- on={{
255
- progress: (progress) => onProgress(item.id, item.shortVideo.id, progress),
256
- productClick: (productId) => onShortVideoProductClick(productId, item.shortVideo.id),
257
- productImpression: (productId, videoId) => onShortVideoProductImpression(productId, videoId)
258
- }}
259
- autoplay="on-appearance"
260
- socialInteractionsHandler={postSocialInteractionsHandler}
261
- locale={localization.shortVideoViewerLocale}
262
- showAttachments={uiManager.showShortVideoOverlayAttachments}
263
- showControls={uiManager.showShortVideoOverlayControls} />
264
- {/if}
265
- {/snippet}
266
- </PlayerSlider>
267
- {#if uiManager.isMobileView && buffer.loaded.length > 1 && !everTouched}
268
- <SwipeIndicator locale={localization.swipeIndicatorLocale} />
269
- {/if}
270
- </div>
271
- </SpotlightLayout>
272
- {#if model}
273
- <Overview
274
- model={model}
275
- buffer={buffer}
276
- activePageId={activePageId}
277
- uiManager={uiManager}
278
- localization={localization}
279
- on={{
280
- setCurrentItem: handleChangePage,
281
- widthChanged: handleOverviewWidthChanged
282
- }} />
283
- {/if}
284
- <Controls
285
- buffer={buffer}
286
- uiManager={uiManager}
287
- localization={localization}
288
- postSocialInteractionsHandler={postSocialInteractionsHandler}
289
- playerLogo={playerLogo}
290
- showCloseButton={!categoriesSwitcher}
291
- on={{
292
- closePlayer: () => onPlayerClose(),
293
- productClick: (productId: String) => onProductCardClick(productId),
294
- productImpression: (productId: String) => onStreamProductImpression(productId)
295
- }} />
296
- {:else}
297
- <Loading positionFixedCenter={true} timeout={1000} />
298
- {/if}
299
- </div>
300
- </div>
301
-
302
- <style>@keyframes fadeIn {
303
- 0% {
304
- opacity: 1;
305
- }
306
- 50% {
307
- opacity: 0.4;
308
- }
309
- 100% {
310
- opacity: 1;
311
- }
312
- }
313
- .stream-player-container {
314
- --stream-player--elements-opacity: 1;
315
- width: 100%;
316
- min-width: 100%;
317
- max-width: 100%;
318
- height: 100%;
319
- min-height: 100%;
320
- max-height: 100%;
321
- container-type: inline-size;
322
- display: flex;
323
- position: relative;
324
- }
325
- .stream-player-container {
326
- background-color: #c1c1c1;
327
- background-image: var(--stream-player--background-image-url);
328
- background-size: cover;
329
- background-blend-mode: multiply;
330
- }
331
- .stream-player-container--background-loading {
332
- background-color: transparent;
333
- }
334
- .stream-player-container--faded {
335
- --stream-player--elements-opacity: 0;
336
- }
337
- .stream-player-container__media-center {
338
- position: absolute;
339
- top: 0;
340
- left: var(--stream-player--overview--width);
341
- right: var(--stream-player--overview--width);
342
- z-index: 1;
343
- }
344
-
345
- .stream-player {
346
- display: flex;
347
- flex: 1;
348
- padding: var(--stream-player--padding);
349
- backdrop-filter: blur(30px);
350
- position: relative;
351
- /* Set 'container-type: inline-size;' to reference container*/
352
- }
353
- @container (width < 576px) {
354
- .stream-player {
355
- padding: 0;
356
- }
357
- }
358
- .stream-player__watermark {
359
- position: absolute;
360
- bottom: 5rem;
361
- left: calc(var(--stream-player--overview--width) + 5rem);
362
- opacity: var(--stream-player--elements-opacity);
363
- transition: opacity 0.3s ease-in-out;
364
- }
365
- .stream-player__content {
366
- width: 100%;
367
- height: 100%;
368
- opacity: var(--stream-player--elements-opacity);
369
- transition: opacity 0.3s ease-in-out;
370
- }
371
-
372
- .close-button {
373
- width: 3rem;
374
- min-width: 3rem;
375
- max-width: 3rem;
376
- height: 3rem;
377
- min-height: 3rem;
378
- max-height: 3rem;
379
- background-color: rgba(0, 0, 0, 0.6);
380
- border: 1px solid #1c1c1c;
381
- border-radius: 50%;
382
- text-align: center;
383
- --icon--color: #ffffff;
384
- --icon--size: 1.75rem;
385
- }
386
- .close-button:hover {
387
- background-color: rgba(0, 0, 0, 0.9);
388
- transition: background-color 0.5s;
389
- }
390
- .close-button:disabled {
391
- opacity: 0.5;
392
- cursor: default;
393
- }</style>
@@ -1,16 +0,0 @@
1
- import type { StreamPlayerProps } from './types';
2
- import { type Snippet } from 'svelte';
3
- type $$ComponentProps = StreamPlayerProps & {
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;
13
- };
14
- declare const StreamPlayer: import("svelte").Component<$$ComponentProps, {}, "">;
15
- type StreamPlayer = ReturnType<typeof StreamPlayer>;
16
- export default StreamPlayer;
@@ -1,63 +0,0 @@
1
- const CONTROLS_PADDING_HORIZONTAL = 28;
2
- const CONTROLS_PADDING_VERTICAL = 28;
3
- const CONTROLS_ATTACHMENTS_MAX_WIDTH = 176;
4
- const PLAYER_PADDING_VERTICAL = 10;
5
- export class StreamPlayerUiManager {
6
- overviewCollapsed = $state(false);
7
- showShortVideoAttachments = $state(true);
8
- globalCssVariables = $derived.by(() => {
9
- const values = [
10
- `--stream-player--controls--attachments--max-width: ${CONTROLS_ATTACHMENTS_MAX_WIDTH}px`,
11
- `--stream-player--controls--available-space: ${this._controlsAvailableSpace}px`,
12
- `--stream-player--controls--padding: ${this._mediaCenterHeaderHeight ? 0 : CONTROLS_PADDING_VERTICAL}px ${CONTROLS_PADDING_HORIZONTAL}px ${CONTROLS_PADDING_VERTICAL}px`,
13
- `--stream-player--media-center-header--height: ${this._mediaCenterHeaderHeight || 72}px`,
14
- `--stream-player--overview--width: ${this._overviewWidth}px`,
15
- `--stream-player--padding: ${this._mediaCenterHeaderHeight ? this._mediaCenterHeaderHeight : PLAYER_PADDING_VERTICAL}px 0 ${PLAYER_PADDING_VERTICAL}px`
16
- ];
17
- if (this._backgroundImageUrl) {
18
- values.push(`--stream-player--background-image-url: url(${this._backgroundImageUrl})`);
19
- }
20
- return values.join(';');
21
- });
22
- isMobileView = $derived.by(() => this._viewTotalWidth <= 576);
23
- viewInitialized = $derived.by(() => !!this._viewTotalWidth && !!this._mainViewColumnWidth);
24
- showShortVideoOverlayAttachments = $derived.by(() => this.viewInitialized && this._controlsAttachmentsPanelWidth < CONTROLS_ATTACHMENTS_MAX_WIDTH + 10);
25
- showShortVideoOverlayControls = $derived.by(() => this.viewInitialized && this._controlsContentWidth < this._controlsNavitagionButtonsWidth);
26
- _backgroundImageUrl = $state(null);
27
- _viewTotalWidth = $state(0);
28
- _mainViewColumnWidth = $state(0);
29
- _mediaCenterHeaderHeight = $state(0);
30
- _overviewWidth = $state(0);
31
- _controlsAttachmentsPanelWidth = $state(0);
32
- _controlsNavitagionButtonsWidth = $state(0);
33
- _controlsAvailableSpace = $derived.by(() => (this._viewTotalWidth - this._mainViewColumnWidth) / 2);
34
- _controlsContentWidth = $derived.by(() => this._controlsAvailableSpace - CONTROLS_PADDING_HORIZONTAL * 2);
35
- get viewTotalWidth() {
36
- return this._viewTotalWidth;
37
- }
38
- get mainViewColumnWidth() {
39
- return this._mainViewColumnWidth;
40
- }
41
- get backgroundImageUrl() {
42
- return this._backgroundImageUrl;
43
- }
44
- updateDimensions = (dimensions) => {
45
- this._viewTotalWidth = dimensions.viewTotalWidth;
46
- this._mainViewColumnWidth = dimensions.mainViewColumnWidth;
47
- };
48
- updateOverviewWidth = (width) => {
49
- this._overviewWidth = width;
50
- };
51
- updateMediaCenterHeaderHeight = (height) => {
52
- this._mediaCenterHeaderHeight = height;
53
- };
54
- setAttachmentsPanelWidth = (width) => {
55
- this._controlsAttachmentsPanelWidth = width;
56
- };
57
- setNavigationButtonsBlockWidth = (width) => {
58
- this._controlsNavitagionButtonsWidth = width;
59
- };
60
- setBackgroundImageUrl = (url) => {
61
- this._backgroundImageUrl = url;
62
- };
63
- }
File without changes
File without changes
File without changes