@streamscloud/embeddable 12.1.0 → 13.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 (219) hide show
  1. package/dist/ads/ad-card/cmp.ad-card.svelte +4 -16
  2. package/dist/content-player/cmp.content-player.svelte +1 -1
  3. package/dist/content-player/content-player-config.svelte.d.ts +2 -12
  4. package/dist/content-player/content-player-config.svelte.js +1 -1
  5. package/dist/content-player/content-player-settings.svelte.d.ts +16 -0
  6. package/dist/content-player/content-player-settings.svelte.js +27 -0
  7. package/dist/content-player/controls-and-attachments.svelte +32 -2
  8. package/dist/content-player/controls-and-attachments.svelte.d.ts +1 -0
  9. package/dist/content-player/index.d.ts +1 -0
  10. package/dist/content-player/index.js +1 -0
  11. package/dist/content-player/overview-panel.svelte +2 -2
  12. package/dist/content-player/ui-manager.svelte.d.ts +2 -1
  13. package/dist/content-player/ui-manager.svelte.js +2 -1
  14. package/dist/core/enums.d.ts +3 -0
  15. package/dist/core/enums.js +4 -0
  16. package/dist/core/theme/index.d.ts +2 -0
  17. package/dist/core/theme/index.js +1 -0
  18. package/dist/core/theme/theme-store.svelte.d.ts +6 -0
  19. package/dist/core/theme/theme-store.svelte.js +10 -0
  20. package/dist/external-api/data-providers/index.d.ts +6 -0
  21. package/dist/external-api/data-providers/index.js +6 -0
  22. package/dist/external-api/data-providers/internal-media-center-data-provider.svelte.d.ts +15 -0
  23. package/dist/{media-center/config/internal-media-center-config.js → external-api/data-providers/internal-media-center-data-provider.svelte.js} +33 -17
  24. package/dist/{posts/handlers → external-api/data-providers}/internal-post-analytics-handler.d.ts +1 -1
  25. package/dist/{short-videos → external-api}/data-providers/internal-short-video-player-items-provider.js +1 -1
  26. package/dist/{streams/streams-player → external-api/data-providers}/internal-stream-analytics-handler.d.ts +1 -1
  27. package/dist/{streams/streams-player → external-api/data-providers}/internal-streams-player-data-provider.d.ts +1 -1
  28. package/dist/{streams/streams-player → external-api/data-providers}/internal-streams-player-data-provider.js +1 -1
  29. package/dist/{media-center/config → external-api/data-providers}/operations.generated.d.ts +6 -0
  30. package/dist/{media-center/config → external-api/data-providers}/operations.generated.js +13 -0
  31. package/dist/{media-center/config → external-api/data-providers}/operations.graphql +6 -0
  32. package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/mapper.d.ts +1 -1
  33. package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/mapper.js +2 -2
  34. package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/operations.generated.d.ts +1 -1
  35. package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/posts-loader.d.ts +2 -2
  36. package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/posts-loader.js +1 -1
  37. package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/mapper.d.ts +1 -1
  38. package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/mapper.js +1 -1
  39. package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/operations.generated.d.ts +1 -1
  40. package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/stream-pages-loader.d.ts +1 -1
  41. package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/stream-pages-loader.js +2 -2
  42. package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/streams-loader.d.ts +2 -2
  43. package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/streams-loader.js +6 -2
  44. package/dist/external-api/index.d.ts +3 -0
  45. package/dist/external-api/index.js +3 -0
  46. package/dist/external-api/media-page/index.d.ts +83 -0
  47. package/dist/external-api/media-page/index.js +82 -0
  48. package/dist/{short-videos → external-api}/short-videos-player/index.d.ts +27 -12
  49. package/dist/{short-videos → external-api}/short-videos-player/index.js +35 -28
  50. package/dist/external-api/streams-player/index.d.ts +105 -0
  51. package/dist/external-api/streams-player/index.js +110 -0
  52. package/dist/media-center/config/types.d.ts +28 -27
  53. package/dist/media-center/index.d.ts +3 -1
  54. package/dist/media-center/media-center/cmp.media-center-proxy.svelte +59 -0
  55. package/dist/media-center/media-center/cmp.media-center-proxy.svelte.d.ts +15 -0
  56. package/dist/media-center/media-center/discover/community-features-localization.d.ts +8 -0
  57. package/dist/media-center/media-center/discover/community-features-localization.js +31 -0
  58. package/dist/media-center/media-center/discover/community-features.svelte +171 -0
  59. package/dist/media-center/media-center/discover/community-features.svelte.d.ts +11 -0
  60. package/dist/media-center/media-center/discover/data-loading.d.ts +3 -3
  61. package/dist/media-center/media-center/discover/data-loading.js +5 -5
  62. package/dist/media-center/media-center/discover/discover-header.svelte +13 -65
  63. package/dist/media-center/media-center/discover/discover-header.svelte.d.ts +0 -2
  64. package/dist/media-center/media-center/discover/discover-view-handler.svelte.d.ts +3 -3
  65. package/dist/media-center/media-center/discover/discover-view-handler.svelte.js +4 -4
  66. package/dist/media-center/media-center/discover/discover-view.svelte +6 -6
  67. package/dist/media-center/media-center/discover/discover-view.svelte.d.ts +0 -2
  68. package/dist/media-center/media-center/feed/feed-handler.svelte.d.ts +5 -3
  69. package/dist/media-center/media-center/feed/feed-handler.svelte.js +18 -10
  70. package/dist/media-center/media-center/feed/feed-providers-generator.d.ts +11 -5
  71. package/dist/media-center/media-center/feed/feed-providers-generator.js +13 -9
  72. package/dist/media-center/media-center/footer/index.d.ts +1 -0
  73. package/dist/media-center/media-center/footer/index.js +1 -0
  74. package/dist/media-center/media-center/{header-footer → footer}/media-center-footer.svelte +5 -5
  75. package/dist/media-center/media-center/handlers/categories-handler.svelte.d.ts +3 -5
  76. package/dist/media-center/media-center/handlers/categories-handler.svelte.js +16 -13
  77. package/dist/media-center/media-center/handlers/media-center-settings-handler.svelte.d.ts +18 -5
  78. package/dist/media-center/media-center/handlers/media-center-settings-handler.svelte.js +21 -9
  79. package/dist/media-center/media-center/{header-footer → header}/index.d.ts +0 -1
  80. package/dist/media-center/media-center/{header-footer → header}/index.js +0 -1
  81. package/dist/media-center/media-center/{header-footer → header}/media-center-header-mobile.svelte +5 -4
  82. package/dist/media-center/media-center/{header-footer → header}/media-center-header.svelte +138 -35
  83. package/dist/media-center/media-center/{header-footer → header}/media-center-header.svelte.d.ts +2 -2
  84. package/dist/media-center/media-center/index.d.ts +2 -1
  85. package/dist/media-center/media-center/index.js +2 -1
  86. package/dist/media-center/media-center/media-center-context.svelte.d.ts +16 -20
  87. package/dist/media-center/media-center/media-center-context.svelte.js +61 -19
  88. package/dist/media-center/media-center/media-center-settings.svelte.d.ts +11 -0
  89. package/dist/media-center/media-center/media-center-settings.svelte.js +23 -0
  90. package/dist/media-center/media-center/{cmp.media-center.svelte → media-center-view.svelte} +65 -108
  91. package/dist/media-center/media-center/media-center-view.svelte.d.ts +9 -0
  92. package/dist/media-center/media-center/menu/category-following-wrapper.svelte.d.ts +1 -1
  93. package/dist/media-center/media-center/menu/menu.svelte +40 -35
  94. package/dist/media-center/media-center/menu/menu.svelte.d.ts +0 -2
  95. package/dist/media-center/media-center/menu/popular-streams-panel-handler.svelte.d.ts +3 -3
  96. package/dist/media-center/media-center/menu/popular-streams-panel-handler.svelte.js +4 -4
  97. package/dist/media-center/media-center/moments/cmp.moments-circle.svelte +24 -7
  98. package/dist/media-center/media-center/moments/index.d.ts +1 -0
  99. package/dist/media-center/media-center/moments/index.js +1 -0
  100. package/dist/media-center/media-center/moments/moments-feed-handler.svelte.d.ts +26 -0
  101. package/dist/media-center/media-center/moments/moments-feed-handler.svelte.js +49 -0
  102. package/dist/media-center/media-center/moments/moments-state.svelte.d.ts +20 -0
  103. package/dist/media-center/media-center/moments/moments-state.svelte.js +82 -0
  104. package/dist/media-center/media-center/streams-in-category/streams-in-category-panel-handler.svelte.d.ts +3 -3
  105. package/dist/media-center/media-center/streams-in-category/streams-in-category-panel-handler.svelte.js +4 -4
  106. package/dist/media-center/media-center/streams-in-category/streams-in-category-panel.svelte +2 -3
  107. package/dist/media-center/media-center/types.d.ts +4 -11
  108. package/dist/media-center/membership/index.d.ts +1 -0
  109. package/dist/media-center/membership/index.js +1 -0
  110. package/dist/media-center/membership/mock-membership-handler.svelte.d.ts +10 -0
  111. package/dist/media-center/membership/mock-membership-handler.svelte.js +21 -0
  112. package/dist/media-center/membership/types.d.ts +10 -0
  113. package/dist/media-center/membership/types.js +1 -0
  114. package/dist/media-center/navigation/index.d.ts +2 -0
  115. package/dist/media-center/navigation/index.js +1 -0
  116. package/dist/media-center/navigation/media-center-state.d.ts +19 -0
  117. package/dist/media-center/navigation/media-center-state.js +1 -0
  118. package/dist/media-center/navigation/mock-navigation-handler.svelte.d.ts +6 -0
  119. package/dist/media-center/navigation/mock-navigation-handler.svelte.js +6 -0
  120. package/dist/media-center/navigation/types.d.ts +5 -0
  121. package/dist/media-center/navigation/types.js +1 -0
  122. package/dist/media-page/cmp.media-page.svelte +45 -0
  123. package/dist/media-page/cmp.media-page.svelte.d.ts +11 -0
  124. package/dist/media-page/index.d.ts +42 -58
  125. package/dist/media-page/index.js +131 -17
  126. package/dist/posts/attachments/cmp.attachments.svelte +1 -1
  127. package/dist/posts/controls/cmp.controls.svelte +4 -1
  128. package/dist/posts/controls/cmp.controls.svelte.d.ts +2 -0
  129. package/dist/posts/post-viewer/attachments-horizontal.svelte +4 -12
  130. package/dist/posts/post-viewer/heading.svelte +4 -4
  131. package/dist/posts/post-viewer/media/post-media.svelte +1 -1
  132. package/dist/posts/post-viewer/post-texts.svelte +2 -2
  133. package/dist/posts/posts-player/cmp.posts-player.svelte.d.ts +1 -0
  134. package/dist/posts/posts-player/index.d.ts +31 -32
  135. package/dist/posts/posts-player/index.js +90 -35
  136. package/dist/posts/posts-player/posts-player-proxy.svelte +13 -4
  137. package/dist/posts/posts-player/posts-player-proxy.svelte.d.ts +1 -0
  138. package/dist/posts/posts-player/posts-player-view.svelte +1 -1
  139. package/dist/posts/posts-player/types.d.ts +2 -1
  140. package/dist/products/product-card/cmp.product-card.svelte +4 -16
  141. package/dist/short-videos/short-video-card/cmp.short-video-card.svelte +6 -6
  142. package/dist/streams/layout/styles-transformer.d.ts +1 -1
  143. package/dist/streams/stream-card/cmp.stream-card.svelte +1 -1
  144. package/dist/streams/streams-player/cmp.streams-player.svelte +42 -0
  145. package/dist/streams/streams-player/cmp.streams-player.svelte.d.ts +24 -0
  146. package/dist/streams/streams-player/index.d.ts +18 -83
  147. package/dist/streams/streams-player/index.js +85 -65
  148. package/dist/streams/streams-player/stream-overview.svelte +1 -1
  149. package/dist/streams/streams-player/streams-player-buffer.svelte.js +2 -1
  150. package/dist/streams/streams-player/streams-player-proxy.svelte +32 -0
  151. package/dist/streams/streams-player/streams-player-proxy.svelte.d.ts +26 -0
  152. package/dist/streams/streams-player/streams-player-view.svelte +1 -1
  153. package/dist/streams/streams-player/types.d.ts +3 -1
  154. package/dist/ui/button/cmp.options-button.svelte +123 -0
  155. package/dist/ui/button/cmp.options-button.svelte.d.ts +20 -0
  156. package/dist/ui/button/index.d.ts +1 -0
  157. package/dist/ui/button/index.js +1 -0
  158. package/dist/ui/button/resources/button-theme.svelte +6 -143
  159. package/dist/ui/button/resources/button-types.d.ts +0 -1
  160. package/dist/ui/button/resources/button-types.js +0 -1
  161. package/dist/ui/icon/cmp.icon.svelte +8 -28
  162. package/dist/ui/image/cmp.image-rounded.svelte +3 -10
  163. package/dist/ui/image/cmp.image-stub.svelte +1 -4
  164. package/dist/ui/image/cmp.image.svelte +1 -4
  165. package/dist/ui/loading/cmp.loading.svelte +1 -4
  166. package/dist/ui/player/button/cmp.mobile-player-buttons-group.svelte +2 -2
  167. package/dist/ui/player/button/cmp.mobile-player-buttons-group.svelte.d.ts +2 -2
  168. package/dist/ui/player/button/cmp.player-button.svelte +7 -3
  169. package/dist/ui/player/button/cmp.player-buttons-group.svelte +4 -3
  170. package/dist/ui/player/button/cmp.player-buttons-group.svelte.d.ts +2 -2
  171. package/dist/ui/player/button/index.d.ts +1 -1
  172. package/dist/ui/player/button/types.d.ts +1 -1
  173. package/dist/ui/player/colors/index.d.ts +1 -1
  174. package/dist/ui/player/colors/index.js +1 -1
  175. package/dist/ui/player/colors/player-colors.d.ts +15 -1
  176. package/dist/ui/player/colors/player-colors.js +24 -1
  177. package/dist/ui/player/providers/default-chunks-player-buffer.svelte.d.ts +1 -0
  178. package/dist/ui/player/providers/default-chunks-player-buffer.svelte.js +7 -1
  179. package/dist/ui/player/providers/default-feed-player-buffer.svelte.d.ts +1 -0
  180. package/dist/ui/player/providers/default-feed-player-buffer.svelte.js +7 -1
  181. package/dist/ui/player/providers/types.d.ts +3 -1
  182. package/dist/ui/shadow-dom/cmp.shadow-root.svelte +158 -0
  183. package/dist/ui/shadow-dom/colors.scss +74 -0
  184. package/dist/ui/shadow-dom/index.d.ts +1 -0
  185. package/dist/ui/shadow-dom/index.js +1 -0
  186. package/dist/ui/shadow-dom/shadow-root-service.js +0 -4
  187. package/dist/ui/slider/cmp.slider.svelte +5 -5
  188. package/package.json +5 -1
  189. package/dist/content-player/content-player-settings.d.ts +0 -12
  190. package/dist/content-player/content-player-settings.js +0 -22
  191. package/dist/media-center/config/internal-media-center-config.d.ts +0 -14
  192. package/dist/media-center/media-center/cmp.media-center.svelte.d.ts +0 -4
  193. package/dist/media-center/media-center/discover/discover-header-localization.d.ts +0 -6
  194. package/dist/media-center/media-center/discover/discover-header-localization.js +0 -15
  195. package/dist/posts/handlers/index.d.ts +0 -1
  196. package/dist/posts/handlers/index.js +0 -1
  197. package/dist/short-videos/data-providers/index.d.ts +0 -1
  198. package/dist/short-videos/data-providers/index.js +0 -1
  199. package/dist/ui/with-background/cmp.with-background.svelte +0 -86
  200. package/dist/ui/with-background/index.d.ts +0 -1
  201. package/dist/ui/with-background/index.js +0 -1
  202. /package/dist/{media-center/config → external-api/data-providers}/internal-media-center-analytics-handler.d.ts +0 -0
  203. /package/dist/{media-center/config → external-api/data-providers}/internal-media-center-analytics-handler.js +0 -0
  204. /package/dist/{posts/handlers → external-api/data-providers}/internal-post-analytics-handler.js +0 -0
  205. /package/dist/{short-videos → external-api}/data-providers/internal-short-video-player-items-provider.d.ts +0 -0
  206. /package/dist/{streams/streams-player → external-api/data-providers}/internal-stream-analytics-handler.js +0 -0
  207. /package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/index.d.ts +0 -0
  208. /package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/index.js +0 -0
  209. /package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/operations.generated.js +0 -0
  210. /package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/operations.graphql +0 -0
  211. /package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/index.d.ts +0 -0
  212. /package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/index.js +0 -0
  213. /package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/operations.generated.js +0 -0
  214. /package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/operations.graphql +0 -0
  215. /package/dist/media-center/media-center/{header-footer → footer}/media-center-footer.svelte.d.ts +0 -0
  216. /package/dist/media-center/media-center/{header-footer → header}/media-center-header-localization.d.ts +0 -0
  217. /package/dist/media-center/media-center/{header-footer → header}/media-center-header-localization.js +0 -0
  218. /package/dist/media-center/media-center/{header-footer → header}/media-center-header-mobile.svelte.d.ts +0 -0
  219. /package/dist/ui/{with-background/cmp.with-background.svelte.d.ts → shadow-dom/cmp.shadow-root.svelte.d.ts} +0 -0
