@streamscloud/embeddable 10.1.2 → 11.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 (112) hide show
  1. package/dist/ads/ad-card/cmp.ad-card.svelte +27 -7
  2. package/dist/ads/ad-card/cmp.ad-card.svelte.d.ts +5 -0
  3. package/dist/content-player/cmp.content-player.svelte +30 -40
  4. package/dist/content-player/content-player-config.svelte.d.ts +13 -2
  5. package/dist/content-player/content-player-config.svelte.js +8 -5
  6. package/dist/content-player/content-player-settings.d.ts +12 -0
  7. package/dist/content-player/content-player-settings.js +12 -0
  8. package/dist/content-player/controls-and-attachments.svelte +25 -54
  9. package/dist/content-player/header.svelte +10 -132
  10. package/dist/content-player/header.svelte.d.ts +0 -4
  11. package/dist/content-player/overview-panel.svelte +22 -72
  12. package/dist/content-player/overview-panel.svelte.d.ts +30 -7
  13. package/dist/content-player/ui-manager.svelte.d.ts +2 -4
  14. package/dist/content-player/ui-manager.svelte.js +3 -5
  15. package/dist/media-center/config/internal-media-center-config.js +2 -1
  16. package/dist/media-center/config/operations.generated.d.ts +13 -0
  17. package/dist/media-center/config/operations.generated.js +20 -0
  18. package/dist/media-center/config/operations.graphql +13 -0
  19. package/dist/media-center/config/types.d.ts +13 -0
  20. package/dist/media-center/media-center/cmp.media-center.svelte +117 -348
  21. package/dist/media-center/media-center/cmp.media-center.svelte.d.ts +3 -1
  22. package/dist/media-center/media-center/{discover-panel-handler.svelte.d.ts → discover/discover-panel-handler.svelte.d.ts} +5 -6
  23. package/dist/media-center/media-center/{discover-panel-handler.svelte.js → discover/discover-panel-handler.svelte.js} +1 -8
  24. package/dist/media-center/media-center/discover/discover-panel-localization.d.ts +19 -0
  25. package/dist/media-center/media-center/discover/discover-panel-localization.js +78 -0
  26. package/dist/media-center/media-center/{discover-panel.svelte → discover/discover-panel.svelte} +18 -9
  27. package/dist/media-center/media-center/discover/discover-panel.svelte.d.ts +15 -0
  28. package/dist/media-center/media-center/discover/index.d.ts +2 -0
  29. package/dist/media-center/media-center/discover/index.js +2 -0
  30. package/dist/media-center/media-center/handlers/categories-handler.svelte.d.ts +21 -0
  31. package/dist/media-center/media-center/handlers/categories-handler.svelte.js +36 -0
  32. package/dist/media-center/media-center/handlers/feed-handler.svelte.d.ts +6 -0
  33. package/dist/media-center/media-center/handlers/feed-handler.svelte.js +12 -0
  34. package/dist/media-center/media-center/handlers/index.d.ts +2 -0
  35. package/dist/media-center/media-center/handlers/index.js +2 -0
  36. package/dist/media-center/media-center/header-footer/index.d.ts +3 -0
  37. package/dist/media-center/media-center/header-footer/index.js +3 -0
  38. package/dist/media-center/media-center/header-footer/media-center-footer.svelte +77 -0
  39. package/dist/media-center/media-center/header-footer/media-center-footer.svelte.d.ts +7 -0
  40. package/dist/media-center/media-center/header-footer/media-center-header-localization.d.ts +12 -0
  41. package/dist/media-center/media-center/header-footer/media-center-header-localization.js +40 -0
  42. package/dist/media-center/media-center/header-footer/media-center-header-mobile.svelte +91 -0
  43. package/dist/media-center/media-center/header-footer/media-center-header-mobile.svelte.d.ts +11 -0
  44. package/dist/media-center/media-center/header-footer/media-center-header.svelte +310 -0
  45. package/dist/media-center/media-center/header-footer/media-center-header.svelte.d.ts +13 -0
  46. package/dist/media-center/media-center/media-center-context.svelte.d.ts +50 -0
  47. package/dist/media-center/media-center/media-center-context.svelte.js +98 -0
  48. package/dist/media-center/media-center/{category-following-wrapper.svelte → menu/category-following-wrapper.svelte} +3 -2
  49. package/dist/media-center/media-center/{category-following-wrapper.svelte.d.ts → menu/category-following-wrapper.svelte.d.ts} +2 -2
  50. package/dist/media-center/media-center/menu/index.d.ts +2 -0
  51. package/dist/media-center/media-center/menu/index.js +2 -0
  52. package/dist/media-center/media-center/menu/menu-localization.d.ts +19 -0
  53. package/dist/media-center/media-center/menu/menu-localization.js +78 -0
  54. package/dist/media-center/media-center/menu/menu.svelte +345 -0
  55. package/dist/media-center/media-center/menu/menu.svelte.d.ts +14 -0
  56. package/dist/media-center/media-center/menu/popular-streams-panel-handler.svelte.d.ts +10 -0
  57. package/dist/media-center/media-center/menu/popular-streams-panel-handler.svelte.js +26 -0
  58. package/dist/media-center/media-center/providers/index.d.ts +2 -0
  59. package/dist/media-center/media-center/providers/index.js +2 -0
  60. package/dist/media-center/media-center/providers/post-player-provider-generator.d.ts +8 -0
  61. package/dist/media-center/media-center/{post-player-provider-generator.js → providers/post-player-provider-generator.js} +3 -3
  62. package/dist/media-center/media-center/{streams-player-provider-generator.d.ts → providers/streams-player-provider-generator.d.ts} +2 -2
  63. package/dist/media-center/media-center/{streams-player-provider-generator.js → providers/streams-player-provider-generator.js} +2 -2
  64. package/dist/media-center/media-center/streams-in-category/index.d.ts +2 -0
  65. package/dist/media-center/media-center/streams-in-category/index.js +2 -0
  66. 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} +4 -4
  67. 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
  68. package/dist/media-center/media-center/{streams-in-category-panel.svelte → streams-in-category/streams-in-category-panel.svelte} +1 -1
  69. 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
  70. package/dist/media-center/media-center/types.d.ts +1 -1
  71. package/dist/media-center/model/types.d.ts +7 -6
  72. package/dist/posts/attachments/cmp.attachments.svelte +5 -3
  73. package/dist/posts/attachments/cmp.attachments.svelte.d.ts +6 -0
  74. package/dist/posts/controls/cmp.controls.svelte +3 -3
  75. package/dist/posts/controls/cmp.controls.svelte.d.ts +2 -0
  76. package/dist/posts/post-viewer/cmp.post-viewer.svelte +3 -1
  77. package/dist/posts/post-viewer/cmp.post-viewer.svelte.d.ts +4 -0
  78. package/dist/products/product-card/cmp.product-card.svelte +35 -11
  79. package/dist/products/product-card/cmp.product-card.svelte.d.ts +5 -0
  80. package/dist/streams/data-loaders/mapper.js +0 -5
  81. package/dist/streams/data-loaders/operations.generated.d.ts +0 -12
  82. package/dist/streams/data-loaders/operations.generated.js +0 -26
  83. package/dist/streams/data-loaders/operations.graphql +0 -6
  84. package/dist/streams/layout/element-views/cmp.short-video-stream-element.svelte +2 -1
  85. package/dist/streams/layout/element-views/cmp.short-video-stream-element.svelte.d.ts +4 -0
  86. package/dist/streams/stream-card/cmp.stream-card.svelte +5 -5
  87. package/dist/streams/streams-player/index.js +1 -1
  88. package/dist/streams/streams-player/stream-overview.svelte +6 -96
  89. package/dist/streams/streams-player/stream-overview.svelte.d.ts +0 -4
  90. package/dist/streams/streams-player/stream-player-localization.d.ts +0 -1
  91. package/dist/streams/streams-player/stream-player-localization.js +0 -6
  92. package/dist/streams/streams-player/streams-player-view.svelte +0 -2
  93. package/dist/streams/streams-player/types.d.ts +0 -4
  94. package/dist/ui/icon/cmp.icon.svelte +3 -2
  95. package/dist/ui/player/button/cmp.player-button.svelte +17 -5
  96. package/dist/ui/player/button/cmp.player-button.svelte.d.ts +3 -0
  97. package/dist/ui/player/button/cmp.player-buttons-group.svelte +20 -5
  98. package/dist/ui/player/button/cmp.player-buttons-group.svelte.d.ts +2 -0
  99. package/dist/ui/player/button/types.d.ts +2 -0
  100. package/package.json +1 -1
  101. package/dist/content-player/content-player-localization.d.ts +0 -6
  102. package/dist/content-player/content-player-localization.js +0 -15
  103. package/dist/media-center/media-center/desktop-categories-selector.svelte +0 -132
  104. package/dist/media-center/media-center/desktop-categories-selector.svelte.d.ts +0 -12
  105. package/dist/media-center/media-center/discover-panel.svelte.d.ts +0 -15
  106. package/dist/media-center/media-center/media-center-handler.svelte.d.ts +0 -28
  107. package/dist/media-center/media-center/media-center-handler.svelte.js +0 -73
  108. package/dist/media-center/media-center/media-center-localization.d.ts +0 -10
  109. package/dist/media-center/media-center/media-center-localization.js +0 -39
  110. package/dist/media-center/media-center/mobile-controls-panel.svelte +0 -268
  111. package/dist/media-center/media-center/mobile-controls-panel.svelte.d.ts +0 -20
  112. package/dist/media-center/media-center/post-player-provider-generator.d.ts +0 -8
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@streamscloud/embeddable",
3
- "version": "10.1.2",
3
+ "version": "11.0.0",
4
4
  "author": "StreamsCloud",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1,6 +0,0 @@
