@streamscloud/embeddable 9.0.0 → 10.1.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 (146) hide show
  1. package/dist/content-player/cmp.content-player.svelte +1 -1
  2. package/dist/content-player/content-player-config.svelte.d.ts +4 -4
  3. package/dist/content-player/controls-and-attachments.svelte +1 -1
  4. package/dist/content-player/header.svelte +1 -1
  5. package/dist/core/actions/horizontal-wheel-scroll.d.ts +1 -0
  6. package/dist/core/actions/horizontal-wheel-scroll.js +9 -8
  7. package/dist/core/document.event-handlers.d.ts +1 -0
  8. package/dist/core/document.event-handlers.js +3 -0
  9. package/dist/media-center/config/internal-media-center-analytics-handler.d.ts +1 -1
  10. package/dist/media-center/config/internal-media-center-config.js +34 -44
  11. package/dist/media-center/config/operations.generated.d.ts +0 -104
  12. package/dist/media-center/config/operations.generated.js +0 -320
  13. package/dist/media-center/config/operations.graphql +0 -24
  14. package/dist/media-center/config/types.d.ts +7 -9
  15. package/dist/media-center/media-center/cmp.media-center.svelte +27 -7
  16. package/dist/media-center/media-center/cmp.media-center.svelte.d.ts +2 -2
  17. package/dist/media-center/media-center/discover-panel-handler.svelte.d.ts +2 -2
  18. package/dist/media-center/media-center/discover-panel.svelte +1 -1
  19. package/dist/media-center/media-center/discover-panel.svelte.d.ts +2 -1
  20. package/dist/media-center/media-center/post-player-provider-generator.d.ts +2 -2
  21. package/dist/media-center/media-center/post-player-provider-generator.js +2 -1
  22. package/dist/media-center/media-center/streams-in-category-panel-handler.svelte.d.ts +5 -2
  23. package/dist/media-center/media-center/streams-in-category-panel-handler.svelte.js +5 -0
  24. package/dist/media-center/media-center/streams-in-category-panel.svelte +2 -2
  25. package/dist/media-center/media-center/streams-in-category-panel.svelte.d.ts +3 -2
  26. package/dist/media-center/media-center/streams-player-provider-generator.d.ts +8 -0
  27. package/dist/media-center/media-center/streams-player-provider-generator.js +36 -0
  28. package/dist/media-center/media-center/types.d.ts +0 -6
  29. package/dist/posts/controls/cmp.controls.svelte +1 -1
  30. package/dist/posts/data-loaders/index.d.ts +1 -0
  31. package/dist/posts/data-loaders/index.js +1 -0
  32. package/dist/posts/{posts-player → data-loaders}/mapper.d.ts +1 -1
  33. package/dist/{short-videos/data-providers → posts/data-loaders}/operations.generated.d.ts +82 -4
  34. package/dist/{short-videos/data-providers → posts/data-loaders}/operations.generated.js +232 -3
  35. package/dist/posts/data-loaders/operations.graphql +17 -0
  36. package/dist/posts/data-loaders/posts-loader.d.ts +19 -0
  37. package/dist/posts/data-loaders/posts-loader.js +28 -0
  38. package/dist/posts/posts-player/index.d.ts +27 -6
  39. package/dist/posts/posts-player/index.js +2 -3
  40. package/dist/posts/posts-player/posts-player-view.svelte +29 -13
  41. package/dist/posts/posts-player/types.d.ts +2 -2
  42. package/dist/short-videos/data-providers/internal-short-video-player-items-provider.d.ts +5 -6
  43. package/dist/short-videos/data-providers/internal-short-video-player-items-provider.js +12 -32
  44. package/dist/short-videos/short-videos-player/index.d.ts +2 -3
  45. package/dist/short-videos/short-videos-player/index.js +1 -1
  46. package/dist/streams/data-loaders/index.d.ts +2 -0
  47. package/dist/streams/data-loaders/index.js +2 -0
  48. package/dist/streams/{stream-player → data-loaders}/mapper.d.ts +1 -1
  49. package/dist/streams/{stream-player → data-loaders}/operations.generated.d.ts +27 -24
  50. package/dist/streams/{stream-player → data-loaders}/operations.generated.js +18 -17
  51. package/dist/streams/{stream-player → data-loaders}/operations.graphql +6 -3
  52. package/dist/streams/data-loaders/stream-pages-loader.d.ts +10 -0
  53. package/dist/streams/data-loaders/stream-pages-loader.js +33 -0
  54. package/dist/streams/data-loaders/streams-loader.d.ts +19 -0
  55. package/dist/streams/data-loaders/streams-loader.js +28 -0
  56. package/dist/streams/layout/cmp.slot-content.svelte +18 -13
  57. package/dist/streams/layout/element-views/cmp.button-stream-element.svelte +26 -0
  58. package/dist/streams/layout/element-views/cmp.button-stream-element.svelte.d.ts +10 -0
  59. package/dist/streams/layout/element-views/cmp.products-slider-stream-element.svelte +43 -0
  60. package/dist/streams/layout/element-views/cmp.products-slider-stream-element.svelte.d.ts +13 -0
  61. package/dist/streams/layout/element-views/cmp.stream-element.svelte +8 -6
  62. package/dist/streams/layout/element-views/index.d.ts +2 -0
  63. package/dist/streams/layout/element-views/index.js +2 -0
  64. package/dist/streams/layout/element-views/price-element-view.svelte +3 -0
  65. package/dist/streams/layout/elements.d.ts +20 -2
  66. package/dist/streams/layout/enums.d.ts +4 -1
  67. package/dist/streams/layout/enums.js +3 -0
  68. package/dist/streams/layout/index.d.ts +1 -0
  69. package/dist/streams/layout/index.js +15 -0
  70. package/dist/streams/layout/serializer.svelte.js +30 -5
  71. package/dist/streams/layout/slot-data-input.d.ts +5 -1
  72. package/dist/streams/layout/slot-data-ref.d.ts +2 -2
  73. package/dist/streams/layout/slot-data.d.ts +6 -1
  74. package/dist/streams/layout/styles-transformer.d.ts +3 -1
  75. package/dist/streams/layout/styles-transformer.js +47 -0
  76. package/dist/streams/layout/styles.d.ts +25 -0
  77. package/dist/streams/layout/type-guards.d.ts +11 -4
  78. package/dist/streams/layout/type-guards.js +17 -3
  79. package/dist/streams/{stream-player → streams-player}/index.d.ts +21 -22
  80. package/dist/streams/{stream-player → streams-player}/index.js +9 -7
  81. package/dist/streams/streams-player/internal-streams-player-data-provider.d.ts +16 -0
  82. package/dist/streams/streams-player/internal-streams-player-data-provider.js +55 -0
  83. package/dist/streams/{stream-player → streams-player}/stream-overview.svelte +18 -15
  84. package/dist/streams/{stream-player → streams-player}/stream-overview.svelte.d.ts +2 -2
  85. package/dist/streams/streams-player/streams-player-buffer.svelte.d.ts +8 -0
  86. package/dist/streams/streams-player/streams-player-buffer.svelte.js +15 -0
  87. package/dist/streams/{stream-player/stream-player-view.svelte → streams-player/streams-player-view.svelte} +69 -55
  88. package/dist/streams/streams-player/streams-player-view.svelte.d.ts +8 -0
  89. package/dist/streams/{stream-player → streams-player}/types.d.ts +9 -7
  90. package/dist/ui/{player-button → player/button}/cmp.player-button.svelte +1 -1
  91. package/dist/ui/{player-button → player/button}/cmp.player-button.svelte.d.ts +1 -1
  92. package/dist/ui/{player-button → player/button}/cmp.player-buttons-group.svelte +1 -1
  93. package/dist/ui/{player-button → player/button}/types.d.ts +1 -1
  94. package/dist/ui/player/button/types.js +1 -0
  95. package/dist/ui/player/providers/chunks-player-buffer/index.d.ts +2 -0
  96. package/dist/ui/player/providers/chunks-player-buffer/index.js +2 -0
  97. package/dist/ui/player/providers/chunks-player-buffer/player-chunk-item.svelte.d.ts +11 -0
  98. package/dist/ui/player/providers/chunks-player-buffer/player-chunk-item.svelte.js +11 -0
  99. package/dist/ui/player/providers/chunks-player-buffer/player-chunk.svelte.d.ts +31 -0
  100. package/dist/ui/player/providers/chunks-player-buffer/player-chunk.svelte.js +67 -0
  101. package/dist/ui/player/providers/chunks-player-buffer/player-chunks-manager.svelte.d.ts +23 -0
  102. package/dist/ui/player/providers/chunks-player-buffer/player-chunks-manager.svelte.js +125 -0
  103. package/dist/ui/player/providers/default-chunks-player-buffer.svelte.d.ts +20 -0
  104. package/dist/ui/player/providers/default-chunks-player-buffer.svelte.js +47 -0
  105. package/dist/ui/player/providers/default-feed-player-buffer.svelte.d.ts +27 -0
  106. package/dist/ui/player/providers/default-feed-player-buffer.svelte.js +78 -0
  107. package/dist/ui/player/providers/index.d.ts +3 -0
  108. package/dist/ui/player/providers/index.js +2 -0
  109. package/dist/ui/player/providers/types.d.ts +49 -0
  110. package/dist/ui/{player-slider → player/slider}/cmp.player-slider.svelte +7 -20
  111. package/dist/ui/{player-slider → player/slider}/cmp.player-slider.svelte.d.ts +4 -4
  112. package/dist/ui/{player-slider → player/slider}/index.d.ts +0 -2
  113. package/dist/ui/{player-slider → player/slider}/index.js +0 -1
  114. package/dist/ui/player/slider/types.d.ts +16 -0
  115. package/dist/ui/player/slider/types.js +1 -0
  116. package/package.json +4 -4
  117. package/dist/posts/posts-player/operations.generated.d.ts +0 -80
  118. package/dist/posts/posts-player/operations.generated.js +0 -229
  119. package/dist/posts/posts-player/operations.graphql +0 -7
  120. package/dist/short-videos/data-providers/operations.graphql +0 -9
  121. package/dist/streams/layout/element-views/stream-element-localization.d.ts +0 -7
  122. package/dist/streams/layout/element-views/stream-element-localization.js +0 -11
  123. package/dist/streams/stream-player/internal-stream-player-data-provider.d.ts +0 -12
  124. package/dist/streams/stream-player/internal-stream-player-data-provider.js +0 -48
  125. package/dist/streams/stream-player/stream-player-buffer.svelte.d.ts +0 -28
  126. package/dist/streams/stream-player/stream-player-buffer.svelte.js +0 -79
  127. package/dist/streams/stream-player/stream-player-view.svelte.d.ts +0 -8
  128. package/dist/ui/player-button/types.js +0 -1
  129. package/dist/ui/player-slider/player-buffer.svelte.d.ts +0 -32
  130. package/dist/ui/player-slider/player-buffer.svelte.js +0 -76
  131. package/dist/ui/player-slider/types.d.ts +0 -26
  132. /package/dist/posts/{posts-player → data-loaders}/mapper.js +0 -0
  133. /package/dist/streams/{stream-player → data-loaders}/mapper.js +0 -0
  134. /package/dist/streams/{stream-player → streams-player}/internal-stream-analytics-handler.d.ts +0 -0
  135. /package/dist/streams/{stream-player → streams-player}/internal-stream-analytics-handler.js +0 -0
  136. /package/dist/streams/{stream-player → streams-player}/stream-player-localization.d.ts +0 -0
  137. /package/dist/streams/{stream-player → streams-player}/stream-player-localization.js +0 -0
  138. /package/dist/streams/{stream-player → streams-player}/types.js +0 -0
  139. /package/dist/ui/{player-button → player/button}/cmp.player-buttons-group.svelte.d.ts +0 -0
  140. /package/dist/ui/{player-button → player/button}/index.d.ts +0 -0
  141. /package/dist/ui/{player-button → player/button}/index.js +0 -0
  142. /package/dist/ui/{player-slider → player/providers}/types.js +0 -0
  143. /package/dist/ui/{player-slider → player/slider}/prevent-slider-scroll.d.ts +0 -0
  144. /package/dist/ui/{player-slider → player/slider}/prevent-slider-scroll.js +0 -0
  145. /package/dist/ui/{player-slider → player/slider}/wheel-gestures-adapter.d.ts +0 -0
  146. /package/dist/ui/{player-slider → player/slider}/wheel-gestures-adapter.js +0 -0
