@streamscloud/embeddable 12.2.0 → 13.0.1

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 +138 -31
  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,36 @@
1
1
  import type { Locale } from '../core/locale';
2
- import { type IMediaCenterConfig } from '../media-center/config/types';
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';
3
7
  export { default as MediaPage } from './cmp.media-page.svelte';
4
- export type { IMediaCenterConfig };
5
- export { mapToPostPlayerModel } from '../posts/data-loaders/mapper';
8
+ export type { IMediaCenterDataProvider };
6
9
  /**
7
10
  * Opens the media page modal.
8
11
  *
9
- * Two overloads (mutually exclusive; enforced by TypeScript):
10
- * - Config mode: openMediaPageModal({ mediaCenterConfig, viewerSettings?, on? })
11
- * - Internal config mode: openMediaPageModal({ id, initiator, graphqlOrigin?, viewerSettings?, on? })
12
- *
13
12
  * @param init Configuration options.
14
13
  *
15
- * Config mode (overload 1)
16
- * @param {IMediaCenterConfig} init.mediaCenterConfig
14
+ * Config mode
15
+ * @param {IMediaCenterDataProvider} init.dataProvider
17
16
  * Configuration for the media center.
18
17
  *
19
- * Internal config mode (overload 2)
20
- * @param {string} init.id
21
- * Media page ID, used to construct an internal media-center config.
22
- * @param {string} init.initiator
23
- * Initiator identifier (used for tracking/analytics and GraphQL).
24
- * @param {string} [init.graphqlOrigin]
25
- * Optional GraphQL origin (base URL). If omitted, the default origin is determined internally.
26
- *
27
18
  * Common (optional)
28
- * @param {MediaPageViewerSettings} [init.viewerSettings]
19
+ * @param {Object} [init.viewerSettings]
29
20
  * Viewer UI and behavior settings.
30
21
  *
31
- * Fields of MediaPageViewerSettings:
32
- * - {boolean} [disableBackground]
33
- * If true , hides the viewer background image.
34
- * - {Locale} [locale='en']
22
+ * Fields of `viewerSettings`:
23
+ * - {boolean} [viewerSettings.disableBackground]
24
+ * If true, hides the viewer background image.
25
+ * - {Locale} [viewerSettings.locale]
35
26
  * Localization for the viewer UI. Supported values: 'en' | 'no'.
36
27
  * If omitted, the default locale 'en' is used.
37
- * - {boolean} [showStreamsCloudWatermark]
28
+ * - {boolean} [viewerSettings.showStreamsCloudWatermark]
38
29
  * If true, shows the StreamsCloud watermark.
39
- * - {boolean} [hideCloseButton]
30
+ * - {boolean} [viewerSettings.hideCloseButton]
40
31
  * If true, hides the close button.
32
+ * - {'light' | 'dark'} [viewerSettings.theme]
33
+ * Optional theme for the viewer UI.
41
34
  *
42
35
  * Events
43
36
  * @param {{ closed?: () => void }} [init.on]
@@ -45,52 +38,28 @@ export { mapToPostPlayerModel } from '../posts/data-loaders/mapper';
45
38
  * @param {() => void} [init.on.closed]
46
39
  * Called after the modal is fully closed (after unmount and removal from the DOM).
47
40
  *
48
- * Notes
49
- * - If neither mediaCenterConfig nor id is specified, a warning is shown and the modal is not opened.
50
- *
51
41
  * @returns {void}
52
42
  *
53
43
  * @example <caption>Config mode</caption>
54
44
  * ```ts
55
45
  * import {
56
46
  * openMediaPageModal,
57
- * type IMediaCenterConfig,
47
+ * type IMediaCenterDataProvider
58
48
  * } from '@streamscloud/embeddable/media-page';
59
49
  *
60
- * const mediaCenterConfig: IMediaCenterConfig = {
50
+ * const dataProvider: IMediaDataProvider= {
61
51
  * // ...your media center configuration
62
52
  * };
63
53
  *
64
54
  * openMediaPageModal({
65
- * mediaCenterConfig,
55
+ * dataProvider,
66
56
  * viewerSettings: {
67
- * // Locale defaults to 'en'; set 'no' to switch to Norwegian:
57
+ * // Example: switch to Norwegian (if supported by your Locale type)
68
58
  * locale: 'no',
69
59
  * disableBackground: false,
70
60
  * hideCloseButton: false,
71
61
  * showStreamsCloudWatermark: true,
72
- * },
73
- * on: {
74
- * closed: () => console.log('Media page modal closed'),
75
- * },
76
- * });
77
- * ```
78
- *
79
-
80
-
81
- * @example <caption>Internal config mode</caption>
82
- * ```ts
83
- * import { openMediaPageModal } from '@streamscloud/embeddable/media-page';
84
- *
85
- * openMediaPageModal({
86
- * id: 'media-page-123',
87
- * initiator: 'marketing-campaign',
88
- * graphqlOrigin: 'https://api.example.com',
89
- * viewerSettings: {
90
- * locale: 'en',
91
- * disableBackground: true,
92
- * hideCloseButton: false,
93
- * showStreamsCloudWatermark: false,
62
+ * theme: 'dark',
94
63
  * },
95
64
  * on: {
96
65
  * closed: () => console.log('Media page modal closed'),
@@ -99,19 +68,32 @@ export { mapToPostPlayerModel } from '../posts/data-loaders/mapper';
99
68
  * ```
100
69
  */
