@streamscloud/embeddable 11.0.0 → 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.
- package/dist/ads/ad-card/cmp.ad-card.svelte +4 -4
- package/dist/ads/ad-card/cmp.ad-card.svelte.d.ts +2 -0
- package/dist/content-player/cmp.content-player.svelte +63 -128
- package/dist/content-player/content-player-config.svelte.d.ts +3 -10
- package/dist/content-player/content-player-config.svelte.js +3 -21
- package/dist/content-player/content-player-settings.d.ts +7 -21
- package/dist/content-player/content-player-settings.js +0 -4
- package/dist/content-player/controls-and-attachments.svelte +39 -5
- package/dist/content-player/overview-panel.svelte +14 -6
- package/dist/content-player/overview-panel.svelte.d.ts +5 -1
- package/dist/content-player/ui-manager.svelte.d.ts +0 -2
- package/dist/content-player/ui-manager.svelte.js +0 -2
- package/dist/media-center/config/internal-media-center-config.d.ts +7 -3
- package/dist/media-center/config/internal-media-center-config.js +27 -24
- package/dist/media-center/config/operations.generated.d.ts +10 -3
- package/dist/media-center/config/operations.generated.js +17 -6
- package/dist/media-center/config/operations.graphql +11 -4
- package/dist/media-center/config/types.d.ts +5 -2
- package/dist/media-center/media-center/cmp.media-center.svelte +195 -149
- package/dist/media-center/media-center/cmp.media-center.svelte.d.ts +2 -19
- package/dist/media-center/media-center/discover/data-loading.d.ts +8 -0
- package/dist/media-center/media-center/discover/data-loading.js +35 -0
- package/dist/media-center/media-center/discover/discover-header-localization.d.ts +6 -0
- package/dist/media-center/media-center/discover/discover-header-localization.js +15 -0
- package/dist/media-center/media-center/discover/discover-header.svelte +214 -0
- package/dist/media-center/media-center/discover/discover-header.svelte.d.ts +9 -0
- package/dist/media-center/media-center/discover/discover-view-handler.svelte.d.ts +28 -0
- package/dist/media-center/media-center/discover/discover-view-handler.svelte.js +101 -0
- package/dist/media-center/media-center/discover/discover-view-localization.d.ts +6 -0
- package/dist/media-center/media-center/discover/discover-view-localization.js +15 -0
- package/dist/media-center/media-center/discover/discover-view.svelte +238 -0
- package/dist/media-center/media-center/discover/{discover-panel.svelte.d.ts → discover-view.svelte.d.ts} +4 -4
- package/dist/media-center/media-center/discover/index.d.ts +2 -2
- package/dist/media-center/media-center/discover/index.js +2 -2
- package/dist/media-center/media-center/discover/types.svelte.d.ts +20 -0
- package/dist/media-center/media-center/discover/types.svelte.js +20 -0
- package/dist/media-center/media-center/feed/feed-handler.svelte.d.ts +50 -0
- package/dist/media-center/media-center/feed/feed-handler.svelte.js +84 -0
- package/dist/media-center/media-center/feed/feed-providers-generator.d.ts +11 -0
- package/dist/media-center/media-center/feed/feed-providers-generator.js +79 -0
- package/dist/media-center/media-center/feed/index.d.ts +1 -0
- package/dist/media-center/media-center/feed/index.js +1 -0
- package/dist/media-center/media-center/feed/types.d.ts +12 -0
- package/dist/media-center/media-center/handlers/categories-handler.svelte.d.ts +9 -3
- package/dist/media-center/media-center/handlers/categories-handler.svelte.js +7 -4
- package/dist/media-center/media-center/handlers/index.d.ts +1 -1
- package/dist/media-center/media-center/handlers/index.js +1 -1
- package/dist/media-center/media-center/handlers/media-center-settings-handler.svelte.d.ts +19 -0
- package/dist/media-center/media-center/handlers/media-center-settings-handler.svelte.js +26 -0
- package/dist/media-center/media-center/header-footer/media-center-footer.svelte +3 -7
- package/dist/media-center/media-center/header-footer/media-center-header-localization.d.ts +1 -0
- package/dist/media-center/media-center/header-footer/media-center-header-localization.js +6 -0
- package/dist/media-center/media-center/header-footer/media-center-header-mobile.svelte +25 -36
- package/dist/media-center/media-center/header-footer/media-center-header-mobile.svelte.d.ts +2 -1
- package/dist/media-center/media-center/header-footer/media-center-header.svelte +14 -11
- package/dist/media-center/media-center/header-footer/media-center-header.svelte.d.ts +1 -2
- package/dist/media-center/media-center/media-center-context.svelte.d.ts +31 -13
- package/dist/media-center/media-center/media-center-context.svelte.js +71 -35
- package/dist/media-center/media-center/menu/menu-localization.d.ts +2 -11
- package/dist/media-center/media-center/menu/menu-localization.js +6 -45
- package/dist/media-center/media-center/menu/menu.svelte +31 -23
- package/dist/media-center/media-center/menu/menu.svelte.d.ts +1 -1
- package/dist/media-center/media-center/menu/popular-streams-panel-handler.svelte.d.ts +1 -1
- package/dist/media-center/media-center/menu/popular-streams-panel-handler.svelte.js +0 -3
- package/dist/media-center/media-center/moments/cmp.moments-circle.svelte +41 -0
- package/dist/media-center/media-center/moments/cmp.moments-circle.svelte.d.ts +7 -0
- package/dist/media-center/media-center/moments/index.d.ts +1 -0
- package/dist/media-center/media-center/moments/index.js +1 -0
- package/dist/media-center/media-center/streams-in-category/streams-in-category-panel-handler.svelte.d.ts +1 -1
- package/dist/media-center/media-center/streams-in-category/streams-in-category-panel-handler.svelte.js +1 -1
- package/dist/media-center/media-center/types.d.ts +44 -1
- package/dist/media-page/index.d.ts +121 -0
- package/dist/media-page/index.js +43 -0
- package/dist/posts/attachments/cmp.attachments.svelte +1 -0
- package/dist/posts/controls/cmp.controls.svelte +50 -13
- package/dist/posts/data-loaders/operations.generated.d.ts +4 -0
- package/dist/posts/data-loaders/operations.generated.js +6 -2
- package/dist/posts/model/types.d.ts +2 -0
- package/dist/posts/post-viewer/cmp.post-viewer.svelte +26 -18
- package/dist/posts/post-viewer/mapper.js +2 -0
- package/dist/posts/post-viewer/operations.generated.d.ts +2 -0
- package/dist/posts/post-viewer/operations.generated.js +3 -1
- package/dist/posts/post-viewer/operations.graphql +2 -0
- package/dist/posts/post-viewer/post-texts.svelte +3 -3
- package/dist/posts/posts-player/cmp.posts-player.svelte +20 -6
- package/dist/posts/posts-player/cmp.posts-player.svelte.d.ts +18 -2
- package/dist/posts/posts-player/index.d.ts +18 -3
- package/dist/posts/posts-player/index.js +42 -89
- package/dist/posts/posts-player/posts-player-proxy.svelte +19 -0
- package/dist/posts/posts-player/posts-player-proxy.svelte.d.ts +22 -0
- package/dist/posts/posts-player/posts-player-view.svelte +20 -34
- package/dist/posts/posts-player/posts-player-view.svelte.d.ts +2 -6
- package/dist/posts/posts-player/types.d.ts +19 -6
- package/dist/products/product-card/cmp.product-card.svelte +5 -5
- package/dist/products/product-card/cmp.product-card.svelte.d.ts +1 -1
- package/dist/short-videos/short-video-card/cmp.short-video-card.svelte +160 -19
- package/dist/short-videos/short-video-card/cmp.short-video-card.svelte.d.ts +2 -1
- package/dist/short-videos/short-video-card/localization.d.ts +5 -0
- package/dist/short-videos/short-video-card/localization.js +13 -0
- package/dist/short-videos/short-video-card/types.d.ts +4 -0
- package/dist/short-videos/short-videos-player/index.js +26 -33
- package/dist/streams/layout/element-views/cmp.stream-element.svelte +2 -2
- package/dist/streams/layout/element-views/cmp.text-ref-stream-element.svelte +7 -3
- package/dist/streams/layout/element-views/cmp.text-ref-stream-element.svelte.d.ts +2 -0
- package/dist/streams/layout/element-views/cmp.text-stream-element.svelte +7 -3
- package/dist/streams/layout/element-views/cmp.text-stream-element.svelte.d.ts +2 -0
- package/dist/streams/layout/element-views/price-element-view.svelte +2 -2
- package/dist/streams/layout/element-views/price-stream-element-localization.d.ts +1 -1
- package/dist/streams/layout/element-views/price-stream-element-localization.js +2 -2
- package/dist/streams/layout/models/mapper.js +2 -0
- package/dist/streams/streams-player/index.d.ts +21 -2
- package/dist/streams/streams-player/index.js +49 -24
- package/dist/streams/streams-player/stream-overview.svelte +1 -1
- package/dist/streams/streams-player/streams-player-buffer.svelte.d.ts +1 -3
- package/dist/streams/streams-player/streams-player-buffer.svelte.js +2 -2
- package/dist/streams/streams-player/streams-player-view.svelte +25 -21
- package/dist/streams/streams-player/streams-player-view.svelte.d.ts +1 -5
- package/dist/streams/streams-player/types.d.ts +18 -4
- package/dist/ui/line-clamp/cmp.line-clamp-auto.svelte +119 -0
- package/dist/ui/line-clamp/cmp.line-clamp-auto.svelte.d.ts +10 -0
- package/dist/ui/line-clamp/cmp.line-clamp.svelte +44 -72
- package/dist/ui/line-clamp/cmp.line-clamp.svelte.d.ts +3 -4
- package/dist/ui/line-clamp/index.d.ts +1 -0
- package/dist/ui/line-clamp/index.js +1 -0
- package/dist/ui/player/button/cmp.mobile-player-buttons-group.svelte +44 -0
- package/dist/ui/player/button/cmp.mobile-player-buttons-group.svelte.d.ts +7 -0
- package/dist/ui/player/button/cmp.player-button.svelte +0 -1
- package/dist/ui/player/button/cmp.player-buttons-group.svelte +15 -11
- package/dist/ui/player/button/cmp.player-buttons-group.svelte.d.ts +1 -1
- package/dist/ui/player/button/index.d.ts +1 -0
- package/dist/ui/player/button/index.js +1 -0
- package/dist/ui/player/button/types.d.ts +0 -2
- package/dist/ui/player/close-orchestrator/close-orchestrator.svelte.d.ts +18 -0
- package/dist/ui/player/close-orchestrator/close-orchestrator.svelte.js +58 -0
- package/dist/ui/player/close-orchestrator/index.d.ts +2 -0
- package/dist/ui/player/close-orchestrator/index.js +1 -0
- package/dist/ui/player/close-orchestrator/types.d.ts +9 -0
- package/dist/ui/player/close-orchestrator/types.js +1 -0
- package/dist/ui/player/colors/index.d.ts +1 -0
- package/dist/ui/player/colors/index.js +1 -0
- package/dist/ui/player/colors/player-colors.d.ts +11 -0
- package/dist/ui/player/colors/player-colors.js +1 -0
- package/dist/ui/player/providers/chunks-player-buffer/player-chunks-manager.svelte.d.ts +2 -6
- package/dist/ui/player/providers/chunks-player-buffer/player-chunks-manager.svelte.js +11 -11
- package/dist/ui/player/providers/default-chunks-player-buffer.svelte.d.ts +2 -3
- package/dist/ui/player/providers/default-chunks-player-buffer.svelte.js +5 -5
- package/dist/ui/player/providers/default-feed-player-buffer.svelte.d.ts +3 -4
- package/dist/ui/player/providers/default-feed-player-buffer.svelte.js +16 -9
- package/dist/ui/player/providers/service.d.ts +2 -0
- package/dist/ui/player/providers/service.js +13 -0
- package/dist/ui/player/providers/types.d.ts +1 -0
- package/dist/ui/with-background/cmp.with-background.svelte +86 -0
- package/dist/ui/with-background/cmp.with-background.svelte.d.ts +10 -0
- package/dist/ui/with-background/index.d.ts +1 -0
- package/dist/ui/with-background/index.js +1 -0
- package/package.json +5 -1
- package/dist/content-player/fade-mixins.scss +0 -12
- package/dist/content-player/header.svelte +0 -15
- package/dist/content-player/header.svelte.d.ts +0 -28
- package/dist/media-center/media-center/discover/discover-panel-handler.svelte.d.ts +0 -31
- package/dist/media-center/media-center/discover/discover-panel-handler.svelte.js +0 -94
- package/dist/media-center/media-center/discover/discover-panel-localization.d.ts +0 -19
- package/dist/media-center/media-center/discover/discover-panel-localization.js +0 -78
- package/dist/media-center/media-center/discover/discover-panel.svelte +0 -142
- package/dist/media-center/media-center/handlers/feed-handler.svelte.d.ts +0 -6
- package/dist/media-center/media-center/handlers/feed-handler.svelte.js +0 -12
- package/dist/media-center/media-center/providers/index.d.ts +0 -2
- package/dist/media-center/media-center/providers/index.js +0 -2
- package/dist/media-center/media-center/providers/post-player-provider-generator.d.ts +0 -8
- package/dist/media-center/media-center/providers/post-player-provider-generator.js +0 -32
- package/dist/media-center/media-center/providers/streams-player-provider-generator.d.ts +0 -8
- package/dist/media-center/media-center/providers/streams-player-provider-generator.js +0 -36
- package/dist/media-center/model/types.d.ts +0 -17
- /package/dist/media-center/{model → media-center/feed}/types.js +0 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<script lang="ts">import { ImageRound } from '../../../ui/image';
|
|
2
|
+
let { context } = $props();
|
|
3
|
+
const styles = $derived.by(() => {
|
|
4
|
+
var _a;
|
|
5
|
+
const values = [];
|
|
6
|
+
if ((_a = context.playerColors) === null || _a === void 0 ? void 0 : _a.brand) {
|
|
7
|
+
values.push(`--moments-circle--brand-color: ${context.playerColors.brand}`);
|
|
8
|
+
}
|
|
9
|
+
return values.join(';');
|
|
10
|
+
});
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<div class="moments-circle" style={styles}>
|
|
14
|
+
{#if context.targetData}
|
|
15
|
+
<ImageRound src={context.targetData.image} />
|
|
16
|
+
{/if}
|
|
17
|
+
</div>
|
|
18
|
+
|
|
19
|
+
<style>@keyframes fadeIn {
|
|
20
|
+
0% {
|
|
21
|
+
opacity: 1;
|
|
22
|
+
}
|
|
23
|
+
50% {
|
|
24
|
+
opacity: 0.4;
|
|
25
|
+
}
|
|
26
|
+
100% {
|
|
27
|
+
opacity: 1;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
.moments-circle {
|
|
31
|
+
--_moments-circle--brand-color: var(--moments-circle--brand-color, #00b8d8);
|
|
32
|
+
width: 6.25%rem;
|
|
33
|
+
min-width: 6.25%rem;
|
|
34
|
+
max-width: 6.25%rem;
|
|
35
|
+
height: 6.25%rem;
|
|
36
|
+
min-height: 6.25%rem;
|
|
37
|
+
max-height: 6.25%rem;
|
|
38
|
+
--image--rounded--inner--border-width: 1px;
|
|
39
|
+
--image--rounded--outer--border-color: var(--_moments-circle--brand-color);
|
|
40
|
+
--image--rounded--outer--border-width: 2px;
|
|
41
|
+
}</style>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as MomentsCircle } from './cmp.moments-circle.svelte';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as MomentsCircle } from './cmp.moments-circle.svelte';
|
|
@@ -8,7 +8,7 @@ export declare class StreamsInCategoryPanelHandler {
|
|
|
8
8
|
private _categoryId;
|
|
9
9
|
private _categoryName;
|
|
10
10
|
private _streams;
|
|
11
|
-
constructor(config: IMediaCenterConfig
|
|
11
|
+
constructor(config: IMediaCenterConfig);
|
|
12
12
|
get streamSectionItems(): StreamPlayerModel[];
|
|
13
13
|
get categoryId(): string;
|
|
14
14
|
get categoryName(): string;
|
|
@@ -27,7 +27,7 @@ export class StreamsInCategoryPanelHandler {
|
|
|
27
27
|
return this._activated && this._state === 'loading';
|
|
28
28
|
}
|
|
29
29
|
activate = async (categoryData) => {
|
|
30
|
-
if (!this.
|
|
30
|
+
if (!categoryData || this.categoryId === categoryData.id) {
|
|
31
31
|
return;
|
|
32
32
|
}
|
|
33
33
|
this._activated = true;
|
|
@@ -1,7 +1,50 @@
|
|
|
1
|
-
|
|
1
|
+
import type { Locale } from '../../core/locale';
|
|
2
|
+
import type { IMediaCenterConfig } from '../config/types';
|
|
3
|
+
import type { PostPlayerModel, PostsPlayerProps } from '../../posts/posts-player/types';
|
|
4
|
+
import type { IStreamsPlayerDataProvider, StreamAmplificationParameters, StreamsPlayerProps } from '../../streams/streams-player/types';
|
|
5
|
+
import type { ICloseOrchestrator } from '../../ui/player/close-orchestrator';
|
|
6
|
+
import type { IPlayerDataProvider } from '../../ui/player/providers';
|
|
7
|
+
export type MediaCenterMode = 'feed' | 'discover';
|
|
2
8
|
export type MediaCenterCategoryData = {
|
|
3
9
|
id: string;
|
|
4
10
|
name: string;
|
|
5
11
|
parentId: string | undefined;
|
|
6
12
|
parentName: string | undefined;
|
|
7
13
|
};
|
|
14
|
+
export type MediaCenterProps = {
|
|
15
|
+
config: IMediaCenterConfig;
|
|
16
|
+
settings?: MediaCenterSettings;
|
|
17
|
+
modeProps: MediaCenterModeProps;
|
|
18
|
+
closeOrchestrator: ICloseOrchestrator;
|
|
19
|
+
};
|
|
20
|
+
export type MediaCenterModeProps = {
|
|
21
|
+
mode: 'posts';
|
|
22
|
+
props: {
|
|
23
|
+
dataProvider: IPlayerDataProvider<PostPlayerModel>;
|
|
24
|
+
onPostActivated?: (id: string) => void;
|
|
25
|
+
};
|
|
26
|
+
} | {
|
|
27
|
+
mode: 'streams';
|
|
28
|
+
props: {
|
|
29
|
+
dataProvider: IStreamsPlayerDataProvider;
|
|
30
|
+
amplificationParameters?: StreamAmplificationParameters;
|
|
31
|
+
onStreamActivated?: (data: {
|
|
32
|
+
title: string;
|
|
33
|
+
image: string | null;
|
|
34
|
+
}) => void;
|
|
35
|
+
};
|
|
36
|
+
} | {
|
|
37
|
+
mode: 'discover';
|
|
38
|
+
};
|
|
39
|
+
export type PlayerProps = {
|
|
40
|
+
type: 'posts';
|
|
41
|
+
props: PostsPlayerProps;
|
|
42
|
+
} | {
|
|
43
|
+
type: 'streams';
|
|
44
|
+
props: StreamsPlayerProps;
|
|
45
|
+
};
|
|
46
|
+
export type MediaCenterSettings = {
|
|
47
|
+
locale?: Locale;
|
|
48
|
+
showStreamsCloudWatermark?: boolean;
|
|
49
|
+
disableBackground?: boolean;
|
|
50
|
+
};
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import type { Locale } from '../core/locale';
|
|
2
|
+
import { type IMediaCenterConfig } from '../media-center/config/types';
|
|
3
|
+
export type { IMediaCenterConfig };
|
|
4
|
+
export { mapToPostPlayerModel } from '../posts/data-loaders/mapper';
|
|
5
|
+
/**
|
|
6
|
+
* Opens the media page modal.
|
|
7
|
+
*
|
|
8
|
+
* Two overloads (mutually exclusive; enforced by TypeScript):
|
|
9
|
+
* - Config mode: openMediaPageModal({ mediaCenterConfig, viewerSettings?, on? })
|
|
10
|
+
* - Internal config mode: openMediaPageModal({ id, initiator, graphqlOrigin?, viewerSettings?, on? })
|
|
11
|
+
*
|
|
12
|
+
* @param init Configuration options.
|
|
13
|
+
*
|
|
14
|
+
* Config mode (overload 1)
|
|
15
|
+
* @param {IMediaCenterConfig} init.mediaCenterConfig
|
|
16
|
+
* Configuration for the media center.
|
|
17
|
+
*
|
|
18
|
+
* Internal config mode (overload 2)
|
|
19
|
+
* @param {string} init.id
|
|
20
|
+
* Media page ID, used to construct an internal media-center config.
|
|
21
|
+
* @param {string} init.initiator
|
|
22
|
+
* Initiator identifier (used for tracking/analytics and GraphQL).
|
|
23
|
+
* @param {string} [init.graphqlOrigin]
|
|
24
|
+
* Optional GraphQL origin (base URL). If omitted, the default origin is determined internally.
|
|
25
|
+
*
|
|
26
|
+
* Common (optional)
|
|
27
|
+
* @param {MediaPageViewerSettings} [init.viewerSettings]
|
|
28
|
+
* Viewer UI and behavior settings.
|
|
29
|
+
*
|
|
30
|
+
* Fields of MediaPageViewerSettings:
|
|
31
|
+
* - {boolean} [disableBackground]
|
|
32
|
+
* If true , hides the viewer background image.
|
|
33
|
+
* - {Locale} [locale='en']
|
|
34
|
+
* Localization for the viewer UI. Supported values: 'en' | 'no'.
|
|
35
|
+
* If omitted, the default locale 'en' is used.
|
|
36
|
+
* - {boolean} [showStreamsCloudWatermark]
|
|
37
|
+
* If true, shows the StreamsCloud watermark.
|
|
38
|
+
* - {boolean} [hideCloseButton]
|
|
39
|
+
* If true, hides the close button.
|
|
40
|
+
*
|
|
41
|
+
* Events
|
|
42
|
+
* @param {{ closed?: () => void }} [init.on]
|
|
43
|
+
* Optional event handlers.
|
|
44
|
+
* @param {() => void} [init.on.closed]
|
|
45
|
+
* Called after the modal is fully closed (after unmount and removal from the DOM).
|
|
46
|
+
*
|
|
47
|
+
* Notes
|
|
48
|
+
* - If neither mediaCenterConfig nor id is specified, a warning is shown and the modal is not opened.
|
|
49
|
+
*
|
|
50
|
+
* @returns {void}
|
|
51
|
+
*
|
|
52
|
+
* @example <caption>Config mode</caption>
|
|
53
|
+
* ```ts
|
|
54
|
+
* import {
|
|
55
|
+
* openMediaPageModal,
|
|
56
|
+
* type IMediaCenterConfig,
|
|
57
|
+
* } from '@streamscloud/embeddable/media-page';
|
|
58
|
+
*
|
|
59
|
+
* const mediaCenterConfig: IMediaCenterConfig = {
|
|
60
|
+
* // ...your media center configuration
|
|
61
|
+
* };
|
|
62
|
+
*
|
|
63
|
+
* openMediaPageModal({
|
|
64
|
+
* mediaCenterConfig,
|
|
65
|
+
* viewerSettings: {
|
|
66
|
+
* // Locale defaults to 'en'; set 'no' to switch to Norwegian:
|
|
67
|
+
* locale: 'no',
|
|
68
|
+
* disableBackground: false,
|
|
69
|
+
* hideCloseButton: false,
|
|
70
|
+
* showStreamsCloudWatermark: true,
|
|
71
|
+
* },
|
|
72
|
+
* on: {
|
|
73
|
+
* closed: () => console.log('Media page modal closed'),
|
|
74
|
+
* },
|
|
75
|
+
* });
|
|
76
|
+
* ```
|
|
77
|
+
*
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
* @example <caption>Internal config mode</caption>
|
|
81
|
+
* ```ts
|
|
82
|
+
* import { openMediaPageModal } from '@streamscloud/embeddable/media-page';
|
|
83
|
+
*
|
|
84
|
+
* openMediaPageModal({
|
|
85
|
+
* id: 'media-page-123',
|
|
86
|
+
* initiator: 'marketing-campaign',
|
|
87
|
+
* graphqlOrigin: 'https://api.example.com',
|
|
88
|
+
* viewerSettings: {
|
|
89
|
+
* locale: 'en',
|
|
90
|
+
* disableBackground: true,
|
|
91
|
+
* hideCloseButton: false,
|
|
92
|
+
* showStreamsCloudWatermark: false,
|
|
93
|
+
* },
|
|
94
|
+
* on: {
|
|
95
|
+
* closed: () => console.log('Media page modal closed'),
|
|
96
|
+
* },
|
|
97
|
+
* });
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
export declare function openMediaPageModal(init: {
|
|
101
|
+
mediaCenterConfig: IMediaCenterConfig;
|
|
102
|
+
viewerSettings?: MediaPageViewerSettings;
|
|
103
|
+
on?: {
|
|
104
|
+
closed?: () => void;
|
|
105
|
+
};
|
|
106
|
+
}): void;
|
|
107
|
+
export declare function openMediaPageModal(init: {
|
|
108
|
+
id: string;
|
|
109
|
+
initiator: string;
|
|
110
|
+
graphqlOrigin?: string;
|
|
111
|
+
viewerSettings?: MediaPageViewerSettings;
|
|
112
|
+
on?: {
|
|
113
|
+
closed?: () => void;
|
|
114
|
+
};
|
|
115
|
+
}): void;
|
|
116
|
+
export type MediaPageViewerSettings = {
|
|
117
|
+
disableBackground?: boolean;
|
|
118
|
+
locale?: Locale;
|
|
119
|
+
showStreamsCloudWatermark?: boolean;
|
|
120
|
+
hideCloseButton?: boolean;
|
|
121
|
+
};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { toastrWarning } from '../core/toastr';
|
|
2
|
+
import { InternalMediaCenterConfig } from '../media-center/config/internal-media-center-config';
|
|
3
|
+
import {} from '../media-center/config/types';
|
|
4
|
+
import { MediaCenter } from '../media-center/media-center';
|
|
5
|
+
import { CloseOrchestrator } from '../ui/player/close-orchestrator';
|
|
6
|
+
import { ModalShadowHost } from '../ui/shadow-dom';
|
|
7
|
+
import { mount, unmount } from 'svelte';
|
|
8
|
+
export { mapToPostPlayerModel } from '../posts/data-loaders/mapper';
|
|
9
|
+
export function openMediaPageModal(init) {
|
|
10
|
+
const { id, graphqlOrigin, initiator, viewerSettings, on } = init;
|
|
11
|
+
let mediaCenterConfig = init.mediaCenterConfig;
|
|
12
|
+
if (!mediaCenterConfig && id) {
|
|
13
|
+
mediaCenterConfig = new InternalMediaCenterConfig({ mediaPageId: id, graphqlOrigin, initiator });
|
|
14
|
+
}
|
|
15
|
+
if (!mediaCenterConfig) {
|
|
16
|
+
toastrWarning('Config is not specified.');
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const shadowHost = new ModalShadowHost();
|
|
20
|
+
let mounted = null;
|
|
21
|
+
const makeCloseOrchestrator = () => new CloseOrchestrator({
|
|
22
|
+
closeFn: async () => {
|
|
23
|
+
await unmount(mounted);
|
|
24
|
+
shadowHost.remove();
|
|
25
|
+
if (on?.closed) {
|
|
26
|
+
on.closed();
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
canClose: !viewerSettings?.hideCloseButton
|
|
30
|
+
});
|
|
31
|
+
mounted = mount(MediaCenter, {
|
|
32
|
+
target: shadowHost.shadowRoot,
|
|
33
|
+
props: {
|
|
34
|
+
config: mediaCenterConfig,
|
|
35
|
+
settings: viewerSettings,
|
|
36
|
+
modeProps: {
|
|
37
|
+
mode: 'discover'
|
|
38
|
+
},
|
|
39
|
+
closeOrchestrator: makeCloseOrchestrator()
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
shadowHost.attachToBody();
|
|
43
|
+
}
|
|
@@ -9,13 +9,13 @@
|
|
|
9
9
|
};
|
|
10
10
|
import { IconColor } from '../../ui/icon';
|
|
11
11
|
import { MediaVolumeManager } from '../../ui/media-playback';
|
|
12
|
-
import { PlayerButton, PlayerButtonsGroup } from '../../ui/player/button';
|
|
13
|
-
import IconHeartFilled from '@fluentui/svg-icons/icons/
|
|
14
|
-
import IconHeart from '@fluentui/svg-icons/icons/
|
|
15
|
-
import IconShare from '@fluentui/svg-icons/icons/
|
|
16
|
-
import IconShoppingBag from '@fluentui/svg-icons/icons/
|
|
17
|
-
import IconSpeaker2 from '@fluentui/svg-icons/icons/
|
|
18
|
-
import IconSpeakerMute from '@fluentui/svg-icons/icons/
|
|
12
|
+
import { MobilePlayerButtonsGroup, PlayerButton, PlayerButtonsGroup } from '../../ui/player/button';
|
|
13
|
+
import IconHeartFilled from '@fluentui/svg-icons/icons/heart_32_filled.svg?raw';
|
|
14
|
+
import IconHeart from '@fluentui/svg-icons/icons/heart_32_regular.svg?raw';
|
|
15
|
+
import IconShare from '@fluentui/svg-icons/icons/share_48_regular.svg?raw';
|
|
16
|
+
import IconShoppingBag from '@fluentui/svg-icons/icons/shopping_bag_32_regular.svg?raw';
|
|
17
|
+
import IconSpeaker2 from '@fluentui/svg-icons/icons/speaker_2_32_regular.svg?raw';
|
|
18
|
+
import IconSpeakerMute from '@fluentui/svg-icons/icons/speaker_mute_32_regular.svg?raw';
|
|
19
19
|
let { model, activeColor, inactiveColor, socialInteractionsHandler, on } = $props();
|
|
20
20
|
const showSocialInteractions = $derived(!!socialInteractionsHandler && model.enableSocialInteractions);
|
|
21
21
|
let isLikedStore = $state.raw({
|
|
@@ -71,10 +71,47 @@ const refreshIsLiked = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
71
71
|
});
|
|
72
72
|
</script>
|
|
73
73
|
|
|
74
|
-
|
|
75
|
-
{#if actions.length
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
74
|
+
<div class="desktop-controls">
|
|
75
|
+
{#if actions.length > 0}
|
|
76
|
+
{#if actions.length === 1}
|
|
77
|
+
<PlayerButton scaleEffect={true} activeColor={activeColor} inactiveColor={inactiveColor} icon={actions[0].icon} on={{ click: actions[0].callback }} />
|
|
78
|
+
{:else}
|
|
79
|
+
<PlayerButtonsGroup scaleEffect={true} activeColor={activeColor} backgroundColor={inactiveColor} actions={actions} />
|
|
80
|
+
{/if}
|
|
79
81
|
{/if}
|
|
80
|
-
|
|
82
|
+
</div>
|
|
83
|
+
|
|
84
|
+
<div class="mobile-controls">
|
|
85
|
+
<MobilePlayerButtonsGroup actions={actions} />
|
|
86
|
+
</div>
|
|
87
|
+
|
|
88
|
+
<style>@keyframes fadeIn {
|
|
89
|
+
0% {
|
|
90
|
+
opacity: 1;
|
|
91
|
+
}
|
|
92
|
+
50% {
|
|
93
|
+
opacity: 0.4;
|
|
94
|
+
}
|
|
95
|
+
100% {
|
|
96
|
+
opacity: 1;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
.desktop-controls {
|
|
100
|
+
display: block;
|
|
101
|
+
/* Set 'container-type: inline-size;' to reference container*/
|
|
102
|
+
}
|
|
103
|
+
@container (width < 576px) {
|
|
104
|
+
.desktop-controls {
|
|
105
|
+
display: none;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.mobile-controls {
|
|
110
|
+
display: none;
|
|
111
|
+
/* Set 'container-type: inline-size;' to reference container*/
|
|
112
|
+
}
|
|
113
|
+
@container (width < 576px) {
|
|
114
|
+
.mobile-controls {
|
|
115
|
+
display: block;
|
|
116
|
+
}
|
|
117
|
+
}</style>
|
|
@@ -10,6 +10,8 @@ export type GetPostsQuery = {
|
|
|
10
10
|
items: Array<{
|
|
11
11
|
id: string;
|
|
12
12
|
enableSocialInteractions: boolean;
|
|
13
|
+
viewsCount: number;
|
|
14
|
+
displayDate: any;
|
|
13
15
|
ownerProfile: {
|
|
14
16
|
id: string;
|
|
15
17
|
type: SchemaTypes.ProfileType;
|
|
@@ -89,6 +91,8 @@ export type GetPostsQuery = {
|
|
|
89
91
|
export type PostsPlayerPayloadFragment = {
|
|
90
92
|
id: string;
|
|
91
93
|
enableSocialInteractions: boolean;
|
|
94
|
+
viewsCount: number;
|
|
95
|
+
displayDate: any;
|
|
92
96
|
ownerProfile: {
|
|
93
97
|
id: string;
|
|
94
98
|
type: SchemaTypes.ProfileType;
|
|
@@ -221,7 +221,9 @@ export const PostsPlayerPayloadFragmentDoc = {
|
|
|
221
221
|
}
|
|
222
222
|
]
|
|
223
223
|
}
|
|
224
|
-
}
|
|
224
|
+
},
|
|
225
|
+
{ kind: 'Field', name: { kind: 'Name', value: 'viewsCount' } },
|
|
226
|
+
{ kind: 'Field', name: { kind: 'Name', value: 'displayDate' } }
|
|
225
227
|
]
|
|
226
228
|
}
|
|
227
229
|
}
|
|
@@ -468,7 +470,9 @@ export const GetPostsDocument = {
|
|
|
468
470
|
}
|
|
469
471
|
]
|
|
470
472
|
}
|
|
471
|
-
}
|
|
473
|
+
},
|
|
474
|
+
{ kind: 'Field', name: { kind: 'Name', value: 'viewsCount' } },
|
|
475
|
+
{ kind: 'Field', name: { kind: 'Name', value: 'displayDate' } }
|
|
472
476
|
]
|
|
473
477
|
}
|
|
474
478
|
},
|
|
@@ -57,25 +57,27 @@ const variables = $derived.by(() => {
|
|
|
57
57
|
|
|
58
58
|
<div class="post-viewer" style={variables} use:viewerMounted>
|
|
59
59
|
<PostMedia id={model.id} media={model.media} locale={locale} autoplay={autoplay} on={{ videoProgress: on?.progress }} />
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
60
|
+
{#if (uiManager.showAttachments && model.attachments) || model.heading || model.texts.kicker || model.texts.title || model.texts.text || model.texts.readMoreUrl}
|
|
61
|
+
<div class="post-viewer__information">
|
|
62
|
+
{#if model.heading}
|
|
63
|
+
<Heading model={model.heading} uiManager={uiManager} localization={localization} />
|
|
64
|
+
{/if}
|
|
65
|
+
<Texts model={model.texts} uiManager={uiManager} localization={localization} />
|
|
65
66
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
67
|
+
{#if uiManager.showAttachments && model.attachments}
|
|
68
|
+
<AttachmentsHorizontal
|
|
69
|
+
model={model}
|
|
70
|
+
trackingParams={trackingParams}
|
|
71
|
+
uiManager={uiManager}
|
|
72
|
+
on={{
|
|
73
|
+
productClick: on?.productClick,
|
|
74
|
+
productImpression: on?.productImpression,
|
|
75
|
+
adClick: on?.adClick,
|
|
76
|
+
adImpression: on?.adImpression
|
|
77
|
+
}} />
|
|
78
|
+
{/if}
|
|
79
|
+
</div>
|
|
80
|
+
{/if}
|
|
79
81
|
|
|
80
82
|
{#if uiManager.showControls}
|
|
81
83
|
<div class="post-viewer__controls-panel" use:trackControlsPanelSize>
|
|
@@ -129,6 +131,12 @@ const variables = $derived.by(() => {
|
|
|
129
131
|
justify-content: flex-end;
|
|
130
132
|
align-items: flex-end;
|
|
131
133
|
padding: 0 0.625rem;
|
|
134
|
+
/* Set 'container-type: inline-size;' to reference container*/
|
|
135
|
+
}
|
|
136
|
+
@container (width < 576px) {
|
|
137
|
+
.post-viewer__controls-panel {
|
|
138
|
+
padding-right: 0;
|
|
139
|
+
}
|
|
132
140
|
}
|
|
133
141
|
.post-viewer__information {
|
|
134
142
|
pointer-events: none;
|
|
@@ -11,6 +11,8 @@ export const mapToPostModel = (payload) => {
|
|
|
11
11
|
title: extractPostTitle(payload.postData),
|
|
12
12
|
text: extractPostText(payload.postData),
|
|
13
13
|
enableSocialInteractions: payload.enableSocialInteractions,
|
|
14
|
+
viewsCount: payload.viewsCount,
|
|
15
|
+
displayDate: payload.displayDate,
|
|
14
16
|
heading: null,
|
|
15
17
|
ads: payload.ad ? [mapToPostViewerAdCardModel(payload.ad)] : [],
|
|
16
18
|
products: payload.allProducts.map((x) => mapToPostViewerProductCard(x))
|
|
@@ -3,6 +3,8 @@ import type { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-
|
|
|
3
3
|
export type PostViewerPayloadFragment = {
|
|
4
4
|
id: string;
|
|
5
5
|
enableSocialInteractions: boolean;
|
|
6
|
+
viewsCount: number;
|
|
7
|
+
displayDate: any;
|
|
6
8
|
allProducts: Array<{
|
|
7
9
|
id: string;
|
|
8
10
|
title: string;
|
|
@@ -13,17 +13,17 @@ const variables = $derived.by(() => {
|
|
|
13
13
|
<div class="post-viewer-texts" style={variables}>
|
|
14
14
|
{#if model.kicker}
|
|
15
15
|
<div class="post-viewer-texts__kicker">
|
|
16
|
-
<LineClamp
|
|
16
|
+
<LineClamp maxLines={1} enableShowMore={false} locale={localization.locale}>{model.kicker}</LineClamp>
|
|
17
17
|
</div>
|
|
18
18
|
{/if}
|
|
19
19
|
{#if model.title}
|
|
20
20
|
<div class="post-viewer-texts__title">
|
|
21
|
-
<LineClamp
|
|
21
|
+
<LineClamp maxLines={2} enableShowMore={false} locale={localization.locale}>{model.title}</LineClamp>
|
|
22
22
|
</div>
|
|
23
23
|
{/if}
|
|
24
24
|
{#if model.text}
|
|
25
25
|
<div class="post-viewer-texts__text">
|
|
26
|
-
<LineClamp
|
|
26
|
+
<LineClamp maxLines={2} enableShowMore={true} locale={localization.locale}>{model.text}</LineClamp>
|
|
27
27
|
</div>
|
|
28
28
|
{/if}
|
|
29
29
|
{#if model.readMoreUrl}
|
|
@@ -1,16 +1,32 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
|
|
1
|
+
<script lang="ts">var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { CloseOrchestrator } from '../../ui/player/close-orchestrator';
|
|
11
|
+
import { createShadowRoot } from '../../ui/shadow-dom';
|
|
12
|
+
import { default as PostsPlayerProxy } from './posts-player-proxy.svelte';
|
|
3
13
|
import { mount, unmount } from 'svelte';
|
|
4
14
|
let { dataProvider, socialInteractionsHandler, playerSettings, analyticsHandler, on } = $props();
|
|
5
15
|
const initHost = (node) => {
|
|
6
16
|
const shadowRoot = createShadowRoot(node);
|
|
7
|
-
const mounted = mount(
|
|
17
|
+
const mounted = mount(PostsPlayerProxy, {
|
|
8
18
|
target: shadowRoot,
|
|
9
19
|
props: {
|
|
10
20
|
dataProvider,
|
|
11
21
|
socialInteractionsHandler,
|
|
12
22
|
playerSettings,
|
|
13
23
|
analyticsHandler,
|
|
24
|
+
closeOrchestrator: new CloseOrchestrator({
|
|
25
|
+
closeFn: () => __awaiter(void 0, void 0, void 0, function* () {
|
|
26
|
+
yield unmount(mounted);
|
|
27
|
+
}),
|
|
28
|
+
canClose: false
|
|
29
|
+
}),
|
|
14
30
|
on
|
|
15
31
|
}
|
|
16
32
|
});
|
|
@@ -22,6 +38,4 @@ const initHost = (node) => {
|
|
|
22
38
|
};
|
|
23
39
|
</script>
|
|
24
40
|
|
|
25
|
-
|
|
26
|
-
<div class="posts-player-host" use:initHost></div>
|
|
27
|
-
{/key}
|
|
41
|
+
<div class="posts-player-host" use:initHost></div>
|
|
@@ -1,4 +1,20 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
1
|
+
import type { Locale } from '../../core/locale';
|
|
2
|
+
import type { IPostSocialInteractionsHandler } from '..';
|
|
3
|
+
import type { IPlayerDataProvider } from '../../ui/player/providers';
|
|
4
|
+
import type { IPostAnalyticsHandler, PostPlayerModel } from './types';
|
|
5
|
+
type Props = {
|
|
6
|
+
dataProvider: IPlayerDataProvider<PostPlayerModel>;
|
|
7
|
+
socialInteractionsHandler?: IPostSocialInteractionsHandler;
|
|
8
|
+
analyticsHandler?: IPostAnalyticsHandler;
|
|
9
|
+
playerSettings?: {
|
|
10
|
+
locale?: Locale;
|
|
11
|
+
showStreamsCloudWatermark?: boolean;
|
|
12
|
+
disableBackground?: boolean;
|
|
13
|
+
};
|
|
14
|
+
on?: {
|
|
15
|
+
postActivated?: (id: string) => void;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
declare const Cmp: import("svelte").Component<Props, {}, "">;
|
|
3
19
|
type Cmp = ReturnType<typeof Cmp>;
|
|
4
20
|
export default Cmp;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import type { Locale } from '../../core/locale';
|
|
1
2
|
import { type IMediaCenterConfig } from '../../media-center/config/types';
|
|
2
3
|
import type { IPostSocialInteractionsHandler } from '../social-interactions';
|
|
3
4
|
import { default as PostsPlayer } from './cmp.posts-player.svelte';
|
|
4
|
-
import type { IPostAnalyticsHandler, PostPlayerModel
|
|
5
|
+
import type { IPostAnalyticsHandler, PostPlayerModel } from './types';
|
|
5
6
|
export { PostsPlayer, type PostPlayerModel };
|
|
6
7
|
export type { IMediaCenterConfig, IPostAnalyticsHandler };
|
|
7
8
|
export { mapToPostPlayerModel } from '../data-loaders/mapper';
|
|
@@ -74,10 +75,18 @@ export { mapToPostPlayerModel } from '../data-loaders/mapper';
|
|
|
74
75
|
*/
|
|
75
76
|
export declare function openPostsPlayer(init: {
|
|
76
77
|
postsProvider: IPostsPlayerDataProvider;
|
|
77
|
-
mediaCenterConfig
|
|
78
|
+
mediaCenterConfig: IMediaCenterConfig;
|
|
79
|
+
playerSettings?: PostsPlayerSettings;
|
|
80
|
+
on?: {
|
|
81
|
+
playerClosed?: () => void;
|
|
82
|
+
postActivated?: (id: string) => void;
|
|
83
|
+
};
|
|
84
|
+
}): void;
|
|
85
|
+
export declare function openPostsPlayer(init: {
|
|
86
|
+
postsProvider: IPostsPlayerDataProvider;
|
|
78
87
|
analyticsHandler?: IPostAnalyticsHandler;
|
|
79
88
|
socialInteractionsHandler?: IPostSocialInteractionsHandler;
|
|
80
|
-
playerSettings?:
|
|
89
|
+
playerSettings?: PostsPlayerSettings;
|
|
81
90
|
on?: {
|
|
82
91
|
playerClosed?: () => void;
|
|
83
92
|
postActivated?: (id: string) => void;
|
|
@@ -106,3 +115,9 @@ export type IPostsPlayerDataProvider<TChunk extends WithId = WithId> = {
|
|
|
106
115
|
type WithId = {
|
|
107
116
|
id: string;
|
|
108
117
|
};
|
|
118
|
+
export type PostsPlayerSettings = {
|
|
119
|
+
disableBackground?: boolean;
|
|
120
|
+
locale?: Locale;
|
|
121
|
+
showStreamsCloudWatermark?: boolean;
|
|
122
|
+
hideCloseButton?: boolean;
|
|
123
|
+
};
|