@streamscloud/embeddable 11.0.0 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/dist/ads/ad-card/cmp.ad-card.svelte +4 -4
  2. package/dist/ads/ad-card/cmp.ad-card.svelte.d.ts +2 -0
  3. package/dist/content-player/cmp.content-player.svelte +63 -128
  4. package/dist/content-player/content-player-config.svelte.d.ts +3 -10
  5. package/dist/content-player/content-player-config.svelte.js +3 -21
  6. package/dist/content-player/content-player-settings.d.ts +7 -21
  7. package/dist/content-player/content-player-settings.js +0 -4
  8. package/dist/content-player/controls-and-attachments.svelte +39 -5
  9. package/dist/content-player/overview-panel.svelte +14 -6
  10. package/dist/content-player/overview-panel.svelte.d.ts +5 -1
  11. package/dist/content-player/ui-manager.svelte.d.ts +0 -2
  12. package/dist/content-player/ui-manager.svelte.js +0 -2
  13. package/dist/media-center/config/internal-media-center-config.d.ts +7 -3
  14. package/dist/media-center/config/internal-media-center-config.js +27 -24
  15. package/dist/media-center/config/operations.generated.d.ts +10 -3
  16. package/dist/media-center/config/operations.generated.js +17 -6
  17. package/dist/media-center/config/operations.graphql +11 -4
  18. package/dist/media-center/config/types.d.ts +5 -2
  19. package/dist/media-center/media-center/cmp.media-center.svelte +195 -149
  20. package/dist/media-center/media-center/cmp.media-center.svelte.d.ts +2 -19
  21. package/dist/media-center/media-center/discover/data-loading.d.ts +8 -0
  22. package/dist/media-center/media-center/discover/data-loading.js +35 -0
  23. package/dist/media-center/media-center/discover/discover-header-localization.d.ts +6 -0
  24. package/dist/media-center/media-center/discover/discover-header-localization.js +15 -0
  25. package/dist/media-center/media-center/discover/discover-header.svelte +214 -0
  26. package/dist/media-center/media-center/discover/discover-header.svelte.d.ts +9 -0
  27. package/dist/media-center/media-center/discover/discover-view-handler.svelte.d.ts +28 -0
  28. package/dist/media-center/media-center/discover/discover-view-handler.svelte.js +101 -0
  29. package/dist/media-center/media-center/discover/discover-view-localization.d.ts +6 -0
  30. package/dist/media-center/media-center/discover/discover-view-localization.js +15 -0
  31. package/dist/media-center/media-center/discover/discover-view.svelte +238 -0
  32. package/dist/media-center/media-center/discover/{discover-panel.svelte.d.ts → discover-view.svelte.d.ts} +4 -4
  33. package/dist/media-center/media-center/discover/index.d.ts +2 -2
  34. package/dist/media-center/media-center/discover/index.js +2 -2
  35. package/dist/media-center/media-center/discover/types.svelte.d.ts +20 -0
  36. package/dist/media-center/media-center/discover/types.svelte.js +20 -0
  37. package/dist/media-center/media-center/feed/feed-handler.svelte.d.ts +50 -0
  38. package/dist/media-center/media-center/feed/feed-handler.svelte.js +84 -0
  39. package/dist/media-center/media-center/feed/feed-providers-generator.d.ts +11 -0
  40. package/dist/media-center/media-center/feed/feed-providers-generator.js +79 -0
  41. package/dist/media-center/media-center/feed/index.d.ts +1 -0
  42. package/dist/media-center/media-center/feed/index.js +1 -0
  43. package/dist/media-center/media-center/feed/types.d.ts +12 -0
  44. package/dist/media-center/media-center/handlers/categories-handler.svelte.d.ts +9 -3
  45. package/dist/media-center/media-center/handlers/categories-handler.svelte.js +7 -4
  46. package/dist/media-center/media-center/handlers/index.d.ts +1 -1
  47. package/dist/media-center/media-center/handlers/index.js +1 -1
  48. package/dist/media-center/media-center/handlers/media-center-settings-handler.svelte.d.ts +19 -0
  49. package/dist/media-center/media-center/handlers/media-center-settings-handler.svelte.js +26 -0
  50. package/dist/media-center/media-center/header-footer/media-center-footer.svelte +3 -7
  51. package/dist/media-center/media-center/header-footer/media-center-header-localization.d.ts +1 -0
  52. package/dist/media-center/media-center/header-footer/media-center-header-localization.js +6 -0
  53. package/dist/media-center/media-center/header-footer/media-center-header-mobile.svelte +25 -36
  54. package/dist/media-center/media-center/header-footer/media-center-header-mobile.svelte.d.ts +2 -1
  55. package/dist/media-center/media-center/header-footer/media-center-header.svelte +14 -11
  56. package/dist/media-center/media-center/header-footer/media-center-header.svelte.d.ts +1 -2
  57. package/dist/media-center/media-center/media-center-context.svelte.d.ts +31 -13
  58. package/dist/media-center/media-center/media-center-context.svelte.js +71 -35
  59. package/dist/media-center/media-center/menu/menu-localization.d.ts +2 -11
  60. package/dist/media-center/media-center/menu/menu-localization.js +6 -45
  61. package/dist/media-center/media-center/menu/menu.svelte +31 -23
  62. package/dist/media-center/media-center/menu/menu.svelte.d.ts +1 -1
  63. package/dist/media-center/media-center/menu/popular-streams-panel-handler.svelte.d.ts +1 -1
  64. package/dist/media-center/media-center/menu/popular-streams-panel-handler.svelte.js +0 -3
  65. package/dist/media-center/media-center/moments/cmp.moments-circle.svelte +41 -0
  66. package/dist/media-center/media-center/moments/cmp.moments-circle.svelte.d.ts +7 -0
  67. package/dist/media-center/media-center/moments/index.d.ts +1 -0
  68. package/dist/media-center/media-center/moments/index.js +1 -0
  69. package/dist/media-center/media-center/streams-in-category/streams-in-category-panel-handler.svelte.d.ts +1 -1
  70. package/dist/media-center/media-center/streams-in-category/streams-in-category-panel-handler.svelte.js +1 -1
  71. package/dist/media-center/media-center/types.d.ts +44 -1
  72. package/dist/media-page/index.d.ts +121 -0
  73. package/dist/media-page/index.js +43 -0
  74. package/dist/posts/attachments/cmp.attachments.svelte +1 -0
  75. package/dist/posts/controls/cmp.controls.svelte +50 -13
  76. package/dist/posts/data-loaders/operations.generated.d.ts +4 -0
  77. package/dist/posts/data-loaders/operations.generated.js +6 -2
  78. package/dist/posts/model/types.d.ts +2 -0
  79. package/dist/posts/post-viewer/cmp.post-viewer.svelte +26 -18
  80. package/dist/posts/post-viewer/mapper.js +2 -0
  81. package/dist/posts/post-viewer/operations.generated.d.ts +2 -0
  82. package/dist/posts/post-viewer/operations.generated.js +3 -1
  83. package/dist/posts/post-viewer/operations.graphql +2 -0
  84. package/dist/posts/post-viewer/post-texts.svelte +3 -3
  85. package/dist/posts/posts-player/cmp.posts-player.svelte +20 -6
  86. package/dist/posts/posts-player/cmp.posts-player.svelte.d.ts +18 -2
  87. package/dist/posts/posts-player/index.d.ts +18 -3
  88. package/dist/posts/posts-player/index.js +42 -89
  89. package/dist/posts/posts-player/posts-player-proxy.svelte +19 -0
  90. package/dist/posts/posts-player/posts-player-proxy.svelte.d.ts +22 -0
  91. package/dist/posts/posts-player/posts-player-view.svelte +20 -34
  92. package/dist/posts/posts-player/posts-player-view.svelte.d.ts +2 -6
  93. package/dist/posts/posts-player/types.d.ts +19 -6
  94. package/dist/products/product-card/cmp.product-card.svelte +5 -5
  95. package/dist/products/product-card/cmp.product-card.svelte.d.ts +1 -1
  96. package/dist/short-videos/short-video-card/cmp.short-video-card.svelte +160 -19
  97. package/dist/short-videos/short-video-card/cmp.short-video-card.svelte.d.ts +2 -1
  98. package/dist/short-videos/short-video-card/localization.d.ts +5 -0
  99. package/dist/short-videos/short-video-card/localization.js +13 -0
  100. package/dist/short-videos/short-video-card/types.d.ts +4 -0
  101. package/dist/short-videos/short-videos-player/index.js +26 -33
  102. package/dist/streams/layout/element-views/cmp.stream-element.svelte +2 -2
  103. package/dist/streams/layout/element-views/cmp.text-ref-stream-element.svelte +7 -3
  104. package/dist/streams/layout/element-views/cmp.text-ref-stream-element.svelte.d.ts +2 -0
  105. package/dist/streams/layout/element-views/cmp.text-stream-element.svelte +7 -3
  106. package/dist/streams/layout/element-views/cmp.text-stream-element.svelte.d.ts +2 -0
  107. package/dist/streams/layout/element-views/price-element-view.svelte +2 -2
  108. package/dist/streams/layout/element-views/price-stream-element-localization.d.ts +1 -1
  109. package/dist/streams/layout/element-views/price-stream-element-localization.js +2 -2
  110. package/dist/streams/layout/models/mapper.js +2 -0
  111. package/dist/streams/streams-player/index.d.ts +21 -2
  112. package/dist/streams/streams-player/index.js +49 -24
  113. package/dist/streams/streams-player/stream-overview.svelte +1 -1
  114. package/dist/streams/streams-player/streams-player-buffer.svelte.d.ts +1 -3
  115. package/dist/streams/streams-player/streams-player-buffer.svelte.js +2 -2
  116. package/dist/streams/streams-player/streams-player-view.svelte +25 -21
  117. package/dist/streams/streams-player/streams-player-view.svelte.d.ts +1 -5
  118. package/dist/streams/streams-player/types.d.ts +18 -4
  119. package/dist/ui/line-clamp/cmp.line-clamp-auto.svelte +119 -0
  120. package/dist/ui/line-clamp/cmp.line-clamp-auto.svelte.d.ts +10 -0
  121. package/dist/ui/line-clamp/cmp.line-clamp.svelte +44 -72
  122. package/dist/ui/line-clamp/cmp.line-clamp.svelte.d.ts +3 -4
  123. package/dist/ui/line-clamp/index.d.ts +1 -0
  124. package/dist/ui/line-clamp/index.js +1 -0
  125. package/dist/ui/player/button/cmp.mobile-player-buttons-group.svelte +44 -0
  126. package/dist/ui/player/button/cmp.mobile-player-buttons-group.svelte.d.ts +7 -0
  127. package/dist/ui/player/button/cmp.player-button.svelte +0 -1
  128. package/dist/ui/player/button/cmp.player-buttons-group.svelte +15 -11
  129. package/dist/ui/player/button/cmp.player-buttons-group.svelte.d.ts +1 -1
  130. package/dist/ui/player/button/index.d.ts +1 -0
  131. package/dist/ui/player/button/index.js +1 -0
  132. package/dist/ui/player/button/types.d.ts +0 -2
  133. package/dist/ui/player/close-orchestrator/close-orchestrator.svelte.d.ts +18 -0
  134. package/dist/ui/player/close-orchestrator/close-orchestrator.svelte.js +58 -0
  135. package/dist/ui/player/close-orchestrator/index.d.ts +2 -0
  136. package/dist/ui/player/close-orchestrator/index.js +1 -0
  137. package/dist/ui/player/close-orchestrator/types.d.ts +9 -0
  138. package/dist/ui/player/close-orchestrator/types.js +1 -0
  139. package/dist/ui/player/colors/index.d.ts +1 -0
  140. package/dist/ui/player/colors/index.js +1 -0
  141. package/dist/ui/player/colors/player-colors.d.ts +11 -0
  142. package/dist/ui/player/colors/player-colors.js +1 -0
  143. package/dist/ui/player/providers/chunks-player-buffer/player-chunks-manager.svelte.d.ts +2 -6
  144. package/dist/ui/player/providers/chunks-player-buffer/player-chunks-manager.svelte.js +11 -11
  145. package/dist/ui/player/providers/default-chunks-player-buffer.svelte.d.ts +2 -3
  146. package/dist/ui/player/providers/default-chunks-player-buffer.svelte.js +5 -5
  147. package/dist/ui/player/providers/default-feed-player-buffer.svelte.d.ts +3 -4
  148. package/dist/ui/player/providers/default-feed-player-buffer.svelte.js +16 -9
  149. package/dist/ui/player/providers/service.d.ts +2 -0
  150. package/dist/ui/player/providers/service.js +13 -0
  151. package/dist/ui/player/providers/types.d.ts +1 -0
  152. package/dist/ui/with-background/cmp.with-background.svelte +86 -0
  153. package/dist/ui/with-background/cmp.with-background.svelte.d.ts +10 -0
  154. package/dist/ui/with-background/index.d.ts +1 -0
  155. package/dist/ui/with-background/index.js +1 -0
  156. package/package.json +5 -1
  157. package/dist/content-player/fade-mixins.scss +0 -12
  158. package/dist/content-player/header.svelte +0 -15
  159. package/dist/content-player/header.svelte.d.ts +0 -28
  160. package/dist/media-center/media-center/discover/discover-panel-handler.svelte.d.ts +0 -31
  161. package/dist/media-center/media-center/discover/discover-panel-handler.svelte.js +0 -94
  162. package/dist/media-center/media-center/discover/discover-panel-localization.d.ts +0 -19
  163. package/dist/media-center/media-center/discover/discover-panel-localization.js +0 -78
  164. package/dist/media-center/media-center/discover/discover-panel.svelte +0 -142
  165. package/dist/media-center/media-center/handlers/feed-handler.svelte.d.ts +0 -6
  166. package/dist/media-center/media-center/handlers/feed-handler.svelte.js +0 -12
  167. package/dist/media-center/media-center/providers/index.d.ts +0 -2
  168. package/dist/media-center/media-center/providers/index.js +0 -2
  169. package/dist/media-center/media-center/providers/post-player-provider-generator.d.ts +0 -8
  170. package/dist/media-center/media-center/providers/post-player-provider-generator.js +0 -32
  171. package/dist/media-center/media-center/providers/streams-player-provider-generator.d.ts +0 -8
  172. package/dist/media-center/media-center/providers/streams-player-provider-generator.js +0 -36
  173. package/dist/media-center/model/types.d.ts +0 -17
  174. /package/dist/media-center/{model → media-center/feed}/types.js +0 -0
