@streamscloud/embeddable 10.1.2 → 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 (204) hide show
  1. package/dist/ads/ad-card/cmp.ad-card.svelte +30 -10
  2. package/dist/ads/ad-card/cmp.ad-card.svelte.d.ts +7 -0
  3. package/dist/content-player/cmp.content-player.svelte +67 -142
  4. package/dist/content-player/content-player-config.svelte.d.ts +14 -10
  5. package/dist/content-player/content-player-config.svelte.js +5 -20
  6. package/dist/content-player/content-player-settings.d.ts +7 -9
  7. package/dist/content-player/content-player-settings.js +12 -4
  8. package/dist/content-player/controls-and-attachments.svelte +63 -58
  9. package/dist/content-player/overview-panel.svelte +32 -74
  10. package/dist/content-player/overview-panel.svelte.d.ts +34 -7
  11. package/dist/content-player/ui-manager.svelte.d.ts +2 -6
  12. package/dist/content-player/ui-manager.svelte.js +3 -7
  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 -23
  15. package/dist/media-center/config/operations.generated.d.ts +23 -3
  16. package/dist/media-center/config/operations.generated.js +37 -6
  17. package/dist/media-center/config/operations.graphql +24 -4
  18. package/dist/media-center/config/types.d.ts +18 -2
  19. package/dist/media-center/media-center/cmp.media-center.svelte +213 -398
  20. package/dist/media-center/media-center/cmp.media-center.svelte.d.ts +2 -17
  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-view.svelte.d.ts +15 -0
  33. package/dist/media-center/media-center/discover/index.d.ts +2 -0
  34. package/dist/media-center/media-center/discover/index.js +2 -0
  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 +27 -0
  45. package/dist/media-center/media-center/handlers/categories-handler.svelte.js +39 -0
  46. package/dist/media-center/media-center/handlers/index.d.ts +2 -0
  47. package/dist/media-center/media-center/handlers/index.js +2 -0
  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/index.d.ts +3 -0
  51. package/dist/media-center/media-center/header-footer/index.js +3 -0
  52. package/dist/media-center/media-center/header-footer/media-center-footer.svelte +73 -0
  53. package/dist/media-center/media-center/header-footer/media-center-footer.svelte.d.ts +7 -0
  54. package/dist/media-center/media-center/header-footer/media-center-header-localization.d.ts +13 -0
  55. package/dist/media-center/media-center/header-footer/media-center-header-localization.js +46 -0
  56. package/dist/media-center/media-center/header-footer/media-center-header-mobile.svelte +80 -0
  57. package/dist/media-center/media-center/header-footer/media-center-header-mobile.svelte.d.ts +12 -0
  58. package/dist/media-center/media-center/header-footer/media-center-header.svelte +313 -0
  59. package/dist/media-center/media-center/header-footer/media-center-header.svelte.d.ts +12 -0
  60. package/dist/media-center/media-center/media-center-context.svelte.d.ts +68 -0
  61. package/dist/media-center/media-center/media-center-context.svelte.js +134 -0
  62. package/dist/media-center/media-center/{category-following-wrapper.svelte → menu/category-following-wrapper.svelte} +3 -2
  63. package/dist/media-center/media-center/{category-following-wrapper.svelte.d.ts → menu/category-following-wrapper.svelte.d.ts} +2 -2
  64. package/dist/media-center/media-center/menu/index.d.ts +2 -0
  65. package/dist/media-center/media-center/menu/index.js +2 -0
  66. package/dist/media-center/media-center/menu/menu-localization.d.ts +10 -0
  67. package/dist/media-center/media-center/menu/menu-localization.js +39 -0
  68. package/dist/media-center/media-center/menu/menu.svelte +353 -0
  69. package/dist/media-center/media-center/menu/menu.svelte.d.ts +14 -0
  70. package/dist/media-center/media-center/menu/popular-streams-panel-handler.svelte.d.ts +10 -0
  71. package/dist/media-center/media-center/menu/popular-streams-panel-handler.svelte.js +23 -0
  72. package/dist/media-center/media-center/moments/cmp.moments-circle.svelte +41 -0
  73. package/dist/media-center/media-center/moments/cmp.moments-circle.svelte.d.ts +7 -0
  74. package/dist/media-center/media-center/moments/index.d.ts +1 -0
  75. package/dist/media-center/media-center/moments/index.js +1 -0
  76. package/dist/media-center/media-center/streams-in-category/index.d.ts +2 -0
  77. package/dist/media-center/media-center/streams-in-category/index.js +2 -0
  78. package/dist/media-center/media-center/{streams-in-category-panel-handler.svelte.d.ts → streams-in-category/streams-in-category-panel-handler.svelte.d.ts} +5 -5
  79. package/dist/media-center/media-center/{streams-in-category-panel-handler.svelte.js → streams-in-category/streams-in-category-panel-handler.svelte.js} +5 -5
  80. package/dist/media-center/media-center/{streams-in-category-panel.svelte → streams-in-category/streams-in-category-panel.svelte} +1 -1
  81. package/dist/media-center/media-center/{streams-in-category-panel.svelte.d.ts → streams-in-category/streams-in-category-panel.svelte.d.ts} +1 -1
  82. package/dist/media-center/media-center/types.d.ts +44 -1
  83. package/dist/media-page/index.d.ts +121 -0
  84. package/dist/media-page/index.js +43 -0
  85. package/dist/posts/attachments/cmp.attachments.svelte +6 -3
  86. package/dist/posts/attachments/cmp.attachments.svelte.d.ts +6 -0
  87. package/dist/posts/controls/cmp.controls.svelte +51 -14
  88. package/dist/posts/controls/cmp.controls.svelte.d.ts +2 -0
  89. package/dist/posts/data-loaders/operations.generated.d.ts +4 -0
  90. package/dist/posts/data-loaders/operations.generated.js +6 -2
  91. package/dist/posts/model/types.d.ts +2 -0
  92. package/dist/posts/post-viewer/cmp.post-viewer.svelte +29 -19
  93. package/dist/posts/post-viewer/cmp.post-viewer.svelte.d.ts +4 -0
  94. package/dist/posts/post-viewer/mapper.js +2 -0
  95. package/dist/posts/post-viewer/operations.generated.d.ts +2 -0
  96. package/dist/posts/post-viewer/operations.generated.js +3 -1
  97. package/dist/posts/post-viewer/operations.graphql +2 -0
  98. package/dist/posts/post-viewer/post-texts.svelte +3 -3
  99. package/dist/posts/posts-player/cmp.posts-player.svelte +20 -6
  100. package/dist/posts/posts-player/cmp.posts-player.svelte.d.ts +18 -2
  101. package/dist/posts/posts-player/index.d.ts +18 -3
  102. package/dist/posts/posts-player/index.js +42 -89
  103. package/dist/posts/posts-player/posts-player-proxy.svelte +19 -0
  104. package/dist/posts/posts-player/posts-player-proxy.svelte.d.ts +22 -0
  105. package/dist/posts/posts-player/posts-player-view.svelte +20 -34
  106. package/dist/posts/posts-player/posts-player-view.svelte.d.ts +2 -6
  107. package/dist/posts/posts-player/types.d.ts +19 -6
  108. package/dist/products/product-card/cmp.product-card.svelte +39 -15
  109. package/dist/products/product-card/cmp.product-card.svelte.d.ts +6 -1
  110. package/dist/short-videos/short-video-card/cmp.short-video-card.svelte +160 -19
  111. package/dist/short-videos/short-video-card/cmp.short-video-card.svelte.d.ts +2 -1
  112. package/dist/short-videos/short-video-card/localization.d.ts +5 -0
  113. package/dist/short-videos/short-video-card/localization.js +13 -0
  114. package/dist/short-videos/short-video-card/types.d.ts +4 -0
  115. package/dist/short-videos/short-videos-player/index.js +26 -33
  116. package/dist/streams/data-loaders/mapper.js +0 -5
  117. package/dist/streams/data-loaders/operations.generated.d.ts +0 -12
  118. package/dist/streams/data-loaders/operations.generated.js +0 -26
  119. package/dist/streams/data-loaders/operations.graphql +0 -6
  120. package/dist/streams/layout/element-views/cmp.short-video-stream-element.svelte +2 -1
  121. package/dist/streams/layout/element-views/cmp.short-video-stream-element.svelte.d.ts +4 -0
  122. package/dist/streams/layout/element-views/cmp.stream-element.svelte +2 -2
  123. package/dist/streams/layout/element-views/cmp.text-ref-stream-element.svelte +7 -3
  124. package/dist/streams/layout/element-views/cmp.text-ref-stream-element.svelte.d.ts +2 -0
  125. package/dist/streams/layout/element-views/cmp.text-stream-element.svelte +7 -3
  126. package/dist/streams/layout/element-views/cmp.text-stream-element.svelte.d.ts +2 -0
  127. package/dist/streams/layout/element-views/price-element-view.svelte +2 -2
  128. package/dist/streams/layout/element-views/price-stream-element-localization.d.ts +1 -1
  129. package/dist/streams/layout/element-views/price-stream-element-localization.js +2 -2
  130. package/dist/streams/layout/models/mapper.js +2 -0
  131. package/dist/streams/stream-card/cmp.stream-card.svelte +5 -5
  132. package/dist/streams/streams-player/index.d.ts +21 -2
  133. package/dist/streams/streams-player/index.js +49 -24
  134. package/dist/streams/streams-player/stream-overview.svelte +6 -96
  135. package/dist/streams/streams-player/stream-overview.svelte.d.ts +0 -4
  136. package/dist/streams/streams-player/stream-player-localization.d.ts +0 -1
  137. package/dist/streams/streams-player/stream-player-localization.js +0 -6
  138. package/dist/streams/streams-player/streams-player-buffer.svelte.d.ts +1 -3
  139. package/dist/streams/streams-player/streams-player-buffer.svelte.js +2 -2
  140. package/dist/streams/streams-player/streams-player-view.svelte +25 -23
  141. package/dist/streams/streams-player/streams-player-view.svelte.d.ts +1 -5
  142. package/dist/streams/streams-player/types.d.ts +18 -8
  143. package/dist/ui/icon/cmp.icon.svelte +3 -2
  144. package/dist/ui/line-clamp/cmp.line-clamp-auto.svelte +119 -0
  145. package/dist/ui/line-clamp/cmp.line-clamp-auto.svelte.d.ts +10 -0
  146. package/dist/ui/line-clamp/cmp.line-clamp.svelte +44 -72
  147. package/dist/ui/line-clamp/cmp.line-clamp.svelte.d.ts +3 -4
  148. package/dist/ui/line-clamp/index.d.ts +1 -0
  149. package/dist/ui/line-clamp/index.js +1 -0
  150. package/dist/ui/player/button/cmp.mobile-player-buttons-group.svelte +44 -0
  151. package/dist/ui/player/button/cmp.mobile-player-buttons-group.svelte.d.ts +7 -0
  152. package/dist/ui/player/button/cmp.player-button.svelte +16 -5
  153. package/dist/ui/player/button/cmp.player-button.svelte.d.ts +3 -0
  154. package/dist/ui/player/button/cmp.player-buttons-group.svelte +27 -8
  155. package/dist/ui/player/button/cmp.player-buttons-group.svelte.d.ts +2 -0
  156. package/dist/ui/player/button/index.d.ts +1 -0
  157. package/dist/ui/player/button/index.js +1 -0
  158. package/dist/ui/player/close-orchestrator/close-orchestrator.svelte.d.ts +18 -0
  159. package/dist/ui/player/close-orchestrator/close-orchestrator.svelte.js +58 -0
  160. package/dist/ui/player/close-orchestrator/index.d.ts +2 -0
  161. package/dist/ui/player/close-orchestrator/index.js +1 -0
  162. package/dist/ui/player/close-orchestrator/types.d.ts +9 -0
  163. package/dist/ui/player/close-orchestrator/types.js +1 -0
  164. package/dist/ui/player/colors/index.d.ts +1 -0
  165. package/dist/ui/player/colors/index.js +1 -0
  166. package/dist/ui/player/colors/player-colors.d.ts +11 -0
  167. package/dist/ui/player/colors/player-colors.js +1 -0
  168. package/dist/ui/player/providers/chunks-player-buffer/player-chunks-manager.svelte.d.ts +2 -6
  169. package/dist/ui/player/providers/chunks-player-buffer/player-chunks-manager.svelte.js +11 -11
  170. package/dist/ui/player/providers/default-chunks-player-buffer.svelte.d.ts +2 -3
  171. package/dist/ui/player/providers/default-chunks-player-buffer.svelte.js +5 -5
  172. package/dist/ui/player/providers/default-feed-player-buffer.svelte.d.ts +3 -4
  173. package/dist/ui/player/providers/default-feed-player-buffer.svelte.js +16 -9
  174. package/dist/ui/player/providers/service.d.ts +2 -0
  175. package/dist/ui/player/providers/service.js +13 -0
  176. package/dist/ui/player/providers/types.d.ts +1 -0
  177. package/dist/ui/with-background/cmp.with-background.svelte +86 -0
  178. package/dist/ui/with-background/cmp.with-background.svelte.d.ts +10 -0
  179. package/dist/ui/with-background/index.d.ts +1 -0
  180. package/dist/ui/with-background/index.js +1 -0
  181. package/package.json +5 -1
  182. package/dist/content-player/content-player-localization.d.ts +0 -6
  183. package/dist/content-player/content-player-localization.js +0 -15
  184. package/dist/content-player/fade-mixins.scss +0 -12
  185. package/dist/content-player/header.svelte +0 -137
  186. package/dist/content-player/header.svelte.d.ts +0 -32
  187. package/dist/media-center/media-center/desktop-categories-selector.svelte +0 -132
  188. package/dist/media-center/media-center/desktop-categories-selector.svelte.d.ts +0 -12
  189. package/dist/media-center/media-center/discover-panel-handler.svelte.d.ts +0 -32
  190. package/dist/media-center/media-center/discover-panel-handler.svelte.js +0 -101
  191. package/dist/media-center/media-center/discover-panel.svelte +0 -133
  192. package/dist/media-center/media-center/discover-panel.svelte.d.ts +0 -15
  193. package/dist/media-center/media-center/media-center-handler.svelte.d.ts +0 -28
  194. package/dist/media-center/media-center/media-center-handler.svelte.js +0 -73
  195. package/dist/media-center/media-center/media-center-localization.d.ts +0 -10
  196. package/dist/media-center/media-center/media-center-localization.js +0 -39
  197. package/dist/media-center/media-center/mobile-controls-panel.svelte +0 -268
  198. package/dist/media-center/media-center/mobile-controls-panel.svelte.d.ts +0 -20
  199. package/dist/media-center/media-center/post-player-provider-generator.d.ts +0 -8
  200. package/dist/media-center/media-center/post-player-provider-generator.js +0 -32
  201. package/dist/media-center/media-center/streams-player-provider-generator.d.ts +0 -8
  202. package/dist/media-center/media-center/streams-player-provider-generator.js +0 -36
  203. package/dist/media-center/model/types.d.ts +0 -16
  204. /package/dist/media-center/{model → media-center/feed}/types.js +0 -0