@@ -18,27 +18,3 @@ query GetMediaPageConfig($mediaPageId: String!) {
18
18
  }
19
19
  }
20
20
  }
21
-
22
- # noinspection GraphQLSchemaValidation
23
- query GetPosts($input: EmbedPostsInput!, $image_scale: ImageScale = ORIGINAL_ENCODED) {
24
- posts: embedPosts(input: $input) {
25
- items {
26
- ...PostsPlayerPayloadFragment
27
- }
28
- continuationToken
29
- }
30
- }
31
-
32
- query GetStreams($input: EmbedStreamsInput!) {
33
- streams: embedStreams(input: $input) {
34
- items {
35
- id
36
- cover {
37
- url
38
- }
39
- title
40
- subTitle
41
- }
42
- continuationToken
43
- }
44
- }
@@ -2,7 +2,8 @@ import { PostType } from '../../core/enums';
2
2
  import type { IContentCategoryFollowingHandler } from '../categories-following';
3
3
  import type { IPostAnalyticsHandler, PostPlayerModel } from '../../posts/posts-player/types';
4
4
  import type { IPostSocialInteractionsHandler } from '../../posts/social-interactions';
5
- import type { IStreamPlayerDataProvider, IStreamAnalyticsHandler } from '../../streams/stream-player/types';
5
+ import type { StreamPageViewerModel } from '../../streams/stream-page-viewer';
6
+ import type { IStreamAnalyticsHandler, StreamPlayerModel } from '../../streams/streams-player/types';
6
7
  export interface IMediaCenterConfig {
7
8
  getConfig: () => Promise<MediaCenterConfigModel | null>;
8
9
  handlers?: {
@@ -33,10 +34,13 @@ export interface IMediaCenterConfig {
33
34
  limit: number;
34
35
  continuationToken?: string | null;
35
36
  }) => Promise<{
36
- items: MediaCenterStreamPreviewModel[];
37
+ items: StreamPlayerModel[];
38
+ continuationToken: string | null;
39
+ }>;
40
+ getStreamPages: (streamId: string, continuationToken: string | null | undefined) => Promise<{
41
+ items: StreamPageViewerModel[];
37
42
  continuationToken: string | null;
38
43
  }>;
39
- streamPlayerDataProvider: IStreamPlayerDataProvider;
40
44
  };
