@streamscloud/embeddable 12.2.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 (162) hide show
  1. package/dist/content-player/content-player-config.svelte.d.ts +2 -13
  2. package/dist/content-player/content-player-config.svelte.js +1 -1
  3. package/dist/content-player/content-player-settings.svelte.d.ts +16 -0
  4. package/dist/content-player/content-player-settings.svelte.js +27 -0
  5. package/dist/content-player/index.d.ts +1 -0
  6. package/dist/content-player/index.js +1 -0
  7. package/dist/core/theme/index.d.ts +1 -0
  8. package/dist/core/theme/theme-store.svelte.d.ts +3 -2
  9. package/dist/external-api/data-providers/index.d.ts +6 -0
  10. package/dist/external-api/data-providers/index.js +6 -0
  11. package/dist/external-api/data-providers/internal-media-center-data-provider.svelte.d.ts +15 -0
  12. package/dist/{media-center/config/internal-media-center-config.js → external-api/data-providers/internal-media-center-data-provider.svelte.js} +33 -17
  13. package/dist/{posts/handlers → external-api/data-providers}/internal-post-analytics-handler.d.ts +1 -1
  14. package/dist/{short-videos → external-api}/data-providers/internal-short-video-player-items-provider.js +1 -1
  15. package/dist/{streams/streams-player → external-api/data-providers}/internal-stream-analytics-handler.d.ts +1 -1
  16. package/dist/{streams/streams-player → external-api/data-providers}/internal-streams-player-data-provider.d.ts +1 -1
  17. package/dist/{streams/streams-player → external-api/data-providers}/internal-streams-player-data-provider.js +1 -1
  18. package/dist/{media-center/config → external-api/data-providers}/operations.generated.d.ts +6 -0
  19. package/dist/{media-center/config → external-api/data-providers}/operations.generated.js +13 -0
  20. package/dist/{media-center/config → external-api/data-providers}/operations.graphql +6 -0
  21. package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/mapper.d.ts +1 -1
  22. package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/mapper.js +2 -2
  23. package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/operations.generated.d.ts +1 -1
  24. package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/posts-loader.d.ts +2 -2
  25. package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/posts-loader.js +1 -1
  26. package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/mapper.d.ts +1 -1
  27. package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/mapper.js +1 -1
  28. package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/operations.generated.d.ts +1 -1
  29. package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/stream-pages-loader.d.ts +1 -1
  30. package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/stream-pages-loader.js +2 -2
  31. package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/streams-loader.d.ts +2 -2
  32. package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/streams-loader.js +1 -1
  33. package/dist/external-api/index.d.ts +3 -0
  34. package/dist/external-api/index.js +3 -0
  35. package/dist/external-api/media-page/index.d.ts +83 -0
  36. package/dist/external-api/media-page/index.js +82 -0
  37. package/dist/{short-videos → external-api}/short-videos-player/index.d.ts +27 -12
  38. package/dist/{short-videos → external-api}/short-videos-player/index.js +35 -28
  39. package/dist/external-api/streams-player/index.d.ts +105 -0
  40. package/dist/external-api/streams-player/index.js +110 -0
  41. package/dist/media-center/config/types.d.ts +28 -27
  42. package/dist/media-center/index.d.ts +3 -1
  43. package/dist/media-center/media-center/cmp.media-center-proxy.svelte +4 -4
  44. package/dist/media-center/media-center/cmp.media-center-proxy.svelte.d.ts +7 -4
  45. package/dist/media-center/media-center/discover/community-features-localization.d.ts +8 -0
  46. package/dist/media-center/media-center/discover/community-features-localization.js +31 -0
  47. package/dist/media-center/media-center/discover/community-features.svelte +171 -0
  48. package/dist/media-center/media-center/discover/community-features.svelte.d.ts +11 -0
  49. package/dist/media-center/media-center/discover/data-loading.d.ts +3 -3
  50. package/dist/media-center/media-center/discover/data-loading.js +5 -5
  51. package/dist/media-center/media-center/discover/discover-header.svelte +7 -56
  52. package/dist/media-center/media-center/discover/discover-view-handler.svelte.d.ts +3 -3
  53. package/dist/media-center/media-center/discover/discover-view-handler.svelte.js +4 -4
  54. package/dist/media-center/media-center/feed/feed-handler.svelte.d.ts +5 -3
  55. package/dist/media-center/media-center/feed/feed-handler.svelte.js +18 -10
  56. package/dist/media-center/media-center/feed/feed-providers-generator.d.ts +11 -5
  57. package/dist/media-center/media-center/feed/feed-providers-generator.js +13 -9
  58. package/dist/media-center/media-center/footer/index.d.ts +1 -0
  59. package/dist/media-center/media-center/footer/index.js +1 -0
  60. package/dist/media-center/media-center/handlers/categories-handler.svelte.d.ts +3 -5
  61. package/dist/media-center/media-center/handlers/categories-handler.svelte.js +16 -13
  62. package/dist/media-center/media-center/handlers/media-center-settings-handler.svelte.d.ts +18 -7
  63. package/dist/media-center/media-center/handlers/media-center-settings-handler.svelte.js +18 -25
  64. package/dist/media-center/media-center/{header-footer → header}/index.d.ts +0 -1
  65. package/dist/media-center/media-center/{header-footer → header}/index.js +0 -1
  66. package/dist/media-center/media-center/{header-footer → header}/media-center-header.svelte +133 -28
  67. package/dist/media-center/media-center/{header-footer → header}/media-center-header.svelte.d.ts +2 -0
  68. package/dist/media-center/media-center/index.d.ts +1 -0
  69. package/dist/media-center/media-center/index.js +1 -0
  70. package/dist/media-center/media-center/media-center-context.svelte.d.ts +15 -9
  71. package/dist/media-center/media-center/media-center-context.svelte.js +57 -19
  72. package/dist/media-center/media-center/media-center-settings.svelte.d.ts +11 -0
  73. package/dist/media-center/media-center/media-center-settings.svelte.js +23 -0
  74. package/dist/media-center/media-center/media-center-view.svelte +11 -3
  75. package/dist/media-center/media-center/media-center-view.svelte.d.ts +2 -0
  76. package/dist/media-center/media-center/menu/category-following-wrapper.svelte.d.ts +1 -1
  77. package/dist/media-center/media-center/menu/menu.svelte +15 -14
  78. package/dist/media-center/media-center/menu/popular-streams-panel-handler.svelte.d.ts +3 -3
  79. package/dist/media-center/media-center/menu/popular-streams-panel-handler.svelte.js +4 -4
  80. package/dist/media-center/media-center/moments/cmp.moments-circle.svelte +22 -9
  81. package/dist/media-center/media-center/moments/index.d.ts +1 -0
  82. package/dist/media-center/media-center/moments/index.js +1 -0
  83. package/dist/media-center/media-center/moments/moments-feed-handler.svelte.d.ts +26 -0
  84. package/dist/media-center/media-center/moments/moments-feed-handler.svelte.js +49 -0
  85. package/dist/media-center/media-center/moments/moments-state.svelte.d.ts +20 -0
  86. package/dist/media-center/media-center/moments/moments-state.svelte.js +82 -0
  87. package/dist/media-center/media-center/streams-in-category/streams-in-category-panel-handler.svelte.d.ts +3 -3
  88. package/dist/media-center/media-center/streams-in-category/streams-in-category-panel-handler.svelte.js +4 -4
  89. package/dist/media-center/media-center/types.d.ts +3 -3
  90. package/dist/media-center/membership/index.d.ts +1 -0
  91. package/dist/media-center/membership/index.js +1 -0
  92. package/dist/media-center/membership/mock-membership-handler.svelte.d.ts +10 -0
  93. package/dist/media-center/membership/mock-membership-handler.svelte.js +21 -0
  94. package/dist/media-center/membership/types.d.ts +10 -0
  95. package/dist/media-center/membership/types.js +1 -0
  96. package/dist/media-center/navigation/index.d.ts +2 -0
  97. package/dist/media-center/navigation/index.js +1 -0
  98. package/dist/media-center/navigation/media-center-state.d.ts +19 -0
  99. package/dist/media-center/navigation/media-center-state.js +1 -0
  100. package/dist/media-center/navigation/mock-navigation-handler.svelte.d.ts +6 -0
  101. package/dist/media-center/navigation/mock-navigation-handler.svelte.js +6 -0
  102. package/dist/media-center/navigation/types.d.ts +5 -0
  103. package/dist/media-center/navigation/types.js +1 -0
  104. package/dist/media-page/cmp.media-page.svelte +10 -4
  105. package/dist/media-page/cmp.media-page.svelte.d.ts +6 -5
  106. package/dist/media-page/index.d.ts +40 -58
  107. package/dist/media-page/index.js +129 -16
  108. package/dist/posts/posts-player/index.d.ts +31 -33
  109. package/dist/posts/posts-player/index.js +90 -35
  110. package/dist/posts/posts-player/posts-player-view.svelte +1 -1
  111. package/dist/posts/posts-player/types.d.ts +2 -1
  112. package/dist/streams/layout/styles-transformer.d.ts +1 -1
  113. package/dist/streams/streams-player/index.d.ts +17 -83
  114. package/dist/streams/streams-player/index.js +84 -64
  115. package/dist/streams/streams-player/streams-player-buffer.svelte.js +2 -1
  116. package/dist/streams/streams-player/streams-player-view.svelte +1 -1
  117. package/dist/streams/streams-player/types.d.ts +3 -1
  118. package/dist/ui/button/cmp.options-button.svelte +123 -0
  119. package/dist/ui/button/cmp.options-button.svelte.d.ts +20 -0
  120. package/dist/ui/button/index.d.ts +1 -0
  121. package/dist/ui/button/index.js +1 -0
  122. package/dist/ui/button/resources/button-theme.svelte +16 -2
  123. package/dist/ui/player/colors/index.d.ts +1 -1
  124. package/dist/ui/player/colors/index.js +1 -1
  125. package/dist/ui/player/colors/player-colors.d.ts +14 -1
  126. package/dist/ui/player/colors/player-colors.js +24 -1
  127. package/dist/ui/player/providers/default-chunks-player-buffer.svelte.d.ts +1 -0
  128. package/dist/ui/player/providers/default-chunks-player-buffer.svelte.js +7 -1
  129. package/dist/ui/player/providers/default-feed-player-buffer.svelte.d.ts +1 -0
  130. package/dist/ui/player/providers/default-feed-player-buffer.svelte.js +7 -1
  131. package/dist/ui/player/providers/types.d.ts +3 -1
  132. package/dist/ui/shadow-dom/cmp.shadow-root.svelte +6 -4
  133. package/dist/ui/shadow-dom/colors.scss +6 -4
  134. package/package.json +5 -1
  135. package/dist/content-player/content-player-settings.d.ts +0 -12
  136. package/dist/content-player/content-player-settings.js +0 -23
  137. package/dist/media-center/config/internal-media-center-config.d.ts +0 -14
  138. package/dist/media-center/media-center/discover/discover-header-localization.d.ts +0 -6
  139. package/dist/media-center/media-center/discover/discover-header-localization.js +0 -15
  140. package/dist/posts/handlers/index.d.ts +0 -1
  141. package/dist/posts/handlers/index.js +0 -1
  142. package/dist/short-videos/data-providers/index.d.ts +0 -1
  143. package/dist/short-videos/data-providers/index.js +0 -1
  144. /package/dist/{media-center/config → external-api/data-providers}/internal-media-center-analytics-handler.d.ts +0 -0
  145. /package/dist/{media-center/config → external-api/data-providers}/internal-media-center-analytics-handler.js +0 -0
  146. /package/dist/{posts/handlers → external-api/data-providers}/internal-post-analytics-handler.js +0 -0
  147. /package/dist/{short-videos → external-api}/data-providers/internal-short-video-player-items-provider.d.ts +0 -0
  148. /package/dist/{streams/streams-player → external-api/data-providers}/internal-stream-analytics-handler.js +0 -0
  149. /package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/index.d.ts +0 -0
  150. /package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/index.js +0 -0
  151. /package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/operations.generated.js +0 -0
  152. /package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/operations.graphql +0 -0
  153. /package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/index.d.ts +0 -0
  154. /package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/index.js +0 -0
  155. /package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/operations.generated.js +0 -0
  156. /package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/operations.graphql +0 -0
  157. /package/dist/media-center/media-center/{header-footer → footer}/media-center-footer.svelte +0 -0
  158. /package/dist/media-center/media-center/{header-footer → footer}/media-center-footer.svelte.d.ts +0 -0
  159. /package/dist/media-center/media-center/{header-footer → header}/media-center-header-localization.d.ts +0 -0
  160. /package/dist/media-center/media-center/{header-footer → header}/media-center-header-localization.js +0 -0
  161. /package/dist/media-center/media-center/{header-footer → header}/media-center-header-mobile.svelte +0 -0
  162. /package/dist/media-center/media-center/{header-footer → header}/media-center-header-mobile.svelte.d.ts +0 -0
