@streamscloud/embeddable 11.0.0 → 12.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 (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 +28 -24
  15. package/dist/media-center/config/operations.generated.d.ts +36 -23
  16. package/dist/media-center/config/operations.generated.js +53 -33
  17. package/dist/media-center/config/operations.graphql +34 -21
  18. package/dist/media-center/config/types.d.ts +13 -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 +29 -10
  45. package/dist/media-center/media-center/handlers/categories-handler.svelte.js +25 -7
  46. package/dist/media-center/media-center/handlers/index.d.ts +2 -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 +4 -8
  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 +94 -93
  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
@@ -9,13 +9,13 @@
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';
13
- import IconHeartFilled from '@fluentui/svg-icons/icons/heart_20_filled.svg?raw';
14
- import IconHeart from '@fluentui/svg-icons/icons/heart_28_regular.svg?raw';
15
- import IconShare from '@fluentui/svg-icons/icons/share_28_regular.svg?raw';
16
- import IconShoppingBag from '@fluentui/svg-icons/icons/shopping_bag_28_regular.svg?raw';
17
- import IconSpeaker2 from '@fluentui/svg-icons/icons/speaker_2_28_regular.svg?raw';
18
- import IconSpeakerMute from '@fluentui/svg-icons/icons/speaker_mute_28_regular.svg?raw';
12
+ import { MobilePlayerButtonsGroup, PlayerButton, PlayerButtonsGroup } from '../../ui/player/button';
13
+ import IconHeartFilled from '@fluentui/svg-icons/icons/heart_32_filled.svg?raw';
14
+ import IconHeart from '@fluentui/svg-icons/icons/heart_32_regular.svg?raw';
15
+ import IconShare from '@fluentui/svg-icons/icons/share_48_regular.svg?raw';
16
+ import IconShoppingBag from '@fluentui/svg-icons/icons/shopping_bag_32_regular.svg?raw';
17
+ import IconSpeaker2 from '@fluentui/svg-icons/icons/speaker_2_32_regular.svg?raw';
18
+ import IconSpeakerMute from '@fluentui/svg-icons/icons/speaker_mute_32_regular.svg?raw';
19
19
  let { model, activeColor, inactiveColor, socialInteractionsHandler, on } = $props();
20
20
  const showSocialInteractions = $derived(!!socialInteractionsHandler && model.enableSocialInteractions);
21
21
  let isLikedStore = $state.raw({
@@ -71,10 +71,47 @@ const refreshIsLiked = () => __awaiter(void 0, void 0, void 0, function* () {
71
71
  });
72
72
  </script>
73
73
 
74
- {#if actions.length > 0}
75
- {#if actions.length === 1}
76
- <PlayerButton scaleEffect={true} activeColor={activeColor} inactiveColor={inactiveColor} icon={actions[0].icon} on={{ click: actions[0].callback }} />
77
- {:else}
78
- <PlayerButtonsGroup scaleEffect={true} borderColor={activeColor} backgroundColor={inactiveColor} actions={actions} />
74
+ <div class="desktop-controls">
75
+ {#if actions.length > 0}
76
+ {#if actions.length === 1}
77
+ <PlayerButton scaleEffect={true} activeColor={activeColor} inactiveColor={inactiveColor} icon={actions[0].icon} on={{ click: actions[0].callback }} />
78
+ {:else}
79
+ <PlayerButtonsGroup scaleEffect={true} activeColor={activeColor} backgroundColor={inactiveColor} actions={actions} />
80
+ {/if}
79
81
  {/if}
80
- {/if}
82
+ </div>
83
+
84
+ <div class="mobile-controls">
85
+ <MobilePlayerButtonsGroup actions={actions} />
86
+ </div>
87
+
88
+ <style>@keyframes fadeIn {
89
+ 0% {
90
+ opacity: 1;
91
+ }
92
+ 50% {
93
+ opacity: 0.4;
94
+ }
95
+ 100% {
96
+ opacity: 1;
97
+ }
98
+ }
99
+ .desktop-controls {
100
+ display: block;
101
+ /* Set 'container-type: inline-size;' to reference container*/
102
+ }
103
+ @container (width < 576px) {
104
+ .desktop-controls {
105
+ display: none;
106
+ }
107
+ }
108
+
109
+ .mobile-controls {
110
+ display: none;
111
+ /* Set 'container-type: inline-size;' to reference container*/
112
+ }
113
+ @container (width < 576px) {
114
+ .mobile-controls {
115
+ display: block;
116
+ }
117
+ }</style>
@@ -10,6 +10,8 @@ export type GetPostsQuery = {
10
10
  items: Array<{
11
11
  id: string;
12
12
  enableSocialInteractions: boolean;
13
+ viewsCount: number;
14
+ displayDate: any;
13
15
  ownerProfile: {
14
16
  id: string;
15
17
  type: SchemaTypes.ProfileType;
@@ -89,6 +91,8 @@ export type GetPostsQuery = {
89
91
  export type PostsPlayerPayloadFragment = {
90
92
  id: string;
91
93
  enableSocialInteractions: boolean;
94
+ viewsCount: number;
95
+ displayDate: any;
92
96
  ownerProfile: {
93
97
  id: string;
94
98
  type: SchemaTypes.ProfileType;
@@ -221,7 +221,9 @@ export const PostsPlayerPayloadFragmentDoc = {
221
221
  }
222
222
  ]
223
223
  }
224
- }
224
+ },
225
+ { kind: 'Field', name: { kind: 'Name', value: 'viewsCount' } },
226
+ { kind: 'Field', name: { kind: 'Name', value: 'displayDate' } }
225
227
  ]
226
228
  }
227
229
  }
@@ -468,7 +470,9 @@ export const GetPostsDocument = {
468
470
  }
469
471
  ]
470
472
  }
471
- }
473
+ },
474
+ { kind: 'Field', name: { kind: 'Name', value: 'viewsCount' } },
475
+ { kind: 'Field', name: { kind: 'Name', value: 'displayDate' } }
472
476
  ]
473
477
  }