@@ -0,0 +1,20 @@
1
+ import type { IMediaCenterDataProvider } from '../..';
2
+ import { type PostPlayerModel } from '../../../posts/posts-player';
3
+ import type { IChunksPlayerDataProvider } from '../../../ui/player/providers';
4
+ export declare class MomentsState {
5
+ private readonly dataProvider;
6
+ private momentsSeenLocally;
7
+ constructor(dataProvider: IMediaCenterDataProvider);
8
+ get allMoments(): {
9
+ id: string;
10
+ cover: string;
11
+ isSeen: boolean;
12
+ }[];
13
+ get unwatchedMoments(): {
14
+ id: string;
15
+ cover: string;
16
+ isSeen: boolean;
17
+ }[];
18
+ markMomentAsSeen: (momentId: string) => void;
19
+ generatePlayerDataProvider: (onEndReached: () => void) => IChunksPlayerDataProvider<PostPlayerModel>;
20
+ }
@@ -0,0 +1,82 @@
1
+ import { PostType } from '../../../core/enums';
2
+ import {} from '../../../posts/posts-player';
3
+ export class MomentsState {
4
+ dataProvider;
5
+ momentsSeenLocally = $state.raw([]);
6
+ constructor(dataProvider) {
7
+ this.dataProvider = dataProvider;
8
+ }
9
+ get allMoments() {
10
+ return this.dataProvider.model?.moments ?? [];
11
+ }
12
+ get unwatchedMoments() {
13
+ return this.allMoments.filter((s) => !s.isSeen && !this.momentsSeenLocally.includes(s.id));
14
+ }
15
+ markMomentAsSeen = (momentId) => {
16
+ if (!this.momentsSeenLocally.includes(momentId)) {
17
+ this.momentsSeenLocally = [...this.momentsSeenLocally, momentId];
18
+ }
19
+ };
20
+ generatePlayerDataProvider = (onEndReached) => {
21
+ const collectionCapacity = 5;
22
+ const sortedMoments = [...this.allMoments].sort((a, b) => {
23
+ const aUnwatched = !a.isSeen && !this.momentsSeenLocally.includes(a.id);
24
+ const bUnwatched = !b.isSeen && !this.momentsSeenLocally.includes(b.id);
25
+ if (aUnwatched === bUnwatched) {
26
+ return 0;
27
+ }
28
+ return aUnwatched ? -1 : 1;
29
+ });
30
+ const ids = sortedMoments.map((m) => m.id);
31
+ const idOrder = new Map();
32
+ ids.forEach((id, idx) => idOrder.set(id, idx));
33
+ const chunksCount = Math.ceil(sortedMoments.length / collectionCapacity);
34
+ const prefetchedChunks = [];
35
+ for (let i = 1; i <= chunksCount; i++) {
36
+ prefetchedChunks.push({
37
+ id: i.toString()
38
+ });
39
+ }
40
+ return {
41
+ kind: 'chunks',
42
+ initialData: {
43
+ prefetchedChunks
44
+ },
45
+ loadMoreChunks: () => {
46
+ return Promise.resolve([]);
47
+ },
48
+ loadChunkItems: async (chunkId, continuationToken) => {
49
+ const emptyResult = {
50
+ items: [],
51
+ continuationToken: null
52
+ };
53
+ if (continuationToken === null) {
54
+ return emptyResult;
55
+ }
56
+ const idsStart = (parseInt(chunkId) - 1) * collectionCapacity;
57
+ const idsEnd = Math.min(idsStart + collectionCapacity, ids.length);
58
+ const momentsInChunk = ids.slice(idsStart, idsEnd);
59
+ if (momentsInChunk.length === 0) {
60
+ return emptyResult;
61
+ }
62
+ const moments = await this.dataProvider.postsPlayer.getPostsCursor({
63
+ filter: {
64
+ types: [PostType.Moment],
65
+ includeIds: momentsInChunk
66
+ },
67
+ limit: collectionCapacity
68
+ });
69
+ const items = moments.items.sort((a, b) => {
70
+ const ia = idOrder.get(a.id) ?? Number.MAX_SAFE_INTEGER;
71
+ const ib = idOrder.get(b.id) ?? Number.MAX_SAFE_INTEGER;
72
+ return ia - ib;
73
+ });
74
+ return {
75
+ items,
76
+ continuationToken: null
77
+ };
78
+ },
79
+ onEndReached
80
+ };
81
+ };
82
+ }
@@ -1,14 +1,14 @@
1
- import type { IMediaCenterConfig } from '../../../short-videos/short-videos-player';
1
+ import type { IMediaCenterDataProvider } from '../../config/types';
2
2
  import type { StreamPlayerModel } from '../../../streams/streams-player';
