@streamscloud/embeddable 12.1.0 → 13.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/dist/ads/ad-card/cmp.ad-card.svelte +4 -16
  2. package/dist/content-player/cmp.content-player.svelte +1 -1
  3. package/dist/content-player/content-player-config.svelte.d.ts +2 -12
  4. package/dist/content-player/content-player-config.svelte.js +1 -1
  5. package/dist/content-player/content-player-settings.svelte.d.ts +16 -0
  6. package/dist/content-player/content-player-settings.svelte.js +27 -0
  7. package/dist/content-player/controls-and-attachments.svelte +32 -2
  8. package/dist/content-player/controls-and-attachments.svelte.d.ts +1 -0
  9. package/dist/content-player/index.d.ts +1 -0
  10. package/dist/content-player/index.js +1 -0
  11. package/dist/content-player/overview-panel.svelte +2 -2
  12. package/dist/content-player/ui-manager.svelte.d.ts +2 -1
  13. package/dist/content-player/ui-manager.svelte.js +2 -1
  14. package/dist/core/enums.d.ts +3 -0
  15. package/dist/core/enums.js +4 -0
  16. package/dist/core/theme/index.d.ts +2 -0
  17. package/dist/core/theme/index.js +1 -0
  18. package/dist/core/theme/theme-store.svelte.d.ts +6 -0
  19. package/dist/core/theme/theme-store.svelte.js +10 -0
  20. package/dist/external-api/data-providers/index.d.ts +6 -0
  21. package/dist/external-api/data-providers/index.js +6 -0
  22. package/dist/external-api/data-providers/internal-media-center-data-provider.svelte.d.ts +15 -0
  23. package/dist/{media-center/config/internal-media-center-config.js → external-api/data-providers/internal-media-center-data-provider.svelte.js} +33 -17
  24. package/dist/{posts/handlers → external-api/data-providers}/internal-post-analytics-handler.d.ts +1 -1
  25. package/dist/{short-videos → external-api}/data-providers/internal-short-video-player-items-provider.js +1 -1
  26. package/dist/{streams/streams-player → external-api/data-providers}/internal-stream-analytics-handler.d.ts +1 -1
  27. package/dist/{streams/streams-player → external-api/data-providers}/internal-streams-player-data-provider.d.ts +1 -1
  28. package/dist/{streams/streams-player → external-api/data-providers}/internal-streams-player-data-provider.js +1 -1
  29. package/dist/{media-center/config → external-api/data-providers}/operations.generated.d.ts +6 -0
  30. package/dist/{media-center/config → external-api/data-providers}/operations.generated.js +13 -0
  31. package/dist/{media-center/config → external-api/data-providers}/operations.graphql +6 -0
  32. package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/mapper.d.ts +1 -1
  33. package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/mapper.js +2 -2
  34. package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/operations.generated.d.ts +1 -1
  35. package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/posts-loader.d.ts +2 -2
  36. package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/posts-loader.js +1 -1
  37. package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/mapper.d.ts +1 -1
  38. package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/mapper.js +1 -1
  39. package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/operations.generated.d.ts +1 -1
  40. package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/stream-pages-loader.d.ts +1 -1
  41. package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/stream-pages-loader.js +2 -2
  42. package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/streams-loader.d.ts +2 -2
  43. package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/streams-loader.js +6 -2
  44. package/dist/external-api/index.d.ts +3 -0
  45. package/dist/external-api/index.js +3 -0
  46. package/dist/external-api/media-page/index.d.ts +83 -0
  47. package/dist/external-api/media-page/index.js +82 -0
  48. package/dist/{short-videos → external-api}/short-videos-player/index.d.ts +27 -12
  49. package/dist/{short-videos → external-api}/short-videos-player/index.js +35 -28
  50. package/dist/external-api/streams-player/index.d.ts +105 -0
  51. package/dist/external-api/streams-player/index.js +110 -0
  52. package/dist/media-center/config/types.d.ts +28 -27
  53. package/dist/media-center/index.d.ts +3 -1
  54. package/dist/media-center/media-center/cmp.media-center-proxy.svelte +59 -0
  55. package/dist/media-center/media-center/cmp.media-center-proxy.svelte.d.ts +15 -0
  56. package/dist/media-center/media-center/discover/community-features-localization.d.ts +8 -0
  57. package/dist/media-center/media-center/discover/community-features-localization.js +31 -0
  58. package/dist/media-center/media-center/discover/community-features.svelte +171 -0
  59. package/dist/media-center/media-center/discover/community-features.svelte.d.ts +11 -0
  60. package/dist/media-center/media-center/discover/data-loading.d.ts +3 -3
  61. package/dist/media-center/media-center/discover/data-loading.js +5 -5
  62. package/dist/media-center/media-center/discover/discover-header.svelte +13 -65
  63. package/dist/media-center/media-center/discover/discover-header.svelte.d.ts +0 -2
  64. package/dist/media-center/media-center/discover/discover-view-handler.svelte.d.ts +3 -3
  65. package/dist/media-center/media-center/discover/discover-view-handler.svelte.js +4 -4
  66. package/dist/media-center/media-center/discover/discover-view.svelte +6 -6
  67. package/dist/media-center/media-center/discover/discover-view.svelte.d.ts +0 -2
  68. package/dist/media-center/media-center/feed/feed-handler.svelte.d.ts +5 -3
  69. package/dist/media-center/media-center/feed/feed-handler.svelte.js +18 -10
  70. package/dist/media-center/media-center/feed/feed-providers-generator.d.ts +11 -5
  71. package/dist/media-center/media-center/feed/feed-providers-generator.js +13 -9
  72. package/dist/media-center/media-center/footer/index.d.ts +1 -0
  73. package/dist/media-center/media-center/footer/index.js +1 -0
  74. package/dist/media-center/media-center/{header-footer → footer}/media-center-footer.svelte +5 -5
  75. package/dist/media-center/media-center/handlers/categories-handler.svelte.d.ts +3 -5
  76. package/dist/media-center/media-center/handlers/categories-handler.svelte.js +16 -13
  77. package/dist/media-center/media-center/handlers/media-center-settings-handler.svelte.d.ts +18 -5
  78. package/dist/media-center/media-center/handlers/media-center-settings-handler.svelte.js +21 -9
  79. package/dist/media-center/media-center/{header-footer → header}/index.d.ts +0 -1
  80. package/dist/media-center/media-center/{header-footer → header}/index.js +0 -1
  81. package/dist/media-center/media-center/{header-footer → header}/media-center-header-mobile.svelte +5 -4
  82. package/dist/media-center/media-center/{header-footer → header}/media-center-header.svelte +138 -35
  83. package/dist/media-center/media-center/{header-footer → header}/media-center-header.svelte.d.ts +2 -2
  84. package/dist/media-center/media-center/index.d.ts +2 -1
  85. package/dist/media-center/media-center/index.js +2 -1
  86. package/dist/media-center/media-center/media-center-context.svelte.d.ts +16 -20
  87. package/dist/media-center/media-center/media-center-context.svelte.js +61 -19
  88. package/dist/media-center/media-center/media-center-settings.svelte.d.ts +11 -0
  89. package/dist/media-center/media-center/media-center-settings.svelte.js +23 -0
  90. package/dist/media-center/media-center/{cmp.media-center.svelte → media-center-view.svelte} +65 -108
  91. package/dist/media-center/media-center/media-center-view.svelte.d.ts +9 -0
  92. package/dist/media-center/media-center/menu/category-following-wrapper.svelte.d.ts +1 -1
  93. package/dist/media-center/media-center/menu/menu.svelte +40 -35
  94. package/dist/media-center/media-center/menu/menu.svelte.d.ts +0 -2
  95. package/dist/media-center/media-center/menu/popular-streams-panel-handler.svelte.d.ts +3 -3
  96. package/dist/media-center/media-center/menu/popular-streams-panel-handler.svelte.js +4 -4
  97. package/dist/media-center/media-center/moments/cmp.moments-circle.svelte +24 -7
  98. package/dist/media-center/media-center/moments/index.d.ts +1 -0
  99. package/dist/media-center/media-center/moments/index.js +1 -0
  100. package/dist/media-center/media-center/moments/moments-feed-handler.svelte.d.ts +26 -0
  101. package/dist/media-center/media-center/moments/moments-feed-handler.svelte.js +49 -0
  102. package/dist/media-center/media-center/moments/moments-state.svelte.d.ts +20 -0
  103. package/dist/media-center/media-center/moments/moments-state.svelte.js +82 -0
  104. package/dist/media-center/media-center/streams-in-category/streams-in-category-panel-handler.svelte.d.ts +3 -3
  105. package/dist/media-center/media-center/streams-in-category/streams-in-category-panel-handler.svelte.js +4 -4
  106. package/dist/media-center/media-center/streams-in-category/streams-in-category-panel.svelte +2 -3
  107. package/dist/media-center/media-center/types.d.ts +4 -11
  108. package/dist/media-center/membership/index.d.ts +1 -0
  109. package/dist/media-center/membership/index.js +1 -0
  110. package/dist/media-center/membership/mock-membership-handler.svelte.d.ts +10 -0
  111. package/dist/media-center/membership/mock-membership-handler.svelte.js +21 -0
  112. package/dist/media-center/membership/types.d.ts +10 -0
  113. package/dist/media-center/membership/types.js +1 -0
  114. package/dist/media-center/navigation/index.d.ts +2 -0
  115. package/dist/media-center/navigation/index.js +1 -0
  116. package/dist/media-center/navigation/media-center-state.d.ts +19 -0
  117. package/dist/media-center/navigation/media-center-state.js +1 -0
  118. package/dist/media-center/navigation/mock-navigation-handler.svelte.d.ts +6 -0
  119. package/dist/media-center/navigation/mock-navigation-handler.svelte.js +6 -0
  120. package/dist/media-center/navigation/types.d.ts +5 -0
  121. package/dist/media-center/navigation/types.js +1 -0
  122. package/dist/media-page/cmp.media-page.svelte +45 -0
  123. package/dist/media-page/cmp.media-page.svelte.d.ts +11 -0
  124. package/dist/media-page/index.d.ts +42 -58
  125. package/dist/media-page/index.js +131 -17
  126. package/dist/posts/attachments/cmp.attachments.svelte +1 -1
  127. package/dist/posts/controls/cmp.controls.svelte +4 -1
  128. package/dist/posts/controls/cmp.controls.svelte.d.ts +2 -0
  129. package/dist/posts/post-viewer/attachments-horizontal.svelte +4 -12
  130. package/dist/posts/post-viewer/heading.svelte +4 -4
  131. package/dist/posts/post-viewer/media/post-media.svelte +1 -1
  132. package/dist/posts/post-viewer/post-texts.svelte +2 -2
  133. package/dist/posts/posts-player/cmp.posts-player.svelte.d.ts +1 -0
  134. package/dist/posts/posts-player/index.d.ts +31 -32
  135. package/dist/posts/posts-player/index.js +90 -35
  136. package/dist/posts/posts-player/posts-player-proxy.svelte +13 -4
  137. package/dist/posts/posts-player/posts-player-proxy.svelte.d.ts +1 -0
  138. package/dist/posts/posts-player/posts-player-view.svelte +1 -1
  139. package/dist/posts/posts-player/types.d.ts +2 -1
  140. package/dist/products/product-card/cmp.product-card.svelte +4 -16
  141. package/dist/short-videos/short-video-card/cmp.short-video-card.svelte +6 -6
  142. package/dist/streams/layout/styles-transformer.d.ts +1 -1
  143. package/dist/streams/stream-card/cmp.stream-card.svelte +1 -1
  144. package/dist/streams/streams-player/cmp.streams-player.svelte +42 -0
  145. package/dist/streams/streams-player/cmp.streams-player.svelte.d.ts +24 -0
  146. package/dist/streams/streams-player/index.d.ts +18 -83
  147. package/dist/streams/streams-player/index.js +85 -65
  148. package/dist/streams/streams-player/stream-overview.svelte +1 -1
  149. package/dist/streams/streams-player/streams-player-buffer.svelte.js +2 -1
  150. package/dist/streams/streams-player/streams-player-proxy.svelte +32 -0
  151. package/dist/streams/streams-player/streams-player-proxy.svelte.d.ts +26 -0
  152. package/dist/streams/streams-player/streams-player-view.svelte +1 -1
  153. package/dist/streams/streams-player/types.d.ts +3 -1
  154. package/dist/ui/button/cmp.options-button.svelte +123 -0
  155. package/dist/ui/button/cmp.options-button.svelte.d.ts +20 -0
  156. package/dist/ui/button/index.d.ts +1 -0
  157. package/dist/ui/button/index.js +1 -0
  158. package/dist/ui/button/resources/button-theme.svelte +6 -143
  159. package/dist/ui/button/resources/button-types.d.ts +0 -1
  160. package/dist/ui/button/resources/button-types.js +0 -1
  161. package/dist/ui/icon/cmp.icon.svelte +8 -28
  162. package/dist/ui/image/cmp.image-rounded.svelte +3 -10
  163. package/dist/ui/image/cmp.image-stub.svelte +1 -4
  164. package/dist/ui/image/cmp.image.svelte +1 -4
  165. package/dist/ui/loading/cmp.loading.svelte +1 -4
  166. package/dist/ui/player/button/cmp.mobile-player-buttons-group.svelte +2 -2
  167. package/dist/ui/player/button/cmp.mobile-player-buttons-group.svelte.d.ts +2 -2
  168. package/dist/ui/player/button/cmp.player-button.svelte +7 -3
  169. package/dist/ui/player/button/cmp.player-buttons-group.svelte +4 -3
  170. package/dist/ui/player/button/cmp.player-buttons-group.svelte.d.ts +2 -2
  171. package/dist/ui/player/button/index.d.ts +1 -1
  172. package/dist/ui/player/button/types.d.ts +1 -1
  173. package/dist/ui/player/colors/index.d.ts +1 -1
  174. package/dist/ui/player/colors/index.js +1 -1
  175. package/dist/ui/player/colors/player-colors.d.ts +15 -1
  176. package/dist/ui/player/colors/player-colors.js +24 -1
  177. package/dist/ui/player/providers/default-chunks-player-buffer.svelte.d.ts +1 -0
  178. package/dist/ui/player/providers/default-chunks-player-buffer.svelte.js +7 -1
  179. package/dist/ui/player/providers/default-feed-player-buffer.svelte.d.ts +1 -0
  180. package/dist/ui/player/providers/default-feed-player-buffer.svelte.js +7 -1
  181. package/dist/ui/player/providers/types.d.ts +3 -1
  182. package/dist/ui/shadow-dom/cmp.shadow-root.svelte +158 -0
  183. package/dist/ui/shadow-dom/colors.scss +74 -0
  184. package/dist/ui/shadow-dom/index.d.ts +1 -0
  185. package/dist/ui/shadow-dom/index.js +1 -0
  186. package/dist/ui/shadow-dom/shadow-root-service.js +0 -4
  187. package/dist/ui/slider/cmp.slider.svelte +5 -5
  188. package/package.json +5 -1
  189. package/dist/content-player/content-player-settings.d.ts +0 -12
  190. package/dist/content-player/content-player-settings.js +0 -22
  191. package/dist/media-center/config/internal-media-center-config.d.ts +0 -14
  192. package/dist/media-center/media-center/cmp.media-center.svelte.d.ts +0 -4
  193. package/dist/media-center/media-center/discover/discover-header-localization.d.ts +0 -6
  194. package/dist/media-center/media-center/discover/discover-header-localization.js +0 -15
  195. package/dist/posts/handlers/index.d.ts +0 -1
  196. package/dist/posts/handlers/index.js +0 -1
  197. package/dist/short-videos/data-providers/index.d.ts +0 -1
  198. package/dist/short-videos/data-providers/index.js +0 -1
  199. package/dist/ui/with-background/cmp.with-background.svelte +0 -86
  200. package/dist/ui/with-background/index.d.ts +0 -1
  201. package/dist/ui/with-background/index.js +0 -1
  202. /package/dist/{media-center/config → external-api/data-providers}/internal-media-center-analytics-handler.d.ts +0 -0
  203. /package/dist/{media-center/config → external-api/data-providers}/internal-media-center-analytics-handler.js +0 -0
  204. /package/dist/{posts/handlers → external-api/data-providers}/internal-post-analytics-handler.js +0 -0
  205. /package/dist/{short-videos → external-api}/data-providers/internal-short-video-player-items-provider.d.ts +0 -0
  206. /package/dist/{streams/streams-player → external-api/data-providers}/internal-stream-analytics-handler.js +0 -0
  207. /package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/index.d.ts +0 -0
  208. /package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/index.js +0 -0
  209. /package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/operations.generated.js +0 -0
  210. /package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/operations.graphql +0 -0
  211. /package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/index.d.ts +0 -0
  212. /package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/index.js +0 -0
  213. /package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/operations.generated.js +0 -0
  214. /package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/operations.graphql +0 -0
  215. /package/dist/media-center/media-center/{header-footer → footer}/media-center-footer.svelte.d.ts +0 -0
  216. /package/dist/media-center/media-center/{header-footer → header}/media-center-header-localization.d.ts +0 -0
  217. /package/dist/media-center/media-center/{header-footer → header}/media-center-header-localization.js +0 -0
  218. /package/dist/media-center/media-center/{header-footer → header}/media-center-header-mobile.svelte.d.ts +0 -0
  219. /package/dist/ui/{with-background/cmp.with-background.svelte.d.ts → shadow-dom/cmp.shadow-root.svelte.d.ts} +0 -0
