@streamscloud/embeddable 10.1.2 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/dist/ads/ad-card/cmp.ad-card.svelte +30 -10
  2. package/dist/ads/ad-card/cmp.ad-card.svelte.d.ts +7 -0
  3. package/dist/content-player/cmp.content-player.svelte +67 -142
  4. package/dist/content-player/content-player-config.svelte.d.ts +14 -10
  5. package/dist/content-player/content-player-config.svelte.js +5 -20
  6. package/dist/content-player/content-player-settings.d.ts +7 -9
  7. package/dist/content-player/content-player-settings.js +12 -4
  8. package/dist/content-player/controls-and-attachments.svelte +63 -58
  9. package/dist/content-player/overview-panel.svelte +32 -74
  10. package/dist/content-player/overview-panel.svelte.d.ts +34 -7
  11. package/dist/content-player/ui-manager.svelte.d.ts +2 -6
  12. package/dist/content-player/ui-manager.svelte.js +3 -7
  13. package/dist/media-center/config/internal-media-center-config.d.ts +7 -3
  14. package/dist/media-center/config/internal-media-center-config.js +27 -23
  15. package/dist/media-center/config/operations.generated.d.ts +23 -3
  16. package/dist/media-center/config/operations.generated.js +37 -6
  17. package/dist/media-center/config/operations.graphql +24 -4
  18. package/dist/media-center/config/types.d.ts +18 -2
  19. package/dist/media-center/media-center/cmp.media-center.svelte +213 -398
  20. package/dist/media-center/media-center/cmp.media-center.svelte.d.ts +2 -17
  21. package/dist/media-center/media-center/discover/data-loading.d.ts +8 -0
  22. package/dist/media-center/media-center/discover/data-loading.js +35 -0
  23. package/dist/media-center/media-center/discover/discover-header-localization.d.ts +6 -0
  24. package/dist/media-center/media-center/discover/discover-header-localization.js +15 -0
  25. package/dist/media-center/media-center/discover/discover-header.svelte +214 -0
  26. package/dist/media-center/media-center/discover/discover-header.svelte.d.ts +9 -0
  27. package/dist/media-center/media-center/discover/discover-view-handler.svelte.d.ts +28 -0
  28. package/dist/media-center/media-center/discover/discover-view-handler.svelte.js +101 -0
  29. package/dist/media-center/media-center/discover/discover-view-localization.d.ts +6 -0
  30. package/dist/media-center/media-center/discover/discover-view-localization.js +15 -0
  31. package/dist/media-center/media-center/discover/discover-view.svelte +238 -0
  32. package/dist/media-center/media-center/discover/discover-view.svelte.d.ts +15 -0
  33. package/dist/media-center/media-center/discover/index.d.ts +2 -0
  34. package/dist/media-center/media-center/discover/index.js +2 -0
  35. package/dist/media-center/media-center/discover/types.svelte.d.ts +20 -0
  36. package/dist/media-center/media-center/discover/types.svelte.js +20 -0
  37. package/dist/media-center/media-center/feed/feed-handler.svelte.d.ts +50 -0
  38. package/dist/media-center/media-center/feed/feed-handler.svelte.js +84 -0
  39. package/dist/media-center/media-center/feed/feed-providers-generator.d.ts +11 -0
  40. package/dist/media-center/media-center/feed/feed-providers-generator.js +79 -0
  41. package/dist/media-center/media-center/feed/index.d.ts +1 -0
  42. package/dist/media-center/media-center/feed/index.js +1 -0
  43. package/dist/media-center/media-center/feed/types.d.ts +12 -0
  44. package/dist/media-center/media-center/handlers/categories-handler.svelte.d.ts +27 -0
  45. package/dist/media-center/media-center/handlers/categories-handler.svelte.js +39 -0
  46. package/dist/media-center/media-center/handlers/index.d.ts +2 -0
  47. package/dist/media-center/media-center/handlers/index.js +2 -0
  48. package/dist/media-center/media-center/handlers/media-center-settings-handler.svelte.d.ts +19 -0
  49. package/dist/media-center/media-center/handlers/media-center-settings-handler.svelte.js +26 -0
  50. package/dist/media-center/media-center/header-footer/index.d.ts +3 -0
  51. package/dist/media-center/media-center/header-footer/index.js +3 -0
  52. package/dist/media-center/media-center/header-footer/media-center-footer.svelte +73 -0
  53. package/dist/media-center/media-center/header-footer/media-center-footer.svelte.d.ts +7 -0
  54. package/dist/media-center/media-center/header-footer/media-center-header-localization.d.ts +13 -0
  55. package/dist/media-center/media-center/header-footer/media-center-header-localization.js +46 -0
  56. package/dist/media-center/media-center/header-footer/media-center-header-mobile.svelte +80 -0
  57. package/dist/media-center/media-center/header-footer/media-center-header-mobile.svelte.d.ts +12 -0
  58. package/dist/media-center/media-center/header-footer/media-center-header.svelte +313 -0
  59. package/dist/media-center/media-center/header-footer/media-center-header.svelte.d.ts +12 -0
  60. package/dist/media-center/media-center/media-center-context.svelte.d.ts +68 -0
  61. package/dist/media-center/media-center/media-center-context.svelte.js +134 -0
  62. package/dist/media-center/media-center/{category-following-wrapper.svelte → menu/category-following-wrapper.svelte} +3 -2
  63. package/dist/media-center/media-center/{category-following-wrapper.svelte.d.ts → menu/category-following-wrapper.svelte.d.ts} +2 -2
  64. package/dist/media-center/media-center/menu/index.d.ts +2 -0
  65. package/dist/media-center/media-center/menu/index.js +2 -0
  66. package/dist/media-center/media-center/menu/menu-localization.d.ts +10 -0
  67. package/dist/media-center/media-center/menu/menu-localization.js +39 -0
  68. package/dist/media-center/media-center/menu/menu.svelte +353 -0
  69. package/dist/media-center/media-center/menu/menu.svelte.d.ts +14 -0
  70. package/dist/media-center/media-center/menu/popular-streams-panel-handler.svelte.d.ts +10 -0
  71. package/dist/media-center/media-center/menu/popular-streams-panel-handler.svelte.js +23 -0
  72. package/dist/media-center/media-center/moments/cmp.moments-circle.svelte +41 -0
  73. package/dist/media-center/media-center/moments/cmp.moments-circle.svelte.d.ts +7 -0
  74. package/dist/media-center/media-center/moments/index.d.ts +1 -0
  75. package/dist/media-center/media-center/moments/index.js +1 -0
  76. package/dist/media-center/media-center/streams-in-category/index.d.ts +2 -0
  77. package/dist/media-center/media-center/streams-in-category/index.js +2 -0
  78. package/dist/media-center/media-center/{streams-in-category-panel-handler.svelte.d.ts → streams-in-category/streams-in-category-panel-handler.svelte.d.ts} +5 -5
  79. package/dist/media-center/media-center/{streams-in-category-panel-handler.svelte.js → streams-in-category/streams-in-category-panel-handler.svelte.js} +5 -5
  80. package/dist/media-center/media-center/{streams-in-category-panel.svelte → streams-in-category/streams-in-category-panel.svelte} +1 -1
  81. package/dist/media-center/media-center/{streams-in-category-panel.svelte.d.ts → streams-in-category/streams-in-category-panel.svelte.d.ts} +1 -1
  82. package/dist/media-center/media-center/types.d.ts +44 -1
  83. package/dist/media-page/index.d.ts +121 -0
  84. package/dist/media-page/index.js +43 -0
  85. package/dist/posts/attachments/cmp.attachments.svelte +6 -3
  86. package/dist/posts/attachments/cmp.attachments.svelte.d.ts +6 -0
  87. package/dist/posts/controls/cmp.controls.svelte +51 -14
  88. package/dist/posts/controls/cmp.controls.svelte.d.ts +2 -0
  89. package/dist/posts/data-loaders/operations.generated.d.ts +4 -0
  90. package/dist/posts/data-loaders/operations.generated.js +6 -2
  91. package/dist/posts/model/types.d.ts +2 -0
  92. package/dist/posts/post-viewer/cmp.post-viewer.svelte +29 -19
  93. package/dist/posts/post-viewer/cmp.post-viewer.svelte.d.ts +4 -0
  94. package/dist/posts/post-viewer/mapper.js +2 -0
  95. package/dist/posts/post-viewer/operations.generated.d.ts +2 -0
  96. package/dist/posts/post-viewer/operations.generated.js +3 -1
  97. package/dist/posts/post-viewer/operations.graphql +2 -0
  98. package/dist/posts/post-viewer/post-texts.svelte +3 -3
  99. package/dist/posts/posts-player/cmp.posts-player.svelte +20 -6
  100. package/dist/posts/posts-player/cmp.posts-player.svelte.d.ts +18 -2
  101. package/dist/posts/posts-player/index.d.ts +18 -3
  102. package/dist/posts/posts-player/index.js +42 -89
  103. package/dist/posts/posts-player/posts-player-proxy.svelte +19 -0
  104. package/dist/posts/posts-player/posts-player-proxy.svelte.d.ts +22 -0
  105. package/dist/posts/posts-player/posts-player-view.svelte +20 -34
  106. package/dist/posts/posts-player/posts-player-view.svelte.d.ts +2 -6
  107. package/dist/posts/posts-player/types.d.ts +19 -6
  108. package/dist/products/product-card/cmp.product-card.svelte +39 -15
  109. package/dist/products/product-card/cmp.product-card.svelte.d.ts +6 -1
  110. package/dist/short-videos/short-video-card/cmp.short-video-card.svelte +160 -19
  111. package/dist/short-videos/short-video-card/cmp.short-video-card.svelte.d.ts +2 -1
  112. package/dist/short-videos/short-video-card/localization.d.ts +5 -0
  113. package/dist/short-videos/short-video-card/localization.js +13 -0
  114. package/dist/short-videos/short-video-card/types.d.ts +4 -0
  115. package/dist/short-videos/short-videos-player/index.js +26 -33
  116. package/dist/streams/data-loaders/mapper.js +0 -5
  117. package/dist/streams/data-loaders/operations.generated.d.ts +0 -12
  118. package/dist/streams/data-loaders/operations.generated.js +0 -26
  119. package/dist/streams/data-loaders/operations.graphql +0 -6
  120. package/dist/streams/layout/element-views/cmp.short-video-stream-element.svelte +2 -1
  121. package/dist/streams/layout/element-views/cmp.short-video-stream-element.svelte.d.ts +4 -0
  122. package/dist/streams/layout/element-views/cmp.stream-element.svelte +2 -2
  123. package/dist/streams/layout/element-views/cmp.text-ref-stream-element.svelte +7 -3
  124. package/dist/streams/layout/element-views/cmp.text-ref-stream-element.svelte.d.ts +2 -0
  125. package/dist/streams/layout/element-views/cmp.text-stream-element.svelte +7 -3
  126. package/dist/streams/layout/element-views/cmp.text-stream-element.svelte.d.ts +2 -0
  127. package/dist/streams/layout/element-views/price-element-view.svelte +2 -2
  128. package/dist/streams/layout/element-views/price-stream-element-localization.d.ts +1 -1
  129. package/dist/streams/layout/element-views/price-stream-element-localization.js +2 -2
  130. package/dist/streams/layout/models/mapper.js +2 -0
  131. package/dist/streams/stream-card/cmp.stream-card.svelte +5 -5
  132. package/dist/streams/streams-player/index.d.ts +21 -2
  133. package/dist/streams/streams-player/index.js +49 -24
  134. package/dist/streams/streams-player/stream-overview.svelte +6 -96
  135. package/dist/streams/streams-player/stream-overview.svelte.d.ts +0 -4
  136. package/dist/streams/streams-player/stream-player-localization.d.ts +0 -1
  137. package/dist/streams/streams-player/stream-player-localization.js +0 -6
  138. package/dist/streams/streams-player/streams-player-buffer.svelte.d.ts +1 -3
  139. package/dist/streams/streams-player/streams-player-buffer.svelte.js +2 -2
  140. package/dist/streams/streams-player/streams-player-view.svelte +25 -23
  141. package/dist/streams/streams-player/streams-player-view.svelte.d.ts +1 -5
  142. package/dist/streams/streams-player/types.d.ts +18 -8
  143. package/dist/ui/icon/cmp.icon.svelte +3 -2
  144. package/dist/ui/line-clamp/cmp.line-clamp-auto.svelte +119 -0
  145. package/dist/ui/line-clamp/cmp.line-clamp-auto.svelte.d.ts +10 -0
  146. package/dist/ui/line-clamp/cmp.line-clamp.svelte +44 -72
  147. package/dist/ui/line-clamp/cmp.line-clamp.svelte.d.ts +3 -4
  148. package/dist/ui/line-clamp/index.d.ts +1 -0
  149. package/dist/ui/line-clamp/index.js +1 -0
  150. package/dist/ui/player/button/cmp.mobile-player-buttons-group.svelte +44 -0
  151. package/dist/ui/player/button/cmp.mobile-player-buttons-group.svelte.d.ts +7 -0
  152. package/dist/ui/player/button/cmp.player-button.svelte +16 -5
  153. package/dist/ui/player/button/cmp.player-button.svelte.d.ts +3 -0
  154. package/dist/ui/player/button/cmp.player-buttons-group.svelte +27 -8
  155. package/dist/ui/player/button/cmp.player-buttons-group.svelte.d.ts +2 -0
  156. package/dist/ui/player/button/index.d.ts +1 -0
  157. package/dist/ui/player/button/index.js +1 -0
  158. package/dist/ui/player/close-orchestrator/close-orchestrator.svelte.d.ts +18 -0
  159. package/dist/ui/player/close-orchestrator/close-orchestrator.svelte.js +58 -0
  160. package/dist/ui/player/close-orchestrator/index.d.ts +2 -0
  161. package/dist/ui/player/close-orchestrator/index.js +1 -0
  162. package/dist/ui/player/close-orchestrator/types.d.ts +9 -0
  163. package/dist/ui/player/close-orchestrator/types.js +1 -0
  164. package/dist/ui/player/colors/index.d.ts +1 -0
  165. package/dist/ui/player/colors/index.js +1 -0
  166. package/dist/ui/player/colors/player-colors.d.ts +11 -0
  167. package/dist/ui/player/colors/player-colors.js +1 -0
  168. package/dist/ui/player/providers/chunks-player-buffer/player-chunks-manager.svelte.d.ts +2 -6
  169. package/dist/ui/player/providers/chunks-player-buffer/player-chunks-manager.svelte.js +11 -11
  170. package/dist/ui/player/providers/default-chunks-player-buffer.svelte.d.ts +2 -3
  171. package/dist/ui/player/providers/default-chunks-player-buffer.svelte.js +5 -5
  172. package/dist/ui/player/providers/default-feed-player-buffer.svelte.d.ts +3 -4
  173. package/dist/ui/player/providers/default-feed-player-buffer.svelte.js +16 -9
  174. package/dist/ui/player/providers/service.d.ts +2 -0
  175. package/dist/ui/player/providers/service.js +13 -0
  176. package/dist/ui/player/providers/types.d.ts +1 -0
  177. package/dist/ui/with-background/cmp.with-background.svelte +86 -0
  178. package/dist/ui/with-background/cmp.with-background.svelte.d.ts +10 -0
  179. package/dist/ui/with-background/index.d.ts +1 -0
  180. package/dist/ui/with-background/index.js +1 -0
  181. package/package.json +5 -1
  182. package/dist/content-player/content-player-localization.d.ts +0 -6
  183. package/dist/content-player/content-player-localization.js +0 -15
  184. package/dist/content-player/fade-mixins.scss +0 -12
  185. package/dist/content-player/header.svelte +0 -137
  186. package/dist/content-player/header.svelte.d.ts +0 -32
  187. package/dist/media-center/media-center/desktop-categories-selector.svelte +0 -132
  188. package/dist/media-center/media-center/desktop-categories-selector.svelte.d.ts +0 -12
  189. package/dist/media-center/media-center/discover-panel-handler.svelte.d.ts +0 -32
  190. package/dist/media-center/media-center/discover-panel-handler.svelte.js +0 -101
  191. package/dist/media-center/media-center/discover-panel.svelte +0 -133
  192. package/dist/media-center/media-center/discover-panel.svelte.d.ts +0 -15
  193. package/dist/media-center/media-center/media-center-handler.svelte.d.ts +0 -28
  194. package/dist/media-center/media-center/media-center-handler.svelte.js +0 -73
  195. package/dist/media-center/media-center/media-center-localization.d.ts +0 -10
  196. package/dist/media-center/media-center/media-center-localization.js +0 -39
  197. package/dist/media-center/media-center/mobile-controls-panel.svelte +0 -268
  198. package/dist/media-center/media-center/mobile-controls-panel.svelte.d.ts +0 -20
  199. package/dist/media-center/media-center/post-player-provider-generator.d.ts +0 -8
  200. package/dist/media-center/media-center/post-player-provider-generator.js +0 -32
  201. package/dist/media-center/media-center/streams-player-provider-generator.d.ts +0 -8
  202. package/dist/media-center/media-center/streams-player-provider-generator.js +0 -36
  203. package/dist/media-center/model/types.d.ts +0 -16
  204. /package/dist/media-center/{model → media-center/feed}/types.js +0 -0