@@ -1,2 +1,2 @@
1
- export { default as DiscoverPanel } from './discover-panel.svelte';
2
- export { DiscoverPanelHandler } from './discover-panel-handler.svelte';
1
+ export { default as DiscoverPanel } from './discover-view.svelte';
2
+ export { DiscoverViewHandler } from './discover-view-handler.svelte.js';
@@ -1,2 +1,2 @@
1
- export { default as DiscoverPanel } from './discover-panel.svelte';
2
- export { DiscoverPanelHandler } from './discover-panel-handler.svelte';
1
+ export { default as DiscoverPanel } from './discover-view.svelte';
2
+ export { DiscoverViewHandler } from './discover-view-handler.svelte.js';
@@ -0,0 +1,20 @@
1
+ import type { PostPlayerModel } from '../../../posts/posts-player/types';
2
+ import type { StreamPlayerModel } from '../../../streams/streams-player/types';
3
+ export declare class ShortVideosInCategory {
4
+ categoryId: string;
5
+ categoryName: string;
6
+ shortVideos: PostPlayerModel[];
7
+ continuationToken: string | null | undefined;
8
+ constructor(data: {
9
+ categoryId: string;
10
+ categoryName: string;
11
+ });
12
+ }
13
+ export declare class StreamsInCategory {
14
+ categoryId: string | null;
15
+ streams: StreamPlayerModel[];
16
+ continuationToken: string | null | undefined;
17
+ constructor(data: {
18
+ categoryId: string | null;
19
+ });
20
+ }
@@ -0,0 +1,20 @@
1
+ export class ShortVideosInCategory {
2
+ categoryId;
3
+ categoryName;
4
+ shortVideos = $state.raw([]);
5
+ continuationToken = $state(undefined);
6
+ constructor(data) {
7
+ const { categoryId, categoryName } = data;
8
+ this.categoryId = categoryId;
9
+ this.categoryName = categoryName;
10
+ }
11
+ }
12
+ export class StreamsInCategory {
13
+ categoryId;
14
+ streams = $state.raw([]);
15
+ continuationToken = $state(undefined);
16
+ constructor(data) {
17
+ const { categoryId } = data;
18
+ this.categoryId = categoryId;
19
+ }
20
+ }
@@ -0,0 +1,50 @@
1
+ import type { IMediaCenterConfig } from '../..';
2
+ import type { PostPlayerModel } from '../../../posts/posts-player';
3
+ import type { IStreamsPlayerDataProvider } from '../../../streams/streams-player';
4
+ import type { ICloseOrchestrator } from '../../../ui/player/close-orchestrator';
5
+ import type { IPlayerDataProvider } from '../../../ui/player/providers';
6
+ import { MediaCenterSettingsHandler } from '../handlers';
7
+ import type { PlayerProps } from '../types';
8
+ import type { PostsDataProviderFilter, StreamsDataProviderFilter } from './types';
9
+ export declare class FeedHandler {
10
+ private _active;
11
+ private _providersGenerator;
12
+ private _feedPlayerProps;
13
+ private _externalHandlers;
14
+ private _mediaCenterSettingsHandler;
15
+ private _closeOrchestrator;
16
+ constructor(data: {
17
+ config: IMediaCenterConfig;
18
+ mediaCenterSettingsHandler: MediaCenterSettingsHandler;
19
+ closeOrchestrator: ICloseOrchestrator;
20
+ });
21
+ get active(): boolean;
22
+ get feedPlayerProps(): PlayerProps | null;
23
+ deactivate: () => void;
24
+ activatePostsFeed: (options: {
25
+ dataProvider?: IPlayerDataProvider<PostPlayerModel>;
26
+ filter?: PostsDataProviderFilter;
27
+ onPostActivated?: (id: string) => void;
28
+ }) => Promise<void>;
29
+ activateStreamsFeed: (options: {
30
+ dataProvider?: IStreamsPlayerDataProvider;
31
+ filter?: StreamsDataProviderFilter;
32
+ onStreamActivated?: (data: {
33
+ title: string;
34
+ image: string | null;
35
+ }) => void;
36
+ }) => Promise<void>;
37
+ private makePostsPlayerProps;
38
+ private makeStreamsPlayerProps;
39
+ }
40
+ export type MakePostsPlayerPropsData = {
41
+ dataProvider: IPlayerDataProvider<PostPlayerModel>;
42
+ onPostActivated?: (id: string) => void;
43
+ };
44
+ export type MakeStreamsPlayerPropsData = {
45
+ dataProvider: IStreamsPlayerDataProvider;
46
+ onStreamActivated?: (data: {
47
+ title: string;
48
+ image: string | null;
49
+ }) => void;
50
+ };
@@ -0,0 +1,84 @@
1
+ import { StreamsPlayerBuffer } from '../../../streams/streams-player/streams-player-buffer.svelte';
2
+ import { initBufferFromProvider } from '../../../ui/player/providers/service';
3
+ import { MediaCenterSettingsHandler } from '../handlers';
4
+ import { FeedProvidersGenerator } from './feed-providers-generator';
5
+ export class FeedHandler {
6
+ _active = $state(false);
7
+ _providersGenerator;
8
+ _feedPlayerProps = $state.raw(null);
9
+ _externalHandlers;
10
+ _mediaCenterSettingsHandler;
11
+ _closeOrchestrator;
12
+ constructor(data) {
13
+ const { config, mediaCenterSettingsHandler, closeOrchestrator } = data;
14
+ this._providersGenerator = new FeedProvidersGenerator(config);
15
+ this._mediaCenterSettingsHandler = mediaCenterSettingsHandler;
16
+ this._externalHandlers = config.handlers;
17
+ this._closeOrchestrator = closeOrchestrator;
18
+ }
19
+ get active() {
20
+ return this._active;
21
+ }
22
+ get feedPlayerProps() {
23
+ return this._feedPlayerProps;
24
+ }
25
+ deactivate = () => {
26
+ this._active = false;
27
+ };
28
+ activatePostsFeed = async (options) => {
29
+ const { dataProvider, filter, onPostActivated } = options;
30
+ if (dataProvider) {
31
+ this._feedPlayerProps = this.makePostsPlayerProps({ dataProvider, onPostActivated });
32
+ }
33
+ else {
34
+ const dataProvider = this._providersGenerator.makePostPlayerItemsProvider(filter);
35
+ this._feedPlayerProps = this.makePostsPlayerProps({ dataProvider, onPostActivated });
36
+ }
37
+ this._active = true;
38
+ };
39
+ activateStreamsFeed = async (options) => {
40
+ const { dataProvider, filter, onStreamActivated } = options;
41
+ if (dataProvider) {
42
+ this._feedPlayerProps = this.makeStreamsPlayerProps({ dataProvider, onStreamActivated });
43
+ }
44
+ else {
45
+ const dataProvider = this._providersGenerator.makeStreamsPlayerDataProvider(filter);
46
+ this._feedPlayerProps = this.makeStreamsPlayerProps({ dataProvider, onStreamActivated });
47
+ }
48
+ this._active = true;
49
+ };
50
+ makePostsPlayerProps = (data) => {
51
+ const { dataProvider, onPostActivated } = data;
52
+ return {
53
+ type: 'posts',
54
+ props: {
55
+ dataProvider: { type: 'buffer', buffer: initBufferFromProvider(dataProvider) },
56
+ socialInteractionsHandler: this._externalHandlers?.socialInteractionsHandler,
57
+ analyticsHandler: this._externalHandlers?.analyticsHandler,
58
+ playerSettings: this._mediaCenterSettingsHandler.playerSettings,
59
+ closeOrchestrator: this._closeOrchestrator,
60
+ on: {
61
+ postActivated: onPostActivated,
62
+ backgroundImageLoaded: this._mediaCenterSettingsHandler.backgroundImageLoadedHandler
63
+ }
64
+ }
65
+ };
66
+ };
67
+ makeStreamsPlayerProps = (data) => {
68
+ const { dataProvider, onStreamActivated } = data;
69
+ return {
70
+ type: 'streams',
71
+ props: {
72
+ dataProvider: { type: 'buffer', buffer: new StreamsPlayerBuffer(dataProvider) },
73
+ analyticsHandler: this._externalHandlers?.analyticsHandler,
74
+ postSocialInteractionsHandler: this._externalHandlers?.socialInteractionsHandler,
75
+ playerSettings: this._mediaCenterSettingsHandler.playerSettings,
76
+ closeOrchestrator: this._closeOrchestrator,
77
+ on: {
78
+ streamActivated: onStreamActivated,
79
+ backgroundImageLoaded: this._mediaCenterSettingsHandler.backgroundImageLoadedHandler
80
+ }
81
+ }
82
+ };
83
+ };
84
+ }
@@ -0,0 +1,11 @@
1
+ import type { IMediaCenterConfig } from '../../config/types';
2
+ import type { PostPlayerModel } from '../../../posts/posts-player/types';
3
+ import type { IStreamsPlayerDataProvider } from '../../../streams/streams-player/types';
4
+ import type { IFeedPlayerDataProvider } from '../../../ui/player/providers';
5
+ import type { PostsDataProviderFilter, StreamsDataProviderFilter } from './types';
6
+ export declare class FeedProvidersGenerator {
7
+ private config;
8
+ constructor(config: IMediaCenterConfig);
9
+ makePostPlayerItemsProvider: (filter?: PostsDataProviderFilter) => IFeedPlayerDataProvider<PostPlayerModel>;
10
+ makeStreamsPlayerDataProvider: (filter?: StreamsDataProviderFilter) => IStreamsPlayerDataProvider;
11
+ }
@@ -0,0 +1,79 @@
1
+ import { ContinuationToken } from '../../../core/continuation-token';
2
+ import { CursorDataLoader } from '../../../core/data-loaders';
3
+ import { PostType } from '../../../core/enums';
4
+ export class FeedProvidersGenerator {
5
+ config;
6
+ constructor(config) {
7
+ this.config = config;
8
+ }
9
+ makePostPlayerItemsProvider = (filter) => {
10
+ const { categoryId, prefetchedItems: initialPrefetchedItems = [], initialPostId } = filter || {};
11
+ const loader = new CursorDataLoader({
12
+ loadPage: async (continuationToken) => {
13
+ const result = await this.config.postsPlayer.getPostsCursor({
14
+ filter: {
15
+ types: [PostType.Article, PostType.Media, PostType.ShortVideo, PostType.Video],
16
+ categoryId,
17
+ excludeIds: initialPrefetchedItems.length ? initialPrefetchedItems.map((i) => i.id) : undefined
18
+ },
19
+ continuationToken: continuationToken.toNextChunkString(),
20
+ limit: 20
21
+ });
22
+ const items = result.items;
23
+ return {
24
+ items: items,
25
+ continuationToken: ContinuationToken.fromPayload(result.continuationToken)
26
+ };
27
+ }
28
+ });
29
+ let prefetchedItems = initialPrefetchedItems;
30
+ if (initialPostId) {
31
+ const targetPost = prefetchedItems.find((p) => p.id === initialPostId);
32
+ if (targetPost) {
33
+ prefetchedItems = [targetPost, ...prefetchedItems.filter((p) => p.id !== initialPostId)];
34
+ }
35
+ }
36
+ return {
37
+ kind: 'feed',
38
+ initialData: {
39
+ prefetchedItems,
40
+ startIndex: prefetchedItems.length ? 0 : -1
41
+ },
42
+ loadMore: loader.loadMore
43
+ };
44
+ };
45
+ makeStreamsPlayerDataProvider = (filter) => {
46
+ const { categoryId, prefetchedStreams: initialPrefetchedStreams = [], initialStreamId } = filter || {};
47
+ const loader = new CursorDataLoader({
48
+ loadPage: async (continuationToken) => {
49
+ const result = await this.config.streamPlayer.getStreamsCursor({
50
+ filter: {
51
+ categoryId,
52
+ excludeIds: initialPrefetchedStreams.length ? initialPrefetchedStreams.map((i) => i.id) : undefined
53
+ },
54
+ continuationToken: continuationToken.toNextChunkString(),
55
+ limit: 20
56
+ });
57
+ const items = result.items;
58
+ return {
59
+ items: items,
60
+ continuationToken: ContinuationToken.fromPayload(result.continuationToken)
61
+ };
62
+ }
63
+ });
64
+ let prefetchedStreams = initialPrefetchedStreams;
65
+ if (initialStreamId) {
66
+ const targetStream = prefetchedStreams.find((stream) => stream.id === initialStreamId);
67
+ if (targetStream) {
68
+ prefetchedStreams = [targetStream, ...prefetchedStreams.filter((stream) => stream.id !== initialStreamId)];
69
+ }
70
+ }
71
+ return {
72
+ initialData: {
73
+ prefetchedStreams
74
+ },
75
+ loadMoreStreams: loader.loadMore,
76
+ getStreamPages: this.config.streamPlayer.getStreamPages
77
+ };
78
+ };
79
+ }
@@ -0,0 +1 @@
1
+ export { FeedHandler } from './feed-handler.svelte';
@@ -0,0 +1 @@
1
+ export { FeedHandler } from './feed-handler.svelte';
@@ -0,0 +1,12 @@
1
+ import type { PostPlayerModel } from '../../../posts/posts-player/types';
2
+ import type { StreamPlayerModel } from '../../../streams/streams-player/types';
3
+ export type PostsDataProviderFilter = {
4
+ categoryId?: string;
5
+ prefetchedItems?: PostPlayerModel[];
6
+ initialPostId?: string;
7
+ };
8
+ export type StreamsDataProviderFilter = {
9
+ categoryId?: string;
10
+ prefetchedStreams?: StreamPlayerModel[];
11
+ initialStreamId?: string;
12
+ };
@@ -1,7 +1,15 @@
1
1
  import type { MediaCenterConfigModel } from '../../config/types';
