@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
@@ -5,9 +5,11 @@ import { PlayerButton } from '../ui/player/button';
5
5
  import { ContentPlayerConfig } from './content-player-config.svelte';
6
6
  import IconChevronDown from '@fluentui/svg-icons/icons/chevron_down_28_regular.svg?raw';
7
7
  import IconChevronUp from '@fluentui/svg-icons/icons/chevron_up_28_regular.svg?raw';
8
+ import IconDismiss from '@fluentui/svg-icons/icons/dismiss_28_regular.svg?raw';
8
9
  let { config } = $props();
9
10
  const uiManager = config.uiManager;
10
11
  let attachmentsCollapsed = $state(false);
12
+ let closeButtonAreaHeight = $state(0);
11
13
  const currentItemPostContainer = $derived.by(() => {
12
14
  var _a;
13
15
  if (!((_a = config.playerBuffer) === null || _a === void 0 ? void 0 : _a.current)) {
@@ -30,11 +32,26 @@ const trackAttachmentsPanelSize = (node) => {
30
32
  }
31
33
  };
32
34
  };
35
+ const handleCloseButtonMounted = (node) => {
36
+ const resizeObserver = new ResizeObserver(([entry]) => {
37
+ const height = entry.target.getBoundingClientRect().height;
38
+ closeButtonAreaHeight = height;
39
+ });
40
+ resizeObserver.observe(node);
41
+ return {
42
+ destroy() {
43
+ resizeObserver.disconnect();
44
+ closeButtonAreaHeight = 0;
45
+ }
46
+ };
47
+ };
48
+ const showCloseButton = $derived.by(() => {
49
+ return config.closeOrchestrator.closeTriggerVisible && !config.closeOrchestrator.closeTriggerAttached;
50
+ });
33
51
  const variables = $derived.by(() => {
34
52
  const values = [
35
53
  `--_controls-and-attachments--attachments--max-width: ${uiManager.attachmentsMaxWidth}px`,
36
- `--_controls-and-attachments--logo--max-width: ${uiManager.attachmentsMaxWidth}px`,
37
- `--_controls-and-attachments--logo--height: ${uiManager.mediaCenterHeaderHeight || 72}px`,
54
+ `--_controls-and-attachments--spacing-top: ${closeButtonAreaHeight}px`,
38
55
  `--_controls-and-attachments--width: ${uiManager.sidePanelsMaxWidth}px`
39
56
  ];
40
57
  return values.join(';');
@@ -42,12 +59,14 @@ const variables = $derived.by(() => {
42
59
  </script>
43
60
 
44
61
  {#if !uiManager.showPostOverlayControls}
45
- <div class="controls-and-attachments" class:controls-and-attachments--with-logo={!!config.playerLogo} style={variables}>
62
+ <div class="controls-and-attachments" style={variables}>
46
63
  <div class="controls-and-attachments__spacer">&nbsp;</div>
47
64
  <div class="controls-and-attachments__left">
48
65
  {#if currentItemPostContainer}
49
66
  <PostControls
50
67
  model={currentItemPostContainer}
68
+ activeColor={config.playerColors.button}
69
+ inactiveColor={config.playerColors.buttonInactive}
51
70
  socialInteractionsHandler={config.socialInteractionsHandler}
52
71
  on={{ attachmentsClicked: changeShowAttachments }} />
53
72
  {/if}
@@ -57,24 +76,33 @@ const variables = $derived.by(() => {
57
76
  class:controls-and-attachments__navigation-buttons--invisible={config.playerBuffer.loaded.length <= 1}>
58
77
  <PlayerButton
59
78
  icon={IconChevronUp}
79
+ activeColor={config.playerColors.button}
80
+ inactiveColor={config.playerColors.buttonInactive}
60
81
  disabled={!config.playerBuffer.canLoadPrevious}
61
82
  scaleEffect={true}
62
83
  on={{ click: config.playerBuffer.loadPrevious }} />
63
- <PlayerButton icon={IconChevronDown} disabled={!config.playerBuffer.canLoadNext} scaleEffect={true} on={{ click: config.playerBuffer.loadNext }} />
84
+ <PlayerButton
85
+ icon={IconChevronDown}
86
+ activeColor={config.playerColors.button}
87
+ inactiveColor={config.playerColors.buttonInactive}
88
+ disabled={!config.playerBuffer.canLoadNext}
89
+ scaleEffect={true}
90
+ on={{ click: config.playerBuffer.loadNext }} />
64
91
  </div>
65
92
  {/if}
66
93
  </div>
67
94
  <div class="controls-and-attachments__right" use:trackAttachmentsPanelSize>
68
95
  {#if !uiManager.showPostOverlayAttachments}
69
- {#if config.playerLogo}
70
- <div class="controls-and-attachments__player-logo">
71
- <img src={config.playerLogo} class="controls-and-attachments__logo-img" alt="Player Logo" />
72
- </div>
73
- {/if}
74
96
  {#if currentItemPostContainer && !attachmentsCollapsed && currentItemPostContainer.attachments}
75
97
  <div class="controls-and-attachments__post-attachments" transition:slideHorizontally|local>
76
98
  <PostAttachments
77
99
  model={currentItemPostContainer}
100
+ colors={{
101
+ background: config.playerColors.cardBackground,
102
+ price: config.playerColors.price,
103
+ salePrice: config.playerColors.salePrice,
104
+ buttonBackground: config.playerColors.cardButton
105
+ }}
78
106
  trackingParams={config.trackingParams}
79
107
  locale={config.settings.locale}
80
108
  on={{
@@ -87,7 +115,18 @@ const variables = $derived.by(() => {
87
115
  {/if}
88
116
  {/if}
89
117
  </div>
90
- <div class="controls-and-attachments__spacer">&nbsp;</div>
118
+ <div class="controls-and-attachments__spacer controls-and-attachments__spacer--right">&nbsp;</div>
119
+ </div>
120
+ {/if}
121
+
122
+ {#if showCloseButton}
123
+ <div class="close-button" use:handleCloseButtonMounted>
124
+ <PlayerButton
125
+ icon={IconDismiss}
126
+ zoom={0.8}
127
+ activeColor={config.playerColors.button ?? null}
128
+ inactiveColor={config.playerColors.buttonInactive ?? null}
129
+ on={{ click: config.closeOrchestrator.requestClose }} />
91
130
  </div>
92
131
  {/if}
93
132
 
@@ -110,24 +149,22 @@ const variables = $derived.by(() => {
110
149
  width: var(--_controls-and-attachments--width);
111
150
  display: flex;
112
151
  justify-content: space-between;
113
- padding: 1.75rem 0;
152
+ padding: calc(0.625rem + var(--_controls-and-attachments--spacing-top)) 0 1.875rem 0;
114
153
  pointer-events: none;
115
154
  }
116
- .controls-and-attachments--with-logo {
117
- padding-top: 0;
118
- }
119
155
  .controls-and-attachments__spacer {
120
- flex: 0 1 1.75rem;
156
+ flex: 0 1 1.875rem;
121
157
  min-width: 0;
122
158
  }
159
+ .controls-and-attachments__spacer--right {
160
+ flex-basis: 1.25rem;
161
+ }
123
162
  .controls-and-attachments__left {
124
163
  display: flex;
125
164
  flex-direction: column;
126
165
  gap: 2.3125rem;
127
166
  justify-content: flex-end;
128
167
  align-items: center;
129
- opacity: var(--content-player--elements-opacity);
130
- transition: opacity 0.3s ease-in-out;
131
168
  }
132
169
  .controls-and-attachments__right {
133
170
  flex: 1;
@@ -135,21 +172,6 @@ const variables = $derived.by(() => {
135
172
  align-items: flex-end;
136
173
  flex-direction: column;
137
174
  }
138
- .controls-and-attachments__player-logo {
139
- width: var(--_controls-and-attachments--logo--max-width);
140
- max-width: var(--_controls-and-attachments--logo--max-width);
141
- height: var(--_controls-and-attachments--logo--height);
142
- min-height: var(--_controls-and-attachments--logo--height);
143
- max-height: var(--_controls-and-attachments--logo--height);
144
- display: flex;
145
- justify-content: center;
146
- align-items: center;
147
- }
148
- .controls-and-attachments__logo-img {
149
- width: 6.25rem;
150
- min-width: 6.25rem;
151
- max-width: 6.25rem;
152
- }
153
175
  .controls-and-attachments__post-attachments {
154
176
  flex: 1 1 auto;
155
177
  width: var(--_controls-and-attachments--attachments--max-width);
@@ -157,32 +179,7 @@ const variables = $derived.by(() => {
157
179
  pointer-events: auto;
158
180
  overflow-x: hidden;
159
181
  overflow-y: auto;
160
- opacity: var(--content-player--elements-opacity);
161
- transition: opacity 0.3s ease-in-out;
162
- --_cross-browser-scrollbar--thumb-color: transparent;
163
- --_cross-browser-scrollbar--track-color: transparent;
164
- }
165
- .controls-and-attachments__post-attachments:hover {
166
- --_cross-browser-scrollbar--thumb-color: var(--scrollbar--thumb-color, #7d7d7d);
167
- --_cross-browser-scrollbar--track-color: var(--scrollbar--track-color, transparent);
168
- }
169
- .controls-and-attachments__post-attachments::-webkit-scrollbar {
170
- width: 6px;
171
- height: 6px;
172
- }
173
- .controls-and-attachments__post-attachments::-webkit-scrollbar-track {
174
- background: var(--_cross-browser-scrollbar--track-color);
175
- border-radius: 100vw;
176
- }
177
- .controls-and-attachments__post-attachments::-webkit-scrollbar-thumb {
178
- background: var(--_cross-browser-scrollbar--thumb-color);
179
- border-radius: 100vw;
180
- }
181
- @supports (scrollbar-color: transparent transparent) {
182
- .controls-and-attachments__post-attachments {
183
- scrollbar-color: var(--_cross-browser-scrollbar--thumb-color) var(--_cross-browser-scrollbar--track-color);
184
- scrollbar-width: thin;
185
- }
182
+ scrollbar-width: none;
186
183
  }
187
184
  .controls-and-attachments__navigation-buttons {
188
185
  display: flex;
@@ -192,4 +189,12 @@ const variables = $derived.by(() => {
192
189
  }
193
190
  .controls-and-attachments__navigation-buttons--invisible {
194
191
  visibility: hidden;
192
+ }
193
+
194
+ .close-button {
195
+ position: absolute;
196
+ top: 0;
197
+ right: 0;
198
+ padding-block: 0.9375rem;
199
+ padding-right: 1.25rem;
195
200
  }</style>
@@ -1,44 +1,29 @@
1
1
  <script lang="ts">import { slideHorizontally } from '../core/transitions';
2
- import { Icon } from '../ui/icon';
3
- import IconPanelLeftText from '@fluentui/svg-icons/icons/panel_left_text_20_regular.svg?raw';
4
- let { children, contentFaded, uiManager } = $props();
5
- const overviewAttached = (node) => {
6
- const resizeObserver = new ResizeObserver(() => {
7
- uiManager.overviewWidth = node.clientWidth;
8
- });
9
- resizeObserver.observe(node);
10
- return {
11
- destroy() {
12
- resizeObserver.disconnect();
13
- uiManager.overviewWidth = 0;
14
- }
15
- };
16
- };
2
+ let { config, uiManager, position, children } = $props();
17
3
  const handlePanelClick = (e) => {
18
4
  e.stopPropagation();
19
- uiManager.overviewCollapsed = true;
20
5
  };
21
- const panelVariables = $derived.by(() => {
22
- const values = [`--_overview-panel--max-width: ${uiManager.overviewMaxWidth}px`, `--_overview-panel--max-width--safe-area: ${uiManager.safeAreaSize}px`];
23
- return values.join(';');
24
- });
25
- const buttonVariables = $derived.by(() => {
26
- const values = [`--_overview-panel--collapse-button--expaneded-left: ${uiManager.overviewWidth}px`];
6
+ const styles = $derived.by(() => {
7
+ const values = [
8
+ `--overview-panel--width: ${uiManager.overviewMaxWidth}px`,
9
+ `--overview-panel--top: ${position.top}px`,
10
+ `--overview-panel--bottom: ${position.bottom}px`,
11
+ `--overview-panel--right: ${position.right}px`
12
+ ];
13
+ if (config.playerColors.sidebarBackground) {
14
+ values.push(`--overview-panel--background: ${config.playerColors.sidebarBackground}`);
15
+ }
16
+ if (config.playerColors.brand) {
17
+ values.push(`--overview-panel--brand-color: ${config.playerColors.brand}`);
18
+ }
27
19
  return values.join(';');
28
20
  });
29
21
  </script>
30
22
 
31
- <!--Double if for correct behavior of slideHorizontally-->
23
+ <!--Double `if` for correct behavior of slideHorizontally-->
32
24
  {#if uiManager.viewInitialized}
33
- {#if !uiManager.overviewCollapsed && !contentFaded}
34
- <div
35
- class="overview-panel"
36
- transition:slideHorizontally|local
37
- use:overviewAttached
38
- style={panelVariables}
39
- onclick={handlePanelClick}
40
- onkeydown={() => {}}
41
- role="none">
25
+ {#if !uiManager.overviewCollapsed}
26
+ <div class="overview-panel" style={styles} transition:slideHorizontally|local onclick={handlePanelClick} onkeydown={() => {}} role="none">
42
27
  <div class="overview-panel__content" onclick={(e) => e.stopPropagation()} onkeydown={() => {}} role="none">
43
28
  {@render children()}
44
29
  </div>
@@ -46,15 +31,6 @@ const buttonVariables = $derived.by(() => {
46
31
  {/if}
47
32
  {/if}
48
33
 
49
- <button
50
- class="toggle-collapsed-button"
51
- class:toggle-collapsed-button--overview-expanded={!!uiManager.overviewWidth}
52
- style={buttonVariables}
53
- type="button"
54
- onclick={() => (uiManager.overviewCollapsed = !uiManager.overviewCollapsed)}>
55
- <Icon src={IconPanelLeftText} />
56
- </button>
57
-
58
34
  <style>@keyframes fadeIn {
59
35
  0% {
60
36
  opacity: 1;
@@ -67,23 +43,27 @@ const buttonVariables = $derived.by(() => {
67
43
  }
68
44
  }
69
45
  .overview-panel {
70
- height: 100%;
71
- min-height: 100%;
72
- max-height: 100%;
73
- width: var(--_overview-panel--max-width);
74
- min-width: var(--_overview-panel--max-width);
75
- max-width: var(--_overview-panel--max-width);
46
+ --_overview-panel--background: var(--overview-panel--background, #1c1c1c);
47
+ --_overview-panel--width: var(--overview-panel--width);
48
+ --_overview-panel--top: var(--overview-panel--top);
49
+ --_overview-panel--bottom: var(--overview-panel--bottom);
50
+ --_overview-panel--right: var(--overview-panel--right);
51
+ --brand-color: var(--overview-panel--brand-color);
52
+ width: var(--_overview-panel--width);
53
+ min-width: var(--_overview-panel--width);
54
+ max-width: var(--_overview-panel--width);
76
55
  position: absolute;
77
- top: 0;
78
- left: 0;
79
- height: 100%;
80
- z-index: 1;
56
+ top: var(--_overview-panel--top);
57
+ right: var(--_overview-panel--right);
58
+ bottom: var(--_overview-panel--bottom);
59
+ z-index: 0;
60
+ border-radius: 0.5rem 0 0 0.5rem;
61
+ background: var(--_overview-panel--background);
81
62
  /* Set 'container-type: inline-size;' to reference container*/
82
63
  }
83
64
  .overview-panel__content {
84
65
  width: 100%;
85
66
  height: 100%;
86
- background: #1c1c1c;
87
67
  display: flex;
88
68
  flex-direction: column;
89
69
  min-height: 0;
@@ -102,26 +82,4 @@ const buttonVariables = $derived.by(() => {
102
82
  min-width: 80%;
103
83
  max-width: 80%;
104
84
  }
105
- }
106
-
107
- .toggle-collapsed-button {
108
- position: absolute;
109
- bottom: 0.625rem;
110
- padding: 0.625rem;
111
- padding-bottom: 0;
112
- z-index: 1;
113
- --icon--color: #ffffff;
114
- --icon--size: 1.25rem;
115
- opacity: var(--content-player--elements-opacity);
116
- transition: opacity 0.3s ease-in-out;
117
- /* Set 'container-type: inline-size;' to reference container*/
118
- }
119
- .toggle-collapsed-button--overview-expanded {
120
- left: var(--_overview-panel--collapse-button--expaneded-left);
121
- transform: translateX(-100%);
122
- }
123
- @container (width < 576px) {
124
- .toggle-collapsed-button {
125
- display: none;
126
- }
127
85
  }</style>
@@ -1,10 +1,37 @@
1
+ import type { ContentPlayerConfig } from './content-player-config.svelte';
1
2
  import type { ContentPlayerUIManager } from './ui-manager.svelte';
2
3
  import type { Snippet } from 'svelte';
3
- type Props = {
4
- uiManager: ContentPlayerUIManager;
5
- contentFaded: boolean;
6
- children: Snippet;
7
- };
8
- declare const OverviewPanel: import("svelte").Component<Props, {}, "">;
9
- type OverviewPanel = ReturnType<typeof OverviewPanel>;
4
+ declare class __sveltets_Render<T extends {
5
+ id: string;
6
+ }> {
7
+ props(): {
8
+ config: ContentPlayerConfig<T>;
9
+ uiManager: ContentPlayerUIManager;
10
+ position: {
11
+ top: number;
12
+ bottom: number;
13
+ right: number;
14
+ };
15
+ children: Snippet;
16
+ };
17
+ events(): {};
18
+ slots(): {};
19
+ bindings(): "";
20
+ exports(): {};
21
+ }
22
+ interface $$IsomorphicComponent {
23
+ new <T extends {
24
+ id: string;
25
+ }>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
26
+ $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
27
+ } & ReturnType<__sveltets_Render<T>['exports']>;
28
+ <T extends {
29
+ id: string;
30
+ }>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
31
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
32
+ }
33
+ declare const OverviewPanel: $$IsomorphicComponent;
34
+ type OverviewPanel<T extends {
35
+ id: string;
36
+ }> = InstanceType<typeof OverviewPanel<T>>;
10
37
  export default OverviewPanel;
@@ -1,17 +1,13 @@
1
1
  export declare class ContentPlayerUIManager {
2
- overviewCollapsed: boolean;
3
- overviewWidth: number;
4
- readonly overviewMaxWidth = 220;
2
+ readonly overviewCollapsed: boolean;
3
+ readonly overviewMaxWidth = 150;
5
4
  attachmentsWidth: number;
6
5
  readonly attachmentsMaxWidth = 176;
7
6
  playerTotalWidth: number;
8
7
  contentViewWidth: number;
9
8
  readonly sidePanelsMaxWidth: number;
10
- readonly safeAreaSize = 70;
11
9
  readonly isMobileView: boolean;
12
10
  readonly viewInitialized: boolean;
13
- backgroundImageUrl: string | null;
14
- mediaCenterHeaderHeight: number;
15
11
  showPostOverlayAttachments: boolean;
16
12
  showPostOverlayControls: boolean;
17
13
  }
@@ -1,20 +1,16 @@
1
1
  const ATTACHMENTS_MAX_WIDTH = 176;
2
- const OVERVIEW_MAX_WIDTH = 220;
2
+ const OVERLAY_MAX_WIDTH = 150;
3
3
  const SAFE_AREA_SIZE = 70;
4
4
  export class ContentPlayerUIManager {
5
- overviewCollapsed = $state(false);
6
- overviewWidth = $state(0);
7
- overviewMaxWidth = OVERVIEW_MAX_WIDTH;
5
+ overviewCollapsed = $derived.by(() => this.overviewMaxWidth > this.sidePanelsMaxWidth);
6
+ overviewMaxWidth = OVERLAY_MAX_WIDTH;
8
7
  attachmentsWidth = $state(0);
9
8
  attachmentsMaxWidth = ATTACHMENTS_MAX_WIDTH;
10
9
  playerTotalWidth = $state(0);
11
10
  contentViewWidth = $state(0);
12
11
  sidePanelsMaxWidth = $derived.by(() => (this.playerTotalWidth - this.contentViewWidth) / 2);
13
- safeAreaSize = SAFE_AREA_SIZE;
14
12
  isMobileView = $derived.by(() => this.playerTotalWidth <= 576);
15
13
  viewInitialized = $derived.by(() => !!this.playerTotalWidth && !!this.contentViewWidth);
16
- backgroundImageUrl = $state(null);
17
- mediaCenterHeaderHeight = $state(0);
18
14
  showPostOverlayAttachments = $derived.by(() => this.viewInitialized && this.attachmentsWidth < ATTACHMENTS_MAX_WIDTH + 10);
19
15
  showPostOverlayControls = $derived.by(() => this.viewInitialized && this.sidePanelsMaxWidth < SAFE_AREA_SIZE);
20
16
  }
@@ -1,10 +1,14 @@
1
1
  import type { IMediaCenterConfig } from './types';
2
2
  export declare class InternalMediaCenterConfig implements IMediaCenterConfig {
3
- private readonly mediaPageId;
4
3
  postsPlayer: IMediaCenterConfig['postsPlayer'];
5
4
  streamPlayer: IMediaCenterConfig['streamPlayer'];
6
5
  handlers: IMediaCenterConfig['handlers'];
7
- private graphql;
8
- constructor(mediaPageId: string, graphqlOrigin?: string, testingStuff?: boolean);
9
6
  getConfig: IMediaCenterConfig['getConfig'];
7
+ private graphql;
8
+ constructor(input: {
9
+ mediaPageId: string;
10
+ initiator?: string;
11
+ graphqlOrigin?: string;
12
+ testingStuff?: boolean;
13
+ });
10
14
  }
@@ -7,19 +7,40 @@ import { getStreamPagesCursor, getStreamsCursor } from '../../streams/data-loade
7
7
  import { InternalMediaCenterAnalyticsHandler } from './internal-media-center-analytics-handler';
8
8
  import { GetMediaPageConfigDocument } from './operations.generated';
9
9
  export class InternalMediaCenterConfig {
10
- mediaPageId;
11
10
  postsPlayer;
12
11
  streamPlayer;
13
12
  handlers;
13
+ getConfig;
14
14
  graphql;
15
- constructor(mediaPageId, graphqlOrigin, testingStuff) {
16
- this.mediaPageId = mediaPageId;
17
- this.graphql = createLocalGQLClient(graphqlOrigin);
15
+ constructor(input) {
16
+ const { mediaPageId, graphqlOrigin, initiator, testingStuff } = input;
17
+ this.graphql = createLocalGQLClient(graphqlOrigin, initiator ? { 'x-initiator': initiator } : undefined);
18
+ this.getConfig = async () => {
19
+ const payload = await this.graphql.query(GetMediaPageConfigDocument, { mediaPageId }).toPromise();
20
+ if (!payload.data?.embedMediaPagePlayerConfig) {
21
+ return null;
22
+ }
23
+ const config = payload.data.embedMediaPagePlayerConfig;
24
+ return {
25
+ targetData: {
26
+ id: config.mediaPage.id,
27
+ handle: config.mediaPage.handle,
28
+ name: config.mediaPage.name,
29
+ description: config.mediaPage.description,
30
+ image: config.mediaPage.image?.url || null,
31
+ logo: config.mediaPage.logo?.url || null,
32
+ banner: config.mediaPage.banner?.url || null,
33
+ membersCount: config.mediaPage.membersCount
34
+ },
35
+ contentCategories: config.playerSettings?.contentCategories || [],
36
+ playerColors: config.playerSettings?.colors || null
37
+ };
38
+ };
18
39
  this.postsPlayer = {
19
40
  getPostsCursor: async ({ filter, limit, continuationToken }) => {
20
41
  return await getPostsCursor({
21
42
  filter: {
22
- mediaPageId: this.mediaPageId,
43
+ mediaPageId,
23
44
  types: filter.types,
24
45
  statuses: [Status.Published],
25
46
  categoryId: filter.categoryId,
@@ -35,7 +56,7 @@ export class InternalMediaCenterConfig {
35
56
  getStreamsCursor: async ({ filter, limit, continuationToken }) => {
36
57
  return await getStreamsCursor({
37
58
  filter: {
38
- mediaPageId: this.mediaPageId,
59
+ mediaPageId,
39
60
  categoryId: filter.categoryId,
40
61
  excludeIds: filter.excludeIds,
41
62
  statuses: [StreamStatus.Published],
@@ -60,21 +81,4 @@ export class InternalMediaCenterConfig {
60
81
  socialInteractionsHandler: testingStuff ? new MockPostSocialInteractionsHandler() : undefined
61
82
  };
62
83
  }
63
- getConfig = async () => {
64
- const payload = await this.graphql.query(GetMediaPageConfigDocument, { mediaPageId: this.mediaPageId }).toPromise();
65
- if (!payload.data?.embedMediaPagePlayerConfig) {
66
- return null;
67
- }
68
- const config = payload.data.embedMediaPagePlayerConfig;
69
- return {
70
- targetData: {
71
- id: config.mediaPage.id,
72
- name: config.mediaPage.name,
73
- image: config.mediaPage.image,
74
- membersCount: config.mediaPage.membersCount
75
- },
76
- logo: config.playerSettings?.logo?.url || null,
77
- contentCategories: config.playerSettings?.contentCategories || []
78
- };
79
- };
80
84
  }
@@ -7,19 +7,39 @@ export type GetMediaPageConfigQuery = {
7
7
  embedMediaPagePlayerConfig: {
8
8
  mediaPage: {
9
9
  id: string;
10
+ handle: string;
10
11
  name: string;
11
- image: string | null;
12
+ description: string;
12
13
  membersCount: number;
13
- };
14
- playerSettings: {
14
+ image: {
15
+ url: string;
16
+ } | null;
15
17
  logo: {
16
18
  url: string;
17
19
  } | null;
20
+ banner: {
21
+ url: string;
22
+ } | null;
23
+ };
24
+ playerSettings: {
18
25
  contentCategories: Array<{
19
26
  id: string;
20
27
  name: string;
28
+ image: string | null;
21
29
  parentId: string | null;
22
30
  }>;
31
+ colors: {
32
+ brand: string | null;
33
+ button: string | null;
34
+ buttonInactive: string | null;
35
+ cardButton: string | null;
36
+ cardBackground: string | null;
37
+ menuBackground: string | null;
38
+ playerBackground: string | null;
39
+ price: string | null;
40
+ salePrice: string | null;
41
+ sidebarBackground: string | null;
42
+ } | null;
23
43
  } | null;
24
44
  } | null;
25
45
  };
@@ -44,8 +44,24 @@ export const GetMediaPageConfigDocument = {
44
44
  kind: 'SelectionSet',
45
45
  selections: [
46
46
  { kind: 'Field', name: { kind: 'Name', value: 'id' } },
47
+ { kind: 'Field', name: { kind: 'Name', value: 'handle' } },
47
48
  { kind: 'Field', name: { kind: 'Name', value: 'name' } },
48
- { kind: 'Field', name: { kind: 'Name', value: 'image' } },
49
+ { kind: 'Field', name: { kind: 'Name', value: 'description' } },
50
+ {
51
+ kind: 'Field',
52
+ name: { kind: 'Name', value: 'image' },
53
+ selectionSet: { kind: 'SelectionSet', selections: [{ kind: 'Field', name: { kind: 'Name', value: 'url' } }] }
54
+ },
55
+ {
56
+ kind: 'Field',
57
+ name: { kind: 'Name', value: 'logo' },
58
+ selectionSet: { kind: 'SelectionSet', selections: [{ kind: 'Field', name: { kind: 'Name', value: 'url' } }] }
59
+ },
60
+ {
61
+ kind: 'Field',
62
+ name: { kind: 'Name', value: 'banner' },
63
+ selectionSet: { kind: 'SelectionSet', selections: [{ kind: 'Field', name: { kind: 'Name', value: 'url' } }] }
64
+ },
49
65
  { kind: 'Field', name: { kind: 'Name', value: 'membersCount' } }
50
66
  ]
51
67
  }
@@ -56,11 +72,6 @@ export const GetMediaPageConfigDocument = {
56
72
  selectionSet: {
57
73
  kind: 'SelectionSet',
58
74
  selections: [
59
- {
60
- kind: 'Field',
61
- name: { kind: 'Name', value: 'logo' },
62
- selectionSet: { kind: 'SelectionSet', selections: [{ kind: 'Field', name: { kind: 'Name', value: 'url' } }] }
63
- },
64
75
  {
65
76
  kind: 'Field',
66
77
  name: { kind: 'Name', value: 'contentCategories' },
@@ -69,9 +80,29 @@ export const GetMediaPageConfigDocument = {
69
80
  selections: [
70
81
  { kind: 'Field', name: { kind: 'Name', value: 'id' } },
71
82
  { kind: 'Field', name: { kind: 'Name', value: 'name' } },
83
+ { kind: 'Field', name: { kind: 'Name', value: 'image' } },
72
84
  { kind: 'Field', name: { kind: 'Name', value: 'parentId' } }
73
85
  ]
74
86
  }
87
+ },
88
+ {
89
+ kind: 'Field',
90
+ name: { kind: 'Name', value: 'colors' },
91
+ selectionSet: {
92
+ kind: 'SelectionSet',
93
+ selections: [
94
+ { kind: 'Field', name: { kind: 'Name', value: 'brand' } },
95
+ { kind: 'Field', name: { kind: 'Name', value: 'button' } },
96
+ { kind: 'Field', name: { kind: 'Name', value: 'buttonInactive' } },
97
+ { kind: 'Field', name: { kind: 'Name', value: 'cardButton' } },
98
+ { kind: 'Field', name: { kind: 'Name', value: 'cardBackground' } },
99
+ { kind: 'Field', name: { kind: 'Name', value: 'menuBackground' } },
100
+ { kind: 'Field', name: { kind: 'Name', value: 'playerBackground' } },
101
+ { kind: 'Field', name: { kind: 'Name', value: 'price' } },
102
+ { kind: 'Field', name: { kind: 'Name', value: 'salePrice' } },
103
+ { kind: 'Field', name: { kind: 'Name', value: 'sidebarBackground' } }
104
+ ]
105
+ }
75
106
  }
76
107
  ]
77
108
  }