@streamscloud/embeddable 16.0.5 → 16.0.7-1772032308956

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 (109) hide show
  1. package/dist/ads/ad-card/types.d.ts +1 -1
  2. package/dist/ads/ad-card/types.js +1 -1
  3. package/dist/articles/article/article-layout.svelte +32 -0
  4. package/dist/articles/article/article-layout.svelte.d.ts +9 -0
  5. package/dist/articles/article/article-section.svelte +52 -0
  6. package/dist/articles/article/article-section.svelte.d.ts +9 -0
  7. package/dist/articles/article/cmp.article.svelte +31 -0
  8. package/dist/articles/article/cmp.article.svelte.d.ts +8 -0
  9. package/dist/articles/article/facts-container.svelte +27 -0
  10. package/dist/articles/article/facts-container.svelte.d.ts +7 -0
  11. package/dist/articles/article/fields/alt-text.svelte +15 -0
  12. package/dist/articles/article/fields/alt-text.svelte.d.ts +6 -0
  13. package/dist/articles/article/fields/article-field.svelte +45 -0
  14. package/dist/articles/article/fields/article-field.svelte.d.ts +8 -0
  15. package/dist/articles/article/fields/byline-field.svelte +23 -0
  16. package/dist/articles/article/fields/byline-field.svelte.d.ts +8 -0
  17. package/dist/articles/article/fields/image-field.svelte +8 -0
  18. package/dist/articles/article/fields/image-field.svelte.d.ts +7 -0
  19. package/dist/articles/article/fields/media-field.svelte +8 -0
  20. package/dist/articles/article/fields/media-field.svelte.d.ts +7 -0
  21. package/dist/articles/article/fields/media-gallery-field.svelte +8 -0
  22. package/dist/articles/article/fields/media-gallery-field.svelte.d.ts +7 -0
  23. package/dist/articles/article/fields/rich-text-field.svelte +19 -0
  24. package/dist/articles/article/fields/rich-text-field.svelte.d.ts +7 -0
  25. package/dist/articles/article/fields/text-field.svelte +24 -0
  26. package/dist/articles/article/fields/text-field.svelte.d.ts +7 -0
  27. package/dist/articles/article/fields/types.d.ts +62 -0
  28. package/dist/articles/article/fields/types.js +1 -0
  29. package/dist/articles/article/fields/video-field.svelte +8 -0
  30. package/dist/articles/article/fields/video-field.svelte.d.ts +7 -0
  31. package/dist/articles/article/helpers.d.ts +5 -0
  32. package/dist/articles/article/helpers.js +27 -0
  33. package/dist/articles/article/index.d.ts +4 -0
  34. package/dist/articles/article/index.js +2 -0
  35. package/dist/articles/article/styles-transformer.d.ts +19 -0
  36. package/dist/articles/article/styles-transformer.js +36 -0
  37. package/dist/articles/article/types.d.ts +27 -0
  38. package/dist/articles/article/types.js +1 -0
  39. package/dist/articles/article-viewer/article-viewer-host-settings.svelte.d.ts +14 -0
  40. package/dist/articles/article-viewer/article-viewer-host-settings.svelte.js +11 -0
  41. package/dist/articles/article-viewer/article-viewer-proxy.svelte +9 -0
  42. package/dist/articles/article-viewer/article-viewer-proxy.svelte.d.ts +10 -0
  43. package/dist/articles/article-viewer/article-viewer-view.svelte +85 -0
  44. package/dist/articles/article-viewer/article-viewer-view.svelte.d.ts +9 -0
  45. package/dist/articles/article-viewer/cmp.article-viewer.svelte +34 -0
  46. package/dist/articles/article-viewer/cmp.article-viewer.svelte.d.ts +12 -0
  47. package/dist/articles/article-viewer/index.d.ts +43 -0
  48. package/dist/articles/article-viewer/index.js +60 -0
  49. package/dist/articles/article-viewer/types.d.ts +12 -0
  50. package/dist/articles/article-viewer/types.js +1 -0
  51. package/dist/core/enums.d.ts +15 -50
  52. package/dist/core/enums.js +1 -61
  53. package/dist/core/media/media-item-url.service.d.ts +1 -1
  54. package/dist/core/media/media-item-url.service.js +1 -3
  55. package/dist/external-api/data-providers/internal-media-center-data-provider.svelte.js +2 -3
  56. package/dist/external-api/data-providers/internal-short-video-player-items-provider.d.ts +1 -1
  57. package/dist/external-api/data-providers/internal-short-video-player-items-provider.js +1 -3
  58. package/dist/external-api/data-providers/mapper.d.ts +1 -1
  59. package/dist/external-api/data-providers/mapper.js +5 -6
  60. package/dist/external-api/data-providers/mocks/mock-content-management-handler.svelte.js +2 -3
  61. package/dist/external-api/data-providers/post-data-loaders/posts-loader.d.ts +1 -1
  62. package/dist/external-api/data-providers/post-data-loaders/posts-loader.js +0 -1
  63. package/dist/external-api/data-providers/stream-data-loaders/mapper.js +1 -2
  64. package/dist/external-api/data-providers/stream-data-loaders/stream-pages-loader.d.ts +1 -1
  65. package/dist/external-api/data-providers/stream-data-loaders/stream-pages-loader.js +1 -2
  66. package/dist/external-api/data-providers/stream-data-loaders/streams-loader.d.ts +1 -1
  67. package/dist/external-api/data-providers/stream-data-loaders/streams-loader.js +1 -2
  68. package/dist/media-center/config/types.d.ts +1 -1
  69. package/dist/media-center/config/types.js +1 -1
  70. package/dist/media-center/media-center/discover/data-loading.js +1 -2
  71. package/dist/media-center/media-center/discover/discover-view-handler.svelte.js +1 -2
  72. package/dist/media-center/media-center/moments/moments-feed-handler.svelte.d.ts +1 -1
  73. package/dist/media-center/media-center/moments/moments-feed-handler.svelte.js +2 -3
  74. package/dist/media-center/media-center/moments/moments-state.svelte.d.ts +1 -1
  75. package/dist/media-center/media-center/moments/moments-state.svelte.js +1 -3
  76. package/dist/media-center/media-center/posts-feed/feed-providers-generator.js +1 -2
  77. package/dist/media-center/media-center/posts-feed/posts-feed-handler.svelte.d.ts +1 -1
  78. package/dist/media-center/media-center/posts-feed/posts-feed-handler.svelte.js +1 -2
  79. package/dist/media-page/cmp.media-page.svelte +1 -1
  80. package/dist/posts/attachments/cmp.attachments.svelte +2 -3
  81. package/dist/posts/model/post-model.d.ts +1 -1
  82. package/dist/posts/model/post-model.js +0 -1
  83. package/dist/posts/post-viewer/attachments-horizontal.svelte +1 -2
  84. package/dist/posts/post-viewer/cmp.post-viewer.svelte +2 -3
  85. package/dist/posts/post-viewer/mapper.js +6 -7
  86. package/dist/posts/posts-player/cmp.posts-player.svelte +7 -2
  87. package/dist/posts/posts-player/posts-player-host-settings.svelte.d.ts +20 -0
  88. package/dist/posts/posts-player/posts-player-host-settings.svelte.js +15 -0
  89. package/dist/posts/posts-player/posts-player-view.svelte +6 -7
  90. package/dist/products/price-helper.d.ts +1 -1
  91. package/dist/products/price-helper.js +3 -4
  92. package/dist/streams/layout/cmp.slot-content.svelte +1 -5
  93. package/dist/streams/layout/models/mapper.d.ts +1 -1
  94. package/dist/streams/layout/models/mapper.js +2 -6
  95. package/dist/streams/layout/models/stream-layout-media-item-model.d.ts +1 -1
  96. package/dist/streams/layout/models/stream-layout-media-item-model.js +1 -1
  97. package/dist/streams/layout/models/stream-layout-short-video-model.d.ts +1 -1
  98. package/dist/streams/layout/models/stream-layout-short-video-model.js +1 -1
  99. package/dist/streams/streams-player/cmp.streams-player.svelte +7 -2
  100. package/dist/streams/streams-player/streams-player-host-settings.svelte.d.ts +20 -0
  101. package/dist/streams/streams-player/streams-player-host-settings.svelte.js +15 -0
  102. package/dist/ui/media-item-view/cmp.media-item-view.svelte +3 -4
  103. package/dist/ui/media-item-view/cmp.media-item-view.svelte.d.ts +1 -1
  104. package/dist/ui/media-items-gallery/cmp.media-items-gallery.svelte +5 -6
  105. package/dist/ui/media-items-gallery/cmp.media-items-gallery.svelte.d.ts +1 -1
  106. package/dist/ui/shadow-dom/cmp.shadow-root.svelte +5 -0
  107. package/dist/ui/shadow-dom/colors.scss +2 -0
  108. package/dist/ui/shadow-dom/shadow-root-service.js +0 -7
  109. package/package.json +12 -3
