@streamscloud/embeddable 13.0.1 → 13.2.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 (68) hide show
  1. package/dist/core/utils/utils.d.ts +1 -0
  2. package/dist/core/utils/utils.js +4 -0
  3. package/dist/external-api/data-providers/internal-media-center-data-provider.svelte.d.ts +2 -0
  4. package/dist/external-api/data-providers/internal-media-center-data-provider.svelte.js +4 -3
  5. package/dist/media-center/config/types.d.ts +2 -1
  6. package/dist/media-center/media-center/cmp.media-center-proxy.svelte +8 -3
  7. package/dist/media-center/media-center/discover/community-features.svelte +3 -3
  8. package/dist/media-center/media-center/discover/data-loading.js +2 -2
  9. package/dist/media-center/media-center/discover/discover-view-handler.svelte.d.ts +11 -3
  10. package/dist/media-center/media-center/discover/discover-view-handler.svelte.js +26 -13
  11. package/dist/media-center/media-center/discover/discover-view-localization.d.ts +1 -0
  12. package/dist/media-center/media-center/discover/discover-view-localization.js +6 -0
  13. package/dist/media-center/media-center/discover/discover-view.svelte +84 -60
  14. package/dist/media-center/media-center/footer/media-center-footer.svelte +1 -1
  15. package/dist/media-center/media-center/header/media-center-header.svelte +11 -7
  16. package/dist/media-center/media-center/media-center-context.svelte.d.ts +14 -10
  17. package/dist/media-center/media-center/media-center-context.svelte.js +102 -43
  18. package/dist/media-center/media-center/media-center-settings.svelte.d.ts +3 -1
  19. package/dist/media-center/media-center/media-center-settings.svelte.js +8 -14
  20. package/dist/media-center/media-center/media-center-view.svelte +22 -25
  21. package/dist/media-center/media-center/moments/moments-feed-handler.svelte.d.ts +13 -4
  22. package/dist/media-center/media-center/moments/moments-feed-handler.svelte.js +30 -6
  23. package/dist/media-center/media-center/moments/moments-state.svelte.d.ts +4 -1
  24. package/dist/media-center/media-center/moments/moments-state.svelte.js +10 -2
  25. package/dist/media-center/media-center/{feed → posts-feed}/feed-providers-generator.d.ts +4 -8
  26. package/dist/media-center/media-center/posts-feed/feed-providers-generator.js +61 -0
  27. package/dist/media-center/media-center/posts-feed/index.d.ts +1 -0
  28. package/dist/media-center/media-center/posts-feed/index.js +1 -0
  29. package/dist/media-center/media-center/posts-feed/posts-feed-handler.svelte.d.ts +42 -0
  30. package/dist/media-center/media-center/posts-feed/posts-feed-handler.svelte.js +106 -0
  31. package/dist/media-center/media-center/posts-feed/types.d.ts +8 -0
  32. package/dist/media-center/media-center/streams-feed/feed-providers-generator.d.ts +12 -0
  33. package/dist/media-center/media-center/streams-feed/feed-providers-generator.js +56 -0
  34. package/dist/media-center/media-center/streams-feed/index.d.ts +1 -0
  35. package/dist/media-center/media-center/streams-feed/index.js +1 -0
  36. package/dist/media-center/media-center/streams-feed/streams-feed-handler.svelte.d.ts +45 -0
  37. package/dist/media-center/media-center/streams-feed/streams-feed-handler.svelte.js +111 -0
  38. package/dist/media-center/media-center/streams-feed/types.d.ts +9 -0
  39. package/dist/media-center/media-center/types.d.ts +3 -1
  40. package/dist/media-center/navigation/index.d.ts +1 -1
  41. package/dist/media-center/navigation/{media-center-state.d.ts → media-center-state.types.d.ts} +4 -3
  42. package/dist/media-center/navigation/media-center-state.types.js +1 -0
  43. package/dist/media-center/navigation/mock-navigation-handler.svelte.d.ts +3 -2
  44. package/dist/media-center/navigation/mock-navigation-handler.svelte.js +5 -2
  45. package/dist/media-center/navigation/types.d.ts +1 -2
  46. package/dist/media-page/cmp.media-page.svelte +1 -1
  47. package/dist/media-page/index.d.ts +4 -1
  48. package/dist/streams/streams-player/streams-player-view.svelte +4 -4
  49. package/dist/streams/streams-player/types.d.ts +5 -0
  50. package/dist/ui/player/providers/chunks-player-buffer/player-chunks-manager.svelte.d.ts +1 -0
  51. package/dist/ui/player/providers/chunks-player-buffer/player-chunks-manager.svelte.js +10 -0
  52. package/dist/ui/player/providers/default-chunks-player-buffer.svelte.d.ts +1 -0
  53. package/dist/ui/player/providers/default-chunks-player-buffer.svelte.js +3 -0
  54. package/dist/ui/player/providers/default-feed-player-buffer.svelte.d.ts +1 -0
  55. package/dist/ui/player/providers/default-feed-player-buffer.svelte.js +8 -0
  56. package/dist/ui/player/providers/types.d.ts +1 -0
  57. package/dist/ui/player/slider/cmp.player-slider.svelte +1 -1
  58. package/dist/ui/shadow-dom/cmp.shadow-root.svelte +2 -0
  59. package/dist/ui/shadow-dom/colors.scss +2 -0
  60. package/package.json +9 -7
  61. package/dist/media-center/media-center/feed/feed-handler.svelte.d.ts +0 -52
  62. package/dist/media-center/media-center/feed/feed-handler.svelte.js +0 -92
  63. package/dist/media-center/media-center/feed/feed-providers-generator.js +0 -83
  64. package/dist/media-center/media-center/feed/index.d.ts +0 -1
  65. package/dist/media-center/media-center/feed/index.js +0 -1
  66. package/dist/media-center/media-center/feed/types.d.ts +0 -12
  67. /package/dist/media-center/media-center/{feed → posts-feed}/types.js +0 -0
  68. /package/dist/media-center/{navigation/media-center-state.js → media-center/streams-feed/types.js} +0 -0
