@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
@@ -1,3 +1,4 @@
1
+ import { Deferred } from '../../../core/deferred';
1
2
  import { Utils } from '../../../core/utils';
2
3
  const BUFFER_SIZE = 5;
3
4
  export class DefaultFeedPlayerBuffer {
@@ -12,13 +13,13 @@ export class DefaultFeedPlayerBuffer {
12
13
  _currentIndex = $state(-1);
13
14
  _loaded = $state.raw([]);
14
15
  _loadMoreFn;
15
- _isLoading = $state(false);
16
- constructor(provider, on) {
16
+ _fetchDeferred = $state.raw(null);
17
+ constructor(provider) {
17
18
  this._loadMoreFn = provider.loadMore;
18
19
  // Throttle navigation methods
19
20
  this.loadNext = Utils.throttle(this.loadNext, this.animationDuration);
20
21
  this.loadPrevious = Utils.throttle(this.loadPrevious, this.animationDuration);
21
- this.initializeBuffer({ initialData: provider.initialData, onPreloaded: on?.preloaded });
22
+ this.initializeBuffer({ initialData: provider.initialData });
22
23
  }
23
24
  loadNext = async () => {
24
25
  if (!this.canLoadNext) {
@@ -36,11 +37,14 @@ export class DefaultFeedPlayerBuffer {
36
37
  reset = () => {
37
38
  this._loaded = [];
38
39
  this._currentIndex = -1;
39
- this._isLoading = false;
40
+ this._fetchDeferred = null;
40
41
  this.warmUpBuffer();
41
42
  };
43
+ ensureWarmedUp = async () => {
44
+ await this.warmUpBuffer();
45
+ };
42
46
  initializeBuffer = async (options) => {
43
- const { initialData, onPreloaded } = options;
47
+ const { initialData } = options;
44
48
  const handleInitialized = () => {
45
49
  const startIndex = initialData.startIndex >= 0 ? initialData.startIndex : 0;
46
50
  this._currentIndex = Math.min(startIndex, this._loaded.length - 1);
@@ -49,7 +53,6 @@ export class DefaultFeedPlayerBuffer {
49
53
  if (activeItem && hasCustomMediaIndex) {
50
54
  activeItem.mediaIndex = initialData.startMediaIndex;
51
55
  }
52
- onPreloaded?.(this);
53
56
  };
54
57
  this._loaded = initialData.prefetchedItems;
55
58
  const considerInitialized = this._loaded.length > 0;
@@ -63,16 +66,20 @@ export class DefaultFeedPlayerBuffer {
63
66
  };
64
67
  warmUpBuffer = async () => {
65
68
  // Early return if buffer is sufficient or already loading
66
- if (this._loaded.length >= this.currentIndex + BUFFER_SIZE || this._isLoading) {
69
+ if (this._fetchDeferred) {
70
+ return this._fetchDeferred.promise;
71
+ }
72
+ if (this._loaded.length >= this.currentIndex + BUFFER_SIZE) {
67
73
  return;
68
74
  }
69
- this._isLoading = true;
75
+ this._fetchDeferred = new Deferred();
70
76
  try {
71
77
  const result = await this._loadMoreFn();
72
78
  this._loaded = [...this._loaded, ...result];
73
79
  }
74
80
  finally {
75
- this._isLoading = false;
81
+ this._fetchDeferred.resolve();
82
+ this._fetchDeferred = null;
76
83
  }
77
84
  };
78
85
  }
@@ -0,0 +1,2 @@
1
+ import type { IPlayerBuffer, IPlayerDataProvider, WithId } from './types';
2
+ export declare const initBufferFromProvider: <T extends WithId>(provider: IPlayerDataProvider<T>) => IPlayerBuffer<T>;
@@ -0,0 +1,13 @@
1
+ import { Utils } from '../../../core/utils';
2
+ import { DefaultChunksPlayerBuffer } from './default-chunks-player-buffer.svelte';
3
+ import { DefaultFeedPlayerBuffer } from './default-feed-player-buffer.svelte';
4
+ export const initBufferFromProvider = (provider) => {
5
+ switch (provider.kind) {
6
+ case 'feed':
7
+ return new DefaultFeedPlayerBuffer(provider);
8
+ case 'chunks':
9
+ return new DefaultChunksPlayerBuffer(provider);
10
+ default:
11
+ Utils.assertUnreachable(provider);
12
+ }
13
+ };
@@ -33,6 +33,7 @@ export interface IPlayerBufferBase<T extends WithId> {
33
33
  loadNext: () => void;
34
34
  loadPrevious: () => void;
35
35
  reset: () => void;
36
+ ensureWarmedUp: () => Promise<void>;
36
37
  }
37
38
  type TExtended<T> = T & {
38
39
  mediaIndex?: number;
@@ -0,0 +1,86 @@
1
+ <script lang="ts">let { backgroundDisabled, backgroundImageUrl, backgroundColor, children } = $props();
2
+ const styles = $derived.by(() => {
3
+ const values = [];
4
+ if (backgroundImageUrl) {
5
+ values.push(`--with-background--background-image-url: url(${backgroundImageUrl})`);
6
+ }
7
+ if (backgroundColor) {
8
+ values.push(`--with-background--background: ${backgroundColor}`);
9
+ }
10
+ return values.join(';');
11
+ });
12
+ export {};
13
+ </script>
14
+
15
+ <svelte:head>
16
+ <meta name="theme-color" content="#242424" />
17
+ <meta name="color-scheme" content="dark" />
18
+ <meta name="mobile-web-app-capable" content="yes" />
19
+ <meta name="apple-mobile-web-app-capable" content="yes" />
20
+ <meta name="apple-mobile-web-app-status-bar-style" content="black" />
21
+
22
+ <style>
23
+ html,
24
+ body {
25
+ background-color: #242424;
26
+ color-scheme: dark;
27
+ }
28
+ </style>
29
+ </svelte:head>
30
+
31
+ <div
32
+ class="with-background"
33
+ class:with-background--background-enabled={!backgroundDisabled}
34
+ class:with-background--background-active={!backgroundDisabled && backgroundImageUrl && backgroundImageUrl !== 'not-applicable'}
35
+ class:with-background--background-loading={!backgroundDisabled && backgroundImageUrl !== 'not-applicable'}
36
+ style={styles}>
37
+ {@render children()}
38
+ </div>
39
+
40
+ <style>@keyframes fadeIn {
41
+ 0% {
42
+ opacity: 1;
43
+ }
44
+ 50% {
45
+ opacity: 0.4;
46
+ }
47
+ 100% {
48
+ opacity: 1;
49
+ }
50
+ }
51
+ .with-background {
52
+ --_with-background--background: var(--with-background--background);
53
+ --_with-background--background-image-url: var(--with-background--background-image-url);
54
+ width: 100%;
55
+ min-width: 100%;
56
+ max-width: 100%;
57
+ height: 100%;
58
+ min-height: 100%;
59
+ max-height: 100%;
60
+ container-type: inline-size;
61
+ display: flex;
62
+ flex-direction: column;
63
+ position: relative;
64
+ }
65
+ .with-background:before {
66
+ content: "";
67
+ position: absolute;
68
+ inset: 0;
69
+ backdrop-filter: blur(30px);
70
+ background-color: var(--_with-background--background);
71
+ display: none;
72
+ }
73
+ .with-background--background-enabled {
74
+ background-color: #7d7d7d;
75
+ }
76
+ .with-background--background-enabled:before {
77
+ display: block;
78
+ }
79
+ .with-background--background-active {
80
+ background-image: var(--_with-background--background-image-url);
81
+ background-size: cover;
82
+ background-blend-mode: multiply;
83
+ }
84
+ .with-background--background-loading {
85
+ background-color: transparent;
86
+ }</style>
@@ -0,0 +1,10 @@
1
+ import type { Snippet } from 'svelte';
2
+ type Props = {
3
+ backgroundDisabled: boolean;
4
+ backgroundImageUrl: string | null | 'not-applicable';
5
+ backgroundColor?: string | null;
6
+ children: Snippet;
7
+ };
8
+ declare const Cmp: import("svelte").Component<Props, {}, "">;
9
+ type Cmp = ReturnType<typeof Cmp>;
10
+ export default Cmp;
@@ -0,0 +1 @@
1
+ export { default as WithBackground } from './cmp.with-background.svelte';
@@ -0,0 +1 @@
1
+ export { default as WithBackground } from './cmp.with-background.svelte';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@streamscloud/embeddable",
3
- "version": "10.1.2",
3
+ "version": "12.0.0",
4
4
  "author": "StreamsCloud",
5
5
  "repository": {
6
6
  "type": "git",
@@ -37,6 +37,10 @@
37
37
  "types": "./dist/media-center/index.d.ts",
38
38
  "svelte": "./dist/media-center/index.js"
39
39
  },
40
+ "./media-page": {
41
+ "types": "./dist/media-page/index.d.ts",
42
+ "svelte": "./dist/media-page/index.js"
43
+ },
40
44
  "./posts": {
41
45
  "types": "./dist/posts/index.d.ts",
42
46
  "svelte": "./dist/posts/index.js"
@@ -1,6 +0,0 @@
1
- import { type Locale } from '../core/locale';
2
- export declare class ContentPlayerLocalization {
3
- overviewLabel: string;
4
- locale: Locale;
5
- constructor(locale: Locale);
6
- }
@@ -1,15 +0,0 @@
1
- import {} from '../core/locale';
2
- export class ContentPlayerLocalization {
3
- overviewLabel;
4
- locale;
5
- constructor(locale) {
6
- this.overviewLabel = loc.overviewLabel[locale];
7
- this.locale = locale;
8
- }
9
- }
10
- const loc = {
11
- overviewLabel: {
12
- en: 'Overview',
13
- no: 'Oversikt'
14
- }
15
- };
@@ -1,12 +0,0 @@
1
- @mixin default-opacity {
2
- --content-player--elements-opacity: 1;
3
- }
4
-
5
- @mixin fade-opacity {
6
- --content-player--elements-opacity: 0;
7
- }
8
-
9
- @mixin handle-fade {
10
- opacity: var(--content-player--elements-opacity);
11
- transition: opacity 0.3s ease-in-out;
12
- }
@@ -1,137 +0,0 @@
1
- <script lang="ts">import { PlayerButton } from '../ui/player/button';
2
- import { ContentPlayerConfig } from './content-player-config.svelte';
3
- import { ContentPlayerLocalization } from './content-player-localization';
4
- import IconDismiss from '@fluentui/svg-icons/icons/dismiss_28_regular.svg?raw';
5
- import IconLineHorizontal3 from '@fluentui/svg-icons/icons/line_horizontal_3_20_regular.svg?raw';
6
- let { config, localization, overviewPanelContent } = $props();
7
- const uiManager = config.uiManager;
8
- const headerMounted = (node) => {
9
- var _a;
10
- if (overviewPanelContent) {
11
- (_a = config.mediaCenterCallbacks) === null || _a === void 0 ? void 0 : _a.onExtraActionsForMobileControlsPanelDetermined([
12
- {
13
- name: localization.overviewLabel,
14
- callback: () => (config.uiManager.overviewCollapsed = !config.uiManager.overviewCollapsed)
15
- }
16
- ]);
17
- }
18
- const heightResizeObserver = new ResizeObserver(() => {
19
- var _a, _b;
20
- const headerHeight = node.clientHeight;
21
- uiManager.mediaCenterHeaderHeight = headerHeight;
22
- if ((_a = config.mediaCenterCallbacks) === null || _a === void 0 ? void 0 : _a.onHeaderHeightChanged) {
23
- (_b = config.mediaCenterCallbacks) === null || _b === void 0 ? void 0 : _b.onHeaderHeightChanged({ height: headerHeight });
24
- }
25
- });
26
- heightResizeObserver.observe(node);
27
- return {
28
- destroy: () => {
29
- heightResizeObserver.disconnect();
30
- }
31
- };
32
- };
33
- const headerVariables = $derived.by(() => {
34
- const maxHeaderWidth = Math.min(uiManager.contentViewWidth * 1.4, uiManager.playerTotalWidth);
35
- const maxOverhang = 0.2 * uiManager.contentViewWidth;
36
- const contentStart = (uiManager.playerTotalWidth - uiManager.contentViewWidth) / 2;
37
- // Pre-calculate if overview will affect layout when fully opened
38
- const willOverviewAffectLayout = uiManager.overviewWidth > 0 && uiManager.overviewMaxWidth < uiManager.sidePanelsMaxWidth;
39
- // Check if header will actually compress (change position)
40
- const willHeaderCompress = willOverviewAffectLayout && uiManager.overviewMaxWidth > contentStart - maxOverhang;
41
- const values = [
42
- `--_content-player-header--padding-inline: ${uiManager.safeAreaSize}px`,
43
- `--_content-player-header--media-center--max-width: ${maxHeaderWidth}px`
44
- ];
45
- if (!willOverviewAffectLayout) {
46
- // Header is symmetric
47
- const offset = (uiManager.playerTotalWidth - maxHeaderWidth) / 2;
48
- values.push(`--_content-player-header--left: ${offset}px`);
49
- values.push(`--_content-player-header--right: ${offset}px`);
50
- }
51
- else {
52
- // Overview affects layout
53
- const rightOffset = contentStart - maxOverhang;
54
- // Animate if header will compress, otherwise use static value
55
- const effectiveOverviewWidth = willHeaderCompress ? uiManager.overviewWidth : uiManager.overviewMaxWidth;
56
- const leftOffset = Math.max(contentStart - maxOverhang, effectiveOverviewWidth);
57
- values.push(`--_content-player-header--left: ${leftOffset}px`);
58
- values.push(`--_content-player-header--right: ${rightOffset}px`);
59
- }
60
- return values.join(';');
61
- });
62
- const buttonVariables = $derived.by(() => {
63
- // Button always moves when overview affects layout - animate it
64
- const willOverviewAffectLayout = uiManager.overviewWidth > 0 && uiManager.overviewMaxWidth < uiManager.sidePanelsMaxWidth;
65
- const effectiveOverviewWidth = willOverviewAffectLayout ? uiManager.overviewWidth : 0;
66
- const values = [`--_content-player-header--close-button--left-indent: ${effectiveOverviewWidth}px`];
67
- return values.join(';');
68
- });
69
- </script>
70
-
71
- {#if config.mediaCenterControlsPanel}
72
- <div class="content-player-header" style={headerVariables} use:headerMounted>
73
- {@render config.mediaCenterControlsPanel()}
74
- </div>
75
- {:else if overviewPanelContent}
76
- <div class="overview-button">
77
- <PlayerButton icon={IconLineHorizontal3} on={{ click: () => (config.uiManager.overviewCollapsed = !config.uiManager.overviewCollapsed) }} />
78
- </div>
79
- {/if}
80
-
81
- {#if config.settings.enableCloseButton && config.callbacks?.close}
82
- <div class="close-button" style={buttonVariables}>
83
- <PlayerButton icon={IconDismiss} on={{ click: config.callbacks.close }} />
84
- </div>
85
- {/if}
86
-
87
- <style>@keyframes fadeIn {
88
- 0% {
89
- opacity: 1;
90
- }
91
- 50% {
92
- opacity: 0.4;
93
- }
94
- 100% {
95
- opacity: 1;
96
- }
97
- }
98
- .content-player-header {
99
- position: absolute;
100
- inset: 0;
101
- left: var(--_content-player-header--left);
102
- right: var(--_content-player-header--right);
103
- bottom: auto;
104
- padding: 0.75rem var(--_content-player-header--padding-inline);
105
- pointer-events: none;
106
- z-index: 1;
107
- display: flex;
108
- justify-content: var(--_content-player-header--justify-content, center);
109
- }
110
-
111
- .close-button {
112
- position: absolute;
113
- top: 0.9375rem;
114
- left: calc(var(--_content-player-header--close-button--left-indent) + 0.625rem);
115
- z-index: 1;
116
- /* Set 'container-type: inline-size;' to reference container*/
117
- }
118
- @container (width < 576px) {
119
- .close-button {
120
- left: unset;
121
- right: 0.625rem;
122
- }
123
- }
124
-
125
- .overview-button {
126
- display: none;
127
- /* Set 'container-type: inline-size;' to reference container*/
128
- }
129
- @container (width < 576px) {
130
- .overview-button {
131
- display: block;
132
- position: absolute;
133
- top: 0.9375rem;
134
- left: 0.625rem;
135
- z-index: 1;
136
- }
137
- }</style>
@@ -1,32 +0,0 @@
1
- import { ContentPlayerConfig } from './content-player-config.svelte';
2
- import { ContentPlayerLocalization } from './content-player-localization';
3
- import type { Snippet } from 'svelte';
4
- declare class __sveltets_Render<T extends {
5
- id: string;
6
- }> {
7
- props(): {
8
- config: ContentPlayerConfig<T>;
9
- localization: ContentPlayerLocalization;
10
- overviewPanelContent?: Snippet;
11
- };
12
- events(): {};
13
- slots(): {};
14
- bindings(): "";
15
- exports(): {};
16
- }
17
- interface $$IsomorphicComponent {
18
- new <T extends {
19
- id: string;
20
- }>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
21
- $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
22
- } & ReturnType<__sveltets_Render<T>['exports']>;
23
- <T extends {
24
- id: string;
25
- }>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
26
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
27
- }
28
- declare const Header: $$IsomorphicComponent;
29
- type Header<T extends {
30
- id: string;
31
- }> = InstanceType<typeof Header<T>>;
32
- export default Header;
@@ -1,132 +0,0 @@
1
- <script lang="ts">import { Dropdown } from '../../ui/dropdown';
2
- import { Icon } from '../../ui/icon';
3
- import { default as ButtonWrapper } from './category-following-wrapper.svelte';
4
- import IconTextColumnThree from '@fluentui/svg-icons/icons/text_column_three_20_regular.svg?raw';
5
- let { handler, followingHandler, on } = $props();
6
- </script>
7
-
8
- <Dropdown>
9
- {#snippet trigger()}
10
- <button type="button" class="desktop-categories-trigger">
11
- <Icon src={IconTextColumnThree} />
12
- </button>
13
- {/snippet}
14
- <div class="desktop-categories-selector">
15
- {#each handler.categories as category (category.id)}
16
- <div>
17
- <ButtonWrapper categoryId={category.id} followingHandler={followingHandler}>
18
- <button
19
- type="button"
20
- class="desktop-categories-selector__category"
21
- class:desktop-categories-selector__category--active={handler.selectedCategoryId === category.id}
22
- title={category.name}
23
- onclick={() => on.categorySelected(category.id)}>{category.name}</button>
24
- </ButtonWrapper>
25
-
26
- {#if category.children.length > 0}
27
- <div class="desktop-categories-selector__sub-categories">
28
- {#each category.children as subcategory (subcategory.id)}
29
- <ButtonWrapper categoryId={subcategory.id} followingHandler={followingHandler}>
30
- <button
31
- type="button"
32
- class="desktop-categories-selector__sub-category"
33
- class:desktop-categories-selector__sub-category--active={handler.selectedCategoryId === subcategory.id}
34
- title={subcategory.name}
35
- onclick={() => on.categorySelected(subcategory.id)}>{subcategory.name}</button>
36
- </ButtonWrapper>
37
- {/each}
38
- </div>
39
- {/if}
40
- </div>
41
- {/each}
42
- </div>
43
- </Dropdown>
44
-
45
- <style>@keyframes fadeIn {
46
- 0% {
47
- opacity: 1;
48
- }
49
- 50% {
50
- opacity: 0.4;
51
- }
52
- 100% {
53
- opacity: 1;
54
- }
55
- }
56
- .desktop-categories-trigger {
57
- pointer-events: auto;
58
- padding: 0.40625rem 0.75rem;
59
- line-height: 0;
60
- white-space: nowrap;
61
- flex: 0 0 auto;
62
- border-radius: 0.875rem;
63
- background-color: rgba(0, 0, 0, 0.6);
64
- color: #f2f2f2;
65
- transition: background 0.3s ease-in-out;
66
- -webkit-user-drag: none;
67
- user-select: none;
68
- }
69
- .desktop-categories-trigger :global([contenteditable]) {
70
- user-select: text;
71
- }
72
- .desktop-categories-trigger:hover:not(.desktop-categories-trigger--active) {
73
- background-color: rgba(0, 0, 0, 0.9);
74
- }
75
-
76
- .desktop-categories-selector {
77
- background-color: rgba(0, 0, 0, 0.9);
78
- border-radius: 0.75rem;
79
- padding: 1rem 1.5rem;
80
- display: flex;
81
- flex-direction: column;
82
- gap: 0.75rem;
83
- width: 33.75rem;
84
- max-width: calc(100vw - 2rem);
85
- }
86
- .desktop-categories-selector__category {
87
- color: #ffffff;
88
- font-size: 0.875rem;
89
- font-weight: 500;
90
- text-align: left;
91
- padding: 0.375rem 0;
92
- max-width: 7.5rem;
93
- text-overflow: ellipsis;
94
- width: 100%;
95
- white-space: nowrap;
96
- overflow: hidden;
97
- width: max-content;
98
- -webkit-user-drag: none;
99
- user-select: none;
100
- }
101
- .desktop-categories-selector__category :global([contenteditable]) {
102
- user-select: text;
103
- }
104
- .desktop-categories-selector__category:hover, .desktop-categories-selector__category--active {
105
- color: #5a8dec;
106
- }
107
- .desktop-categories-selector__sub-categories {
108
- display: flex;
109
- flex-wrap: wrap;
110
- gap: 1.5rem;
111
- }
112
- .desktop-categories-selector__sub-category {
113
- color: #d1d5db;
114
- font-size: 0.75rem;
115
- font-weight: 500;
116
- text-align: left;
117
- padding: 0.375rem 0;
118
- max-width: 7.5rem;
119
- text-overflow: ellipsis;
120
- width: 100%;
121
- white-space: nowrap;
122
- overflow: hidden;
123
- width: max-content;
124
- -webkit-user-drag: none;
125
- user-select: none;
126
- }
127
- .desktop-categories-selector__sub-category :global([contenteditable]) {
128
- user-select: text;
129
- }
130
- .desktop-categories-selector__sub-category:hover, .desktop-categories-selector__sub-category--active {
131
- color: #5a8dec;
132
- }</style>
@@ -1,12 +0,0 @@
1
- import type { IContentCategoryFollowingHandler } from '..';
2
- import type { MediaCenterHandler } from './media-center-handler.svelte';
3
- type Props = {
4
- handler: MediaCenterHandler;
5
- followingHandler?: IContentCategoryFollowingHandler;
6
- on: {
7
- categorySelected: (categoryId: string) => void;
8
- };
9
- };
10
- declare const DesktopCategoriesSelector: import("svelte").Component<Props, {}, "">;
11
- type DesktopCategoriesSelector = ReturnType<typeof DesktopCategoriesSelector>;
12
- export default DesktopCategoriesSelector;
@@ -1,32 +0,0 @@
1
- import type { TrackingParams } from '../../marketing-tracking';
2
- import type { IMediaCenterConfig } from '..';
3
- import type { PostPlayerModel } from '../../posts/posts-player';
4
- import type { ProductCardModel } from '../../products/product-card';
5
- import type { StreamPlayerModel } from '../../streams/streams-player';
6
- export declare class DiscoverPanelHandler {
7
- private readonly config;
8
- private _activated;
9
- private _state;
10
- private _streams;
11
- private _shortVideos;
12
- private _products;
13
- constructor(config: IMediaCenterConfig | null);
14
- get streamSectionItems(): StreamPlayerModel[];
15
- get shortVideoSectionItems(): ShortVideoSectionItemType[];
16
- get activated(): boolean;
17
- get active(): boolean;
18
- get loading(): boolean;
19
- activate: () => Promise<void>;
20
- deactivate: () => void;
21
- toggle: () => Promise<void>;
22
- private _uniqueById;
23
- }
24
- type ShortVideoSectionItemType = {
25
- kind: 'video';
26
- data: PostPlayerModel;
27
- } | {
28
- kind: 'product';
29
- data: ProductCardModel;
30
- trackingParams: TrackingParams;
31
- };
32
- export {};