@streamscloud/embeddable 8.3.0 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/media-center/config/internal-media-center-analytics-handler.d.ts +3 -2
  2. package/dist/media-center/config/internal-media-center-analytics-handler.js +1 -0
  3. package/dist/media-center/config/internal-media-center-config.d.ts +1 -1
  4. package/dist/media-center/config/internal-media-center-config.js +11 -11
  5. package/dist/media-center/config/operations.generated.d.ts +4 -4
  6. package/dist/media-center/config/operations.generated.js +5 -8
  7. package/dist/media-center/config/operations.graphql +3 -3
  8. package/dist/media-center/config/types.d.ts +7 -5
  9. package/dist/media-center/config/types.js +1 -1
  10. package/dist/media-center/media-center/cmp.media-center.svelte +74 -17
  11. package/dist/media-center/media-center/cmp.media-center.svelte.d.ts +3 -3
  12. package/dist/media-center/media-center/discover-panel-handler.svelte.d.ts +3 -2
  13. package/dist/media-center/media-center/discover-panel-handler.svelte.js +2 -1
  14. package/dist/media-center/media-center/discover-panel.svelte.d.ts +2 -2
  15. package/dist/media-center/media-center/post-player-provider-generator.d.ts +8 -0
  16. package/dist/media-center/media-center/{short-video-resources-generator.js → post-player-provider-generator.js} +8 -3
  17. package/dist/media-center/media-center/types.d.ts +1 -1
  18. package/dist/posts/handlers/index.d.ts +1 -0
  19. package/dist/posts/handlers/index.js +1 -0
  20. package/dist/{short-videos/short-videos-player/internal-short-video-analytics-handler.d.ts → posts/handlers/internal-post-analytics-handler.d.ts} +3 -2
  21. package/dist/{short-videos/short-videos-player/internal-short-video-analytics-handler.js → posts/handlers/internal-post-analytics-handler.js} +2 -1
  22. package/dist/{short-videos/short-videos-player/cmp.short-videos-player.svelte → posts/posts-player/cmp.posts-player.svelte} +3 -3
  23. package/dist/posts/posts-player/cmp.posts-player.svelte.d.ts +4 -0
  24. package/dist/posts/posts-player/index.d.ts +31 -17
  25. package/dist/posts/posts-player/index.js +48 -31
  26. package/dist/posts/posts-player/mapper.d.ts +3 -0
  27. package/dist/{short-videos/short-videos-player → posts/posts-player}/mapper.js +2 -2
  28. package/dist/posts/posts-player/operations.generated.d.ts +80 -0
  29. package/dist/posts/posts-player/operations.generated.js +229 -0
  30. package/dist/posts/posts-player/operations.graphql +7 -0
  31. package/dist/posts/posts-player/posts-player-view.svelte +38 -4
  32. package/dist/posts/posts-player/posts-player-view.svelte.d.ts +5 -1
  33. package/dist/posts/posts-player/types.d.ts +7 -1
  34. package/dist/short-videos/data-providers/index.d.ts +1 -0
  35. package/dist/short-videos/data-providers/index.js +1 -0
  36. package/dist/short-videos/{short-videos-player/internal-short-video-player-provider.d.ts → data-providers/internal-short-video-player-items-provider.d.ts} +4 -4
  37. package/dist/short-videos/{short-videos-player/internal-short-video-player-provider.js → data-providers/internal-short-video-player-items-provider.js} +3 -3
  38. package/dist/short-videos/{short-videos-player → data-providers}/operations.generated.d.ts +0 -78
  39. package/dist/short-videos/{short-videos-player → data-providers}/operations.generated.js +2 -234
  40. package/dist/short-videos/{short-videos-player → data-providers}/operations.graphql +1 -9
  41. package/dist/short-videos/short-videos-player/index.d.ts +13 -62
  42. package/dist/short-videos/short-videos-player/index.js +76 -30
  43. package/dist/ui/player-slider/player-buffer.svelte.d.ts +1 -0
  44. package/dist/ui/swipe-indicator/cmp.swipe-indicator.svelte +7 -8
  45. package/package.json +1 -1
  46. package/dist/media-center/media-center/short-video-resources-generator.d.ts +0 -8
  47. package/dist/short-videos/short-videos-player/cmp.short-videos-player.svelte.d.ts +0 -4
  48. package/dist/short-videos/short-videos-player/mapper.d.ts +0 -3
  49. package/dist/short-videos/short-videos-player/short-videos-player-view.svelte +0 -82
  50. package/dist/short-videos/short-videos-player/short-videos-player-view.svelte.d.ts +0 -8
  51. package/dist/short-videos/short-videos-player/types.d.ts +0 -26
  52. package/dist/short-videos/short-videos-player/types.js +0 -1
