@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,395 +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
- void streamId;
56
- untrack(() => {
57
- initBuffer(dataProvider);
58
- });
59
- });
60
- const initBuffer = (dataProvider) => __awaiter(void 0, void 0, void 0, function* () {
61
- var _a;
62
- bufferIsLoading = true;
63
- const stream = yield dataProvider.getStream(streamId);
64
- if (!stream) {
65
- toastrWarning(localization.streamNotFound);
66
- onPlayerClose();
67
- return;
68
- }
69
- if (stream.organizationId) {
70
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.setOrganizationId(stream.organizationId);
71
- }
72
- (_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 });
73
- // start tracking the stream
74
- model = stream;
75
- buffer = new StreamPlayerBuffer({
76
- streamId,
77
- dataProvider: dataProvider,
78
- on: {
79
- preloaded: (instance) => __awaiter(void 0, void 0, void 0, function* () {
80
- if (instance.loaded.length) {
81
- const coverUrl = instance.loaded[0].cover;
82
- if (coverUrl) {
83
- yield preloadImage(coverUrl);
84
- }
85
- uiManager.setBackgroundImageUrl(coverUrl);
86
- }
87
- buffer = instance;
88
- bufferIsLoading = false;
89
- })
90
- }
91
- });
92
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackStreamView(stream.id);
93
- startActivityTracking();
94
- });
95
- onMount(() => __awaiter(void 0, void 0, void 0, function* () {
96
- uiManager.overviewCollapsed = window && window.innerWidth < window.innerHeight;
97
- }));
98
- const startActivityTracking = () => {
99
- trackingInterval = setInterval(() => {
100
- if (isActive) {
101
- totalEngagementTimeSeconds += 1;
102
- }
103
- }, 1000);
104
- window.addEventListener('mousemove', resetInactivityTimer);
105
- window.addEventListener('mousedown', resetInactivityTimer);
106
- window.addEventListener('keypress', resetInactivityTimer);
107
- window.addEventListener('touchstart', resetInactivityTimer);
108
- window.addEventListener('scroll', resetInactivityTimer);
109
- resetInactivityTimer();
110
- };
111
- const stopActivityTracking = () => {
112
- window.removeEventListener('mousemove', resetInactivityTimer);
113
- window.removeEventListener('mousedown', resetInactivityTimer);
114
- window.removeEventListener('keypress', resetInactivityTimer);
115
- window.removeEventListener('touchstart', resetInactivityTimer);
116
- window.removeEventListener('scroll', resetInactivityTimer);
117
- if (activityTimeout) {
118
- clearTimeout(activityTimeout);
119
- activityTimeout = null;
120
- }
121
- if (trackingInterval) {
122
- clearInterval(trackingInterval);
123
- trackingInterval = null;
124
- }
125
- };
126
- const handleChangePage = (index) => {
127
- if (!buffer) {
128
- return;
129
- }
130
- buffer.setIndex(index);
131
- if (uiManager.isMobileView) {
132
- uiManager.overviewCollapsed = true;
133
- }
134
- };
135
- const handleDimensionsChanged = (dimensions) => {
136
- uiManager.updateDimensions({
137
- mainViewColumnWidth: dimensions.mainSceneWidth,
138
- viewTotalWidth: dimensions.totalWidth
139
- });
140
- };
141
- const handleOverviewWidthChanged = (width) => {
142
- uiManager.updateOverviewWidth(width);
143
- };
144
- const onMediaCenterHeaderMounted = (data) => {
145
- uiManager.updateMediaCenterHeaderHeight(data.height);
146
- };
147
- const contentMounted = (node) => {
148
- const markAsTouched = () => {
149
- everTouched = true;
150
- node.removeEventListener('touchstart', markAsTouched);
151
- node.removeEventListener('wheel', markAsTouched);
152
- node.removeEventListener('click', markAsTouched);
153
- node.removeEventListener('keypress', markAsTouched);
154
- };
155
- node.addEventListener('touchstart', markAsTouched);
156
- node.addEventListener('wheel', markAsTouched);
157
- node.addEventListener('click', markAsTouched);
158
- node.addEventListener('keypress', markAsTouched);
159
- };
160
- const onPageActivated = (id) => {
161
- const page = buffer === null || buffer === void 0 ? void 0 : buffer.loaded.find((x) => x.id === id);
162
- uiManager.setBackgroundImageUrl((page === null || page === void 0 ? void 0 : page.cover) || null);
163
- if (page) {
164
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackStreamPageView(id, streamId);
165
- if (page.type === 'short-video' && page.shortVideo) {
166
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackShortVideoView(page.shortVideo.id);
167
- }
168
- const currentIndex = buffer === null || buffer === void 0 ? void 0 : buffer.loaded.findIndex((p) => p.id === id);
169
- if (currentIndex !== undefined && currentIndex > maxPageIndexViewed) {
170
- maxPageIndexViewed = currentIndex;
171
- }
172
- }
173
- };
174
- const onProductCardClick = (productId) => {
175
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackStreamProductClicked(productId, streamId);
176
- };
177
- const onShortVideoProductClick = (productId, videoId) => {
178
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackShortVideoProductClick(productId, videoId);
179
- };
180
- const onStreamProductImpression = (productId) => {
181
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackStreamProductImpression(productId, streamId);
182
- };
183
- const onShortVideoProductImpression = (productId, videoId) => {
184
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackShortVideoProductImpression(productId, videoId);
185
- };
186
- const onPlayerClose = () => {
187
- var _a;
188
- stopActivityTracking();
189
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackStreamEngagementTime(streamId, totalEngagementTimeSeconds);
190
- if (buffer && buffer.loaded.length > 0) {
191
- let scrollDepth = Math.round(((maxPageIndexViewed + 1) / buffer.loaded.length) * 100);
192
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackStreamScrollDepth(streamId, scrollDepth);
193
- }
194
- (_a = on === null || on === void 0 ? void 0 : on.playerClosed) === null || _a === void 0 ? void 0 : _a.call(on);
195
- };
196
- const onPageDeactivated = (itemId) => {
197
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.reportPageVideoViews(itemId, streamId);
198
- };
199
- const onProgress = (pageId, videoId, progress) => {
200
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackShortVideoProgress(pageId, videoId, progress, streamId);
201
- };
202
- </script>
203
-
204
- <svelte:document onkeydown={(e) => handleEsc(e, onPlayerClose)} />
205
-
206
- <div
207
- class="stream-player-container"
208
- class:stream-player-container--background-loading={!uiManager.isMobileView}
209
- class:stream-player-container--faded={fadeContent}
210
- style={uiManager.globalCssVariables}>
211
- {#if categoriesSwitcher}
212
- {#snippet closeButton()}
213
- <button type="button" class="close-button" onclick={onPlayerClose}>
214
- <Icon src={IconDismiss} />
215
- </button>
216
- {/snippet}
217
- <div class="stream-player-container__media-center">
218
- {@render categoriesSwitcher({
219
- maxItemsWidth: Math.min(uiManager.mainViewColumnWidth * 1.4, uiManager.viewTotalWidth),
220
- onMounted: onMediaCenterHeaderMounted,
221
- closeButton: on?.playerClosed && closeButton
222
- })}
223
- </div>
224
- {/if}
225
- <div class="stream-player">
226
- {#if showStreamsCloudWatermark}
227
- <div class="stream-player__watermark">
228
- <a href="https://streamscloud.com/" tabindex="-1" aria-label="none">
229
- <img src="https://embedabble-assets.streamscloud-cdn.com/watermark.svg" alt="StreamsCloud" />
230
- </a>
231
- </div>
232
- {/if}
233
- {#if buffer && model && !bufferIsLoading}
234
- <SpotlightLayout ratio={9 / 16} on={{ dimensionsChanged: handleDimensionsChanged }}>
235
- <div class="stream-player__content" use:contentMounted>
236
- <PlayerSlider
237
- buffer={buffer}
238
- on={{
239
- itemActivated: (e) => onPageActivated(e),
240
- itemDeactivated: (e) => onPageDeactivated(e)
241
- }}>
242
- {#snippet children({ item })}
243
- {#if item.type === 'general'}
244
- <StreamPageViewer
245
- page={item}
246
- locale={localization.streamPageViewerLocale}
247
- on={{
248
- progress: (videoId: String, progress: Number) => onProgress(item.id, videoId, progress),
249
- productClick: (productId: String) => onProductCardClick(productId),
250
- productImpression: (productId: String) => onStreamProductImpression(productId)
251
- }} />
252
- {:else if item.type === 'short-video'}
253
- <ShortVideoViewer
254
- model={mapToShortVideoViewerModel(item.shortVideo)}
255
- on={{
256
- progress: (progress) => onProgress(item.id, item.shortVideo.id, progress),
257
- productClick: (productId) => onShortVideoProductClick(productId, item.shortVideo.id),
258
- productImpression: (productId, videoId) => onShortVideoProductImpression(productId, videoId)
259
- }}
260
- autoplay="on-appearance"
261
- socialInteractionsHandler={postSocialInteractionsHandler}
262
- locale={localization.shortVideoViewerLocale}
263
- showAttachments={uiManager.showShortVideoOverlayAttachments}
264
- showControls={uiManager.showShortVideoOverlayControls} />
265
- {/if}
266
- {/snippet}
267
- </PlayerSlider>
268
- {#if uiManager.isMobileView && buffer.loaded.length > 1 && !everTouched}
269
- <SwipeIndicator locale={localization.swipeIndicatorLocale} />
270
- {/if}
271
- </div>
272
- </SpotlightLayout>
273
- {#if model}
274
- <Overview
275
- model={model}
276
- buffer={buffer}
277
- contentFaded={fadeContent}
278
- activePageId={activePageId}
279
- uiManager={uiManager}
280
- localization={localization}
281
- on={{
282
- setCurrentItem: handleChangePage,
283
- widthChanged: handleOverviewWidthChanged
284
- }} />
285
- {/if}
286
- <Controls
287
- buffer={buffer}
288
- uiManager={uiManager}
289
- localization={localization}
290
- postSocialInteractionsHandler={postSocialInteractionsHandler}
291
- playerLogo={playerLogo}
292
- showCloseButton={!categoriesSwitcher}
293
- on={{
294
- closePlayer: () => onPlayerClose(),
295
- productClick: (productId: String) => onProductCardClick(productId),
296
- productImpression: (productId: String) => onStreamProductImpression(productId)
297
- }} />
298
- {:else}
299
- <Loading positionFixedCenter={true} timeout={1000} />
300
- {/if}
301
- </div>
302
- </div>
303
-
304
- <style>@keyframes fadeIn {
305
- 0% {
306
- opacity: 1;
307
- }
308
- 50% {
309
- opacity: 0.4;
310
- }
311
- 100% {
312
- opacity: 1;
313
- }
314
- }
315
- .stream-player-container {
316
- --stream-player--elements-opacity: 1;
317
- width: 100%;
318
- min-width: 100%;
319
- max-width: 100%;
320
- height: 100%;
321
- min-height: 100%;
322
- max-height: 100%;
323
- container-type: inline-size;
324
- display: flex;
325
- position: relative;
326
- }
327
- .stream-player-container {
328
- background-color: #c1c1c1;
329
- background-image: var(--stream-player--background-image-url);
330
- background-size: cover;
331
- background-blend-mode: multiply;
332
- }
333
- .stream-player-container--background-loading {
334
- background-color: transparent;
335
- }
336
- .stream-player-container--faded {
337
- --stream-player--elements-opacity: 0;
338
- }
339
- .stream-player-container__media-center {
340
- position: absolute;
341
- top: 0;
342
- left: var(--stream-player--overview--width);
343
- right: var(--stream-player--overview--width);
344
- z-index: 1;
345
- }
346
-
347
- .stream-player {
348
- display: flex;
349
- flex: 1;
350
- padding: var(--stream-player--padding);
351
- backdrop-filter: blur(30px);
352
- position: relative;
353
- /* Set 'container-type: inline-size;' to reference container*/
354
- }
355
- @container (width < 576px) {
356
- .stream-player {
357
- padding: 0;
358
- }
359
- }
360
- .stream-player__watermark {
361
- position: absolute;
362
- bottom: 5rem;
363
- left: calc(var(--stream-player--overview--width) + 5rem);
364
- opacity: var(--stream-player--elements-opacity);
365
- transition: opacity 0.3s ease-in-out;
366
- }
367
- .stream-player__content {
368
- width: 100%;
369
- height: 100%;
370
- opacity: var(--stream-player--elements-opacity);
371
- transition: opacity 0.3s ease-in-out;
372
- }
373
-
374
- .close-button {
375
- width: 3rem;
376
- min-width: 3rem;
377
- max-width: 3rem;
378
- height: 3rem;
379
- min-height: 3rem;
380
- max-height: 3rem;
381
- background-color: rgba(0, 0, 0, 0.6);
382
- border: 1px solid #1c1c1c;
383
- border-radius: 50%;
384
- text-align: center;
385
- --icon--color: #ffffff;
386
- --icon--size: 1.75rem;
387
- }
388
- .close-button:hover {
389
- background-color: rgba(0, 0, 0, 0.9);
390
- transition: background-color 0.5s;
391
- }
392
- .close-button:disabled {
393
- opacity: 0.5;
394
- cursor: default;
395
- }</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