41
45
  }
42
46
  export type MediaCenterConfigModel = {
@@ -48,12 +52,6 @@ export type MediaCenterConfigModel = {
48
52
  }[];
49
53
  targetData: MediaCenterTargetDataModel;
50
54
  };
51
- export type MediaCenterStreamPreviewModel = {
52
- id: string;
53
- title: string;
54
- subTitle: string | null;
55
- cover: string | null;
56
- };
57
55
  export type MediaCenterTargetDataModel = {
58
56
  id: string;
59
57
  name: string;
@@ -10,10 +10,10 @@
10
10
  import { horizontalWheelScroll } from '../../core/actions';
11
11
  import { Utils } from '../../core/utils';
12
12
  import { default as PostsPlayerView } from '../../posts/posts-player/posts-player-view.svelte';
13
- import { default as StreamPlayerView } from '../../streams/stream-player/stream-player-view.svelte';
13
+ import { default as StreamsPlayerView } from '../../streams/streams-player/streams-player-view.svelte';
14
14
  import { Icon } from '../../ui/icon';
15
15
  import { Loading } from '../../ui/loading';
16
- import { PlayerButton } from '../../ui/player-button';
16
+ import { PlayerButton } from '../../ui/player/button';
17
17
  import { default as DesktopCategoriesSelector } from './desktop-categories-selector.svelte';
18
18
  import { DiscoverPanelHandler } from './discover-panel-handler.svelte';
19
19
  import { default as DiscoverPanel } from './discover-panel.svelte';
@@ -23,6 +23,7 @@ import { default as MobileControlsPanel } from './mobile-controls-panel.svelte';
23
23
  import { makePostPlayerItemsProvider } from './post-player-provider-generator';
24
24
  import { StreamsInCategoryPanelHandler } from './streams-in-category-panel-handler.svelte';
25
25
  import { default as StreamsInCategoryPanel } from './streams-in-category-panel.svelte';
26
+ import { makeStreamsPlayerDataProvider } from './streams-player-provider-generator';
26
27
  import IconLineHorizontal3 from '@fluentui/svg-icons/icons/line_horizontal_3_20_regular.svg?raw';
27
28
  import IconScreenSearch from '@fluentui/svg-icons/icons/screen_search_20_regular.svg?raw';
28
29
  import { tick } from 'svelte';
@@ -140,7 +141,7 @@ const activateSelectedShortVideoPlayer = (shortVideo) => {
140
141
  discoverHandler.deactivate();
141
142
  streamsInCategoryHandler.deactivate();
142
143
  };
143
- const activateSelectedStreamPlayer = (id) => {
144
+ const activateSelectedStreamPlayer = (stream) => {
144
145
  var _a, _b;
145
146
  if (!config) {
146
147
  return;
@@ -148,7 +149,21 @@ const activateSelectedStreamPlayer = (id) => {
148
149
  mediaCenterMode = 'stream';
149
150
  computedPlayerProps = {
150
151
  mode: 'stream',
151
- props: Object.assign({ streamId: id, dataProvider: config.streamPlayer.streamPlayerDataProvider, analyticsHandler: (_a = config.handlers) === null || _a === void 0 ? void 0 : _a.analyticsHandler, postSocialInteractionsHandler: (_b = config.handlers) === null || _b === void 0 ? void 0 : _b.socialInteractionsHandler }, commonPlayerSettings)
152
+ props: Object.assign({ dataProvider: makeStreamsPlayerDataProvider({ config, prefetchedStreams: [stream] }), analyticsHandler: (_a = config.handlers) === null || _a === void 0 ? void 0 : _a.analyticsHandler, postSocialInteractionsHandler: (_b = config.handlers) === null || _b === void 0 ? void 0 : _b.socialInteractionsHandler }, commonPlayerSettings)
153
+ };
154
+ handler.selectedCategoryId = null;
155
+ discoverHandler.deactivate();
156
+ streamsInCategoryHandler.deactivate();
157
+ };
158
+ const activateSelectedStreamOfCategoryPlayer = (id, prefetchedStreams, categoryId) => {
159
+ var _a, _b;
160
+ if (!config) {
161
+ return;
162
+ }
163
+ mediaCenterMode = 'stream';
164
+ computedPlayerProps = {
165
+ mode: 'stream',
166
+ props: Object.assign({ dataProvider: makeStreamsPlayerDataProvider({ config, prefetchedStreams: prefetchedStreams, initialStreamId: id, categoryId }), analyticsHandler: (_a = config.handlers) === null || _a === void 0 ? void 0 : _a.analyticsHandler, postSocialInteractionsHandler: (_b = config.handlers) === null || _b === void 0 ? void 0 : _b.socialInteractionsHandler }, commonPlayerSettings)
152
167
  };
153
168
  handler.selectedCategoryId = null;
154
169
  discoverHandler.deactivate();
@@ -272,7 +287,7 @@ const onWidthAnchorMounted = (node) => {
272
287
  callbacks: { onHeaderHeightChanged, onExtraActionsForMobileControlsPanelDetermined }
273
288
  }} />
274
289
  {:else if computedPlayerProps.mode === 'stream'}
275
- <StreamPlayerView
290
+ <StreamsPlayerView
276
291
  {...computedPlayerProps.props}
277
292
  mediaCenterData={{
278
293
  controlsPanel: handler.categories.length ? controlsPanel : undefined,
@@ -290,13 +305,18 @@ const onWidthAnchorMounted = (node) => {
290
305
  <DiscoverPanel
291
306
  handler={discoverHandler}
292
307
  localization={localization}
293
- on={{ shortVideoSelected: (shortVideo) => activateSelectedShortVideoPlayer(shortVideo), streamSelected: (id) => activateSelectedStreamPlayer(id) }} />
308
+ on={{
309
+ shortVideoSelected: (shortVideo) => activateSelectedShortVideoPlayer(shortVideo),
310
+ streamSelected: (stream) => activateSelectedStreamPlayer(stream)
311
+ }} />
294
312
  </div>
295
313
  {/if}
296
314
 
297
315
  {#if streamsInCategoryHandler.active}
298
316
  <div class="media-center-overlay" style={`top:${headerHeight}px`} transition:fade={{ duration: 300 }}>
299
- <StreamsInCategoryPanel handler={streamsInCategoryHandler} on={{ streamSelected: (id) => activateSelectedStreamPlayer(id) }} />
317
+ <StreamsInCategoryPanel
318
+ handler={streamsInCategoryHandler}
319
+ on={{ streamSelected: (id, categoryId, streams) => activateSelectedStreamOfCategoryPlayer(id, streams, categoryId) }} />
300
320
  </div>
301
321
  {/if}
302
322
 
@@ -1,13 +1,13 @@
1
1
  import type { Locale } from '../../core/locale';
2
2
  import type { IMediaCenterConfig } from '../config/types';
3
3
  import type { PostPlayerProps } from '../../posts/posts-player/types';
4
- import type { StreamPlayerProps } from '../../streams/stream-player/types';
4
+ import type { StreamsPlayerProps } from '../../streams/streams-player/types';
5
5
  type PlayerProps = {
6
6
  mode: 'posts';
7
7
  props: PostPlayerProps;
8
8
  } | {
9
9
  mode: 'stream';
10
- props: StreamPlayerProps;
10
+ props: StreamsPlayerProps;
11
11
  };
12
12
  type Props = {
13
13
  config: IMediaCenterConfig | null;
@@ -2,7 +2,7 @@ import type { TrackingParams } from '../../marketing-tracking';
2
2
  import type { IMediaCenterConfig } from '..';
3
3
  import type { PostPlayerModel } from '../../posts/posts-player';
4
4
  import type { ProductCardModel } from '../../products/product-card';
5
- import type { MediaCenterStreamModel } from './types';
5
+ import type { StreamPlayerModel } from '../../streams/streams-player';
6
6
  export declare class DiscoverPanelHandler {
7
7
  private readonly config;
8
8
  private _activated;
@@ -11,7 +11,7 @@ export declare class DiscoverPanelHandler {
11
11
  private _shortVideos;
12
12
  private _products;
13
13
  constructor(config: IMediaCenterConfig | null);
14
- get streamSectionItems(): MediaCenterStreamModel[];
14
+ get streamSectionItems(): StreamPlayerModel[];
15
15
  get shortVideoSectionItems(): ShortVideoSectionItemType[];
16
16
  get activated(): boolean;
17
17
  get active(): boolean;
@@ -16,7 +16,7 @@ let { handler, localization, on } = $props();
16
16
  </div>
17
17
  <div class="media-center-overview__section-content">
18
18
  {#each handler.streamSectionItems as item (item.id)}
19
- <StreamCard stream={item} on={{ click: () => on.streamSelected(item.id) }}></StreamCard>
19
+ <StreamCard stream={item} on={{ click: () => on.streamSelected(item) }}></StreamCard>
20
20
  {/each}
21
21
  </div>
22
22
  </div>
@@ -1,4 +1,5 @@
1
1
  import type { PostPlayerModel } from '../../posts/posts-player';
2
+ import type { StreamPlayerModel } from '../../streams/streams-player';
2
3
  import { DiscoverPanelHandler } from './discover-panel-handler.svelte';
3
4
  import { MediaCenterLocalization } from './media-center-localization';
4
5
  type Props = {
@@ -6,7 +7,7 @@ type Props = {
6
7
  localization: MediaCenterLocalization;
7
8
  on: {
8
9
  shortVideoSelected: (shortVideo: PostPlayerModel) => void;
9
- streamSelected: (id: string) => void;
10
+ streamSelected: (stream: StreamPlayerModel) => void;
10
11
  };
11
12
  };
12
13
  declare const DiscoverPanel: import("svelte").Component<Props, {}, "">;
@@ -1,8 +1,8 @@
1
1
  import type { PostPlayerModel } from '../../posts/posts-player';
2
- import type { IPlayerItemsProvider } from '../../ui/player-slider';
2
+ import type { IFeedPlayerDataProvider } from '../../ui/player/providers';
3
3
  import type { IMediaCenterConfig } from '../config/types';
4
4
  export declare const makePostPlayerItemsProvider: (data: {
5
5
  config: IMediaCenterConfig;
6
6
  categoryId?: string;
7
7
  prefetchedItems?: PostPlayerModel[];
8
- }) => IPlayerItemsProvider<PostPlayerModel>;
8
+ }) => IFeedPlayerDataProvider<PostPlayerModel>;
@@ -1,6 +1,6 @@
1
- import { PostType } from '../..';
2
1
  import { ContinuationToken } from '../../core/continuation-token';
3
2
  import { CursorDataLoader } from '../../core/data-loaders';
3
+ import { PostType } from '../../core/enums';
4
4
  export const makePostPlayerItemsProvider = (data) => {
5
5
  const { config, categoryId, prefetchedItems = [] } = data;
6
6
  const loader = new CursorDataLoader({
@@ -22,6 +22,7 @@ export const makePostPlayerItemsProvider = (data) => {
22
22
  }
23
23
  });
24
24
  return {
25
+ kind: 'feed',
25
26
  initialData: {
26
27
  prefetchedItems,
27
28
  startIndex: prefetchedItems.length ? 0 : -1
@@ -1,13 +1,16 @@
1
1
  import type { IMediaCenterConfig } from '../../short-videos/short-videos-player';
2
- import type { MediaCenterCategoryData, MediaCenterStreamModel } from './types';
2
+ import type { StreamPlayerModel } from '../../streams/streams-player';
3
+ import type { MediaCenterCategoryData } from './types';
3
4
  export declare class StreamsInCategoryPanelHandler {
4
5
  private readonly config;
5
6
  private _activated;
6
7
  private _state;
8
+ private _categoryId;
7
9
  private _categoryName;
8
10
  private _streams;
9
11
  constructor(config: IMediaCenterConfig | null);
10
- get streamSectionItems(): MediaCenterStreamModel[];
12
+ get streamSectionItems(): StreamPlayerModel[];
13
+ get categoryId(): string;
11
14
  get categoryName(): string;
12
15
  get activated(): boolean;
13
16
  get active(): boolean;
@@ -2,6 +2,7 @@ export class StreamsInCategoryPanelHandler {
2
2
  config;
3
3
  _activated = $state(false);
4
4
  _state = $state('loading');
5
+ _categoryId = $state.raw('');
5
6
  _categoryName = $state.raw('');
6
7
  _streams = $state.raw([]);
7
8
  constructor(config) {
@@ -10,6 +11,9 @@ export class StreamsInCategoryPanelHandler {
10
11
  get streamSectionItems() {
11
12
  return this._streams;
12
13
  }
14
+ get categoryId() {
15
+ return this._categoryId;
16
+ }
13
17
  get categoryName() {
14
18
  return this._categoryName;
15
19
  }
@@ -31,6 +35,7 @@ export class StreamsInCategoryPanelHandler {
31
35
  try {
32
36
  const streamsResponse = await this.config.streamPlayer.getStreamsCursor({ filter: { categoryId: category.id }, limit: 5 });
33
37
  this._categoryName = category.parentName ? `${category.parentName} - ${category.name}` : category.name;
38
+ this._categoryId = category.id;
34
39
  this._streams = streamsResponse.items;
35
40
  }
36
41
  finally {
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">import { StreamCard } from '../../streams/stream-card';
2
- import { StreamsInCategoryPanelHandler } from './streams-in-category-panel-handler.svelte.js';
2
+ import { StreamsInCategoryPanelHandler } from './streams-in-category-panel-handler.svelte';
3
3
  let { handler, on } = $props();
4
4
  </script>
5
5
 
@@ -12,7 +12,7 @@ let { handler, on } = $props();
12
12
  </div>
13
13
  <div class="streams-in-category__section-content">
14
14
  {#each handler.streamSectionItems as item (item.id)}
15
- <StreamCard stream={item} on={{ click: () => on.streamSelected(item.id) }}></StreamCard>
15
+ <StreamCard stream={item} on={{ click: () => on.streamSelected(item.id, handler.categoryId, handler.streamSectionItems) }}></StreamCard>
16
16
  {/each}
17
17
  </div>
18
18
  </div>
@@ -1,8 +1,9 @@
1
- import { StreamsInCategoryPanelHandler } from './streams-in-category-panel-handler.svelte.js';
1
+ import type { StreamPlayerModel } from '../../streams/streams-player';
2
+ import { StreamsInCategoryPanelHandler } from './streams-in-category-panel-handler.svelte';
2
3
  type Props = {
3
4
  handler: StreamsInCategoryPanelHandler;
4
5
  on: {
5
- streamSelected: (id: string) => void;
6
+ streamSelected: (streamId: string, categoryId: string, streams: StreamPlayerModel[]) => void;
6
7
  };
7
8
  };
8
9
  declare const StreamsInCategoryPanel: import("svelte").Component<Props, {}, "">;
@@ -0,0 +1,8 @@
1
+ import type { IStreamsPlayerDataProvider, StreamPlayerModel } from '../../streams/streams-player/types';
2
+ import type { IMediaCenterConfig } from '../config/types';
3
+ export declare const makeStreamsPlayerDataProvider: (data: {
4
+ config: IMediaCenterConfig;
5
+ initialStreamId?: string;
6
+ categoryId?: string;
7
+ prefetchedStreams?: StreamPlayerModel[];
8
+ }) => IStreamsPlayerDataProvider;
@@ -0,0 +1,36 @@
1
+ import { ContinuationToken } from '../../core/continuation-token';
2
+ import { CursorDataLoader } from '../../core/data-loaders';
3
+ export const makeStreamsPlayerDataProvider = (data) => {
4
+ const { config, categoryId, prefetchedStreams: initialPrefetchedStreams = [], initialStreamId } = data;
5
+ const loader = new CursorDataLoader({
6
+ loadPage: async (continuationToken) => {
7
+ const result = await config.streamPlayer.getStreamsCursor({
8
+ filter: {
9
+ categoryId,
10
+ excludeIds: initialPrefetchedStreams.length ? initialPrefetchedStreams.map((i) => i.id) : undefined
11
+ },
12
+ continuationToken: continuationToken.toNextChunkString(),
13
+ limit: 20
14
+ });
15
+ const items = result.items;
16
+ return {
17
+ items: items,
18
+ continuationToken: ContinuationToken.fromPayload(result.continuationToken)
19
+ };
20
+ }
21
+ });
22
+ let prefetchedStreams = initialPrefetchedStreams;
23
+ if (initialStreamId) {
24
+ const targetStream = prefetchedStreams.find((stream) => stream.id === initialStreamId);
25
+ if (targetStream) {
26
+ prefetchedStreams = [targetStream, ...prefetchedStreams.filter((stream) => stream.id !== initialStreamId)];
27
+ }
28
+ }
29
+ return {
30
+ initialData: {
31
+ prefetchedStreams
32
+ },
33
+ loadMoreStreams: loader.loadMore,
34
+ getStreamPages: config.streamPlayer.getStreamPages
35
+ };
36
+ };
@@ -1,10 +1,4 @@
1
1
  export type MediaCenterMode = 'stream' | 'posts';
2
- export type MediaCenterStreamModel = {
3
- id: string;
4
- title: string;
5
- subTitle: string | null;
6
- cover: string | null;
7
- };
8
2
  export type MediaCenterCategoryData = {
9
3
  id: string;
10
4
  name: string;
@@ -9,7 +9,7 @@
9
9
  };
10
10
  import { IconColor } from '../../ui/icon';
11
11
  import { MediaVolumeManager } from '../../ui/media-playback';
12
- import { PlayerButton, PlayerButtonsGroup } from '../../ui/player-button';
12
+ import { PlayerButton, PlayerButtonsGroup } from '../../ui/player/button';
13
13
  import IconHeartFilled from '@fluentui/svg-icons/icons/heart_20_filled.svg?raw';
14
14
  import IconHeart from '@fluentui/svg-icons/icons/heart_28_regular.svg?raw';
15
15
  import IconShare from '@fluentui/svg-icons/icons/share_28_regular.svg?raw';
@@ -0,0 +1 @@
1
+ export { getPostsCursor } from './posts-loader';
@@ -0,0 +1 @@
1
+ export { getPostsCursor } from './posts-loader';
@@ -1,3 +1,3 @@
1
+ import type { PostPlayerModel } from '../posts-player/types';
1
2
  import type { PostsPlayerPayloadFragment } from './operations.generated';
2
- import type { PostPlayerModel } from './types';
3
3
  export declare const mapToPostPlayerModel: (payload: PostsPlayerPayloadFragment) => PostPlayerModel;
@@ -1,11 +1,11 @@
1
1
  import type * as SchemaTypes from '../../../gql/types';
2
2
  import type { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core';
3
- export type GetShortVideosQueryVariables = SchemaTypes.Exact<{
3
+ export type GetPostsQueryVariables = SchemaTypes.Exact<{
4
4
  input: SchemaTypes.EmbedPostsInput;
5
5
  image_scale?: SchemaTypes.InputMaybe<SchemaTypes.ImageScale>;
6
6
  }>;
7
- export type GetShortVideosQuery = {
8
- shortVideos: {
7
+ export type GetPostsQuery = {
8
+ posts: {
9
9
  continuationToken: string | null;
10
10
  items: Array<{
11
11
  id: string;
@@ -86,4 +86,82 @@ export type GetShortVideosQuery = {
86
86
  }>;
87
87
  };
88
88
  };
89
- export declare const GetShortVideosDocument: DocumentNode<GetShortVideosQuery, GetShortVideosQueryVariables>;
89
+ export type PostsPlayerPayloadFragment = {
90
+ id: string;
91
+ enableSocialInteractions: boolean;
92
+ ownerProfile: {
93
+ id: string;
94
+ type: SchemaTypes.ProfileType;
95
+ };
96
+ allProducts: Array<{
97
+ id: string;
98
+ title: string;
99
+ shortDescription: string | null;
100
+ link: string | null;
101
+ media: Array<{
102
+ url: string;
103
+ thumbnailUrl: string | null;
104
+ type: SchemaTypes.MediaType;
105
+ }>;
106
+ brand: {
107
+ name: string;
108
+ } | null;
109
+ priceAndAvailability: {
110
+ currency: SchemaTypes.Currency;
111
+ price: number;
112
+ productSalePrices: Array<{
113
+ salePrice: number;
114
+ salePriceEffectiveDateFrom: any | null;
115
+ salePriceEffectiveDateTo: any | null;
116
+ }> | null;
117
+ };
118
+ }>;
119
+ ad: {
120
+ id: string;
121
+ title: string;
122
+ description: string | null;
123
+ price: number | null;
124
+ priceInfo: string | null;
125
+ currency: SchemaTypes.Currency | null;
126
+ type: SchemaTypes.AdType;
127
+ ctaButton: {
128
+ background: string;
129
+ textColor: string;
130
+ text: string;
131
+ url: string;
132
+ border: string;
133
+ } | null;
134
+ media: Array<{
135
+ url: string;
136
+ thumbnailUrl: string | null;
137
+ type: SchemaTypes.MediaType;
138
+ }>;
139
+ } | null;
140
+ postData: {
141
+ media: Array<{
142
+ url: string;
143
+ thumbnailUrl: string | null;
144
+ type: SchemaTypes.MediaType;
145
+ }>;
146
+ articleData: {
147
+ title: string;
148
+ kicker: string | null;
149
+ articleId: string;
150
+ } | null;
151
+ mediaData: {
152
+ text: string | null;
153
+ } | null;
154
+ momentData: {
155
+ text: string | null;
156
+ } | null;
157
+ shortVideoData: {
158
+ text: string | null;
159
+ } | null;
160
+ videoData: {
161
+ title: string | null;
162
+ text: string | null;
163
+ } | null;
164
+ };
165
+ };
166
+ export declare const PostsPlayerPayloadFragmentDoc: DocumentNode<PostsPlayerPayloadFragment, unknown>;
167
+ export declare const GetPostsDocument: DocumentNode<GetPostsQuery, GetPostsQueryVariables>;