@@ -1,21 +1,29 @@
1
1
  import { PostType } from '../../core/enums';
2
+ import type { ThemeValue } from '../../core/theme';
2
3
  import type { IContentCategoryFollowingHandler } from '../categories-following';
4
+ import type { IMediaCenterMembershipHandler } from '../membership';
5
+ import type { IMediaCenterNavigationHandler } from '../navigation';
3
6
  import type { IPostAnalyticsHandler, PostPlayerModel } from '../../posts/posts-player/types';
4
7
  import type { IPostSocialInteractionsHandler } from '../../posts/social-interactions';
5
8
  import type { StreamPageViewerModel } from '../../streams/stream-page-viewer/types';
6
9
  import type { IStreamAnalyticsHandler, StreamPlayerModel } from '../../streams/streams-player/types';
7
- export interface IMediaCenterConfig {
8
- getConfig: () => Promise<MediaCenterConfigModel | null>;
10
+ import type { PlayerColors } from '../../ui/player/colors';
11
+ export interface IMediaCenterDataProvider {
12
+ model: MediaCenterModel | null;
13
+ fetchModel: () => Promise<MediaCenterModel | null>;
9
14
  handlers?: {
10
15
  analyticsHandler?: IPostAnalyticsHandler & IStreamAnalyticsHandler;
11
- socialInteractionsHandler?: IPostSocialInteractionsHandler;
12
16
  categoriesFollowingHandler?: IContentCategoryFollowingHandler;
17
+ membershipHandler?: IMediaCenterMembershipHandler;
18
+ navigationHandler?: IMediaCenterNavigationHandler;
19
+ socialInteractionsHandler?: IPostSocialInteractionsHandler;
13
20
  };
14
21
  postsPlayer: {
15
22
  getPostsCursor: (input: {
16
23
  filter: {
17
24
  types: PostType[];
18
25
  categoryId?: string;
26
+ includeIds?: string[];
19
27
  excludeIds?: string[];
20
28
  };
21
29
  limit: number;
@@ -43,7 +51,22 @@ export interface IMediaCenterConfig {
43
51
  }>;
44
52
  };
45
53
  }
46
- export type MediaCenterConfigModel = {
54
+ export type MediaCenterModel = {
55
+ id: string;
56
+ handle: string;
57
+ name: string;
58
+ description: string | null;
59
+ image: string | null;
60
+ logo: string | null;
61
+ banner: string | null;
62
+ moments: {
63
+ id: string;
64
+ cover: string;
65
+ isSeen: boolean;
66
+ }[];
67
+ communityFeatures: {
68
+ membersCount: number;
69
+ } | null;
47
70
  contentCategories: {
48
71
  id: string;
49
72
  name: string;
@@ -58,27 +81,5 @@ export type MediaCenterConfigModel = {
58
81
  backgroundColor: string;
59
82
  } | null;
60
83
  }[];
61
- targetData: MediaCenterTargetDataModel;
62
- playerColors: {
63
- brand: string | null;
64
- button: string | null;
65
- buttonInactive: string | null;
66
- cardButton: string | null;
67
- cardBackground: string | null;
68
- menuBackground: string | null;
69
- playerBackground: string | null;
70
- price: string | null;
71
- salePrice: string | null;
72
- sidebarBackground: string | null;
73
- } | null;
74
- };
75
- export type MediaCenterTargetDataModel = {
76
- id: string;
77
- name: string;
78
- image: string | null;
79
- membersCount: number;
80
- logo: string | null;
81
- handle: string;
82
- description: string | null;
83
- banner: string | null;
84
+ playerColors: Record<ThemeValue, PlayerColors>;
84
85
  };
@@ -1,2 +1,4 @@
1
- export type { IMediaCenterConfig } from './config/types';
1
+ export type { IMediaCenterDataProvider } from './config/types';
2
2
  export type { IContentCategoryFollowingHandler } from './categories-following/types';
3
+ export type { IMediaCenterMembershipHandler } from './membership';
4
+ export type { IMediaCenterNavigationHandler, MediaCenterState } from './navigation';
@@ -0,0 +1,59 @@
1
+ <script lang="ts">import { Theme } from '../../core/theme';
2
+ import { Utils } from '../../core/utils';
3
+ import { Loading } from '../../ui/loading';
4
+ import {} from '../../ui/player/close-orchestrator';
5
+ import { ShadowRoot } from '../../ui/shadow-dom';
6
+ import { MediaCenterContext } from './media-center-context.svelte';
7
+ import { default as MediaCenterView } from './media-center-view.svelte';
8
+ import { untrack } from 'svelte';
9
+ let { dataProvider, modeProps, settings, closeOrchestrator, dynamicActions } = $props();
10
+ const context = new MediaCenterContext({
11
+ dataProvider,
12
+ closeOrchestrator,
13
+ settings,
14
+ on: {
15
+ initialized: (instance) => {
16
+ switch (modeProps.mode) {
17
+ case 'posts':
18
+ instance.playPostsFeed({
19
+ dataProvider: modeProps.props.dataProvider,
20
+ onPostActivated: modeProps.props.onPostActivated
21
+ });
22
+ break;
23
+ case 'streams':
24
+ instance.playStreamsFeed({
25
+ dataProvider: modeProps.props.dataProvider,
26
+ onStreamActivated: modeProps.props.onStreamActivated
27
+ });
28
+ break;
29
+ case 'default':
30
+ instance.activateDiscover({ categoryId: null });
31
+ break;
32
+ default:
33
+ Utils.assertUnreachable(modeProps);
34
+ }
35
+ },
36
+ failed: () => {
37
+ console.error('Media Center initialization failed');
38
+ closeOrchestrator.requestClose();
39
+ }
40
+ }
41
+ });
42
+ $effect(() => {
43
+ void (settings === null || settings === void 0 ? void 0 : settings.theme);
44
+ untrack(() => {
45
+ var _a;
46
+ Theme.set((_a = settings === null || settings === void 0 ? void 0 : settings.theme) !== null && _a !== void 0 ? _a : 'dark');
47
+ });
48
+ });
49
+ </script>
50
+
51
+ {#if context.initializing}
52
+ <Loading positionFixedCenter={true} timeout={600} />
53
+ {:else if !context.initialized}
54
+ Not initialized placeholder
55
+ {:else}
56
+ <ShadowRoot {...context.backgroundWrapperProps}>
57
+ <MediaCenterView context={context} dynamicActions={dynamicActions} />
58
+ </ShadowRoot>
59
+ {/if}
@@ -0,0 +1,15 @@
1
+ import type { IMediaCenterDataProvider } from '../config/types';
2
+ import { type ICloseOrchestrator } from '../../ui/player/close-orchestrator';
3
+ import type { MediaCenterSettings } from './media-center-settings.svelte';
4
+ import type { MediaCenterModeProps } from './types';
5
+ import { type Snippet } from 'svelte';
6
+ type Props = {
7
+ dataProvider: IMediaCenterDataProvider;
8
+ settings: MediaCenterSettings;
9
+ modeProps: MediaCenterModeProps;
10
+ closeOrchestrator: ICloseOrchestrator;
11
+ dynamicActions?: Snippet;
12
+ };
13
+ declare const Cmp: import("svelte").Component<Props, {}, "">;
14
+ type Cmp = ReturnType<typeof Cmp>;
15
+ export default Cmp;
@@ -0,0 +1,8 @@
1
+ import { type Locale } from '../../../core/locale';
2
+ export declare class CommunityFeaturesLocalization {
3
+ membersLabel: (count: number) => string;
4
+ memberButtonLabel: string;
5
+ joinButtonLabel: string;
6
+ leaveButtonLabel: string;
7
+ constructor(locale: Locale);
8
+ }
@@ -0,0 +1,31 @@
1
+ import {} from '../../../core/locale';
2
+ export class CommunityFeaturesLocalization {
3
+ membersLabel;
4
+ memberButtonLabel;
5
+ joinButtonLabel;
6
+ leaveButtonLabel;
7
+ constructor(locale) {
8
+ this.membersLabel = loc.membersLabel[locale];
9
+ this.memberButtonLabel = loc.memberButtonLabel[locale];
10
+ this.joinButtonLabel = loc.joinButtonLabel[locale];
11
+ this.leaveButtonLabel = loc.leaveButtonLabel[locale];
12
+ }
13
+ }
14
+ const loc = {
15
+ membersLabel: {
16
+ en: (count) => (count === 1 ? `Member` : `Members`),
17
+ no: (count) => (count === 1 ? `Medlem` : `Medlemmer`)
18
+ },
19
+ memberButtonLabel: {
20
+ en: 'Member',
21
+ no: 'Medlem'
22
+ },
23
+ joinButtonLabel: {
24
+ en: 'Join',
25
+ no: 'Bli med'
26
+ },
27
+ leaveButtonLabel: {
28
+ en: 'Leave',
29
+ no: 'Forlat'
30
+ }
31
+ };
@@ -0,0 +1,171 @@
1
+ <script lang="ts">var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { compactNumber } from '../../../core/utils/compact-number';
11
+ import { OptionsButton, ButtonSize, ButtonStyle, Button } from '../../../ui/button';
12
+ import { CommunityFeaturesLocalization } from './community-features-localization';
13
+ let { target, membershipHandler, locale } = $props();
14
+ const localization = $derived(new CommunityFeaturesLocalization(locale));
15
+ let uiState = $state('idle');
16
+ let isJoinedStore = $state.raw({ isJoined: false });
17
+ $effect(() => {
18
+ if (!membershipHandler) {
19
+ isJoinedStore = { isJoined: false };
20
+ }
21
+ else {
22
+ updateIsJoinedStore(membershipHandler);
23
+ }
24
+ });
25
+ const updateIsJoinedStore = (membershipHandler) => __awaiter(void 0, void 0, void 0, function* () {
26
+ uiState = 'loading';
27
+ try {
28
+ isJoinedStore = yield membershipHandler.getIsJoined();
29
+ }
30
+ finally {
31
+ uiState = 'idle';
32
+ }
33
+ });
34
+ const onLeaveMembershipClick = () => __awaiter(void 0, void 0, void 0, function* () {
35
+ if (!membershipHandler) {
36
+ return;
37
+ }
38
+ uiState = 'submitting';
39
+ try {
40
+ yield membershipHandler.leave();
41
+ yield updateIsJoinedStore(membershipHandler);
42
+ }
43
+ finally {
44
+ uiState = 'idle';
45
+ }
46
+ });
47
+ const onJoinMembershipClick = () => __awaiter(void 0, void 0, void 0, function* () {
48
+ if (!membershipHandler) {
49
+ return;
50
+ }
51
+ uiState = 'submitting';
52
+ try {
53
+ yield membershipHandler.join();
54
+ yield updateIsJoinedStore(membershipHandler);
55
+ }
56
+ finally {
57
+ uiState = 'idle';
58
+ }
59
+ });
60
+ </script>
61
+
62
+ {#if target.communityFeatures && (target.communityFeatures.membersCount > 0 || membershipHandler)}
63
+ <div class="community-features">
64
+ <button
65
+ type="button"
66
+ class="members"
67
+ disabled={!membershipHandler || target.communityFeatures.membersCount === 0}
68
+ onclick={() => membershipHandler?.viewMembersList()}>
69
+ <span class="members__count">
70
+ {compactNumber(target.communityFeatures.membersCount, { locale })}
71
+ </span>
72
+ <span class="members__label">
73
+ {localization.membersLabel(target.communityFeatures.membersCount)}
74
+ </span>
75
+ </button>
76
+ {#if membershipHandler && uiState !== 'loading'}
77
+ <div class="actions">
78
+ {#if isJoinedStore.isJoined}
79
+ <OptionsButton size={ButtonSize.Small} style={ButtonStyle.Standard} optionsPosition="bottom-end" disabled={uiState === 'submitting'}>
80
+ {localization.memberButtonLabel}
81
+ {#snippet rightOptions()}
82
+ <div class="leave-actions">
83
+ <button type="button" class="leave-actions__button" onclick={onLeaveMembershipClick}>
84
+ {localization.leaveButtonLabel}
85
+ </button>
86
+ </div>
87
+ {/snippet}
88
+ </OptionsButton>
89
+ {:else}
90
+ <Button size={ButtonSize.Small} style={ButtonStyle.Standard} on={{ click: onJoinMembershipClick }} disabled={uiState === 'submitting'}>
91
+ {localization.joinButtonLabel}
92
+ </Button>
93
+ {/if}
94
+ </div>
95
+ {/if}
96
+ </div>
97
+ {/if}
98
+
99
+ <style>@keyframes fadeIn {
100
+ 0% {
101
+ opacity: 1;
102
+ }
103
+ 50% {
104
+ opacity: 0.4;
105
+ }
106
+ 100% {
107
+ opacity: 1;
108
+ }
109
+ }
110
+ .community-features {
111
+ display: flex;
112
+ flex-wrap: nowrap;
113
+ margin-top: 0.625rem;
114
+ gap: 8.125rem;
115
+ align-items: center;
116
+ /* Set 'container-type: inline-size;' to reference container*/
117
+ }
118
+ @container (width < 576px) {
119
+ .community-features {
120
+ margin-top: 0.125rem;
121
+ }
122
+ }
123
+
124
+ .members {
125
+ display: flex;
126
+ align-items: center;
127
+ gap: 0.625rem;
128
+ /* Set 'container-type: inline-size;' to reference container*/
129
+ }
130
+ @container (width < 576px) {
131
+ .members {
132
+ align-items: flex-end;
133
+ gap: 0.25rem;
134
+ }
135
+ }
136
+ .members__count {
137
+ font-size: 0.9375rem;
138
+ line-height: 1;
139
+ font-weight: 500;
140
+ /* Set 'container-type: inline-size;' to reference container*/
141
+ }
142
+ @container (width < 576px) {
143
+ .members__count {
144
+ font-weight: 600;
145
+ }
146
+ }
147
+ .members__label {
148
+ font-size: 0.75rem;
149
+ line-height: 1;
150
+ font-weight: 400;
151
+ color: var(--sc-mc-color--text-secondary);
152
+ /* Set 'container-type: inline-size;' to reference container*/
153
+ }
154
+ @container (width < 576px) {
155
+ .members__label {
156
+ font-weight: 600;
157
+ }
158
+ }
159
+
160
+ .actions {
161
+ --button--min-width: 7.5rem;
162
+ }
163
+
164
+ .leave-actions {
165
+ background: var(--sc-mc-color--bg-button);
166
+ border-radius: 0.25rem;
167
+ }
168
+ .leave-actions__button {
169
+ padding: 0.3125rem 0.9375rem;
170
+ font-size: 0.75rem;
171
+ }</style>
@@ -0,0 +1,11 @@
1
+ import type { Locale } from '../../../core/locale';
2
+ import type { MediaCenterModel } from '../../config/types';
3
+ import type { IMediaCenterMembershipHandler } from '../../membership';
4
+ type Props = {
5
+ target: MediaCenterModel;
6
+ membershipHandler: IMediaCenterMembershipHandler | null;
7
+ locale: Locale;
8
+ };
9
+ declare const CommunityFeatures: import("svelte").Component<Props, {}, "">;
10
+ type CommunityFeatures = ReturnType<typeof CommunityFeatures>;
11
+ export default CommunityFeatures;
@@ -1,8 +1,8 @@
1
- import type { IMediaCenterConfig } from '../../config/types';
1
+ import type { IMediaCenterDataProvider } from '../../config/types';
2
2
  import { StreamsInCategory, ShortVideosInCategory } from './types.svelte';
3
3
  export declare class DiscoverDataLoader {
4
- private readonly config;
5
- constructor(config: IMediaCenterConfig);
4
+ private readonly dataProvider;
5
+ constructor(dataProvider: IMediaCenterDataProvider);
6
6
  loadStreams: (holder: StreamsInCategory) => Promise<void>;
7
7
  loadShortVideos: (holder: ShortVideosInCategory) => Promise<void>;
8
8
  }
@@ -1,15 +1,15 @@
1
1
  import { PostType } from '../../..';
2
2
  import { StreamsInCategory, ShortVideosInCategory } from './types.svelte';
3
3
  export class DiscoverDataLoader {
4
- config;
5
- constructor(config) {
6
- this.config = config;
4
+ dataProvider;
5
+ constructor(dataProvider) {
6
+ this.dataProvider = dataProvider;
7
7
  }
8
8
  loadStreams = async (holder) => {
9
9
  if (holder.continuationToken === null) {
10
10
  return;
11
11
  }
12
- const streamsResponse = await this.config.streamPlayer.getStreamsCursor({
12
+ const streamsResponse = await this.dataProvider.streamPlayer.getStreamsCursor({
13
13
  filter: { categoryId: holder.categoryId ?? undefined },
14
14
  limit: 6,
15
15
  continuationToken: holder.continuationToken
@@ -21,7 +21,7 @@ export class DiscoverDataLoader {
21
21
  if (holder.continuationToken === null) {
22
22
  return;
23
23
  }
24
- const shortVideosResponse = await this.config.postsPlayer.getPostsCursor({
24
+ const shortVideosResponse = await this.dataProvider.postsPlayer.getPostsCursor({
25
25
  filter: {
26
26
  categoryId: holder.categoryId,
27
27
  types: [PostType.ShortVideo]
@@ -1,15 +1,13 @@
1
- <script lang="ts">import { compactNumber } from '../../../core/utils/compact-number';
2
- import { ImageRounded } from '../../../ui/image';
1
+ <script lang="ts">import { ImageRounded } from '../../../ui/image';
3
2
  import { LineClamp } from '../../../ui/line-clamp';
4
3
  import { ProportionalContainer } from '../../../ui/proportional-container';
5
- import { DiscoverHeaderLocalization } from './discover-header-localization';
4
+ import { default as CommunityFeatures } from './community-features.svelte';
6
5
  import { MomentsCircle } from '../moments';
7
- let { context, locale = 'en' } = $props();
8
- const localization = $derived(new DiscoverHeaderLocalization(locale));
6
+ let { context } = $props();
9
7
  </script>
10
8
 
11
- {#if context.targetData}
12
- {@const target = context.targetData}
9
+ {#if context.model}
10
+ {@const target = context.model}
13
11
  <div class="header">
14
12
  <div class="header__avatar">
15
13
  <MomentsCircle context={context} />
@@ -17,18 +15,11 @@ const localization = $derived(new DiscoverHeaderLocalization(locale));
17
15
  <div class="header__info">
18
16
  <p class="header__name">{target.name}</p>
19
17
  <p class="header__handle">@{target.handle}</p>
20
- <div class="header__members">
21
- <span class="header__members-count">
22
- {compactNumber(target.membersCount, { locale: localization.locale })}
23
- </span>
24
- <span class="header__members-label">
25
- {localization.membersLabel(target.membersCount)}
26
- </span>
27
- </div>
18
+ <CommunityFeatures target={target} membershipHandler={context.membershipHandler} locale={context.locale} />
28
19
 
29
20
  {#if target.description}
30
21
  <p class="header__description">
31
- <LineClamp enableShowMore={true} locale={locale}>{target.description}</LineClamp>
22
+ <LineClamp enableShowMore={true} locale={context.locale}>{target.description}</LineClamp>
32
23
  </p>
33
24
  {/if}
34
25
  </div>
@@ -48,19 +39,12 @@ const localization = $derived(new DiscoverHeaderLocalization(locale));
48
39
  </div>
49
40
  <div class="header-mobile__texts">
50
41
  <p class="header-mobile__name">{target.name}</p>
51
- <div class="header-mobile__members">
52
- <span class="header-mobile__members-count">
53
- {compactNumber(target.membersCount, { locale: localization.locale })}
54
- </span>
55
- <span class="header-mobile__members-label">
56
- {localization.membersLabel(target.membersCount)}
57
- </span>
58
- </div>
42
+ <CommunityFeatures target={target} membershipHandler={context.membershipHandler} locale={context.locale} />
59
43
  </div>
60
44
  </div>
61
45
  {#if target.description}
62
46
  <p class="header-mobile__description">
63
- <LineClamp enableShowMore={true} locale={locale}>{target.description}</LineClamp>
47
+ <LineClamp enableShowMore={true} locale={context.locale}>{target.description}</LineClamp>
64
48
  </p>
65
49
  {/if}
66
50
  </div>
@@ -82,7 +66,7 @@ const localization = $derived(new DiscoverHeaderLocalization(locale));
82
66
  flex-direction: row;
83
67
  gap: 2.25rem;
84
68
  padding-top: 1.25rem;
85
- color: #ffffff;
69
+ color: var(--sc-mc-color--text-primary);
86
70
  /* Set 'container-type: inline-size;' to reference container*/
87
71
  }
88
72
  @container (width < 576px) {
@@ -109,33 +93,13 @@ const localization = $derived(new DiscoverHeaderLocalization(locale));
109
93
  .header__handle {
110
94
  font-size: 0.875rem;
111
95
  font-weight: 400;
112
- color: #5a8dec;
113
- }
114
- :global([data-theme="dark"]) .header__handle {
115
- color: #5a8dec;
116
- }
117
- .header__members {
118
- margin-top: 0.625rem;
119
- display: flex;
120
- align-items: center;
121
- gap: 0.625rem;
122
- }
123
- .header__members-count {
124
- font-size: 0.9375rem;
125
- line-height: 1;
126
- font-weight: 500;
127
- }
128
- .header__members-label {
129
- font-size: 0.75rem;
130
- line-height: 1;
131
- font-weight: 400;
132
- color: #d1d5db;
96
+ color: var(--sc-mc-color--text-brand);
133
97
  }
134
98
  .header__description {
135
99
  margin-top: 0.875rem;
136
100
  font-size: 0.9375rem;
137
101
  max-width: 37.5rem;
138
- --line-clamp--line-clamp: 6;
102
+ --line-clamp--line-clamp: 5;
139
103
  }
140
104
  .header__side-banner-container {
141
105
  width: 29.375rem;
@@ -154,7 +118,7 @@ const localization = $derived(new DiscoverHeaderLocalization(locale));
154
118
  flex-direction: column;
155
119
  gap: 1.0625rem;
156
120
  padding-top: 0.625rem;
157
- color: #ffffff;
121
+ color: var(--sc-mc-color--text-primary);
158
122
  /* Set 'container-type: inline-size;' to reference container*/
159
123
  }
160
124
  @container (width < 576px) {
@@ -191,22 +155,6 @@ const localization = $derived(new DiscoverHeaderLocalization(locale));
191
155
  letter-spacing: -0.0103125rem;
192
156
  }
193
157
  }
194
- .header-mobile__members {
195
- display: flex;
196
- align-items: flex-end;
197
- gap: 0.25rem;
198
- }
199
- .header-mobile__members-count {
200
- font-size: 0.9375rem;
201
- line-height: 1;
202
- font-weight: 600;
203
- }
204
- .header-mobile__members-label {
205
- font-size: 0.75rem;
206
- line-height: 1;
207
- font-weight: 600;
208
- color: #d1d5db;
209
- }
210
158
  .header-mobile__description {
211
159
  font-size: 1rem;
212
160
  font-weight: 500;
@@ -1,8 +1,6 @@
1
- import type { Locale } from '../../../core/locale';
2
1
  import type { MediaCenterContext } from '../media-center-context.svelte';
3
2
  type Props = {
4
3
  context: MediaCenterContext;
5
- locale?: Locale;
6
4
  };
7
5
  declare const DiscoverHeader: import("svelte").Component<Props, {}, "">;
8
6
  type DiscoverHeader = ReturnType<typeof DiscoverHeader>;
@@ -1,7 +1,7 @@
1
- import type { IMediaCenterConfig } from '../../config/types';
1
+ import type { IMediaCenterDataProvider } from '../../config/types';
2
2
  import { ShortVideosInCategory, StreamsInCategory } from './types.svelte';
3
3
  export declare class DiscoverViewHandler {
4
- private readonly config;
4
+ private readonly dataProvider;
5
5
  private _activated;
6
6
  private _state;
7
7
  private _streamsInCategoryCache;
@@ -10,7 +10,7 @@ export declare class DiscoverViewHandler {
10
10
  private _shortVideosInCategory;
11
11
  private _dataLoader;
12
12
  private _shortVideosLoadingDeferred;
13
- constructor(config: IMediaCenterConfig);
13
+ constructor(dataProvider: IMediaCenterDataProvider);
14
14
  get activated(): boolean;
15
15
  get active(): boolean;
16
16
  get loading(): boolean;
@@ -2,7 +2,7 @@ import { Deferred } from '../../../core/deferred';
2
2
  import { DiscoverDataLoader } from './data-loading';
3
3
  import { ShortVideosInCategory, StreamsInCategory } from './types.svelte';
4
4
  export class DiscoverViewHandler {
5
- config;
5
+ dataProvider;
6
6
  _activated = $state(false);
7
7
  _state = $state('loading');
8
8
  _streamsInCategoryCache = $state.raw([]);
@@ -11,9 +11,9 @@ export class DiscoverViewHandler {
11
11
  _shortVideosInCategory = $state.raw([]);
12
12
  _dataLoader;
13
13
  _shortVideosLoadingDeferred = null;
14
- constructor(config) {
15
- this.config = config;
16
- this._dataLoader = new DiscoverDataLoader(this.config);
14
+ constructor(dataProvider) {
15
+ this.dataProvider = dataProvider;
16
+ this._dataLoader = new DiscoverDataLoader(this.dataProvider);
17
17
  }
18
18
  get activated() {
19
19
  return this._activated;
@@ -4,15 +4,15 @@ import { StreamCard } from '../../../streams/stream-card';
4
4
  import { InfiniteScrolling } from '../../../ui/infinite-scrolling';
5
5
  import { default as Header } from './discover-header.svelte';
6
6
  import { DiscoverViewLocalization } from './discover-view-localization';
7
- let { context, locale = 'en', on } = $props();
7
+ let { context, on } = $props();
8
8
  const handler = $derived(context.discoverHandler);
9
- const localization = $derived(new DiscoverViewLocalization(locale));
9
+ const localization = $derived(new DiscoverViewLocalization(context.locale));
10
10
  </script>
11
11
 
12
12
  {#if !handler.loading}
13
13
  <div class="media-center-discover">
14
14
  <div class="media-center-discover__content">
15
- <Header context={context} locale={locale} />
15
+ <Header context={context} />
16
16
  {#if handler.streamsHolder?.streams.length}
17
17
  <div class="media-center-discover__section">
18
18
  <div class="media-center-discover__section-header">
@@ -46,7 +46,7 @@ const localization = $derived(new DiscoverViewLocalization(locale));
46
46
  viewsCount: item.viewsCount,
47
47
  products: item.products
48
48
  }}
49
- locale={locale}
49
+ locale={context.locale}
50
50
  on={{ click: () => on.shortVideoSelected(item) }} />
51
51
  {/each}
52
52
  </div>
@@ -154,8 +154,8 @@ const localization = $derived(new DiscoverViewLocalization(locale));
154
154
  font-size: 1.125rem;
155
155
  line-height: 1.75rem;
156
156
  font-weight: 600;
157
- color: #ffffff;
158
- text-shadow: 0 1px 0 rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 6px rgba(0, 0, 0, 0.05);
157
+ color: var(--sc-mc-color--text-white);
158
+ text-shadow: var(--sc-mc-color--text-white-shadow);
159
159
  }
160
160
  .media-center-discover__section-content {
161
161
  display: grid;