@@ -1,43 +1,53 @@
1
1
  import type { Locale } from '../../core/locale';
2
- import { type IMediaCenterConfig } from '../../media-center/config/types';
3
- export type { IMediaCenterConfig };
2
+ import { type IMediaCenterDataProvider } from '../../media-center/config/types';
3
+ export type { IMediaCenterDataProvider };
4
4
  /**
5
5
  * Opens the short videos player modal.
6
6
  *
7
+ * Uses an internal data provider configured by a list of short-video IDs,
8
+ * GraphQL parameters and optional media page configuration.
9
+ *
7
10
  * @param init Configuration options.
8
11
  *
9
- * IDs mode (overload 2)
12
+ * Required
10
13
  * @param {string[]} init.ids
11
14
  * List of short-video IDs to display.
12
15
  * @param {string} init.initiator
13
16
  * Identifier of the initiator (used for tracking/analytics and GraphQL).
17
+ *
18
+ * Optional
14
19
  * @param {string} [init.graphqlOrigin]
15
20
  * Optional GraphQL origin (base URL). If omitted, the default origin is determined internally.
16
21
  * @param {string} [init.initialId]
17
22
  * ID of the video to open first (optional).
18
23
  * @param {string} [init.mediaPageId]
19
24
  * Optional media page ID used to construct an internal media-center config.
25
+ * If provided, the short videos player will be opened inside a media page modal.
20
26
  *
21
27
  * Player settings
22
- * @param {IPostSocialInteractionsHandler} [init.socialInteractionsHandler]
23
- * Handler for social interactions (like, share, etc.).
24
- * @param [init.playerSettings]
28
+ * @param {Object} [init.playerSettings]
25
29
  * Player UI and behavior settings.
26
30
  *
27
- * Fields of ContentPlayerSettings:
31
+ * Fields of playerSettings:
32
+ * - {boolean} [disableBackground]
33
+ * If true, hides the player's background image.
28
34
  * - {boolean} [hideCloseButton]
29
35
  * If true, hides the close button.
30
36
  * - {Locale} [locale='en']
31
37
  * Localization for the player UI. Supported values: 'en' | 'no'.
32
38
  * If omitted, the default locale 'en' is used.
39
+ * - {boolean} [showStreamsCloudWatermark]
40
+ * If true, shows the StreamsCloud watermark.
41
+ * - {'light' | 'dark'} [theme]
42
+ * Optional theme for the player UI.
33
43
  *
34
44
  * Events
35
- * @param {{ playerClosed?: () => void; videoActivated?: (id: string) => void }} [init.on]
45
+ * @param {{ playerClosed?: () => void; postActivated?: (id: string) => void }} [init.on]
36
46
  * Optional event handlers.
37
47
  * @param {() => void} [init.on.playerClosed]
38
48
  * Called after the player is fully closed (after unmount and removal from the DOM).
39
- * @param {(id: string) => void} [init.on.videoActivated]
40
- * Called when a video becomes active (receives the video's id).
49
+ * @param {(id: string) => void} [init.on.postActivated]
50
+ * Called when a short video becomes active (receives the video's id).
41
51
  *
42
52
  * @returns {void}
43
53
  *
@@ -57,6 +67,7 @@ export type { IMediaCenterConfig };
57
67
  * disableBackground: false,
58
68
  * hideCloseButton: false,
59
69
  * showStreamsCloudWatermark: true,
70
+ * theme: 'dark',
60
71
  * },
61
72
  * on: {
62
73
  * playerClosed: () => console.log('Player closed'),
@@ -71,10 +82,14 @@ export declare function openShortVideosPlayer(init: {
71
82
  initialId?: string;
72
83
  mediaPageId?: string;
73
84
  playerSettings?: {
74
- hideCloseButton?: boolean;
85
+ disableBackground?: boolean;
75
86
  locale?: Locale;
87
+ showStreamsCloudWatermark?: boolean;
88
+ hideCloseButton?: boolean;
89
+ theme?: 'light' | 'dark';
76
90
  };
77
91
  on?: {
78
92
  playerClosed?: () => void;
93
+ postActivated?: (id: string) => void;
79
94
  };
80
- }): Promise<void>;
95
+ }): void;
@@ -1,45 +1,54 @@
1
- import { InternalMediaCenterConfig } from '../../media-center/config/internal-media-center-config';
1
+ import { InternalMediaCenterDataProvider, InternalShortVideoPlayerItemsProvider, InternalPostAnalyticsHandler } from '../data-providers';
2
2
  import {} from '../../media-center/config/types';
3
- import { InternalPostAnalyticsHandler } from '../../posts/handlers';
3
+ import { openMediaPageModalWithInitialPostsProvider } from '../../media-page';
4
4
  import { openPostsPlayer } from '../../posts/posts-player';
5
- import { InternalShortVideoPlayerItemsProvider } from '../data-providers';
6
5
  /**
7
6
  * Opens the short videos player modal.
8
7
  *
8
+ * Uses an internal data provider configured by a list of short-video IDs,
9
+ * GraphQL parameters and optional media page configuration.
10
+ *
9
11
  * @param init Configuration options.
10
12
  *
11
- * IDs mode (overload 2)
13
+ * Required
12
14
  * @param {string[]} init.ids
13
15
  * List of short-video IDs to display.
14
16
  * @param {string} init.initiator
15
17
  * Identifier of the initiator (used for tracking/analytics and GraphQL).
18
+ *
19
+ * Optional
16
20
  * @param {string} [init.graphqlOrigin]
17
21
  * Optional GraphQL origin (base URL). If omitted, the default origin is determined internally.
18
22
  * @param {string} [init.initialId]
19
23
  * ID of the video to open first (optional).
20
24
  * @param {string} [init.mediaPageId]
21
25
  * Optional media page ID used to construct an internal media-center config.
26
+ * If provided, the short videos player will be opened inside a media page modal.
22
27
  *
23
28
  * Player settings
24
- * @param {IPostSocialInteractionsHandler} [init.socialInteractionsHandler]
25
- * Handler for social interactions (like, share, etc.).
26
- * @param [init.playerSettings]
29
+ * @param {Object} [init.playerSettings]
27
30
  * Player UI and behavior settings.
28
31
  *
29
- * Fields of ContentPlayerSettings:
32
+ * Fields of playerSettings:
33
+ * - {boolean} [disableBackground]
34
+ * If true, hides the player's background image.
30
35
  * - {boolean} [hideCloseButton]
31
36
  * If true, hides the close button.
32
37
  * - {Locale} [locale='en']
33
38
  * Localization for the player UI. Supported values: 'en' | 'no'.
34
39
  * If omitted, the default locale 'en' is used.
40
+ * - {boolean} [showStreamsCloudWatermark]
41
+ * If true, shows the StreamsCloud watermark.
42
+ * - {'light' | 'dark'} [theme]
43
+ * Optional theme for the player UI.
35
44
  *
36
45
  * Events
37
- * @param {{ playerClosed?: () => void; videoActivated?: (id: string) => void }} [init.on]
46
+ * @param {{ playerClosed?: () => void; postActivated?: (id: string) => void }} [init.on]
38
47
  * Optional event handlers.
39
48
  * @param {() => void} [init.on.playerClosed]
40
49
  * Called after the player is fully closed (after unmount and removal from the DOM).
41
- * @param {(id: string) => void} [init.on.videoActivated]
42
- * Called when a video becomes active (receives the video's id).
50
+ * @param {(id: string) => void} [init.on.postActivated]
51
+ * Called when a short video becomes active (receives the video's id).
43
52
  *
44
53
  * @returns {void}
45
54
  *
@@ -59,6 +68,7 @@ import { InternalShortVideoPlayerItemsProvider } from '../data-providers';
59
68
  * disableBackground: false,
60
69
  * hideCloseButton: false,
61
70
  * showStreamsCloudWatermark: true,
71
+ * theme: 'dark',
62
72
  * },
63
73
  * on: {
64
74
  * playerClosed: () => console.log('Player closed'),
@@ -66,32 +76,29 @@ import { InternalShortVideoPlayerItemsProvider } from '../data-providers';
66
76
  * });
67
77
  * ```
68
78
  */
