@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.
- package/dist/ads/ad-card/cmp.ad-card.svelte +30 -10
- package/dist/ads/ad-card/cmp.ad-card.svelte.d.ts +7 -0
- package/dist/content-player/cmp.content-player.svelte +67 -142
- package/dist/content-player/content-player-config.svelte.d.ts +14 -10
- package/dist/content-player/content-player-config.svelte.js +5 -20
- package/dist/content-player/content-player-settings.d.ts +7 -9
- package/dist/content-player/content-player-settings.js +12 -4
- package/dist/content-player/controls-and-attachments.svelte +63 -58
- package/dist/content-player/overview-panel.svelte +32 -74
- package/dist/content-player/overview-panel.svelte.d.ts +34 -7
- package/dist/content-player/ui-manager.svelte.d.ts +2 -6
- package/dist/content-player/ui-manager.svelte.js +3 -7
- package/dist/media-center/config/internal-media-center-config.d.ts +7 -3
- package/dist/media-center/config/internal-media-center-config.js +27 -23
- package/dist/media-center/config/operations.generated.d.ts +23 -3
- package/dist/media-center/config/operations.generated.js +37 -6
- package/dist/media-center/config/operations.graphql +24 -4
- package/dist/media-center/config/types.d.ts +18 -2
- package/dist/media-center/media-center/cmp.media-center.svelte +213 -398
- package/dist/media-center/media-center/cmp.media-center.svelte.d.ts +2 -17
- 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-view.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/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 +27 -0
- package/dist/media-center/media-center/handlers/categories-handler.svelte.js +39 -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/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/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 +73 -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 +13 -0
- package/dist/media-center/media-center/header-footer/media-center-header-localization.js +46 -0
- package/dist/media-center/media-center/header-footer/media-center-header-mobile.svelte +80 -0
- package/dist/media-center/media-center/header-footer/media-center-header-mobile.svelte.d.ts +12 -0
- package/dist/media-center/media-center/header-footer/media-center-header.svelte +313 -0
- package/dist/media-center/media-center/header-footer/media-center-header.svelte.d.ts +12 -0
- package/dist/media-center/media-center/media-center-context.svelte.d.ts +68 -0
- package/dist/media-center/media-center/media-center-context.svelte.js +134 -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 +10 -0
- package/dist/media-center/media-center/menu/menu-localization.js +39 -0
- package/dist/media-center/media-center/menu/menu.svelte +353 -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 +23 -0
- 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/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} +5 -5
- 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 +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 +6 -3
- package/dist/posts/attachments/cmp.attachments.svelte.d.ts +6 -0
- package/dist/posts/controls/cmp.controls.svelte +51 -14
- package/dist/posts/controls/cmp.controls.svelte.d.ts +2 -0
- 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 +29 -19
- package/dist/posts/post-viewer/cmp.post-viewer.svelte.d.ts +4 -0
- 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 +39 -15
- package/dist/products/product-card/cmp.product-card.svelte.d.ts +6 -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/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/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/stream-card/cmp.stream-card.svelte +5 -5
- 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 +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-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 -23
- package/dist/streams/streams-player/streams-player-view.svelte.d.ts +1 -5
- package/dist/streams/streams-player/types.d.ts +18 -8
- package/dist/ui/icon/cmp.icon.svelte +3 -2
- 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 +16 -5
- package/dist/ui/player/button/cmp.player-button.svelte.d.ts +3 -0
- package/dist/ui/player/button/cmp.player-buttons-group.svelte +27 -8
- package/dist/ui/player/button/cmp.player-buttons-group.svelte.d.ts +2 -0
- package/dist/ui/player/button/index.d.ts +1 -0
- package/dist/ui/player/button/index.js +1 -0
- 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/content-player-localization.d.ts +0 -6
- package/dist/content-player/content-player-localization.js +0 -15
- package/dist/content-player/fade-mixins.scss +0 -12
- package/dist/content-player/header.svelte +0 -137
- package/dist/content-player/header.svelte.d.ts +0 -32
- 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-handler.svelte.d.ts +0 -32
- package/dist/media-center/media-center/discover-panel-handler.svelte.js +0 -101
- package/dist/media-center/media-center/discover-panel.svelte +0 -133
- 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
- package/dist/media-center/media-center/post-player-provider-generator.js +0 -32
- package/dist/media-center/media-center/streams-player-provider-generator.d.ts +0 -8
- package/dist/media-center/media-center/streams-player-provider-generator.js +0 -36
- package/dist/media-center/model/types.d.ts +0 -16
- /package/dist/media-center/{model → media-center/feed}/types.js +0 -0
|
@@ -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
|
+
};
|
|
@@ -1,104 +1,57 @@
|
|
|
1
1
|
import {} from '../../media-center/config/types';
|
|
2
2
|
import { MediaCenter } from '../../media-center/media-center';
|
|
3
|
+
import { CloseOrchestrator } from '../../ui/player/close-orchestrator';
|
|
3
4
|
import { ModalShadowHost } from '../../ui/shadow-dom';
|
|
4
5
|
import { default as PostsPlayer } from './cmp.posts-player.svelte';
|
|
6
|
+
import { default as PostsPlayerProxy } from './posts-player-proxy.svelte';
|
|
5
7
|
import { mount, unmount } from 'svelte';
|
|
6
8
|
export { PostsPlayer };
|
|
7
9
|
export { mapToPostPlayerModel } from '../data-loaders/mapper';
|
|
8
|
-
/**
|
|
9
|
-
* Opens the posts player modal.
|
|
10
|
-
*
|
|
11
|
-
* @param init Configuration options.
|
|
12
|
-
*
|
|
13
|
-
* Data provider (required)
|
|
14
|
-
* @param init.postsProvider
|
|
15
|
-
* Provider that supplies post items to the player.
|
|
16
|
-
*
|
|
17
|
-
* Media center (optional)
|
|
18
|
-
* @param {IMediaCenterConfig} [init.mediaCenterConfig]
|
|
19
|
-
* Optional media-center config passed to MediaCenter.
|
|
20
|
-
*
|
|
21
|
-
* Analytics (optional)
|
|
22
|
-
* @param {IPostAnalyticsHandler} [init.analyticsHandler]
|
|
23
|
-
* Custom analytics handler for posts player events.
|
|
24
|
-
*
|
|
25
|
-
* Social interactions (optional)
|
|
26
|
-
* @param {IPostSocialInteractionsHandler} [init.socialInteractionsHandler]
|
|
27
|
-
* Handler for social interactions (like, share, etc.).
|
|
28
|
-
*
|
|
29
|
-
* Player settings
|
|
30
|
-
* @param {PostPlayerSettings} [init.playerSettings]
|
|
31
|
-
* Player UI and behavior settings.
|
|
32
|
-
* Fields of PostPlayerSettings:
|
|
33
|
-
* - {boolean} [disableBackground]
|
|
34
|
-
* If true, hides the player's background image.
|
|
35
|
-
* - {boolean} [hideCloseButton]
|
|
36
|
-
* If true, hides the close button.
|
|
37
|
-
* - {'en'|'no'} [locale='en']
|
|
38
|
-
* Localization for the player UI. Default is 'en'; use 'no' for Norwegian.
|
|
39
|
-
* - {boolean} [showStreamsCloudWatermark]
|
|
40
|
-
* If true, shows the StreamsCloud watermark.
|
|
41
|
-
*
|
|
42
|
-
* Events
|
|
43
|
-
* @param {{ playerClosed?: () => void; postActivated?: (id: string) => void }} [init.on]
|
|
44
|
-
* Optional event handlers.
|
|
45
|
-
* @param {() => void} [init.on.playerClosed]
|
|
46
|
-
* Called after the player is fully closed (after unmount and removal from the DOM).
|
|
47
|
-
* @param {(id: string) => void} [init.on.postActivated]
|
|
48
|
-
* Called when a post becomes active (receives the post's id).
|
|
49
|
-
*
|
|
50
|
-
* @returns {void}
|
|
51
|
-
*
|
|
52
|
-
* @example
|
|
53
|
-
* ```ts
|
|
54
|
-
* import { openPostsPlayer } from '@streamscloud/embeddable/posts-player';
|
|
55
|
-
*
|
|
56
|
-
* openPostsPlayer({
|
|
57
|
-
* postsProvider: myPostsProvider,
|
|
58
|
-
* mediaCenterConfig: myMediaCenterConfig,
|
|
59
|
-
* analyticsHandler: myAnalyticsHandler,
|
|
60
|
-
* socialInteractionsHandler: mySocialHandler,
|
|
61
|
-
* playerSettings: {
|
|
62
|
-
* // Default locale is 'en'; set 'no' to switch to Norwegian:
|
|
63
|
-
* locale: 'no',
|
|
64
|
-
* disableBackground: false,
|
|
65
|
-
* hideCloseButton: false,
|
|
66
|
-
* showStreamsCloudWatermark: true,
|
|
67
|
-
* },
|
|
68
|
-
* on: {
|
|
69
|
-
* playerClosed: () => console.log('Player closed'),
|
|
70
|
-
* postActivated: (id) => console.log('Activated post', id),
|
|
71
|
-
* },
|
|
72
|
-
* });
|
|
73
|
-
* ```
|
|
74
|
-
*/
|
|
75
10
|
export function openPostsPlayer(init) {
|
|
76
11
|
const { postsProvider: dataProvider, mediaCenterConfig, analyticsHandler, socialInteractionsHandler, playerSettings, on } = init;
|
|
77
12
|
const shadowHost = new ModalShadowHost();
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
13
|
+
let mounted;
|
|
14
|
+
const makeCloseOrchestrator = () => new CloseOrchestrator({
|
|
15
|
+
closeFn: async () => {
|
|
16
|
+
await unmount(mounted);
|
|
17
|
+
shadowHost.remove();
|
|
18
|
+
if (on?.playerClosed) {
|
|
19
|
+
on.playerClosed();
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
canClose: !playerSettings?.hideCloseButton
|
|
23
|
+
});
|
|
24
|
+
if (mediaCenterConfig) {
|
|
25
|
+
mounted = mount(MediaCenter, {
|
|
26
|
+
target: shadowHost.shadowRoot,
|
|
27
|
+
props: {
|
|
28
|
+
config: mediaCenterConfig,
|
|
29
|
+
settings: playerSettings,
|
|
30
|
+
modeProps: {
|
|
31
|
+
mode: 'posts',
|
|
32
|
+
props: {
|
|
33
|
+
dataProvider,
|
|
34
|
+
onPostActivated: on?.postActivated
|
|
98
35
|
}
|
|
36
|
+
},
|
|
37
|
+
closeOrchestrator: makeCloseOrchestrator()
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
mounted = mount(PostsPlayerProxy, {
|
|
43
|
+
target: shadowHost.shadowRoot,
|
|
44
|
+
props: {
|
|
45
|
+
dataProvider,
|
|
46
|
+
socialInteractionsHandler,
|
|
47
|
+
analyticsHandler,
|
|
48
|
+
playerSettings,
|
|
49
|
+
closeOrchestrator: makeCloseOrchestrator(),
|
|
50
|
+
on: {
|
|
51
|
+
postActivated: on?.postActivated
|
|
99
52
|
}
|
|
100
53
|
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
103
56
|
shadowHost.attachToBody();
|
|
104
57
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<script lang="ts">import {} from '../../ui/player/close-orchestrator';
|
|
2
|
+
import { WithBackground } from '../../ui/with-background';
|
|
3
|
+
import { default as PostsPlayerView } from './posts-player-view.svelte';
|
|
4
|
+
let { dataProvider, socialInteractionsHandler, closeOrchestrator, playerSettings, analyticsHandler, on } = $props();
|
|
5
|
+
let backgroundImageUrl = $state(null);
|
|
6
|
+
const handleBackgroundImagedLoaded = (url) => {
|
|
7
|
+
backgroundImageUrl = url;
|
|
8
|
+
};
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<WithBackground backgroundDisabled={playerSettings?.disableBackground === true} backgroundImageUrl={backgroundImageUrl}>
|
|
12
|
+
<PostsPlayerView
|
|
13
|
+
dataProvider={{ type: 'provider', provider: dataProvider }}
|
|
14
|
+
socialInteractionsHandler={socialInteractionsHandler}
|
|
15
|
+
playerSettings={playerSettings}
|
|
16
|
+
analyticsHandler={analyticsHandler}
|
|
17
|
+
closeOrchestrator={closeOrchestrator}
|
|
18
|
+
on={{ postActivated: on?.postActivated, backgroundImageLoaded: playerSettings?.disableBackground === true ? undefined : handleBackgroundImagedLoaded }} />
|
|
19
|
+
</WithBackground>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Locale } from '../../core/locale';
|
|
2
|
+
import type { IPostSocialInteractionsHandler } from '..';
|
|
3
|
+
import { type ICloseOrchestrator } from '../../ui/player/close-orchestrator';
|
|
4
|
+
import type { IPlayerDataProvider } from '../../ui/player/providers';
|
|
5
|
+
import type { IPostAnalyticsHandler, PostPlayerModel } from './types';
|
|
6
|
+
type Props = {
|
|
7
|
+
dataProvider: IPlayerDataProvider<PostPlayerModel>;
|
|
8
|
+
socialInteractionsHandler?: IPostSocialInteractionsHandler;
|
|
9
|
+
analyticsHandler?: IPostAnalyticsHandler;
|
|
10
|
+
closeOrchestrator: ICloseOrchestrator;
|
|
11
|
+
playerSettings?: {
|
|
12
|
+
locale?: Locale;
|
|
13
|
+
showStreamsCloudWatermark?: boolean;
|
|
14
|
+
disableBackground?: boolean;
|
|
15
|
+
};
|
|
16
|
+
on?: {
|
|
17
|
+
postActivated?: (id: string) => void;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
declare const PostsPlayerProxy: import("svelte").Component<Props, {}, "">;
|
|
21
|
+
type PostsPlayerProxy = ReturnType<typeof PostsPlayerProxy>;
|
|
22
|
+
export default PostsPlayerProxy;
|
|
@@ -11,11 +11,11 @@ import { PostType } from '../..';
|
|
|
11
11
|
import { ContentPlayer, ContentPlayerConfig } from '../../content-player';
|
|
12
12
|
import { ContentPlayerSettings } from '../../content-player/content-player-settings';
|
|
13
13
|
import { preloadImage } from '../../core/image-preloader';
|
|
14
|
-
import { Utils } from '../../core/utils';
|
|
15
14
|
import { getPostCoverImage } from '../model';
|
|
16
|
-
import {
|
|
15
|
+
import {} from '../../ui/player/providers';
|
|
16
|
+
import { initBufferFromProvider } from '../../ui/player/providers/service';
|
|
17
17
|
import { untrack } from 'svelte';
|
|
18
|
-
let { dataProvider, socialInteractionsHandler, playerSettings, analyticsHandler,
|
|
18
|
+
let { dataProvider, socialInteractionsHandler, playerSettings, analyticsHandler, closeOrchestrator, on } = $props();
|
|
19
19
|
$effect(() => {
|
|
20
20
|
void dataProvider;
|
|
21
21
|
untrack(() => {
|
|
@@ -23,36 +23,21 @@ $effect(() => {
|
|
|
23
23
|
initBuffer(dataProvider);
|
|
24
24
|
});
|
|
25
25
|
});
|
|
26
|
-
$effect(() => contentPlayerConfig.updateMediaCenterData(mediaCenterData));
|
|
27
26
|
const initBuffer = (dataProvider) => __awaiter(void 0, void 0, void 0, function* () {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
preloaded: (instance) => __awaiter(void 0, void 0, void 0, function* () {
|
|
32
|
-
if (instance.loaded.length) {
|
|
33
|
-
const coverUrl = getPostCoverImage(instance.loaded[0]);
|
|
34
|
-
yield preloadImage(coverUrl);
|
|
35
|
-
contentPlayerConfig.setBackgroundImageUrl(coverUrl);
|
|
36
|
-
}
|
|
37
|
-
contentPlayerConfig.playerBuffer = instance;
|
|
38
|
-
})
|
|
39
|
-
});
|
|
40
|
-
break;
|
|
41
|
-
case 'chunks':
|
|
42
|
-
new DefaultChunksPlayerBuffer(dataProvider, {
|
|
43
|
-
preloaded: (instance) => __awaiter(void 0, void 0, void 0, function* () {
|
|
44
|
-
if (instance.loaded.length) {
|
|
45
|
-
const coverUrl = getPostCoverImage(instance.loaded[0]);
|
|
46
|
-
yield preloadImage(coverUrl);
|
|
47
|
-
contentPlayerConfig.setBackgroundImageUrl(coverUrl);
|
|
48
|
-
}
|
|
49
|
-
contentPlayerConfig.playerBuffer = instance;
|
|
50
|
-
})
|
|
51
|
-
});
|
|
52
|
-
break;
|
|
53
|
-
default:
|
|
54
|
-
Utils.assertUnreachable(dataProvider);
|
|
27
|
+
let newBuffer;
|
|
28
|
+
if (dataProvider.type === 'buffer') {
|
|
29
|
+
newBuffer = dataProvider.buffer;
|
|
55
30
|
}
|
|
31
|
+
else {
|
|
32
|
+
newBuffer = initBufferFromProvider(dataProvider.provider);
|
|
33
|
+
}
|
|
34
|
+
yield newBuffer.ensureWarmedUp();
|
|
35
|
+
if (newBuffer.loaded.length && (on === null || on === void 0 ? void 0 : on.backgroundImageLoaded)) {
|
|
36
|
+
const coverUrl = getPostCoverImage(newBuffer.loaded[0]);
|
|
37
|
+
yield preloadImage(coverUrl);
|
|
38
|
+
on.backgroundImageLoaded(coverUrl);
|
|
39
|
+
}
|
|
40
|
+
contentPlayerConfig.playerBuffer = newBuffer;
|
|
56
41
|
});
|
|
57
42
|
const getLoadedItemById = (id) => {
|
|
58
43
|
if (!contentPlayerConfig.playerBuffer) {
|
|
@@ -66,10 +51,9 @@ const contentPlayerConfig = new ContentPlayerConfig({
|
|
|
66
51
|
postModelFromCurrentItem: (item) => item
|
|
67
52
|
},
|
|
68
53
|
socialInteractionsHandler,
|
|
69
|
-
mediaCenterData,
|
|
70
54
|
settings: new ContentPlayerSettings(playerSettings),
|
|
55
|
+
closeOrchestrator,
|
|
71
56
|
callbacks: {
|
|
72
|
-
close: on === null || on === void 0 ? void 0 : on.playerClosed,
|
|
73
57
|
productClick: (id, postId) => {
|
|
74
58
|
var _a;
|
|
75
59
|
if (((_a = getLoadedItemById(postId)) === null || _a === void 0 ? void 0 : _a.postType) === PostType.ShortVideo) {
|
|
@@ -96,7 +80,9 @@ const contentPlayerConfig = new ContentPlayerConfig({
|
|
|
96
80
|
if (!post) {
|
|
97
81
|
return;
|
|
98
82
|
}
|
|
99
|
-
|
|
83
|
+
if (on === null || on === void 0 ? void 0 : on.backgroundImageLoaded) {
|
|
84
|
+
on.backgroundImageLoaded(getPostCoverImage(post));
|
|
85
|
+
}
|
|
100
86
|
if (post.analyticsOrganizationId) {
|
|
101
87
|
analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.setOrganizationId(post.analyticsOrganizationId);
|
|
102
88
|
}
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
type $$ComponentProps = PostPlayerProps & {
|
|
4
|
-
mediaCenterData?: MediaCenterData;
|
|
5
|
-
};
|
|
6
|
-
declare const PostsPlayerView: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
1
|
+
import type { PostsPlayerProps } from './types';
|
|
2
|
+
declare const PostsPlayerView: import("svelte").Component<PostsPlayerProps, {}, "">;
|
|
7
3
|
type PostsPlayerView = ReturnType<typeof PostsPlayerView>;
|
|
8
4
|
export default PostsPlayerView;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Locale } from '../../core/locale';
|
|
2
2
|
import type { IPostModel } from '..';
|
|
3
3
|
import type { IPostSocialInteractionsHandler } from '../social-interactions';
|
|
4
|
-
import type {
|
|
4
|
+
import type { ICloseOrchestrator } from '../../ui/player/close-orchestrator';
|
|
5
|
+
import type { PlayerColors } from '../../ui/player/colors';
|
|
6
|
+
import type { IPlayerBuffer, IPlayerDataProvider } from '../../ui/player/providers';
|
|
5
7
|
export interface IPostAnalyticsHandler {
|
|
6
8
|
setOrganizationId: (organizationId: string) => void;
|
|
7
9
|
trackPostOpened: (postId: string, ownerId: string) => void;
|
|
@@ -14,14 +16,25 @@ export interface IPostAnalyticsHandler {
|
|
|
14
16
|
export type PostPlayerModel = IPostModel & {
|
|
15
17
|
analyticsOrganizationId: string | null;
|
|
16
18
|
};
|
|
17
|
-
export type
|
|
18
|
-
dataProvider:
|
|
19
|
+
export type PostsPlayerProps = {
|
|
20
|
+
dataProvider: {
|
|
21
|
+
type: 'buffer';
|
|
22
|
+
buffer: IPlayerBuffer<PostPlayerModel>;
|
|
23
|
+
} | {
|
|
24
|
+
type: 'provider';
|
|
25
|
+
provider: IPlayerDataProvider<PostPlayerModel>;
|
|
26
|
+
};
|
|
19
27
|
socialInteractionsHandler?: IPostSocialInteractionsHandler;
|
|
20
28
|
analyticsHandler?: IPostAnalyticsHandler;
|
|
21
29
|
playerSettings?: PostPlayerSettings;
|
|
30
|
+
closeOrchestrator: ICloseOrchestrator;
|
|
22
31
|
on?: {
|
|
23
|
-
playerClosed?: () => void;
|
|
24
32
|
postActivated?: (id: string) => void;
|
|
33
|
+
backgroundImageLoaded?: (imageUrl: string | null) => void;
|
|
25
34
|
};
|
|
26
35
|
};
|
|
27
|
-
export type PostPlayerSettings =
|
|
36
|
+
export type PostPlayerSettings = {
|
|
37
|
+
locale?: Locale;
|
|
38
|
+
showStreamsCloudWatermark?: boolean;
|
|
39
|
+
playerColors?: PlayerColors;
|
|
40
|
+
};
|
|
@@ -4,7 +4,7 @@ import { Image } from '../../ui/image';
|
|
|
4
4
|
import { LineClamp } from '../../ui/line-clamp';
|
|
5
5
|
import { ProportionalContainer } from '../../ui/proportional-container';
|
|
6
6
|
import { ProductCardLocalization } from './product-card-localization';
|
|
7
|
-
let { product, includeBeforeNowPrefix, trackingParams, inert = false, locale
|
|
7
|
+
let { product, colors, includeBeforeNowPrefix, trackingParams, inert = false, locale, on } = $props();
|
|
8
8
|
const localization = $derived(new ProductCardLocalization(locale));
|
|
9
9
|
const shortDescriptionPresented = $derived(product.shortDescription && product.shortDescription.length > 0);
|
|
10
10
|
const trackImpression = (node) => {
|
|
@@ -37,21 +37,34 @@ const onProductClicked = (event) => {
|
|
|
37
37
|
window.open(enrichedLink, '_blank', 'noopener noreferrer');
|
|
38
38
|
}
|
|
39
39
|
};
|
|
40
|
+
const styles = $derived.by(() => {
|
|
41
|
+
const values = [];
|
|
42
|
+
if (colors === null || colors === void 0 ? void 0 : colors.background) {
|
|
43
|
+
values.push(`--product-card--background-color: ${colors.background}`);
|
|
44
|
+
}
|
|
45
|
+
if (colors === null || colors === void 0 ? void 0 : colors.price) {
|
|
46
|
+
values.push(`--product-card--price-color: ${colors.price}`);
|
|
47
|
+
}
|
|
48
|
+
if (colors === null || colors === void 0 ? void 0 : colors.salePrice) {
|
|
49
|
+
values.push(`--product-card--sale-price-color: ${colors.salePrice}`);
|
|
50
|
+
}
|
|
51
|
+
return values.join(';');
|
|
52
|
+
});
|
|
40
53
|
</script>
|
|
41
54
|
|
|
42
|
-
<div class="product-card" inert={inert} use:trackImpression>
|
|
55
|
+
<div class="product-card" inert={inert} use:trackImpression style={styles}>
|
|
43
56
|
<ProportionalContainer ratio={1}>
|
|
44
57
|
<Image src={product.image} />
|
|
45
58
|
</ProportionalContainer>
|
|
46
59
|
|
|
47
60
|
<div class="product-card__info">
|
|
48
|
-
<LineClamp maxLines={1}>
|
|
61
|
+
<LineClamp maxLines={1} locale={locale}>
|
|
49
62
|
<div class="product-card__brand">{product.brandName}</div>
|
|
50
63
|
</LineClamp>
|
|
51
|
-
<LineClamp
|
|
64
|
+
<LineClamp maxLines={shortDescriptionPresented ? 1 : 2} locale={locale}>
|
|
52
65
|
<div class="product-card__title" class:two-lines={!shortDescriptionPresented}>{product.title}</div>
|
|
53
66
|
</LineClamp>
|
|
54
|
-
<LineClamp
|
|
67
|
+
<LineClamp maxLines={2} locale={locale}>
|
|
55
68
|
<div class="product-card__description" class:two-lines={shortDescriptionPresented}>{product.shortDescription}</div>
|
|
56
69
|
</LineClamp>
|
|
57
70
|
<div class="product-price">
|
|
@@ -63,7 +76,7 @@ const onProductClicked = (event) => {
|
|
|
63
76
|
{toPriceRepresentation({ amount: product.price, currency: product.currency })}
|
|
64
77
|
{/if}
|
|
65
78
|
</div>
|
|
66
|
-
<div class="product-price__price product-price__price--sale
|
|
79
|
+
<div class="product-price__price" class:product-price__price--sale={product.salePrice}>
|
|
67
80
|
{toPriceRepresentation({ amount: product.salePrice ?? product.price, currency: product.currency })}
|
|
68
81
|
</div>
|
|
69
82
|
</div>
|
|
@@ -90,8 +103,14 @@ const onProductClicked = (event) => {
|
|
|
90
103
|
.product-card {
|
|
91
104
|
--_product-card--aspect-ratio: var(--product-card--aspect-ratio, 10/16);
|
|
92
105
|
--_product-card--border-radius: var(--product-card--border-radius, 0.5rem);
|
|
106
|
+
--_product-card--background-color: var(--product-card--background-color, rgb(from #ffffff r g b/90%));
|
|
107
|
+
--_product-card--border-color: var(--product-card--background-color, #f2f2f3);
|
|
108
|
+
--_product-card--price-color: var(--product-card--price-color, inherit);
|
|
109
|
+
--_product-card--sale-price-color: var(--product-card--sale-price-color, inherit);
|
|
110
|
+
--product-price-color: var(--_product-card--price-color);
|
|
111
|
+
--product-price--sale--color: var(--_product-card--sale-price-color);
|
|
93
112
|
--image--border-radius: 0.25rem;
|
|
94
|
-
--image--object-fit:
|
|
113
|
+
--image--object-fit: cover;
|
|
95
114
|
--image--width: auto;
|
|
96
115
|
--image--height: auto;
|
|
97
116
|
width: 100%;
|
|
@@ -102,17 +121,17 @@ const onProductClicked = (event) => {
|
|
|
102
121
|
container-type: inline-size;
|
|
103
122
|
aspect-ratio: var(--_product-card--aspect-ratio);
|
|
104
123
|
color: #000000;
|
|
105
|
-
background-color:
|
|
106
|
-
border: 1px solid
|
|
124
|
+
background-color: var(--_product-card--background-color);
|
|
125
|
+
border: 1px solid var(--_product-card--border-color);
|
|
107
126
|
border-radius: var(--_product-card--border-radius);
|
|
108
127
|
padding: 0.75rem 0.75rem 1.125rem;
|
|
109
128
|
justify-content: space-between;
|
|
110
129
|
/* Set 'container-type: inline-size;' to reference container*/
|
|
111
130
|
}
|
|
112
131
|
:global([data-theme="dark"]) .product-card {
|
|
113
|
-
background-color:
|
|
132
|
+
--_product-card--background-color: var(--product-card--background-color, rgb(from #121212 r g b/90%));
|
|
133
|
+
--_product-card--border-color: var(--product-card--background-color, #1e1e1e);
|
|
114
134
|
color: #ffffff;
|
|
115
|
-
border-color: #1e1e1e;
|
|
116
135
|
}
|
|
117
136
|
@container (width < 230px) {
|
|
118
137
|
.product-card {
|
|
@@ -196,19 +215,18 @@ const onProductClicked = (event) => {
|
|
|
196
215
|
}
|
|
197
216
|
|
|
198
217
|
.product-price {
|
|
199
|
-
--_product-price--
|
|
218
|
+
--_product-price--color: var(--product-price-color);
|
|
219
|
+
--_product-price--sale--color: var(--product-price--sale--color);
|
|
200
220
|
--_product-price--before--color: #6b7280;
|
|
201
221
|
--_product-price--before--font-size: 0.75em;
|
|
202
|
-
--_product-price--color: inherit;
|
|
203
222
|
--_product-price--font-size: 1.875em;
|
|
204
223
|
--_product-price--gap: 0.375em;
|
|
205
|
-
--_product-price--
|
|
224
|
+
--_product-price--align: right;
|
|
206
225
|
width: 100%;
|
|
207
226
|
display: flex;
|
|
208
227
|
flex-direction: column;
|
|
209
228
|
justify-items: end;
|
|
210
229
|
gap: var(--_product-price--gap);
|
|
211
|
-
min-height: var(--_product-price--min-height);
|
|
212
230
|
/* Set 'container-type: inline-size;' to reference container*/
|
|
213
231
|
}
|
|
214
232
|
@container (width < 230px) {
|
|
@@ -218,6 +236,9 @@ const onProductClicked = (event) => {
|
|
|
218
236
|
--_product-price--gap: 0.25rem;
|
|
219
237
|
}
|
|
220
238
|
}
|
|
239
|
+
:global([data-theme="dark"]) .product-price {
|
|
240
|
+
--_product-price--before--color: #d1d5db;
|
|
241
|
+
}
|
|
221
242
|
.product-price__before-price {
|
|
222
243
|
width: 100%;
|
|
223
244
|
color: var(--_product-price--before--color);
|
|
@@ -243,4 +264,7 @@ const onProductClicked = (event) => {
|
|
|
243
264
|
width: 100%;
|
|
244
265
|
white-space: nowrap;
|
|
245
266
|
overflow: hidden;
|
|
267
|
+
}
|
|
268
|
+
.product-price__price--sale {
|
|
269
|
+
color: var(--_product-price--sale--color);
|
|
246
270
|
}</style>
|
|
@@ -3,7 +3,12 @@ import { type TrackingParams } from '../../marketing-tracking';
|
|
|
3
3
|
import type { ProductCardModel } from './types';
|
|
4
4
|
type Props = {
|
|
5
5
|
product: ProductCardModel;
|
|
6
|
-
|
|
6
|
+
colors: {
|
|
7
|
+
background?: string | null;
|
|
8
|
+
price?: string | null;
|
|
9
|
+
salePrice?: string | null;
|
|
10
|
+
};
|
|
11
|
+
locale: Locale;
|
|
7
12
|
includeBeforeNowPrefix?: boolean;
|
|
8
13
|
inert?: boolean;
|
|
9
14
|
trackingParams: TrackingParams;
|