101
70
  export declare function openMediaPageModal(init: {
102
- mediaCenterConfig: IMediaCenterConfig;
71
+ dataProvider: IMediaCenterDataProvider;
103
72
  viewerSettings?: MediaPageViewerSettings;
104
73
  on?: {
105
74
  closed?: () => void;
106
75
  };
107
76
  }): void;
108
- export declare function openMediaPageModal(init: {
109
- id: string;
110
- initiator: string;
111
- 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;
112
90
  viewerSettings?: MediaPageViewerSettings;
113
91
  on?: {
114
92
  closed?: () => void;
93
+ streamActivated?: (data: {
94
+ title: string;
95
+ image: string | null;
96
+ }) => void;
115
97
  };
116
98
  }): void;
117
99
  export type MediaPageViewerSettings = {
@@ -1,22 +1,72 @@
1
- import { toastrWarning } from '../core/toastr';
2
- import { InternalMediaCenterConfig } from '../media-center/config/internal-media-center-config';
3
1
  import {} from '../media-center/config/types';
4
- import { MediaCenterProxy } from '../media-center/media-center';
2
+ import { MediaCenterProxy, MediaCenterSettings } from '../media-center/media-center';
5
3
  import { CloseOrchestrator } from '../ui/player/close-orchestrator';
6
4
  import { ModalShadowHost } from '../ui/shadow-dom';
7
5
  import { mount, unmount } from 'svelte';
8
6
  export { default as MediaPage } from './cmp.media-page.svelte';
9
- export { mapToPostPlayerModel } from '../posts/data-loaders/mapper';
7
+ /**
8
+ * Opens the media page modal.
9
+ *
10
+ * @param init Configuration options.
11
+ *
12
+ * Config mode
13
+ * @param {IMediaCenterDataProvider} init.dataProvider
14
+ * Configuration for the media center.
15
+ *
16
+ * Common (optional)
17
+ * @param {Object} [init.viewerSettings]
18
+ * Viewer UI and behavior settings.
19
+ *
20
+ * Fields of `viewerSettings`:
21
+ * - {boolean} [viewerSettings.disableBackground]
22
+ * If true, hides the viewer background image.
23
+ * - {Locale} [viewerSettings.locale]
24
+ * Localization for the viewer UI. Supported values: 'en' | 'no'.
25
+ * If omitted, the default locale 'en' is used.
26
+ * - {boolean} [viewerSettings.showStreamsCloudWatermark]
27
+ * If true, shows the StreamsCloud watermark.
28
+ * - {boolean} [viewerSettings.hideCloseButton]
29
+ * If true, hides the close button.
30
+ * - {'light' | 'dark'} [viewerSettings.theme]
31
+ * Optional theme for the viewer UI.
32
+ *
33
+ * Events
34
+ * @param {{ closed?: () => void }} [init.on]
35
+ * Optional event handlers.
36
+ * @param {() => void} [init.on.closed]
37
+ * Called after the modal is fully closed (after unmount and removal from the DOM).
38
+ *
39
+ * @returns {void}
40
+ *
41
+ * @example <caption>Config mode</caption>
42
+ * ```ts
43
+ * import {
44
+ * openMediaPageModal,
45
+ * type IMediaCenterDataProvider
46
+ * } from '@streamscloud/embeddable/media-page';
47
+ *
48
+ * const dataProvider: IMediaDataProvider= {
49
+ * // ...your media center configuration
50
+ * };
51
+ *
52
+ * openMediaPageModal({
53
+ * dataProvider,
54
+ * viewerSettings: {
55
+ * // Example: switch to Norwegian (if supported by your Locale type)
56
+ * locale: 'no',
57
+ * disableBackground: false,
58
+ * hideCloseButton: false,
59
+ * showStreamsCloudWatermark: true,
60
+ * theme: 'dark',
61
+ * },
62
+ * on: {
63
+ * closed: () => console.log('Media page modal closed'),
64
+ * },
65
+ * });
66
+ * ```
67
+ */
10
68
  export function openMediaPageModal(init) {
11
- const { id, graphqlOrigin, initiator, viewerSettings, on } = init;
12
- let mediaCenterConfig = init.mediaCenterConfig;
13
- if (!mediaCenterConfig && id) {
14
- mediaCenterConfig = new InternalMediaCenterConfig({ mediaPageId: id, graphqlOrigin, initiator });
15
- }
16
- if (!mediaCenterConfig) {
17
- toastrWarning('Config is not specified.');
18
- return;
19
- }
69
+ const { dataProvider, viewerSettings, on } = init;
20
70
  const shadowHost = new ModalShadowHost();
21
71
  let mounted = null;
22
72
  const makeCloseOrchestrator = () => new CloseOrchestrator({
@@ -32,10 +82,73 @@ export function openMediaPageModal(init) {
32
82
  mounted = mount(MediaCenterProxy, {
33
83
  target: shadowHost.shadowRoot,
34
84
  props: {
35
- config: mediaCenterConfig,
36
- settings: viewerSettings,
85
+ dataProvider,
86
+ settings: new MediaCenterSettings(viewerSettings),
37
87
  modeProps: {
38
- mode: 'discover'
88
+ mode: 'default'
89
+ },
90
+ closeOrchestrator: makeCloseOrchestrator()
91
+ }
92
+ });
93
+ shadowHost.attachToBody();
94
+ }
95
+ export function openMediaPageModalWithInitialPostsProvider(init) {
96
+ const { dataProvider, mediaCenterDataProvider, viewerSettings, on } = init;
97
+ const shadowHost = new ModalShadowHost();
98
+ let mounted = null;
99
+ const makeCloseOrchestrator = () => new CloseOrchestrator({
100
+ closeFn: async () => {
101
+ await unmount(mounted);
102
+ shadowHost.remove();
103
+ if (on?.closed) {
104
+ on.closed();
105
+ }
106
+ },
107
+ canClose: !viewerSettings?.hideCloseButton
108
+ });
109
+ mounted = mount(MediaCenterProxy, {
110
+ target: shadowHost.shadowRoot,
111
+ props: {
112
+ dataProvider: mediaCenterDataProvider,
113
+ settings: new MediaCenterSettings(viewerSettings),
114
+ modeProps: {
115
+ mode: 'posts',
116
+ props: {
117
+ dataProvider,
118
+ onPostActivated: on?.postActivated
119
+ }
120
+ },
121
+ closeOrchestrator: makeCloseOrchestrator()
122
+ }
123
+ });
124
+ shadowHost.attachToBody();
125
+ }
126
+ export function openMediaPageModalWithInitialStreamsProvider(init) {
127
+ const { dataProvider, amplificationParameters, mediaCenterDataProvider, viewerSettings, on } = init;
128
+ const shadowHost = new ModalShadowHost();
129
+ let mounted = null;
130
+ const makeCloseOrchestrator = () => new CloseOrchestrator({
131
+ closeFn: async () => {
132
+ await unmount(mounted);
133
+ shadowHost.remove();
134
+ if (on?.closed) {
135
+ on.closed();
136
+ }
137
+ },
138
+ canClose: !viewerSettings?.hideCloseButton
139
+ });
140
+ mounted = mount(MediaCenterProxy, {
141
+ target: shadowHost.shadowRoot,
142
+ props: {
143
+ dataProvider: mediaCenterDataProvider,
144
+ settings: new MediaCenterSettings(viewerSettings),
145
+ modeProps: {
146
+ mode: 'streams',
147
+ props: {
148
+ dataProvider,
149
+ amplificationParameters,
150
+ onStreamActivated: on?.streamActivated
151
+ }
39
152
  },
40
153
  closeOrchestrator: makeCloseOrchestrator()
41
154
  }
@@ -1,24 +1,19 @@
1
1
  import type { Locale } from '../../core/locale';
2
- import { type IMediaCenterConfig } from '../../media-center/config/types';
2
+ import { type IMediaCenterDataProvider } from '../../media-center/config/types';
3
3
  import type { IPostSocialInteractionsHandler } from '../social-interactions';
4
4
  import { default as PostsPlayer } from './cmp.posts-player.svelte';
5
5
  import type { IPostAnalyticsHandler, PostPlayerModel } from './types';
6
6
  export { PostsPlayer, type PostPlayerModel };
7
- export type { IMediaCenterConfig, IPostAnalyticsHandler };
8
- export { mapToPostPlayerModel } from '../data-loaders/mapper';
7
+ export type { IMediaCenterDataProvider, IPostAnalyticsHandler };
9
8
  /**
10
9
  * Opens the posts player modal.
11
10
  *
12
- * @param init Configuration options.
11
+ * @param init Configuration options for the posts player.
13
12
  *
14
13
  * Data provider (required)
15
- * @param init.postsProvider
14
+ * @param {IPostsPlayerDataProvider} init.postsProvider
16
15
  * Provider that supplies post items to the player.
17
16
  *
18
- * Media center (optional)
19
- * @param {IMediaCenterConfig} [init.mediaCenterConfig]
20
- * Optional media-center config passed to MediaCenter.
21
- *
22
17
  * Analytics (optional)
23
18
  * @param {IPostAnalyticsHandler} [init.analyticsHandler]
24
19
  * Custom analytics handler for posts player events.
@@ -27,20 +22,23 @@ export { mapToPostPlayerModel } from '../data-loaders/mapper';
27
22
  * @param {IPostSocialInteractionsHandler} [init.socialInteractionsHandler]
28
23
  * Handler for social interactions (like, share, etc.).
29
24
  *
30
- * Player settings
31
- * @param {PostPlayerSettings} [init.playerSettings]
25
+ * Player settings (optional)
26
+ * @param {object} [init.playerSettings]
32
27
  * Player UI and behavior settings.
33
- * Fields of PostPlayerSettings:
28
+ * Fields of PostsPlayerSettings:
34
29
  * - {boolean} [disableBackground]
35
30
  * If true, hides the player's background image.
36
31
  * - {boolean} [hideCloseButton]
37
32
  * If true, hides the close button.
33
+ * Note: when true, the `CloseOrchestrator` will not allow closing via the close button.
38
34
  * - {'en'|'no'} [locale='en']
39
35
  * Localization for the player UI. Default is 'en'; use 'no' for Norwegian.
40
36
  * - {boolean} [showStreamsCloudWatermark]
41
37
  * If true, shows the StreamsCloud watermark.
38
+ * - {'light' | 'dark'} [theme]
39
+ * Optional theme for the player UI.
42
40
  *
43
- * Events
41
+ * Events (optional)
44
42
  * @param {{ playerClosed?: () => void; postActivated?: (id: string) => void }} [init.on]
45
43
  * Optional event handlers.
46
44
  * @param {() => void} [init.on.playerClosed]
@@ -55,16 +53,26 @@ export { mapToPostPlayerModel } from '../data-loaders/mapper';
55
53
  * import { openPostsPlayer } from '@streamscloud/embeddable/posts-player';
56
54
  *
57
55
  * openPostsPlayer({
58
- * postsProvider: myPostsProvider,
59
- * mediaCenterConfig: myMediaCenterConfig,
56
+ * postsProvider: {
57
+ * kind: 'feed',
58
+ * initialData: {
59
+ * prefetchedItems: myPrefetchedPosts,
60
+ * startIndex: 0,
61
+ * startMediaIndex: 0,
62
+ * },
63
+ * loadMore: async () => {
64
+ * // return next chunk of PostPlayerModel[]
65
+ * return await fetchMorePosts();
66
+ * },
67
+ * },
60
68
  * analyticsHandler: myAnalyticsHandler,
61
69
  * socialInteractionsHandler: mySocialHandler,
62
70
  * playerSettings: {
63
- * // Default locale is 'en'; set 'no' to switch to Norwegian:
64
71
  * locale: 'no',
65
72
  * disableBackground: false,
66
73
  * hideCloseButton: false,
67
74
  * showStreamsCloudWatermark: true,
75
+ * theme: 'dark',
68
76
  * },
69
77
  * on: {
70
78
  * playerClosed: () => console.log('Player closed'),
@@ -73,20 +81,17 @@ export { mapToPostPlayerModel } from '../data-loaders/mapper';
73
81
  * });
74
82
  * ```
75
83
  */
76
- export declare function openPostsPlayer(init: {
77
- postsProvider: IPostsPlayerDataProvider;
78
- mediaCenterConfig: IMediaCenterConfig;
79
- playerSettings?: PostsPlayerSettings;
80
- on?: {
81
- playerClosed?: () => void;
82
- postActivated?: (id: string) => void;
83
- };
84
- }): void;
85
84
  export declare function openPostsPlayer(init: {
86
85
  postsProvider: IPostsPlayerDataProvider;
87
86
  analyticsHandler?: IPostAnalyticsHandler;
88
87
  socialInteractionsHandler?: IPostSocialInteractionsHandler;
89
- playerSettings?: PostsPlayerSettings;
88
+ playerSettings?: {
89
+ disableBackground?: boolean;
90
+ locale?: Locale;
91
+ showStreamsCloudWatermark?: boolean;
92
+ hideCloseButton?: boolean;
93
+ theme?: 'light' | 'dark';
94
+ };
90
95
  on?: {
91
96
  playerClosed?: () => void;
92
97
  postActivated?: (id: string) => void;
@@ -115,10 +120,3 @@ export type IPostsPlayerDataProvider<TChunk extends WithId = WithId> = {
115
120
  type WithId = {
116
121
  id: string;
117
122
  };
118
- export type PostsPlayerSettings = {
119
- disableBackground?: boolean;
120
- locale?: Locale;
121
- showStreamsCloudWatermark?: boolean;
122
- hideCloseButton?: boolean;
123
- theme?: 'light' | 'dark';
124
- };
@@ -1,16 +1,90 @@
1
1
  import {} from '../../media-center/config/types';
2
- import { MediaCenterProxy } from '../../media-center/media-center';
3
2
  import { CloseOrchestrator } from '../../ui/player/close-orchestrator';
4
3
  import { ModalShadowHost } from '../../ui/shadow-dom';
5
4
  import { default as PostsPlayer } from './cmp.posts-player.svelte';
6
5
  import { default as PostsPlayerProxy } from './posts-player-proxy.svelte';
7
6
  import { mount, unmount } from 'svelte';
8
7
  export { PostsPlayer };
9
- export { mapToPostPlayerModel } from '../data-loaders/mapper';
8
+ /**
9
+ * Opens the posts player modal.
10
+ *
11
+ * @param init Configuration options for the posts player.
12
+ *
13
+ * Data provider (required)
14
+ * @param {IPostsPlayerDataProvider} init.postsProvider
15
+ * Provider that supplies post items to the player.
16
+ *
17
+ * Analytics (optional)
18
+ * @param {IPostAnalyticsHandler} [init.analyticsHandler]
19
+ * Custom analytics handler for posts player events.
20
+ *
21
+ * Social interactions (optional)
22
+ * @param {IPostSocialInteractionsHandler} [init.socialInteractionsHandler]
23
+ * Handler for social interactions (like, share, etc.).
24
+ *
25
+ * Player settings (optional)
26
+ * @param {object} [init.playerSettings]
27
+ * Player UI and behavior settings.
28
+ * Fields of PostsPlayerSettings:
29
+ * - {boolean} [disableBackground]
30
+ * If true, hides the player's background image.
31
+ * - {boolean} [hideCloseButton]
32
+ * If true, hides the close button.
33
+ * Note: when true, the `CloseOrchestrator` will not allow closing via the close button.
34
+ * - {'en'|'no'} [locale='en']
35
+ * Localization for the player UI. Default is 'en'; use 'no' for Norwegian.
36
+ * - {boolean} [showStreamsCloudWatermark]
37
+ * If true, shows the StreamsCloud watermark.
38
+ * - {'light' | 'dark'} [theme]
39
+ * Optional theme for the player UI.
40
+ *
41
+ * Events (optional)
42
+ * @param {{ playerClosed?: () => void; postActivated?: (id: string) => void }} [init.on]
43
+ * Optional event handlers.
44
+ * @param {() => void} [init.on.playerClosed]
45
+ * Called after the player is fully closed (after unmount and removal from the DOM).
46
+ * @param {(id: string) => void} [init.on.postActivated]
47
+ * Called when a post becomes active (receives the post's id).
48
+ *
49
+ * @returns {void}
50
+ *
51
+ * @example
52
+ * ```ts
53
+ * import { openPostsPlayer } from '@streamscloud/embeddable/posts-player';
54
+ *
55
+ * openPostsPlayer({
56
+ * postsProvider: {
57
+ * kind: 'feed',
58
+ * initialData: {
59
+ * prefetchedItems: myPrefetchedPosts,
60
+ * startIndex: 0,
61
+ * startMediaIndex: 0,
62
+ * },
63
+ * loadMore: async () => {
64
+ * // return next chunk of PostPlayerModel[]
65
+ * return await fetchMorePosts();
66
+ * },
67
+ * },
68
+ * analyticsHandler: myAnalyticsHandler,
69
+ * socialInteractionsHandler: mySocialHandler,
70
+ * playerSettings: {
71
+ * locale: 'no',
72
+ * disableBackground: false,
73
+ * hideCloseButton: false,
74
+ * showStreamsCloudWatermark: true,
75
+ * theme: 'dark',
76
+ * },
77
+ * on: {
78
+ * playerClosed: () => console.log('Player closed'),
79
+ * postActivated: (id) => console.log('Activated post', id),
80
+ * },
81
+ * });
82
+ * ```
83
+ */
10
84
  export function openPostsPlayer(init) {
11
- const { postsProvider: dataProvider, mediaCenterConfig, analyticsHandler, socialInteractionsHandler, playerSettings, on } = init;
85
+ const { postsProvider: dataProvider, analyticsHandler, socialInteractionsHandler, playerSettings, on } = init;
12
86
  const shadowHost = new ModalShadowHost();
13
- let mounted;
87
+ let mounted = null;
14
88
  const makeCloseOrchestrator = () => new CloseOrchestrator({
15
89
  closeFn: async () => {
16
90
  await unmount(mounted);
@@ -21,37 +95,18 @@ export function openPostsPlayer(init) {
21
95
  },
22
96
  canClose: !playerSettings?.hideCloseButton
23
97
  });
24
- if (mediaCenterConfig) {
25
- mounted = mount(MediaCenterProxy, {
26
- target: shadowHost.shadowRoot,
27
- props: {
28
- config: mediaCenterConfig,
29
- settings: playerSettings,
30
- modeProps: {
31
- mode: 'posts',
32
- props: {
33
- dataProvider,
34
- onPostActivated: on?.postActivated
35
- }
36
- },
37
- closeOrchestrator: makeCloseOrchestrator()
98
+ mounted = mount(PostsPlayerProxy, {
99
+ target: shadowHost.shadowRoot,
100
+ props: {
101
+ dataProvider,
102
+ socialInteractionsHandler,
103
+ analyticsHandler,
104
+ playerSettings,
105
+ closeOrchestrator: makeCloseOrchestrator(),
106
+ on: {
107
+ postActivated: on?.postActivated
38
108
  }
39
- });
40
- }
41
- else {
42
- mounted = mount(PostsPlayerProxy, {
43
- target: shadowHost.shadowRoot,
44
- props: {
45
- dataProvider,
46
- socialInteractionsHandler,
47
- analyticsHandler,
48
- playerSettings,
49
- closeOrchestrator: makeCloseOrchestrator(),
50
- on: {
51
- postActivated: on?.postActivated
52
- }
53
- }
54
- });
55
- }
109
+ }
110
+ });
56
111
  shadowHost.attachToBody();
57
112
  }
@@ -9,7 +9,7 @@
9
9
  };
10
10
  import { PostType } from '../..';
11
11
  import { ContentPlayer, ContentPlayerConfig } from '../../content-player';
12
- import { ContentPlayerSettings } from '../../content-player/content-player-settings';
12
+ import { ContentPlayerSettings } from '../../content-player/content-player-settings.svelte';
13
13
  import { preloadImage } from '../../core/image-preloader';
14
14
  import { getPostCoverImage } from '../model';
15
15
  import {} from '../../ui/player/providers';
@@ -1,4 +1,5 @@
1
1
  import type { Locale } from '../../core/locale';
2
+ import type { ThemeValue } from '../../core/theme';
2
3
  import type { IPostModel } from '..';
3
4
  import type { IPostSocialInteractionsHandler } from '../social-interactions';
4
5
  import type { ICloseOrchestrator } from '../../ui/player/close-orchestrator';
@@ -36,5 +37,5 @@ export type PostsPlayerProps = {
36
37
  export type PostPlayerSettings = {
37
38
  locale?: Locale;
38
39
  showStreamsCloudWatermark?: boolean;
39
- playerColors?: PlayerColors;
40
+ playerColors?: Record<ThemeValue, PlayerColors>;
40
41
  };
@@ -9,7 +9,7 @@ export declare const generateTextStyles: (styles: Partial<TextStreamElementStyle
9
9
  export declare const generateImageStyles: (styles: Partial<ImageStreamElementStyles> | null) => string;
10
10
  export declare const mapFontFamily: (value: StreamElementStyleFontFamily | null | undefined) => string;
11
11
  export declare const mapFontWeight: (value: StreamElementStyleFontWeight | null | undefined) => "normal" | "600" | "500";
12
- export declare const mapTextAlign: (value: StreamElementStyleHorizontalAlign | null | undefined) => "center" | "left" | "right";
12
+ export declare const mapTextAlign: (value: StreamElementStyleHorizontalAlign | null | undefined) => "right" | "left" | "center";
13
13
  export declare const mapFlexJustifyContent: (value: StreamElementStyleHorizontalAlign | null | undefined) => "center" | "flex-start" | "flex-end";
14
14
  export declare const transformFontSizeValue: (value: number | null | undefined) => string;
15
15
  export declare const transformNumericValue: (value: number | null | undefined, fallback?: string) => string;