@@ -0,0 +1,238 @@
1
+ <script lang="ts">import { getPostCoverImage } from '../../../posts/model';
2
+ import { ShortVideoCard } from '../../../short-videos/short-video-card';
3
+ import { StreamCard } from '../../../streams/stream-card';
4
+ import { InfiniteScrolling } from '../../../ui/infinite-scrolling';
5
+ import { default as Header } from './discover-header.svelte';
6
+ import { DiscoverViewLocalization } from './discover-view-localization';
7
+ let { context, locale = 'en', on } = $props();
8
+ const handler = $derived(context.discoverHandler);
9
+ const localization = $derived(new DiscoverViewLocalization(locale));
10
+ </script>
11
+
12
+ {#if !handler.loading}
13
+ <div class="media-center-discover">
14
+ <div class="media-center-discover__content">
15
+ <Header context={context} locale={locale} />
16
+ {#if handler.streamsHolder?.streams.length}
17
+ <div class="media-center-discover__section">
18
+ <div class="media-center-discover__section-header">
19
+ {localization.latestStreamsSectionTitle}
20
+ </div>
21
+ <div class="media-center-discover__section-content media-center-discover__section-content--5">
22
+ {#each handler.streamsHolder.streams as item (item.id)}
23
+ <StreamCard stream={item} on={{ click: () => on.streamSelected(item) }}></StreamCard>
24
+ {/each}
25
+ </div>
26
+ </div>
27
+ {/if}
28
+ {#each handler.shortVideosHolders as holder, index (holder)}
29
+ <InfiniteScrolling loadMore={handler.loadMoreShortVideos}>
30
+ {#if holder.shortVideos.length}
31
+ <div class="media-center-discover__section">
32
+ <div class="media-center-discover__section-header">
33
+ {holder.categoryName}
34
+ </div>
35
+ <div
36
+ class="media-center-discover__section-content"
37
+ class:media-center-discover__section-content--5={index % 2 !== 0}
38
+ class:media-center-discover__section-content--4={index % 2 === 0}>
39
+ {#each holder.shortVideos as item (item.id)}
40
+ <ShortVideoCard
41
+ shortVideo={{
42
+ id: item.id,
43
+ text: item.text,
44
+ cover: getPostCoverImage(item),
45
+ displayDate: item.displayDate,
46
+ viewsCount: item.viewsCount,
47
+ products: item.products
48
+ }}
49
+ locale={locale}
50
+ on={{ click: () => on.shortVideoSelected(item) }} />
51
+ {/each}
52
+ </div>
53
+ </div>
54
+ {/if}
55
+ </InfiniteScrolling>
56
+ {/each}
57
+ </div>
58
+ </div>
59
+ {/if}
60
+
61
+ <style>@keyframes fadeIn {
62
+ 0% {
63
+ opacity: 1;
64
+ }
65
+ 50% {
66
+ opacity: 0.4;
67
+ }
68
+ 100% {
69
+ opacity: 1;
70
+ }
71
+ }
72
+ .media-center-discover {
73
+ width: 100%;
74
+ flex: 1;
75
+ scrollbar-gutter: stable both-edges;
76
+ padding-inline: 1.875rem;
77
+ overflow-y: auto;
78
+ --_cross-browser-scrollbar--thumb-color: transparent;
79
+ --_cross-browser-scrollbar--track-color: transparent;
80
+ /* Set 'container-type: inline-size;' to reference container*/
81
+ }
82
+ .media-center-discover:hover {
83
+ --_cross-browser-scrollbar--thumb-color: var(--scrollbar--thumb-color, #7d7d7d);
84
+ --_cross-browser-scrollbar--track-color: var(--scrollbar--track-color, transparent);
85
+ }
86
+ .media-center-discover::-webkit-scrollbar {
87
+ width: 6px;
88
+ height: 6px;
89
+ }
90
+ .media-center-discover::-webkit-scrollbar-track {
91
+ background: var(--_cross-browser-scrollbar--track-color);
92
+ border-radius: 100vw;
93
+ }
94
+ .media-center-discover::-webkit-scrollbar-thumb {
95
+ background: var(--_cross-browser-scrollbar--thumb-color);
96
+ border-radius: 100vw;
97
+ }
98
+ @supports (scrollbar-color: transparent transparent) {
99
+ .media-center-discover {
100
+ scrollbar-color: var(--_cross-browser-scrollbar--thumb-color) var(--_cross-browser-scrollbar--track-color);
101
+ scrollbar-width: thin;
102
+ }
103
+ }
104
+ @container (width < 576px) {
105
+ .media-center-discover {
106
+ padding-inline: 0.9375rem;
107
+ }
108
+ }
109
+ .media-center-discover__content {
110
+ width: 100%;
111
+ max-width: 73.75rem;
112
+ margin: 0 auto;
113
+ display: flex;
114
+ flex-direction: column;
115
+ gap: 3rem;
116
+ padding-bottom: 1.25rem;
117
+ /* Set 'container-type: inline-size;' to reference container*/
118
+ /* Set 'container-type: inline-size;' to reference container*/
119
+ /* Set 'container-type: inline-size;' to reference container*/
120
+ }
121
+ @container (width < 992px) {
122
+ .media-center-discover__content {
123
+ gap: 2.5rem;
124
+ padding-bottom: 1rem;
125
+ }
126
+ }
127
+ @container (width < 768px) {
128
+ .media-center-discover__content {
129
+ gap: 2rem;
130
+ padding-bottom: 0.8125rem;
131
+ }
132
+ }
133
+ @container (width < 576px) {
134
+ .media-center-discover__content {
135
+ gap: 1.5rem;
136
+ padding-bottom: 0.625rem;
137
+ }
138
+ }
139
+ .media-center-discover__section {
140
+ display: flex;
141
+ flex-direction: column;
142
+ gap: 0.75rem;
143
+ /* Set 'container-type: inline-size;' to reference container*/
144
+ }
145
+ @container (width < 768px) {
146
+ .media-center-discover__section {
147
+ gap: 0.625rem;
148
+ }
149
+ }
150
+ .media-center-discover__section-header {
151
+ display: flex;
152
+ align-items: center;
153
+ gap: 0.6875rem;
154
+ font-size: 1.125rem;
155
+ line-height: 1.75rem;
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);
159
+ }
160
+ .media-center-discover__section-content {
161
+ display: grid;
162
+ }
163
+ .media-center-discover__section-content--4 {
164
+ gap: 1.25rem;
165
+ grid-template-columns: repeat(4, minmax(0, 1fr));
166
+ /* Set 'container-type: inline-size;' to reference container*/
167
+ /* Set 'container-type: inline-size;' to reference container*/
168
+ /* Set 'container-type: inline-size;' to reference container*/
169
+ }
170
+ .media-center-discover__section-content--4 :global(> :nth-child(n + 5)) {
171
+ display: none;
172
+ }
173
+ @container (width < 992px) {
174
+ .media-center-discover__section-content--4 {
175
+ gap: 1rem;
176
+ grid-template-columns: repeat(3, minmax(0, 1fr));
177
+ }
178
+ .media-center-discover__section-content--4 :global(> :nth-child(n + 4)) {
179
+ display: none;
180
+ }
181
+ }
182
+ @container (width < 768px) {
183
+ .media-center-discover__section-content--4 {
184
+ gap: 0.75rem;
185
+ grid-template-columns: repeat(2, minmax(0, 1fr));
186
+ }
187
+ .media-center-discover__section-content--4 :global(> :nth-child(n + 4)) {
188
+ display: block;
189
+ }
190
+ .media-center-discover__section-content--4 :global(> :nth-child(n + 5)) {
191
+ display: none;
192
+ }
193
+ }
194
+ @container (width < 576px) {
195
+ .media-center-discover__section-content--4 {
196
+ gap: 0.625rem;
197
+ }
198
+ }
199
+ .media-center-discover__section-content--5 {
200
+ gap: 1.875rem;
201
+ grid-template-columns: repeat(5, minmax(0, 1fr));
202
+ /* Set 'container-type: inline-size;' to reference container*/
203
+ /* Set 'container-type: inline-size;' to reference container*/
204
+ /* Set 'container-type: inline-size;' to reference container*/
205
+ }
206
+ .media-center-discover__section-content--5 :global(> :nth-child(n + 6)) {
207
+ display: none;
208
+ }
209
+ @container (width < 992px) {
210
+ .media-center-discover__section-content--5 {
211
+ gap: 1.5rem;
212
+ grid-template-columns: repeat(4, minmax(0, 1fr));
213
+ }
214
+ .media-center-discover__section-content--5 :global(> :nth-child(n + 5)) {
215
+ display: none;
216
+ }
217
+ }
218
+ @container (width < 768px) {
219
+ .media-center-discover__section-content--5 {
220
+ gap: 1.125rem;
221
+ grid-template-columns: repeat(3, minmax(0, 1fr));
222
+ }
223
+ .media-center-discover__section-content--5 :global(> :nth-child(n + 4)) {
224
+ display: none;
225
+ }
226
+ }
227
+ @container (width < 576px) {
228
+ .media-center-discover__section-content--5 {
229
+ gap: 0.9375rem;
230
+ grid-template-columns: repeat(2, minmax(0, 1fr));
231
+ }
232
+ .media-center-discover__section-content--5 :global(> :nth-child(n + 4)) {
233
+ display: block;
234
+ }
235
+ .media-center-discover__section-content--5 :global(> :nth-child(n + 5)) {
236
+ display: none;
237
+ }
238
+ }</style>
@@ -0,0 +1,15 @@
1
+ import type { Locale } from '../../../core/locale';
2
+ import type { PostPlayerModel } from '../../../posts/posts-player/types';
3
+ import type { StreamPlayerModel } from '../../../streams/streams-player';
4
+ import type { MediaCenterContext } from '../media-center-context.svelte';
5
+ type Props = {
6
+ context: MediaCenterContext;
7
+ locale?: Locale;
8
+ on: {
9
+ shortVideoSelected: (shortVideo: PostPlayerModel) => void;
10
+ streamSelected: (stream: StreamPlayerModel) => void;
11
+ };
12
+ };
13
+ declare const DiscoverView: import("svelte").Component<Props, {}, "">;
14
+ type DiscoverView = ReturnType<typeof DiscoverView>;
15
+ export default DiscoverView;
@@ -0,0 +1,2 @@
1
+ export { default as DiscoverPanel } from './discover-view.svelte';
2
+ export { DiscoverViewHandler } from './discover-view-handler.svelte.js';
@@ -0,0 +1,2 @@
1
+ export { default as DiscoverPanel } from './discover-view.svelte';
2
+ export { DiscoverViewHandler } from './discover-view-handler.svelte.js';
@@ -0,0 +1,20 @@
1
+ import type { PostPlayerModel } from '../../../posts/posts-player/types';
2
+ import type { StreamPlayerModel } from '../../../streams/streams-player/types';
3
+ export declare class ShortVideosInCategory {
4
+ categoryId: string;
5
+ categoryName: string;
6
+ shortVideos: PostPlayerModel[];
7
+ continuationToken: string | null | undefined;
8
+ constructor(data: {
9
+ categoryId: string;
10
+ categoryName: string;
11
+ });
12
+ }
13
+ export declare class StreamsInCategory {
14
+ categoryId: string | null;
15
+ streams: StreamPlayerModel[];
16
+ continuationToken: string | null | undefined;
17
+ constructor(data: {
18
+ categoryId: string | null;
19
+ });
20
+ }
@@ -0,0 +1,20 @@
1
+ export class ShortVideosInCategory {
2
+ categoryId;
3
+ categoryName;
4
+ shortVideos = $state.raw([]);
5
+ continuationToken = $state(undefined);
6
+ constructor(data) {
7
+ const { categoryId, categoryName } = data;
8
+ this.categoryId = categoryId;
9
+ this.categoryName = categoryName;
10
+ }
11
+ }
12
+ export class StreamsInCategory {
13
+ categoryId;
14
+ streams = $state.raw([]);
15
+ continuationToken = $state(undefined);
16
+ constructor(data) {
17
+ const { categoryId } = data;
18
+ this.categoryId = categoryId;
19
+ }
20
+ }
@@ -0,0 +1,50 @@
1
+ import type { IMediaCenterConfig } from '../..';
2
+ import type { PostPlayerModel } from '../../../posts/posts-player';
3
+ import type { IStreamsPlayerDataProvider } from '../../../streams/streams-player';
4
+ import type { ICloseOrchestrator } from '../../../ui/player/close-orchestrator';
5
+ import type { IPlayerDataProvider } from '../../../ui/player/providers';
6
+ import { MediaCenterSettingsHandler } from '../handlers';
7
+ import type { PlayerProps } from '../types';
8
+ import type { PostsDataProviderFilter, StreamsDataProviderFilter } from './types';
9
+ export declare class FeedHandler {
10
+ private _active;
11
+ private _providersGenerator;
12
+ private _feedPlayerProps;
13
+ private _externalHandlers;
14
+ private _mediaCenterSettingsHandler;
15
+ private _closeOrchestrator;
16
+ constructor(data: {
17
+ config: IMediaCenterConfig;
18
+ mediaCenterSettingsHandler: MediaCenterSettingsHandler;
19
+ closeOrchestrator: ICloseOrchestrator;
20
+ });
21
+ get active(): boolean;
22
+ get feedPlayerProps(): PlayerProps | null;
23
+ deactivate: () => void;
24
+ activatePostsFeed: (options: {
25
+ dataProvider?: IPlayerDataProvider<PostPlayerModel>;
26
+ filter?: PostsDataProviderFilter;
27
+ onPostActivated?: (id: string) => void;
28
+ }) => Promise<void>;
29
+ activateStreamsFeed: (options: {
30
+ dataProvider?: IStreamsPlayerDataProvider;
31
+ filter?: StreamsDataProviderFilter;
32
+ onStreamActivated?: (data: {
33
+ title: string;
34
+ image: string | null;
35
+ }) => void;
36
+ }) => Promise<void>;
37
+ private makePostsPlayerProps;
38
+ private makeStreamsPlayerProps;
39
+ }
40
+ export type MakePostsPlayerPropsData = {
41
+ dataProvider: IPlayerDataProvider<PostPlayerModel>;
42
+ onPostActivated?: (id: string) => void;
43
+ };
44
+ export type MakeStreamsPlayerPropsData = {
45
+ dataProvider: IStreamsPlayerDataProvider;
46
+ onStreamActivated?: (data: {
47
+ title: string;
48
+ image: string | null;
49
+ }) => void;
50
+ };
@@ -0,0 +1,84 @@
1
+ import { StreamsPlayerBuffer } from '../../../streams/streams-player/streams-player-buffer.svelte';
2
+ import { initBufferFromProvider } from '../../../ui/player/providers/service';
3
+ import { MediaCenterSettingsHandler } from '../handlers';
4
+ import { FeedProvidersGenerator } from './feed-providers-generator';
5
+ export class FeedHandler {
6
+ _active = $state(false);
7
+ _providersGenerator;
8
+ _feedPlayerProps = $state.raw(null);
9
+ _externalHandlers;
10
+ _mediaCenterSettingsHandler;
11
+ _closeOrchestrator;
12
+ constructor(data) {
13
+ const { config, mediaCenterSettingsHandler, closeOrchestrator } = data;
14
+ this._providersGenerator = new FeedProvidersGenerator(config);
15
+ this._mediaCenterSettingsHandler = mediaCenterSettingsHandler;
16
+ this._externalHandlers = config.handlers;
17
+ this._closeOrchestrator = closeOrchestrator;
18
+ }
19
+ get active() {
20
+ return this._active;
21
+ }
22
+ get feedPlayerProps() {
23
+ return this._feedPlayerProps;
24
+ }
25
+ deactivate = () => {
26
+ this._active = false;
27
+ };
28
+ activatePostsFeed = async (options) => {
29
+ const { dataProvider, filter, onPostActivated } = options;
30
+ if (dataProvider) {
31
+ this._feedPlayerProps = this.makePostsPlayerProps({ dataProvider, onPostActivated });
32
+ }
33
+ else {
34
+ const dataProvider = this._providersGenerator.makePostPlayerItemsProvider(filter);
35
+ this._feedPlayerProps = this.makePostsPlayerProps({ dataProvider, onPostActivated });
36
+ }
37
+ this._active = true;
38
+ };
39
+ activateStreamsFeed = async (options) => {
40
+ const { dataProvider, filter, onStreamActivated } = options;
41
+ if (dataProvider) {
42
+ this._feedPlayerProps = this.makeStreamsPlayerProps({ dataProvider, onStreamActivated });
43
+ }
44
+ else {
45
+ const dataProvider = this._providersGenerator.makeStreamsPlayerDataProvider(filter);
46
+ this._feedPlayerProps = this.makeStreamsPlayerProps({ dataProvider, onStreamActivated });
47
+ }
48
+ this._active = true;
49
+ };
50
+ makePostsPlayerProps = (data) => {
51
+ const { dataProvider, onPostActivated } = data;
52
+ return {
53
+ type: 'posts',
54
+ props: {
55
+ dataProvider: { type: 'buffer', buffer: initBufferFromProvider(dataProvider) },
56
+ socialInteractionsHandler: this._externalHandlers?.socialInteractionsHandler,
57
+ analyticsHandler: this._externalHandlers?.analyticsHandler,
58
+ playerSettings: this._mediaCenterSettingsHandler.playerSettings,
59
+ closeOrchestrator: this._closeOrchestrator,
60
+ on: {
61
+ postActivated: onPostActivated,
62
+ backgroundImageLoaded: this._mediaCenterSettingsHandler.backgroundImageLoadedHandler
63
+ }
64
+ }
65
+ };
66
+ };
67
+ makeStreamsPlayerProps = (data) => {
68
+ const { dataProvider, onStreamActivated } = data;
69
+ return {
70
+ type: 'streams',
71
+ props: {
72
+ dataProvider: { type: 'buffer', buffer: new StreamsPlayerBuffer(dataProvider) },
73
+ analyticsHandler: this._externalHandlers?.analyticsHandler,
74
+ postSocialInteractionsHandler: this._externalHandlers?.socialInteractionsHandler,
75
+ playerSettings: this._mediaCenterSettingsHandler.playerSettings,
76
+ closeOrchestrator: this._closeOrchestrator,
77
+ on: {
78
+ streamActivated: onStreamActivated,
79
+ backgroundImageLoaded: this._mediaCenterSettingsHandler.backgroundImageLoadedHandler
80
+ }
81
+ }
82
+ };
83
+ };
84
+ }
@@ -0,0 +1,11 @@
1
+ import type { IMediaCenterConfig } from '../../config/types';
2
+ import type { PostPlayerModel } from '../../../posts/posts-player/types';
3
+ import type { IStreamsPlayerDataProvider } from '../../../streams/streams-player/types';
4
+ import type { IFeedPlayerDataProvider } from '../../../ui/player/providers';
5
+ import type { PostsDataProviderFilter, StreamsDataProviderFilter } from './types';
6
+ export declare class FeedProvidersGenerator {
7
+ private config;
8
+ constructor(config: IMediaCenterConfig);
9
+ makePostPlayerItemsProvider: (filter?: PostsDataProviderFilter) => IFeedPlayerDataProvider<PostPlayerModel>;
10
+ makeStreamsPlayerDataProvider: (filter?: StreamsDataProviderFilter) => IStreamsPlayerDataProvider;
11
+ }
@@ -0,0 +1,79 @@
1
+ import { ContinuationToken } from '../../../core/continuation-token';
2
+ import { CursorDataLoader } from '../../../core/data-loaders';
3
+ import { PostType } from '../../../core/enums';
4
+ export class FeedProvidersGenerator {
5
+ config;
6
+ constructor(config) {
7
+ this.config = config;
8
+ }
9
+ makePostPlayerItemsProvider = (filter) => {
10
+ const { categoryId, prefetchedItems: initialPrefetchedItems = [], initialPostId } = filter || {};
11
+ const loader = new CursorDataLoader({
12
+ loadPage: async (continuationToken) => {
13
+ const result = await this.config.postsPlayer.getPostsCursor({
14
+ filter: {
15
+ types: [PostType.Article, PostType.Media, PostType.ShortVideo, PostType.Video],
16
+ categoryId,
17
+ excludeIds: initialPrefetchedItems.length ? initialPrefetchedItems.map((i) => i.id) : undefined
18
+ },
19
+ continuationToken: continuationToken.toNextChunkString(),
20
+ limit: 20
21
+ });
22
+ const items = result.items;
23
+ return {
24
+ items: items,
25
+ continuationToken: ContinuationToken.fromPayload(result.continuationToken)
26
+ };
27
+ }
28
+ });
29
+ let prefetchedItems = initialPrefetchedItems;
30
+ if (initialPostId) {
31
+ const targetPost = prefetchedItems.find((p) => p.id === initialPostId);
32
+ if (targetPost) {
33
+ prefetchedItems = [targetPost, ...prefetchedItems.filter((p) => p.id !== initialPostId)];
34
+ }
35
+ }
36
+ return {
37
+ kind: 'feed',
38
+ initialData: {
39
+ prefetchedItems,
40
+ startIndex: prefetchedItems.length ? 0 : -1
41
+ },
42
+ loadMore: loader.loadMore
43
+ };
44
+ };
45
+ makeStreamsPlayerDataProvider = (filter) => {
46
+ const { categoryId, prefetchedStreams: initialPrefetchedStreams = [], initialStreamId } = filter || {};
47
+ const loader = new CursorDataLoader({
48
+ loadPage: async (continuationToken) => {
49
+ const result = await this.config.streamPlayer.getStreamsCursor({
50
+ filter: {
51
+ categoryId,
52
+ excludeIds: initialPrefetchedStreams.length ? initialPrefetchedStreams.map((i) => i.id) : undefined
53
+ },
54
+ continuationToken: continuationToken.toNextChunkString(),
55
+ limit: 20
56
+ });
57
+ const items = result.items;
58
+ return {
59
+ items: items,
60
+ continuationToken: ContinuationToken.fromPayload(result.continuationToken)
61
+ };
62
+ }
63
+ });
64
+ let prefetchedStreams = initialPrefetchedStreams;
65
+ if (initialStreamId) {
66
+ const targetStream = prefetchedStreams.find((stream) => stream.id === initialStreamId);
67
+ if (targetStream) {
68
+ prefetchedStreams = [targetStream, ...prefetchedStreams.filter((stream) => stream.id !== initialStreamId)];
69
+ }
70
+ }
71
+ return {
72
+ initialData: {
73
+ prefetchedStreams
74
+ },
75
+ loadMoreStreams: loader.loadMore,
76
+ getStreamPages: this.config.streamPlayer.getStreamPages
77
+ };
78
+ };
79
+ }
@@ -0,0 +1 @@
1
+ export { FeedHandler } from './feed-handler.svelte';
@@ -0,0 +1 @@
1
+ export { FeedHandler } from './feed-handler.svelte';
@@ -0,0 +1,12 @@
1
+ import type { PostPlayerModel } from '../../../posts/posts-player/types';
2
+ import type { StreamPlayerModel } from '../../../streams/streams-player/types';
3
+ export type PostsDataProviderFilter = {
4
+ categoryId?: string;
5
+ prefetchedItems?: PostPlayerModel[];
6
+ initialPostId?: string;
7
+ };
8
+ export type StreamsDataProviderFilter = {
9
+ categoryId?: string;
10
+ prefetchedStreams?: StreamPlayerModel[];
11
+ initialStreamId?: string;
12
+ };
@@ -0,0 +1,27 @@
1
+ import type { MediaCenterConfigModel } from '../../config/types';
2
+ import type { MediaCenterCategoryData } from '../types';
3
+ export declare class CategoriesHandler {
4
+ private _allCateogories;
5
+ private _selectedCategoryId;
6
+ get allCategories(): {
7
+ id: string;
8
+ name: string;
9
+ image: string | null;
10
+ parentId: string | null;
11
+ }[];
12
+ get categoriesGrouped(): {
13
+ id: string;
14
+ name: string;
15
+ children: {
16
+ id: string;
17
+ name: string;
18
+ image: string | null;
19
+ parentId: string;
20
+ }[];
21
+ image: string | null;
22
+ }[];
23
+ get selectedCategoryId(): string | null;
24
+ set selectedCategoryId(value: string | null);
25
+ getCategoryData: (categoryId: string) => MediaCenterCategoryData | null;
26
+ init: (categories: MediaCenterConfigModel["contentCategories"]) => Promise<void>;
27
+ }
@@ -0,0 +1,39 @@
1
+ export class CategoriesHandler {
2
+ _allCateogories = $state.raw([]);
3
+ _selectedCategoryId = $state.raw(null);
4
+ get allCategories() {
5
+ return this._allCateogories;
6
+ }
7
+ get categoriesGrouped() {
8
+ return this._allCateogories
9
+ .filter((c) => !c.parentId)
10
+ .map((c) => {
11
+ const childCategories = this._allCateogories.filter((cc) => cc.parentId === c.id);
12
+ const children = childCategories.map((cc) => ({ id: cc.id, name: cc.name, image: cc.image, parentId: cc.parentId }));
13
+ return { id: c.id, name: c.name, children, image: c.image };
14
+ });
15
+ }
16
+ get selectedCategoryId() {
17
+ return this._selectedCategoryId;
18
+ }
19
+ set selectedCategoryId(value) {
20
+ this._selectedCategoryId = value;
21
+ }
22
+ getCategoryData = (categoryId) => {
23
+ const category = this._allCateogories.find((c) => c.id === categoryId);
24
+ if (!category) {
25
+ return null;
26
+ }
27
+ const parentCategory = category.parentId ? this._allCateogories.find((c) => c.id === category.parentId) : null;
28
+ const selectedCategoryData = {
29
+ id: category.id,
30
+ name: category.name,
31
+ parentId: parentCategory?.id,
32
+ parentName: parentCategory?.name
33
+ };
34
+ return selectedCategoryData;
35
+ };
36
+ init = async (categories) => {
37
+ this._allCateogories = categories;
38
+ };
39
+ }
@@ -0,0 +1,2 @@
1
+ export { CategoriesHandler } from './categories-handler.svelte';
2
+ export { MediaCenterSettingsHandler } from './media-center-settings-handler.svelte';
@@ -0,0 +1,2 @@
1
+ export { CategoriesHandler } from './categories-handler.svelte';
2
+ export { MediaCenterSettingsHandler } from './media-center-settings-handler.svelte';
@@ -0,0 +1,19 @@
1
+ import type { PlayerColors } from '../../../ui/player/colors';
2
+ import type { MediaCenterSettings } from '../types';
3
+ export declare class MediaCenterSettingsHandler {
4
+ private _backgroundImageUrl;
5
+ private _contentPlayerSettings;
6
+ constructor(settings?: MediaCenterSettings);
7
+ get playerSettings(): MediaCenterSettingsWithColors;
8
+ get backgroundWrapperProps(): {
9
+ backgroundDisabled: boolean;
10
+ backgroundImageUrl: string | null;
11
+ backgroundColor?: string | null;
12
+ };
13
+ get backgroundImageLoadedHandler(): ((url: string | null) => void) | undefined;
14
+ updateBackgroundImageUrl: (url: string | null | "not-applicable") => void;
15
+ updatePlayerColors: (colors: PlayerColors) => void;
16
+ }
17
+ export type MediaCenterSettingsWithColors = MediaCenterSettings & {
18
+ playerColors?: PlayerColors;
19
+ };
@@ -0,0 +1,26 @@
1
+ export class MediaCenterSettingsHandler {
2
+ _backgroundImageUrl = $state(null);
3
+ _contentPlayerSettings = $state({});
4
+ constructor(settings) {
5
+ this._contentPlayerSettings = settings ?? {};
6
+ }
7
+ get playerSettings() {
8
+ return this._contentPlayerSettings;
9
+ }
10
+ get backgroundWrapperProps() {
11
+ return {
12
+ backgroundDisabled: this._contentPlayerSettings.disableBackground === true,
13
+ backgroundImageUrl: this._backgroundImageUrl,
14
+ backgroundColor: this._contentPlayerSettings.playerColors?.playerBackground
15
+ };
16
+ }
17
+ get backgroundImageLoadedHandler() {
18
+ return this._contentPlayerSettings.disableBackground === true ? undefined : (url) => this.updateBackgroundImageUrl(url);
19
+ }
20
+ updateBackgroundImageUrl = (url) => {
21
+ this._backgroundImageUrl = url;
22
+ };
23
+ updatePlayerColors = (colors) => {
24
+ this._contentPlayerSettings.playerColors = colors;
25
+ };
26
+ }