474
478
  },
@@ -7,6 +7,8 @@ export type IPostModel = {
7
7
  kicker: string | null;
8
8
  title: string | null;
9
9
  text: string | null;
10
+ viewsCount: number;
11
+ displayDate: string;
10
12
  readMoreUrl?: string;
11
13
  heading: IPostHeadingModel | null;
12
14
  enableSocialInteractions: boolean;
@@ -57,25 +57,27 @@ const variables = $derived.by(() => {
57
57
 
58
58
  <div class="post-viewer" style={variables} use:viewerMounted>
59
59
  <PostMedia id={model.id} media={model.media} locale={locale} autoplay={autoplay} on={{ videoProgress: on?.progress }} />
60
- <div class="post-viewer__information">
61
- {#if model.heading}
62
- <Heading model={model.heading} uiManager={uiManager} localization={localization} />
63
- {/if}
64
- <Texts model={model.texts} uiManager={uiManager} localization={localization} />
60
+ {#if (uiManager.showAttachments && model.attachments) || model.heading || model.texts.kicker || model.texts.title || model.texts.text || model.texts.readMoreUrl}
61
+ <div class="post-viewer__information">
62
+ {#if model.heading}
63
+ <Heading model={model.heading} uiManager={uiManager} localization={localization} />
64
+ {/if}
65
+ <Texts model={model.texts} uiManager={uiManager} localization={localization} />
65
66
 
66
- {#if uiManager.showAttachments && model.attachments}
67
- <AttachmentsHorizontal
68
- model={model}
69
- trackingParams={trackingParams}
70
- uiManager={uiManager}
71
- on={{
72
- productClick: on?.productClick,
73
- productImpression: on?.productImpression,
74
- adClick: on?.adClick,
75
- adImpression: on?.adImpression
76
- }} />
77
- {/if}
78
- </div>
67
+ {#if uiManager.showAttachments && model.attachments}
68
+ <AttachmentsHorizontal
69
+ model={model}
70
+ trackingParams={trackingParams}
71
+ uiManager={uiManager}
72
+ on={{
73
+ productClick: on?.productClick,
74
+ productImpression: on?.productImpression,
75
+ adClick: on?.adClick,
76
+ adImpression: on?.adImpression
77
+ }} />
78
+ {/if}
79
+ </div>
80
+ {/if}
79
81
 
80
82
  {#if uiManager.showControls}
81
83
  <div class="post-viewer__controls-panel" use:trackControlsPanelSize>
@@ -129,6 +131,12 @@ const variables = $derived.by(() => {
129
131
  justify-content: flex-end;
130
132
  align-items: flex-end;
131
133
  padding: 0 0.625rem;
134
+ /* Set 'container-type: inline-size;' to reference container*/
135
+ }
136
+ @container (width < 576px) {
137
+ .post-viewer__controls-panel {
138
+ padding-right: 0;
139
+ }
132
140
  }
133
141
  .post-viewer__information {
134
142
  pointer-events: none;
@@ -11,6 +11,8 @@ export const mapToPostModel = (payload) => {
11
11
  title: extractPostTitle(payload.postData),
12
12
  text: extractPostText(payload.postData),
13
13
  enableSocialInteractions: payload.enableSocialInteractions,
14
+ viewsCount: payload.viewsCount,
15
+ displayDate: payload.displayDate,
14
16
  heading: null,
15
17
  ads: payload.ad ? [mapToPostViewerAdCardModel(payload.ad)] : [],
16
18
  products: payload.allProducts.map((x) => mapToPostViewerProductCard(x))
@@ -3,6 +3,8 @@ import type { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-
3
3
  export type PostViewerPayloadFragment = {
4
4
  id: string;
5
5
  enableSocialInteractions: boolean;
6
+ viewsCount: number;
7
+ displayDate: any;
6
8
  allProducts: Array<{
7
9
  id: string;
8
10
  title: string;
@@ -199,7 +199,9 @@ export const PostViewerPayloadFragmentDoc = {
199
199
  }
200
200
  ]
201
201
  }
202
- }
202
+ },
203
+ { kind: 'Field', name: { kind: 'Name', value: 'viewsCount' } },
204
+ { kind: 'Field', name: { kind: 'Name', value: 'displayDate' } }
203
205
  ]
204
206
  }
205
207
  }
@@ -70,4 +70,6 @@ fragment PostViewerPayloadFragment on Post {
70
70
  text
71
71
  }
72
72
  }
73
+ viewsCount
74
+ displayDate
73
75
  }
@@ -13,17 +13,17 @@ const variables = $derived.by(() => {
13
13
  <div class="post-viewer-texts" style={variables}>
14
14
  {#if model.kicker}
15
15
  <div class="post-viewer-texts__kicker">
16
- <LineClamp value={model.kicker} maxLines={1} enableShowMore={false} />
16
+ <LineClamp maxLines={1} enableShowMore={false} locale={localization.locale}>{model.kicker}</LineClamp>
17
17
  </div>
18
18
  {/if}
19
19
  {#if model.title}
20
20
  <div class="post-viewer-texts__title">
21
- <LineClamp value={model.title} maxLines={2} enableShowMore={false} />
21
+ <LineClamp maxLines={2} enableShowMore={false} locale={localization.locale}>{model.title}</LineClamp>
22
22
  </div>
23
23
  {/if}
24
24
  {#if model.text}
25
25
  <div class="post-viewer-texts__text">
26
- <LineClamp value={model.text} maxLines={2} enableShowMore={true} />
26
+ <LineClamp maxLines={2} enableShowMore={true} locale={localization.locale}>{model.text}</LineClamp>
27
27
  </div>
28
28
  {/if}
29
29
  {#if model.readMoreUrl}
@@ -1,16 +1,32 @@
1
- <script lang="ts">import { createShadowRoot } from '../../ui/shadow-dom';
2
- import { default as PostsPlayerView } from './posts-player-view.svelte';
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 { CloseOrchestrator } from '../../ui/player/close-orchestrator';
11
+ import { createShadowRoot } from '../../ui/shadow-dom';
12
+ import { default as PostsPlayerProxy } from './posts-player-proxy.svelte';
3
13
  import { mount, unmount } from 'svelte';
4
14
  let { dataProvider, socialInteractionsHandler, playerSettings, analyticsHandler, on } = $props();
5
15
  const initHost = (node) => {
6
16
  const shadowRoot = createShadowRoot(node);
7
- const mounted = mount(PostsPlayerView, {
17
+ const mounted = mount(PostsPlayerProxy, {
8
18
  target: shadowRoot,
9
19
  props: {
10
20
  dataProvider,
11
21
  socialInteractionsHandler,
12
22
  playerSettings,
13
23
  analyticsHandler,
24
+ closeOrchestrator: new CloseOrchestrator({
25
+ closeFn: () => __awaiter(void 0, void 0, void 0, function* () {
26
+ yield unmount(mounted);
27
+ }),
28
+ canClose: false
29
+ }),
14
30
  on
15
31
  }
16
32
  });
@@ -22,6 +38,4 @@ const initHost = (node) => {
22
38
  };
23
39
  </script>
24
40
 
25
- {#key dataProvider}
26
- <div class="posts-player-host" use:initHost></div>
27
- {/key}
41
+ <div class="posts-player-host" use:initHost></div>
@@ -1,4 +1,20 @@
1
- import type { PostPlayerProps } from './types';
2
- declare const Cmp: import("svelte").Component<PostPlayerProps, {}, "">;
1
+ import type { Locale } from '../../core/locale';
2
+ import type { IPostSocialInteractionsHandler } from '..';
3
+ import type { IPlayerDataProvider } from '../../ui/player/providers';
4
+ import type { IPostAnalyticsHandler, PostPlayerModel } from './types';
5
+ type Props = {
6
+ dataProvider: IPlayerDataProvider<PostPlayerModel>;
7
+ socialInteractionsHandler?: IPostSocialInteractionsHandler;
8
+ analyticsHandler?: IPostAnalyticsHandler;
9
+ playerSettings?: {
10
+ locale?: Locale;
11
+ showStreamsCloudWatermark?: boolean;
12
+ disableBackground?: boolean;
13
+ };
14
+ on?: {
15
+ postActivated?: (id: string) => void;
16
+ };
17
+ };
18
+ declare const Cmp: import("svelte").Component<Props, {}, "">;
3
19
  type Cmp = ReturnType<typeof Cmp>;
4
20
  export default Cmp;
@@ -1,7 +1,8 @@
1
+ import type { Locale } from '../../core/locale';
1
2
  import { type IMediaCenterConfig } from '../../media-center/config/types';
2
3
  import type { IPostSocialInteractionsHandler } from '../social-interactions';
3
4
  import { default as PostsPlayer } from './cmp.posts-player.svelte';
4
- import type { IPostAnalyticsHandler, PostPlayerModel, PostPlayerSettings } from './types';
5
+ import type { IPostAnalyticsHandler, PostPlayerModel } from './types';
5
6
  export { PostsPlayer, type PostPlayerModel };
6
7
  export type { IMediaCenterConfig, IPostAnalyticsHandler };
7
8
  export { mapToPostPlayerModel } from '../data-loaders/mapper';
@@ -74,10 +75,18 @@ export { mapToPostPlayerModel } from '../data-loaders/mapper';
74
75
  */
75
76
  export declare function openPostsPlayer(init: {
76
77
  postsProvider: IPostsPlayerDataProvider;
77
- mediaCenterConfig?: IMediaCenterConfig;
78
+ mediaCenterConfig: IMediaCenterConfig;
79
+ playerSettings?: PostsPlayerSettings;
80
+ on?: {
81
+ playerClosed?: () => void;
82
+ postActivated?: (id: string) => void;
83
+ };
84
+ }): void;
85
+ export declare function openPostsPlayer(init: {
86
+ postsProvider: IPostsPlayerDataProvider;
78
87
  analyticsHandler?: IPostAnalyticsHandler;
79
88
  socialInteractionsHandler?: IPostSocialInteractionsHandler;
80
- playerSettings?: PostPlayerSettings;
89
+ playerSettings?: PostsPlayerSettings;
81
90
  on?: {
82
91
  playerClosed?: () => void;
83
92
  postActivated?: (id: string) => void;
@@ -106,3 +115,9 @@ export type IPostsPlayerDataProvider<TChunk extends WithId = WithId> = {
106
115
  type WithId = {
107
116
  id: string;
108
117
  };
118
+ export type PostsPlayerSettings = {
119
+ disableBackground?: boolean;
120
+ locale?: Locale;
121
+ showStreamsCloudWatermark?: boolean;
122
+ hideCloseButton?: boolean;
123
+ };
@@ -1,104 +1,57 @@
1
1
  import {} from '../../media-center/config/types';
2
2
  import { MediaCenter } from '../../media-center/media-center';
3
+ import { CloseOrchestrator } from '../../ui/player/close-orchestrator';
3
4
  import { ModalShadowHost } from '../../ui/shadow-dom';
4
5
  import { default as PostsPlayer } from './cmp.posts-player.svelte';
6
+ import { default as PostsPlayerProxy } from './posts-player-proxy.svelte';
5
7
  import { mount, unmount } from 'svelte';
6
8
  export { PostsPlayer };
7
9
  export { mapToPostPlayerModel } from '../data-loaders/mapper';
8
- /**
9
- * Opens the posts player modal.
10
- *
11
- * @param init Configuration options.
12
- *
13
- * Data provider (required)
14
- * @param init.postsProvider
15
- * Provider that supplies post items to the player.
16
- *
17
- * Media center (optional)
18
- * @param {IMediaCenterConfig} [init.mediaCenterConfig]
19
- * Optional media-center config passed to MediaCenter.
20
- *
21
- * Analytics (optional)
22
- * @param {IPostAnalyticsHandler} [init.analyticsHandler]
23
- * Custom analytics handler for posts player events.
24
- *
25
- * Social interactions (optional)
26
- * @param {IPostSocialInteractionsHandler} [init.socialInteractionsHandler]
27
- * Handler for social interactions (like, share, etc.).
28
- *
29
- * Player settings
30
- * @param {PostPlayerSettings} [init.playerSettings]
31
- * Player UI and behavior settings.
32
- * Fields of PostPlayerSettings:
33
- * - {boolean} [disableBackground]
34
- * If true, hides the player's background image.
35
- * - {boolean} [hideCloseButton]
36
- * If true, hides the close button.
37
- * - {'en'|'no'} [locale='en']
38
- * Localization for the player UI. Default is 'en'; use 'no' for Norwegian.
39
- * - {boolean} [showStreamsCloudWatermark]
40
- * If true, shows the StreamsCloud watermark.
41
- *
42
- * Events
43
- * @param {{ playerClosed?: () => void; postActivated?: (id: string) => void }} [init.on]
44
- * Optional event handlers.
45
- * @param {() => void} [init.on.playerClosed]
46
- * Called after the player is fully closed (after unmount and removal from the DOM).
47
- * @param {(id: string) => void} [init.on.postActivated]
48
- * Called when a post becomes active (receives the post's id).
49
- *
50
- * @returns {void}
51
- *
52
- * @example
53
- * ```ts
54
- * import { openPostsPlayer } from '@streamscloud/embeddable/posts-player';
55
- *
56
- * openPostsPlayer({
57
- * postsProvider: myPostsProvider,
58
- * mediaCenterConfig: myMediaCenterConfig,
59
- * analyticsHandler: myAnalyticsHandler,
60
- * socialInteractionsHandler: mySocialHandler,
61
- * playerSettings: {
62
- * // Default locale is 'en'; set 'no' to switch to Norwegian:
63
- * locale: 'no',
64
- * disableBackground: false,
65
- * hideCloseButton: false,
66
- * showStreamsCloudWatermark: true,
67
- * },
68
- * on: {
69
- * playerClosed: () => console.log('Player closed'),
70
- * postActivated: (id) => console.log('Activated post', id),
71
- * },
72
- * });
73
- * ```
74
- */
75
10
  export function openPostsPlayer(init) {
76
11
  const { postsProvider: dataProvider, mediaCenterConfig, analyticsHandler, socialInteractionsHandler, playerSettings, on } = init;
77
12
  const shadowHost = new ModalShadowHost();
78
- const mounted = mount(MediaCenter, {
79
- target: shadowHost.shadowRoot,
80
- props: {
81
- config: mediaCenterConfig || null,
82
- playerProps: {
83
- mode: 'posts',
84
- props: {
85
- dataProvider,
86
- socialInteractionsHandler,
87
- analyticsHandler,
88
- playerSettings,
89
- on: {
90
- playerClosed: async () => {
91
- await unmount(mounted);
92
- shadowHost.remove();
93
- if (on?.playerClosed) {
94
- on.playerClosed();
95
- }
96
- },
97
- postActivated: on?.postActivated
13
+ let mounted;
14
+ const makeCloseOrchestrator = () => new CloseOrchestrator({
15
+ closeFn: async () => {
16
+ await unmount(mounted);
17
+ shadowHost.remove();
18
+ if (on?.playerClosed) {
19
+ on.playerClosed();
20
+ }
21
+ },
22
+ canClose: !playerSettings?.hideCloseButton
23
+ });
24
+ if (mediaCenterConfig) {
25
+ mounted = mount(MediaCenter, {
26
+ target: shadowHost.shadowRoot,
27
+ props: {
28
+ config: mediaCenterConfig,
29
+ settings: playerSettings,
30
+ modeProps: {
31
+ mode: 'posts',
32
+ props: {
33
+ dataProvider,
34
+ onPostActivated: on?.postActivated
98
35
  }
36
+ },
37
+ closeOrchestrator: makeCloseOrchestrator()
38
+ }
39
+ });
40
+ }
41
+ else {
42
+ mounted = mount(PostsPlayerProxy, {
43
+ target: shadowHost.shadowRoot,
44
+ props: {
45
+ dataProvider,
46
+ socialInteractionsHandler,
47
+ analyticsHandler,
48
+ playerSettings,
49
+ closeOrchestrator: makeCloseOrchestrator(),
50
+ on: {
51
+ postActivated: on?.postActivated
99
52
  }
100
53
  }
101
- }
102
- });
54
+ });
55
+ }
103
56
  shadowHost.attachToBody();
104
57
  }
@@ -0,0 +1,19 @@
1
+ <script lang="ts">import {} from '../../ui/player/close-orchestrator';
2
+ import { WithBackground } from '../../ui/with-background';
3
+ import { default as PostsPlayerView } from './posts-player-view.svelte';
4
+ let { dataProvider, socialInteractionsHandler, closeOrchestrator, playerSettings, analyticsHandler, on } = $props();
5
+ let backgroundImageUrl = $state(null);
6
+ const handleBackgroundImagedLoaded = (url) => {
7
+ backgroundImageUrl = url;
8
+ };
9
+ </script>
10
+
11
+ <WithBackground backgroundDisabled={playerSettings?.disableBackground === true} backgroundImageUrl={backgroundImageUrl}>
12
+ <PostsPlayerView
13
+ dataProvider={{ type: 'provider', provider: dataProvider }}
14
+ socialInteractionsHandler={socialInteractionsHandler}
15
+ playerSettings={playerSettings}
16
+ analyticsHandler={analyticsHandler}
17
+ closeOrchestrator={closeOrchestrator}
18
+ on={{ postActivated: on?.postActivated, backgroundImageLoaded: playerSettings?.disableBackground === true ? undefined : handleBackgroundImagedLoaded }} />
19
+ </WithBackground>
@@ -0,0 +1,22 @@
1
+ import type { Locale } from '../../core/locale';
2
+ import type { IPostSocialInteractionsHandler } from '..';
3
+ import { type ICloseOrchestrator } from '../../ui/player/close-orchestrator';
4
+ import type { IPlayerDataProvider } from '../../ui/player/providers';
5
+ import type { IPostAnalyticsHandler, PostPlayerModel } from './types';
6
+ type Props = {
7
+ dataProvider: IPlayerDataProvider<PostPlayerModel>;
8
+ socialInteractionsHandler?: IPostSocialInteractionsHandler;
9
+ analyticsHandler?: IPostAnalyticsHandler;
10
+ closeOrchestrator: ICloseOrchestrator;
11
+ playerSettings?: {
12
+ locale?: Locale;
13
+ showStreamsCloudWatermark?: boolean;
14
+ disableBackground?: boolean;
15
+ };
16
+ on?: {
17
+ postActivated?: (id: string) => void;
18
+ };
19
+ };
20
+ declare const PostsPlayerProxy: import("svelte").Component<Props, {}, "">;
21
+ type PostsPlayerProxy = ReturnType<typeof PostsPlayerProxy>;
22
+ export default PostsPlayerProxy;
@@ -11,11 +11,11 @@ import { PostType } from '../..';
11
11
  import { ContentPlayer, ContentPlayerConfig } from '../../content-player';
12
12
  import { ContentPlayerSettings } from '../../content-player/content-player-settings';
13
13
  import { preloadImage } from '../../core/image-preloader';
14
- import { Utils } from '../../core/utils';
15
14
  import { getPostCoverImage } from '../model';
16
- import { DefaultChunksPlayerBuffer, DefaultFeedPlayerBuffer } from '../../ui/player/providers';
15
+ import {} from '../../ui/player/providers';
16
+ import { initBufferFromProvider } from '../../ui/player/providers/service';
17
17
  import { untrack } from 'svelte';
18
- let { dataProvider, socialInteractionsHandler, playerSettings, analyticsHandler, on, mediaCenterData } = $props();
18
+ let { dataProvider, socialInteractionsHandler, playerSettings, analyticsHandler, closeOrchestrator, on } = $props();
19
19
  $effect(() => {
20
20
  void dataProvider;
21
21
  untrack(() => {
@@ -23,36 +23,21 @@ $effect(() => {
23
23
  initBuffer(dataProvider);
24
24
  });
25
25
  });
26
- $effect(() => contentPlayerConfig.updateMediaCenterData(mediaCenterData));
27
26
  const initBuffer = (dataProvider) => __awaiter(void 0, void 0, void 0, function* () {
28
- switch (dataProvider.kind) {
29
- case 'feed':
30
- new DefaultFeedPlayerBuffer(dataProvider, {
31
- preloaded: (instance) => __awaiter(void 0, void 0, void 0, function* () {
32
- if (instance.loaded.length) {
33
- const coverUrl = getPostCoverImage(instance.loaded[0]);
34
- yield preloadImage(coverUrl);
35
- contentPlayerConfig.setBackgroundImageUrl(coverUrl);
36
- }
37
- contentPlayerConfig.playerBuffer = instance;
38
- })
39
- });
40
- break;
41
- case 'chunks':
42
- new DefaultChunksPlayerBuffer(dataProvider, {
43
- preloaded: (instance) => __awaiter(void 0, void 0, void 0, function* () {
44
- if (instance.loaded.length) {
45
- const coverUrl = getPostCoverImage(instance.loaded[0]);
46
- yield preloadImage(coverUrl);
47
- contentPlayerConfig.setBackgroundImageUrl(coverUrl);
48
- }
49
- contentPlayerConfig.playerBuffer = instance;
50
- })
51
- });
52
- break;
53
- default:
54
- Utils.assertUnreachable(dataProvider);
27
+ let newBuffer;
28
+ if (dataProvider.type === 'buffer') {
29
+ newBuffer = dataProvider.buffer;
55
30
  }
31
+ else {
32
+ newBuffer = initBufferFromProvider(dataProvider.provider);
33
+ }
34
+ yield newBuffer.ensureWarmedUp();
35
+ if (newBuffer.loaded.length && (on === null || on === void 0 ? void 0 : on.backgroundImageLoaded)) {
36
+ const coverUrl = getPostCoverImage(newBuffer.loaded[0]);
37
+ yield preloadImage(coverUrl);
38
+ on.backgroundImageLoaded(coverUrl);
39
+ }
40
+ contentPlayerConfig.playerBuffer = newBuffer;
56
41
  });
57
42
  const getLoadedItemById = (id) => {
58
43
  if (!contentPlayerConfig.playerBuffer) {
@@ -66,10 +51,9 @@ const contentPlayerConfig = new ContentPlayerConfig({
66
51
  postModelFromCurrentItem: (item) => item
67
52
  },
68
53
  socialInteractionsHandler,
69
- mediaCenterData,
70
54
  settings: new ContentPlayerSettings(playerSettings),
55
+ closeOrchestrator,
71
56
  callbacks: {
72
- close: on === null || on === void 0 ? void 0 : on.playerClosed,
73
57
  productClick: (id, postId) => {
74
58
  var _a;
75
59
  if (((_a = getLoadedItemById(postId)) === null || _a === void 0 ? void 0 : _a.postType) === PostType.ShortVideo) {
@@ -96,7 +80,9 @@ const contentPlayerConfig = new ContentPlayerConfig({
96
80
  if (!post) {
97
81
  return;
98
82
  }
99
- contentPlayerConfig.setBackgroundImageUrl(getPostCoverImage(post));
83
+ if (on === null || on === void 0 ? void 0 : on.backgroundImageLoaded) {
84
+ on.backgroundImageLoaded(getPostCoverImage(post));
85
+ }
100
86
  if (post.analyticsOrganizationId) {
101
87
  analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.setOrganizationId(post.analyticsOrganizationId);
102
88
  }
@@ -1,8 +1,4 @@
1
- import type { MediaCenterData } from '../../media-center/model/types';
2
- import type { PostPlayerProps } from './types';
3
- type $$ComponentProps = PostPlayerProps & {
4
- mediaCenterData?: MediaCenterData;
5
- };
6
- declare const PostsPlayerView: import("svelte").Component<$$ComponentProps, {}, "">;
1
+ import type { PostsPlayerProps } from './types';
2
+ declare const PostsPlayerView: import("svelte").Component<PostsPlayerProps, {}, "">;
7
3
  type PostsPlayerView = ReturnType<typeof PostsPlayerView>;
8
4
  export default PostsPlayerView;