@streamscloud/embeddable 10.1.2 → 11.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.
- package/dist/ads/ad-card/cmp.ad-card.svelte +27 -7
- package/dist/ads/ad-card/cmp.ad-card.svelte.d.ts +5 -0
- package/dist/content-player/cmp.content-player.svelte +30 -40
- package/dist/content-player/content-player-config.svelte.d.ts +13 -2
- package/dist/content-player/content-player-config.svelte.js +8 -5
- package/dist/content-player/content-player-settings.d.ts +12 -0
- package/dist/content-player/content-player-settings.js +12 -0
- package/dist/content-player/controls-and-attachments.svelte +25 -54
- package/dist/content-player/header.svelte +10 -132
- package/dist/content-player/header.svelte.d.ts +0 -4
- package/dist/content-player/overview-panel.svelte +22 -72
- package/dist/content-player/overview-panel.svelte.d.ts +30 -7
- package/dist/content-player/ui-manager.svelte.d.ts +2 -4
- package/dist/content-player/ui-manager.svelte.js +3 -5
- package/dist/media-center/config/internal-media-center-config.js +2 -1
- package/dist/media-center/config/operations.generated.d.ts +13 -0
- package/dist/media-center/config/operations.generated.js +20 -0
- package/dist/media-center/config/operations.graphql +13 -0
- package/dist/media-center/config/types.d.ts +13 -0
- package/dist/media-center/media-center/cmp.media-center.svelte +117 -348
- package/dist/media-center/media-center/cmp.media-center.svelte.d.ts +3 -1
- package/dist/media-center/media-center/{discover-panel-handler.svelte.d.ts → discover/discover-panel-handler.svelte.d.ts} +5 -6
- package/dist/media-center/media-center/{discover-panel-handler.svelte.js → discover/discover-panel-handler.svelte.js} +1 -8
- package/dist/media-center/media-center/discover/discover-panel-localization.d.ts +19 -0
- package/dist/media-center/media-center/discover/discover-panel-localization.js +78 -0
- package/dist/media-center/media-center/{discover-panel.svelte → discover/discover-panel.svelte} +18 -9
- package/dist/media-center/media-center/discover/discover-panel.svelte.d.ts +15 -0
- package/dist/media-center/media-center/discover/index.d.ts +2 -0
- package/dist/media-center/media-center/discover/index.js +2 -0
- package/dist/media-center/media-center/handlers/categories-handler.svelte.d.ts +21 -0
- package/dist/media-center/media-center/handlers/categories-handler.svelte.js +36 -0
- package/dist/media-center/media-center/handlers/feed-handler.svelte.d.ts +6 -0
- package/dist/media-center/media-center/handlers/feed-handler.svelte.js +12 -0
- package/dist/media-center/media-center/handlers/index.d.ts +2 -0
- package/dist/media-center/media-center/handlers/index.js +2 -0
- package/dist/media-center/media-center/header-footer/index.d.ts +3 -0
- package/dist/media-center/media-center/header-footer/index.js +3 -0
- package/dist/media-center/media-center/header-footer/media-center-footer.svelte +77 -0
- package/dist/media-center/media-center/header-footer/media-center-footer.svelte.d.ts +7 -0
- package/dist/media-center/media-center/header-footer/media-center-header-localization.d.ts +12 -0
- package/dist/media-center/media-center/header-footer/media-center-header-localization.js +40 -0
- package/dist/media-center/media-center/header-footer/media-center-header-mobile.svelte +91 -0
- package/dist/media-center/media-center/header-footer/media-center-header-mobile.svelte.d.ts +11 -0
- package/dist/media-center/media-center/header-footer/media-center-header.svelte +310 -0
- package/dist/media-center/media-center/header-footer/media-center-header.svelte.d.ts +13 -0
- package/dist/media-center/media-center/media-center-context.svelte.d.ts +50 -0
- package/dist/media-center/media-center/media-center-context.svelte.js +98 -0
- package/dist/media-center/media-center/{category-following-wrapper.svelte → menu/category-following-wrapper.svelte} +3 -2
- package/dist/media-center/media-center/{category-following-wrapper.svelte.d.ts → menu/category-following-wrapper.svelte.d.ts} +2 -2
- package/dist/media-center/media-center/menu/index.d.ts +2 -0
- package/dist/media-center/media-center/menu/index.js +2 -0
- package/dist/media-center/media-center/menu/menu-localization.d.ts +19 -0
- package/dist/media-center/media-center/menu/menu-localization.js +78 -0
- package/dist/media-center/media-center/menu/menu.svelte +345 -0
- package/dist/media-center/media-center/menu/menu.svelte.d.ts +14 -0
- package/dist/media-center/media-center/menu/popular-streams-panel-handler.svelte.d.ts +10 -0
- package/dist/media-center/media-center/menu/popular-streams-panel-handler.svelte.js +26 -0
- package/dist/media-center/media-center/providers/index.d.ts +2 -0
- package/dist/media-center/media-center/providers/index.js +2 -0
- package/dist/media-center/media-center/providers/post-player-provider-generator.d.ts +8 -0
- package/dist/media-center/media-center/{post-player-provider-generator.js → providers/post-player-provider-generator.js} +3 -3
- package/dist/media-center/media-center/{streams-player-provider-generator.d.ts → providers/streams-player-provider-generator.d.ts} +2 -2
- package/dist/media-center/media-center/{streams-player-provider-generator.js → providers/streams-player-provider-generator.js} +2 -2
- package/dist/media-center/media-center/streams-in-category/index.d.ts +2 -0
- package/dist/media-center/media-center/streams-in-category/index.js +2 -0
- 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} +4 -4
- 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
- package/dist/media-center/media-center/{streams-in-category-panel.svelte → streams-in-category/streams-in-category-panel.svelte} +1 -1
- 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
- package/dist/media-center/media-center/types.d.ts +1 -1
- package/dist/media-center/model/types.d.ts +7 -6
- package/dist/posts/attachments/cmp.attachments.svelte +5 -3
- package/dist/posts/attachments/cmp.attachments.svelte.d.ts +6 -0
- package/dist/posts/controls/cmp.controls.svelte +3 -3
- package/dist/posts/controls/cmp.controls.svelte.d.ts +2 -0
- package/dist/posts/post-viewer/cmp.post-viewer.svelte +3 -1
- package/dist/posts/post-viewer/cmp.post-viewer.svelte.d.ts +4 -0
- package/dist/products/product-card/cmp.product-card.svelte +35 -11
- package/dist/products/product-card/cmp.product-card.svelte.d.ts +5 -0
- package/dist/streams/data-loaders/mapper.js +0 -5
- package/dist/streams/data-loaders/operations.generated.d.ts +0 -12
- package/dist/streams/data-loaders/operations.generated.js +0 -26
- package/dist/streams/data-loaders/operations.graphql +0 -6
- package/dist/streams/layout/element-views/cmp.short-video-stream-element.svelte +2 -1
- package/dist/streams/layout/element-views/cmp.short-video-stream-element.svelte.d.ts +4 -0
- package/dist/streams/stream-card/cmp.stream-card.svelte +5 -5
- package/dist/streams/streams-player/index.js +1 -1
- package/dist/streams/streams-player/stream-overview.svelte +6 -96
- package/dist/streams/streams-player/stream-overview.svelte.d.ts +0 -4
- package/dist/streams/streams-player/stream-player-localization.d.ts +0 -1
- package/dist/streams/streams-player/stream-player-localization.js +0 -6
- package/dist/streams/streams-player/streams-player-view.svelte +0 -2
- package/dist/streams/streams-player/types.d.ts +0 -4
- package/dist/ui/icon/cmp.icon.svelte +3 -2
- package/dist/ui/player/button/cmp.player-button.svelte +17 -5
- package/dist/ui/player/button/cmp.player-button.svelte.d.ts +3 -0
- package/dist/ui/player/button/cmp.player-buttons-group.svelte +20 -5
- package/dist/ui/player/button/cmp.player-buttons-group.svelte.d.ts +2 -0
- package/dist/ui/player/button/types.d.ts +2 -0
- package/package.json +1 -1
- package/dist/content-player/content-player-localization.d.ts +0 -6
- package/dist/content-player/content-player-localization.js +0 -15
- package/dist/media-center/media-center/desktop-categories-selector.svelte +0 -132
- package/dist/media-center/media-center/desktop-categories-selector.svelte.d.ts +0 -12
- package/dist/media-center/media-center/discover-panel.svelte.d.ts +0 -15
- package/dist/media-center/media-center/media-center-handler.svelte.d.ts +0 -28
- package/dist/media-center/media-center/media-center-handler.svelte.js +0 -73
- package/dist/media-center/media-center/media-center-localization.d.ts +0 -10
- package/dist/media-center/media-center/media-center-localization.js +0 -39
- package/dist/media-center/media-center/mobile-controls-panel.svelte +0 -268
- package/dist/media-center/media-center/mobile-controls-panel.svelte.d.ts +0 -20
- package/dist/media-center/media-center/post-player-provider-generator.d.ts +0 -8
|
@@ -7,214 +7,136 @@
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
|
|
10
|
+
var _a;
|
|
11
11
|
import { Utils } from '../../core/utils';
|
|
12
12
|
import { default as PostsPlayerView } from '../../posts/posts-player/posts-player-view.svelte';
|
|
13
13
|
import { default as StreamsPlayerView } from '../../streams/streams-player/streams-player-view.svelte';
|
|
14
|
-
import { Icon } from '../../ui/icon';
|
|
15
14
|
import { Loading } from '../../ui/loading';
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import { default as MobileControlsPanel } from './mobile-controls-panel.svelte';
|
|
23
|
-
import { makePostPlayerItemsProvider } from './post-player-provider-generator';
|
|
24
|
-
import { StreamsInCategoryPanelHandler } from './streams-in-category-panel-handler.svelte';
|
|
25
|
-
import { default as StreamsInCategoryPanel } from './streams-in-category-panel.svelte';
|
|
26
|
-
import { makeStreamsPlayerDataProvider } from './streams-player-provider-generator';
|
|
27
|
-
import IconLineHorizontal3 from '@fluentui/svg-icons/icons/line_horizontal_3_20_regular.svg?raw';
|
|
28
|
-
import IconScreenSearch from '@fluentui/svg-icons/icons/screen_search_20_regular.svg?raw';
|
|
29
|
-
import { tick } from 'svelte';
|
|
15
|
+
import { DiscoverPanel } from './discover';
|
|
16
|
+
import { MediaCenterHeader, MediaCenterFooter, MediaCenterHeaderMobile } from './header-footer';
|
|
17
|
+
import { MediaCenterContext } from './media-center-context.svelte.js';
|
|
18
|
+
import { Menu } from './menu';
|
|
19
|
+
import { makePostPlayerItemsProvider, makeStreamsPlayerDataProvider } from './providers';
|
|
20
|
+
import { StreamsInCategoryPanel } from './streams-in-category';
|
|
30
21
|
import { fade } from 'svelte/transition';
|
|
31
|
-
const SCROLL_MASK_OFFSET = 32;
|
|
32
22
|
let { config, playerProps, locale = 'en' } = $props();
|
|
33
|
-
const
|
|
34
|
-
const
|
|
35
|
-
playerSettings
|
|
36
|
-
|
|
23
|
+
const enhancedPlayerSettings = () => {
|
|
24
|
+
const playerSettings = playerProps.mode === 'discover' ? {} : Object.assign({}, playerProps.props.playerSettings);
|
|
25
|
+
playerSettings.playerColors = context.playerColors;
|
|
26
|
+
return playerSettings;
|
|
37
27
|
};
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
28
|
+
const commonPlayerProps = () => {
|
|
29
|
+
return {
|
|
30
|
+
playerSettings: enhancedPlayerSettings(),
|
|
31
|
+
on: playerProps.mode !== 'discover' ? playerProps === null || playerProps === void 0 ? void 0 : playerProps.props.on : undefined
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
const mapToMediaCenterMode = (propsMode) => {
|
|
35
|
+
switch (propsMode) {
|
|
36
|
+
case 'posts':
|
|
37
|
+
return 'posts-feed';
|
|
38
|
+
case 'streams':
|
|
39
|
+
return 'streams-feed';
|
|
40
|
+
case 'discover':
|
|
41
|
+
return 'discover';
|
|
42
|
+
default:
|
|
43
|
+
return Utils.assertUnreachable(propsMode);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
let mediaCenterMode = $state(mapToMediaCenterMode(playerProps.mode));
|
|
47
|
+
const context = new MediaCenterContext({
|
|
48
|
+
config,
|
|
49
|
+
followingHandler: (_a = config === null || config === void 0 ? void 0 : config.handlers) === null || _a === void 0 ? void 0 : _a.categoriesFollowingHandler,
|
|
50
|
+
on: {
|
|
51
|
+
initialized: () => {
|
|
52
|
+
switch (mediaCenterMode) {
|
|
53
|
+
case 'posts-feed':
|
|
54
|
+
context.activateFeed({ categoryId: null });
|
|
55
|
+
break;
|
|
56
|
+
case 'streams-feed':
|
|
57
|
+
context.activateFeed({ categoryId: null });
|
|
58
|
+
break;
|
|
59
|
+
case 'discover':
|
|
60
|
+
context.activateDiscover();
|
|
61
|
+
break;
|
|
62
|
+
default:
|
|
63
|
+
Utils.assertUnreachable(mediaCenterMode);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
});
|
|
42
68
|
let headerHeight = $state(0);
|
|
43
69
|
let computedPlayerProps = $state.raw(playerProps);
|
|
44
70
|
let isMobileView = $state(false);
|
|
45
|
-
|
|
46
|
-
let mobileControlsPanelActive = $state(false);
|
|
47
|
-
let extraMobileControlsPanelActions = $state.raw([]);
|
|
48
|
-
let scrollAreaRef = $state(null);
|
|
71
|
+
let closeFn = $state.raw(null);
|
|
49
72
|
const selectCategory = (categoryId) => __awaiter(void 0, void 0, void 0, function* () {
|
|
50
|
-
var _a, _b
|
|
51
|
-
|
|
52
|
-
if (!config || !selectedCategoryData) {
|
|
73
|
+
var _a, _b;
|
|
74
|
+
if (!config) {
|
|
53
75
|
return;
|
|
54
76
|
}
|
|
55
|
-
hideMobileControlsPanel();
|
|
56
77
|
switch (mediaCenterMode) {
|
|
57
|
-
case 'posts':
|
|
58
|
-
if (
|
|
59
|
-
|
|
78
|
+
case 'posts-feed':
|
|
79
|
+
if (context.categoriesHandler.selectedCategoryId === categoryId) {
|
|
80
|
+
context.activateFeed();
|
|
60
81
|
return;
|
|
61
82
|
}
|
|
62
|
-
handler.selectedCategoryId = categoryId;
|
|
63
83
|
computedPlayerProps = {
|
|
64
84
|
mode: 'posts',
|
|
65
|
-
props: Object.assign({ dataProvider: makePostPlayerItemsProvider({ config, categoryId }), socialInteractionsHandler: (_a = config.handlers) === null || _a === void 0 ? void 0 : _a.socialInteractionsHandler, analyticsHandler: (_b = config.handlers) === null || _b === void 0 ? void 0 : _b.analyticsHandler },
|
|
85
|
+
props: Object.assign({ dataProvider: makePostPlayerItemsProvider({ config, categoryId }), socialInteractionsHandler: (_a = config.handlers) === null || _a === void 0 ? void 0 : _a.socialInteractionsHandler, analyticsHandler: (_b = config.handlers) === null || _b === void 0 ? void 0 : _b.analyticsHandler }, commonPlayerProps())
|
|
66
86
|
};
|
|
67
|
-
|
|
87
|
+
context.activateFeed({ categoryId });
|
|
68
88
|
break;
|
|
69
|
-
case '
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
handler.selectedCategoryId = categoryId;
|
|
77
|
-
discoverHandler.deactivate();
|
|
78
|
-
streamsInCategoryHandler.activate(selectedCategoryData);
|
|
89
|
+
case 'streams-feed':
|
|
90
|
+
context.tryActivateStreamsInCategory(categoryId);
|
|
91
|
+
break;
|
|
92
|
+
case 'discover':
|
|
93
|
+
console.warn('Apply category filter for discover mode is not implemented yet');
|
|
79
94
|
break;
|
|
80
95
|
default:
|
|
81
96
|
Utils.assertUnreachable(mediaCenterMode);
|
|
82
97
|
}
|
|
83
|
-
// Scroll to selected category if it's hidden
|
|
84
|
-
yield scrollToSelectedCategory((_c = selectedCategoryData.parentId) !== null && _c !== void 0 ? _c : selectedCategoryData.id);
|
|
85
|
-
});
|
|
86
|
-
/**
|
|
87
|
-
* Scrolls the scroll area to make the selected category button visible
|
|
88
|
-
* @param categoryId - ID of the selected category
|
|
89
|
-
*/
|
|
90
|
-
const scrollToSelectedCategory = (categoryId) => __awaiter(void 0, void 0, void 0, function* () {
|
|
91
|
-
if (!scrollAreaRef) {
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
// Wait for DOM to update with the new active state
|
|
95
|
-
yield tick();
|
|
96
|
-
// Find the selected category button element
|
|
97
|
-
const selectedButton = scrollAreaRef.querySelector(`[id="${categoryId}"]`);
|
|
98
|
-
if (!selectedButton) {
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
// Get scroll area and button dimensions
|
|
102
|
-
const scrollAreaRect = scrollAreaRef.getBoundingClientRect();
|
|
103
|
-
const buttonRect = selectedButton.getBoundingClientRect();
|
|
104
|
-
// Calculate button position relative to scroll area
|
|
105
|
-
const buttonLeftRelative = buttonRect.left - scrollAreaRect.left + scrollAreaRef.scrollLeft;
|
|
106
|
-
const buttonRightRelative = buttonLeftRelative + buttonRect.width;
|
|
107
|
-
// Calculate visible area boundaries (accounting for mask gradients)
|
|
108
|
-
const hasLeftMask = scrollAreaRef.scrollLeft > 0;
|
|
109
|
-
const hasRightMask = scrollAreaRef.scrollLeft < scrollAreaRef.scrollWidth - scrollAreaRect.width - 1;
|
|
110
|
-
const visibleLeft = scrollAreaRef.scrollLeft + (hasLeftMask ? SCROLL_MASK_OFFSET : 0);
|
|
111
|
-
const visibleRight = scrollAreaRef.scrollLeft + scrollAreaRect.width - (hasRightMask ? SCROLL_MASK_OFFSET : 0);
|
|
112
|
-
// Check if button is hidden or partially hidden
|
|
113
|
-
const isHiddenLeft = buttonLeftRelative < visibleLeft;
|
|
114
|
-
const isHiddenRight = buttonRightRelative > visibleRight;
|
|
115
|
-
if (isHiddenLeft) {
|
|
116
|
-
const targetScroll = buttonLeftRelative - SCROLL_MASK_OFFSET;
|
|
117
|
-
scrollAreaRef.scrollTo({
|
|
118
|
-
left: targetScroll,
|
|
119
|
-
behavior: 'smooth'
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
else if (isHiddenRight) {
|
|
123
|
-
const targetScroll = buttonRightRelative - scrollAreaRect.width + SCROLL_MASK_OFFSET;
|
|
124
|
-
scrollAreaRef.scrollTo({
|
|
125
|
-
left: targetScroll,
|
|
126
|
-
behavior: 'smooth'
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
98
|
});
|
|
130
99
|
const activateSelectedShortVideoPlayer = (shortVideo) => {
|
|
131
100
|
var _a, _b;
|
|
132
101
|
if (!config) {
|
|
133
102
|
return;
|
|
134
103
|
}
|
|
135
|
-
mediaCenterMode = 'posts';
|
|
104
|
+
mediaCenterMode = 'posts-feed';
|
|
136
105
|
computedPlayerProps = {
|
|
137
106
|
mode: 'posts',
|
|
138
|
-
props: Object.assign({ dataProvider: makePostPlayerItemsProvider({ config, prefetchedItems: [shortVideo] }), socialInteractionsHandler: (_a = config.handlers) === null || _a === void 0 ? void 0 : _a.socialInteractionsHandler, analyticsHandler: (_b = config.handlers) === null || _b === void 0 ? void 0 : _b.analyticsHandler },
|
|
107
|
+
props: Object.assign({ dataProvider: makePostPlayerItemsProvider({ config, prefetchedItems: [shortVideo] }), socialInteractionsHandler: (_a = config.handlers) === null || _a === void 0 ? void 0 : _a.socialInteractionsHandler, analyticsHandler: (_b = config.handlers) === null || _b === void 0 ? void 0 : _b.analyticsHandler }, commonPlayerProps())
|
|
139
108
|
};
|
|
140
|
-
|
|
141
|
-
discoverHandler.deactivate();
|
|
142
|
-
streamsInCategoryHandler.deactivate();
|
|
109
|
+
context.activateFeed({ categoryId: null });
|
|
143
110
|
};
|
|
144
111
|
const activateSelectedStreamPlayer = (stream) => {
|
|
145
112
|
var _a, _b;
|
|
146
113
|
if (!config) {
|
|
147
114
|
return;
|
|
148
115
|
}
|
|
149
|
-
mediaCenterMode = '
|
|
116
|
+
mediaCenterMode = 'streams-feed';
|
|
150
117
|
computedPlayerProps = {
|
|
151
|
-
mode: '
|
|
152
|
-
props: Object.assign({ dataProvider: makeStreamsPlayerDataProvider({ config, prefetchedStreams: [stream] }), analyticsHandler: (_a = config.handlers) === null || _a === void 0 ? void 0 : _a.analyticsHandler, postSocialInteractionsHandler: (_b = config.handlers) === null || _b === void 0 ? void 0 : _b.socialInteractionsHandler },
|
|
118
|
+
mode: 'streams',
|
|
119
|
+
props: Object.assign({ dataProvider: makeStreamsPlayerDataProvider({ config, prefetchedStreams: [stream] }), analyticsHandler: (_a = config.handlers) === null || _a === void 0 ? void 0 : _a.analyticsHandler, postSocialInteractionsHandler: (_b = config.handlers) === null || _b === void 0 ? void 0 : _b.socialInteractionsHandler }, commonPlayerProps())
|
|
153
120
|
};
|
|
154
|
-
|
|
155
|
-
discoverHandler.deactivate();
|
|
156
|
-
streamsInCategoryHandler.deactivate();
|
|
121
|
+
context.activateFeed({ categoryId: null });
|
|
157
122
|
};
|
|
158
123
|
const activateSelectedStreamOfCategoryPlayer = (id, prefetchedStreams, categoryId) => {
|
|
159
124
|
var _a, _b;
|
|
160
125
|
if (!config) {
|
|
161
126
|
return;
|
|
162
127
|
}
|
|
163
|
-
mediaCenterMode = '
|
|
128
|
+
mediaCenterMode = 'streams-feed';
|
|
164
129
|
computedPlayerProps = {
|
|
165
|
-
mode: '
|
|
166
|
-
props: Object.assign({ dataProvider: makeStreamsPlayerDataProvider({ config, prefetchedStreams: prefetchedStreams, initialStreamId: id, categoryId }), analyticsHandler: (_a = config.handlers) === null || _a === void 0 ? void 0 : _a.analyticsHandler, postSocialInteractionsHandler: (_b = config.handlers) === null || _b === void 0 ? void 0 : _b.socialInteractionsHandler },
|
|
130
|
+
mode: 'streams',
|
|
131
|
+
props: Object.assign({ dataProvider: makeStreamsPlayerDataProvider({ config, prefetchedStreams: prefetchedStreams, initialStreamId: id, categoryId }), analyticsHandler: (_a = config.handlers) === null || _a === void 0 ? void 0 : _a.analyticsHandler, postSocialInteractionsHandler: (_b = config.handlers) === null || _b === void 0 ? void 0 : _b.socialInteractionsHandler }, commonPlayerProps())
|
|
167
132
|
};
|
|
168
|
-
|
|
169
|
-
discoverHandler.deactivate();
|
|
170
|
-
streamsInCategoryHandler.deactivate();
|
|
171
|
-
};
|
|
172
|
-
const toggleDiscover = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
173
|
-
hideMobileControlsPanel();
|
|
174
|
-
streamsInCategoryHandler.deactivate();
|
|
175
|
-
yield discoverHandler.toggle();
|
|
176
|
-
});
|
|
177
|
-
const handleExternalActionExecuted = () => {
|
|
178
|
-
hideMobileControlsPanel();
|
|
179
|
-
discoverHandler.deactivate();
|
|
180
|
-
streamsInCategoryHandler.deactivate();
|
|
181
|
-
};
|
|
182
|
-
const showMobileControlsPanel = () => {
|
|
183
|
-
mobileControlsPanelActive = true;
|
|
133
|
+
context.activateFeed();
|
|
184
134
|
};
|
|
185
|
-
const
|
|
186
|
-
|
|
135
|
+
const onHeaderHeightChanged = (height) => {
|
|
136
|
+
headerHeight = height;
|
|
187
137
|
};
|
|
188
|
-
const
|
|
189
|
-
|
|
190
|
-
updateScrollShadows(target);
|
|
191
|
-
};
|
|
192
|
-
const updateScrollShadows = (scrollArea) => {
|
|
193
|
-
const { scrollLeft, scrollWidth, clientWidth } = scrollArea;
|
|
194
|
-
const scrollHasLeft = scrollLeft > 0;
|
|
195
|
-
const scrollHasRight = scrollLeft < scrollWidth - clientWidth - 1;
|
|
196
|
-
scrollArea.classList.toggle('has-left-mask', scrollHasLeft && !scrollHasRight);
|
|
197
|
-
scrollArea.classList.toggle('has-right-mask', scrollHasRight && !scrollHasLeft);
|
|
198
|
-
scrollArea.classList.toggle('has-both-masks', scrollHasRight && scrollHasLeft);
|
|
199
|
-
};
|
|
200
|
-
const onScrollMounted = (node) => {
|
|
201
|
-
scrollAreaRef = node;
|
|
202
|
-
scrollAreaRef.style.setProperty('--scroll-area--mask-offset', `${SCROLL_MASK_OFFSET}px`);
|
|
203
|
-
const scrollResizeObserver = new ResizeObserver(() => {
|
|
204
|
-
updateScrollShadows(node);
|
|
205
|
-
});
|
|
206
|
-
scrollResizeObserver === null || scrollResizeObserver === void 0 ? void 0 : scrollResizeObserver.observe(node);
|
|
207
|
-
return {
|
|
208
|
-
destroy: () => {
|
|
209
|
-
scrollResizeObserver === null || scrollResizeObserver === void 0 ? void 0 : scrollResizeObserver.disconnect();
|
|
210
|
-
}
|
|
211
|
-
};
|
|
212
|
-
};
|
|
213
|
-
const onHeaderHeightChanged = (data) => {
|
|
214
|
-
headerHeight = data.height;
|
|
215
|
-
};
|
|
216
|
-
const onExtraActionsForMobileControlsPanelDetermined = (actions) => {
|
|
217
|
-
extraMobileControlsPanelActions = actions;
|
|
138
|
+
const handlePlayerInitialized = (data) => {
|
|
139
|
+
closeFn = data.closePlayerFn;
|
|
218
140
|
};
|
|
219
141
|
const onWidthAnchorMounted = (node) => {
|
|
220
142
|
const resizeObserver = new ResizeObserver(() => {
|
|
@@ -229,82 +151,49 @@ const onWidthAnchorMounted = (node) => {
|
|
|
229
151
|
};
|
|
230
152
|
</script>
|
|
231
153
|
|
|
232
|
-
{#if
|
|
154
|
+
{#if context.initializing}
|
|
233
155
|
<Loading positionFixedCenter={true} timeout={600} />
|
|
234
156
|
{:else}
|
|
235
|
-
{#snippet
|
|
157
|
+
{#snippet mobileFooter()}
|
|
158
|
+
<MediaCenterFooter context={context} />
|
|
159
|
+
{/snippet}
|
|
160
|
+
{#snippet header()}
|
|
236
161
|
{#if !isMobileView}
|
|
237
|
-
<
|
|
238
|
-
<DesktopCategoriesSelector
|
|
239
|
-
handler={handler}
|
|
240
|
-
followingHandler={config?.handlers?.categoriesFollowingHandler}
|
|
241
|
-
on={{ categorySelected: selectCategory }} />
|
|
242
|
-
<button
|
|
243
|
-
type="button"
|
|
244
|
-
class="media-center-controls-panel__button"
|
|
245
|
-
class:media-center-controls-panel__button--active={discoverHandler.activated}
|
|
246
|
-
onclick={toggleDiscover}>
|
|
247
|
-
<span class="media-center-controls-panel__button-icon" class:media-center-controls-panel__button-icon--active={discoverHandler.activated}>
|
|
248
|
-
<Icon src={IconScreenSearch} />
|
|
249
|
-
</span>
|
|
250
|
-
<span class="media-center-controls-panel__button-value">
|
|
251
|
-
{localization.discoverButton}
|
|
252
|
-
</span>
|
|
253
|
-
</button>
|
|
254
|
-
<div class="media-center-controls-panel__scroll-area" use:onScrollMounted use:horizontalWheelScroll onscroll={handleScrollingAreaScroll}>
|
|
255
|
-
{#each handler.categories as category (category.id)}
|
|
256
|
-
<button
|
|
257
|
-
type="button"
|
|
258
|
-
id={category.id}
|
|
259
|
-
class="media-center-controls-panel__button"
|
|
260
|
-
class:media-center-controls-panel__button--active={!discoverHandler.activated && handler.controlsPanelSelectedCategory?.id === category.id}
|
|
261
|
-
data-child-name={(!discoverHandler.activated &&
|
|
262
|
-
handler.controlsPanelSelectedCategory?.id === category.id &&
|
|
263
|
-
handler.controlsPanelSelectedCategory?.childName) ||
|
|
264
|
-
undefined}
|
|
265
|
-
title={category.name}
|
|
266
|
-
onclick={() => selectCategory(category.id)}>
|
|
267
|
-
<span class="media-center-controls-panel__button-value">
|
|
268
|
-
{category.name}
|
|
269
|
-
</span>
|
|
270
|
-
</button>
|
|
271
|
-
{/each}
|
|
272
|
-
</div>
|
|
273
|
-
</div>
|
|
162
|
+
<MediaCenterHeader context={context} closeFn={closeFn} locale={locale} on={{ headerHeightChanged: onHeaderHeightChanged }} />
|
|
274
163
|
{:else}
|
|
275
|
-
<
|
|
276
|
-
<PlayerButton icon={IconLineHorizontal3} on={{ click: showMobileControlsPanel }} />
|
|
277
|
-
</div>
|
|
164
|
+
<MediaCenterHeaderMobile context={context} closeFn={closeFn} on={{ headerHeightChanged: onHeaderHeightChanged }} />
|
|
278
165
|
{/if}
|
|
279
166
|
{/snippet}
|
|
280
167
|
{#if computedPlayerProps.mode === 'posts'}
|
|
281
168
|
<PostsPlayerView
|
|
282
169
|
{...computedPlayerProps.props}
|
|
170
|
+
playerSettings={enhancedPlayerSettings()}
|
|
283
171
|
mediaCenterData={{
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
overlayIsActive:
|
|
287
|
-
callbacks: {
|
|
172
|
+
header: context.mediaCenterEffective ? header : undefined,
|
|
173
|
+
mobileFooter: isMobileView ? mobileFooter : undefined,
|
|
174
|
+
overlayIsActive: context.overlayIsActive,
|
|
175
|
+
callbacks: { onPlayerInitialized: handlePlayerInitialized }
|
|
288
176
|
}} />
|
|
289
|
-
{:else if computedPlayerProps.mode === '
|
|
177
|
+
{:else if computedPlayerProps.mode === 'streams'}
|
|
290
178
|
<StreamsPlayerView
|
|
291
179
|
{...computedPlayerProps.props}
|
|
180
|
+
playerSettings={enhancedPlayerSettings()}
|
|
292
181
|
mediaCenterData={{
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
overlayIsActive:
|
|
296
|
-
callbacks: {
|
|
182
|
+
header: context.mediaCenterEffective ? header : undefined,
|
|
183
|
+
mobileFooter: isMobileView ? mobileFooter : undefined,
|
|
184
|
+
overlayIsActive: context.overlayIsActive,
|
|
185
|
+
callbacks: { onPlayerInitialized: handlePlayerInitialized }
|
|
297
186
|
}} />
|
|
298
187
|
{/if}
|
|
299
|
-
{#if
|
|
188
|
+
{#if context.loading}
|
|
300
189
|
<Loading positionFixedCenter={true} timeout={600} />
|
|
301
190
|
{/if}
|
|
302
191
|
|
|
303
|
-
{#if discoverHandler.active}
|
|
304
|
-
<div class="media-center-overlay" style={`top:${headerHeight}px`} transition:fade={{ duration: 300 }}>
|
|
192
|
+
{#if context.discoverHandler.active}
|
|
193
|
+
<div class="media-center-overlay" class:media-center-overlay--mobile={isMobileView} style={`top:${headerHeight}px`} transition:fade={{ duration: 300 }}>
|
|
305
194
|
<DiscoverPanel
|
|
306
|
-
|
|
307
|
-
|
|
195
|
+
context={context}
|
|
196
|
+
locale={locale}
|
|
308
197
|
on={{
|
|
309
198
|
shortVideoSelected: (shortVideo) => activateSelectedShortVideoPlayer(shortVideo),
|
|
310
199
|
streamSelected: (stream) => activateSelectedStreamPlayer(stream)
|
|
@@ -312,24 +201,18 @@ const onWidthAnchorMounted = (node) => {
|
|
|
312
201
|
</div>
|
|
313
202
|
{/if}
|
|
314
203
|
|
|
315
|
-
{#if streamsInCategoryHandler.active}
|
|
316
|
-
<div class="media-center-overlay" style={`top:${headerHeight}px`} transition:fade={{ duration: 300 }}>
|
|
204
|
+
{#if context.streamsInCategoryHandler.active}
|
|
205
|
+
<div class="media-center-overlay" class:media-center-overlay--mobile={isMobileView} style={`top:${headerHeight}px`} transition:fade={{ duration: 300 }}>
|
|
317
206
|
<StreamsInCategoryPanel
|
|
318
|
-
handler={streamsInCategoryHandler}
|
|
207
|
+
handler={context.streamsInCategoryHandler}
|
|
319
208
|
on={{ streamSelected: (id, categoryId, streams) => activateSelectedStreamOfCategoryPlayer(id, streams, categoryId) }} />
|
|
320
209
|
</div>
|
|
321
210
|
{/if}
|
|
322
211
|
|
|
323
|
-
{#if
|
|
324
|
-
<div class="
|
|
325
|
-
<div class="
|
|
326
|
-
<
|
|
327
|
-
mediaCenterHandler={handler}
|
|
328
|
-
discoverHandler={discoverHandler}
|
|
329
|
-
followingHandler={config?.handlers?.categoriesFollowingHandler}
|
|
330
|
-
localization={localization}
|
|
331
|
-
extraActions={extraMobileControlsPanelActions}
|
|
332
|
-
on={{ categorySelected: selectCategory, toggleDiscover, externalActionExecuted: handleExternalActionExecuted }} />
|
|
212
|
+
{#if context.menuActive}
|
|
213
|
+
<div class="menu-overlay" class:menu-overlay--mobile={isMobileView} onclick={context.hideMenu} onkeydown={() => {}} role="none">
|
|
214
|
+
<div class="menu-overlay__panel">
|
|
215
|
+
<Menu context={context} locale={locale} on={{ categorySelected: selectCategory, streamSelected: activateSelectedStreamPlayer }} />
|
|
333
216
|
</div>
|
|
334
217
|
</div>
|
|
335
218
|
{/if}
|
|
@@ -347,113 +230,6 @@ const onWidthAnchorMounted = (node) => {
|
|
|
347
230
|
opacity: 1;
|
|
348
231
|
}
|
|
349
232
|
}
|
|
350
|
-
.media-center-controls-panel {
|
|
351
|
-
max-width: 100%;
|
|
352
|
-
display: flex;
|
|
353
|
-
align-items: center;
|
|
354
|
-
gap: 0.75rem;
|
|
355
|
-
pointer-events: auto;
|
|
356
|
-
/* Set 'container-type: inline-size;' to reference container*/
|
|
357
|
-
}
|
|
358
|
-
@container (width < 576px) {
|
|
359
|
-
.media-center-controls-panel {
|
|
360
|
-
display: none;
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
.media-center-controls-panel__scroll-area {
|
|
364
|
-
pointer-events: auto;
|
|
365
|
-
position: relative;
|
|
366
|
-
flex: 1 1 auto;
|
|
367
|
-
max-width: 100%;
|
|
368
|
-
min-width: 0;
|
|
369
|
-
overflow-x: auto;
|
|
370
|
-
overflow-y: hidden;
|
|
371
|
-
display: flex;
|
|
372
|
-
align-items: center;
|
|
373
|
-
gap: 0.75rem;
|
|
374
|
-
flex-wrap: nowrap;
|
|
375
|
-
mask-image: none;
|
|
376
|
-
scrollbar-width: none;
|
|
377
|
-
padding: 0.5rem 0.625rem;
|
|
378
|
-
padding-left: 0;
|
|
379
|
-
--_scroll-area--mask-offset--left: var(--scroll-area--mask-offset);
|
|
380
|
-
--_scroll-area--mask-offset--right: calc(100% - var(--scroll-area--mask-offset));
|
|
381
|
-
}
|
|
382
|
-
:global(.media-center-controls-panel__scroll-area.has-left-mask) {
|
|
383
|
-
mask-image: linear-gradient(to right, rgba(0, 0, 0, 0) 0, rgb(0, 0, 0) var(--_scroll-area--mask-offset--left), rgb(0, 0, 0) 100%);
|
|
384
|
-
}
|
|
385
|
-
:global(.media-center-controls-panel__scroll-area.has-right-mask) {
|
|
386
|
-
mask-image: linear-gradient(to right, rgb(0, 0, 0) 0, rgb(0, 0, 0) var(--_scroll-area--mask-offset--right), rgba(0, 0, 0, 0) 100%);
|
|
387
|
-
}
|
|
388
|
-
:global(.media-center-controls-panel__scroll-area.has-both-masks) {
|
|
389
|
-
mask-image: linear-gradient(to right, rgba(0, 0, 0, 0) 0, rgb(0, 0, 0) var(--_scroll-area--mask-offset--left), rgb(0, 0, 0) var(--_scroll-area--mask-offset--right), rgba(0, 0, 0, 0) 100%);
|
|
390
|
-
}
|
|
391
|
-
.media-center-controls-panel__button {
|
|
392
|
-
position: relative;
|
|
393
|
-
pointer-events: auto;
|
|
394
|
-
padding: 0.5rem 1.5rem;
|
|
395
|
-
display: flex;
|
|
396
|
-
gap: 0.375rem;
|
|
397
|
-
justify-content: center;
|
|
398
|
-
align-items: center;
|
|
399
|
-
max-width: 9.375rem;
|
|
400
|
-
flex: 0 0 auto;
|
|
401
|
-
min-width: auto;
|
|
402
|
-
width: auto;
|
|
403
|
-
white-space: nowrap;
|
|
404
|
-
border-radius: 0.875rem;
|
|
405
|
-
background-color: rgba(0, 0, 0, 0.6);
|
|
406
|
-
color: #f2f2f2;
|
|
407
|
-
transition: background 0.3s ease-in-out;
|
|
408
|
-
-webkit-user-drag: none;
|
|
409
|
-
user-select: none;
|
|
410
|
-
}
|
|
411
|
-
.media-center-controls-panel__button :global([contenteditable]) {
|
|
412
|
-
user-select: text;
|
|
413
|
-
}
|
|
414
|
-
.media-center-controls-panel__button--active {
|
|
415
|
-
background-color: rgba(255, 255, 255, 0.9);
|
|
416
|
-
color: #000000;
|
|
417
|
-
}
|
|
418
|
-
.media-center-controls-panel__button:hover:not(.media-center-controls-panel__button--active) {
|
|
419
|
-
background-color: rgba(0, 0, 0, 0.9);
|
|
420
|
-
}
|
|
421
|
-
.media-center-controls-panel__button[data-child-name]:not([data-child-name=""])::after {
|
|
422
|
-
content: attr(data-child-name);
|
|
423
|
-
position: absolute;
|
|
424
|
-
right: -0.625rem;
|
|
425
|
-
top: 100%;
|
|
426
|
-
transform: translateY(-50%);
|
|
427
|
-
max-width: 100%;
|
|
428
|
-
overflow: hidden;
|
|
429
|
-
text-overflow: ellipsis;
|
|
430
|
-
white-space: nowrap;
|
|
431
|
-
padding: 0.25rem 0.625rem;
|
|
432
|
-
font-size: 0.5rem;
|
|
433
|
-
line-height: 1;
|
|
434
|
-
border-radius: 100vw;
|
|
435
|
-
background-color: #1f2937;
|
|
436
|
-
color: #ffffff;
|
|
437
|
-
pointer-events: none;
|
|
438
|
-
}
|
|
439
|
-
.media-center-controls-panel__button-icon {
|
|
440
|
-
--icon--size: 1.0625rem;
|
|
441
|
-
--icon--color: #ffffff;
|
|
442
|
-
line-height: 0;
|
|
443
|
-
}
|
|
444
|
-
.media-center-controls-panel__button-icon--active {
|
|
445
|
-
--icon--color: #000000;
|
|
446
|
-
}
|
|
447
|
-
.media-center-controls-panel__button-value {
|
|
448
|
-
font-size: 0.875rem;
|
|
449
|
-
line-height: 1.0625rem;
|
|
450
|
-
text-overflow: ellipsis;
|
|
451
|
-
width: 100%;
|
|
452
|
-
white-space: nowrap;
|
|
453
|
-
overflow: hidden;
|
|
454
|
-
min-width: 0;
|
|
455
|
-
}
|
|
456
|
-
|
|
457
233
|
.media-center-overlay {
|
|
458
234
|
position: absolute;
|
|
459
235
|
inset: 0;
|
|
@@ -484,28 +260,21 @@ const onWidthAnchorMounted = (node) => {
|
|
|
484
260
|
scrollbar-width: thin;
|
|
485
261
|
}
|
|
486
262
|
}
|
|
487
|
-
@media (max-width: 576px) {
|
|
488
|
-
.media-center-overlay {
|
|
489
|
-
top: 5rem !important;
|
|
490
|
-
}
|
|
491
|
-
}
|
|
492
|
-
|
|
493
|
-
.media-center-mobile-controls-trigger {
|
|
494
|
-
position: absolute;
|
|
495
|
-
top: 0.9375rem;
|
|
496
|
-
left: 0.625rem;
|
|
497
|
-
z-index: 1;
|
|
498
|
-
}
|
|
499
263
|
|
|
500
|
-
.
|
|
264
|
+
.menu-overlay {
|
|
501
265
|
display: block;
|
|
502
266
|
position: absolute;
|
|
503
267
|
inset: 0;
|
|
268
|
+
right: auto;
|
|
504
269
|
container-type: inline-size;
|
|
505
270
|
z-index: 1;
|
|
506
271
|
}
|
|
507
|
-
.mobile
|
|
508
|
-
|
|
272
|
+
.menu-overlay--mobile {
|
|
273
|
+
right: 0;
|
|
274
|
+
bottom: 6.25rem;
|
|
275
|
+
}
|
|
276
|
+
.menu-overlay__panel {
|
|
277
|
+
width: 17.5rem;
|
|
509
278
|
height: 100%;
|
|
510
279
|
max-height: 100%;
|
|
511
280
|
}</style>
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type { TrackingParams } from '
|
|
2
|
-
import type { IMediaCenterConfig } from '
|
|
3
|
-
import type { PostPlayerModel } from '
|
|
4
|
-
import type { ProductCardModel } from '
|
|
5
|
-
import type { StreamPlayerModel } from '
|
|
1
|
+
import type { TrackingParams } from '../../../marketing-tracking';
|
|
2
|
+
import type { IMediaCenterConfig } from '../../config/types';
|
|
3
|
+
import type { PostPlayerModel } from '../../../posts/posts-player/types';
|
|
4
|
+
import type { ProductCardModel } from '../../../products/product-card';
|
|
5
|
+
import type { StreamPlayerModel } from '../../../streams/streams-player/types';
|
|
6
6
|
export declare class DiscoverPanelHandler {
|
|
7
7
|
private readonly config;
|
|
8
8
|
private _activated;
|
|
@@ -18,7 +18,6 @@ export declare class DiscoverPanelHandler {
|
|
|
18
18
|
get loading(): boolean;
|
|
19
19
|
activate: () => Promise<void>;
|
|
20
20
|
deactivate: () => void;
|
|
21
|
-
toggle: () => Promise<void>;
|
|
22
21
|
private _uniqueById;
|
|
23
22
|
}
|
|
24
23
|
type ShortVideoSectionItemType = {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PostType } from '
|
|
1
|
+
import { PostType } from '../../../core/enums';
|
|
2
2
|
export class DiscoverPanelHandler {
|
|
3
3
|
config;
|
|
4
4
|
_activated = $state(false);
|
|
@@ -80,13 +80,6 @@ export class DiscoverPanelHandler {
|
|
|
80
80
|
deactivate = () => {
|
|
81
81
|
this._activated = false;
|
|
82
82
|
};
|
|
83
|
-
toggle = async () => {
|
|
84
|
-
if (this._activated) {
|
|
85
|
-
this.deactivate();
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
await this.activate();
|
|
89
|
-
};
|
|
90
83
|
_uniqueById = (arr) => {
|
|
91
84
|
const seen = new Set();
|
|
92
85
|
const res = [];
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type Locale } from '../../../core/locale';
|
|
2
|
+
export declare class DiscoverPanelLocalization {
|
|
3
|
+
buttons: {
|
|
4
|
+
cart: string;
|
|
5
|
+
discover: string;
|
|
6
|
+
feed: string;
|
|
7
|
+
login: string;
|
|
8
|
+
moments: string;
|
|
9
|
+
webpage: string;
|
|
10
|
+
};
|
|
11
|
+
shortVideosSectionTitle: string;
|
|
12
|
+
interestsSectionTitle: string;
|
|
13
|
+
latestStreamsSectionTitle: string;
|
|
14
|
+
popularStreamsSectionTitle: string;
|
|
15
|
+
overviewLabel: string;
|
|
16
|
+
membersLabel: (count: number) => string;
|
|
17
|
+
locale: Locale;
|
|
18
|
+
constructor(locale: Locale);
|
|
19
|
+
}
|