1
- import { type Locale } from '../core/locale';
2
- export declare class ContentPlayerLocalization {
3
- overviewLabel: string;
4
- locale: Locale;
5
- constructor(locale: Locale);
6
- }
@@ -1,15 +0,0 @@
1
- import {} from '../core/locale';
2
- export class ContentPlayerLocalization {
3
- overviewLabel;
4
- locale;
5
- constructor(locale) {
6
- this.overviewLabel = loc.overviewLabel[locale];
7
- this.locale = locale;
8
- }
9
- }
10
- const loc = {
11
- overviewLabel: {
12
- en: 'Overview',
13
- no: 'Oversikt'
14
- }
15
- };
@@ -1,132 +0,0 @@
1
- <script lang="ts">import { Dropdown } from '../../ui/dropdown';
2
- import { Icon } from '../../ui/icon';
3
- import { default as ButtonWrapper } from './category-following-wrapper.svelte';
4
- import IconTextColumnThree from '@fluentui/svg-icons/icons/text_column_three_20_regular.svg?raw';
5
- let { handler, followingHandler, on } = $props();
6
- </script>
7
-
8
- <Dropdown>
9
- {#snippet trigger()}
10
- <button type="button" class="desktop-categories-trigger">
11
- <Icon src={IconTextColumnThree} />
12
- </button>
13
- {/snippet}
14
- <div class="desktop-categories-selector">
15
- {#each handler.categories as category (category.id)}
16
- <div>
17
- <ButtonWrapper categoryId={category.id} followingHandler={followingHandler}>
18
- <button
19
- type="button"
20
- class="desktop-categories-selector__category"
21
- class:desktop-categories-selector__category--active={handler.selectedCategoryId === category.id}
22
- title={category.name}
23
- onclick={() => on.categorySelected(category.id)}>{category.name}</button>
24
- </ButtonWrapper>
25
-
26
- {#if category.children.length > 0}
27
- <div class="desktop-categories-selector__sub-categories">
28
- {#each category.children as subcategory (subcategory.id)}
29
- <ButtonWrapper categoryId={subcategory.id} followingHandler={followingHandler}>
30
- <button
31
- type="button"
32
- class="desktop-categories-selector__sub-category"
33
- class:desktop-categories-selector__sub-category--active={handler.selectedCategoryId === subcategory.id}
34
- title={subcategory.name}
35
- onclick={() => on.categorySelected(subcategory.id)}>{subcategory.name}</button>
36
- </ButtonWrapper>
37
- {/each}
38
- </div>
39
- {/if}
40
- </div>
41
- {/each}
42
- </div>
43
- </Dropdown>
44
-
45
- <style>@keyframes fadeIn {
46
- 0% {
47
- opacity: 1;
48
- }
49
- 50% {
50
- opacity: 0.4;
51
- }
52
- 100% {
53
- opacity: 1;
54
- }
55
- }
56
- .desktop-categories-trigger {
57
- pointer-events: auto;
58
- padding: 0.40625rem 0.75rem;
59
- line-height: 0;
60
- white-space: nowrap;
61
- flex: 0 0 auto;
62
- border-radius: 0.875rem;
63
- background-color: rgba(0, 0, 0, 0.6);
64
- color: #f2f2f2;
65
- transition: background 0.3s ease-in-out;
66
- -webkit-user-drag: none;
67
- user-select: none;
68
- }
69
- .desktop-categories-trigger :global([contenteditable]) {
70
- user-select: text;
71
- }
72
- .desktop-categories-trigger:hover:not(.desktop-categories-trigger--active) {
73
- background-color: rgba(0, 0, 0, 0.9);
74
- }
75
-
76
- .desktop-categories-selector {
77
- background-color: rgba(0, 0, 0, 0.9);
78
- border-radius: 0.75rem;
79
- padding: 1rem 1.5rem;
80
- display: flex;
81
- flex-direction: column;
82
- gap: 0.75rem;
83
- width: 33.75rem;
84
- max-width: calc(100vw - 2rem);
85
- }
86
- .desktop-categories-selector__category {
87
- color: #ffffff;
88
- font-size: 0.875rem;
89
- font-weight: 500;
90
- text-align: left;
91
- padding: 0.375rem 0;
92
- max-width: 7.5rem;
93
- text-overflow: ellipsis;
94
- width: 100%;
95
- white-space: nowrap;
96
- overflow: hidden;
97
- width: max-content;
98
- -webkit-user-drag: none;
99
- user-select: none;
100
- }
101
- .desktop-categories-selector__category :global([contenteditable]) {
102
- user-select: text;
103
- }
104
- .desktop-categories-selector__category:hover, .desktop-categories-selector__category--active {
105
- color: #5a8dec;
106
- }
107
- .desktop-categories-selector__sub-categories {
108
- display: flex;
109
- flex-wrap: wrap;
110
- gap: 1.5rem;
111
- }
112
- .desktop-categories-selector__sub-category {
113
- color: #d1d5db;
114
- font-size: 0.75rem;
115
- font-weight: 500;
116
- text-align: left;
117
- padding: 0.375rem 0;
118
- max-width: 7.5rem;
119
- text-overflow: ellipsis;
120
- width: 100%;
121
- white-space: nowrap;
122
- overflow: hidden;
123
- width: max-content;
124
- -webkit-user-drag: none;
125
- user-select: none;
126
- }
127
- .desktop-categories-selector__sub-category :global([contenteditable]) {
128
- user-select: text;
129
- }
130
- .desktop-categories-selector__sub-category:hover, .desktop-categories-selector__sub-category--active {
131
- color: #5a8dec;
132
- }</style>
@@ -1,12 +0,0 @@
1
- import type { IContentCategoryFollowingHandler } from '..';
2
- import type { MediaCenterHandler } from './media-center-handler.svelte';
3
- type Props = {
4
- handler: MediaCenterHandler;
5
- followingHandler?: IContentCategoryFollowingHandler;
6
- on: {
7
- categorySelected: (categoryId: string) => void;
8
- };
9
- };
10
- declare const DesktopCategoriesSelector: import("svelte").Component<Props, {}, "">;
11
- type DesktopCategoriesSelector = ReturnType<typeof DesktopCategoriesSelector>;
12
- export default DesktopCategoriesSelector;
@@ -1,15 +0,0 @@
1
- import type { PostPlayerModel } from '../../posts/posts-player';
2
- import type { StreamPlayerModel } from '../../streams/streams-player';
3
- import { DiscoverPanelHandler } from './discover-panel-handler.svelte';
4
- import { MediaCenterLocalization } from './media-center-localization';
5
- type Props = {
6
- handler: DiscoverPanelHandler;
7
- localization: MediaCenterLocalization;
8
- on: {
9
- shortVideoSelected: (shortVideo: PostPlayerModel) => void;
10
- streamSelected: (stream: StreamPlayerModel) => void;
11
- };
12
- };
13
- declare const DiscoverPanel: import("svelte").Component<Props, {}, "">;
14
- type DiscoverPanel = ReturnType<typeof DiscoverPanel>;
15
- export default DiscoverPanel;
@@ -1,28 +0,0 @@
1
- import type { IMediaCenterConfig } from '../config/types';
2
- import type { MediaCenterCategoryData } from './types';
3
- export declare class MediaCenterHandler {
4
- private readonly config;
5
- initializing: boolean;
6
- readonly categories: {
7
- id: string;
8
- name: string;
9
- children: {
10
- id: string;
11
- name: string;
12
- parentId: string;
13
- }[];
14
- }[];
15
- controlsPanelSelectedCategory: {
16
- id: string;
17
- childName: string | null;
18
- } | null;
19
- readonly logo: string | null;
20
- readonly targetData: import("../config/types").MediaCenterTargetDataModel | null;
21
- private _selectedCategoryId;
22
- private _mediaCenterConfig;
23
- constructor(config: IMediaCenterConfig | null);
24
- get selectedCategoryId(): string | null;
25
- set selectedCategoryId(value: string | null);
26
- getCategoryData: (categoryId: string) => MediaCenterCategoryData | null;
27
- private init;
28
- }
@@ -1,73 +0,0 @@
1
- export class MediaCenterHandler {
2
- config;
3
- initializing = $state(true);
4
- categories = $derived.by(() => {
5
- const allCategories = this._mediaCenterConfig?.contentCategories || [];
6
- if (allCategories.length === 0) {
7
- return [];
8
- }
9
- return allCategories
10
- .filter((c) => !c.parentId)
11
- .map((c) => {
12
- const childCategories = allCategories.filter((cc) => cc.parentId === c.id);
13
- const children = childCategories.map((cc) => ({ id: cc.id, name: cc.name, parentId: cc.parentId }));
14
- return { id: c.id, name: c.name, children };
15
- });
16
- });
17
- controlsPanelSelectedCategory = $derived.by(() => {
18
- if (!this.selectedCategoryId) {
19
- return null;
20
- }
21
- const selectedCategoryData = this.getCategoryData(this.selectedCategoryId);
22
- if (!selectedCategoryData) {
23
- return null;
24
- }
25
- if (!selectedCategoryData.parentId) {
26
- return { id: selectedCategoryData.id, childName: null };
27
- }
28
- return { id: selectedCategoryData.parentId, childName: selectedCategoryData.name };
29
- });
30
- logo = $derived.by(() => this._mediaCenterConfig?.logo || null);
31
- targetData = $derived.by(() => this._mediaCenterConfig?.targetData || null);
32
- _selectedCategoryId = $state.raw(null);
33
- _mediaCenterConfig = $state.raw(null);
34
- constructor(config) {
35
- this.config = config;
36
- this.init();
37
- }
38
- get selectedCategoryId() {
39
- return this._selectedCategoryId;
40
- }
41
- set selectedCategoryId(value) {
42
- this._selectedCategoryId = value;
43
- }
44
- getCategoryData = (categoryId) => {
45
- if (!this._mediaCenterConfig) {
46
- return null;
47
- }
48
- const category = this._mediaCenterConfig.contentCategories.find((c) => c.id === categoryId);
49
- if (!category) {
50
- return null;
51
- }
52
- const parentCategory = category.parentId ? this._mediaCenterConfig.contentCategories.find((c) => c.id === category.parentId) : null;
53
- const selectedCategoryData = {
54
- id: category.id,
55
- name: category.name,
56
- parentId: parentCategory?.id,
57
- parentName: parentCategory?.name
58
- };
59
- return selectedCategoryData;
60
- };
61
- init = async () => {
62
- if (!this.config) {
63
- this.initializing = false;
64
- return;
65
- }
66
- try {
67
- this._mediaCenterConfig = await this.config.getConfig();
68
- }
69
- finally {
70
- this.initializing = false;
71
- }
72
- };
73
- }
@@ -1,10 +0,0 @@
1
- import { type Locale } from '../../core/locale';
2
- export declare class MediaCenterLocalization {
3
- shortVideosSectionTitle: string;
4
- streamsSectionTitle: string;
5
- overviewLabel: string;
6
- discoverButton: string;
7
- membersLabel: (count: number) => string;
8
- locale: Locale;
9
- constructor(locale: Locale);
10
- }
@@ -1,39 +0,0 @@
1
- import {} from '../../core/locale';
2
- export class MediaCenterLocalization {
3
- shortVideosSectionTitle;
4
- streamsSectionTitle;
5
- overviewLabel;
6
- discoverButton;
7
- membersLabel;
8
- locale;
9
- constructor(locale) {
10
- this.shortVideosSectionTitle = loc.shortVideosSectionTitle[locale];
11
- this.streamsSectionTitle = loc.streamsSectionTitle[locale];
12
- this.overviewLabel = loc.overviewLabel[locale];
13
- this.discoverButton = loc.discoverButton[locale];
14
- this.membersLabel = loc.membersLabel[locale];
15
- this.locale = locale;
16
- }
17
- }
18
- const loc = {
19
- shortVideosSectionTitle: {
20
- en: 'Popular Short Videos',
21
- no: 'Populære korte videoer'
22
- },
23
- streamsSectionTitle: {
24
- en: 'Latest Streams',
25
- no: 'Siste Streams'
26
- },
27
- overviewLabel: {
28
- en: 'Overview',
29
- no: 'Oversikt'
30
- },
31
- discoverButton: {
32
- en: 'Discover',
33
- no: 'Oppdag'
34
- },
35
- membersLabel: {
36
- en: (count) => (count === 1 ? `Member` : `Members`),
37
- no: (count) => (count === 1 ? `Medlem` : `Medlemmer`)
38
- }
39
- };
@@ -1,268 +0,0 @@
1
- <script lang="ts">import { slideHorizontally } from '../../core/transitions';
2
- import { compactNumber } from '../../core/utils/compact-number';
3
- import { Icon } from '../../ui/icon';
4
- import { ImageRound } from '../../ui/image';
5
- import { LineClamp } from '../../ui/line-clamp';
6
- import { default as ButtonWrapper } from './category-following-wrapper.svelte';
7
- import { DiscoverPanelHandler } from './discover-panel-handler.svelte';
8
- import { MediaCenterLocalization } from './media-center-localization';
9
- import IconChevronDown from '@fluentui/svg-icons/icons/chevron_down_20_regular.svg?raw';
10
- import IconChevronRight from '@fluentui/svg-icons/icons/chevron_right_20_regular.svg?raw';
11
- import { slide } from 'svelte/transition';
12
- let { mediaCenterHandler, discoverHandler, followingHandler, localization, extraActions, on } = $props();
13
- const target = $derived.by(() => mediaCenterHandler.targetData);
14
- const generateCategoriesMap = () => {
15
- const expanded = {};
16
- mediaCenterHandler.categories.forEach((c) => {
17
- const isSelfSelected = mediaCenterHandler.selectedCategoryId === c.id;
18
- const hasSelectedChild = c.children.some((ch) => ch.id === mediaCenterHandler.selectedCategoryId);
19
- expanded[c.id] = isSelfSelected || hasSelectedChild;
20
- });
21
- return expanded;
22
- };
23
- const categoriesExpandedMap = $state(generateCategoriesMap());
24
- const handleCategoryExpaned = (e, categoryId) => {
25
- e.stopPropagation();
26
- categoriesExpandedMap[categoryId] = !categoriesExpandedMap[categoryId];
27
- };
28
- </script>
29
-
30
- <div class="mobile-controls-panel" transition:slideHorizontally|local onclick={(e) => e.stopPropagation()} onkeydown={() => {}} role="none">
31
- {#if target}
32
- <div class="media-center-target">
33
- <div class="media-center-target__image">
34
- <ImageRound src={target.image} />
35
- </div>
36
- <div class="media-center-target__info">
37
- <div class="media-center-target__name">
38
- <LineClamp maxLines={1}>
39
- {target.name}
40
- </LineClamp>
41
- </div>
42
- {#if target.membersCount}
43
- <LineClamp maxLines={1}>
44
- <div class="media-center-target__members">
45
- <span class="media-center-target__members-count">
46
- {compactNumber(target.membersCount, { locale: localization.locale })}
47
- </span>
48
- <span class="media-center-target__members-label">
49
- {localization.membersLabel(target.membersCount)}
50
- </span>
51
- </div>
52
- </LineClamp>
53
- {/if}
54
- </div>
55
- </div>
56
- {/if}
57
- <div class="mobile-controls-panel__tree">
58
- {#each extraActions as action (action)}
59
- <button
60
- type="button"
61
- class="selector-item"
62
- onclick={() => {
63
- action.callback();
64
- on.externalActionExecuted();
65
- }}>
66
- <span class="selector-item__text">
67
- {action.name}
68
- </span>
69
- </button>
70
- {/each}
71
- <button type="button" class="selector-item" onclick={() => on.toggleDiscover()}>
72
- <span class="selector-item__text" class:selector-item__text--active={discoverHandler.activated}>
73
- {localization.discoverButton}
74
- </span>
75
- </button>
76
- {#each mediaCenterHandler.categories as category (category.id)}
77
- <div class="selector-item">
78
- <div
79
- class="selector-item__text"
80
- class:selector-item__text--active={!discoverHandler.activated && mediaCenterHandler.selectedCategoryId === category.id}
81
- onclick={() => on.categorySelected(category.id)}
82
- onkeydown={() => {}}
83
- role="button"
84
- tabindex="0">
85
- {category.name}
86
- </div>
87
- <ButtonWrapper categoryId={category.id} followingHandler={followingHandler} invertedOrientation={true}>
88
- <button
89
- type="button"
90
- class="selector-item__collapser"
91
- class:selector-item__collapser--hidden={!category.children.length}
92
- onclick={(e) => handleCategoryExpaned(e, category.id)}>
93
- {#if categoriesExpandedMap[category.id]}
94
- <Icon src={IconChevronDown} />
95
- {:else}
96
- <Icon src={IconChevronRight} />
97
- {/if}
98
- </button>
99
- </ButtonWrapper>
100
- </div>
101
- {#if categoriesExpandedMap[category.id]}
102
- <div transition:slide|local>
103
- {#each category.children as subcategory (subcategory.id)}
104
- <div class="selector-item selector-item--child">
105
- <div
106
- class="selector-item__text"
107
- class:selector-item__text--active={!discoverHandler.activated && mediaCenterHandler.selectedCategoryId === subcategory.id}
108
- onclick={() => on.categorySelected(subcategory.id)}
109
- onkeydown={() => {}}
110
- role="button"
111
- tabindex="0">
112
- {subcategory.name}
113
- </div>
114
- <ButtonWrapper categoryId={subcategory.id} followingHandler={followingHandler} invertedOrientation={true}>
115
- <button type="button" class="selector-item__collapser selector-item__collapser--hidden">
116
- <Icon src={IconChevronRight} />
117
- </button>
118
- </ButtonWrapper>
119
- </div>
120
- {/each}
121
- </div>
122
- {/if}
123
- {/each}
124
- </div>
125
- </div>
126
-
127
- <style>@keyframes fadeIn {
128
- 0% {
129
- opacity: 1;
130
- }
131
- 50% {
132
- opacity: 0.4;
133
- }
134
- 100% {
135
- opacity: 1;
136
- }
137
- }
138
- .mobile-controls-panel {
139
- background: #1c1c1c;
140
- height: 100%;
141
- min-height: 100%;
142
- max-height: 100%;
143
- width: 100%;
144
- min-width: 100%;
145
- max-width: 100%;
146
- display: flex;
147
- gap: 2.1875rem;
148
- flex-direction: column;
149
- min-height: 0;
150
- padding: 0.9375rem 1.25rem;
151
- padding-right: 0.75rem;
152
- overflow: hidden;
153
- }
154
- .mobile-controls-panel__tree {
155
- display: flex;
156
- flex-direction: column;
157
- flex: 1;
158
- overflow-y: auto;
159
- overscroll-behavior: contain;
160
- --_cross-browser-scrollbar--thumb-color: transparent;
161
- --_cross-browser-scrollbar--track-color: transparent;
162
- }
163
- .mobile-controls-panel__tree:hover {
164
- --_cross-browser-scrollbar--thumb-color: var(--scrollbar--thumb-color, #7d7d7d);
165
- --_cross-browser-scrollbar--track-color: var(--scrollbar--track-color, transparent);
166
- }
167
- .mobile-controls-panel__tree::-webkit-scrollbar {
168
- width: 6px;
169
- height: 6px;
170
- }
171
- .mobile-controls-panel__tree::-webkit-scrollbar-track {
172
- background: var(--_cross-browser-scrollbar--track-color);
173
- border-radius: 100vw;
174
- }
175
- .mobile-controls-panel__tree::-webkit-scrollbar-thumb {
176
- background: var(--_cross-browser-scrollbar--thumb-color);
177
- border-radius: 100vw;
178
- }
179
- @supports (scrollbar-color: transparent transparent) {
180
- .mobile-controls-panel__tree {
181
- scrollbar-color: var(--_cross-browser-scrollbar--thumb-color) var(--_cross-browser-scrollbar--track-color);
182
- scrollbar-width: thin;
183
- }
184
- }
185
-
186
- .selector-item {
187
- display: flex;
188
- -webkit-user-drag: none;
189
- user-select: none;
190
- --_selector-item--text-size: 1.125rem;
191
- }
192
- .selector-item :global([contenteditable]) {
193
- user-select: text;
194
- }
195
- .selector-item--child {
196
- padding-left: 1.25rem;
197
- --_selector-item--text-size: 0.875rem;
198
- }
199
- .selector-item__text {
200
- flex: 1;
201
- max-width: 100%;
202
- color: #ffffff;
203
- font-size: var(--_selector-item--text-size);
204
- line-height: 1.5;
205
- font-weight: 400;
206
- text-align: left;
207
- padding: 0.5rem 0;
208
- text-overflow: ellipsis;
209
- width: 100%;
210
- white-space: nowrap;
211
- overflow: hidden;
212
- transition: text-shadow 120ms ease;
213
- }
214
- .selector-item__text:hover, .selector-item__text--active {
215
- text-shadow: 0 0 0 currentColor, 0.03em 0 currentColor;
216
- letter-spacing: 0.0125em;
217
- }
218
- .selector-item__collapser {
219
- --icon--color: #ffffff;
220
- padding: 0.5rem;
221
- }
222
- .selector-item__collapser--hidden {
223
- visibility: hidden;
224
- }
225
-
226
- .media-center-target {
227
- display: flex;
228
- align-items: center;
229
- gap: 0.5rem;
230
- margin-bottom: 0.5rem;
231
- }
232
- .media-center-target__image {
233
- width: 4rem;
234
- min-width: 4rem;
235
- max-width: 4rem;
236
- height: 4rem;
237
- min-height: 4rem;
238
- max-height: 4rem;
239
- --image--rounded--inner--border-width: 0;
240
- --image--rounded--outer--border-color: #f2f2f3;
241
- --image--rounded--outer--border-width: 1px;
242
- }
243
- .media-center-target__info {
244
- display: flex;
245
- flex-direction: column;
246
- color: #ffffff;
247
- }
248
- .media-center-target__name {
249
- font-size: 1.125rem;
250
- line-height: 1.75rem;
251
- font-weight: 600;
252
- }
253
- .media-center-target__members {
254
- display: flex;
255
- align-items: flex-end;
256
- gap: 0.5rem;
257
- }
258
- .media-center-target__members-count {
259
- font-size: 0.9375rem;
260
- line-height: 1;
261
- font-weight: 500;
262
- }
263
- .media-center-target__members-label {
264
- font-size: 0.75rem;
265
- line-height: 1;
266
- font-weight: 400;
267
- color: #d1d5db;
268
- }</style>
@@ -1,20 +0,0 @@
1
- import type { IContentCategoryFollowingHandler } from '..';
2
- import type { ExtraActionDefinition } from '../model/types';
3
- import { DiscoverPanelHandler } from './discover-panel-handler.svelte';
4
- import type { MediaCenterHandler } from './media-center-handler.svelte';
5
- import { MediaCenterLocalization } from './media-center-localization';
6
- type Props = {
7
- mediaCenterHandler: MediaCenterHandler;
8
- discoverHandler: DiscoverPanelHandler;
9
- followingHandler?: IContentCategoryFollowingHandler;
10
- localization: MediaCenterLocalization;
11
- extraActions: ExtraActionDefinition[];
12
- on: {
13
- categorySelected: (categoryId: string) => void;
14
- toggleDiscover: () => void;
15
- externalActionExecuted: () => void;
16
- };
17
- };
18
- declare const MobileControlsPanel: import("svelte").Component<Props, {}, "">;
19
- type MobileControlsPanel = ReturnType<typeof MobileControlsPanel>;
20
- export default MobileControlsPanel;
@@ -1,8 +0,0 @@
1
- import type { PostPlayerModel } from '../../posts/posts-player';
2
- import type { IFeedPlayerDataProvider } from '../../ui/player/providers';
3
- import type { IMediaCenterConfig } from '../config/types';
4
- export declare const makePostPlayerItemsProvider: (data: {
5
- config: IMediaCenterConfig;
6
- categoryId?: string;
7
- prefetchedItems?: PostPlayerModel[];
8
- }) => IFeedPlayerDataProvider<PostPlayerModel>;