@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
@@ -7,19 +7,40 @@ import { getStreamPagesCursor, getStreamsCursor } from '../../streams/data-loade
7
7
  import { InternalMediaCenterAnalyticsHandler } from './internal-media-center-analytics-handler';
8
8
  import { GetMediaPageConfigDocument } from './operations.generated';
9
9
  export class InternalMediaCenterConfig {
10
- mediaPageId;
11
10
  postsPlayer;
12
11
  streamPlayer;
13
12
  handlers;
13
+ getConfig;
14
14
  graphql;
15
- constructor(mediaPageId, graphqlOrigin, testingStuff) {
16
- this.mediaPageId = mediaPageId;
17
- this.graphql = createLocalGQLClient(graphqlOrigin);
15
+ constructor(input) {
16
+ const { mediaPageId, graphqlOrigin, initiator, testingStuff } = input;
17
+ this.graphql = createLocalGQLClient(graphqlOrigin, initiator ? { 'x-initiator': initiator } : undefined);
18
+ this.getConfig = async () => {
19
+ const payload = await this.graphql.query(GetMediaPageConfigDocument, { mediaPageId }).toPromise();
20
+ if (!payload.data?.embedMediaPagePlayerConfig) {
21
+ return null;
22
+ }
23
+ const config = payload.data.embedMediaPagePlayerConfig;
24
+ return {
25
+ targetData: {
26
+ id: config.mediaPage.id,
27
+ handle: config.mediaPage.handle,
28
+ name: config.mediaPage.name,
29
+ description: config.mediaPage.description,
30
+ image: config.mediaPage.image?.url || null,
31
+ logo: config.mediaPage.logo?.url || null,
32
+ banner: config.mediaPage.banner?.url || null,
33
+ membersCount: config.mediaPage.membersCount
34
+ },
35
+ contentCategories: config.playerSettings?.contentCategories || [],
36
+ playerColors: config.playerSettings?.colors || null
37
+ };
38
+ };
18
39
  this.postsPlayer = {
19
40
  getPostsCursor: async ({ filter, limit, continuationToken }) => {
20
41
  return await getPostsCursor({
21
42
  filter: {
22
- mediaPageId: this.mediaPageId,
43
+ mediaPageId,
23
44
  types: filter.types,
24
45
  statuses: [Status.Published],
25
46
  categoryId: filter.categoryId,
@@ -35,7 +56,7 @@ export class InternalMediaCenterConfig {
35
56
  getStreamsCursor: async ({ filter, limit, continuationToken }) => {
36
57
  return await getStreamsCursor({
37
58
  filter: {
38
- mediaPageId: this.mediaPageId,
59
+ mediaPageId,
39
60
  categoryId: filter.categoryId,
40
61
  excludeIds: filter.excludeIds,
41
62
  statuses: [StreamStatus.Published],
@@ -60,22 +81,4 @@ export class InternalMediaCenterConfig {
60
81
  socialInteractionsHandler: testingStuff ? new MockPostSocialInteractionsHandler() : undefined
61
82
  };
62
83
  }
63
- getConfig = async () => {
64
- const payload = await this.graphql.query(GetMediaPageConfigDocument, { mediaPageId: this.mediaPageId }).toPromise();
65
- if (!payload.data?.embedMediaPagePlayerConfig) {
66
- return null;
67
- }
68
- const config = payload.data.embedMediaPagePlayerConfig;
69
- return {
70
- targetData: {
71
- id: config.mediaPage.id,
72
- name: config.mediaPage.name,
73
- image: config.mediaPage.image,
74
- membersCount: config.mediaPage.membersCount
75
- },
76
- logo: config.playerSettings?.logo?.url || null,
77
- contentCategories: config.playerSettings?.contentCategories || [],
78
- playerColors: config.playerSettings?.colors || null
79
- };
80
- };
81
84
  }
@@ -7,14 +7,21 @@ export type GetMediaPageConfigQuery = {
7
7
  embedMediaPagePlayerConfig: {
8
8
  mediaPage: {
9
9
  id: string;
10
+ handle: string;
10
11
  name: string;
11
- image: string | null;
12
+ description: string;
12
13
  membersCount: number;
13
- };
14
- playerSettings: {
14
+ image: {
15
+ url: string;
16
+ } | null;
15
17
  logo: {
16
18
  url: string;
17
19
  } | null;
20
+ banner: {
21
+ url: string;
22
+ } | null;
23
+ };
24
+ playerSettings: {
18
25
  contentCategories: Array<{
19
26
  id: string;
20
27
  name: string;
@@ -44,8 +44,24 @@ export const GetMediaPageConfigDocument = {
44
44
  kind: 'SelectionSet',
45
45
  selections: [
46
46
  { kind: 'Field', name: { kind: 'Name', value: 'id' } },
47
+ { kind: 'Field', name: { kind: 'Name', value: 'handle' } },
47
48
  { kind: 'Field', name: { kind: 'Name', value: 'name' } },
48
- { kind: 'Field', name: { kind: 'Name', value: 'image' } },
49
+ { kind: 'Field', name: { kind: 'Name', value: 'description' } },
50
+ {
51
+ kind: 'Field',
52
+ name: { kind: 'Name', value: 'image' },
53
+ selectionSet: { kind: 'SelectionSet', selections: [{ kind: 'Field', name: { kind: 'Name', value: 'url' } }] }
54
+ },
55
+ {
56
+ kind: 'Field',
57
+ name: { kind: 'Name', value: 'logo' },
58
+ selectionSet: { kind: 'SelectionSet', selections: [{ kind: 'Field', name: { kind: 'Name', value: 'url' } }] }
59
+ },
60
+ {
61
+ kind: 'Field',
62
+ name: { kind: 'Name', value: 'banner' },
63
+ selectionSet: { kind: 'SelectionSet', selections: [{ kind: 'Field', name: { kind: 'Name', value: 'url' } }] }
64
+ },
49
65
  { kind: 'Field', name: { kind: 'Name', value: 'membersCount' } }
50
66
  ]
51
67
  }
@@ -56,11 +72,6 @@ export const GetMediaPageConfigDocument = {
56
72
  selectionSet: {
57
73
  kind: 'SelectionSet',
58
74
  selections: [
59
- {
60
- kind: 'Field',
61
- name: { kind: 'Name', value: 'logo' },
62
- selectionSet: { kind: 'SelectionSet', selections: [{ kind: 'Field', name: { kind: 'Name', value: 'url' } }] }
63
- },
64
75
  {
65
76
  kind: 'Field',
66
77
  name: { kind: 'Name', value: 'contentCategories' },
@@ -2,14 +2,21 @@ query GetMediaPageConfig($mediaPageId: String!) {
2
2
  embedMediaPagePlayerConfig(input: { mediaPageId: $mediaPageId }) {
3
3
  mediaPage {
4
4
  id
5
+ handle
5
6
  name
6
- image
7
- membersCount
8
- }
9
- playerSettings {
7
+ description
8
+ image {
9
+ url
10
+ }
10
11
  logo {
11
12
  url
12
13
  }
14
+ banner {
15
+ url
16
+ }
17
+ membersCount
18
+ }
19
+ playerSettings {
13
20
  contentCategories {
14
21
  id
15
22
  name
@@ -2,7 +2,7 @@ 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 { StreamPageViewerModel } from '../../streams/stream-page-viewer';
5
+ import type { StreamPageViewerModel } from '../../streams/stream-page-viewer/types';
6
6
  import type { IStreamAnalyticsHandler, StreamPlayerModel } from '../../streams/streams-player/types';
7
7
  export interface IMediaCenterConfig {
8
8
  getConfig: () => Promise<MediaCenterConfigModel | null>;
@@ -44,7 +44,6 @@ export interface IMediaCenterConfig {
44
44
  };
45
45
  }
46
46
  export type MediaCenterConfigModel = {
47
- logo: string | null;
48
47
  contentCategories: {
49
48
  id: string;
50
49
  name: string;
@@ -70,4 +69,8 @@ export type MediaCenterTargetDataModel = {
70
69
  name: string;
71
70
  image: string | null;
72
71
  membersCount: number;
72
+ logo: string | null;
73
+ handle: string;
74
+ description: string | null;
75
+ banner: string | null;
73
76
  };
@@ -7,137 +7,91 @@
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
- var _a;
11
10
  import { Utils } from '../../core/utils';
12
11
  import { default as PostsPlayerView } from '../../posts/posts-player/posts-player-view.svelte';
13
12
  import { default as StreamsPlayerView } from '../../streams/streams-player/streams-player-view.svelte';
14
13
  import { Loading } from '../../ui/loading';
14
+ import { WithBackground } from '../../ui/with-background';
15
15
  import { DiscoverPanel } from './discover';
16
16
  import { MediaCenterHeader, MediaCenterFooter, MediaCenterHeaderMobile } from './header-footer';
17
- import { MediaCenterContext } from './media-center-context.svelte.js';
17
+ import { MediaCenterContext } from './media-center-context.svelte';
18
18
  import { Menu } from './menu';
19
- import { makePostPlayerItemsProvider, makeStreamsPlayerDataProvider } from './providers';
20
19
  import { StreamsInCategoryPanel } from './streams-in-category';
21
20
  import { fade } from 'svelte/transition';
22
- let { config, playerProps, locale = 'en' } = $props();
23
- const enhancedPlayerSettings = () => {
24
- const playerSettings = playerProps.mode === 'discover' ? {} : Object.assign({}, playerProps.props.playerSettings);
25
- playerSettings.playerColors = context.playerColors;
26
- return playerSettings;
27
- };
28
- const commonPlayerProps = () => {
29
- return {
30
- playerSettings: enhancedPlayerSettings(),
31
- on: playerProps.mode !== 'discover' ? playerProps === null || playerProps === void 0 ? void 0 : playerProps.props.on : undefined
32
- };
33
- };
34
- const mapToMediaCenterMode = (propsMode) => {
35
- switch (propsMode) {
36
- case 'posts':
37
- return 'posts-feed';
38
- case 'streams':
39
- return 'streams-feed';
40
- case 'discover':
41
- return 'discover';
42
- default:
43
- return Utils.assertUnreachable(propsMode);
44
- }
45
- };
46
- let mediaCenterMode = $state(mapToMediaCenterMode(playerProps.mode));
21
+ let { config, modeProps, settings, closeOrchestrator } = $props();
47
22
  const context = new MediaCenterContext({
48
23
  config,
49
- followingHandler: (_a = config === null || config === void 0 ? void 0 : config.handlers) === null || _a === void 0 ? void 0 : _a.categoriesFollowingHandler,
24
+ closeOrchestrator,
25
+ settings,
50
26
  on: {
51
- initialized: () => {
52
- switch (mediaCenterMode) {
53
- case 'posts-feed':
54
- context.activateFeed({ categoryId: null });
27
+ initialized: (instance) => {
28
+ switch (modeProps.mode) {
29
+ case 'posts':
30
+ instance.playPostsFeed({
31
+ dataProvider: modeProps.props.dataProvider,
32
+ onPostActivated: modeProps.props.onPostActivated
33
+ });
55
34
  break;
56
- case 'streams-feed':
57
- context.activateFeed({ categoryId: null });
35
+ case 'streams':
36
+ instance.playStreamsFeed({
37
+ dataProvider: modeProps.props.dataProvider,
38
+ onStreamActivated: modeProps.props.onStreamActivated
39
+ });
58
40
  break;
59
41
  case 'discover':
60
- context.activateDiscover();
42
+ instance.activateDiscover({ categoryId: null });
61
43
  break;
62
44
  default:
63
- Utils.assertUnreachable(mediaCenterMode);
45
+ Utils.assertUnreachable(modeProps);
64
46
  }
47
+ },
48
+ failed: () => {
49
+ console.error('Media Center initialization failed');
50
+ closeOrchestrator.requestClose();
65
51
  }
66
52
  }
67
53
  });
68
54
  let headerHeight = $state(0);
69
- let computedPlayerProps = $state.raw(playerProps);
70
55
  let isMobileView = $state(false);
71
- let closeFn = $state.raw(null);
72
56
  const selectCategory = (categoryId) => __awaiter(void 0, void 0, void 0, function* () {
73
- var _a, _b;
74
- if (!config) {
75
- return;
76
- }
77
- switch (mediaCenterMode) {
78
- case 'posts-feed':
79
- if (context.categoriesHandler.selectedCategoryId === categoryId) {
80
- context.activateFeed();
57
+ switch (context.mediaCenterMode) {
58
+ case 'feed':
59
+ if (!context.feedPlayerProps) {
81
60
  return;
82
61
  }
83
- computedPlayerProps = {
84
- mode: 'posts',
85
- props: Object.assign({ dataProvider: makePostPlayerItemsProvider({ config, categoryId }), socialInteractionsHandler: (_a = config.handlers) === null || _a === void 0 ? void 0 : _a.socialInteractionsHandler, analyticsHandler: (_b = config.handlers) === null || _b === void 0 ? void 0 : _b.analyticsHandler }, commonPlayerProps())
86
- };
87
- context.activateFeed({ categoryId });
88
- break;
89
- case 'streams-feed':
90
- context.tryActivateStreamsInCategory(categoryId);
62
+ switch (context.feedPlayerProps.type) {
63
+ case 'posts':
64
+ if (context.categoriesHandler.selectedCategoryId === categoryId) {
65
+ return;
66
+ }
67
+ context.playPostsFeed({ filter: { categoryId } });
68
+ break;
69
+ case 'streams':
70
+ context.tryActivateStreamsInCategory(categoryId);
71
+ return;
72
+ default:
73
+ Utils.assertUnreachable(context.feedPlayerProps);
74
+ }
91
75
  break;
92
76
  case 'discover':
93
- console.warn('Apply category filter for discover mode is not implemented yet');
77
+ context.activateDiscover({ categoryId });
94
78
  break;
95
79
  default:
96
- Utils.assertUnreachable(mediaCenterMode);
80
+ Utils.assertUnreachable(context.mediaCenterMode);
97
81
  }
98
82
  });
99
83
  const activateSelectedShortVideoPlayer = (shortVideo) => {
100
- var _a, _b;
101
- if (!config) {
102
- return;
103
- }
104
- mediaCenterMode = 'posts-feed';
105
- computedPlayerProps = {
106
- mode: 'posts',
107
- props: Object.assign({ dataProvider: makePostPlayerItemsProvider({ config, prefetchedItems: [shortVideo] }), socialInteractionsHandler: (_a = config.handlers) === null || _a === void 0 ? void 0 : _a.socialInteractionsHandler, analyticsHandler: (_b = config.handlers) === null || _b === void 0 ? void 0 : _b.analyticsHandler }, commonPlayerProps())
108
- };
109
- context.activateFeed({ categoryId: null });
84
+ context.playPostsFeed({ filter: { prefetchedItems: [shortVideo] } });
110
85
  };
111
86
  const activateSelectedStreamPlayer = (stream) => {
112
- var _a, _b;
113
- if (!config) {
114
- return;
115
- }
116
- mediaCenterMode = 'streams-feed';
117
- computedPlayerProps = {
118
- mode: 'streams',
119
- 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 }, commonPlayerProps())
120
- };
121
- context.activateFeed({ categoryId: null });
87
+ context.playStreamsFeed({ filter: { prefetchedStreams: [stream] } });
122
88
  };
123
89
  const activateSelectedStreamOfCategoryPlayer = (id, prefetchedStreams, categoryId) => {
124
- var _a, _b;
125
- if (!config) {
126
- return;
127
- }
128
- mediaCenterMode = 'streams-feed';
129
- computedPlayerProps = {
130
- mode: 'streams',
131
- 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 }, commonPlayerProps())
132
- };
133
- context.activateFeed();
90
+ context.playStreamsFeed({ filter: { categoryId, prefetchedStreams, initialStreamId: id } });
134
91
  };
135
92
  const onHeaderHeightChanged = (height) => {
136
93
  headerHeight = height;
137
94
  };
138
- const handlePlayerInitialized = (data) => {
139
- closeFn = data.closePlayerFn;
140
- };
141
95
  const onWidthAnchorMounted = (node) => {
142
96
  const resizeObserver = new ResizeObserver(() => {
143
97
  isMobileView = node.clientWidth <= 576;
@@ -149,74 +103,122 @@ const onWidthAnchorMounted = (node) => {
149
103
  }
150
104
  };
151
105
  };
106
+ const swipeToOpen = (node) => {
107
+ let startX = 0;
108
+ let startY = 0;
109
+ let isTracking = false;
110
+ let hasOpened = false;
111
+ let threshold = 60;
112
+ const MIN_DISTANCE = 10;
113
+ function handleTouchStart(e) {
114
+ if (e.touches.length !== 1) {
115
+ return;
116
+ }
117
+ const touch = e.touches[0];
118
+ startX = touch.clientX;
119
+ startY = touch.clientY;
120
+ isTracking = true;
121
+ hasOpened = false;
122
+ }
123
+ function handleTouchMove(e) {
124
+ if (!isTracking || hasOpened) {
125
+ return;
126
+ }
127
+ const touch = e.touches[0];
128
+ const dx = touch.clientX - startX;
129
+ const dy = touch.clientY - startY;
130
+ if (Math.abs(dx) < MIN_DISTANCE && Math.abs(dy) < MIN_DISTANCE) {
131
+ return;
132
+ }
133
+ if (Math.abs(dy) > Math.abs(dx)) {
134
+ isTracking = false;
135
+ return;
136
+ }
137
+ if (dx < 0) {
138
+ isTracking = false;
139
+ return;
140
+ }
141
+ if (dx > threshold) {
142
+ hasOpened = true;
143
+ context.showMenu();
144
+ }
145
+ }
146
+ function handleTouchEnd() {
147
+ isTracking = false;
148
+ }
149
+ node.addEventListener('touchstart', handleTouchStart, { passive: true });
150
+ node.addEventListener('touchmove', handleTouchMove, { passive: true });
151
+ node.addEventListener('touchend', handleTouchEnd);
152
+ return {
153
+ destroy() {
154
+ node.removeEventListener('touchstart', handleTouchStart);
155
+ node.removeEventListener('touchmove', handleTouchMove);
156
+ node.removeEventListener('touchend', handleTouchEnd);
157
+ }
158
+ };
159
+ };
152
160
  </script>
153
161
 
154
162
  {#if context.initializing}
155
163
  <Loading positionFixedCenter={true} timeout={600} />
164
+ {:else if !context.initialized}
165
+ Not initialized placeholder
156
166
  {:else}
157
- {#snippet mobileFooter()}
158
- <MediaCenterFooter context={context} />
159
- {/snippet}
160
- {#snippet header()}
161
- {#if !isMobileView}
162
- <MediaCenterHeader context={context} closeFn={closeFn} locale={locale} on={{ headerHeightChanged: onHeaderHeightChanged }} />
163
- {:else}
164
- <MediaCenterHeaderMobile context={context} closeFn={closeFn} on={{ headerHeightChanged: onHeaderHeightChanged }} />
165
- {/if}
166
- {/snippet}
167
- {#if computedPlayerProps.mode === 'posts'}
168
- <PostsPlayerView
169
- {...computedPlayerProps.props}
170
- playerSettings={enhancedPlayerSettings()}
171
- mediaCenterData={{
172
- header: context.mediaCenterEffective ? header : undefined,
173
- mobileFooter: isMobileView ? mobileFooter : undefined,
174
- overlayIsActive: context.overlayIsActive,
175
- callbacks: { onPlayerInitialized: handlePlayerInitialized }
176
- }} />
177
- {:else if computedPlayerProps.mode === 'streams'}
178
- <StreamsPlayerView
179
- {...computedPlayerProps.props}
180
- playerSettings={enhancedPlayerSettings()}
181
- mediaCenterData={{
182
- header: context.mediaCenterEffective ? header : undefined,
183
- mobileFooter: isMobileView ? mobileFooter : undefined,
184
- overlayIsActive: context.overlayIsActive,
185
- callbacks: { onPlayerInitialized: handlePlayerInitialized }
186
- }} />
187
- {/if}
188
- {#if context.loading}
189
- <Loading positionFixedCenter={true} timeout={600} />
190
- {/if}
167
+ <WithBackground {...context.backgroundWrapperProps}>
168
+ <div class="media-center" use:onWidthAnchorMounted>
169
+ {#if !isMobileView}
170
+ <MediaCenterHeader context={context} locale={settings?.locale} on={{ headerHeightChanged: onHeaderHeightChanged }} />
171
+ {:else}
172
+ <MediaCenterHeaderMobile context={context} on={{ headerHeightChanged: onHeaderHeightChanged }} />
173
+ {/if}
191
174
 
192
- {#if context.discoverHandler.active}
193
- <div class="media-center-overlay" class:media-center-overlay--mobile={isMobileView} style={`top:${headerHeight}px`} transition:fade={{ duration: 300 }}>
194
- <DiscoverPanel
195
- context={context}
196
- locale={locale}
197
- on={{
198
- shortVideoSelected: (shortVideo) => activateSelectedShortVideoPlayer(shortVideo),
199
- streamSelected: (stream) => activateSelectedStreamPlayer(stream)
200
- }} />
201
- </div>
202
- {/if}
175
+ <div class="media-center__content-container">
176
+ {#if context.mediaCenterMode === 'feed' && context.feedPlayerProps}
177
+ <div class="media-center__content" class:media-center__content--faded={context.overlayIsActive} transition:fade={{ duration: 300 }}>
178
+ {#if context.feedPlayerProps.type === 'posts'}
179
+ <PostsPlayerView {...context.feedPlayerProps.props} />
180
+ {:else if context.feedPlayerProps.type === 'streams'}
181
+ <StreamsPlayerView {...context.feedPlayerProps.props} />
182
+ {/if}
183
+ </div>
184
+ {:else if context.mediaCenterMode === 'discover'}
185
+ <div class="media-center__content" transition:fade={{ duration: 300 }}>
186
+ <DiscoverPanel
187
+ context={context}
188
+ locale={settings?.locale}
189
+ on={{
190
+ shortVideoSelected: (shortVideo) => activateSelectedShortVideoPlayer(shortVideo),
191
+ streamSelected: (stream) => activateSelectedStreamPlayer(stream)
192
+ }} />
193
+ </div>
194
+ {/if}
195
+ </div>
196
+ {#if context.loading}
197
+ <Loading positionFixedCenter={true} timeout={600} />
198
+ {/if}
203
199
 
204
- {#if context.streamsInCategoryHandler.active}
205
- <div class="media-center-overlay" class:media-center-overlay--mobile={isMobileView} style={`top:${headerHeight}px`} transition:fade={{ duration: 300 }}>
206
- <StreamsInCategoryPanel
207
- handler={context.streamsInCategoryHandler}
208
- on={{ streamSelected: (id, categoryId, streams) => activateSelectedStreamOfCategoryPlayer(id, streams, categoryId) }} />
209
- </div>
210
- {/if}
200
+ {#if context.streamsInCategoryHandler.active}
201
+ <div class="media-center-overlay" class:media-center-overlay--mobile={isMobileView} style={`top:${headerHeight}px`} transition:fade={{ duration: 300 }}>
202
+ <StreamsInCategoryPanel
203
+ handler={context.streamsInCategoryHandler}
204
+ on={{ streamSelected: (id, categoryId, streams) => activateSelectedStreamOfCategoryPlayer(id, streams, categoryId) }} />
205
+ </div>
206
+ {/if}
211
207
 
212
- {#if context.menuActive}
213
- <div class="menu-overlay" class:menu-overlay--mobile={isMobileView} onclick={context.hideMenu} onkeydown={() => {}} role="none">
214
- <div class="menu-overlay__panel">
215
- <Menu context={context} locale={locale} on={{ categorySelected: selectCategory, streamSelected: activateSelectedStreamPlayer }} />
216
- </div>
208
+ {#if context.menuActive}
209
+ <div class="menu-overlay" class:menu-overlay--mobile={isMobileView} onclick={context.hideMenu} onkeydown={() => {}} role="none">
210
+ <div class="menu-overlay__panel">
211
+ <Menu context={context} locale={settings?.locale} on={{ categorySelected: selectCategory, streamSelected: activateSelectedStreamPlayer }} />
212
+ </div>
213
+ </div>
214
+ {:else}
215
+ <div class="menu-swipe-area" use:swipeToOpen>&nbsp;</div>
216
+ {/if}
217
+ {#if isMobileView}
218
+ <MediaCenterFooter context={context} />
219
+ {/if}
217
220
  </div>
218
- {/if}
219
- <div class="media-center-width-anchor" use:onWidthAnchorMounted></div>
221
+ </WithBackground>
220
222
  {/if}
221
223
 
222
224
  <style>@keyframes fadeIn {
@@ -230,6 +232,34 @@ const onWidthAnchorMounted = (node) => {
230
232
  opacity: 1;
231
233
  }
232
234
  }
235
+ .media-center {
236
+ width: 100%;
237
+ min-width: 100%;
238
+ max-width: 100%;
239
+ height: 100%;
240
+ min-height: 100%;
241
+ max-height: 100%;
242
+ display: flex;
243
+ flex-direction: column;
244
+ position: relative;
245
+ }
246
+ .media-center__content-container {
247
+ flex: 1;
248
+ min-height: 0;
249
+ position: relative;
250
+ }
251
+ .media-center__content {
252
+ position: absolute;
253
+ inset: 0;
254
+ min-height: 0;
255
+ display: flex;
256
+ flex-direction: column;
257
+ }
258
+ .media-center__content--faded {
259
+ opacity: 0;
260
+ transition: opacity 0.3s ease-in-out;
261
+ }
262
+
233
263
  .media-center-overlay {
234
264
  position: absolute;
235
265
  inset: 0;
@@ -277,4 +307,20 @@ const onWidthAnchorMounted = (node) => {
277
307
  width: 17.5rem;
278
308
  height: 100%;
279
309
  max-height: 100%;
310
+ }
311
+
312
+ .menu-swipe-area {
313
+ display: none;
314
+ position: absolute;
315
+ top: 0;
316
+ left: 0;
317
+ width: 1.875rem;
318
+ height: 100%;
319
+ z-index: 1;
320
+ /* Set 'container-type: inline-size;' to reference container*/
321
+ }
322
+ @container (width < 576px) {
323
+ .menu-swipe-area {
324
+ display: block;
325
+ }
280
326
  }</style>
@@ -1,21 +1,4 @@
1
- import type { Locale } from '../../core/locale';
2
- import type { IMediaCenterConfig } from '../config/types';
3
- import type { PostPlayerProps } from '../../posts/posts-player/types';
4
- import type { StreamsPlayerProps } from '../../streams/streams-player/types';
5
- type PlayerProps = {
6
- mode: 'posts';
7
- props: PostPlayerProps;
8
- } | {
9
- mode: 'streams';
10
- props: StreamsPlayerProps;
11
- } | {
12
- mode: 'discover';
13
- };
14
- type Props = {
15
- config: IMediaCenterConfig | null;
16
- playerProps: PlayerProps;
17
- locale?: Locale;
18
- };
19
- declare const Cmp: import("svelte").Component<Props, {}, "">;
1
+ import type { MediaCenterProps } from './types';
2
+ declare const Cmp: import("svelte").Component<MediaCenterProps, {}, "">;
20
3
  type Cmp = ReturnType<typeof Cmp>;
21
4
  export default Cmp;
@@ -0,0 +1,8 @@
1
+ import type { IMediaCenterConfig } from '../../config/types';
2
+ import { StreamsInCategory, ShortVideosInCategory } from './types.svelte';
3
+ export declare class DiscoverDataLoader {
4
+ private readonly config;
5
+ constructor(config: IMediaCenterConfig);
6
+ loadStreams: (holder: StreamsInCategory) => Promise<void>;
7
+ loadShortVideos: (holder: ShortVideosInCategory) => Promise<void>;
8
+ }