69
- export async function openShortVideosPlayer(init) {
79
+ export function openShortVideosPlayer(init) {
70
80
  const { ids, graphqlOrigin, initialId, initiator, playerSettings, on } = init;
71
81
  const dataProvider = new InternalShortVideoPlayerItemsProvider({ ids, graphqlOrigin, initialId, initiator });
72
- const mediaCenterConfig = init.mediaPageId ? new InternalMediaCenterConfig({ mediaPageId: init.mediaPageId, graphqlOrigin, initiator }) : undefined;
82
+ const mediaCenterDataProvider = init.mediaPageId
83
+ ? new InternalMediaCenterDataProvider({ mediaPageId: init.mediaPageId, graphqlOrigin, initiator })
84
+ : undefined;
73
85
  const analyticsHandler = new InternalPostAnalyticsHandler(graphqlOrigin);
74
- if (mediaCenterConfig) {
75
- openPostsPlayer({
76
- postsProvider: dataProvider,
77
- mediaCenterConfig,
78
- playerSettings: {
79
- hideCloseButton: playerSettings?.hideCloseButton,
80
- locale: playerSettings?.locale,
81
- showStreamsCloudWatermark: true
82
- },
83
- on
86
+ if (mediaCenterDataProvider) {
87
+ openMediaPageModalWithInitialPostsProvider({
88
+ dataProvider: dataProvider,
89
+ mediaCenterDataProvider,
90
+ viewerSettings: playerSettings,
91
+ on: {
92
+ closed: on?.playerClosed,
93
+ postActivated: on?.postActivated
94
+ }
84
95
  });
85
96
  }
86
97
  else {
87
98
  openPostsPlayer({
88
99
  postsProvider: dataProvider,
89
100
  analyticsHandler,
90
- playerSettings: {
91
- hideCloseButton: playerSettings?.hideCloseButton,
92
- locale: playerSettings?.locale,
93
- showStreamsCloudWatermark: true
94
- },
101
+ playerSettings: playerSettings,
95
102
  on
96
103
  });
97
104
  }
@@ -0,0 +1,105 @@
1
+ import type { Locale } from '../../core/locale';
2
+ import { type IMediaCenterDataProvider } from '../../media-center/config/types';
3
+ import type { StreamPageViewerModel } from '../../streams/stream-page-viewer/types';
4
+ import type { IStreamAnalyticsHandler, IStreamsPlayerDataProvider, StreamAmplificationParameters, StreamPlayerModel } from '../../streams/streams-player/types';
5
+ export { type StreamPlayerModel, type StreamPageViewerModel };
6
+ export type { IStreamsPlayerDataProvider, IStreamAnalyticsHandler, IMediaCenterDataProvider };
7
+ /**
8
+ * Opens the streams player modal.
9
+ *
10
+ * Uses an internal data provider configured by a list of stream IDs,
11
+ * GraphQL parameters and optional media page configuration.
12
+ *
13
+ * @param init Configuration options.
14
+ *
15
+ * Required
16
+ * @param {string[]} init.ids
17
+ * List of stream IDs to display.
18
+ * @param {string} init.initiator
19
+ * Initiator identifier (used for tracking/analytics and GraphQL).
20
+ *
21
+ * Optional
22
+ * @param {string} [init.graphqlOrigin]
23
+ * Optional GraphQL origin (base URL). If omitted, the default origin is determined internally.
24
+ * @param {string} [init.initialId]
25
+ * ID of the stream to open first (optional).
26
+ * @param {string} [init.mediaPageId]
27
+ * Optional media page ID used to construct an internal media-center config.
28
+ * If provided, the streams player will be opened inside a media page modal.
29
+ * @param {StreamAmplificationParameters} [init.amplificationParameters]
30
+ * Optional parameters to configure amplification behavior.
31
+ * @param {Object} [init.playerSettings]
32
+ * Player UI and behavior settings.
33
+ *
34
+ * Fields of playerSettings:
35
+ * - {boolean} [disableBackground]
36
+ * If true, hides the player's background image.
37
+ * - {boolean} [hideCloseButton]
38
+ * If true, hides the close button.
39
+ * - {Locale} [locale='en']
40
+ * Localization for the player UI. Supported values: 'en' | 'no'.
41
+ * If omitted, the default locale 'en' is used.
42
+ * - {boolean} [showStreamsCloudWatermark]
43
+ * If true, shows the StreamsCloud watermark.
44
+ * - {'light' | 'dark'} [theme]
45
+ * Optional theme for the player UI.
46
+ *
47
+ * Events
48
+ * @param {{ streamActivated?: (data: { title: string; image: string | null }) => void; playerClosed?: () => void }} [init.on]
49
+ * Optional event handlers.
50
+ * @param {(data: { title: string; image: string | null }) => void} [init.on.streamActivated]
51
+ * Called when the stream becomes active. Receives a subset of data with title and image.
52
+ * @param {() => void} [init.on.playerClosed]
53
+ * Called after the player is fully closed (after unmount and removal from the DOM).
54
+ *
55
+ * @returns {void}
56
+ *
57
+ * @example
58
+ * ```ts
59
+ * import { openStreamsPlayer } from '@streamscloud/embeddable/stream-player';
60
+ *
61
+ * openStreamsPlayer({
62
+ * ids: ['stream_123'],
63
+ * initiator: 'marketing-campaign',
64
+ * graphqlOrigin: 'https://api.example.com',
65
+ * mediaPageId: 'media-page-123',
66
+ * amplificationParameters: {
67
+ * // ...your amplification parameters
68
+ * },
69
+ * playerSettings: {
70
+ * // Locale defaults to 'en'; set 'no' to switch to Norwegian:
71
+ * locale: 'no',
72
+ * disableBackground: false,
73
+ * hideCloseButton: false,
74
+ * showStreamsCloudWatermark: true,
75
+ * theme: 'dark',
76
+ * },
77
+ * on: {
78
+ * streamActivated: ({ title, image }) => console.log('Stream active:', title, image),
79
+ * playerClosed: () => console.log('Player closed'),
80
+ * },
81
+ * });
82
+ * ```
83
+ */
84
+ export declare function openStreamsPlayer(init: {
85
+ ids: string[];
86
+ initiator: string;
87
+ graphqlOrigin?: string;
88
+ initialId?: string;
89
+ mediaPageId?: string;
90
+ amplificationParameters?: StreamAmplificationParameters;
91
+ playerSettings?: {
92
+ disableBackground?: boolean;
93
+ locale?: Locale;
94
+ showStreamsCloudWatermark?: boolean;
95
+ hideCloseButton?: boolean;
96
+ theme?: 'light' | 'dark';
97
+ };
98
+ on?: {
99
+ streamActivated?: (data: {
100
+ title: string;
101
+ image: string | null;
102
+ }) => void;
103
+ playerClosed?: () => void;
104
+ };
105
+ }): void;
@@ -0,0 +1,110 @@
1
+ import { InternalMediaCenterDataProvider, InternalStreamsPlayerDataProvider, InternalStreamAnalyticsHandler } from '../data-providers';
2
+ import {} from '../../media-center/config/types';
3
+ import { openMediaPageModalWithInitialStreamsProvider } from '../../media-page';
4
+ import { openStreamsPlayer as openStreamsPlayerInternal } from '../../streams/streams-player';
5
+ export {};
6
+ /**
7
+ * Opens the streams player modal.
8
+ *
9
+ * Uses an internal data provider configured by a list of stream IDs,
10
+ * GraphQL parameters and optional media page configuration.
11
+ *
12
+ * @param init Configuration options.
13
+ *
14
+ * Required
15
+ * @param {string[]} init.ids
16
+ * List of stream IDs to display.
17
+ * @param {string} init.initiator
18
+ * Initiator identifier (used for tracking/analytics and GraphQL).
19
+ *
20
+ * Optional
21
+ * @param {string} [init.graphqlOrigin]
22
+ * Optional GraphQL origin (base URL). If omitted, the default origin is determined internally.
23
+ * @param {string} [init.initialId]
24
+ * ID of the stream to open first (optional).
25
+ * @param {string} [init.mediaPageId]
26
+ * Optional media page ID used to construct an internal media-center config.
27
+ * If provided, the streams player will be opened inside a media page modal.
28
+ * @param {StreamAmplificationParameters} [init.amplificationParameters]
29
+ * Optional parameters to configure amplification behavior.
30
+ * @param {Object} [init.playerSettings]
31
+ * Player UI and behavior settings.
32
+ *
33
+ * Fields of playerSettings:
34
+ * - {boolean} [disableBackground]
35
+ * If true, hides the player's background image.
36
+ * - {boolean} [hideCloseButton]
37
+ * If true, hides the close button.
38
+ * - {Locale} [locale='en']
39
+ * Localization for the player UI. Supported values: 'en' | 'no'.
40
+ * If omitted, the default locale 'en' is used.
41
+ * - {boolean} [showStreamsCloudWatermark]
42
+ * If true, shows the StreamsCloud watermark.
43
+ * - {'light' | 'dark'} [theme]
44
+ * Optional theme for the player UI.
45
+ *
46
+ * Events
47
+ * @param {{ streamActivated?: (data: { title: string; image: string | null }) => void; playerClosed?: () => void }} [init.on]
48
+ * Optional event handlers.
49
+ * @param {(data: { title: string; image: string | null }) => void} [init.on.streamActivated]
50
+ * Called when the stream becomes active. Receives a subset of data with title and image.
51
+ * @param {() => void} [init.on.playerClosed]
52
+ * Called after the player is fully closed (after unmount and removal from the DOM).
53
+ *
54
+ * @returns {void}
55
+ *
56
+ * @example
57
+ * ```ts
58
+ * import { openStreamsPlayer } from '@streamscloud/embeddable/stream-player';
59
+ *
60
+ * openStreamsPlayer({
61
+ * ids: ['stream_123'],
62
+ * initiator: 'marketing-campaign',
63
+ * graphqlOrigin: 'https://api.example.com',
64
+ * mediaPageId: 'media-page-123',
65
+ * amplificationParameters: {
66
+ * // ...your amplification parameters
67
+ * },
68
+ * playerSettings: {
69
+ * // Locale defaults to 'en'; set 'no' to switch to Norwegian:
70
+ * locale: 'no',
71
+ * disableBackground: false,
72
+ * hideCloseButton: false,
73
+ * showStreamsCloudWatermark: true,
74
+ * theme: 'dark',
75
+ * },
76
+ * on: {
77
+ * streamActivated: ({ title, image }) => console.log('Stream active:', title, image),
78
+ * playerClosed: () => console.log('Player closed'),
79
+ * },
80
+ * });
81
+ * ```
82
+ */
83
+ export function openStreamsPlayer(init) {
84
+ const { ids, initialId, graphqlOrigin, initiator, amplificationParameters, playerSettings, on } = init;
85
+ const dataProvider = new InternalStreamsPlayerDataProvider({ ids, initialId, graphqlOrigin, initiator });
86
+ const mediaCenterDataProvider = init.mediaPageId
87
+ ? new InternalMediaCenterDataProvider({ mediaPageId: init.mediaPageId, graphqlOrigin, initiator })
88
+ : undefined;
89
+ const analyticsHandler = new InternalStreamAnalyticsHandler(graphqlOrigin);
90
+ if (mediaCenterDataProvider) {
91
+ openMediaPageModalWithInitialStreamsProvider({
92
+ dataProvider: dataProvider,
93
+ mediaCenterDataProvider,
94
+ viewerSettings: playerSettings,
95
+ on: {
96
+ closed: on?.playerClosed,
97
+ streamActivated: on?.streamActivated
98
+ }
99
+ });
100
+ }
101
+ else {
102
+ openStreamsPlayerInternal({
103
+ dataProvider,
104
+ analyticsHandler,
105
+ amplificationParameters,
106
+ playerSettings,
107
+ on
108
+ });
109
+ }
110
+ }
@@ -1,21 +1,29 @@
1
1
  import { PostType } from '../../core/enums';
2
+ import type { ThemeValue } from '../../core/theme';
2
3
  import type { IContentCategoryFollowingHandler } from '../categories-following';
4
+ import type { IMediaCenterMembershipHandler } from '../membership';
5
+ import type { IMediaCenterNavigationHandler } from '../navigation';
3
6
  import type { IPostAnalyticsHandler, PostPlayerModel } from '../../posts/posts-player/types';
4
7
  import type { IPostSocialInteractionsHandler } from '../../posts/social-interactions';
5
8
  import type { StreamPageViewerModel } from '../../streams/stream-page-viewer/types';
6
9
  import type { IStreamAnalyticsHandler, StreamPlayerModel } from '../../streams/streams-player/types';
7
- export interface IMediaCenterConfig {
8
- getConfig: () => Promise<MediaCenterConfigModel | null>;
10
+ import type { PlayerColors } from '../../ui/player/colors';
11
+ export interface IMediaCenterDataProvider {
12
+ model: MediaCenterModel | null;
13
+ fetchModel: () => Promise<MediaCenterModel | null>;
9
14
  handlers?: {
10
15
  analyticsHandler?: IPostAnalyticsHandler & IStreamAnalyticsHandler;
11
- socialInteractionsHandler?: IPostSocialInteractionsHandler;
12
16
  categoriesFollowingHandler?: IContentCategoryFollowingHandler;
17
+ membershipHandler?: IMediaCenterMembershipHandler;
18
+ navigationHandler?: IMediaCenterNavigationHandler;
19
+ socialInteractionsHandler?: IPostSocialInteractionsHandler;
13
20
  };
14
21
  postsPlayer: {
15
22
  getPostsCursor: (input: {
16
23
  filter: {
17
24
  types: PostType[];
18
25
  categoryId?: string;
26
+ includeIds?: string[];
19
27
  excludeIds?: string[];
20
28
  };
21
29
  limit: number;
@@ -43,7 +51,22 @@ export interface IMediaCenterConfig {
43
51
  }>;
44
52
  };
45
53
  }
46
- export type MediaCenterConfigModel = {
54
+ export type MediaCenterModel = {
55
+ id: string;
56
+ handle: string;
57
+ name: string;
58
+ description: string | null;
59
+ image: string | null;
60
+ logo: string | null;
61
+ banner: string | null;
62
+ moments: {
63
+ id: string;
64
+ cover: string;
65
+ isSeen: boolean;
66
+ }[];
67
+ communityFeatures: {
68
+ membersCount: number;
69
+ } | null;
47
70
  contentCategories: {
48
71
  id: string;
49
72
  name: string;
@@ -58,27 +81,5 @@ export type MediaCenterConfigModel = {
58
81
  backgroundColor: string;
59
82
  } | null;
60
83
  }[];
61
- targetData: MediaCenterTargetDataModel;
62
- playerColors: {
63
- brand: string | null;
64
- button: string | null;
65
- buttonInactive: string | null;
66
- cardButton: string | null;
67
- cardBackground: string | null;
68
- menuBackground: string | null;
69
- playerBackground: string | null;
70
- price: string | null;
71
- salePrice: string | null;
72
- sidebarBackground: string | null;
73
- } | null;
74
- };
75
- export type MediaCenterTargetDataModel = {
76
- id: string;
77
- name: string;
78
- image: string | null;
79
- membersCount: number;
80
- logo: string | null;
81
- handle: string;
82
- description: string | null;
83
- banner: string | null;
84
+ playerColors: Record<ThemeValue, PlayerColors>;
84
85
  };
@@ -1,2 +1,4 @@
1
- export type { IMediaCenterConfig } from './config/types';
1
+ export type { IMediaCenterDataProvider } from './config/types';
2
2
  export type { IContentCategoryFollowingHandler } from './categories-following/types';
3
+ export type { IMediaCenterMembershipHandler } from './membership';
4
+ export type { IMediaCenterNavigationHandler, MediaCenterState } from './navigation';
@@ -6,9 +6,9 @@ import { ShadowRoot } from '../../ui/shadow-dom';
6
6
  import { MediaCenterContext } from './media-center-context.svelte';
7
7
  import { default as MediaCenterView } from './media-center-view.svelte';
8
8
  import { untrack } from 'svelte';
9
- let { config, modeProps, settings, closeOrchestrator } = $props();
9
+ let { dataProvider, modeProps, settings, closeOrchestrator, dynamicActions } = $props();
10
10
  const context = new MediaCenterContext({
11
- config,
11
+ dataProvider,
12
12
  closeOrchestrator,
13
13
  settings,
14
14
  on: {
@@ -26,7 +26,7 @@ const context = new MediaCenterContext({
26
26
  onStreamActivated: modeProps.props.onStreamActivated
27
27
  });
28
28
  break;
29
- case 'discover':
29
+ case 'default':
30
30
  instance.activateDiscover({ categoryId: null });
31
31
  break;
32
32
  default:
@@ -54,6 +54,6 @@ $effect(() => {
54
54
  Not initialized placeholder
55
55
  {:else}
56
56
  <ShadowRoot {...context.backgroundWrapperProps}>
57
- <MediaCenterView context={context} />
57
+ <MediaCenterView context={context} dynamicActions={dynamicActions} />
58
58
  </ShadowRoot>
59
59
  {/if}
@@ -1,11 +1,14 @@
1
- import type { IMediaCenterConfig } from '../config/types';
1
+ import type { IMediaCenterDataProvider } from '../config/types';
2
2
  import { type ICloseOrchestrator } from '../../ui/player/close-orchestrator';
3
- import type { MediaCenterSettings, MediaCenterModeProps } from './types';
3
+ import type { MediaCenterSettings } from './media-center-settings.svelte';
4
+ import type { MediaCenterModeProps } from './types';
5
+ import { type Snippet } from 'svelte';
4
6
  type Props = {
5
- config: IMediaCenterConfig;
6
- settings?: MediaCenterSettings;
7
+ dataProvider: IMediaCenterDataProvider;
8
+ settings: MediaCenterSettings;
7
9
  modeProps: MediaCenterModeProps;
8
10
  closeOrchestrator: ICloseOrchestrator;
11
+ dynamicActions?: Snippet;
9
12
  };
10
13
  declare const Cmp: import("svelte").Component<Props, {}, "">;
11
14
  type Cmp = ReturnType<typeof Cmp>;
@@ -0,0 +1,8 @@
1
+ import { type Locale } from '../../../core/locale';
2
+ export declare class CommunityFeaturesLocalization {
3
+ membersLabel: (count: number) => string;
4
+ memberButtonLabel: string;
5
+ joinButtonLabel: string;
6
+ leaveButtonLabel: string;
7
+ constructor(locale: Locale);
8
+ }
@@ -0,0 +1,31 @@
1
+ import {} from '../../../core/locale';
2
+ export class CommunityFeaturesLocalization {
3
+ membersLabel;
4
+ memberButtonLabel;
5
+ joinButtonLabel;
6
+ leaveButtonLabel;
7
+ constructor(locale) {
8
+ this.membersLabel = loc.membersLabel[locale];
9
+ this.memberButtonLabel = loc.memberButtonLabel[locale];
10
+ this.joinButtonLabel = loc.joinButtonLabel[locale];
11
+ this.leaveButtonLabel = loc.leaveButtonLabel[locale];
12
+ }
13
+ }
14
+ const loc = {
15
+ membersLabel: {
16
+ en: (count) => (count === 1 ? `Member` : `Members`),
17
+ no: (count) => (count === 1 ? `Medlem` : `Medlemmer`)
18
+ },
19
+ memberButtonLabel: {
20
+ en: 'Member',
21
+ no: 'Medlem'
22
+ },
23
+ joinButtonLabel: {
24
+ en: 'Join',
25
+ no: 'Bli med'
26
+ },
27
+ leaveButtonLabel: {
28
+ en: 'Leave',
29
+ no: 'Forlat'
30
+ }
31
+ };