3
3
  import type { MediaCenterCategoryData } from '../types';
4
4
  export declare class StreamsInCategoryPanelHandler {
5
- private readonly config;
5
+ private readonly dataProvider;
6
6
  private _activated;
7
7
  private _state;
8
8
  private _categoryId;
9
9
  private _categoryName;
10
10
  private _streams;
11
- constructor(config: IMediaCenterConfig);
11
+ constructor(dataProvider: IMediaCenterDataProvider);
12
12
  get streamSectionItems(): StreamPlayerModel[];
13
13
  get categoryId(): string;
14
14
  get categoryName(): string;
@@ -1,12 +1,12 @@
1
1
  export class StreamsInCategoryPanelHandler {
2
- config;
2
+ dataProvider;
3
3
  _activated = $state(false);
4
4
  _state = $state('loading');
5
5
  _categoryId = $state.raw('');
6
6
  _categoryName = $state.raw('');
7
7
  _streams = $state.raw([]);
8
- constructor(config) {
9
- this.config = config;
8
+ constructor(dataProvider) {
9
+ this.dataProvider = dataProvider;
10
10
  }
11
11
  get streamSectionItems() {
12
12
  return this._streams;
@@ -33,7 +33,7 @@ export class StreamsInCategoryPanelHandler {
33
33
  this._activated = true;
34
34
  this._state = 'loading';
35
35
  try {
36
- const streamsResponse = await this.config.streamPlayer.getStreamsCursor({ filter: { categoryId: categoryData.id }, limit: 5 });
36
+ const streamsResponse = await this.dataProvider.streamPlayer.getStreamsCursor({ filter: { categoryId: categoryData.id }, limit: 5 });
37
37
  this._categoryName = categoryData.parentName ? `${categoryData.parentName} - ${categoryData.name}` : categoryData.name;
38
38
  this._categoryId = categoryData.id;
39
39
  this._streams = streamsResponse.items;
@@ -63,8 +63,7 @@ let { handler, on } = $props();
63
63
  font-size: 1.125rem;
64
64
  line-height: 1.75rem;
65
65
  font-weight: 500;
66
- color: #ffffff;
67
- 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);
66
+ color: var(--sc-mc-color--text-primary);
68
67
  }
69
68
  .streams-in-category__section-header::before {
70
69
  content: "";
@@ -72,7 +71,7 @@ let { handler, on } = $props();
72
71
  width: 0.3125rem;
73
72
  height: 1.625rem;
74
73
  border-radius: 0.125rem;
75
- background: #5a8dec;
74
+ background: var(--sc-mc-color--border-brand);
76
75
  }
77
76
  .streams-in-category__section-content {
78
77
  --product-card--aspect-ratio: 9/16;
@@ -1,22 +1,14 @@
1
1
  import type { Locale } from '../../core/locale';
2
- import type { IMediaCenterConfig } from '../config/types';
3
2
  import type { PostPlayerModel, PostsPlayerProps } from '../../posts/posts-player/types';
4
3
  import type { IStreamsPlayerDataProvider, StreamAmplificationParameters, StreamsPlayerProps } from '../../streams/streams-player/types';
5
- import type { ICloseOrchestrator } from '../../ui/player/close-orchestrator';
6
4
  import type { IPlayerDataProvider } from '../../ui/player/providers';
7
- export type MediaCenterMode = 'feed' | 'discover';
5
+ export type MediaCenterMode = 'feed' | 'discover' | 'moments';
8
6
  export type MediaCenterCategoryData = {
9
7
  id: string;
10
8
  name: string;
11
9
  parentId: string | undefined;
12
10
  parentName: string | undefined;
13
11
  };
14
- export type MediaCenterProps = {
15
- config: IMediaCenterConfig;
16
- settings?: MediaCenterSettings;
17
- modeProps: MediaCenterModeProps;
18
- closeOrchestrator: ICloseOrchestrator;
19
- };
20
12
  export type MediaCenterModeProps = {
21
13
  mode: 'posts';
22
14
  props: {
@@ -34,7 +26,7 @@ export type MediaCenterModeProps = {
34
26
  }) => void;
35
27
  };
36
28
  } | {
37
- mode: 'discover';
29
+ mode: 'default';
38
30
  };
39
31
  export type PlayerProps = {
40
32
  type: 'posts';
@@ -43,8 +35,9 @@ export type PlayerProps = {
43
35
  type: 'streams';
44
36
  props: StreamsPlayerProps;
45
37
  };
46
- export type MediaCenterSettings = {
38
+ export type IMediaCenterSettings = {
47
39
  locale?: Locale;
48
40
  showStreamsCloudWatermark?: boolean;
49
41
  disableBackground?: boolean;
42
+ theme?: 'light' | 'dark';
50
43
  };
@@ -0,0 +1 @@
1
+ export type { IMediaCenterMembershipHandler } from './types';
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,10 @@
1
+ import type { IMediaCenterMembershipHandler } from './types';
2
+ export declare class MockMembershipHandler implements IMediaCenterMembershipHandler {
3
+ private isJoined;
4
+ getIsJoined: () => Promise<{
5
+ readonly isJoined: boolean;
6
+ }>;
7
+ join: () => void;
8
+ leave: () => void;
9
+ viewMembersList: () => void;
10
+ }
@@ -0,0 +1,21 @@
1
+ export class MockMembershipHandler {
2
+ isJoined = $state(false);
3
+ getIsJoined = () => {
4
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
5
+ const handler = this;
6
+ return Promise.resolve({
7
+ get isJoined() {
8
+ return handler.isJoined;
9
+ }
10
+ });
11
+ };
12
+ join = () => {
13
+ this.isJoined = true;
14
+ };
15
+ leave = () => {
16
+ this.isJoined = false;
17
+ };
18
+ viewMembersList = () => {
19
+ console.warn('MockMembershipHandler.viewMembersList called');
20
+ };
21
+ }
@@ -0,0 +1,10 @@
1
+ export interface IMediaCenterMembershipHandler {
2
+ getIsJoined: () => PromiseLike<{
3
+ readonly isJoined: boolean;
4
+ }>;
5
+ join: () => PromiseLike<void>;
6
+ leave: () => PromiseLike<void>;
7
+ viewMembersList: () => PromiseLike<void>;
8
+ }
9
+ type PromiseLike<T> = T | Promise<T>;
10
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ export type { IMediaCenterNavigationHandler } from './types';
2
+ export type { MediaCenterState } from './media-center-state';
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,19 @@
1
+ export type MediaCenterState = PostsFeedState | StreamsFeedState | DiscoverState | MomentsState;
2
+ export type PostsFeedState = {
3
+ mode: 'posts-feed';
4
+ postId: string;
5
+ categoryId: string | null;
6
+ };
7
+ export type StreamsFeedState = {
8
+ mode: 'streams-feed';
9
+ streamId: string;
10
+ categoryId: string | null;
11
+ };
12
+ export type DiscoverState = {
13
+ mode: 'discover';
14
+ categoryId: string | null;
15
+ };
16
+ export type MomentsState = {
17
+ mode: 'moments';
18
+ momentId: string;
19
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ import type { MediaCenterState } from './media-center-state';
2
+ import type { IMediaCenterNavigationHandler } from './types';
3
+ export declare class MockNavigationHandler implements IMediaCenterNavigationHandler {
4
+ initialState: undefined;
5
+ onChange: (state: MediaCenterState) => void;
6
+ }
@@ -0,0 +1,6 @@
1
+ export class MockNavigationHandler {
2
+ initialState = undefined;
3
+ onChange = (state) => {
4
+ console.warn(state);
5
+ };
6
+ }
@@ -0,0 +1,5 @@
1
+ import type { MediaCenterState } from './media-center-state';
2
+ export interface IMediaCenterNavigationHandler {
3
+ initialState?: MediaCenterState;
4
+ onChange: (state: MediaCenterState) => void;
5
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,45 @@
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 { MediaCenterProxy } from '../media-center/media-center';
11
+ import { MediaCenterSettings } from '../media-center/media-center/media-center-settings.svelte';
12
+ import { CloseOrchestrator } from '../ui/player/close-orchestrator';
13
+ import { createShadowRoot } from '../ui/shadow-dom';
14
+ import { mount, unmount } from 'svelte';
15
+ let { dataProvider, settings, dynamicActions } = $props();
16
+ const settingsHolder = new MediaCenterSettings(settings);
17
+ $effect(() => {
18
+ settingsHolder.patch(settings);
19
+ });
20
+ const initHost = (node) => {
21
+ const shadowRoot = createShadowRoot(node);
22
+ const mounted = mount(MediaCenterProxy, {
23
+ target: shadowRoot,
24
+ props: {
25
+ dataProvider,
26
+ settings: settingsHolder,
27
+ modeProps: { mode: 'default' },
28
+ dynamicActions,
29
+ closeOrchestrator: new CloseOrchestrator({
30
+ closeFn: () => __awaiter(void 0, void 0, void 0, function* () {
31
+ yield unmount(mounted);
32
+ }),
33
+ canClose: false
34
+ })
35
+ }
36
+ });
37
+ return {
38
+ destroy: () => {
39
+ unmount(mounted);
40
+ }
41
+ };
42
+ };
43
+ </script>
44
+
45
+ <div class="streams-player-host" use:initHost></div>
@@ -0,0 +1,11 @@
1
+ import type { IMediaCenterDataProvider } from '../media-center';
2
+ import type { IMediaCenterSettings } from '../media-center/media-center/types';
3
+ import { type Snippet } from 'svelte';
4
+ type Props = {
5
+ dataProvider: IMediaCenterDataProvider;
6
+ settings?: IMediaCenterSettings;
7
+ dynamicActions?: Snippet;
8
+ };
9
+ declare const Cmp: import("svelte").Component<Props, {}, "">;
10
+ type Cmp = ReturnType<typeof Cmp>;
11
+ export default Cmp;
@@ -1,42 +1,36 @@
1
1
  import type { Locale } from '../core/locale';
2
- import { type IMediaCenterConfig } from '../media-center/config/types';
3
- export type { IMediaCenterConfig };
4
- export { mapToPostPlayerModel } from '../posts/data-loaders/mapper';
2
+ import { type IMediaCenterDataProvider } from '../media-center/config/types';
3
+ import type { PostPlayerModel } from '../posts/posts-player';
4
+ import type { IStreamsPlayerDataProvider } from '../streams/streams-player';
5
+ import type { StreamAmplificationParameters } from '../streams/streams-player/types';
6
+ import type { IPlayerDataProvider } from '../ui/player/providers';
7
+ export { default as MediaPage } from './cmp.media-page.svelte';
8
+ export type { IMediaCenterDataProvider };
5
9
  /**
6
10
  * Opens the media page modal.
7
11
  *
8
- * Two overloads (mutually exclusive; enforced by TypeScript):
9
- * - Config mode: openMediaPageModal({ mediaCenterConfig, viewerSettings?, on? })
10
- * - Internal config mode: openMediaPageModal({ id, initiator, graphqlOrigin?, viewerSettings?, on? })
11
- *
12
12
  * @param init Configuration options.
13
13
  *
14
- * Config mode (overload 1)
15
- * @param {IMediaCenterConfig} init.mediaCenterConfig
14
+ * Config mode
15
+ * @param {IMediaCenterDataProvider} init.dataProvider
16
16
  * Configuration for the media center.
17
17
  *
18
- * Internal config mode (overload 2)
19
- * @param {string} init.id
20
- * Media page ID, used to construct an internal media-center config.
21
- * @param {string} init.initiator
22
- * Initiator identifier (used for tracking/analytics and GraphQL).
23
- * @param {string} [init.graphqlOrigin]
24
- * Optional GraphQL origin (base URL). If omitted, the default origin is determined internally.
25
- *
26
18
  * Common (optional)
27
- * @param {MediaPageViewerSettings} [init.viewerSettings]
19
+ * @param {Object} [init.viewerSettings]
28
20
  * Viewer UI and behavior settings.
29
21
  *
30
- * Fields of MediaPageViewerSettings:
31
- * - {boolean} [disableBackground]
32
- * If true , hides the viewer background image.
33
- * - {Locale} [locale='en']
22
+ * Fields of `viewerSettings`:
23
+ * - {boolean} [viewerSettings.disableBackground]
24
+ * If true, hides the viewer background image.
25
+ * - {Locale} [viewerSettings.locale]
34
26
  * Localization for the viewer UI. Supported values: 'en' | 'no'.
35
27
  * If omitted, the default locale 'en' is used.
36
- * - {boolean} [showStreamsCloudWatermark]
28
+ * - {boolean} [viewerSettings.showStreamsCloudWatermark]
37
29
  * If true, shows the StreamsCloud watermark.
38
- * - {boolean} [hideCloseButton]
30
+ * - {boolean} [viewerSettings.hideCloseButton]
39
31
  * If true, hides the close button.
32
+ * - {'light' | 'dark'} [viewerSettings.theme]
33
+ * Optional theme for the viewer UI.
40
34
  *
41
35
  * Events
42
36
  * @param {{ closed?: () => void }} [init.on]
@@ -44,52 +38,28 @@ export { mapToPostPlayerModel } from '../posts/data-loaders/mapper';
44
38
  * @param {() => void} [init.on.closed]
45
39
  * Called after the modal is fully closed (after unmount and removal from the DOM).
46
40
  *
47
- * Notes
48
- * - If neither mediaCenterConfig nor id is specified, a warning is shown and the modal is not opened.
49
- *
50
41
  * @returns {void}
51
42
  *
52
43
  * @example <caption>Config mode</caption>
53
44
  * ```ts
54
45
  * import {
55
46
  * openMediaPageModal,
56
- * type IMediaCenterConfig,
47
+ * type IMediaCenterDataProvider
57
48
  * } from '@streamscloud/embeddable/media-page';
58
49
  *
59
- * const mediaCenterConfig: IMediaCenterConfig = {
50
+ * const dataProvider: IMediaDataProvider= {
60
51
  * // ...your media center configuration
61
52
  * };
62
53
  *
63
54
  * openMediaPageModal({
64
- * mediaCenterConfig,
55
+ * dataProvider,
65
56
  * viewerSettings: {
66
- * // Locale defaults to 'en'; set 'no' to switch to Norwegian:
57
+ * // Example: switch to Norwegian (if supported by your Locale type)
67
58
  * locale: 'no',
68
59
  * disableBackground: false,
69
60
  * hideCloseButton: false,
70
61
  * showStreamsCloudWatermark: true,
71
- * },
72
- * on: {
73
- * closed: () => console.log('Media page modal closed'),
74
- * },
75
- * });
76
- * ```
77
- *
78
-
79
-
80
- * @example <caption>Internal config mode</caption>
81
- * ```ts
82
- * import { openMediaPageModal } from '@streamscloud/embeddable/media-page';
83
- *
84
- * openMediaPageModal({
85
- * id: 'media-page-123',
86
- * initiator: 'marketing-campaign',
87
- * graphqlOrigin: 'https://api.example.com',
88
- * viewerSettings: {
89
- * locale: 'en',
90
- * disableBackground: true,
91
- * hideCloseButton: false,
92
- * showStreamsCloudWatermark: false,
62
+ * theme: 'dark',
93
63
  * },
94
64
  * on: {
95
65
  * closed: () => console.log('Media page modal closed'),
@@ -98,19 +68,32 @@ export { mapToPostPlayerModel } from '../posts/data-loaders/mapper';
98
68
  * ```
99
69
  */
100
70
  export declare function openMediaPageModal(init: {
101
- mediaCenterConfig: IMediaCenterConfig;
71
+ dataProvider: IMediaCenterDataProvider;
102
72
  viewerSettings?: MediaPageViewerSettings;
103
73
  on?: {
104
74
  closed?: () => void;
105
75
  };
106
76
  }): void;
107
- export declare function openMediaPageModal(init: {
108
- id: string;
109
- initiator: string;
110
- graphqlOrigin?: string;
77
+ export declare function openMediaPageModalWithInitialPostsProvider(init: {
78
+ dataProvider: IPlayerDataProvider<PostPlayerModel>;
79
+ mediaCenterDataProvider: IMediaCenterDataProvider;
80
+ viewerSettings?: MediaPageViewerSettings;
81
+ on?: {
82
+ closed?: () => void;
83
+ postActivated?: (id: string) => void;
84
+ };
85
+ }): void;
86
+ export declare function openMediaPageModalWithInitialStreamsProvider(init: {
87
+ dataProvider: IStreamsPlayerDataProvider;
88
+ amplificationParameters?: StreamAmplificationParameters;
89
+ mediaCenterDataProvider: IMediaCenterDataProvider;
111
90
  viewerSettings?: MediaPageViewerSettings;
112
91
  on?: {
113
92
  closed?: () => void;
93
+ streamActivated?: (data: {
94
+ title: string;
95
+ image: string | null;
96
+ }) => void;
114
97
  };
115
98
  }): void;
116
99
  export type MediaPageViewerSettings = {
@@ -118,4 +101,5 @@ export type MediaPageViewerSettings = {
118
101
  locale?: Locale;
119
102
  showStreamsCloudWatermark?: boolean;
120
103
  hideCloseButton?: boolean;
104
+ theme?: 'light' | 'dark';
121
105
  };