@@ -1,4 +1,5 @@
1
1
  export declare class Utils {
2
+ static areEqual(value: unknown, other: unknown): boolean;
2
3
  static assertUnreachable(_x: never): never;
3
4
  static clone<T>(value: T): T;
4
5
  /**
@@ -1,4 +1,8 @@
1
+ import { dequal as isEqual } from 'dequal/lite';
1
2
  export class Utils {
3
+ static areEqual(value, other) {
4
+ return isEqual(value, other);
5
+ }
2
6
  static assertUnreachable(_x) {
3
7
  throw new Error("Didn't expect to get here");
4
8
  }
@@ -1,3 +1,4 @@
1
+ import type { MediaCenterState } from '../../media-center';
1
2
  import type { IMediaCenterDataProvider } from '../../media-center/config/types';
2
3
  export declare class InternalMediaCenterDataProvider implements IMediaCenterDataProvider {
3
4
  model: IMediaCenterDataProvider['model'];
@@ -11,5 +12,6 @@ export declare class InternalMediaCenterDataProvider implements IMediaCenterData
11
12
  initiator?: string;
12
13
  graphqlOrigin?: string;
13
14
  testingStuff?: boolean;
15
+ onNavigationStateChange?: (state: MediaCenterState) => void;
14
16
  });
15
17
  }
@@ -17,7 +17,7 @@ export class InternalMediaCenterDataProvider {
17
17
  fetchModel;
18
18
  graphql;
19
19
  constructor(input) {
20
- const { mediaPageId, graphqlOrigin, initiator, testingStuff } = input;
20
+ const { mediaPageId, graphqlOrigin, initiator, testingStuff, onNavigationStateChange } = input;
21
21
  this.graphql = createLocalGQLClient(graphqlOrigin, initiator ? { 'x-initiator': initiator } : undefined);
22
22
  this.fetchModel = async () => {
23
23
  const payload = await this.graphql.query(GetMediaPageConfigDocument, { mediaPageId }).toPromise();
@@ -58,7 +58,7 @@ export class InternalMediaCenterDataProvider {
58
58
  types: filter.types,
59
59
  statuses: [Status.Published],
60
60
  categoryId: filter.categoryId,
61
- ids: filter.includeIds,
61
+ ids: filter.ids,
62
62
  excludeIds: filter.excludeIds
63
63
  },
64
64
  continuationToken,
@@ -73,6 +73,7 @@ export class InternalMediaCenterDataProvider {
73
73
  filter: {
74
74
  mediaPageId,
75
75
  categoryId: filter.categoryId,
76
+ ids: filter.ids,
76
77
  excludeIds: filter.excludeIds,
77
78
  statuses: [StreamStatus.Published],
78
79
  showInFeed: true
@@ -95,7 +96,7 @@ export class InternalMediaCenterDataProvider {
95
96
  categoriesFollowingHandler: testingStuff ? new MockCategoryFollowingProvider() : undefined,
96
97
  socialInteractionsHandler: testingStuff ? new MockPostSocialInteractionsHandler() : undefined,
97
98
  membershipHandler: testingStuff ? new MockMembershipHandler() : undefined,
98
- navigationHandler: testingStuff ? new MockNavigationHandler() : undefined
99
+ navigationHandler: testingStuff && onNavigationStateChange ? new MockNavigationHandler(onNavigationStateChange) : undefined
99
100
  };
100
101
  }
101
102
  }
@@ -23,7 +23,7 @@ export interface IMediaCenterDataProvider {
23
23
  filter: {
24
24
  types: PostType[];
25
25
  categoryId?: string;
26
- includeIds?: string[];
26
+ ids?: string[];
27
27
  excludeIds?: string[];
28
28
  };
29
29
  limit: number;
@@ -37,6 +37,7 @@ export interface IMediaCenterDataProvider {
37
37
  getStreamsCursor: (input: {
38
38
  filter: {
39
39
  categoryId?: string;
40
+ ids?: string[];
40
41
  excludeIds?: string[];
41
42
  };
42
43
  limit: number;
@@ -15,19 +15,24 @@ const context = new MediaCenterContext({
15
15
  initialized: (instance) => {
16
16
  switch (modeProps.mode) {
17
17
  case 'posts':
18
- instance.playPostsFeed({
18
+ instance.postsFeedHandler.activateWithExistingProvider({
19
19
  dataProvider: modeProps.props.dataProvider,
20
20
  onPostActivated: modeProps.props.onPostActivated
21
21
  });
22
22
  break;
23
23
  case 'streams':
24
- instance.playStreamsFeed({
24
+ instance.streamsFeedHandler.activateWithExistingProvider({
25
25
  dataProvider: modeProps.props.dataProvider,
26
26
  onStreamActivated: modeProps.props.onStreamActivated
27
27
  });
28
28
  break;
29
29
  case 'default':
30
- instance.activateDiscover({ categoryId: null });
30
+ if (settings.state) {
31
+ instance.restoreState(settings.state);
32
+ }
33
+ else {
34
+ instance.activateDiscover({ categoryId: null });
35
+ }
31
36
  break;
32
37
  default:
33
38
  Utils.assertUnreachable(modeProps);
@@ -110,7 +110,7 @@ const onJoinMembershipClick = () => __awaiter(void 0, void 0, void 0, function*
110
110
  .community-features {
111
111
  display: flex;
112
112
  flex-wrap: nowrap;
113
- margin-top: 0.625rem;
113
+ margin-top: 0.25rem;
114
114
  gap: 8.125rem;
115
115
  align-items: center;
116
116
  /* Set 'container-type: inline-size;' to reference container*/
@@ -135,7 +135,7 @@ const onJoinMembershipClick = () => __awaiter(void 0, void 0, void 0, function*
135
135
  }
136
136
  .members__count {
137
137
  font-size: 0.9375rem;
138
- line-height: 1;
138
+ line-height: 1.75rem;
139
139
  font-weight: 500;
140
140
  /* Set 'container-type: inline-size;' to reference container*/
141
141
  }
@@ -146,7 +146,7 @@ const onJoinMembershipClick = () => __awaiter(void 0, void 0, void 0, function*
146
146
  }
147
147
  .members__label {
148
148
  font-size: 0.75rem;
149
- line-height: 1;
149
+ line-height: 1.75rem;
150
150
  font-weight: 400;
151
151
  color: var(--sc-mc-color--text-secondary);
152
152
  /* Set 'container-type: inline-size;' to reference container*/
@@ -11,7 +11,7 @@ export class DiscoverDataLoader {
11
11
  }
12
12
  const streamsResponse = await this.dataProvider.streamPlayer.getStreamsCursor({
13
13
  filter: { categoryId: holder.categoryId ?? undefined },
14
- limit: 6,
14
+ limit: 5,
15
15
  continuationToken: holder.continuationToken
16
16
  });
17
17
  holder.streams = [...holder.streams, ...streamsResponse.items];
@@ -26,7 +26,7 @@ export class DiscoverDataLoader {
26
26
  categoryId: holder.categoryId,
27
27
  types: [PostType.ShortVideo]
28
28
  },
29
- limit: 6,
29
+ limit: 5,
30
30
  continuationToken: holder.continuationToken
31
31
  });