2
2
  import type { MediaCenterCategoryData } from '../types';
3
3
  export declare class CategoriesHandler {
4
- readonly categories: {
4
+ private _allCateogories;
5
+ private _selectedCategoryId;
6
+ get allCategories(): {
7
+ id: string;
8
+ name: string;
9
+ image: string | null;
10
+ parentId: string | null;
11
+ }[];
12
+ get categoriesGrouped(): {
5
13
  id: string;
6
14
  name: string;
7
15
  children: {
@@ -12,8 +20,6 @@ export declare class CategoriesHandler {
12
20
  }[];
13
21
  image: string | null;
14
22
  }[];
15
- private _allCateogories;
16
- private _selectedCategoryId;
17
23
  get selectedCategoryId(): string | null;
18
24
  set selectedCategoryId(value: string | null);
19
25
  getCategoryData: (categoryId: string) => MediaCenterCategoryData | null;
@@ -1,5 +1,10 @@
1
1
  export class CategoriesHandler {
2
- categories = $derived.by(() => {
2
+ _allCateogories = $state.raw([]);
3
+ _selectedCategoryId = $state.raw(null);
4
+ get allCategories() {
5
+ return this._allCateogories;
6
+ }
7
+ get categoriesGrouped() {
3
8
  return this._allCateogories
4
9
  .filter((c) => !c.parentId)
5
10
  .map((c) => {
@@ -7,9 +12,7 @@ export class CategoriesHandler {
7
12
  const children = childCategories.map((cc) => ({ id: cc.id, name: cc.name, image: cc.image, parentId: cc.parentId }));
8
13
  return { id: c.id, name: c.name, children, image: c.image };
9
14
  });
10
- });
11
- _allCateogories = $state.raw([]);
12
- _selectedCategoryId = $state.raw(null);
15
+ }
13
16
  get selectedCategoryId() {
14
17
  return this._selectedCategoryId;
15
18
  }
@@ -1,2 +1,2 @@
1
1
  export { CategoriesHandler } from './categories-handler.svelte';
2
- export { FeedHandler } from './feed-handler.svelte';
2
+ export { MediaCenterSettingsHandler } from './media-center-settings-handler.svelte';
@@ -1,2 +1,2 @@
1
1
  export { CategoriesHandler } from './categories-handler.svelte';
2
- export { FeedHandler } from './feed-handler.svelte';
2
+ export { MediaCenterSettingsHandler } from './media-center-settings-handler.svelte';
@@ -0,0 +1,19 @@
1
+ import type { PlayerColors } from '../../../ui/player/colors';
2
+ import type { MediaCenterSettings } from '../types';
3
+ export declare class MediaCenterSettingsHandler {
4
+ private _backgroundImageUrl;
5
+ private _contentPlayerSettings;
6
+ constructor(settings?: MediaCenterSettings);
7
+ get playerSettings(): MediaCenterSettingsWithColors;
8
+ get backgroundWrapperProps(): {
9
+ backgroundDisabled: boolean;
10
+ backgroundImageUrl: string | null;
11
+ backgroundColor?: string | null;
12
+ };
13
+ get backgroundImageLoadedHandler(): ((url: string | null) => void) | undefined;
14
+ updateBackgroundImageUrl: (url: string | null | "not-applicable") => void;
15
+ updatePlayerColors: (colors: PlayerColors) => void;
16
+ }
17
+ export type MediaCenterSettingsWithColors = MediaCenterSettings & {
18
+ playerColors?: PlayerColors;
19
+ };
@@ -0,0 +1,26 @@
1
+ export class MediaCenterSettingsHandler {
2
+ _backgroundImageUrl = $state(null);
3
+ _contentPlayerSettings = $state({});
4
+ constructor(settings) {
5
+ this._contentPlayerSettings = settings ?? {};
6
+ }
7
+ get playerSettings() {
8
+ return this._contentPlayerSettings;
9
+ }
10
+ get backgroundWrapperProps() {
11
+ return {
12
+ backgroundDisabled: this._contentPlayerSettings.disableBackground === true,
13
+ backgroundImageUrl: this._backgroundImageUrl,
14
+ backgroundColor: this._contentPlayerSettings.playerColors?.playerBackground
15
+ };
16
+ }
17
+ get backgroundImageLoadedHandler() {
18
+ return this._contentPlayerSettings.disableBackground === true ? undefined : (url) => this.updateBackgroundImageUrl(url);
19
+ }
20
+ updateBackgroundImageUrl = (url) => {
21
+ this._backgroundImageUrl = url;
22
+ };
23
+ updatePlayerColors = (colors) => {
24
+ this._contentPlayerSettings.playerColors = colors;
25
+ };
26
+ }
@@ -12,7 +12,7 @@ let { context } = $props();
12
12
  type="button"
13
13
  class="media-center-footer__button"
14
14
  class:media-center-footer__button--active={context.feedHandler.active}
15
- onclick={() => context.activateFeed()}>
15
+ onclick={() => context.playRootFeed()}>
16
16
  <Icon src={IconPhone} />
17
17
  </button>
18
18
  <div class="media-center-footer__spacer"></div>
@@ -20,7 +20,7 @@ let { context } = $props();
20
20
  type="button"
21
21
  class="media-center-footer__button"
22
22
  class:media-center-footer__button--active={context.discoverHandler.activated}
23
- onclick={context.activateDiscover}>
23
+ onclick={() => context.activateDiscover({ categoryId: null })}>
24
24
  <Icon src={IconScreenSearch} />
25
25
  </button>
26
26
  <div class="media-center-footer__spacer"></div>
@@ -69,9 +69,5 @@ let { context } = $props();
69
69
  }
70
70
  .media-center-footer__button--active {
71
71
  --icon--color: #ffffff;
72
- --icon--stroke-width: 0.5;
73
- }
74
- .media-center-footer__button--active {
75
- color: #ffffff;
76
- text-shadow: 0.001em 0 0 currentColor, -0.001em 0 0 currentColor, 0 0.001em 0 currentColor, 0 -0.001em 0 currentColor;
72
+ --icon--stroke-width: 0.6;
77
73
  }</style>
@@ -8,5 +8,6 @@ export declare class MediaCenterHeaderLocalization {
8
8
  moments: string;
9
9
  webpage: string;
10
10
  };
11
+ discoverLabel: string;
11
12
  constructor(locale: Locale);
12
13
  }
@@ -1,7 +1,9 @@
1
1
  import {} from '../../../core/locale';
2
2
  export class MediaCenterHeaderLocalization {
3
3
  buttons;
4
+ discoverLabel;
4
5
  constructor(locale) {
6
+ this.discoverLabel = loc.discoverLabel[locale];
5
7
  this.buttons = {
6
8
  cart: loc.cartButton[locale],
7
9
  discover: loc.discoverButton[locale],
@@ -13,6 +15,10 @@ export class MediaCenterHeaderLocalization {
13
15
  }
14
16
  }
15
17
  const loc = {
18
+ discoverLabel: {
19
+ en: 'Discover',
20
+ no: 'Oppdag'
21
+ },
16
22
  discoverButton: {
17
23
  en: 'Discover',
18
24
  no: 'Oppdag'
@@ -1,7 +1,9 @@
1
1
  <script lang="ts">import { Icon } from '../../../ui/icon';
2
+ import { MediaCenterHeaderLocalization } from './media-center-header-localization';
2
3
  import IconDismiss from '@fluentui/svg-icons/icons/dismiss_20_regular.svg?raw';
3
- import IconLineHorizontal3 from '@fluentui/svg-icons/icons/line_horizontal_3_20_regular.svg?raw';
4
- let { context, closeFn, on } = $props();
4
+ import IconLayoutColumnOneThirdLeft from '@fluentui/svg-icons/icons/layout_column_one_third_left_20_regular.svg?raw';
5
+ let { context, locale = 'en', on } = $props();
6
+ const localization = $derived(new MediaCenterHeaderLocalization(locale));
5
7
  const headerMounted = (node) => {
6
8
  const heightResizeObserver = new ResizeObserver(() => {
7
9
  const headerHeight = node.clientHeight;
@@ -15,33 +17,23 @@ const headerMounted = (node) => {
15
17
  }
16
18
  };
17
19
  };
18
- const styles = $derived.by(() => {
19
- var _a, _b;
20
- const values = [];
21
- if ((_a = context.playerColors) === null || _a === void 0 ? void 0 : _a.button) {
22
- values.push(`--media-center-header-mobile--button-color: ${context.playerColors.button}`);
23
- }
24
- if ((_b = context.playerColors) === null || _b === void 0 ? void 0 : _b.buttonInactive) {
25
- values.push(`--media-center-header-mobile--button-color--inactive: ${context.playerColors.buttonInactive}`);
26
- }
27
- return values.join(';');
28
- });
29
20
  </script>
30
21
 
31
- <div class="media-center-header-mobile" use:headerMounted style={styles}>
32
- {#if closeFn}
33
- <button type="button" class="media-center-header-mobile__button" onclick={closeFn}>
22
+ <div class="media-center-header-mobile" class:media-center-header-mobile--static={context.mediaCenterMode === 'discover'} use:headerMounted>
23
+ {#if context.closeOrchestrator.closeTriggerVisible}
24
+ <button type="button" class="media-center-header-mobile__button" onclick={context.closeOrchestrator.requestClose}>
34
25
  <Icon src={IconDismiss} />
35
26
  </button>
36
27
  {:else}
37
28
  <span><!--just a stub--></span>
38
29
  {/if}
39
- <button
40
- type="button"
41
- class="media-center-header-mobile__button"
42
- class:media-center-header-mobile__button--active={context.menuActive}
43
- onclick={context.toggleMenu}>
44
- <Icon src={IconLineHorizontal3} />
30
+ {#if context.mediaCenterMode === 'discover'}
31
+ <div class="media-center-header-mobile__title">
32
+ {localization.discoverLabel}
33
+ </div>
34
+ {/if}
35
+ <button type="button" class="media-center-header-mobile__button" onclick={context.toggleMenu}>
36
+ <Icon src={IconLayoutColumnOneThirdLeft} />
45
37
  </button>
46
38
  </div>
47
39
 
@@ -57,35 +49,32 @@ const styles = $derived.by(() => {
57
49
  }
58
50
  }
59
51
  .media-center-header-mobile {
60
- --_media-center-header-mobile--button-color: var(--media-center-header-mobile--button-color, rgb(from #000000 r g b / 95%));
61
- --_media-center-header-mobile--button-color--inactive: var(
62
- --media-center-header-mobile--button-color--inactive,
63
- rgb(from var(--_media-center-header-mobile--button-color, #000000) r g b / 60%)
64
- );
65
52
  position: absolute;
66
53
  inset: 0;
67
54
  bottom: auto;
68
- padding-block: 0.9375rem;
69
- padding-inline: 0.625rem;
70
55
  z-index: 1;
71
56
  display: flex;
72
57
  justify-content: space-between;
73
58
  align-items: center;
74
59
  }
60
+ .media-center-header-mobile--static {
61
+ position: static;
62
+ }
63
+ .media-center-header-mobile__title {
64
+ font-size: 1.125rem;
65
+ font-weight: 600;
66
+ line-height: 1.4;
67
+ color: #ffffff;
68
+ }
75
69
  .media-center-header-mobile__button {
76
70
  pointer-events: auto;
77
- padding-block: 0.25rem;
71
+ padding-block: 0.5625rem;
78
72
  padding-inline: 1rem;
79
73
  display: flex;
80
74
  justify-content: center;
81
75
  align-items: center;
82
- border-radius: 0.875rem;
83
- background-color: var(--_media-center-header-mobile--button-color--inactive);
84
- border: var(--_media-center-header-mobile--button-color);
85
76
  --icon--size: 1.5rem;
86
77
  --icon--color: #ffffff;
78
+ --icon--filter: drop-shadow(1px 1px 0 rgba(0, 0, 0, 0.2));
87
79
  line-height: 0;
88
- }
89
- .media-center-header-mobile__button--active {
90
- background-color: var(--_media-center-header-mobile--button-color);
91
80
  }</style>
@@ -1,7 +1,8 @@
1
+ import type { Locale } from '../../../core/locale';
1
2
  import type { MediaCenterContext } from '../media-center-context.svelte';
2
3
  type Props = {
3
4
  context: MediaCenterContext;
4
- closeFn: (() => void) | null;
5
+ locale?: Locale;
5
6
  on: {
6
7
  headerHeightChanged: (height: number) => void;
7
8
  };