@@ -1,46 +1,93 @@
1
- import { toastrWarning } from '../../core/toastr';
2
1
  import { InternalMediaCenterConfig } from '../../media-center/config/internal-media-center-config';
3
2
  import {} from '../../media-center/config/types';
4
3
  import { MediaCenter } from '../../media-center/media-center';
4
+ import { InternalPostAnalyticsHandler } from '../../posts/handlers';
5
+ import { InternalShortVideoPlayerItemsProvider } from '../data-providers';
5
6
  import { ModalShadowHost } from '../../ui/shadow-dom';
6
- import { default as ShortVideosPlayer } from './cmp.short-videos-player.svelte';
7
- import { InternalShortVideoAnalyticsHandler } from './internal-short-video-analytics-handler';
8
- import { InternalShortVideoPlayerProvider } from './internal-short-video-player-provider';
9
- import { mapToShortVideoPlayerModel } from './mapper';
10
7
  import { mount, unmount } from 'svelte';
11
- export { ShortVideosPlayer };
12
- export { mapToShortVideoPlayerModel };
8
+ /**
9
+ * Opens the short videos player modal.
10
+ *
11
+ * @param init Configuration options.
12
+ *
13
+ * IDs mode (overload 2)
14
+ * @param {string[]} init.ids
15
+ * List of short-video IDs to display.
16
+ * @param {string} init.initiator
17
+ * Identifier of the initiator (used for tracking/analytics and GraphQL).
18
+ * @param {string} [init.graphqlOrigin]
19
+ * Optional GraphQL origin (base URL). If omitted, the default origin is determined internally.
20
+ * @param {string} [init.initialId]
21
+ * ID of the video to open first (optional).
22
+ * @param {string} [init.mediaPageId]
23
+ * Optional media page ID used to construct an internal media-center config.
24
+ *
25
+ * Player settings
26
+ * @param {IPostSocialInteractionsHandler} [init.socialInteractionsHandler]
27
+ * Handler for social interactions (like, share, etc.).
28
+ * @param [init.playerSettings]
29
+ * Player UI and behavior settings.
30
+ *
31
+ * Fields of ContentPlayerSettings:
32
+ * - {boolean} [hideCloseButton]
33
+ * If true, hides the close button.
34
+ * - {Locale} [locale='en']
35
+ * Localization for the player UI. Supported values: 'en' | 'no'.
36
+ * If omitted, the default locale 'en' is used.
37
+ *
38
+ * Events
39
+ * @param {{ playerClosed?: () => void; videoActivated?: (id: string) => void }} [init.on]
40
+ * Optional event handlers.
41
+ * @param {() => void} [init.on.playerClosed]
42
+ * Called after the player is fully closed (after unmount and removal from the DOM).
43
+ * @param {(id: string) => void} [init.on.videoActivated]
44
+ * Called when a video becomes active (receives the video's id).
45
+ *
46
+ * @returns {void}
47
+ *
48
+ * @example <caption>IDs mode</caption>
49
+ * ```ts
50
+ * import { openShortVideosPlayer } from '@streamscloud/embeddable/short-videos-player';
51
+ *
52
+ * openShortVideosPlayer({
53
+ * ids: ['id1', 'id2', 'id3'],
54
+ * initiator: 'campaign-autumn',
55
+ * graphqlOrigin: 'https://graphql.example.com',
56
+ * initialId: 'id2',
57
+ * mediaPageId: 'media-page-123',
58
+ * playerSettings: {
59
+ * // Default locale is 'en'; set 'no' to switch to Norwegian:
60
+ * locale: 'no',
61
+ * disableBackground: false,
62
+ * hideCloseButton: false,
63
+ * showStreamsCloudWatermark: true,
64
+ * },
65
+ * on: {
66
+ * playerClosed: () => console.log('Player closed'),
67
+ * }
68
+ * });
69
+ * ```
70
+ */
13
71
  export function openShortVideosPlayer(init) {
14
- const { shortVideosProvider, ids, graphqlOrigin, initialId, initiator, socialInteractionsHandler, playerSettings, on } = init;
15
- let dataProvider = shortVideosProvider;
16
- if (!dataProvider && ids) {
17
- dataProvider = new InternalShortVideoPlayerProvider({ ids, graphqlOrigin, initialId, initiator });
18
- }
19
- if (!dataProvider) {
20
- toastrWarning('Data provider is not specified.');
21
- return;
22
- }
23
- let mediaCenterConfig = init.mediaCenterConfig;
24
- if (!mediaCenterConfig && init.mediaPageId) {
25
- mediaCenterConfig = new InternalMediaCenterConfig(init.mediaPageId, graphqlOrigin);
26
- }
27
- let analyticsHandler = init.analyticsHandler;
28
- if (!analyticsHandler && !init.shortVideosProvider) {
29
- // Only create internal analytics handler if using internal data provider
30
- analyticsHandler = new InternalShortVideoAnalyticsHandler(graphqlOrigin);
31
- }
72
+ const { ids, graphqlOrigin, initialId, initiator, playerSettings, on } = init;
73
+ const dataProvider = new InternalShortVideoPlayerItemsProvider({ ids, graphqlOrigin, initialId, initiator });
74
+ const mediaCenterConfig = init.mediaPageId ? new InternalMediaCenterConfig(init.mediaPageId, graphqlOrigin) : undefined;
75
+ const analyticsHandler = new InternalPostAnalyticsHandler(graphqlOrigin);
32
76
  const shadowHost = new ModalShadowHost();
33
77
  const mounted = mount(MediaCenter, {
34
78
  target: shadowHost.shadowRoot,
35
79
  props: {
36
80
  config: mediaCenterConfig || null,
37
81
  playerProps: {
38
- mode: 'short-videos',
82
+ mode: 'posts',
39
83
  props: {
40
84
  dataProvider,
41
- socialInteractionsHandler,
42
85
  analyticsHandler,
43
- playerSettings,
86
+ playerSettings: {
87
+ hideCloseButton: playerSettings?.hideCloseButton,
88
+ locale: playerSettings?.locale,
89
+ showStreamsCloudWatermark: true
90
+ },
44
91
  on: {
45
92
  playerClosed: async () => {
46
93
  await unmount(mounted);
@@ -48,8 +95,7 @@ export function openShortVideosPlayer(init) {
48
95
  if (on?.playerClosed) {
49
96
  on.playerClosed();
50
97
  }
51
- },
52
- videoActivated: on?.videoActivated
98
+ }
53
99
  }
54
100
  }
55
101
  }
@@ -27,5 +27,6 @@ export interface IPlayerItemsProvider<T> {
27
27
  startIndex: number;
28
28
  startMediaIndex?: number;
29
29
  };
30
+ prefetch?: () => Promise<void>;
30
31
  loadMore(): Promise<T[]>;
31
32
  }
@@ -27,8 +27,7 @@ const indicatorMounted = (_) => {
27
27
  </div>
28
28
  </div>
29
29
 
30
- <style>@charset "UTF-8";
31
- @keyframes fadeIn {
30
+ <style>@keyframes fadeIn {
32
31
  0% {
33
32
  opacity: 1;
34
33
  }
@@ -87,37 +86,37 @@ const indicatorMounted = (_) => {
87
86
  transform: translateY(0);
88
87
  }
89
88
  10% {
90
- transform: translateY(-24px); /* основной прыжок */
89
+ transform: translateY(-24px);
91
90
  }
92
91
  18% {
93
92
  transform: translateY(0);
94
93
  }
95
94
  26% {
96
- transform: translateY(-12px); /* первый малый отскок */
95
+ transform: translateY(-12px);
97
96
  }
98
97
  34% {
99
98
  transform: translateY(0);
100
99
  }
101
100
  41% {
102
- transform: translateY(-8px); /* второй малый отскок */
101
+ transform: translateY(-8px);
103
102
  }
104
103
  48% {
105
104
  transform: translateY(0);
106
105
  }
107
106
  54% {
108
- transform: translateY(-4px); /* третий малый отскок */
107
+ transform: translateY(-4px);
109
108
  }
110
109
  60% {
111
110
  transform: translateY(0);
112
111
  }
113
112
  65% {
114
- transform: translateY(-2px); /* почти затух */
113
+ transform: translateY(-2px);
115
114
  }
116
115
  70% {
117
116
  transform: translateY(0);
118
117
  }
119
118
  75% {
120
- transform: translateY(-1px); /* совсем маленький */
119
+ transform: translateY(-1px);
121
120
  }
122
121
  80% {
123
122
  transform: translateY(0);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@streamscloud/embeddable",
3
- "version": "8.3.0",
3
+ "version": "9.0.0",
4
4
  "author": "StreamsCloud",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1,8 +0,0 @@
1
- import type { ShortVideoPlayerModel } from '../../short-videos/short-videos-player';
2
- import type { IPlayerItemsProvider } from '../../ui/player-slider';
3
- import type { IMediaCenterConfig } from '../config/types';
4
- export declare const makeShortVideosProvider: (data: {
5
- config: IMediaCenterConfig;
6
- categoryId?: string;
7
- prefetchedItems?: ShortVideoPlayerModel[];
8
- }) => IPlayerItemsProvider<ShortVideoPlayerModel>;
@@ -1,4 +0,0 @@
1
- import type { ShortVideoPlayerProps } from './types';
2
- declare const Cmp: import("svelte").Component<ShortVideoPlayerProps, {}, "">;
3
- type Cmp = ReturnType<typeof Cmp>;
4
- export default Cmp;
@@ -1,3 +0,0 @@
1
- import type { GetShortVideosQuery } from './operations.generated';
2
- import type { ShortVideoPlayerModel } from './types';
3
- export declare const mapToShortVideoPlayerModel: (payload: GetShortVideosQuery["shortVideos"]["items"][0]) => ShortVideoPlayerModel;
@@ -1,82 +0,0 @@
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 { ContentPlayer, ContentPlayerConfig } from '../../content-player';
11
- import { ContentPlayerSettings } from '../../content-player/content-player-settings';
12
- import { preloadImage } from '../../core/image-preloader';
13
- import { getPostCoverImage } from '../../posts/model';
14
- import { PlayerBuffer } from '../../ui/player-slider';
15
- import { InternalShortVideoPlayerProvider } from './internal-short-video-player-provider';
16
- import { untrack } from 'svelte';
17
- let { dataProvider, socialInteractionsHandler, playerSettings, analyticsHandler, on, mediaCenterData } = $props();
18
- $effect(() => {
19
- void dataProvider;
20
- untrack(() => {
21
- contentPlayerConfig.playerBuffer = null;
22
- initBuffer(dataProvider);
23
- });
24
- });
25
- $effect(() => contentPlayerConfig.updateMediaCenterData(mediaCenterData));
26
- const initBuffer = (dataProvider) => __awaiter(void 0, void 0, void 0, function* () {
27
- if (dataProvider instanceof InternalShortVideoPlayerProvider) {
28
- yield dataProvider.prefetch();
29
- }
30
- new PlayerBuffer(dataProvider, {
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
- });
41
- const contentPlayerConfig = new ContentPlayerConfig({
42
- playerBuffer: null,
43
- mappers: {
44
- postModelFromCurrentItem: (item) => item
45
- },
46
- socialInteractionsHandler,
47
- mediaCenterData,
48
- settings: new ContentPlayerSettings(playerSettings),
49
- callbacks: {
50
- close: on === null || on === void 0 ? void 0 : on.playerClosed,
51
- productClick: (id, videoId) => {
52
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackShortVideoProductClick(id, videoId);
53
- },
54
- productImpression: (id, videoId) => {
55
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackShortVideoProductImpression(id, videoId);
56
- },
57
- adClick: (id) => {
58
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackAdClick(id);
59
- },
60
- adImpression: (id) => {
61
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackAdImpression(id);
62
- }
63
- },
64
- playerSliderCallbacks: {
65
- itemActivated: (id) => {
66
- var _a, _b;
67
- const shortVideo = (_a = contentPlayerConfig.playerBuffer) === null || _a === void 0 ? void 0 : _a.loaded.find((x) => x.id === id);
68
- if (!shortVideo) {
69
- return;
70
- }
71
- contentPlayerConfig.setBackgroundImageUrl(getPostCoverImage(shortVideo));
72
- if (shortVideo.analyticsOrganizationId) {
73
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.setOrganizationId(shortVideo.analyticsOrganizationId);
74
- }
75
- analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackShortVideoView(id);
76
- (_b = on === null || on === void 0 ? void 0 : on.videoActivated) === null || _b === void 0 ? void 0 : _b.call(on, id);
77
- }
78
- }
79
- });
80
- </script>
81
-
82
- <ContentPlayer config={contentPlayerConfig} />
@@ -1,8 +0,0 @@
1
- import type { MediaCenterData } from '../../media-center/model/types';
2
- import type { ShortVideoPlayerProps } from './types';
3
- type $$ComponentProps = ShortVideoPlayerProps & {
4
- mediaCenterData?: MediaCenterData;
5
- };
6
- declare const ShortVideosPlayerView: import("svelte").Component<$$ComponentProps, {}, "">;
7
- type ShortVideosPlayerView = ReturnType<typeof ShortVideosPlayerView>;
8
- export default ShortVideosPlayerView;
@@ -1,26 +0,0 @@
1
- import type { IContentPlayerSettingsInitializer } from '../../content-player/content-player-settings';
2
- import type { IPostModel } from '../../posts';
3
- import type { IPostSocialInteractionsHandler } from '../../posts/social-interactions';
4
- import type { IPlayerItemsProvider } from '../../ui/player-slider';
5
- export interface IShortVideoAnalyticsHandler {
6
- setOrganizationId: (organizationId: string) => void;
7
- trackShortVideoView: (videoId: string) => void;
8
- trackShortVideoProductImpression: (productId: string, videoId: string) => void;
9
- trackShortVideoProductClick: (productId: string, videoId: string) => void;
10
- trackAdClick: (adId: string) => void;
11
- trackAdImpression: (adId: string) => void;
12
- }
13
- export type ShortVideoPlayerModel = IPostModel & {
14
- analyticsOrganizationId: string | null;
15
- };
16
- export type ShortVideoPlayerProps = {
17
- dataProvider: IPlayerItemsProvider<ShortVideoPlayerModel>;
18
- socialInteractionsHandler?: IPostSocialInteractionsHandler;
19
- analyticsHandler?: IShortVideoAnalyticsHandler;
20
- playerSettings?: ShortVideoPlayerSettings;
21
- on?: {
22
- playerClosed?: () => void;
23
- videoActivated?: (id: string) => void;
24
- };
25
- };
26
- export type ShortVideoPlayerSettings = Pick<IContentPlayerSettingsInitializer, 'disableBackground' | 'hideCloseButton' | 'locale' | 'showStreamsCloudWatermark'>;
@@ -1 +0,0 @@
1
- export {};