32
32
  holder.shortVideos = [...holder.shortVideos, ...shortVideosResponse.items];
@@ -1,8 +1,7 @@
1
1
  import type { IMediaCenterDataProvider } from '../../config/types';
2
+ import type { MediaCenterState } from '../../navigation';
2
3
  import { ShortVideosInCategory, StreamsInCategory } from './types.svelte';
3
4
  export declare class DiscoverViewHandler {
4
- private readonly dataProvider;
5
- private _activated;
6
5
  private _state;
7
6
  private _streamsInCategoryCache;
8
7
  private _shortVideosInCategoryCache;
@@ -10,7 +9,11 @@ export declare class DiscoverViewHandler {
10
9
  private _shortVideosInCategory;
11
10
  private _dataLoader;
12
11
  private _shortVideosLoadingDeferred;
13
- constructor(dataProvider: IMediaCenterDataProvider);
12
+ private _callbacks;
13
+ constructor(data: {
14
+ dataProvider: IMediaCenterDataProvider;
15
+ on: Callbacks;
16
+ });
14
17
  get activated(): boolean;
15
18
  get active(): boolean;
16
19
  get loading(): boolean;
@@ -19,6 +22,7 @@ export declare class DiscoverViewHandler {
19
22
  loadMoreShortVideos: () => Promise<void>;
20
23
  activate: (data: {
21
24
  activeCategoryId: string | null;
25
+ activeCategoryName: string | null;
22
26
  childCategories: {
23
27
  id: string;
24
28
  name: string;
@@ -26,3 +30,7 @@ export declare class DiscoverViewHandler {
26
30
  }) => Promise<void>;
27
31
  deactivate: () => void;
28
32
  }
33
+ type Callbacks = {
34
+ navigationStateChanged: (state: MediaCenterState) => void;
35
+ };
36
+ export {};
@@ -2,27 +2,27 @@ import { Deferred } from '../../../core/deferred';
2
2
  import { DiscoverDataLoader } from './data-loading';
3
3
  import { ShortVideosInCategory, StreamsInCategory } from './types.svelte';
4
4
  export class DiscoverViewHandler {
5
- dataProvider;
6
- _activated = $state(false);
7
- _state = $state('loading');
5
+ _state = $state('inactive');
8
6
  _streamsInCategoryCache = $state.raw([]);
9
7
  _shortVideosInCategoryCache = $state.raw([]);
10
8
  _streamsInCategory = $state.raw(null);
11
9
  _shortVideosInCategory = $state.raw([]);
12
10
  _dataLoader;
13
11
  _shortVideosLoadingDeferred = null;
14
- constructor(dataProvider) {
15
- this.dataProvider = dataProvider;
16
- this._dataLoader = new DiscoverDataLoader(this.dataProvider);
12
+ _callbacks;
13
+ constructor(data) {
14
+ const { dataProvider, on } = data;
15
+ this._callbacks = on;
16
+ this._dataLoader = new DiscoverDataLoader(dataProvider);
17
17
  }
18
18
  get activated() {
19
- return this._activated;
19
+ return this._state !== 'inactive';
20
20
  }
21
21
  get active() {
22
- return this._activated && this._state === 'ready';
22
+ return this._state === 'ready';
23
23
  }
24
24
  get loading() {
25
- return this._activated && this._state === 'loading';
25
+ return this._state === 'loading';
26
26
  }
27
27
  get streamsHolder() {
28
28
  return this._streamsInCategory;
@@ -51,6 +51,10 @@ export class DiscoverViewHandler {
51
51
  }
52
52
  index++;
53
53
  }
54
+ const holdersWithContent = this._shortVideosInCategory.filter((x) => x.shortVideos.length > 0);
55
+ if (holdersWithContent.length === 1) {
56
+ await this._dataLoader.loadShortVideos(holdersWithContent[0]);
57
+ }
54
58
  }
55
59
  finally {
56
60
  this._shortVideosLoadingDeferred.resolve();
@@ -58,8 +62,7 @@ export class DiscoverViewHandler {
58
62
  }
59
63
  };
60
64
  activate = async (data) => {
61
- const { activeCategoryId, childCategories } = data;
62
- this._activated = true;
65
+ const { activeCategoryId, activeCategoryName, childCategories } = data;
63
66
  this._state = 'loading';
64
67
  try {
65
68
  const promises = [];
@@ -73,13 +76,22 @@ export class DiscoverViewHandler {
73
76
  if (streamsInCategory.continuationToken === undefined) {
74
77
  promises.push(this._dataLoader.loadStreams(streamsInCategory));
75
78
  }
76
- // Init short videos in categories
79
+ // Init short videos in child categories
77
80
  const nonExistingShortVideosInCategory = childCategories.filter((cc) => !this._shortVideosInCategoryCache.some((x) => x.categoryId === cc.id));
78
81
  for (const category of nonExistingShortVideosInCategory) {
79
82
  const newShortVideosInCategory = new ShortVideosInCategory({ categoryId: category.id, categoryName: category.name });
80
83
  this._shortVideosInCategoryCache.push(newShortVideosInCategory);
81
84
  }
82
85
  this._shortVideosInCategory = childCategories.map((c) => this._shortVideosInCategoryCache.find((b) => b.categoryId === c.id));
86
+ // Init short videos in main category
87
+ if (activeCategoryId) {
88
+ let shortVideosInCategory = this._shortVideosInCategoryCache.find((x) => x.categoryId === activeCategoryId);
89
+ if (!shortVideosInCategory) {
90
+ shortVideosInCategory = new ShortVideosInCategory({ categoryId: activeCategoryId, categoryName: activeCategoryName || '' });
91
+ this._shortVideosInCategoryCache.push(shortVideosInCategory);
92
+ }
93
+ this._shortVideosInCategory.unshift(shortVideosInCategory);
94
+ }
83
95
  const pushShortVideoPromise = (holder) => {
84
96
  if (holder && holder.continuationToken === undefined) {
85
97
  promises.push(this._dataLoader.loadShortVideos(holder));
@@ -92,10 +104,11 @@ export class DiscoverViewHandler {
92
104
  }
93
105
  finally {
94
106
  this._state = 'ready';
107
+ this._callbacks.navigationStateChanged({ mode: 'discover', categoryId: activeCategoryId });
95
108
  }
96
109
  };
97
110
  deactivate = () => {
98
- this._activated = false;
111
+ this._state = 'inactive';
99
112
  this._shortVideosLoadingDeferred = null;
100
113
  };
101
114
  }
@@ -1,6 +1,7 @@
1
1
  import { type Locale } from '../../../core/locale';
2
2
  export declare class DiscoverViewLocalization {
3
3
  latestStreamsSectionTitle: string;
4
+ latestShortVideosSectionTitle: string;
4
5
  locale: Locale;
5
6
  constructor(locale: Locale);
6
7
  }
@@ -1,9 +1,11 @@
1
1
  import {} from '../../../core/locale';
2
2
  export class DiscoverViewLocalization {
3
3
  latestStreamsSectionTitle;
4
+ latestShortVideosSectionTitle;
4
5
  locale;
5
6
  constructor(locale) {
6
7
  this.latestStreamsSectionTitle = loc.streamsSectionTitle[locale];
8
+ this.latestShortVideosSectionTitle = loc.shortVideosSectionTitle[locale];
7
9
  this.locale = locale;
8
10
  }
9
11
  }
@@ -11,5 +13,9 @@ const loc = {
11
13
  streamsSectionTitle: {
12
14
  en: 'Latest Streams',
13
15
  no: 'Siste Streams'
16
+ },
17
+ shortVideosSectionTitle: {
18
+ en: 'Latest Short Videos',
19
+ no: 'Siste Korte Videoer'
14
20
  }
15
21
  };
@@ -9,54 +9,57 @@ const handler = $derived(context.discoverHandler);
9
9
  const localization = $derived(new DiscoverViewLocalization(context.locale));
10
10
  </script>
11
11
 
12
- {#if !handler.loading}
13
- <div class="media-center-discover">
14
- <div class="media-center-discover__content">
15
- <Header context={context} />
16
- {#if handler.streamsHolder?.streams.length}
17
- <div class="media-center-discover__section">
18
- <div class="media-center-discover__section-header">
19
- {localization.latestStreamsSectionTitle}
20
- </div>
21
- <div class="media-center-discover__section-content media-center-discover__section-content--5">
22
- {#each handler.streamsHolder.streams as item (item.id)}
23
- <StreamCard stream={item} on={{ click: () => on.streamSelected(item) }}></StreamCard>
24
- {/each}
25
- </div>
12
+ <div class="media-center-discover">
13
+ <div class="media-center-discover__content media-center-discover__feed">
14
+ <Header context={context} />
15
+ {#if handler.streamsHolder?.streams.length}
16
+ <div class="media-center-discover__section">
17
+ <div class="media-center-discover__section-header">
18
+ {localization.latestStreamsSectionTitle}
26
19
  </div>
27
- {/if}
28
- {#each handler.shortVideosHolders as holder, index (holder)}
29
- <InfiniteScrolling loadMore={handler.loadMoreShortVideos}>
30
- {#if holder.shortVideos.length}
31
- <div class="media-center-discover__section">
32
- <div class="media-center-discover__section-header">
33
- {holder.categoryName}
34
- </div>
35
- <div
36
- class="media-center-discover__section-content"
37
- class:media-center-discover__section-content--5={index % 2 !== 0}
38
- class:media-center-discover__section-content--4={index % 2 === 0}>
39
- {#each holder.shortVideos as item (item.id)}
40
- <ShortVideoCard
41
- shortVideo={{
42
- id: item.id,
43
- text: item.text,
44
- cover: getPostCoverImage(item),
45
- displayDate: item.displayDate,
46
- viewsCount: item.viewsCount,
47
- products: item.products
48
- }}
49
- locale={context.locale}
50
- on={{ click: () => on.shortVideoSelected(item) }} />
51
- {/each}
20
+ <div class="media-center-discover__section-content media-center-discover__section-content--5">
21
+ {#each handler.streamsHolder.streams as item (item.id)}
22
+ <StreamCard stream={item} on={{ click: () => on.streamSelected(item) }}></StreamCard>
23
+ {/each}
24
+ </div>
25
+ </div>
26
+ {/if}
27
+ {#if !handler.loading}
28
+ <InfiniteScrolling loadMore={handler.loadMoreShortVideos}>
29
+ <div class="media-center-discover__feed">
30
+ {#each handler.shortVideosHolders as holder, index (holder)}
31
+ {#if holder.shortVideos.length}
32
+ <div class="media-center-discover__section">
33
+ <div class="media-center-discover__section-header">
34
+ {holder.categoryId === context.categoriesHandler.selectedCategoryId ? localization.latestShortVideosSectionTitle : holder.categoryName}
35
+ </div>
36
+ <div
37
+ class="media-center-discover__section-content"
38
+ class:media-center-discover__section-content--5={index % 2 !== 0}
39
+ class:media-center-discover__section-content--4={index % 2 === 0}
40
+ class:media-center-discover__section-content--not-alone={handler.shortVideosHolders.length > 1}>
41
+ {#each holder.shortVideos as item (item.id)}
42
+ <ShortVideoCard
43
+ shortVideo={{
44
+ id: item.id,
45
+ text: item.text,
46
+ cover: getPostCoverImage(item),
47
+ displayDate: item.displayDate,
48
+ viewsCount: item.viewsCount,
49
+ products: item.products
50
+ }}
51
+ locale={context.locale}
52
+ on={{ click: () => on.shortVideoSelected(item) }} />
53
+ {/each}
54
+ </div>
52
55
  </div>
53
- </div>
54
- {/if}
55
- </InfiniteScrolling>
56
- {/each}
57
- </div>
56
+ {/if}
57
+ {/each}
58
+ </div>
59
+ </InfiniteScrolling>
60
+ {/if}
58
61
  </div>
59
- {/if}
62
+ </div>
60
63
 
61
64
  <style>@keyframes fadeIn {
62
65
  0% {
@@ -110,9 +113,6 @@ const localization = $derived(new DiscoverViewLocalization(context.locale));
110
113
  width: 100%;
111
114
  max-width: 73.75rem;
112
115
  margin: 0 auto;
113
- display: flex;
114
- flex-direction: column;
115
- gap: 3rem;
116
116
  padding-bottom: 1.25rem;
117
117
  /* Set 'container-type: inline-size;' to reference container*/
118
118
  /* Set 'container-type: inline-size;' to reference container*/
@@ -120,22 +120,42 @@ const localization = $derived(new DiscoverViewLocalization(context.locale));
120
120
  }
121
121
  @container (width < 992px) {
122
122
  .media-center-discover__content {
123
- gap: 2.5rem;
124
123
  padding-bottom: 1rem;
125
124
  }
126
125
  }
127
126
  @container (width < 768px) {
128
127
  .media-center-discover__content {
129
- gap: 2rem;
130
128
  padding-bottom: 0.8125rem;
131
129
  }
132
130
  }
133
131
  @container (width < 576px) {
134
132
  .media-center-discover__content {
135
- gap: 1.5rem;
136
133
  padding-bottom: 0.625rem;
137
134
  }
138
135
  }
136
+ .media-center-discover__feed {
137
+ display: flex;
138
+ flex-direction: column;
139
+ gap: 3rem;
140
+ /* Set 'container-type: inline-size;' to reference container*/
141
+ /* Set 'container-type: inline-size;' to reference container*/
142
+ /* Set 'container-type: inline-size;' to reference container*/
143
+ }
144
+ @container (width < 992px) {
145
+ .media-center-discover__feed {
146
+ gap: 2.5rem;
147
+ }
148
+ }
149
+ @container (width < 768px) {
150
+ .media-center-discover__feed {
151
+ gap: 2rem;
152
+ }
153
+ }
154
+ @container (width < 576px) {
155
+ .media-center-discover__feed {
156
+ gap: 1.5rem;
157
+ }
158
+ }
139
159
  .media-center-discover__section {
140
160
  display: flex;
141
161
  flex-direction: column;
@@ -154,11 +174,15 @@ const localization = $derived(new DiscoverViewLocalization(context.locale));
154
174
  font-size: 1.125rem;
155
175
  line-height: 1.75rem;
156
176
  font-weight: 600;
157
- color: var(--sc-mc-color--text-white);
158
- text-shadow: var(--sc-mc-color--text-white-shadow);
177
+ color: var(--sc-mc-color--text-primary);
178
+ text-shadow: var(--sc-mc-color--text-primary-shadow);
159
179
  }
160
180
  .media-center-discover__section-content {
161
181
  display: grid;
182
+ --_section-content--more-items--display: block;
183
+ }
184
+ .media-center-discover__section-content--not-alone {
185
+ --_section-content--more-items--display: none;
162
186
  }
163
187
  .media-center-discover__section-content--4 {
164
188
  gap: 1.25rem;
@@ -168,7 +192,7 @@ const localization = $derived(new DiscoverViewLocalization(context.locale));
168
192
  /* Set 'container-type: inline-size;' to reference container*/
169
193
  }
170
194
  .media-center-discover__section-content--4 :global(> :nth-child(n + 5)) {
171
- display: none;
195
+ display: var(--_section-content--more-items--display);
172
196
  }
173
197
  @container (width < 992px) {
174
198
  .media-center-discover__section-content--4 {
@@ -176,7 +200,7 @@ const localization = $derived(new DiscoverViewLocalization(context.locale));
176
200
  grid-template-columns: repeat(3, minmax(0, 1fr));
177
201
  }
178
202
  .media-center-discover__section-content--4 :global(> :nth-child(n + 4)) {
179
- display: none;
203
+ display: var(--_section-content--more-items--display);
180
204
  }
181
205
  }
182
206
  @container (width < 768px) {
@@ -188,7 +212,7 @@ const localization = $derived(new DiscoverViewLocalization(context.locale));
188
212
  display: block;
189
213
  }
190
214
  .media-center-discover__section-content--4 :global(> :nth-child(n + 5)) {
191
- display: none;
215
+ display: var(--_section-content--more-items--display);
192
216
  }
193
217
  }
194
218
  @container (width < 576px) {
@@ -204,7 +228,7 @@ const localization = $derived(new DiscoverViewLocalization(context.locale));
204
228
  /* Set 'container-type: inline-size;' to reference container*/
205
229
  }
206
230
  .media-center-discover__section-content--5 :global(> :nth-child(n + 6)) {
207
- display: none;
231
+ display: var(--_section-content--more-items--display);
208
232
  }
209
233
  @container (width < 992px) {
210
234
  .media-center-discover__section-content--5 {
@@ -212,7 +236,7 @@ const localization = $derived(new DiscoverViewLocalization(context.locale));
212
236
  grid-template-columns: repeat(4, minmax(0, 1fr));
213
237
  }
214
238
  .media-center-discover__section-content--5 :global(> :nth-child(n + 5)) {
215
- display: none;
239
+ display: var(--_section-content--more-items--display);
216
240
  }
217
241
  }
218
242
  @container (width < 768px) {
@@ -221,7 +245,7 @@ const localization = $derived(new DiscoverViewLocalization(context.locale));
221
245
  grid-template-columns: repeat(3, minmax(0, 1fr));
222
246
  }
223
247
  .media-center-discover__section-content--5 :global(> :nth-child(n + 4)) {
224
- display: none;
248
+ display: var(--_section-content--more-items--display);
225
249
  }
226
250
  }
227
251
  @container (width < 576px) {
@@ -233,6 +257,6 @@ const localization = $derived(new DiscoverViewLocalization(context.locale));
233
257
  display: block;
234
258
  }
235
259
  .media-center-discover__section-content--5 :global(> :nth-child(n + 5)) {
236
- display: none;
260
+ display: var(--_section-content--more-items--display);
237
261
  }
238
262
  }</style>
@@ -11,7 +11,7 @@ let { context } = $props();
11
11
  <button
12
12
  type="button"
13
13
  class="media-center-footer__button"
14
- class:media-center-footer__button--active={context.feedHandler.active}
14
+ class:media-center-footer__button--active={context.postsFeedHandler.activated || context.streamsFeedHandler.activated}
15
15
  onclick={() => context.playRootFeed()}>
16
16
  <Icon src={IconPhone} />
17
17
  </button>
@@ -142,8 +142,12 @@ const styles = $derived.by(() => {
142
142
  </button>
143
143
  <div class="media-center-header__scroll-area" use:onScrollMounted use:horizontalWheelScroll onscroll={handleScrollingAreaScroll}>
144
144
  <div class="media-center-header__scroll-area-block">
145
- <button type="button" class="control-button" class:control-button--active={context.feedHandler.active} onclick={() => context.playRootFeed()}>
146
- <span class="control-button__icon" class:control-button__icon--active={context.feedHandler.active}>
145
+ <button
146
+ type="button"
147
+ class="control-button"
148
+ class:control-button--active={context.postsFeedHandler.activated || context.streamsFeedHandler.activated}
149
+ onclick={() => context.playRootFeed()}>
150
+ <span class="control-button__icon" class:control-button__icon--active={context.postsFeedHandler.activated || context.streamsFeedHandler.activated}>
147
151
  <Icon src={IconPhone} />
148
152
  </span>
149
153
  <span class="control-button__value">
@@ -177,9 +181,9 @@ const styles = $derived.by(() => {
177
181
  class:control-button--active={context.momentsFeedHandler.active}
178
182
  class:control-button--indicator={context.momentsFeedHandler.hasUnwatchedMoments}
179
183
  onclick={() => context.playMoments()}>
180
- <span class="control-button__value">
181
- {localization.buttons.moments}
182
- </span>
184
+ <span class="control-button__value">
185
+ {localization.buttons.moments}
186
+ </span>
183
187
  </button>
184
188
  {/if}
185
189
  <button type="button" class="control-button" class:control-button--active={false} onclick={() => ({})}>
@@ -260,8 +264,8 @@ const styles = $derived.by(() => {
260
264
  .media-center-header {
261
265
  --_media-center-header--button-color: var(--media-center-header--button-color, var(--sc-mc-color--button-player));
262
266
  --_media-center-header--button-color--inactive: var(
263
- --media-center-header--button-color--inactive,
264
- rgb(from var(--_media-center-header--button-color, var(--sc-mc-color--button-player)) r g b / 60%)
267
+ --media-center-header--button-color--inactive,
268
+ rgb(from var(--_media-center-header--button-color, var(--sc-mc-color--button-player)) r g b / 60%)
265
269
  );
266
270
  --_media-center-header--button-indicator: var(--media-center-header--button-indicator, var(--sc-mc-color--icon-success));
267
271
  padding-top: 2.1875rem;