@@ -1,4 +1,3 @@
1
- import { PostType } from '../../..';
2
1
  import { StreamsInCategory, ShortVideosInCategory } from './types.svelte';
3
2
  export class DiscoverDataLoader {
4
3
  dataProvider;
@@ -30,7 +29,7 @@ export class DiscoverDataLoader {
30
29
  const shortVideosResponse = await this.dataProvider.postsPlayer.getPostsCursor({
31
30
  filter: {
32
31
  categoryId: holder.categoryId,
33
- types: [PostType.ShortVideo]
32
+ types: ['SHORT_VIDEO']
34
33
  },
35
34
  limit: this.minItemsPerLoad,
36
35
  continuationToken: holder.continuationToken
@@ -1,4 +1,3 @@
1
- import { PostType } from '../../../core/enums';
2
1
  import { DiscoverDataLoader } from './data-loading';
3
2
  import { ShortVideosInCategory, StreamsInCategory } from './types.svelte';
4
3
  import { Deferred } from '@streamscloud/kit/core';
@@ -113,7 +112,7 @@ export class DiscoverViewHandler {
113
112
  this._shortVideosLoadingDeferred = null;
114
113
  };
115
114
  onPostCreated = (data) => {
116
- if (!data.isPublished || data.post.postType !== PostType.ShortVideo) {
115
+ if (!data.isPublished || data.post.postType !== 'SHORT_VIDEO') {
117
116
  return;
118
117
  }
119
118
  const affectedHolders = this._shortVideosInCategoryCache.filter((x) => data.categories.includes(x.categoryId) && x.continuationToken !== undefined);
@@ -4,7 +4,7 @@ import type { PostPlayerModel, PostsPlayerProps, PostManagementActions } from '.
4
4
  import type { ICloseOrchestrator } from '../../../ui/player/close-orchestrator';
5
5
  import { MomentsState } from './moments-state.svelte';
6
6
  import { MediaCenterContentHandler, MediaCenterSettingsHandler } from '../handlers';
7
- import { type IPlayerBuffer } from '@streamscloud/kit/ui/player/providers';
7
+ import type { IPlayerBuffer } from '@streamscloud/kit/ui/player/providers';
8
8
  export declare class MomentsFeedHandler {
9
9
  momentsState: MomentsState;
10
10
  private _active;
@@ -1,4 +1,3 @@
1
- import { PostType } from '../../../core/enums';
2
1
  import { MomentsState } from './moments-state.svelte';
3
2
  import { MediaCenterContentHandler, MediaCenterSettingsHandler } from '../handlers';
4
3
  import { initBufferFromProvider } from '@streamscloud/kit/ui/player/providers';
@@ -79,7 +78,7 @@ export class MomentsFeedHandler {
79
78
  this._active = true;
80
79
  };
81
80
  onPostCreated = (data) => {
82
- if (!this._active || !data.isPublished || data.post.postType !== PostType.Moment) {
81
+ if (!this._active || !data.isPublished || data.post.postType !== 'MOMENT') {
83
82
  return;
84
83
  }
85
84
  // Reactivate to include the new moment
@@ -89,7 +88,7 @@ export class MomentsFeedHandler {
89
88
  if (!this._active) {
90
89
  return false;
91
90
  }
92
- const postStillInTheFeed = data.isPublished && data.post.postType === PostType.Moment;
91
+ const postStillInTheFeed = data.isPublished && data.post.postType === 'MOMENT';
93
92
  if (postStillInTheFeed) {
94
93
  this.activate({ initialMomentId: data.post.id });
95
94
  }
@@ -1,5 +1,5 @@
1
1
  import type { IMediaCenterDataProvider } from '../..';
2
- import { type PostPlayerModel } from '../../../posts/posts-player';
2
+ import type { PostPlayerModel } from '../../../posts/posts-player';
3
3
  import type { IChunksPlayerDataProvider } from '@streamscloud/kit/ui/player/providers';
4
4
  export declare class MomentsState {
5
5
  private readonly dataProvider;
@@ -1,5 +1,3 @@
1
- import { PostType } from '../../../core/enums';
2
- import {} from '../../../posts/posts-player';
3
1
  import { SvelteMap } from 'svelte/reactivity';
4
2
  export class MomentsState {
5
3
  dataProvider;
@@ -85,7 +83,7 @@ export class MomentsState {
85
83
  }
86
84
  const moments = await this.dataProvider.postsPlayer.getPostsCursor({
87
85
  filter: {
88
- types: [PostType.Moment],
86
+ types: ['MOMENT'],
89
87
  ids: momentsInChunk
90
88
  },
91
89
  limit: collectionCapacity
@@ -1,7 +1,6 @@
1
- import { PostType } from '../../../core/enums';
2
1
  import { ContinuationToken } from '@streamscloud/kit/core';
3
2
  import { CursorDataLoader } from '@streamscloud/kit/core/data-loaders';
4
- const SUPPORTED_POST_TYPES = [PostType.Article, PostType.Media, PostType.ShortVideo, PostType.Video];
3
+ const SUPPORTED_POST_TYPES = ['ARTICLE', 'MEDIA', 'SHORT_VIDEO', 'VIDEO'];
5
4
  export class FeedProvidersGenerator {
6
5
  dataProvider;
7
6
  constructor(dataProvider) {
@@ -4,7 +4,7 @@ import type { PostManagementActions, PostPlayerModel, PostsPlayerProps } from '.
4
4
  import type { ICloseOrchestrator } from '../../../ui/player/close-orchestrator';
5
5
  import { MediaCenterContentHandler, MediaCenterSettingsHandler } from '../handlers';
6
6
  import type { PostsFeedFilter, PostsFeedProviderInit } from './types';
7
- import { type IPlayerBuffer, type IPlayerDataProvider } from '@streamscloud/kit/ui/player/providers';
7
+ import type { IPlayerBuffer, IPlayerDataProvider } from '@streamscloud/kit/ui/player/providers';
8
8
  export declare class PostsFeedHandler {
9
9
  private _state;
10
10
  private _providersGenerator;
@@ -1,4 +1,3 @@
1
- import { PostType } from '../../..';
2
1
  import { MediaCenterContentHandler, MediaCenterSettingsHandler } from '../handlers';
3
2
  import { FeedProvidersGenerator } from './feed-providers-generator';
4
3
  import { Utils } from '@streamscloud/kit/core/utils';
@@ -154,7 +153,7 @@ export class PostsFeedHandler {
154
153
  // Unpublished posts never affect the feed
155
154
  return false;
156
155
  }
157
- if (post.postType === PostType.Moment) {
156
+ if (post.postType === 'MOMENT') {
158
157
  // Moments are processed separately
159
158
  return false;
160
159
  }
@@ -33,4 +33,4 @@ const initHost = (node) => {
33
33
  };
34
34
  </script>
35
35
 
36
- <div class="streams-player-host" use:initHost></div>
36
+ <div class="media-page-host" use:initHost></div>
@@ -1,5 +1,4 @@
1
- <script lang="ts">import { PostType } from '../..';
2
- import { AdCard } from '../../ads/ad-card';
1
+ <script lang="ts">import { AdCard } from '../../ads/ad-card';
3
2
  import { PostModel } from '../model';
4
3
  import { ProductCard } from '../../products/product-card';
5
4
  let { model, trackingParams: externalTrackingParams, on } = $props();
@@ -7,7 +6,7 @@ const trackingParams = $derived.by(() => {
7
6
  if (externalTrackingParams || externalTrackingParams === false) {
8
7
  return externalTrackingParams;
9
8
  }
10
- if (model.postType === PostType.ShortVideo) {
9
+ if (model.postType === 'SHORT_VIDEO') {
11
10
  return { shortVideoId: model.id };
12
11
  }
13
12
  return false;
@@ -1,4 +1,4 @@
1
- import { PostType } from '../../core/enums';
1
+ import type { PostType } from '../../core/enums';
2
2
  import { PostViewerMediaModel } from './post-media-model.svelte';
3
3
  import type { IPostModel, IPostAdCardModel, IPostHeadingModel, IPostProductCardModel } from './types';
4
4
  export declare class PostModel {
@@ -1,4 +1,3 @@
1
- import { PostType } from '../../core/enums';
2
1
  import { PostViewerMediaModel } from './post-media-model.svelte';
3
2
  export class PostModel {
4
3
  id;
@@ -1,5 +1,4 @@
1
- <script lang="ts">import { Currency } from '../../core/enums';
2
- import { enrichAdLinkWithTracking, enrichProductLinkWithTracking } from '../../marketing-tracking';
1
+ <script lang="ts">import { enrichAdLinkWithTracking, enrichProductLinkWithTracking } from '../../marketing-tracking';
3
2
  import { PostModel } from '../model';
4
3
  import { toPriceRepresentation } from '../../products/price-helper';
5
4
  import { PostViewerUiManager } from './ui-manager.svelte';
@@ -1,5 +1,4 @@
1
- <script lang="ts">import { PostType } from '../..';
2
- import { PostModel } from '../model';
1
+ <script lang="ts">import { PostModel } from '../model';
3
2
  import { default as AttachmentsHorizontal } from './attachments-horizontal.svelte';
4
3
  import { default as Heading } from './heading.svelte';
5
4
  import { default as PostMedia } from './media/post-media.svelte';
@@ -18,7 +17,7 @@ const trackingParams = $derived.by(() => {
18
17
  if (externalTrackingParams || externalTrackingParams === false) {
19
18
  return externalTrackingParams;
20
19
  }
21
- if (model.postType === PostType.ShortVideo) {
20
+ if (model.postType === 'SHORT_VIDEO') {
22
21
  return { shortVideoId: model.id };
23
22
  }
24
23
  return false;
@@ -1,4 +1,3 @@
1
- import { MediaType, PostType } from '../../core/enums';
2
1
  import { getMediaItemImageUrl } from '../../core/media';
3
2
  import { shouldUseSalePrice } from '../../products/price-helper';
4
3
  export const mapToPostModel = (payload) => {
@@ -29,15 +28,15 @@ export const mapToPostModel = (payload) => {
29
28
  const mapToPostType = (payload) => {
30
29
  switch (true) {
31
30
  case !!payload.shortVideoData:
32
- return PostType.ShortVideo;
31
+ return 'SHORT_VIDEO';
33
32
  case !!payload.momentData:
34
- return PostType.Moment;
33
+ return 'MOMENT';
35
34
  case !!payload.articleData:
36
- return PostType.Article;
35
+ return 'ARTICLE';
37
36
  case !!payload.videoData:
38
- return PostType.Video;
37
+ return 'VIDEO';
39
38
  case !!payload.mediaData:
40
- return PostType.Media;
39
+ return 'MEDIA';
41
40
  default:
42
41
  return null;
43
42
  }
@@ -56,7 +55,7 @@ const extractPostText = (payload) => {
56
55
  };
57
56
  const mapToPostViewerMediaModel = (payload) => {
58
57
  return payload.media.map((i) => {
59
- return i.type === MediaType.Image
58
+ return i.type === 'IMAGE'
60
59
  ? { isImage: true, url: i.url }
61
60
  : {
62
61
  isImage: false,
@@ -1,8 +1,13 @@
1
1
  <script lang="ts">import { CloseOrchestrator } from '../../ui/player/close-orchestrator';
2
2
  import { createShadowRoot } from '../../ui/shadow-dom';
3
+ import { PostsPlayerHostSettings } from './posts-player-host-settings.svelte';
3
4
  import { default as PostsPlayerProxy } from './posts-player-proxy.svelte';
4
- import { mount, unmount } from 'svelte';
5
+ import { mount, unmount, untrack } from 'svelte';
5
6
  let { dataProvider, socialInteractionsHandler, sharingHandler, playerSettings, analyticsHandler, on } = $props();
7
+ const settingsHolder = untrack(() => new PostsPlayerHostSettings(playerSettings));
8
+ $effect(() => {
9
+ settingsHolder.update(playerSettings);
10
+ });
6
11
  const initHost = (node) => {
7
12
  const shadowRoot = createShadowRoot(node);
8
13
  const mounted = mount(PostsPlayerProxy, {
@@ -11,7 +16,7 @@ const initHost = (node) => {
11
16
  dataProvider,
12
17
  socialInteractionsHandler,
13
18
  sharingHandler,
14
- playerSettings,
19
+ playerSettings: settingsHolder,
15
20
  analyticsHandler,
16
21
  closeOrchestrator: new CloseOrchestrator({
17
22
  closeFn: async () => {
@@ -0,0 +1,20 @@
1
+ import type { ThemeValue } from '../../core/theme';
2
+ import type { AppLocaleValue } from '@streamscloud/kit/core/locale';
3
+ export declare class PostsPlayerHostSettings {
4
+ locale: AppLocaleValue | undefined;
5
+ showStreamsCloudWatermark: boolean | undefined;
6
+ disableBackground: boolean | undefined;
7
+ theme: ThemeValue | undefined;
8
+ constructor(init: {
9
+ locale?: AppLocaleValue;
10
+ showStreamsCloudWatermark?: boolean;
11
+ disableBackground?: boolean;
12
+ theme?: ThemeValue;
13
+ } | undefined);
14
+ update: (data: {
15
+ locale?: AppLocaleValue;
16
+ showStreamsCloudWatermark?: boolean;
17
+ disableBackground?: boolean;
18
+ theme?: ThemeValue;
19
+ } | undefined) => void;
20
+ }
@@ -0,0 +1,15 @@
1
+ export class PostsPlayerHostSettings {
2
+ locale = $state();
3
+ showStreamsCloudWatermark = $state();
4
+ disableBackground = $state();
5
+ theme = $state();
6
+ constructor(init) {
7
+ this.update(init);
8
+ }
9
+ update = (data) => {
10
+ this.locale = data?.locale;
11
+ this.showStreamsCloudWatermark = data?.showStreamsCloudWatermark;
12
+ this.disableBackground = data?.disableBackground;
13
+ this.theme = data?.theme;
14
+ };
15
+ }
@@ -1,5 +1,4 @@
1
- <script lang="ts">import { PostType } from '../../core/enums';
2
- import { PostAttachments } from '../attachments';
1
+ <script lang="ts">import { PostAttachments } from '../attachments';
3
2
  import { PostActionsGenerator } from '../controls';
4
3
  import { getPostCoverImage, PostModel } from '../model';
5
4
  import { PostViewer } from '../post-viewer';
@@ -57,7 +56,7 @@ const contentPlayerConfig = untrack(() => new PlayerConfig({
57
56
  if (on?.backgroundImageLoaded) {
58
57
  on.backgroundImageLoaded(getPostCoverImage(post));
59
58
  }
60
- if (post.postType === PostType.ShortVideo) {
59
+ if (post.postType === 'SHORT_VIDEO') {
61
60
  analyticsHandler?.trackShortVideoView(id);
62
61
  }
63
62
  else if (post.postType) {
@@ -73,12 +72,12 @@ const postActionsGenerator = untrack(() => new PostActionsGenerator({
73
72
  on: { attachmentClicked: () => (contentPlayerConfig.uiManager.attachmentsCollapsed = !contentPlayerConfig.uiManager.attachmentsCollapsed) }
74
73
  }));
75
74
  const onProductClick = (id, postId) => {
76
- if (getLoadedItemById(postId)?.postType === PostType.ShortVideo) {
75
+ if (getLoadedItemById(postId)?.postType === 'SHORT_VIDEO') {
77
76
  analyticsHandler?.trackShortVideoProductClick(id, postId);
78
77
  }
79
78
  };
80
79
  const onProductImpression = (id, postId) => {
81
- if (getLoadedItemById(postId)?.postType === PostType.ShortVideo) {
80
+ if (getLoadedItemById(postId)?.postType === 'SHORT_VIDEO') {
82
81
  analyticsHandler?.trackShortVideoProductImpression(id, postId);
83
82
  }
84
83
  };
@@ -104,7 +103,7 @@ const currentItemActions = $derived.by(() => {
104
103
  const postModel = itemAsPostModel(buffer.current);
105
104
  const handler = postActionsGenerator.getPostActionsHandler(postModel);
106
105
  result.push(...handler.actions);
107
- if (managementActions?.editPost && postModel.postType !== PostType.Article) {
106
+ if (managementActions?.editPost && postModel.postType !== 'ARTICLE') {
108
107
  result.push({
109
108
  icon: IconEdit,
110
109
  callback: async () => {
@@ -112,7 +111,7 @@ const currentItemActions = $derived.by(() => {
112
111
  }
113
112
  });
114
113
  }
115
- if (managementActions?.editArticle && postModel.postType === PostType.Article && buffer.current.articleId) {
114
+ if (managementActions?.editArticle && postModel.postType === 'ARTICLE' && buffer.current.articleId) {
116
115
  result.push({
117
116
  icon: IconEdit,
118
117
  callback: async () => {
@@ -1,4 +1,4 @@
1
- import { Currency } from '../core/enums';
1
+ import type { Currency } from '../core/enums';
2
2
  type CurrencyMode = 'none' | 'symbol' | 'code';
3
3
  export type PriceRepresentationOptions = {
4
4
  currencyMode?: CurrencyMode;
@@ -1,4 +1,3 @@
1
- import { Currency } from '../core/enums';
2
1
  import { Utils } from '@streamscloud/kit/core/utils';
3
2
  export const toPriceRepresentation = (data) => {
4
3
  const { amount, currency, options } = data;
@@ -52,9 +51,9 @@ export const toPriceRepresentation = (data) => {
52
51
  }
53
52
  };
54
53
  const currencyDefaults = {
55
- [Currency.Nok]: { symbol: 'kr', code: 'NOK', missingFractionPlaceholder: '-' },
56
- [Currency.Usd]: { symbol: '$', code: 'USD' },
57
- [Currency.Eur]: { symbol: '€', code: 'EUR' }
54
+ ['NOK']: { symbol: 'kr', code: 'NOK', missingFractionPlaceholder: '-' },
55
+ ['USD']: { symbol: '$', code: 'USD' },
56
+ ['EUR']: { symbol: '€', code: 'EUR' }
58
57
  };
59
58
  const getDecimalSeparator = (locale) => {
60
59
  const nf = new Intl.NumberFormat(locale);
@@ -93,11 +93,7 @@ const productLinkMounted = (node, productModel) => {
93
93
  {@render slotContent()}
94
94
  </a>
95
95
  {:else}
96
- <button
97
- type="button"
98
- class="stream-slot-content-product-link"
99
- onclick={handleProductClick}
100
- use:productLinkMounted={productModel}>
96
+ <button type="button" class="stream-slot-content-product-link" onclick={handleProductClick} use:productLinkMounted={productModel}>
101
97
  {@render slotContent()}
102
98
  </button>
103
99
  {/if}
@@ -1,3 +1,3 @@
1
- import { type IPostModel } from '../../../posts/model';
1
+ import type { IPostModel } from '../../../posts/model';
2
2
  import type { StreamLayoutShortVideoModel } from '../models/stream-layout-short-video-model';
3
3
  export declare const mapToPostModel: (model: StreamLayoutShortVideoModel) => IPostModel;
@@ -1,13 +1,9 @@
1
- import { MediaType, PostType } from '../../../core/enums';
2
- import {} from '../../../posts/model';
3
1
  export const mapToPostModel = (model) => {
4
2
  return {
5
3
  id: model.id,
6
- postType: PostType.ShortVideo,
4
+ postType: 'SHORT_VIDEO',
7
5
  media: [
8
- model.media.type === MediaType.Image
9
- ? { isImage: true, url: model.media.url }
10
- : { isImage: false, url: model.media.url, thumbnailUrl: model.media.thumbnailUrl }
6
+ model.media.type === 'IMAGE' ? { isImage: true, url: model.media.url } : { isImage: false, url: model.media.url, thumbnailUrl: model.media.thumbnailUrl }
11
7
  ],
12
8
  mediaFit: 'cover',
13
9
  kicker: null,
@@ -1,4 +1,4 @@
1
- import { MediaType } from '../../../core/enums';
1
+ import type { MediaType } from '../../../core/enums';
2
2
  export type StreamLayoutMediaItemModel = {
3
3
  url: string;
4
4
  thumbnailUrl: string | null;
@@ -1 +1 @@
1
- import { MediaType } from '../../../core/enums';
1
+ export {};
@@ -1,4 +1,4 @@
1
- import { AdType, type Currency } from '../../../core/enums';
1
+ import type { AdType, Currency } from '../../../core/enums';
2
2
  import type { StreamLayoutMediaItemModel } from './stream-layout-media-item-model';
3
3
  import type { StreamLayoutPostHeaderModel } from './stream-layout-post-header-model';
4
4
  export type StreamLayoutShortVideoModel = {
@@ -1 +1 @@
1
- import { AdType } from '../../../core/enums';
1
+ export {};
@@ -1,8 +1,13 @@
1
1
  <script lang="ts">import { CloseOrchestrator } from '../../ui/player/close-orchestrator';
2
2
  import { createShadowRoot } from '../../ui/shadow-dom';
3
+ import { StreamsPlayerHostSettings } from './streams-player-host-settings.svelte';
3
4
  import { default as StreamsPlayerProxy } from './streams-player-proxy.svelte';
4
- import { mount, unmount } from 'svelte';
5
+ import { mount, unmount, untrack } from 'svelte';
5
6
  let { dataProvider, postSocialInteractionsHandler, sharingHandler, amplificationParameters, playerSettings, analyticsHandler, on } = $props();
7
+ const settingsHolder = untrack(() => new StreamsPlayerHostSettings(playerSettings));
8
+ $effect(() => {
9
+ settingsHolder.update(playerSettings);
10
+ });
6
11
  const initHost = (node) => {
7
12
  const shadowRoot = createShadowRoot(node);
8
13
  const mounted = mount(StreamsPlayerProxy, {
@@ -13,7 +18,7 @@ const initHost = (node) => {
13
18
  sharingHandler,
14
19
  analyticsHandler,
15
20
  amplificationParameters,
16
- playerSettings,
21
+ playerSettings: settingsHolder,
17
22
  closeOrchestrator: new CloseOrchestrator({
18
23
  closeFn: async () => {
19
24
  await unmount(mounted);
@@ -0,0 +1,20 @@
1
+ import type { ThemeValue } from '../../core/theme';
2
+ import type { AppLocaleValue } from '@streamscloud/kit/core/locale';
3
+ export declare class StreamsPlayerHostSettings {
4
+ locale: AppLocaleValue | undefined;
5
+ showStreamsCloudWatermark: boolean | undefined;
6
+ disableBackground: boolean | undefined;
7
+ theme: ThemeValue | undefined;
8
+ constructor(init: {
9
+ locale?: AppLocaleValue;
10
+ showStreamsCloudWatermark?: boolean;
11
+ disableBackground?: boolean;
12
+ theme?: ThemeValue;
13
+ } | undefined);
14
+ update: (data: {
15
+ locale?: AppLocaleValue;
16
+ showStreamsCloudWatermark?: boolean;
17
+ disableBackground?: boolean;
18
+ theme?: ThemeValue;
19
+ } | undefined) => void;
20
+ }
@@ -0,0 +1,15 @@
1
+ export class StreamsPlayerHostSettings {
2
+ locale = $state();
3
+ showStreamsCloudWatermark = $state();
4
+ disableBackground = $state();
5
+ theme = $state();
6
+ constructor(init) {
7
+ this.update(init);
8
+ }
9
+ update = (data) => {
10
+ this.locale = data?.locale;
11
+ this.showStreamsCloudWatermark = data?.showStreamsCloudWatermark;
12
+ this.disableBackground = data?.disableBackground;
13
+ this.theme = data?.theme;
14
+ };
15
+ }
@@ -1,5 +1,4 @@
1
- <script lang="ts">import { MediaFormat, MediaType } from '../../core/enums';
2
- import { getMediaItemImageUrl } from '../../core/media';
1
+ <script lang="ts">import { getMediaItemImageUrl } from '../../core/media';
3
2
  import { Image } from '@streamscloud/kit/ui/image';
4
3
  import { ProportionalContainer } from '@streamscloud/kit/ui/proportional-container';
5
4
  import { Video } from '@streamscloud/kit/ui/video';
@@ -16,7 +15,7 @@ const parsedRatio = $derived.by(() => {
16
15
  }
17
16
  else {
18
17
  if (typeof ratio !== 'number') {
19
- return ratio === MediaFormat.W16H9 ? 16 / 9 : 4 / 3;
18
+ return ratio === 'W16H9' ? 16 / 9 : 4 / 3;
20
19
  }
21
20
  else {
22
21
  return ratio;
@@ -27,7 +26,7 @@ const parsedRatio = $derived.by(() => {
27
26
 
28
27
  {#if media}
29
28
  {#snippet mediaView()}
30
- {#if media.type === MediaType.Image}
29
+ {#if media.type === 'IMAGE'}
31
30
  <div class="media-item-view__image" onclick={handleClick} onkeydown={() => {}} role="none">
32
31
  <Image src={getMediaItemImageUrl(media)} />
33
32
  </div>
@@ -1,4 +1,4 @@
1
- import { MediaFormat } from '../../core/enums';
1
+ import type { MediaFormat } from '../../core/enums';
2
2
  import { type MediaItemModel } from '../../core/media';
3
3
  type Props = {
4
4
  media: MediaItemModel | null;
@@ -1,5 +1,4 @@
1
- <script lang="ts">import { MediaFormat } from '../../core/enums';
2
- import {} from '../../core/media';
1
+ <script lang="ts">import {} from '../../core/media';
3
2
  import { MediaItemView } from '../media-item-view';
4
3
  import { GalleryLayout } from './types';
5
4
  let { media, singleImageRatio = 0, inert = false, on } = $props();
@@ -24,12 +23,12 @@ const handleGalleryItemClick = (index) => {
24
23
  }
25
24
  /*const toMediaViewerItemType = (type: MediaType) => {
26
25
  switch (type) {
27
- case MediaType.Image:
26
+ case 'IMAGE':
28
27
  return MediaViewerItemType.Image;
29
- case MediaType.Video:
30
- case MediaType.ShortVideo:
28
+ case 'VIDEO':
29
+ case 'SHORT_VIDEO':
31
30
  return MediaViewerItemType.Video;
32
- case MediaType.Audio:
31
+ case 'AUDIO':
33
32
  return MediaViewerItemType.Audio;
34
33
  default:
35
34
  Utils.assertUnreachable(type);
@@ -1,4 +1,4 @@
1
- import { MediaFormat } from '../../core/enums';
1
+ import type { MediaFormat } from '../../core/enums';
2
2
  import { type MediaItemWithMetadataModel } from '../../core/media';
3
3
  type Props = {
4
4
  media: Array<MediaItemWithMetadataModel> | ReadonlyArray<MediaItemWithMetadataModel>;
@@ -81,6 +81,7 @@ const styles = $derived.by(() => {
81
81
  --sc-mc-color--text-secondary: light-dark(#6b7280, #d1d5db);
82
82
  --sc-mc-color--text-white: #ffffff;
83
83
  --sc-mc-color--text-white-shadow: 0 1px 0 rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 6px rgba(0, 0, 0, 0.05);
84
+ color: var(--sc-mc-color--text-primary);
84
85
  /* Player brand colors — overridable via --sc-player--{light|dark}--{name} custom properties */
85
86
  --sc-player--background: light-dark(
86
87
  var(--sc-player--light--background, rgb(from var(--sc-mc-color--bg-screen) r g b / 90%)),
@@ -128,10 +129,14 @@ const styles = $derived.by(() => {
128
129
  height: 100%;
129
130
  min-height: 100%;
130
131
  max-height: 100%;
132
+ box-sizing: border-box;
131
133
  container-type: inline-size;
132
134
  display: flex;
133
135
  flex-direction: column;
136
+ font: 400 16px Inter, sans-serif, arial;
137
+ line-height: 1.15;
134
138
  position: relative;
139
+ text-align: initial;
135
140
  }
136
141
  .shadow-root:before {
137
142
  content: "";
@@ -38,6 +38,8 @@
38
38
  --sc-mc-color--text-white: #{colors.$color-white};
39
39
  --sc-mc-color--text-white-shadow: 0 1px 0 rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 6px rgba(0, 0, 0, 0.05);
40
40
 
41
+ color: var(--sc-mc-color--text-primary);
42
+
41
43
  /* Player brand colors — overridable via --sc-player--{light|dark}--{name} custom properties */
42
44
  --sc-player--background: light-dark(
43
45
  var(--sc-player--light--background, rgb(from var(--sc-mc-color--bg-screen) r g b / 90%)),
@@ -10,11 +10,4 @@ export const createShadowRoot = (host) => {
10
10
  };
11
11
  const prepareShadowRootHost = (host) => {
12
12
  host.style.all = 'unset';
13
- host.style.lineHeight = '1.15';
14
- host.style.font = '16px Inter, sans-serif, arial';
15
- host.style.fontWeight = '400';
16
- host.style.margin = '0';
17
- host.style.boxSizing = 'border-box';
18
- host.style.textAlign = 'initial';
19
- host.style.color = 'var(--sc-mc-color--text-primary)';
20
13
  };