@streamscloud/embeddable 11.0.0 → 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 (174) hide show
  1. package/dist/ads/ad-card/cmp.ad-card.svelte +4 -4
  2. package/dist/ads/ad-card/cmp.ad-card.svelte.d.ts +2 -0
  3. package/dist/content-player/cmp.content-player.svelte +63 -128
  4. package/dist/content-player/content-player-config.svelte.d.ts +3 -10
  5. package/dist/content-player/content-player-config.svelte.js +3 -21
  6. package/dist/content-player/content-player-settings.d.ts +7 -21
  7. package/dist/content-player/content-player-settings.js +0 -4
  8. package/dist/content-player/controls-and-attachments.svelte +39 -5
  9. package/dist/content-player/overview-panel.svelte +14 -6
  10. package/dist/content-player/overview-panel.svelte.d.ts +5 -1
  11. package/dist/content-player/ui-manager.svelte.d.ts +0 -2
  12. package/dist/content-player/ui-manager.svelte.js +0 -2
  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 -24
  15. package/dist/media-center/config/operations.generated.d.ts +10 -3
  16. package/dist/media-center/config/operations.generated.js +17 -6
  17. package/dist/media-center/config/operations.graphql +11 -4
  18. package/dist/media-center/config/types.d.ts +5 -2
  19. package/dist/media-center/media-center/cmp.media-center.svelte +195 -149
  20. package/dist/media-center/media-center/cmp.media-center.svelte.d.ts +2 -19
  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-panel.svelte.d.ts → discover-view.svelte.d.ts} +4 -4
  33. package/dist/media-center/media-center/discover/index.d.ts +2 -2
  34. package/dist/media-center/media-center/discover/index.js +2 -2
  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 +9 -3
  45. package/dist/media-center/media-center/handlers/categories-handler.svelte.js +7 -4
  46. package/dist/media-center/media-center/handlers/index.d.ts +1 -1
  47. package/dist/media-center/media-center/handlers/index.js +1 -1
  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/media-center-footer.svelte +3 -7
  51. package/dist/media-center/media-center/header-footer/media-center-header-localization.d.ts +1 -0
  52. package/dist/media-center/media-center/header-footer/media-center-header-localization.js +6 -0
  53. package/dist/media-center/media-center/header-footer/media-center-header-mobile.svelte +25 -36
  54. package/dist/media-center/media-center/header-footer/media-center-header-mobile.svelte.d.ts +2 -1
  55. package/dist/media-center/media-center/header-footer/media-center-header.svelte +14 -11
  56. package/dist/media-center/media-center/header-footer/media-center-header.svelte.d.ts +1 -2
  57. package/dist/media-center/media-center/media-center-context.svelte.d.ts +31 -13
  58. package/dist/media-center/media-center/media-center-context.svelte.js +71 -35
  59. package/dist/media-center/media-center/menu/menu-localization.d.ts +2 -11
  60. package/dist/media-center/media-center/menu/menu-localization.js +6 -45
  61. package/dist/media-center/media-center/menu/menu.svelte +31 -23
  62. package/dist/media-center/media-center/menu/menu.svelte.d.ts +1 -1
  63. package/dist/media-center/media-center/menu/popular-streams-panel-handler.svelte.d.ts +1 -1
  64. package/dist/media-center/media-center/menu/popular-streams-panel-handler.svelte.js +0 -3
  65. package/dist/media-center/media-center/moments/cmp.moments-circle.svelte +41 -0
  66. package/dist/media-center/media-center/moments/cmp.moments-circle.svelte.d.ts +7 -0
  67. package/dist/media-center/media-center/moments/index.d.ts +1 -0
  68. package/dist/media-center/media-center/moments/index.js +1 -0
  69. package/dist/media-center/media-center/streams-in-category/streams-in-category-panel-handler.svelte.d.ts +1 -1
  70. package/dist/media-center/media-center/streams-in-category/streams-in-category-panel-handler.svelte.js +1 -1
  71. package/dist/media-center/media-center/types.d.ts +44 -1
  72. package/dist/media-page/index.d.ts +121 -0
  73. package/dist/media-page/index.js +43 -0
  74. package/dist/posts/attachments/cmp.attachments.svelte +1 -0
  75. package/dist/posts/controls/cmp.controls.svelte +50 -13
  76. package/dist/posts/data-loaders/operations.generated.d.ts +4 -0
  77. package/dist/posts/data-loaders/operations.generated.js +6 -2
  78. package/dist/posts/model/types.d.ts +2 -0
  79. package/dist/posts/post-viewer/cmp.post-viewer.svelte +26 -18
  80. package/dist/posts/post-viewer/mapper.js +2 -0
  81. package/dist/posts/post-viewer/operations.generated.d.ts +2 -0
  82. package/dist/posts/post-viewer/operations.generated.js +3 -1
  83. package/dist/posts/post-viewer/operations.graphql +2 -0
  84. package/dist/posts/post-viewer/post-texts.svelte +3 -3
  85. package/dist/posts/posts-player/cmp.posts-player.svelte +20 -6
  86. package/dist/posts/posts-player/cmp.posts-player.svelte.d.ts +18 -2
  87. package/dist/posts/posts-player/index.d.ts +18 -3
  88. package/dist/posts/posts-player/index.js +42 -89
  89. package/dist/posts/posts-player/posts-player-proxy.svelte +19 -0
  90. package/dist/posts/posts-player/posts-player-proxy.svelte.d.ts +22 -0
  91. package/dist/posts/posts-player/posts-player-view.svelte +20 -34
  92. package/dist/posts/posts-player/posts-player-view.svelte.d.ts +2 -6
  93. package/dist/posts/posts-player/types.d.ts +19 -6
  94. package/dist/products/product-card/cmp.product-card.svelte +5 -5
  95. package/dist/products/product-card/cmp.product-card.svelte.d.ts +1 -1
  96. package/dist/short-videos/short-video-card/cmp.short-video-card.svelte +160 -19
  97. package/dist/short-videos/short-video-card/cmp.short-video-card.svelte.d.ts +2 -1
  98. package/dist/short-videos/short-video-card/localization.d.ts +5 -0
  99. package/dist/short-videos/short-video-card/localization.js +13 -0
  100. package/dist/short-videos/short-video-card/types.d.ts +4 -0
  101. package/dist/short-videos/short-videos-player/index.js +26 -33
  102. package/dist/streams/layout/element-views/cmp.stream-element.svelte +2 -2
  103. package/dist/streams/layout/element-views/cmp.text-ref-stream-element.svelte +7 -3
  104. package/dist/streams/layout/element-views/cmp.text-ref-stream-element.svelte.d.ts +2 -0
  105. package/dist/streams/layout/element-views/cmp.text-stream-element.svelte +7 -3
  106. package/dist/streams/layout/element-views/cmp.text-stream-element.svelte.d.ts +2 -0
  107. package/dist/streams/layout/element-views/price-element-view.svelte +2 -2
  108. package/dist/streams/layout/element-views/price-stream-element-localization.d.ts +1 -1
  109. package/dist/streams/layout/element-views/price-stream-element-localization.js +2 -2
  110. package/dist/streams/layout/models/mapper.js +2 -0
  111. package/dist/streams/streams-player/index.d.ts +21 -2
  112. package/dist/streams/streams-player/index.js +49 -24
  113. package/dist/streams/streams-player/stream-overview.svelte +1 -1
  114. package/dist/streams/streams-player/streams-player-buffer.svelte.d.ts +1 -3
  115. package/dist/streams/streams-player/streams-player-buffer.svelte.js +2 -2
  116. package/dist/streams/streams-player/streams-player-view.svelte +25 -21
  117. package/dist/streams/streams-player/streams-player-view.svelte.d.ts +1 -5
  118. package/dist/streams/streams-player/types.d.ts +18 -4
  119. package/dist/ui/line-clamp/cmp.line-clamp-auto.svelte +119 -0
  120. package/dist/ui/line-clamp/cmp.line-clamp-auto.svelte.d.ts +10 -0
  121. package/dist/ui/line-clamp/cmp.line-clamp.svelte +44 -72
  122. package/dist/ui/line-clamp/cmp.line-clamp.svelte.d.ts +3 -4
  123. package/dist/ui/line-clamp/index.d.ts +1 -0
  124. package/dist/ui/line-clamp/index.js +1 -0
  125. package/dist/ui/player/button/cmp.mobile-player-buttons-group.svelte +44 -0
  126. package/dist/ui/player/button/cmp.mobile-player-buttons-group.svelte.d.ts +7 -0
  127. package/dist/ui/player/button/cmp.player-button.svelte +0 -1
  128. package/dist/ui/player/button/cmp.player-buttons-group.svelte +15 -11
  129. package/dist/ui/player/button/cmp.player-buttons-group.svelte.d.ts +1 -1
  130. package/dist/ui/player/button/index.d.ts +1 -0
  131. package/dist/ui/player/button/index.js +1 -0
  132. package/dist/ui/player/button/types.d.ts +0 -2
  133. package/dist/ui/player/close-orchestrator/close-orchestrator.svelte.d.ts +18 -0
  134. package/dist/ui/player/close-orchestrator/close-orchestrator.svelte.js +58 -0
  135. package/dist/ui/player/close-orchestrator/index.d.ts +2 -0
  136. package/dist/ui/player/close-orchestrator/index.js +1 -0
  137. package/dist/ui/player/close-orchestrator/types.d.ts +9 -0
  138. package/dist/ui/player/close-orchestrator/types.js +1 -0
  139. package/dist/ui/player/colors/index.d.ts +1 -0
  140. package/dist/ui/player/colors/index.js +1 -0
  141. package/dist/ui/player/colors/player-colors.d.ts +11 -0
  142. package/dist/ui/player/colors/player-colors.js +1 -0
  143. package/dist/ui/player/providers/chunks-player-buffer/player-chunks-manager.svelte.d.ts +2 -6
  144. package/dist/ui/player/providers/chunks-player-buffer/player-chunks-manager.svelte.js +11 -11
  145. package/dist/ui/player/providers/default-chunks-player-buffer.svelte.d.ts +2 -3
  146. package/dist/ui/player/providers/default-chunks-player-buffer.svelte.js +5 -5
  147. package/dist/ui/player/providers/default-feed-player-buffer.svelte.d.ts +3 -4
  148. package/dist/ui/player/providers/default-feed-player-buffer.svelte.js +16 -9
  149. package/dist/ui/player/providers/service.d.ts +2 -0
  150. package/dist/ui/player/providers/service.js +13 -0
  151. package/dist/ui/player/providers/types.d.ts +1 -0
  152. package/dist/ui/with-background/cmp.with-background.svelte +86 -0
  153. package/dist/ui/with-background/cmp.with-background.svelte.d.ts +10 -0
  154. package/dist/ui/with-background/index.d.ts +1 -0
  155. package/dist/ui/with-background/index.js +1 -0
  156. package/package.json +5 -1
  157. package/dist/content-player/fade-mixins.scss +0 -12
  158. package/dist/content-player/header.svelte +0 -15
  159. package/dist/content-player/header.svelte.d.ts +0 -28
  160. package/dist/media-center/media-center/discover/discover-panel-handler.svelte.d.ts +0 -31
  161. package/dist/media-center/media-center/discover/discover-panel-handler.svelte.js +0 -94
  162. package/dist/media-center/media-center/discover/discover-panel-localization.d.ts +0 -19
  163. package/dist/media-center/media-center/discover/discover-panel-localization.js +0 -78
  164. package/dist/media-center/media-center/discover/discover-panel.svelte +0 -142
  165. package/dist/media-center/media-center/handlers/feed-handler.svelte.d.ts +0 -6
  166. package/dist/media-center/media-center/handlers/feed-handler.svelte.js +0 -12
  167. package/dist/media-center/media-center/providers/index.d.ts +0 -2
  168. package/dist/media-center/media-center/providers/index.js +0 -2
  169. package/dist/media-center/media-center/providers/post-player-provider-generator.d.ts +0 -8
  170. package/dist/media-center/media-center/providers/post-player-provider-generator.js +0 -32
  171. package/dist/media-center/media-center/providers/streams-player-provider-generator.d.ts +0 -8
  172. package/dist/media-center/media-center/providers/streams-player-provider-generator.js +0 -36
  173. package/dist/media-center/model/types.d.ts +0 -17
  174. /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": "11.0.0",
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,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,15 +0,0 @@
1
- <script lang="ts">import { ContentPlayerConfig } from './content-player-config.svelte';
2
- import { onMount } from 'svelte';
3
- let { config } = $props();
4
- onMount(() => {
5
- var _a, _b;
6
- (_a = config.mediaCenterCallbacks) === null || _a === void 0 ? void 0 : _a.onPlayerInitialized({
7
- closePlayerFn: config.settings.enableCloseButton && ((_b = config.callbacks) === null || _b === void 0 ? void 0 : _b.close) ? config.callbacks.close : null,
8
- extraActionsForMobilePanel: []
9
- });
10
- });
11
- </script>
12
-
13
- {#if config.mediaCenterHeader}
14
- {@render config.mediaCenterHeader()}
15
- {/if}
@@ -1,28 +0,0 @@
1
- import { ContentPlayerConfig } from './content-player-config.svelte';
2
- declare class __sveltets_Render<T extends {
3
- id: string;
4
- }> {
5
- props(): {
6
- config: ContentPlayerConfig<T>;
7
- };
8
- events(): {};
9
- slots(): {};
10
- bindings(): "";
11
- exports(): {};
12
- }
13
- interface $$IsomorphicComponent {
14
- new <T extends {
15
- id: string;
16
- }>(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']>> & {
17
- $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
18
- } & ReturnType<__sveltets_Render<T>['exports']>;
19
- <T extends {
20
- id: string;
21
- }>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
22
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
23
- }
24
- declare const Header: $$IsomorphicComponent;
25
- type Header<T extends {
26
- id: string;
27
- }> = InstanceType<typeof Header<T>>;
28
- export default Header;
@@ -1,31 +0,0 @@
1
- import type { TrackingParams } from '../../../marketing-tracking';
2
- import type { IMediaCenterConfig } from '../../config/types';
3
- import type { PostPlayerModel } from '../../../posts/posts-player/types';
4
- import type { ProductCardModel } from '../../../products/product-card';
5
- import type { StreamPlayerModel } from '../../../streams/streams-player/types';
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
- private _uniqueById;
22
- }
23
- type ShortVideoSectionItemType = {
24
- kind: 'video';
25
- data: PostPlayerModel;
26
- } | {
27
- kind: 'product';
28
- data: ProductCardModel;
29
- trackingParams: TrackingParams;
30
- };
31
- export {};
@@ -1,94 +0,0 @@
1
- import { PostType } from '../../../core/enums';
2
- export class DiscoverPanelHandler {
3
- config;
4
- _activated = $state(false);
5
- _state = $state('not-initialized');
6
- _streams = $state.raw([]);
7
- _shortVideos = $state.raw([]);
8
- _products = $state.raw([]);
9
- constructor(config) {
10
- this.config = config;
11
- }
12
- get streamSectionItems() {
13
- return this._streams;
14
- }
15
- get shortVideoSectionItems() {
16
- const pattern = ['video', 'product', 'video', 'product', 'video'];
17
- const vids = [...this._shortVideos];
18
- const prods = [...this._products];
19
- const itemsLimit = 5;
20
- const result = [];
21
- // fill according to pattern, leaving empty positions if not enough items
22
- for (let i = 0; i < itemsLimit; i++) {
23
- const want = pattern[i];
24
- if (want === 'video' && vids.length > 0) {
25
- result.push({ kind: 'video', data: vids.shift() });
26
- }
27
- else if (want === 'product' && prods.length > 0) {
28
- const productModel = prods.shift();
29
- const shortVideoId = this._shortVideos.find((v) => v.products.some((p) => p.id === productModel.id))?.id;
30
- result.push({ kind: 'product', data: productModel, trackingParams: { shortVideoId } });
31
- }
32
- else {
33
- // temporary "empty" position - will fill later
34
- result.push(null);
35
- }
36
- }
37
- // fill empty positions with remaining items
38
- for (let i = 0; i < result.length; i++) {
39
- if (!result[i]) {
40
- if (vids.length > 0) {
41
- result[i] = { kind: 'video', data: vids.shift() };
42
- }
43
- else if (prods.length > 0) {
44
- const productModel = prods.shift();
45
- const shortVideoId = this._shortVideos.find((v) => v.products.some((p) => p.id === productModel.id))?.id;
46
- result[i] = { kind: 'product', data: productModel, trackingParams: { shortVideoId } };
47
- }
48
- }
49
- }
50
- return result.filter(Boolean);
51
- }
52
- get activated() {
53
- return this._activated;
54
- }
55
- get active() {
56
- return this._activated && this._state === 'ready';
57
- }
58
- get loading() {
59
- return this._activated && this._state === 'loading';
60
- }
61
- activate = async () => {
62
- if (!this.config) {
63
- return;
64
- }
65
- this._activated = true;
66
- if (this._state === 'not-initialized') {
67
- this._state = 'loading';
68
- try {
69
- const shortVideosResponse = await this.config.postsPlayer.getPostsCursor({ filter: { types: [PostType.ShortVideo] }, limit: 5 });
70
- const streamsResponse = await this.config.streamPlayer.getStreamsCursor({ filter: {}, limit: 5 });
71
- this._shortVideos = shortVideosResponse.items;
72
- this._products = this._uniqueById(shortVideosResponse.items.flatMap((i) => i.products)).slice(0, 2);
73
- this._streams = streamsResponse.items;
74
- }
75
- finally {
76
- this._state = 'ready';
77
- }
78
- }
79
- };
80
- deactivate = () => {
81
- this._activated = false;
82
- };
83
- _uniqueById = (arr) => {
84
- const seen = new Set();
85
- const res = [];
86
- for (const item of arr) {
87
- if (!seen.has(item.id)) {
88
- seen.add(item.id);
89
- res.push(item);
90
- }
91
- }
92
- return res;
93
- };
94
- }
@@ -1,19 +0,0 @@
1
- import { type Locale } from '../../../core/locale';
2
- export declare class DiscoverPanelLocalization {
3
- buttons: {
4
- cart: string;
5
- discover: string;
6
- feed: string;
7
- login: string;
8
- moments: string;
9
- webpage: string;
10
- };
11
- shortVideosSectionTitle: string;
12
- interestsSectionTitle: string;
13
- latestStreamsSectionTitle: string;
14
- popularStreamsSectionTitle: string;
15
- overviewLabel: string;
16
- membersLabel: (count: number) => string;
17
- locale: Locale;
18
- constructor(locale: Locale);
19
- }
@@ -1,78 +0,0 @@
1
- import {} from '../../../core/locale';
2
- export class DiscoverPanelLocalization {
3
- buttons;
4
- shortVideosSectionTitle;
5
- interestsSectionTitle;
6
- latestStreamsSectionTitle;
7
- popularStreamsSectionTitle;
8
- overviewLabel;
9
- membersLabel;
10
- locale;
11
- constructor(locale) {
12
- this.shortVideosSectionTitle = loc.shortVideosSectionTitle[locale];
13
- this.interestsSectionTitle = loc.interestsSectionTitle[locale];
14
- this.latestStreamsSectionTitle = loc.streamsSectionTitle[locale];
15
- this.popularStreamsSectionTitle = loc.popularStreamsSectionTitle[locale];
16
- this.overviewLabel = loc.overviewLabel[locale];
17
- this.buttons = {
18
- cart: loc.cartButton[locale],
19
- discover: loc.discoverButton[locale],
20
- feed: loc.feedButton[locale],
21
- login: loc.loginButton[locale],
22
- moments: loc.momentsButton[locale],
23
- webpage: loc.webpageButton[locale]
24
- };
25
- this.membersLabel = loc.membersLabel[locale];
26
- this.locale = locale;
27
- }
28
- }
29
- const loc = {
30
- shortVideosSectionTitle: {
31
- en: 'Popular Short Videos',
32
- no: 'Populære korte videoer'
33
- },
34
- popularStreamsSectionTitle: {
35
- en: 'Popular Streams',
36
- no: 'Populære Streams'
37
- },
38
- streamsSectionTitle: {
39
- en: 'Latest Streams',
40
- no: 'Siste Streams'
41
- },
42
- interestsSectionTitle: {
43
- en: 'Interest Channels',
44
- no: 'Interessekanaler'
45
- },
46
- overviewLabel: {
47
- en: 'Overview',
48
- no: 'Oversikt'
49
- },
50
- discoverButton: {
51
- en: 'Discover',
52
- no: 'Oppdag'
53
- },
54
- feedButton: {
55
- en: 'Feed',
56
- no: 'Feed'
57
- },
58
- cartButton: {
59
- en: 'Cart',
60
- no: 'Handlekurv'
61
- },
62
- loginButton: {
63
- en: 'Login',
64
- no: 'Logg inn'
65
- },
66
- momentsButton: {
67
- en: 'Moments',
68
- no: 'Øyeblikk'
69
- },
70
- webpageButton: {
71
- en: 'Webpage',
72
- no: 'Nettside'
73
- },
74
- membersLabel: {
75
- en: (count) => (count === 1 ? `Member` : `Members`),
76
- no: (count) => (count === 1 ? `Medlem` : `Medlemmer`)
77
- }
78
- };
@@ -1,142 +0,0 @@
1
- <script lang="ts">import { getPostCoverImage } from '../../../posts/model';
2
- import { ProductCard } from '../../../products/product-card';
3
- import { ShortVideoCard } from '../../../short-videos/short-video-card';
4
- import { StreamCard } from '../../../streams/stream-card';
5
- import { DiscoverPanelLocalization } from './discover-panel-localization';
6
- let { context, locale, on } = $props();
7
- const handler = $derived(context.discoverHandler);
8
- const localization = $derived(new DiscoverPanelLocalization(locale));
9
- </script>
10
-
11
- <div class="media-center-overview">
12
- <div class="media-center-overview__content">
13
- {#if handler.streamSectionItems.length}
14
- <div class="media-center-overview__section">
15
- <div class="media-center-overview__section-header media-center-overview__section-header--blue">
16
- {localization.latestStreamsSectionTitle}
17
- </div>
18
- <div class="media-center-overview__section-content">
19
- {#each handler.streamSectionItems as item (item.id)}
20
- <StreamCard stream={item} on={{ click: () => on.streamSelected(item) }}></StreamCard>
21
- {/each}
22
- </div>
23
- </div>
24
- {/if}
25
- {#if handler.shortVideoSectionItems.length}
26
- <div class="media-center-overview__section">
27
- <div class="media-center-overview__section-header media-center-overview__section-header--red">
28
- {localization.shortVideosSectionTitle}
29
- </div>
30
- <div class="media-center-overview__section-content">
31
- {#each handler.shortVideoSectionItems as item (item.data)}
32
- {#if item.kind === 'video'}
33
- <div class="media-center-overview__card-wrapper">
34
- <ShortVideoCard
35
- shortVideo={{ id: item.data.id, text: item.data.text, cover: getPostCoverImage(item.data) }}
36
- on={{ click: () => on.shortVideoSelected(item.data) }} />
37
- </div>
38
- {:else if item.kind === 'product'}
39
- <div class="media-center-overview__card-wrapper" data-theme="dark">
40
- <ProductCard
41
- product={item.data}
42
- colors={{
43
- background: context.playerColors?.cardBackground ?? null,
44
- price: context.playerColors?.price ?? null,
45
- salePrice: context.playerColors?.salePrice ?? null
46
- }}
47
- trackingParams={item.trackingParams}
48
- locale={localization.locale} />
49
- </div>
50
- {/if}
51
- {/each}
52
- </div>
53
- </div>
54
- {/if}
55
- </div>
56
- </div>
57
-
58
- <style>@keyframes fadeIn {
59
- 0% {
60
- opacity: 1;
61
- }
62
- 50% {
63
- opacity: 0.4;
64
- }
65
- 100% {
66
- opacity: 1;
67
- }
68
- }
69
- .media-center-overview {
70
- background: transparent;
71
- width: 100%;
72
- display: flex;
73
- justify-content: center;
74
- padding: 1.25rem 1.875rem;
75
- /* Set 'container-type: inline-size;' to reference container*/
76
- }
77
- @container (width < 576px) {
78
- .media-center-overview {
79
- padding: 0.625rem 0.9375rem;
80
- }
81
- }
82
- .media-center-overview__content {
83
- width: 100%;
84
- max-width: 73.75rem;
85
- display: flex;
86
- flex-direction: column;
87
- gap: 2.25rem;
88
- }
89
- .media-center-overview__section {
90
- display: flex;
91
- flex-direction: column;
92
- gap: 1rem;
93
- }
94
- .media-center-overview__section-header {
95
- display: flex;
96
- align-items: center;
97
- gap: 0.6875rem;
98
- font-size: 1.125rem;
99
- line-height: 1.75rem;
100
- font-weight: 500;
101
- color: #ffffff;
102
- text-shadow: 0 1px 0 rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 6px rgba(0, 0, 0, 0.05);
103
- }
104
- .media-center-overview__section-header::before {
105
- content: "";
106
- display: inline-block;
107
- width: 0.3125rem;
108
- height: 1.625rem;
109
- border-radius: 0.125rem;
110
- background: #5a8dec;
111
- }
112
- .media-center-overview__section-header--red::before {
113
- background: #f17e8b;
114
- }
115
- .media-center-overview__section-content {
116
- --product-card--aspect-ratio: 9/16;
117
- --product-card--border-radius: 0.375rem;
118
- display: grid;
119
- gap: 2rem 1.25rem;
120
- grid-template-columns: repeat(5, minmax(0, 1fr));
121
- /* Set 'container-type: inline-size;' to reference container*/
122
- /* Set 'container-type: inline-size;' to reference container*/
123
- /* Set 'container-type: inline-size;' to reference container*/
124
- }
125
- @container (width < 992px) {
126
- .media-center-overview__section-content {
127
- grid-template-columns: repeat(4, minmax(0, 1fr));
128
- }
129
- }
130
- @container (width < 768px) {
131
- .media-center-overview__section-content {
132
- grid-template-columns: repeat(3, minmax(0, 1fr));
133
- }
134
- }
135
- @container (width < 576px) {
136
- .media-center-overview__section-content {
137
- grid-template-columns: repeat(2, minmax(0, 1fr));
138
- }
139
- }
140
- .media-center-overview__card-wrapper {
141
- aspect-ratio: 9/16;
142
- }</style>
@@ -1,6 +0,0 @@
1
- export declare class FeedHandler {
2
- private _active;
3
- get active(): boolean;
4
- activate: () => Promise<void>;
5
- deactivate: () => void;
6
- }
@@ -1,12 +0,0 @@
1
- export class FeedHandler {
2
- _active = $state(false);
3
- get active() {
4
- return this._active;
5
- }
6
- activate = async () => {
7
- this._active = true;
8
- };
9
- deactivate = () => {
10
- this._active = false;
11
- };
12
- }
@@ -1,2 +0,0 @@
1
- export { makePostPlayerItemsProvider } from './post-player-provider-generator';
2
- export { makeStreamsPlayerDataProvider } from './streams-player-provider-generator';
@@ -1,2 +0,0 @@
1
- export { makePostPlayerItemsProvider } from './post-player-provider-generator';
2
- export { makeStreamsPlayerDataProvider } from './streams-player-provider-generator';