@@ -4,7 +4,7 @@ import { toPriceRepresentation } from '../../products/price-helper';
4
4
  import { Button, ButtonSize } from '../../ui/button';
5
5
  import { Image } from '../../ui/image';
6
6
  import { LineClamp } from '../../ui/line-clamp';
7
- let { ad, trackingParams, inert = false, on } = $props();
7
+ let { ad, colors, locale, trackingParams, inert = false, on } = $props();
8
8
  const trackImpression = (node) => {
9
9
  if (on === null || on === void 0 ? void 0 : on.impression) {
10
10
  const observer = new IntersectionObserver((entries) => {
@@ -33,9 +33,19 @@ const handleAdClick = () => {
33
33
  window.open(enrichedLink, '_blank', 'noopener noreferrer');
34
34
  }
35
35
  };
36
+ const styles = $derived.by(() => {
37
+ const values = [];
38
+ if (colors === null || colors === void 0 ? void 0 : colors.background) {
39
+ values.push(`--ad-card--background-color: ${colors.background}`);
40
+ }
41
+ if (colors === null || colors === void 0 ? void 0 : colors.price) {
42
+ values.push(`--ad-card--price-color: ${colors.price}`);
43
+ }
44
+ return values.join(';');
45
+ });
36
46
  </script>
37
47
 
38
- <div class="ad-card" inert={inert} use:trackImpression>
48
+ <div class="ad-card" style={styles} inert={inert} use:trackImpression>
39
49
  <div class="ad-card__image">
40
50
  <Image src={ad.image} alt={ad.title} />
41
51
  </div>
@@ -43,12 +53,12 @@ const handleAdClick = () => {
43
53
  <div class="ad-card__content">
44
54
  {#if ad.title}
45
55
  <div class="ad-card__title">
46
- <LineClamp value={ad.title} maxLines={2} />
56
+ <LineClamp maxLines={2} locale={locale}>{ad.title}</LineClamp>
47
57
  </div>
48
58
  {/if}
49
59
  {#if ad.description}
50
60
  <div class="ad-card__description">
51
- <LineClamp value={ad.description} maxLines={2} />
61
+ <LineClamp maxLines={2} locale={locale}>{ad.description}</LineClamp>
52
62
  </div>
53
63
  {/if}
54
64
  </div>
@@ -69,8 +79,8 @@ const handleAdClick = () => {
69
79
  size={ButtonSize.Standard}
70
80
  on={{ click: handleAdClick }}
71
81
  --button--font--size="1em"
72
- --button--font--color={ad.ctaButton.textColor}
73
- --button--background={ad.ctaButton.background}
82
+ --button--font--color={colors?.buttonBackground ? '#FFFFFF' : ad.ctaButton.textColor}
83
+ --button--background={colors?.buttonBackground ?? ad.ctaButton.background}
74
84
  --button--min-width="100%">
75
85
  <span class="ad-card__button-text">{ad.ctaButton.text}</span>
76
86
  </Button>
@@ -92,6 +102,9 @@ const handleAdClick = () => {
92
102
  }
93
103
  }
94
104
  .ad-card {
105
+ --_ad-card--background-color: var(--ad-card--background-color, rgb(from #ffffff r g b/90%));
106
+ --_ad-card--border-color: var(--ad-card--background-color, #f2f2f3);
107
+ --_ad-card--price-color: var(--ad-card--price-color, inherit);
95
108
  width: 100%;
96
109
  height: max-content;
97
110
  display: flex;
@@ -100,8 +113,8 @@ const handleAdClick = () => {
100
113
  container-type: inline-size;
101
114
  aspect-ratio: 9/16;
102
115
  color: #000000;
103
- background-color: rgba(255, 255, 255, 0.9);
104
- border: 1px solid #f2f2f3;
116
+ background-color: var(--_ad-card--background-color);
117
+ border: 1px solid var(--_ad-card--border-color);
105
118
  border-radius: 0.5rem;
106
119
  padding: 0.75rem 0.75rem 1.125rem;
107
120
  justify-content: flex-start;
@@ -109,9 +122,9 @@ const handleAdClick = () => {
109
122
  /* Set 'container-type: inline-size;' to reference container*/
110
123
  }
111
124
  :global([data-theme="dark"]) .ad-card {
112
- background-color: rgba(18, 18, 18, 0.9);
125
+ --_ad-card--background-color: var(--ad-card--background-color, rgb(from #121212 r g b/90%));
126
+ --_ad-card--border-color: var(--ad-card--background-color, #1e1e1e);
113
127
  color: #ffffff;
114
- border-color: #1e1e1e;
115
128
  }
116
129
  @container (width < 230px) {
117
130
  .ad-card {
@@ -221,6 +234,9 @@ const handleAdClick = () => {
221
234
  min-height: 0.875rem;
222
235
  }
223
236
  }
237
+ :global([data-theme="dark"]) .ad-card__description {
238
+ color: #d1d5db;
239
+ }
224
240
  .ad-card__price {
225
241
  font-size: 1.6875rem;
226
242
  font-weight: 700;
@@ -230,6 +246,7 @@ const handleAdClick = () => {
230
246
  gap: 0.625rem;
231
247
  min-width: 0;
232
248
  white-space: nowrap;
249
+ color: var(--_ad-card--price-color);
233
250
  /* Set 'container-type: inline-size;' to reference container*/
234
251
  }
235
252
  @container (width < 230px) {
@@ -259,6 +276,9 @@ const handleAdClick = () => {
259
276
  line-height: 0.875rem;
260
277
  }
261
278
  }
279
+ :global([data-theme="dark"]) .ad-card__price-info-label {
280
+ color: #d1d5db;
281
+ }
262
282
  .ad-card__button {
263
283
  width: 100%;
264
284
  }
@@ -1,8 +1,15 @@
1
+ import type { Locale } from '../../core/locale';
1
2
  import { type TrackingParams } from '../../marketing-tracking';
2
3
  import type { AdCardModel } from './types';
3
4
  type Props = {
4
5
  ad: AdCardModel;
5
6
  trackingParams: TrackingParams;
7
+ colors: {
8
+ background?: string | null;
9
+ price?: string | null;
10
+ buttonBackground?: string | null;
11
+ };
12
+ locale: Locale;
6
13
  inert?: boolean;
7
14
  on?: {
8
15
  click?: (id: string) => void;
@@ -1,38 +1,19 @@
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 { ContentPlayerLocalization } from './content-player-localization';
11
- import { handleEsc } from '../core/document.event-handlers';
1
+ <script lang="ts">import { handleEsc } from '../core/document.event-handlers';
12
2
  import { PostViewer } from '../posts/post-viewer';
13
3
  import { Loading } from '../ui/loading';
14
4
  import { PlayerSlider } from '../ui/player/slider';
15
5
  import { SwipeIndicator } from '../ui/swipe-indicator';
16
6
  import { default as ControlsAndAttachments } from './controls-and-attachments.svelte';
17
- import { default as Header } from './header.svelte';
18
7
  import { default as OverviewPanel } from './overview-panel.svelte';
19
- import { onMount, untrack } from 'svelte';
8
+ import {} from 'svelte';
20
9
  let { config, nonPostItemView, overviewPanelContent } = $props();
21
- const localization = new ContentPlayerLocalization(config.settings.locale);
22
10
  let everTouched = $state(false);
23
- const uiManager = config.uiManager;
24
- onMount(() => __awaiter(void 0, void 0, void 0, function* () {
25
- uiManager.overviewCollapsed = window && window.innerWidth < window.innerHeight;
26
- }));
27
- $effect(() => {
28
- var _a;
29
- void ((_a = config.playerBuffer) === null || _a === void 0 ? void 0 : _a.current);
30
- untrack(() => {
31
- if (uiManager.viewInitialized && uiManager.isMobileView) {
32
- uiManager.overviewCollapsed = true;
33
- }
34
- });
11
+ let overviewPosition = $state({
12
+ top: 0,
13
+ bottom: 0,
14
+ right: 0
35
15
  });
16
+ const uiManager = config.uiManager;
36
17
  const handleContentPlayerMounted = (node) => {
37
18
  const markAsTouched = () => {
38
19
  everTouched = true;
@@ -98,6 +79,12 @@ const handleSliderMounted = (node) => {
98
79
  node.style.setProperty('--_content-player--content--height', height);
99
80
  node.style.setProperty('--_content-player--content--margin', margin);
100
81
  uiManager.contentViewWidth = contentWidthNumber;
82
+ const verticalIndent = uiManager.isMobileView ? 0 : 13;
83
+ overviewPosition = {
84
+ top: verticalIndent,
85
+ bottom: verticalIndent,
86
+ right: (playerWidth - contentWidthNumber) / 2 + contentWidthNumber
87
+ };
101
88
  });
102
89
  resizeObserver.observe(node);
103
90
  return {
@@ -106,100 +93,67 @@ const handleSliderMounted = (node) => {
106
93
  }
107
94
  };
108
95
  };
109
- const PLAYER_PADDING_VERTICAL = 10;
110
- const variables = $derived.by(() => {
111
- const values = [
112
- `--_content-player--padding: ${uiManager.mediaCenterHeaderHeight ? uiManager.mediaCenterHeaderHeight : PLAYER_PADDING_VERTICAL}px 0 ${PLAYER_PADDING_VERTICAL}px`,
113
- `--_content-player--watermark--left-indent: ${uiManager.overviewWidth + uiManager.safeAreaSize}px`
114
- ];
115
- if (uiManager.backgroundImageUrl) {
116
- values.push(`--_content-player--background-image-url: url(${uiManager.backgroundImageUrl})`);
117
- }
118
- return values.join(';');
119
- });
120
96
  </script>
121
97
 
122
98
  <svelte:document
123
99
  onkeydown={(e) => {
124
- if (config.settings.enableCloseButton) {
125
- handleEsc(e, () => config.callbacks?.close?.());
100
+ if (config.closeOrchestrator.closeTriggerVisible) {
101
+ handleEsc(e, () => config.closeOrchestrator.requestClose());
126
102
  }
127
103
  }} />
128
104
 
129
- <svelte:head>
130
- <meta name="theme-color" content="#242424" />
131
- <meta name="color-scheme" content="dark" />
132
- <meta name="mobile-web-app-capable" content="yes" />
133
- <meta name="apple-mobile-web-app-capable" content="yes" />
134
- <meta name="apple-mobile-web-app-status-bar-style" content="black" />
105
+ <div class="content-player" use:handleContentPlayerMounted>
106
+ {#if config.settings.showStreamsCloudWatermark}
107
+ <div class="content-player__watermark">
108
+ <a href="https://streamscloud.com/" tabindex="-1" aria-label="none">
109
+ <img src="https://embedabble-assets.streamscloud-cdn.com/watermark.svg" alt="StreamsCloud" />
110
+ </a>
111
+ </div>
112
+ {/if}
113
+ {#if config.playerBuffer}
114
+ <div class="content-player__slider" use:handleSliderMounted>
115
+ <PlayerSlider buffer={config.playerBuffer} on={config.playerSliderCallbacks}>
116
+ {#snippet children({ item })}
117
+ {@const postModel = config.itemAsPostViewerModel(item)}
118
+ <div class="content-player__content">
119
+ {#if postModel}
120
+ <PostViewer
121
+ model={postModel}
122
+ controlsColors={{ active: config.playerColors.button, inactive: config.playerColors.buttonInactive }}
123
+ trackingParams={config.trackingParams}
124
+ socialInteractionsHandler={config.socialInteractionsHandler}
125
+ enableAttachments={config.uiManager.showPostOverlayAttachments}
126
+ enableControls={config.uiManager.showPostOverlayControls}
127
+ autoplay="on-appearance"
128
+ locale={config.settings.locale}
129
+ on={{
130
+ progress: (progress) => config.callbacks?.videoProgress?.(item.id, postModel.id, progress),
131
+ productClick: (productId) => config.callbacks?.productClick?.(productId, postModel.id),
132
+ productImpression: (productId) => config.callbacks?.productImpression?.(productId, postModel.id),
133
+ adClick: (adId) => config.callbacks?.adClick?.(adId, postModel.id),
134
+ adImpression: (adId) => config.callbacks?.adImpression?.(adId, postModel.id)
135
+ }} />
136
+ {:else if nonPostItemView}
137
+ {@render nonPostItemView({ item })}
138
+ {/if}
135
139
 
136
- <style>
137
- html,
138
- body {
139
- background-color: #242424;
140
- color-scheme: dark;
141
- }
142
- </style>
143
- </svelte:head>
140
+ {#if uiManager.isMobileView && config.playerBuffer && config.playerBuffer.loaded.length > 1 && !everTouched}
141
+ <SwipeIndicator locale={config.settings.locale} />
142
+ {/if}
143
+ </div>
144
+ {/snippet}
145
+ </PlayerSlider>
146
+ {#if overviewPanelContent && config.playerBuffer.loaded.length > 0}
147
+ <OverviewPanel config={config} position={overviewPosition} uiManager={uiManager}>
148
+ {@render overviewPanelContent()}
149
+ </OverviewPanel>
150
+ {/if}
151
+ </div>
144
152
 
145
- <div
146
- class="content-player-container"
147
- class:content-player-container--background-enabled={!config.settings.disableBackground}
148
- class:content-player-container--background-loading={!config.settings.disableBackground && !uiManager.backgroundImageUrl}
149
- class:content-player-container--faded={config.fadeContent}
150
- style={variables}>
151
- <Header config={config} overviewPanelContent={overviewPanelContent} localization={localization} />
152
- {#if overviewPanelContent}
153
- <OverviewPanel contentFaded={config.fadeContent} uiManager={uiManager}>
154
- {@render overviewPanelContent()}
155
- </OverviewPanel>
153
+ <ControlsAndAttachments config={config} />
154
+ {:else}
155
+ <Loading positionFixedCenter={true} timeout={1000} />
156
156
  {/if}
157
- <div class="content-player" use:handleContentPlayerMounted>
158
- {#if config.settings.showStreamsCloudWatermark}
159
- <div class="content-player__watermark">
160
- <a href="https://streamscloud.com/" tabindex="-1" aria-label="none">
161
- <img src="https://embedabble-assets.streamscloud-cdn.com/watermark.svg" alt="StreamsCloud" />
162
- </a>
163
- </div>
164
- {/if}
165
- {#if config.playerBuffer}
166
- <div class="content-player__slider" use:handleSliderMounted>
167
- <PlayerSlider buffer={config.playerBuffer} on={config.playerSliderCallbacks}>
168
- {#snippet children({ item })}
169
- {@const postModel = config.itemAsPostViewerModel(item)}
170
- <div class="content-player__content">
171
- {#if postModel}
172
- <PostViewer
173
- model={postModel}
174
- trackingParams={config.trackingParams}
175
- socialInteractionsHandler={config.socialInteractionsHandler}
176
- enableAttachments={config.uiManager.showPostOverlayAttachments}
177
- enableControls={config.uiManager.showPostOverlayControls}
178
- autoplay="on-appearance"
179
- locale={config.settings.locale}
180
- on={{
181
- progress: (progress) => config.callbacks?.videoProgress?.(item.id, postModel.id, progress),
182
- productClick: (productId) => config.callbacks?.productClick?.(productId, postModel.id),
183
- productImpression: (productId) => config.callbacks?.productImpression?.(productId, postModel.id),
184
- adClick: (adId) => config.callbacks?.adClick?.(adId, postModel.id),
185
- adImpression: (adId) => config.callbacks?.adImpression?.(adId, postModel.id)
186
- }} />
187
- {:else if nonPostItemView}
188
- {@render nonPostItemView({ item })}
189
- {/if}
190
-
191
- {#if uiManager.isMobileView && config.playerBuffer && config.playerBuffer.loaded.length > 1 && !everTouched}
192
- <SwipeIndicator locale={config.settings.locale} />
193
- {/if}
194
- </div>
195
- {/snippet}
196
- </PlayerSlider>
197
- </div>
198
- <ControlsAndAttachments config={config} />
199
- {:else}
200
- <Loading positionFixedCenter={true} timeout={1000} />
201
- {/if}
202
- </div>
203
157
  </div>
204
158
 
205
159
  <style>@keyframes fadeIn {
@@ -213,36 +167,11 @@ const variables = $derived.by(() => {
213
167
  opacity: 1;
214
168
  }
215
169
  }
216
- .content-player-container {
217
- --content-player--elements-opacity: 1;
218
- width: 100%;
219
- min-width: 100%;
220
- max-width: 100%;
221
- height: 100%;
222
- min-height: 100%;
223
- max-height: 100%;
224
- container-type: inline-size;
225
- display: flex;
226
- position: relative;
227
- }
228
- .content-player-container--background-enabled {
229
- background-color: #c1c1c1;
230
- background-image: var(--_content-player--background-image-url);
231
- background-size: cover;
232
- background-blend-mode: multiply;
233
- }
234
- .content-player-container--background-loading {
235
- background-color: transparent;
236
- }
237
- .content-player-container--faded {
238
- --content-player--elements-opacity: 0;
239
- }
240
-
241
170
  .content-player {
242
171
  display: flex;
243
172
  flex: 1;
244
- padding: var(--_content-player--padding);
245
- backdrop-filter: blur(30px);
173
+ min-height: 0;
174
+ padding: 0.625rem 0;
246
175
  position: relative;
247
176
  /* Set 'container-type: inline-size;' to reference container*/
248
177
  }
@@ -262,17 +191,13 @@ const variables = $derived.by(() => {
262
191
  .content-player__watermark {
263
192
  position: absolute;
264
193
  bottom: 5rem;
265
- left: var(--_content-player--watermark--left-indent);
266
- opacity: var(--content-player--elements-opacity);
267
- transition: opacity 0.3s ease-in-out;
194
+ left: 4.375rem;
268
195
  }
269
196
  .content-player__content {
270
197
  width: var(--_content-player--content--width, 100%);
271
198
  height: var(--_content-player--content--height, 100%);
272
199
  margin: var(--_content-player--content--margin, 0);
273
200
  position: relative;
274
- opacity: var(--content-player--elements-opacity);
275
- transition: opacity 0.3s ease-in-out;
276
201
  display: flex;
277
202
  justify-content: center;
278
203
  align-items: center;
@@ -1,6 +1,6 @@
1
- import type { MediaCenterData } from '../media-center/model/types';
2
1
  import { type IPostModel, PostModel } from '../posts/model';
3
2
  import type { IPostSocialInteractionsHandler } from '../posts/social-interactions';
3
+ import type { ICloseOrchestrator } from '../ui/player/close-orchestrator';
4
4
  import type { IPlayerBuffer } from '../ui/player/providers';
5
5
  import type { PlayerSliderCallbacks } from '../ui/player/slider/types';
6
6
  import { ContentPlayerSettings } from './content-player-settings';
@@ -13,8 +13,8 @@ export declare class ContentPlayerConfig<T extends {
13
13
  readonly callbacks: ContentPlayerCallbacks | null;
14
14
  readonly playerSliderCallbacks: PlayerSliderCallbacks | undefined;
15
15
  readonly socialInteractionsHandler: IPostSocialInteractionsHandler | undefined;
16
+ readonly closeOrchestrator: ICloseOrchestrator;
16
17
  readonly uiManager: ContentPlayerUIManager;
17
- private _mediaCenterData;
18
18
  private _trackingParams;
19
19
  private _mappers;
20
20
  private mappedPostsCache;
@@ -22,29 +22,33 @@ export declare class ContentPlayerConfig<T extends {
22
22
  playerBuffer: IPlayerBuffer<T> | null;
23
23
  mappers: ContentPlayerMappers<T>;
24
24
  socialInteractionsHandler?: IPostSocialInteractionsHandler;
25
- mediaCenterData?: MediaCenterData;
26
25
  settings?: ContentPlayerSettings;
27
26
  callbacks?: ContentPlayerCallbacks;
28
27
  playerSliderCallbacks?: PlayerSliderCallbacks;
29
28
  trackingParams?: ContentPlayerTrackingParams | null;
29
+ closeOrchestrator: ICloseOrchestrator;
30
30
  });
31
- get mediaCenterControlsPanel(): MediaCenterData['controlsPanel'] | null;
32
- get mediaCenterCallbacks(): MediaCenterData['callbacks'] | null;
33
- get playerLogo(): string | null;
34
- get fadeContent(): boolean;
31
+ get playerColors(): {
32
+ brand: string | null;
33
+ button: string | null;
34
+ buttonInactive: string | null;
35
+ cardButton: string | null;
36
+ cardBackground: string | null;
37
+ playerBackground: string | null;
38
+ price: string | null;
39
+ salePrice: string | null;
40
+ sidebarBackground: string | null;
41
+ };
35
42
  get trackingParams(): ContentPlayerConfig<T>['_trackingParams'];
36
43
  itemAsPostViewerModel: (item: T & {
37
44
  mediaIndex?: number;
38
45
  }) => PostModel | null;
39
- setBackgroundImageUrl: (imageUrl: string | null) => void;
40
- updateMediaCenterData: (data: MediaCenterData | undefined) => void;
41
46
  updateTrackingParams: (data: ContentPlayerTrackingParams | null) => void;
42
47
  }
43
48
  export type ContentPlayerMappers<T> = {
44
49
  postModelFromCurrentItem: (item: T) => IPostModel | null;
45
50
  };
46
51
  export type ContentPlayerCallbacks = {
47
- close?: () => void;
48
52
  videoProgress?: (playerItemId: string, postId: string, progress: number) => void;
49
53
  productClick?: (productId: string, postId: string) => void;
50
54
  productImpression?: (productId: string, postId: string) => void;
@@ -7,33 +7,24 @@ export class ContentPlayerConfig {
7
7
  callbacks;
8
8
  playerSliderCallbacks;
9
9
  socialInteractionsHandler;
10
+ closeOrchestrator;
10
11
  uiManager = new ContentPlayerUIManager();
11
- _mediaCenterData = $state.raw(null);
12
12
  _trackingParams = $state.raw(null);
13
13
  _mappers;
14
14
  mappedPostsCache = new Map();
15
15
  constructor(init) {
16
- const { playerBuffer, trackingParams, mappers, socialInteractionsHandler, mediaCenterData, settings, callbacks, playerSliderCallbacks } = init;
16
+ const { playerBuffer, trackingParams, mappers, socialInteractionsHandler, settings, callbacks, playerSliderCallbacks, closeOrchestrator } = init;
17
17
  this.playerBuffer = playerBuffer;
18
18
  this._trackingParams = trackingParams ?? null;
19
19
  this.settings = settings || new ContentPlayerSettings();
20
- this._mediaCenterData = mediaCenterData || null;
21
20
  this.callbacks = callbacks || null;
22
21
  this.playerSliderCallbacks = playerSliderCallbacks;
23
22
  this.socialInteractionsHandler = socialInteractionsHandler;
23
+ this.closeOrchestrator = closeOrchestrator;
24
24
  this._mappers = mappers;
25
25
  }
26
- get mediaCenterControlsPanel() {
27
- return this._mediaCenterData?.controlsPanel || null;
28
- }
29
- get mediaCenterCallbacks() {
30
- return this._mediaCenterData?.callbacks || null;
31
- }
32
- get playerLogo() {
33
- return this._mediaCenterData?.playerLogo || null;
34
- }
35
- get fadeContent() {
36
- return this._mediaCenterData?.overlayIsActive || false;
26
+ get playerColors() {
27
+ return this.settings.playerColors;
37
28
  }
38
29
  get trackingParams() {
39
30
  return this._trackingParams;
@@ -51,12 +42,6 @@ export class ContentPlayerConfig {
51
42
  this.mappedPostsCache.set(item.id, postModel);
52
43
  return postModel;
53
44
  };
54
- setBackgroundImageUrl = (imageUrl) => {
55
- this.uiManager.backgroundImageUrl = imageUrl;
56
- };
57
- updateMediaCenterData = (data) => {
58
- this._mediaCenterData = data ?? null;
59
- };
60
45
  updateTrackingParams = (data) => {
61
46
  this._trackingParams = data ?? null;
62
47
  };
@@ -1,14 +1,12 @@
1
1
  import type { Locale } from '../core/locale';
2
+ import type { PlayerColors } from '../ui/player/colors';
2
3
  export declare class ContentPlayerSettings {
3
- disableBackground: boolean;
4
- enableCloseButton: boolean;
5
4
  locale: Locale;
6
5
  showStreamsCloudWatermark: boolean;
7
- constructor(init?: IContentPlayerSettingsInitializer);
8
- }
9
- export interface IContentPlayerSettingsInitializer {
10
- disableBackground?: boolean;
11
- hideCloseButton?: boolean;
12
- locale?: Locale;
13
- showStreamsCloudWatermark?: boolean;
6
+ playerColors: NonNullable<PlayerColors>;
7
+ constructor(init?: {
8
+ locale?: Locale;
9
+ showStreamsCloudWatermark?: boolean;
10
+ playerColors?: PlayerColors;
11
+ });
14
12
  }
@@ -1,14 +1,22 @@
1
1
  export class ContentPlayerSettings {
2
- disableBackground = false;
3
- enableCloseButton = true;
4
2
  locale = 'en';
5
3
  showStreamsCloudWatermark = false;
4
+ playerColors = {
5
+ brand: null,
6
+ button: null,
7
+ buttonInactive: null,
8
+ cardButton: null,
9
+ cardBackground: null,
10
+ playerBackground: null,
11
+ price: null,
12
+ salePrice: null,
13
+ sidebarBackground: null
14
+ };
6
15
  constructor(init) {
7
16
  if (init) {
8
- this.disableBackground = init.disableBackground ?? this.disableBackground;
9
- this.enableCloseButton = init.hideCloseButton !== undefined ? !init.hideCloseButton : this.enableCloseButton;
10
17
  this.locale = init.locale ?? this.locale;
11
18
  this.showStreamsCloudWatermark = init.showStreamsCloudWatermark ?? this.showStreamsCloudWatermark;
19
+ this.playerColors = init?.playerColors ?? this.playerColors;
12
20
  }
13
21
  }
14
22
  }