@tivio/sdk-react 9.8.0 → 10.1.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.
@@ -1,17 +1,14 @@
1
- import { AD_SERVICE_PROXY_NAME } from '@tivio/common';
2
1
  import type { ComponentType } from 'react';
3
- import type dayjs from 'dayjs';
4
2
  import { DocumentReference } from '@firebase/firestore-types';
5
3
  import type duration from 'dayjs/plugin/duration';
6
4
  import type { default as firebase_2 } from '@firebase/app-types';
7
5
  import type { default as firebase_3 } from 'firebase';
8
6
  import { FunctionComponentElement } from 'react';
9
7
  import type { GeoPoint } from '@firebase/firestore-types';
10
- import type { google } from '@alugha/ima';
11
8
  import { OperatingSystem } from 'detect-browser';
12
9
  import type { PaletteType } from '@material-ui/core';
13
10
  import { default as React_2 } from 'react';
14
- import { RecommendationsQuery } from '@algolia/recommend';
11
+ import type { RecommendationsQuery } from '@algolia/recommend';
15
12
  import type { TagManagerArgs } from 'react-gtm-module';
16
13
  import type { Timestamp } from '@firebase/firestore-types';
17
14
 
@@ -36,8 +33,6 @@ declare interface actualPriceDetails {
36
33
  currency?: primaSupportedCurrency;
37
34
  }
38
35
 
39
- export { AD_SERVICE_PROXY_NAME }
40
-
41
36
  export declare type AdBannerScene = InteractiveWidgetSceneBase<InteractiveWidgetSceneTemplateType.AD_BANNER>;
42
37
 
43
38
  export declare type AddEditCommentResponse = {
@@ -89,6 +84,14 @@ export declare interface AdExternal {
89
84
  skip: () => void;
90
85
  }
91
86
 
87
+ /**
88
+ * External information of Ad video.
89
+ * @public
90
+ */
91
+ export declare interface AdExternals {
92
+ creativeId: string;
93
+ }
94
+
92
95
  /**
93
96
  * @public
94
97
  */
@@ -104,8 +107,6 @@ export declare type AdMetadata = {
104
107
  isSkippable: boolean;
105
108
  order: number | null;
106
109
  totalCount: number | null;
107
- adPlacementStrategy: AdPlacementStrategy;
108
- customAdMetadata?: Record<string, unknown>;
109
110
  skip: () => void;
110
111
  } | null;
111
112
 
@@ -119,10 +120,7 @@ export declare interface AdPackInfo {
119
120
  total: number;
120
121
  }
121
122
 
122
- export declare type AdPlacementStrategy = 'preroll' | 'midroll' | 'postroll' | 'replacement';
123
-
124
123
  export declare interface AdSegment {
125
- adPlacementStrategy: AdPlacementStrategy;
126
124
  id: string;
127
125
  /**
128
126
  * @deprecated alias to secondsToEnd * 1000
@@ -187,7 +185,6 @@ export declare interface AdSourceActions {
187
185
  */
188
186
  export declare interface AdSourceInterface extends CommonSourceInterface<SourceType.ADVERTISEMENT> {
189
187
  adType: AdType;
190
- adPlacementStrategy: AdPlacementStrategy;
191
188
  durationMs: number;
192
189
  skipDelayMs: number | null;
193
190
  /**
@@ -227,10 +224,6 @@ export declare interface AdSourceInterface extends CommonSourceInterface<SourceT
227
224
  skipAll(): void;
228
225
  onRemainingTimeChanged(ms: number): void;
229
226
  click(): void;
230
- /**
231
- * Rich IMA ad metadata including customAdMetadata (only available for IMA ads)
232
- */
233
- imaAdMetadata?: any;
234
227
  }
235
228
 
236
229
  /**
@@ -238,7 +231,6 @@ export declare interface AdSourceInterface extends CommonSourceInterface<SourceT
238
231
  */
239
232
  export declare interface AdSourceParams extends CommonSourceParams<SourceType.ADVERTISEMENT> {
240
233
  id: string;
241
- adPlacementStrategy: AdPlacementStrategy;
242
234
  adType?: AdType;
243
235
  actions?: AdSourceActions | null;
244
236
  apiFramework?: VastApiFramework | null;
@@ -329,7 +321,9 @@ export declare enum AnalyticsConversionPage {
329
321
  Redeem = "redeem",
330
322
  Referral = "referral",
331
323
  Pair = "pair",
332
- Search = "search"
324
+ Search = "search",
325
+ QerkoPayment = "qerko-payment",
326
+ SubscriptionCard = "subscription-card"
333
327
  }
334
328
 
335
329
  /**
@@ -347,6 +341,31 @@ export declare enum AnalyticsConversionTargetBase {
347
341
  Monetization = "monetization"
348
342
  }
349
343
 
344
+ export declare enum AnalyticsElementId {
345
+ BTN_LOGIN = "stargaze-btn-login",
346
+ BTN_REGISTRATION = "stargaze-btn-registration",
347
+ BTN_SUBSCRIBE = "stargaze-btn-subscribe",
348
+ BTN_FOLLOW = "stargaze-btn-follow",
349
+ BTN_CHOOSE_SUBSCRIPTION = "stargaze-btn-choose-subscription",
350
+ BTN_CANCEL_SUBSCRIPTION = "stargaze-btn-cancel-subscription",
351
+ BTN_RENEW_SUBSCRIPTION = "stargaze-btn-renew-subscription",
352
+ BTN_CHANGE_SUBSCRIPTION = "stargaze-btn-change-subscription",
353
+ BTN_GIFT_VOUCHER = "stargaze-btn-gift-voucher",
354
+ BTN_BUY_SUBSCRIPTION = "stargaze-btn-buy-subscription",
355
+ BTN_PAY_BY_APPLE_PAY = "stargaze-btn-pay-by-apple-pay",
356
+ BTN_PAY_BY_GOOGLE_PAY = "stargaze-btn-pay-by-google-pay",
357
+ BTN_PAY_BY_CARD = "stargaze-btn-pay-by-card",
358
+ BTN_PAY_WITH_PAYPAL = "stargaze-btn-pay-with-paypal",
359
+ BTN_PAY_BY_QERKO = "stargaze-btn-pay-by-qerko",
360
+ BTN_ACTIVATE_VOUCHER = "stargaze-btn-activate-voucher",
361
+ BTN_ACTIVATE_VOUCHER_OVERLAY = "stargaze-btn-activate-voucher-overlay",
362
+ BTN_ACTIVATE_VOUCHER_PROFILE = "stargaze-btn-activate-voucher-profile",
363
+ BTN_GO_TO_REDEEM_PAGE = "stargaze-btn-go-to-redeem-page",
364
+ BTN_REDEEM_CODE = "stargaze-btn-redeem-code",
365
+ BTN_CONTINUE_TO_PAYMENT = "stargaze-btn-continue-to-payment",
366
+ BTN_SELECT_MONETIZATION = "stargaze-btn-select-monetization"
367
+ }
368
+
350
369
  export declare interface AnalyticsInterface {
351
370
  reportAdvertisementPlay: (params: AdvertisementAnalyticParams) => void;
352
371
  reportAdvertisementProgress: () => void;
@@ -543,7 +562,7 @@ export declare interface AssetsField<TAsset extends ScalableAsset = ScalableAsse
543
562
  /**
544
563
  * @public
545
564
  */
546
- export declare type AssetType = 'circled' | 'landscape' | 'portrait' | 'square';
565
+ export declare type AssetType = 'banner' | 'circled' | 'landscape' | 'portrait' | 'square';
547
566
 
548
567
  declare type Attributes = {
549
568
  created: string;
@@ -630,10 +649,124 @@ export declare interface BannerProps {
630
649
  */
631
650
  export declare type BannerPropsPartial = Partial<BannerProps>;
632
651
 
652
+ /**
653
+ * Fields and methods common to every interactive widget (quiz, poll, …).
654
+ * Parameterized over the concrete answer type, state type, and scene type so
655
+ * more specialized widget interfaces can narrow each axis independently.
656
+ */
657
+ export declare interface BaseInteractiveWidget<TAnswer extends BaseQuestionAnswer = QuestionAnswer, TState extends InteractiveWidgetState = InteractiveWidgetState, TScene extends InteractiveWidgetScene = InteractiveWidgetScene> {
658
+ readonly id: string;
659
+ readonly name: string;
660
+ readonly path: string;
661
+ readonly type: InteractiveWidgetType;
662
+ readonly status: InteractiveWidgetStatus;
663
+ readonly questionsCount: number;
664
+ readonly currentAnswerId?: string;
665
+ readonly currentState: TState;
666
+ /**
667
+ * State delayed for end users, used to toggle scenes just like in OBS / host view.
668
+ */
669
+ readonly currentStateWithDelay: InteractiveWidgetCurrentStateWithDelay<TState>;
670
+ readonly currentQuestion: CurrentQuestion<TAnswer> | null;
671
+ readonly answers?: TAnswer[];
672
+ readonly questionIndex?: number;
673
+ readonly isSubmitted?: boolean;
674
+ readonly userRole: InteractiveWidgetRole;
675
+ readonly scenes: TScene[];
676
+ readonly activeScene: TScene | null;
677
+ readonly theme?: InteractiveWidgetTheme;
678
+ /**
679
+ * @remarks Always `false` for `PollWidget` — kept on the base to minimize
680
+ * disruption to existing consumers.
681
+ */
682
+ readonly isWaitingForStart: boolean;
683
+ answerQuestion(answerId: string): void;
684
+ submitAnswer(request: Pick<SubmitAnswerRequest, 'answerOptionId' | 'answerText'>): Promise<void>;
685
+ verifyJoinCode(joinCode: string, shouldJoinPlayer?: boolean): Promise<boolean>;
686
+ destroy(): void;
687
+ }
688
+
689
+ /**
690
+ * Fields shared by both quiz and poll answers.
691
+ */
692
+ export declare interface BaseQuestionAnswer {
693
+ id: string;
694
+ answer: Translation;
695
+ status?: AnswerStatus;
696
+ }
697
+
698
+ /**
699
+ * Base row interface with common fields
700
+ * @public
701
+ */
702
+ export declare interface BaseRow {
703
+ id: string;
704
+ rowId: string;
705
+ name: string;
706
+ description?: string;
707
+ assets: AssetsField;
708
+ type: ScreenRowType;
709
+ isLiveRow: boolean;
710
+ organizationId?: string;
711
+ }
712
+
713
+ /**
714
+ * Base row type with fields common to all row types
715
+ */
716
+ declare type BaseRowInScreen = {
717
+ /**
718
+ * Firebase document path. If not provided, the row is not defined in db and is dynamically generated (e.g. recommendation row).
719
+ */
720
+ path?: string;
721
+ /**
722
+ * Tivio row ID.
723
+ */
724
+ rowId: string;
725
+ /**
726
+ * If all items are from the same organization this will be set.
727
+ */
728
+ organizationId?: string;
729
+ /**
730
+ * Row name.
731
+ */
732
+ name: Translation;
733
+ /**
734
+ * Row order in the screen.
735
+ */
736
+ order?: number;
737
+ /**
738
+ * Standard row or a Banner.
739
+ */
740
+ rowComponent: RowComponent;
741
+ /**
742
+ * Type of the row (continue to watch, custom, filter, static, ...).
743
+ */
744
+ type: ScreenRowType;
745
+ /**
746
+ * Assets for the row (images, videos, etc.)
747
+ */
748
+ assets?: AssetsField;
749
+ };
750
+
751
+ /**
752
+ * Base static row fields shared by all static row types
753
+ */
754
+ declare type BaseStaticRowInScreen = BaseRowInScreen & {
755
+ type: 'static';
756
+ };
757
+
633
758
  declare interface BaseWidgetControlPayload {
634
759
  widgetPath: string;
635
760
  }
636
761
 
762
+ export declare interface BenefitItem {
763
+ iconType: 'Verified' | 'Badge' | 'Clock' | 'Trending' | 'Message' | 'Eye' | 'Info' | 'Chart' | 'Users' | 'Zap' | 'Star' | 'Email' | 'Discord';
764
+ name: Translation;
765
+ description?: Translation;
766
+ }
767
+
768
+ export declare type BenefitTileSpecificData = BenefitItem;
769
+
637
770
  /**
638
771
  * @public
639
772
  */
@@ -697,6 +830,7 @@ export declare interface ButtonOptions {
697
830
  */
698
831
  export declare interface ButtonVariantOptions {
699
832
  border?: string;
833
+ backgroundImage?: string;
700
834
  disabledBackgroundColor?: string;
701
835
  disabledColor?: string;
702
836
  }
@@ -706,6 +840,45 @@ export declare interface ButtonVariantOptions {
706
840
  */
707
841
  export declare type Callback<T = any> = (arg?: T) => void;
708
842
 
843
+ /**
844
+ * Camera switch transition progress information.
845
+ * Tracks the state of buffer loading during camera switches in interactive streaming.
846
+ * @public
847
+ */
848
+ export declare interface CameraSwitchProgress {
849
+ /**
850
+ * Whether a camera switch is currently in progress
851
+ */
852
+ isActive: boolean;
853
+ /**
854
+ * Time position (in seconds) where the transition content will begin.
855
+ * This is after any currently loading chunks finish.
856
+ */
857
+ transitionStartTime: number;
858
+ /**
859
+ * Number of segments that need to load before transition is ready
860
+ */
861
+ segmentsToLoad: number;
862
+ /**
863
+ * Number of segments that have already loaded
864
+ */
865
+ segmentsLoaded: number;
866
+ /**
867
+ * Progress percentage (0-1) of the transition loading
868
+ */
869
+ progress: number;
870
+ /**
871
+ * Estimated time remaining until camera switch completes (in seconds)
872
+ * Based on segment duration and remaining segments
873
+ */
874
+ estimatedTimeRemaining: number;
875
+ /**
876
+ * ID of the secondary source this transition is for.
877
+ * Used to track multiple camera switches in quick succession.
878
+ */
879
+ secondarySourceId?: string;
880
+ }
881
+
709
882
  export declare interface CancellingMonetizationsSummaryItem {
710
883
  date: number;
711
884
  monetizationId: string;
@@ -767,7 +940,6 @@ export declare interface ChannelSourceInterface extends PlayerSourceInterface<So
767
940
  to: Date;
768
941
  poster: string | null;
769
942
  tvMode: TvMode | 'live' | null;
770
- clone: (params?: Partial<ChannelSourceParams>) => ChannelSourceInterface;
771
943
  }
772
944
 
773
945
  /**
@@ -781,6 +953,10 @@ export declare interface ChannelSourceParams extends PlayerSourceParams<SourceTy
781
953
  from: Date;
782
954
  to: Date;
783
955
  tvMode?: TvMode | 'live' | null;
956
+ /**
957
+ * Current program from EPG. Available for VIRTUAL and SCHEDULED channels.
958
+ */
959
+ currentProgram?: TvProgram | null;
784
960
  }
785
961
 
786
962
  /**
@@ -850,12 +1026,6 @@ export declare interface CommonSourceParams<T extends SourceType = SourceType> {
850
1026
  videoPath?: string;
851
1027
  }
852
1028
 
853
- /**
854
- * @public
855
- * Re-export of Google IMA CompanionAd type for use throughout the SDK
856
- */
857
- export declare type CompanionAd = google.ima.CompanionAd;
858
-
859
1029
  /**
860
1030
  * TODO it's the same as Customizations, not?
861
1031
  * @internal
@@ -932,6 +1102,13 @@ export declare interface ContentAvailability {
932
1102
  manual: boolean;
933
1103
  }
934
1104
 
1105
+ export declare type ContentMetadataFieldId = keyof NonNullable<OrganizationSettingsField['contentMetadata']>;
1106
+
1107
+ export declare interface ContentMetadataOptions {
1108
+ enabled: boolean;
1109
+ order: number;
1110
+ }
1111
+
935
1112
  /**
936
1113
  * @public
937
1114
  */
@@ -1189,10 +1366,23 @@ export declare interface CreatorsWithVoucherSubscriptions {
1189
1366
  name: string;
1190
1367
  }
1191
1368
 
1369
+ export declare interface CtaBannerExtendRowData {
1370
+ variant?: 'light' | 'dark';
1371
+ heading?: Translation;
1372
+ subtitle?: {
1373
+ text: Translation;
1374
+ showIcon?: boolean;
1375
+ };
1376
+ button?: {
1377
+ href: string;
1378
+ text: Translation;
1379
+ };
1380
+ }
1381
+
1192
1382
  /**
1193
1383
  * @public
1194
1384
  */
1195
- export declare const CURRENCIES: string[];
1385
+ export declare const CURRENCIES: Currency[];
1196
1386
 
1197
1387
  /**
1198
1388
  * Three upper-case letters according to ISO-4217.
@@ -1206,13 +1396,22 @@ export declare type Currency = 'CZK' | 'EUR' | 'USD' | 'PLN';
1206
1396
  */
1207
1397
  export declare type CurrencyLowerCase = 'czk' | 'eur' | 'usd' | 'pln';
1208
1398
 
1209
- export declare interface CurrentQuestion {
1399
+ /**
1400
+ * @public
1401
+ */
1402
+ export declare const CurrencyToTitle: Record<Currency, string>;
1403
+
1404
+ /**
1405
+ * Generic "current question" shape, parameterized by answer type.
1406
+ * Use `QuizQuestion` / `PollQuestion` for concrete forms.
1407
+ */
1408
+ export declare interface CurrentQuestion<TAnswer extends BaseQuestionAnswer = QuestionAnswer> {
1210
1409
  id: string;
1211
1410
  question: Translation;
1212
- answers?: QuestionAnswer[];
1411
+ answers?: TAnswer[];
1213
1412
  index?: number;
1214
1413
  endTimestampMs?: number;
1215
- status?: QuizGameStatus;
1414
+ status?: InteractiveWidgetStatus;
1216
1415
  }
1217
1416
 
1218
1417
  export declare type CurrentQuestionScene = InteractiveWidgetSceneBase<InteractiveWidgetSceneTemplateType.CURRENT_QUESTION>;
@@ -1285,7 +1484,21 @@ export declare enum CustomerId {
1285
1484
  UZ_BUDU = "UZ_BUDU",
1286
1485
  PRIMA = "PRIMA",
1287
1486
  NORA_FRIDRICHOVA = "NORA_FRIDRICHOVA",
1288
- LONGEVITY = "LONGEVITY"
1487
+ LONGEVITY = "LONGEVITY",
1488
+ ZASAHTV = "ZASAHTV",
1489
+ ELISKAFLOW = "ELISKAFLOW",
1490
+ PRIJIMACKY = "PRIJIMACKY",
1491
+ PADNI_KOMU_PADNI = "PADNI_KOMU_PADNI",
1492
+ KRYPTOSPACE = "KRYPTOSPACE",
1493
+ ERADIX = "ERADIX",
1494
+ VLADCI_PRAHY = "VLADCI_PRAHY",
1495
+ DOKTOR_EVZEN = "DOKTOR_EVZEN",
1496
+ INVESTUJ_CHYTRE = "INVESTUJ_CHYTRE",
1497
+ RESTART_MUZE = "RESTART_MUZE",
1498
+ THE_JOHNY = "THE_JOHNY",
1499
+ GOOD_MOVE = "GOOD_MOVE",
1500
+ JANA_HANZ = "JANA_HANZ",
1501
+ MYSTICO = "MYSTICO"
1289
1502
  }
1290
1503
 
1291
1504
  /**
@@ -1388,6 +1601,7 @@ export declare interface Customizations {
1388
1601
  iconColor?: string;
1389
1602
  roundedMenuColor?: string;
1390
1603
  roundedMenuHoverColor?: string;
1604
+ roundedMenuInactiveColor?: string;
1391
1605
  };
1392
1606
  CenteredMenu?: {
1393
1607
  backgroundColor: string;
@@ -1451,6 +1665,99 @@ export declare interface Customizations {
1451
1665
  row: {
1452
1666
  backgroundColor: string;
1453
1667
  };
1668
+ benefits?: {
1669
+ titleAccentColor?: string;
1670
+ descriptionColor?: string;
1671
+ ctaTextColor?: string;
1672
+ };
1673
+ featureCard?: {
1674
+ bgColor?: string;
1675
+ textColor?: string;
1676
+ borderColor?: string;
1677
+ hoverBorderColor?: string;
1678
+ iconBgColor?: string;
1679
+ iconColor?: string;
1680
+ descriptionColor?: string;
1681
+ };
1682
+ ctaBanner?: {
1683
+ lightBgColor?: string;
1684
+ darkBgColor?: string;
1685
+ borderColor?: string;
1686
+ lightTitleColor?: string;
1687
+ darkTitleColor?: string;
1688
+ lightDescriptionColor?: string;
1689
+ descriptionColor?: string;
1690
+ lightButtonBgColor?: string;
1691
+ lightButtonTextColor?: string;
1692
+ subtitleColor?: string;
1693
+ accentColor?: string;
1694
+ mutedTextColor?: string;
1695
+ textColor?: string;
1696
+ };
1697
+ testimonials?: {
1698
+ sectionBg?: string;
1699
+ cardBg?: string;
1700
+ cardBorder?: string;
1701
+ descriptionColor?: string;
1702
+ ratingColor?: string;
1703
+ roleColor?: string;
1704
+ textColor?: string;
1705
+ };
1706
+ mediaAccordeon?: {
1707
+ buttonBg?: string;
1708
+ buttonHoverBg?: string;
1709
+ titleActive?: string;
1710
+ titleInactive?: string;
1711
+ descriptionColor?: string;
1712
+ };
1713
+ numbers?: {
1714
+ sectionBg?: string;
1715
+ borderTop?: string;
1716
+ numberColor?: string;
1717
+ labelColor?: string;
1718
+ };
1719
+ faq?: {
1720
+ descriptionColor?: string;
1721
+ linkColor?: string;
1722
+ textColor?: string;
1723
+ mutedTextColor?: string;
1724
+ };
1725
+ explore?: {
1726
+ cardBg?: string;
1727
+ cardTextColor?: string;
1728
+ cardBorderColor?: string;
1729
+ hoverBorderColor?: string;
1730
+ descriptionColor?: string;
1731
+ };
1732
+ splitLayout?: {
1733
+ titleColor?: string;
1734
+ descriptionColor?: string;
1735
+ imageBg?: string;
1736
+ };
1737
+ accordion?: {
1738
+ itemBg?: string;
1739
+ itemBorder?: string;
1740
+ titleColor?: string;
1741
+ contentColor?: string;
1742
+ iconColor?: string;
1743
+ };
1744
+ presentBanner?: {
1745
+ badgeBg?: string;
1746
+ badgeBorder?: string;
1747
+ badgeTextColor?: string;
1748
+ subtitleColor?: string;
1749
+ avatarBorder?: string;
1750
+ textColor?: string;
1751
+ };
1752
+ videoSeries?: {
1753
+ buttonBg?: string;
1754
+ buttonHoverBg?: string;
1755
+ titleActive?: string;
1756
+ titleInactive?: string;
1757
+ };
1758
+ monetizationBanner?: {
1759
+ descriptionColor?: string;
1760
+ };
1454
1761
  };
1455
1762
  global: {
1456
1763
  /**
@@ -1473,6 +1780,9 @@ export declare interface Customizations {
1473
1780
  Avatar?: {
1474
1781
  backgroundColor: string;
1475
1782
  color: string;
1783
+ hoverBorderGradientStart?: string;
1784
+ hoverBorderGradientEnd?: string;
1785
+ hoverBackground?: string;
1476
1786
  };
1477
1787
  Paywall?: {
1478
1788
  backgroundColor?: string;
@@ -1492,6 +1802,8 @@ export declare interface Customizations {
1492
1802
  backgroundColorActive?: string;
1493
1803
  formBackgroundColor?: string;
1494
1804
  captionColor?: string;
1805
+ pageBackgroundColor?: string;
1806
+ gradientColor?: string;
1495
1807
  };
1496
1808
  QerkoOverlay?: {
1497
1809
  backgroundColor?: string;
@@ -1517,7 +1829,6 @@ export declare interface CustomScript {
1517
1829
  src: string;
1518
1830
  event?: EventName;
1519
1831
  isAsync?: boolean;
1520
- defer?: boolean;
1521
1832
  }
1522
1833
 
1523
1834
  /**
@@ -1553,6 +1864,11 @@ declare type Data = {
1553
1864
  type: 'tier' | 'member' | 'user';
1554
1865
  };
1555
1866
 
1867
+ /**
1868
+ * @public
1869
+ */
1870
+ export declare const DEFAULT_CURRENCY: Currency;
1871
+
1556
1872
  /**
1557
1873
  * @public
1558
1874
  */
@@ -1595,6 +1911,28 @@ export declare type DeviceInfo = ArrisDeviceInfo | ReactNativeDeviceInfo;
1595
1911
  */
1596
1912
  export declare type DeviceOs = OperatingSystem | 'Tizen' | 'webOS' | 'Arris' | 'Android TV' | 'tvOS';
1597
1913
 
1914
+ /**
1915
+ * User consent status for a specific purpose.
1916
+ */
1917
+ export declare interface DidomiPurposeStatus {
1918
+ enabled: boolean;
1919
+ }
1920
+
1921
+ /**
1922
+ * Didomi SDK API.
1923
+ */
1924
+ export declare interface DidomiSDK {
1925
+ getCurrentUserStatus(): DidomiUserStatus;
1926
+ }
1927
+
1928
+ /**
1929
+ * User consent status returned by Didomi SDK.
1930
+ */
1931
+ export declare interface DidomiUserStatus {
1932
+ purposes: Record<string, DidomiPurposeStatus>;
1933
+ consent_string?: string;
1934
+ }
1935
+
1598
1936
  /**
1599
1937
  * Window object with Didomi SDK properties.
1600
1938
  */
@@ -1610,9 +1948,10 @@ export declare interface DidomiWindow {
1610
1948
  * https://developers.didomi.io/cmp/web-sdk/reference/api
1611
1949
  */
1612
1950
  didomiOnReady: (() => void)[];
1613
- Didomi?: {
1614
- getUserConsentStatusForPurpose: (category: string) => boolean;
1615
- };
1951
+ /**
1952
+ * The Didomi SDK instance.
1953
+ */
1954
+ Didomi: DidomiSDK;
1616
1955
  }
1617
1956
 
1618
1957
  /**
@@ -1633,6 +1972,47 @@ export declare interface DividerProps {
1633
1972
  horizontalSpacing?: number;
1634
1973
  }
1635
1974
 
1975
+ export declare interface DocumentTileData<ItemSpecificData extends DocumentTileItemSpecificData = DocumentTileItemSpecificData> {
1976
+ /**
1977
+ * Tile item ID.
1978
+ */
1979
+ id: string;
1980
+ /**
1981
+ * Timestamp of the item creation.
1982
+ */
1983
+ created: number;
1984
+ /**
1985
+ * Type of the tile. VIDEO, TV_CHANNEL, TAG, ...
1986
+ */
1987
+ itemType: ROW_ITEM_TYPES;
1988
+ /**
1989
+ * Tile item name translation.
1990
+ */
1991
+ name: Translation;
1992
+ /**
1993
+ * Firestore path to the item.
1994
+ */
1995
+ path: string;
1996
+ /**
1997
+ * Application info including logo, name and number of videos.
1998
+ */
1999
+ application?: TileApplicationData;
2000
+ /**
2001
+ * Specific data for an item type (e.g. video, tv channel, tag, ...).
2002
+ */
2003
+ itemSpecificData: ItemSpecificData;
2004
+ /**
2005
+ * Optional label to display in the top-right corner of the tile (e.g., "Exclusive").
2006
+ */
2007
+ topLabel?: Translation;
2008
+ /**
2009
+ * CSS color for the topLabel background. Defaults to white.
2010
+ */
2011
+ topLabelColor?: string;
2012
+ }
2013
+
2014
+ export declare type DocumentTileItemSpecificData = VideoTileSpecificData | TvChannelTileSpecificData | TagTileSpecificData | ArticleTileSpecificData | SeriesTileSpecificData;
2015
+
1636
2016
  export declare interface Drm {
1637
2017
  encryption: VideoSourceEncryption;
1638
2018
  /**
@@ -1706,52 +2086,137 @@ export declare interface DurationWithUnit {
1706
2086
  }
1707
2087
 
1708
2088
  /**
2089
+ * Row components available for dynamic rows (filter, custom, topWatched, etc.)
2090
+ * Matches the rowComponent constraint in DynamicRow type definition
1709
2091
  * @public
1710
2092
  */
1711
- export declare interface EditMessageOptions extends Omit<AddMessageOptions, 'parentMessageId'> {
1712
- messageId: string;
1713
- text: string;
1714
- videoTime?: number;
1715
- }
2093
+ export declare const DYNAMIC_ROW_COMPONENTS: readonly [RowComponent.ROW, RowComponent.BANNER];
1716
2094
 
1717
- export declare interface EmailNotification {
1718
- id: string;
1719
- name: string;
1720
- targeting: NotificationTargeting | null;
1721
- templateId: string;
1722
- thumbnailUrl?: string;
1723
- triggerType: NotificationTriggerType;
1724
- scheduleTime?: Date;
1725
- status?: NotificationStatus;
1726
- substitutions: NotificationSubstitution[];
2095
+ /**
2096
+ * Dynamic row (filter, custom, continueToWatch, etc.) - has itemComponent and dynamic fields
2097
+ * Uses standard ROW or BANNER components
2098
+ * @public
2099
+ */
2100
+ export declare interface DynamicRow extends BaseRow {
2101
+ type: Exclude<ScreenRowType, 'static'>;
2102
+ numberOfLines?: number;
2103
+ monetizations?: Array<{
2104
+ monetizationRef: {
2105
+ id: string;
2106
+ path: string;
2107
+ };
2108
+ } | RowMonetizationData>;
2109
+ rowComponent: RowComponent.ROW | RowComponent.BANNER;
2110
+ itemComponent: RowItemComponent | BannerItemComponent;
2111
+ organizationId?: string;
2112
+ bottomComponent?: BottomComponent;
2113
+ showDescriptionAsTitle?: boolean;
2114
+ hideTitle?: boolean;
2115
+ externalUrl?: string;
2116
+ playButtonTitle?: string;
2117
+ tiles: PaginationInterface<ItemInRow>;
2118
+ /**
2119
+ * Side Banner specific configuration
2120
+ */
2121
+ sideBannerImagePosition?: 'left' | 'right';
2122
+ backgroundColor?: string;
1727
2123
  }
1728
2124
 
1729
2125
  /**
1730
- * Represents a SendGrid transactional template.
2126
+ * Dynamic row type with dynamic-specific fields
1731
2127
  */
1732
- export declare interface EmailTemplate {
2128
+ export declare type DynamicRowInScreen = BaseRowInScreen & {
2129
+ type: Exclude<ScreenRowType, 'static'>;
1733
2130
  /**
1734
- * The ID of the transactional template.
2131
+ * Row filter based on which to pick tiles.
1735
2132
  */
1736
- id: string;
2133
+ filter?: RowFilterField;
1737
2134
  /**
1738
- * The name of the transactional template.
1739
- * @maxLength 100
2135
+ * Number of lines of the title.
1740
2136
  */
1741
- name: string;
2137
+ numberOfLines?: number;
1742
2138
  /**
1743
- * Defines the generation of the template.
1744
- * @format 'dynamic' | 'legacy'
2139
+ * Component to use to render the tiles in the row.
1745
2140
  */
1746
- generation: 'dynamic' | 'legacy';
2141
+ itemComponent: RowItemComponent | BannerItemComponent;
1747
2142
  /**
1748
- * The date and time the template was last updated.
2143
+ * Items to display in the row.
1749
2144
  */
1750
- updated_at: string;
2145
+ tiles: GetTilesInRowResponse<DynamicScreenRowType>;
1751
2146
  /**
1752
- * An array of versions associated with the template.
2147
+ * Setting for decided what to show bellow the tiles
1753
2148
  */
1754
- versions: EmailTemplateVersion[];
2149
+ bottomComponent?: BottomComponent;
2150
+ /**
2151
+ * Setting for decided whether to show description instead of title in the tiles
2152
+ */
2153
+ showDescriptionAsTitle?: boolean;
2154
+ /**
2155
+ * Setting for decided whether to hide title in the tiles/banners
2156
+ */
2157
+ hideTitle?: boolean;
2158
+ /**
2159
+ * Link to external URL
2160
+ */
2161
+ externalUrl?: string;
2162
+ /**
2163
+ * Title of Play button
2164
+ */
2165
+ playButtonTitle?: Translation;
2166
+ };
2167
+
2168
+ /**
2169
+ * @public
2170
+ */
2171
+ export declare type DynamicScreenRowType = Exclude<ScreenRowType, 'static'>;
2172
+
2173
+ /**
2174
+ * @public
2175
+ */
2176
+ export declare interface EditMessageOptions extends Omit<AddMessageOptions, 'parentMessageId'> {
2177
+ messageId: string;
2178
+ text: string;
2179
+ videoTime?: number;
2180
+ }
2181
+
2182
+ export declare interface EmailNotification {
2183
+ id: string;
2184
+ name: string;
2185
+ targeting: NotificationTargeting | null;
2186
+ templateId: string;
2187
+ thumbnailUrl?: string;
2188
+ triggerType: NotificationTriggerType;
2189
+ scheduleTime?: Date;
2190
+ status?: NotificationStatus;
2191
+ substitutions: NotificationSubstitution[];
2192
+ }
2193
+
2194
+ /**
2195
+ * Represents a SendGrid transactional template.
2196
+ */
2197
+ export declare interface EmailTemplate {
2198
+ /**
2199
+ * The ID of the transactional template.
2200
+ */
2201
+ id: string;
2202
+ /**
2203
+ * The name of the transactional template.
2204
+ * @maxLength 100
2205
+ */
2206
+ name: string;
2207
+ /**
2208
+ * Defines the generation of the template.
2209
+ * @format 'dynamic' | 'legacy'
2210
+ */
2211
+ generation: 'dynamic' | 'legacy';
2212
+ /**
2213
+ * The date and time the template was last updated.
2214
+ */
2215
+ updated_at: string;
2216
+ /**
2217
+ * An array of versions associated with the template.
2218
+ */
2219
+ versions: EmailTemplateVersion[];
1755
2220
  }
1756
2221
 
1757
2222
  export declare interface EmailTemplateVersion {
@@ -1823,7 +2288,6 @@ export declare interface EmitterInterface {
1823
2288
  isSupported: (even: string) => boolean;
1824
2289
  addListener: <T = unknown>(event: string, cb: (value: T) => Empty_2) => void;
1825
2290
  removeListener: <T = unknown>(event: string, cb: (value: T) => Empty_2) => void;
1826
- emitEvent: (event: string, value?: unknown) => void;
1827
2291
  }
1828
2292
 
1829
2293
  /**
@@ -1848,6 +2312,17 @@ export declare type Events = {
1848
2312
  'on-error': Error;
1849
2313
  };
1850
2314
 
2315
+ export declare interface ExploreItem {
2316
+ title: Translation;
2317
+ description: Translation;
2318
+ button?: {
2319
+ href: string;
2320
+ text: Translation;
2321
+ };
2322
+ }
2323
+
2324
+ export declare type ExploreTileSpecificData = ExploreItem;
2325
+
1851
2326
  export declare interface ExtensionMetadata {
1852
2327
  purchaseStatus: CloudflareStreamingPurchaseStatus;
1853
2328
  activeVideoId?: string;
@@ -1861,22 +2336,12 @@ export declare type ExternalTvConfig = {
1861
2336
  splashScreenBackgroundColor?: string;
1862
2337
  };
1863
2338
 
1864
- export declare interface FavoriteTagWithData {
1865
- content: Tag;
1866
- type: 'tag';
1867
- }
1868
-
1869
- export declare interface FavoriteVideoWithData {
1870
- content: Video;
1871
- type: 'video';
2339
+ export declare interface FaqItem {
2340
+ question: Translation;
2341
+ answer: Translation;
1872
2342
  }
1873
2343
 
1874
- /**
1875
- * @public
1876
- */
1877
- export declare type FavoriteWithData = FavoriteVideoWithData | (FavoriteTagWithData & {
1878
- profileId?: string;
1879
- });
2344
+ export declare type FaqTileSpecificData = FaqItem;
1880
2345
 
1881
2346
  /**
1882
2347
  * @throws if fetch fails
@@ -1926,7 +2391,6 @@ export declare interface ForbiddenOnCallError extends GenericOnCallError {
1926
2391
  }
1927
2392
 
1928
2393
  export declare enum ForbiddenReason {
1929
- AD_BLOCKING = "AD_BLOCKING",
1930
2394
  MONETIZATION = "MONETIZATION",
1931
2395
  GEO_BLOCKING = "GEO_BLOCKING",
1932
2396
  EMAIL_ALREADY_EXISTS = "EMAIL_ALREADY_EXISTS",
@@ -1937,8 +2401,7 @@ export declare enum ForbiddenReason {
1937
2401
  NAME_CONTAINS_INVALID_CHAR = "NAME_CONTAINS_INVALID_CHAR",
1938
2402
  USER_ACCOUNT_LOCKED = "USER_ACCOUNT_LOCKED",
1939
2403
  USER_NOT_FOUND = "USER_NOT_FOUND",
1940
- UNSUPPORTED_BROWSER = "UNSUPPORTED_BROWSER",
1941
- ANONYMOUS_USER = "ANONYMOUS_USER"
2404
+ UNSUPPORTED_BROWSER = "UNSUPPORTED_BROWSER"
1942
2405
  }
1943
2406
 
1944
2407
  /**
@@ -1946,7 +2409,7 @@ export declare enum ForbiddenReason {
1946
2409
  */
1947
2410
  export declare type FrequencyInfo = {
1948
2411
  title: Translation;
1949
- unit: string;
2412
+ unit: MONETIZATION_FREQUENCY;
1950
2413
  value: number;
1951
2414
  };
1952
2415
 
@@ -2065,6 +2528,9 @@ export declare type GetPurchaseInfoResponse = {
2065
2528
  };
2066
2529
  };
2067
2530
 
2531
+ /**
2532
+ * Response type for getRowsInScreen
2533
+ */
2068
2534
  export declare type GetRowsInScreenResponse = PaginatedResponse<RowInScreen, 'screenId'>;
2069
2535
 
2070
2536
  export declare interface GetSourceUrlRequest {
@@ -2121,6 +2587,16 @@ export declare interface GetSourceUrlRequest {
2121
2587
  * Parameters related to ads.
2122
2588
  */
2123
2589
  adParams?: Record<string, string | number | undefined>;
2590
+ /**
2591
+ * Which platform the resulting source should support.
2592
+ * If not present, any source that has non-empty `platforms` will be filtered out from the result.
2593
+ */
2594
+ platform?: PLATFORM;
2595
+ /**
2596
+ * Device ID for device tracking on purchase documents.
2597
+ * Used to track which devices are accessing paid content.
2598
+ */
2599
+ deviceId?: string;
2124
2600
  }
2125
2601
 
2126
2602
  export declare interface GetSourceUrlResponse {
@@ -2164,21 +2640,9 @@ export declare interface GetSourceUrlResponse {
2164
2640
  * Determines session type generated for source. If no provided it will be considered 'ondemand' session type.
2165
2641
  */
2166
2642
  sessionType?: VideoSourceField['sessionType'];
2167
- /**
2168
- * Language of the source.
2169
- */
2170
- language?: LangCode;
2171
2643
  }
2172
2644
 
2173
- export declare type GetTilesInRowResponse<U extends NextPageParamType = NextPageParamType> = PaginatedResponse<TileData, U>;
2174
-
2175
- export declare interface GetUserProfileDataOptions {
2176
- /**
2177
- * If true, the data will be returned for all user profiles.
2178
- * If false, the data will be returned only for the active user profile.
2179
- */
2180
- ignoreActiveUserProfile?: boolean;
2181
- }
2645
+ export declare type GetTilesInRowResponse<T extends ScreenRowType = ScreenRowType, U extends NextPageParamType = NextPageParamType> = PaginatedResponse<TileData<T>, U>;
2182
2646
 
2183
2647
  export declare interface GetUserRssUrlRequest {
2184
2648
  organizationId: string;
@@ -2190,58 +2654,6 @@ export declare interface GetUserRssUrlResponse {
2190
2654
  expiresAt?: number;
2191
2655
  }
2192
2656
 
2193
- export declare interface GetVideoAnalyticsErrorItem {
2194
- count: number;
2195
- timestamp: number;
2196
- errorMessage: string;
2197
- }
2198
-
2199
- export declare interface GetVideoAnalyticsErrorResult {
2200
- totalCount: number;
2201
- errors: Array<GetVideoAnalyticsErrorItem>;
2202
- }
2203
-
2204
- export declare interface GetVideoAnalyticsRequest {
2205
- contentId: string;
2206
- timestamp?: number;
2207
- userId?: string;
2208
- source?: string;
2209
- limit?: number;
2210
- errorLimit?: number;
2211
- errorTimestampFrom?: number;
2212
- }
2213
-
2214
- export declare interface GetVideoAnalyticsResponse {
2215
- state?: GetVideoAnalyticsResult;
2216
- quality?: GetVideoAnalyticsResult;
2217
- error?: GetVideoAnalyticsErrorResult;
2218
- localities?: unknown;
2219
- }
2220
-
2221
- export declare type GetVideoAnalyticsResult = {
2222
- [timestamp: string]: {
2223
- totalDuration: number;
2224
- values: Array<{
2225
- value: string;
2226
- duration: number;
2227
- percentage: number;
2228
- }>;
2229
- };
2230
- };
2231
-
2232
- export declare interface GetVideoAnalyticsViewsRequest {
2233
- contentId: string;
2234
- currentViewsIntervalMs: number;
2235
- timestamp?: number;
2236
- source?: string;
2237
- }
2238
-
2239
- export declare interface GetVideoAnalyticsViewsResponse {
2240
- previousViews?: number;
2241
- currentViews?: number;
2242
- totalViews?: number;
2243
- }
2244
-
2245
2657
  export declare interface GetViewAnalyticsResponse {
2246
2658
  viewCountAnalytics: ViewCountItem[];
2247
2659
  topWatched: TopWatchItem[];
@@ -2260,6 +2672,22 @@ export declare enum GRID_TYPES {
2260
2672
  SERIES = "SERIES"
2261
2673
  }
2262
2674
 
2675
+ /**
2676
+ * @public
2677
+ */
2678
+ export declare interface HeroBannerProps {
2679
+ title: string;
2680
+ description?: string;
2681
+ cover: string;
2682
+ onPlayClick?: () => void;
2683
+ onWatchlistClick?: () => void;
2684
+ playButtonHref?: string;
2685
+ watchlistButtonHref?: string;
2686
+ playButtonText?: string;
2687
+ watchlistButtonText?: string;
2688
+ isFavorite?: boolean;
2689
+ }
2690
+
2263
2691
  /**
2264
2692
  * @public
2265
2693
  */
@@ -2268,6 +2696,61 @@ export declare interface HistoryContextData {
2268
2696
  backOrRedirectToRoot: (delta?: number) => void;
2269
2697
  }
2270
2698
 
2699
+ export declare interface HomepageBannerButton {
2700
+ href: string;
2701
+ text: Translation;
2702
+ variant: HomepageBannerButtonVariant;
2703
+ leftIcon?: HomepageBannerButtonIcon;
2704
+ /**
2705
+ * Controls when this button should be visible.
2706
+ * Defaults to 'always' if not specified.
2707
+ */
2708
+ visibility?: HomepageBannerButtonVisibility;
2709
+ }
2710
+
2711
+ export declare type HomepageBannerButtonIcon = 'play';
2712
+
2713
+ export declare type HomepageBannerButtonVariant = 'primary' | 'secondary';
2714
+
2715
+ /**
2716
+ * Visibility condition for banner buttons.
2717
+ * - 'always': Button is always visible (default)
2718
+ * - 'notSignedIn': Button is only visible when user is not signed in
2719
+ * - 'signedIn': Button is only visible when user is signed in
2720
+ */
2721
+ export declare type HomepageBannerButtonVisibility = 'always' | 'notSignedIn' | 'signedIn';
2722
+
2723
+ export declare interface HomepageBannerExtendRowData {
2724
+ /**
2725
+ * Main title displayed on the banner
2726
+ */
2727
+ title?: Translation;
2728
+ /**
2729
+ * Subtitle/tagline displayed below title
2730
+ */
2731
+ subtitle?: {
2732
+ text: Translation;
2733
+ showIcon?: boolean;
2734
+ };
2735
+ /**
2736
+ * Multiple lines of descriptive text for multiline display
2737
+ */
2738
+ descriptionLines?: Translation[];
2739
+ /**
2740
+ * Array of buttons to display on the banner
2741
+ */
2742
+ buttons?: HomepageBannerButton[];
2743
+ /**
2744
+ * Single background image asset (legacy, use backgroundAssets for random selection)
2745
+ */
2746
+ asset?: ScalableAsset;
2747
+ /**
2748
+ * Array of background assets for random selection per page load.
2749
+ * If provided, one will be randomly selected each time the banner loads.
2750
+ */
2751
+ backgroundAssets?: ScalableAsset[];
2752
+ }
2753
+
2271
2754
  export declare type IncludedItem = {
2272
2755
  attributes: {
2273
2756
  next_charge_date: string;
@@ -2303,10 +2786,23 @@ export declare interface IndexedTag extends IndexedObject {
2303
2786
  created: Date;
2304
2787
  name: Translation;
2305
2788
  description?: string;
2789
+ /**
2790
+ * True if the tag has assets (non-empty assets object).
2791
+ */
2792
+ hasAssets: boolean;
2793
+ /**
2794
+ * True if the tag has content (has videos or series episodes).
2795
+ */
2796
+ hasContent: boolean;
2306
2797
  /**
2307
2798
  * True if the tag is available in Tivio Pro (StarMe)
2308
2799
  */
2309
2800
  isTivioPro: boolean;
2801
+ /**
2802
+ * Parental guidance rating (e.g., "O", "07", "U", "7+")
2803
+ * Used for filtering content based on age restrictions for kids profiles
2804
+ */
2805
+ pgRating?: string;
2310
2806
  }
2311
2807
 
2312
2808
  /**
@@ -2352,6 +2848,11 @@ export declare interface IndexedVideo extends IndexedObject {
2352
2848
  defaultName: string;
2353
2849
  name: string | Translation;
2354
2850
  description: string | Translation;
2851
+ descriptionRich?: Translation;
2852
+ /**
2853
+ * EPG program-friendly name
2854
+ */
2855
+ shortName?: Translation;
2355
2856
  hide: boolean;
2356
2857
  isDuplicate: boolean;
2357
2858
  externals?: VideoExternals;
@@ -2370,6 +2871,14 @@ export declare interface IndexedVideo extends IndexedObject {
2370
2871
  * see https://www.algolia.com/doc/guides/managing-results/refine-results/filtering/how-to/filter-by-attributes/#filter-by-null-or-missing-attributes.
2371
2872
  */
2372
2873
  monetizationAccessIds: string[] | false;
2874
+ /**
2875
+ * See {@link VideoDocument.pgRating}
2876
+ */
2877
+ pgRating?: string;
2878
+ /**
2879
+ * See {@link VideoDocument.contentDescriptors}
2880
+ */
2881
+ contentDescriptors?: string[];
2373
2882
  }
2374
2883
 
2375
2884
  /**
@@ -2382,44 +2891,12 @@ export declare interface InputOptions {
2382
2891
  color?: string;
2383
2892
  }
2384
2893
 
2385
- export declare type InputSourceParams = SourceParams | VodExternalMultiSourceParams;
2386
-
2387
2894
  export declare type IntegrationType = 'discord' | 'patreon';
2388
2895
 
2389
- export declare interface InteractiveWidget<T extends InteractiveWidgetScene = InteractiveWidgetScene> {
2390
- readonly id: string;
2391
- readonly path: string;
2392
- readonly currentQuestion: CurrentQuestion | null;
2393
- readonly status: QuizGameStatus;
2394
- readonly questionsCount: number;
2395
- readonly currentAnswerId?: string;
2396
- readonly currentState: InteractiveWidgetState;
2397
- /**
2398
- * State delayed for end users, which is used to toggle scenes just like in OBS and host view
2399
- */
2400
- readonly currentStateWithDelay: InteractiveWidgetCurrentStateWithDelay;
2401
- readonly answers?: QuestionAnswer[];
2402
- readonly questionIndex?: number;
2403
- readonly isSubmitted?: boolean;
2404
- readonly leaderboard: LeaderboardGroupItem | null;
2405
- readonly highlightedUsersIds: string[];
2406
- readonly userRole: QuizGameRole;
2407
- readonly secondsToAnswer: number;
2408
- readonly scenes: T[];
2409
- readonly activeScene: T | null;
2410
- readonly theme?: InteractiveWidgetTheme;
2411
- readonly showCountdown: boolean;
2412
- readonly lastQuestionTopScorers: LeaderboardPlayer[];
2413
- readonly questionRepository: QuestionRepository;
2414
- readonly isWaitingForStart: boolean;
2415
- answerQuestion(answerId: string): void;
2416
- submitAnswer(request: Pick<SubmitAnswerRequest, 'answerOptionId' | 'answerText'>): Promise<void>;
2417
- verifyJoinCode(joinCode: string, shouldJoinPlayer?: boolean): Promise<boolean>;
2418
- destroy(): void;
2419
- }
2896
+ export declare type InteractiveWidget<TScene extends InteractiveWidgetScene = InteractiveWidgetScene> = QuizWidget<TScene> | PollWidget<TScene>;
2420
2897
 
2421
- export declare interface InteractiveWidgetCurrentStateWithDelay {
2422
- state: InteractiveWidgetState;
2898
+ export declare interface InteractiveWidgetCurrentStateWithDelay<TState extends InteractiveWidgetState = InteractiveWidgetState> {
2899
+ state: TState;
2423
2900
  enteredAt: Date;
2424
2901
  }
2425
2902
 
@@ -2433,6 +2910,27 @@ export declare enum InteractiveWidgetDisplayComponent {
2433
2910
  AD_VAST = "adVast"
2434
2911
  }
2435
2912
 
2913
+ export declare interface InteractiveWidgetGroupStats {
2914
+ answerPercentages: Record<string, number>;
2915
+ averageScore: number;
2916
+ correctAnswersRatio: number;
2917
+ }
2918
+
2919
+ export declare enum InteractiveWidgetGroupType {
2920
+ HIGHLIGHTED_PLAYERS = "HIGHLIGHTED_PLAYERS",
2921
+ /** Participants playing in Offline mode */
2922
+ LOCAL_PLAYERS = "LOCAL_PLAYERS",
2923
+ ALL = "ALL",
2924
+ PARTY = "PARTY"
2925
+ }
2926
+
2927
+ export declare enum InteractiveWidgetRole {
2928
+ OBS = "OBS",
2929
+ HOST = "HOST",
2930
+ PLAYER = "PLAYER",
2931
+ LOCAL_PLAYER = "LOCAL_PLAYER"
2932
+ }
2933
+
2436
2934
  export declare type InteractiveWidgetScene = CurrentQuestionScene | LeaderboardScene | QRCodeScene | AdBannerScene | PlayersScene | NoGraphicsScene | CountdownScene;
2437
2935
 
2438
2936
  export declare interface InteractiveWidgetSceneBase<TType extends InteractiveWidgetSceneTemplateType> {
@@ -2490,6 +2988,16 @@ export declare enum InteractiveWidgetState {
2490
2988
  RESET_GAME = "ResetGame"
2491
2989
  }
2492
2990
 
2991
+ export declare enum InteractiveWidgetStatus {
2992
+ /**
2993
+ * Waiting to start the quiz / question
2994
+ */
2995
+ WAITING = "WAITING",
2996
+ IN_PROGRESS = "IN_PROGRESS",
2997
+ IN_BETWEEN_QUESTIONS = "IN_BETWEEN_QUESTIONS",
2998
+ DONE = "DONE"
2999
+ }
3000
+
2493
3001
  export declare interface InteractiveWidgetTheme {
2494
3002
  palette: Record<string, string>;
2495
3003
  components: {
@@ -2499,6 +3007,11 @@ export declare interface InteractiveWidgetTheme {
2499
3007
 
2500
3008
  declare type InteractiveWidgetThemeKey = InteractiveWidgetDisplayComponent | `${InteractiveWidgetDisplayComponent.CURRENT_QUESTION}${AnswerStatus}` | 'timeLeftBar';
2501
3009
 
3010
+ export declare enum InteractiveWidgetType {
3011
+ POLL = "POLL",
3012
+ QUIZ = "QUIZ"
3013
+ }
3014
+
2502
3015
  /**
2503
3016
  * @public
2504
3017
  */
@@ -2525,6 +3038,15 @@ export declare type InternalConfig = SdkReactConfig & {
2525
3038
  forceCloudFnResolver?: boolean;
2526
3039
  };
2527
3040
 
3041
+ /**
3042
+ * Subset of `BaseInteractiveWidget` methods that are intentionally **not**
3043
+ * advertised on the SDK hook return types (`useInteractiveWidget`,
3044
+ * `useQuizWidget`, `usePollWidget`). These methods still exist at runtime and
3045
+ * are used by internal `core-react-dom` UI / server flows — they're just hidden
3046
+ * from external SDK consumers, which should only call `submitAnswer`.
3047
+ */
3048
+ export declare type InternalInteractiveWidgetMethods = 'answerQuestion' | 'verifyJoinCode' | 'changeState';
3049
+
2528
3050
  /**
2529
3051
  * @public
2530
3052
  */
@@ -2587,17 +3109,35 @@ export declare type ItemInRow = Tag | Video | TvChannel | Advertisement | Applic
2587
3109
  * @public
2588
3110
  */
2589
3111
  export declare interface JojExternals {
3112
+ /**
3113
+ * e.g. '19876'
3114
+ */
2590
3115
  tvProfiProgramId?: string;
3116
+ /**
3117
+ * e.g. 'S19876'
3118
+ */
2591
3119
  tvProfiContentId?: string;
2592
3120
  tvProfiSerialId?: string;
3121
+ /**
3122
+ * e.g. '70368744177695432'
3123
+ */
2593
3124
  contentId?: string;
2594
3125
  /**
2595
3126
  * Temporary contentId used only for live channel. The video is already encoded and stored in our storage
2596
3127
  * but is also stored on nangu platform to be used for live channel.
2597
3128
  */
2598
3129
  dvtvExtraContentId?: string;
3130
+ /**
3131
+ * e.g. 'W278510'
3132
+ */
2599
3133
  provysId?: string;
3134
+ /**
3135
+ * real provysId unlike provysId, e.g. '2-231027-0009'
3136
+ */
2600
3137
  tvProfiProvysId?: string;
3138
+ /**
3139
+ * e.g. 'W278510'
3140
+ */
2601
3141
  tvProfiHouseId?: string;
2602
3142
  tvProfiTitleOriginal?: string;
2603
3143
  tvProfiTitleSk?: string;
@@ -2623,7 +3163,20 @@ export declare enum LangCode {
2623
3163
  HU = "hu"
2624
3164
  }
2625
3165
 
2626
- export declare const LangCodeToTitle: Partial<Record<LangCode, string>>;
3166
+ export declare const LangCodeToCountryCodeMap: Partial<Record<LangCode, string>>;
3167
+
3168
+ export declare const LangCodeToCurrencyMap: Partial<Record<LangCode, Currency>>;
3169
+
3170
+ export declare const LangCodeToTitle: Record<LangCode, string>;
3171
+
3172
+ /**
3173
+ * Generic type for items that can be restricted to specific languages.
3174
+ * Use with filterByLanguageRestricted utility from @tivio/common.
3175
+ */
3176
+ export declare interface LanguageRestricted {
3177
+ /** By default is available in every language */
3178
+ availableIn?: LangCode[];
3179
+ }
2627
3180
 
2628
3181
  /**
2629
3182
  * All supported languages codes as in ISO 639-1
@@ -2648,7 +3201,7 @@ export declare interface LastMessage {
2648
3201
  export declare interface LeaderboardGroupItem {
2649
3202
  groupPath?: string;
2650
3203
  groupName?: string;
2651
- type: QuizGameGroupType;
3204
+ type: InteractiveWidgetGroupType;
2652
3205
  /**
2653
3206
  * Consists of top 3 players of the group (global or private team)
2654
3207
  * the player's rank in the group
@@ -2818,11 +3371,35 @@ export declare enum LoginRedirect {
2818
3371
  REMOTE_CONTROLLER = "remote-controller"
2819
3372
  }
2820
3373
 
3374
+ declare interface ManageMemberDeleteRequest extends ManageMemberRequestBase {
3375
+ action: 'deleteMember';
3376
+ }
3377
+
3378
+ export declare type ManageMemberRequest = ManageMemberUpdateRoleRequest | ManageMemberDeleteRequest;
3379
+
2821
3380
  /**
2822
- * @public
3381
+ * Request body for manageMember cloud function.
3382
+ * Handles member management operations (role update, deletion) within an organization.
3383
+ */
3384
+ declare interface ManageMemberRequestBase {
3385
+ organizationId: string;
3386
+ targetMemberUid: string;
3387
+ }
3388
+
3389
+ /**
3390
+ * Response body for manageMember cloud function.
2823
3391
  */
2824
- export declare interface MallTvExternals {
2825
- mallTvEntityId: string;
3392
+ export declare interface ManageMemberResponse {
3393
+ success: boolean;
3394
+ }
3395
+
3396
+ declare interface ManageMemberUpdateRoleRequest extends ManageMemberRequestBase {
3397
+ action: 'updateRole';
3398
+ /**
3399
+ * New role for the target member.
3400
+ * Value corresponds to OrganizationMemberRoles enum from @tivio/firebase.
3401
+ */
3402
+ role: number;
2826
3403
  }
2827
3404
 
2828
3405
  /**
@@ -2886,11 +3463,37 @@ export declare enum MarkerType {
2886
3463
  NONE = "none"
2887
3464
  }
2888
3465
 
3466
+ /**
3467
+ * Tile data for MEDIA_ACCORDEON rows.
3468
+ * Contains id, name, and path for video references.
3469
+ * @public
3470
+ */
3471
+ export declare interface MediaAccordeonTileSpecificData {
3472
+ /**
3473
+ * Custom item ID for unique identification.
3474
+ */
3475
+ id: string;
3476
+ /**
3477
+ * Custom item name for display purposes.
3478
+ */
3479
+ name: Translation;
3480
+ /**
3481
+ * Firestore path to the video.
3482
+ */
3483
+ path: string;
3484
+ }
3485
+
2889
3486
  declare type Membership = {
2890
3487
  id: string;
2891
3488
  type: string;
2892
3489
  };
2893
3490
 
3491
+ export declare type MergeUserAccountsPayload = {
3492
+ email: string;
3493
+ name?: string;
3494
+ password: string;
3495
+ };
3496
+
2894
3497
  /**
2895
3498
  * @public
2896
3499
  */
@@ -2926,6 +3529,17 @@ export declare interface MessageUser {
2926
3529
  email: string;
2927
3530
  }
2928
3531
 
3532
+ export declare enum MetadataFieldId {
3533
+ NAME = "name",// always required
3534
+ SHORT_NAME = "shortName",// optional, fixed position (not sortable)
3535
+ DESCRIPTION = "description",// always required
3536
+ RICH_DESCRIPTION = "richDescription",// optional, fixed position (not sortable)
3537
+ TAGS = "tags",
3538
+ FILM_DETAILS = "filmDetails",
3539
+ AUDIENCE_LIMITATIONS = "audienceLimitations",
3540
+ PRODUCT_PLACEMENT = "productPlacement"
3541
+ }
3542
+
2929
3543
  /**
2930
3544
  * External information of video migrated via our Public API.
2931
3545
  * @public
@@ -3147,11 +3761,6 @@ declare type Notification_2 = {
3147
3761
  } & EmailNotification;
3148
3762
  export { Notification_2 as Notification }
3149
3763
 
3150
- export declare interface NotificationDuration {
3151
- value: number;
3152
- unit: dayjs.ManipulateType;
3153
- }
3154
-
3155
3764
  export declare type NotificationFilterType = NotificationFirestoreFilterType | NotificationSurveyFilterType | NotificationLastActivityFilterType;
3156
3765
 
3157
3766
  export declare type NotificationFirestoreFilterType = NotificationSubscriptionFilterType | NotificationMembershipFilterType;
@@ -3174,12 +3783,21 @@ export declare interface NotificationMembershipFilterType {
3174
3783
  };
3175
3784
  }
3176
3785
 
3786
+ /**
3787
+ * Lifecycle status of a notification.
3788
+ */
3177
3789
  export declare enum NotificationStatus {
3790
+ /** Automatic trigger types (e.g. purchaseStatusChange, duration, userRegistration); not manually or scheduled sent. */
3178
3791
  AUTOMATIC = "automatic",
3792
+ /** Editable, not yet scheduled or sent. Initial state; can transition to PLANNED when scheduled. */
3179
3793
  DRAFT = "draft",
3794
+ /** Scheduled (e.g. Cloud Task created for email, or push scheduled). For push, sending runs on DRAFT→PLANNED then status becomes SENT. */
3180
3795
  PLANNED = "planned",
3796
+ /** Notification has been sent. Set after push send and after email send for manual/scheduled. */
3181
3797
  SENT = "sent",
3798
+ /** Manual trigger saved and waiting to be sent (no lastSent yet). */
3182
3799
  WAITING = "waiting",
3800
+ /** Currently being sent (e.g. EmailSender sets RUNNING before sendEmails). Saving and re-sending are blocked while RUNNING. */
3183
3801
  RUNNING = "running"
3184
3802
  }
3185
3803
 
@@ -3213,6 +3831,17 @@ export declare interface NotificationTargeting {
3213
3831
  to?: Date;
3214
3832
  }
3215
3833
 
3834
+ /**
3835
+ * How the notification is triggered.
3836
+ * - **scheduled**: Sent at a fixed time (scheduleTime). Status becomes PLANNED when scheduled;
3837
+ * used with Cloud Tasks for email and for push when moving from DRAFT to PLANNED.
3838
+ * - **manual**: Sent on demand from the admin. Status is WAITING until sent, then SENT.
3839
+ * - **purchaseStatusChange**: Fired when a user's purchase/subscription status changes (before/after).
3840
+ * Matched by getNotificationByPurchaseStatuses; status is AUTOMATIC.
3841
+ * - **duration**: Time-based (e.g. subscription duration). Used by the daily email job (sendEmailsDaily)
3842
+ * via DurationEmailSender to target users by duration criteria.
3843
+ * - **userRegistration**: Fired when a user registers. Resolved by getNotificationUserRegistration.
3844
+ */
3216
3845
  export declare type NotificationTriggerType = 'scheduled' | 'manual' | 'purchaseStatusChange' | 'duration' | 'userRegistration';
3217
3846
 
3218
3847
  export declare enum NotificationType {
@@ -3227,6 +3856,13 @@ export declare type Nullable<T> = {
3227
3856
  [P in keyof T]: T[P] | null;
3228
3857
  };
3229
3858
 
3859
+ export declare interface NumberItem {
3860
+ value: string;
3861
+ description: Translation;
3862
+ }
3863
+
3864
+ export declare type NumbersTileSpecificData = NumberItem;
3865
+
3230
3866
  /**
3231
3867
  * @public
3232
3868
  */
@@ -3302,6 +3938,20 @@ export declare interface OrganizationSettingsField extends OrganizationResponsiv
3302
3938
  enabled: boolean;
3303
3939
  };
3304
3940
  allowedSignInProviders?: SignInProvider[];
3941
+ /**
3942
+ * Social authentication provider for this organization
3943
+ * 'auth0' - Use Auth0 for social login (Kviff)
3944
+ * 'firebase' - Use Firebase Auth for social login (default)
3945
+ */
3946
+ socialAuthProvider?: 'auth0' | 'firebase';
3947
+ /**
3948
+ * Auth0 configuration for organizations using Auth0 social login.
3949
+ * Only relevant when socialAuthProvider === 'auth0'.
3950
+ */
3951
+ auth0?: {
3952
+ domain: string;
3953
+ clientId: string;
3954
+ };
3305
3955
  disableComments?: boolean;
3306
3956
  /**
3307
3957
  * Used on CNC webs - When buying a yearly subscription the recalculated monthly price is display below the yearly price
@@ -3347,6 +3997,11 @@ export declare interface OrganizationSettingsField extends OrganizationResponsiv
3347
3997
  id: string;
3348
3998
  };
3349
3999
  };
4000
+ /**
4001
+ * With this setting, it's possible for the users to purchase with discounted price for the same monetization, if it expired before 1 month ago.
4002
+ * The logic can be found here: {@link apps/api/functions/src/model/purchase.ts}
4003
+ * At the same time `allowExpired: true` setting on a monetization variant will enable discounted variant if the user has active or expired purchase of monetizationRef.
4004
+ */
3350
4005
  cancelledSubscriptionDiscount?: {
3351
4006
  enabled: boolean;
3352
4007
  };
@@ -3362,6 +4017,28 @@ export declare interface OrganizationSettingsField extends OrganizationResponsiv
3362
4017
  pushNotifications?: {
3363
4018
  enabled?: boolean;
3364
4019
  };
4020
+ recommendations?: {
4021
+ videosNoOlderThan?: {
4022
+ unit: 'month';
4023
+ value: number;
4024
+ };
4025
+ };
4026
+ /**
4027
+ * Payment flow configuration
4028
+ * @default PaymentFlow.NEW
4029
+ */
4030
+ paymentFlow?: PaymentFlow;
4031
+ contentMetadata?: {
4032
+ [MetadataFieldId.SHORT_NAME]?: ContentMetadataOptions;
4033
+ [MetadataFieldId.RICH_DESCRIPTION]?: ContentMetadataOptions;
4034
+ [MetadataFieldId.TAGS]?: ContentMetadataOptions;
4035
+ [MetadataFieldId.FILM_DETAILS]?: ContentMetadataOptions;
4036
+ [MetadataFieldId.AUDIENCE_LIMITATIONS]?: ContentMetadataOptions;
4037
+ [MetadataFieldId.PRODUCT_PLACEMENT]?: ContentMetadataOptions;
4038
+ };
4039
+ aiProcessing?: {
4040
+ assets?: boolean;
4041
+ };
3365
4042
  }
3366
4043
 
3367
4044
  /**
@@ -3376,7 +4053,7 @@ export declare type OtherSource = SourceBase & StartAndContinuePosition & {
3376
4053
 
3377
4054
  export declare interface PaginatedResponse<T = unknown, U extends NextPageParamType = NextPageParamType> {
3378
4055
  items: T[];
3379
- nextPageParams: {
4056
+ nextPageParams: ({
3380
4057
  offset: number;
3381
4058
  limit: number;
3382
4059
  } & (U extends 'screenId' ? {
@@ -3388,7 +4065,7 @@ export declare interface PaginatedResponse<T = unknown, U extends NextPageParamT
3388
4065
  rowId: string;
3389
4066
  } : U extends 'filter' ? {
3390
4067
  filter: Omit<RowFilterField, 'limit'>;
3391
- } : {}) | null;
4068
+ } : object)) | null;
3392
4069
  }
3393
4070
 
3394
4071
  /**
@@ -3423,20 +4100,6 @@ export declare interface PartialRegistrationOverlayContextState {
3423
4100
  voucher?: string;
3424
4101
  }
3425
4102
 
3426
- /**
3427
- * @public
3428
- * Generic interface for sources that can be identified by a path (video or TV channel)
3429
- */
3430
- export declare type PathSourceParams = PathSourceParamsTvChannel | PathSourceParamsVideo;
3431
-
3432
- declare interface PathSourceParamsTvChannel extends Partial<ChannelSourceParams> {
3433
- path: `tvChannels/${string}`;
3434
- }
3435
-
3436
- declare interface PathSourceParamsVideo extends Partial<Omit<VodTivioSourceParams, 'videoPath'>> {
3437
- path: `videos/${string}`;
3438
- }
3439
-
3440
4103
  export declare type PatreonCreatorData = {
3441
4104
  campaign: string;
3442
4105
  tiers: Tier[];
@@ -3480,6 +4143,17 @@ export declare type PatreonUserResponse = {
3480
4143
  errors?: PatreonError[];
3481
4144
  };
3482
4145
 
4146
+ /**
4147
+ * @public
4148
+ *
4149
+ * - NEW: Automatically show payment overlay when tasting video ends (ContentIsPaidOverlay with poster)
4150
+ * - LEGACY: Old behavior - users must manually click to purchase, no automatic overlay
4151
+ */
4152
+ export declare enum PaymentFlow {
4153
+ NEW = "new",
4154
+ LEGACY = "legacy"
4155
+ }
4156
+
3483
4157
  /**
3484
4158
  * @public
3485
4159
  */
@@ -3596,11 +4270,6 @@ export declare type PlayerConfig = {
3596
4270
  */
3597
4271
  name: 'IMA SDK' | 'TIVIO AD SERVICE';
3598
4272
  };
3599
- /**
3600
- * If true, then TV channels are not available for anonymous users and they will be shown an overlay to sign in.
3601
- * @default false
3602
- */
3603
- disableTvChannelsForAnonymousUsers?: boolean;
3604
4273
  };
3605
4274
 
3606
4275
  /**
@@ -3612,6 +4281,8 @@ export declare interface PlayerEngineConfig {
3612
4281
  isAd?: boolean;
3613
4282
  positionMs?: number;
3614
4283
  url: string;
4284
+ sessionType?: SessionType;
4285
+ sourcePlayMode?: SourcePlayMode;
3615
4286
  }
3616
4287
 
3617
4288
  /**
@@ -3717,6 +4388,43 @@ export declare interface PlayerEngineInterface {
3717
4388
  selectPlaybackSpeed?: (playbackSpeed: number) => void;
3718
4389
  destroy(): Promise<void>;
3719
4390
  getBufferedInfo?(): BufferChunk[];
4391
+ /**
4392
+ * Clears buffered segments ahead of the current playback position.
4393
+ * Used during interactive streaming camera switches to enable faster content transition.
4394
+ *
4395
+ * @param safeMarginMs - Milliseconds of buffer to keep ahead of current position (default: 0)
4396
+ * @param secondarySourceId - Optional ID of the secondary source being switched to
4397
+ * @returns Promise that resolves when buffer clearing is complete
4398
+ */
4399
+ clearBufferAhead?(safeMarginMs?: number, secondarySourceId?: string): Promise<void>;
4400
+ /**
4401
+ * Sets the streaming profile to configure buffer behavior.
4402
+ * Use 'low' for interactive streaming with fast camera switches,
4403
+ * 'medium' for balanced behavior, 'high' for maximum stability.
4404
+ *
4405
+ * @param profile - The streaming profile to apply
4406
+ */
4407
+ setStreamingProfile?(profile: StreamingProfile): void;
4408
+ /**
4409
+ * Gets the current streaming profile.
4410
+ */
4411
+ getStreamingProfile?(): StreamingProfile;
4412
+ /**
4413
+ * Set whether to prefer native HLS playback over MSE.
4414
+ * This is required for AirPlay to work properly in Safari.
4415
+ * Must be called before play() to take effect.
4416
+ *
4417
+ * @param preferNativeHls - Whether to prefer native HLS playback
4418
+ */
4419
+ setPreferNativeHls?(preferNativeHls: boolean): void;
4420
+ /**
4421
+ * Reload the current source with the current configuration (including preferNativeHls).
4422
+ * This is a lightweight reload that doesn't go through the full playerWrapper source pipeline.
4423
+ * Used for switching between MSE and native HLS playback for AirPlay.
4424
+ *
4425
+ * @returns Promise that resolves when reload is complete
4426
+ */
4427
+ reloadCurrentConfig?(): Promise<void>;
3720
4428
  lastQuality: number | null;
3721
4429
  /**
3722
4430
  * Attribute indicating that the video is to be played "inline"
@@ -3724,11 +4432,6 @@ export declare interface PlayerEngineInterface {
3724
4432
  */
3725
4433
  setPlaysInline(value: boolean): void;
3726
4434
  setControlsList(value: string[]): void;
3727
- /** Gets resolution of the video element in pixels - container size, not the actual source quality resolution */
3728
- getVideoResolution(): {
3729
- width: number;
3730
- height: number;
3731
- };
3732
4435
  }
3733
4436
 
3734
4437
  /**
@@ -3824,11 +4527,19 @@ export declare interface PlayerInterface {
3824
4527
  */
3825
4528
  setPlaysInline?: (value: boolean) => void;
3826
4529
  setControlsList?: (value: string[]) => void;
3827
- /** Gets resolution of the video element in pixels - container size, not the actual source quality resolution */
3828
- getVideoResolution(): {
3829
- width: number;
3830
- height: number;
3831
- };
4530
+ /**
4531
+ * Clears buffered segments ahead of the current playback position.
4532
+ * Used during interactive streaming camera switches to enable faster content transition.
4533
+ *
4534
+ * @param safeMarginMs - Milliseconds of buffer to keep ahead of current position (default: 0)
4535
+ * @returns Promise that resolves when buffer clearing is complete
4536
+ */
4537
+ clearBufferAhead?: (safeMarginMs?: number, secondarySourceId?: string) => Promise<void>;
4538
+ /**
4539
+ * Callback to receive camera switch progress updates.
4540
+ * Called by the engine during interactive streaming camera switches.
4541
+ */
4542
+ onCameraSwitchProgress?: (progress: CameraSwitchProgress) => void;
3832
4543
  }
3833
4544
 
3834
4545
  /**
@@ -3898,7 +4609,6 @@ export declare interface PlayerSourceInterface<T extends NonAdSourceType = NonAd
3898
4609
  start?: Date;
3899
4610
  from?: Date;
3900
4611
  sourceHistory?: string[];
3901
- staticAdsConfig?: StaticAdsBreak[];
3902
4612
  }
3903
4613
 
3904
4614
  /**
@@ -3917,7 +4627,6 @@ export declare interface PlayerSourceParams<T extends NonAdSourceType = NonAdSou
3917
4627
  seekingMatrix?: SeekingMatrixTemplate;
3918
4628
  sessionType?: VideoSourceField['sessionType'];
3919
4629
  sessionId?: string;
3920
- staticAdsConfig?: StaticAdsBreak[];
3921
4630
  }
3922
4631
 
3923
4632
  export declare type PlayersScene = InteractiveWidgetSceneBase<InteractiveWidgetSceneTemplateType.PLAYERS>;
@@ -3931,13 +4640,6 @@ export declare type PlayerState = 'idle' | 'playing' | 'paused';
3931
4640
  * @public
3932
4641
  */
3933
4642
  export declare interface PlayerWrapper {
3934
- /**
3935
- * Unique id of the player wrapper instance, set at construction time
3936
- * (e.g. by `tivio.getPlayerWrapper(id)`). Used to scope DOM ids of
3937
- * player-owned elements (IMA ad containers, content video element, …)
3938
- * so multiple players on the same page don't collide.
3939
- */
3940
- readonly id: string;
3941
4643
  /**
3942
4644
  * Report that playback of video has finished
3943
4645
  */
@@ -3976,6 +4678,11 @@ export declare interface PlayerWrapper {
3976
4678
  availableLanguages: LangCode[] | null;
3977
4679
  canReplay: boolean;
3978
4680
  currentSecondarySource: Video | null;
4681
+ /**
4682
+ * Camera switch transition progress for interactive streaming.
4683
+ * Non-null when a camera switch is in progress.
4684
+ */
4685
+ cameraSwitchProgress: CameraSwitchProgress | null;
3979
4686
  currentTime: number;
3980
4687
  /**
3981
4688
  * Currently playing source
@@ -4026,6 +4733,10 @@ export declare interface PlayerWrapper {
4026
4733
  * Retry to play a video that failed to start playing (e.g. due to a network error)
4027
4734
  */
4028
4735
  retry: () => void;
4736
+ /**
4737
+ * Refresh the current source by calling getSourceUrl without sourceHistory.
4738
+ */
4739
+ refreshSource: () => Promise<void>;
4029
4740
  togglePlayPause: () => void;
4030
4741
  seekTo: (ms: number) => void;
4031
4742
  /**
@@ -4034,6 +4745,21 @@ export declare interface PlayerWrapper {
4034
4745
  setVolume: (volume: number) => void;
4035
4746
  changeLanguage: (langCode: LangCode) => Promise<void>;
4036
4747
  changeToFallbackSource: () => Promise<void>;
4748
+ /**
4749
+ * Switch to HLS source for AirPlay (Safari/iOS only).
4750
+ * Preserves current playback position.
4751
+ */
4752
+ switchToHlsForAirplay: () => Promise<void>;
4753
+ /**
4754
+ * Switch back to DASH from HLS after AirPlay disconnects.
4755
+ * Preserves current playback position.
4756
+ */
4757
+ switchToDashFromAirplay: () => Promise<void>;
4758
+ /**
4759
+ * Reload the current source while preserving playback position.
4760
+ * Used when switching between native HLS and MSE playback modes.
4761
+ */
4762
+ reloadCurrentSource: () => Promise<void>;
4037
4763
  /**
4038
4764
  * change volume by value between -1,1
4039
4765
  */
@@ -4042,10 +4768,6 @@ export declare interface PlayerWrapper {
4042
4768
  setCanPlay: (canPlay: boolean) => void;
4043
4769
  toggleMuted: () => void;
4044
4770
  getQualities: () => Track[];
4045
- getVideoResolution: () => {
4046
- width: number;
4047
- height: number;
4048
- };
4049
4771
  playNativeImaAd: (url: string) => void;
4050
4772
  playSourceAfterAdsRun: () => void;
4051
4773
  putAd: (ad: AdSourceInterface) => void;
@@ -4062,10 +4784,20 @@ export declare interface PlayerWrapper {
4062
4784
  seekToLive: () => void;
4063
4785
  seekToLiveInternal: () => void;
4064
4786
  setIsBuffering: (isBuffering: boolean) => void;
4787
+ isCasting: boolean;
4065
4788
  setIsCasting: (isCasting: boolean) => void;
4066
4789
  skipAd: () => void;
4067
4790
  skipAllAds: () => void;
4068
4791
  switchSecondarySource: (activeVideoId?: string) => Promise<void>;
4792
+ /**
4793
+ * Set whether to prefer HLS sources over DASH.
4794
+ * Used in Safari/iOS when AirPlay is available, as AirPlay only supports HLS streaming.
4795
+ */
4796
+ setPreferHls: (preferHls: boolean) => void;
4797
+ /**
4798
+ * Suppress watermark tamper detection during AirPlay source switching.
4799
+ */
4800
+ setAirplaySwitching?: (isSwitching: boolean) => void;
4069
4801
  }
4070
4802
 
4071
4803
  /**
@@ -4090,19 +4822,7 @@ export declare enum PlayerWrapperEvents {
4090
4822
  /**
4091
4823
  * Un-pause was triggered
4092
4824
  */
4093
- 'unpause_triggered' = "unpause_triggered",
4094
- /**
4095
- * Triggered when an ad starts playing
4096
- */
4097
- 'ad-started' = "ad-started",
4098
- /**
4099
- * Triggered when an ad finishes playing
4100
- */
4101
- 'ad-ended' = "ad-ended",
4102
- /**
4103
- * Triggered when companion ads are available for the current ad
4104
- */
4105
- 'companion-ads' = "companion-ads"
4825
+ 'unpause_triggered' = "unpause_triggered"
4106
4826
  }
4107
4827
 
4108
4828
  /**
@@ -4118,6 +4838,22 @@ export declare enum PlayerWrapperEventType {
4118
4838
  */
4119
4839
  export declare type PlayerWrapperEventTypeType = `${PlayerWrapperEventType}`;
4120
4840
 
4841
+ export declare type PollQuestion = CurrentQuestion<PollQuestionAnswer>;
4842
+
4843
+ export declare interface PollQuestionAnswer extends BaseQuestionAnswer {
4844
+ votes?: number;
4845
+ }
4846
+
4847
+ /**
4848
+ * A poll-flavored interactive widget. No scoring / leaderboard / countdown — just
4849
+ * "here's a question, here are the vote counts". Uses a narrower state machine.
4850
+ */
4851
+ export declare interface PollWidget<TScene extends InteractiveWidgetScene = InteractiveWidgetScene> extends BaseInteractiveWidget<PollQuestionAnswer, PollWidgetState, TScene> {
4852
+ readonly type: InteractiveWidgetType.POLL;
4853
+ }
4854
+
4855
+ export declare type PollWidgetState = InteractiveWidgetState.IDLE | InteractiveWidgetState.CURRENT_QUESTION | InteractiveWidgetState.LEADERBOARD | InteractiveWidgetState.RESET_GAME | InteractiveWidgetState.NEXT_STATE;
4856
+
4121
4857
  /**
4122
4858
  * @public
4123
4859
  */
@@ -4130,6 +4866,20 @@ export declare type PlayerWrapperEventTypeType = `${PlayerWrapperEventType}`;
4130
4866
  */
4131
4867
  export declare type PrerollCheck = (source: PlayerSource) => Promise<AdSourceInterface | null>;
4132
4868
 
4869
+ export declare type PresentBannerExtendRowData = {
4870
+ name: Translation;
4871
+ subname?: Translation;
4872
+ description?: Translation;
4873
+ avatars?: ScalableAsset[];
4874
+ avatarsText?: Translation;
4875
+ asset?: ScalableAsset;
4876
+ buttons?: RowButton[];
4877
+ };
4878
+
4879
+ export declare type PricesField = {
4880
+ [currency in Currency]?: number | null;
4881
+ };
4882
+
4133
4883
  export declare enum primaPlusMonetizationLevel {
4134
4884
  light = "z7soJTA2dYSxnOOJw7B0",
4135
4885
  premium = "kwfM0D7Vzv5wfLf5go8o",
@@ -4228,8 +4978,9 @@ export declare interface ProgressMetadata {
4228
4978
  * @public
4229
4979
  */
4230
4980
  export declare interface Promotion {
4981
+ id?: string;
4231
4982
  duration?: Duration;
4232
- price?: number;
4983
+ prices?: PricesField;
4233
4984
  requiresPaymentAuthorization?: boolean;
4234
4985
  hideOtherSubscriptions?: boolean;
4235
4986
  }
@@ -4279,7 +5030,9 @@ export declare interface PurchasableMonetization extends Monetization {
4279
5030
  */
4280
5031
  price?: string | number;
4281
5032
  promotion: Promotion | null;
4282
- frequency?: MONETIZATION_FREQUENCY;
5033
+ frequency?: Omit<FrequencyInfo, 'title'> & {
5034
+ title: string;
5035
+ };
4283
5036
  frequencyInfo?: FrequencyInfo;
4284
5037
  durationDays?: number;
4285
5038
  /**
@@ -4319,7 +5072,30 @@ export declare interface PurchasableMonetization extends Monetization {
4319
5072
  * Number of seats left for the subscription.
4320
5073
  */
4321
5074
  seatsLeft?: number;
5075
+ /**
5076
+ * Trial period in milliseconds for the subscription.
5077
+ */
5078
+ trialPeriod?: number;
5079
+ /**
5080
+ * Maximum quantity of the subscription.
5081
+ */
4322
5082
  maxQuantity?: number;
5083
+ /**
5084
+ * Currency of the monetization price.
5085
+ */
5086
+ currency?: Currency;
5087
+ /**
5088
+ * Detailed price information, including currency and amount - Takes the price getter from purchsable monetization entity.
5089
+ */
5090
+ detailedPrice?: DetailedPrice;
5091
+ /**
5092
+ * Subtitle for the monetization, used in UI.
5093
+ */
5094
+ subtitle?: string;
5095
+ /**
5096
+ * Banner title for the monetization, used in UI.
5097
+ */
5098
+ bannerTitle?: string;
4323
5099
  }
4324
5100
 
4325
5101
  /**
@@ -4351,6 +5127,7 @@ export declare type Purchase = {
4351
5127
  monetization: PurchaseMonetization | null;
4352
5128
  monetizationId: string | null;
4353
5129
  monetizationRef: any | null;
5130
+ nextPaymentDate: Date | null;
4354
5131
  status: PurchaseStatus | null;
4355
5132
  type: PurchaseType | null;
4356
5133
  /**
@@ -4737,17 +5514,12 @@ export declare interface QerkoTransaction {
4737
5514
  paymentStatus: string | null;
4738
5515
  getPaymentInfo: () => Promise<void>;
4739
5516
  voucherId?: string;
5517
+ isLoading: boolean;
4740
5518
  }
4741
5519
 
4742
5520
  export declare type QRCodeScene = InteractiveWidgetSceneBase<InteractiveWidgetSceneTemplateType.QR_CODE>;
4743
5521
 
4744
- export declare interface QuestionAnswer {
4745
- id: string;
4746
- answer: Translation;
4747
- isCorrect?: boolean;
4748
- votes?: number;
4749
- status?: AnswerStatus;
4750
- }
5522
+ export declare type QuestionAnswer = QuizQuestionAnswer | PollQuestionAnswer;
4751
5523
 
4752
5524
  export declare enum QuestionEvents {
4753
5525
  NEW_QUESTION = "new_question",
@@ -4765,7 +5537,7 @@ export declare interface QuestionRepository {
4765
5537
  readonly selectedAnswerId: string | undefined;
4766
5538
  isSubmitted: boolean;
4767
5539
  isSubmitting: boolean;
4768
- setCurrentQuestion: (question: CurrentQuestion | null, role: QuizGameRole, secondsToAnswer: number, shouldEnterAtTimestampMs?: number) => void;
5540
+ setCurrentQuestion: (question: CurrentQuestion | null, role: InteractiveWidgetRole, secondsToAnswer: number, shouldEnterAtTimestampMs?: number, shouldAdjustEndTimestampMs?: boolean) => void;
4769
5541
  selectAnswer: (answerId: string | undefined) => void;
4770
5542
  setShowCountdown: (showCountdown: boolean) => void;
4771
5543
  reset: () => void;
@@ -4779,41 +5551,28 @@ export declare type QuestionRepositoryEventMap = {
4779
5551
  [QuestionEvents.QUESTION_TIMEOUT]: (question: CurrentQuestion | null) => void;
4780
5552
  };
4781
5553
 
4782
- export declare interface QuizGameGroupStats {
4783
- answerPercentages: Record<string, number>;
4784
- averageScore: number;
4785
- correctAnswersRatio: number;
4786
- }
4787
-
4788
- export declare enum QuizGameGroupType {
4789
- HIGHLIGHTED_PLAYERS = "HIGHLIGHTED_PLAYERS",
4790
- /** Participants playing in Offline mode */
4791
- LOCAL_PLAYERS = "LOCAL_PLAYERS",
4792
- ALL = "ALL",
4793
- PARTY = "PARTY"
4794
- }
5554
+ export declare type QuizQuestion = CurrentQuestion<QuizQuestionAnswer>;
4795
5555
 
4796
- export declare enum QuizGameRole {
4797
- OBS = "OBS",
4798
- HOST = "HOST",
4799
- PLAYER = "PLAYER",
4800
- LOCAL_PLAYER = "LOCAL_PLAYER"
5556
+ export declare interface QuizQuestionAnswer extends BaseQuestionAnswer {
5557
+ isCorrect?: boolean;
5558
+ votes?: number;
4801
5559
  }
4802
5560
 
4803
- export declare enum QuizGameStatus {
4804
- /**
4805
- * Waiting to start the quiz / question
4806
- */
4807
- WAITING = "WAITING",
4808
- IN_PROGRESS = "IN_PROGRESS",
4809
- IN_BETWEEN_QUESTIONS = "IN_BETWEEN_QUESTIONS",
4810
- DONE = "DONE"
5561
+ /**
5562
+ * A quiz-flavored interactive widget. Adds scoring, leaderboard, and countdown
5563
+ * concepts on top of the base, and narrows answers to `QuizQuestionAnswer`.
5564
+ */
5565
+ export declare interface QuizWidget<TScene extends InteractiveWidgetScene = InteractiveWidgetScene> extends BaseInteractiveWidget<QuizQuestionAnswer, QuizWidgetState, TScene> {
5566
+ readonly type: InteractiveWidgetType.QUIZ;
5567
+ readonly leaderboard: LeaderboardGroupItem | null;
5568
+ readonly lastQuestionTopScorers: LeaderboardPlayer[];
5569
+ readonly highlightedUsersIds: string[];
5570
+ readonly secondsToAnswer: number;
5571
+ readonly showCountdown: boolean;
5572
+ readonly questionRepository: QuestionRepository;
4811
5573
  }
4812
5574
 
4813
- export declare enum QuizGameType {
4814
- POLL = "POLL",
4815
- QUIZ = "QUIZ"
4816
- }
5575
+ export declare type QuizWidgetState = InteractiveWidgetState;
4817
5576
 
4818
5577
  /**
4819
5578
  * @public
@@ -4930,6 +5689,11 @@ export declare interface RemoteControlPairPayload {
4930
5689
  profileId: string;
4931
5690
  }
4932
5691
 
5692
+ export declare interface RemoteControlPairResponse {
5693
+ sessionId: string;
5694
+ videoId: string;
5695
+ }
5696
+
4933
5697
  export declare interface RemoteControlPlaybackControlPayload {
4934
5698
  sessionId: string;
4935
5699
  videoId: string;
@@ -5015,6 +5779,16 @@ export declare type RequiredNullable<T> = {
5015
5779
  [P in keyof T]-?: P extends OptionalKeys<T> ? T[P] | null : T[P];
5016
5780
  };
5017
5781
 
5782
+ export declare interface ReviewItem {
5783
+ asset: ScalableAsset;
5784
+ name: Translation;
5785
+ subname?: Translation;
5786
+ rating: 1 | 2 | 3 | 4 | 5;
5787
+ description?: Translation;
5788
+ }
5789
+
5790
+ export declare type ReviewTileSpecificData = ReviewItem;
5791
+
5018
5792
  /**
5019
5793
  * @public
5020
5794
  */
@@ -5037,6 +5811,7 @@ export declare interface RouterOverrides {
5037
5811
  gridType: GRID_TYPES.ROW;
5038
5812
  rowId: string;
5039
5813
  organizationId?: string;
5814
+ applicationHandle?: string;
5040
5815
  } | {
5041
5816
  gridType: GRID_TYPES.VIDEO;
5042
5817
  videoId: string;
@@ -5068,6 +5843,7 @@ export declare interface RouterOverrides {
5068
5843
  goToRecommendedFromOrganizationRow: (screenId: string, rowId: string) => void;
5069
5844
  goToMagentaMomentsPage: (voucher?: string) => void;
5070
5845
  goToVoucherRedeemPage: () => void;
5846
+ goToSubscriptionsPage: (organizationHandle?: string) => void;
5071
5847
  updateParams: (params: URLSearchParams) => void;
5072
5848
  navigate: (path: string) => void;
5073
5849
  }
@@ -5086,25 +5862,7 @@ export declare interface RouterOverridesContextState {
5086
5862
  /**
5087
5863
  * @public
5088
5864
  */
5089
- export declare interface Row {
5090
- id: string;
5091
- rowId: string;
5092
- name: string;
5093
- description?: string;
5094
- assets: AssetsField;
5095
- type: ScreenRowType;
5096
- isLiveRow: boolean;
5097
- tiles: PaginationInterface<ItemInRow>;
5098
- numberOfLines?: number;
5099
- monetizations?: {
5100
- monetizationRef: any;
5101
- }[];
5102
- rowComponent: RowComponent.ROW | RowComponent.BANNER;
5103
- itemComponent: RowItemComponent | BannerItemComponent;
5104
- organizationId?: string;
5105
- bottomComponent?: BottomComponent;
5106
- showDescriptionAsTitle?: boolean;
5107
- }
5865
+ export declare type Row = StaticRow | DynamicRow;
5108
5866
 
5109
5867
  /**
5110
5868
  * @public
@@ -5122,17 +5880,41 @@ export declare enum ROW_ITEM_TYPES {
5122
5880
  /**
5123
5881
  * @public
5124
5882
  */
5125
- export declare interface RowBanner extends Row {
5883
+ export declare interface RowBanner extends DynamicRow {
5126
5884
  rowComponent: RowComponent.BANNER;
5127
5885
  itemComponent: BannerItemComponent;
5128
5886
  }
5129
5887
 
5888
+ export declare interface RowButton {
5889
+ id: string;
5890
+ enabled: boolean;
5891
+ href: string;
5892
+ text: Translation;
5893
+ variant: 'primary' | 'secondary';
5894
+ leftIcon?: 'play';
5895
+ }
5896
+
5130
5897
  /**
5131
5898
  * @public
5132
5899
  */
5133
5900
  export declare enum RowComponent {
5134
5901
  ROW = "ROW",
5135
- BANNER = "BANNER"
5902
+ BANNER = "BANNER",
5903
+ BENEFITS = "BENEFITS",
5904
+ REVIEWS = "REVIEWS",
5905
+ MONETIZATIONS = "MONETIZATIONS",
5906
+ SPLIT_LAYOUT = "SPLIT_LAYOUT",
5907
+ NUMBERS = "NUMBERS",
5908
+ FAQ = "FAQ",
5909
+ CTA_BANNER = "CTA_BANNER",
5910
+ PRESENT_BANNER = "PRESENT_BANNER",
5911
+ MONETIZATION_BANNER = "MONETIZATION_BANNER",
5912
+ VIDEO_BANNER = "VIDEO_BANNER",
5913
+ MEDIA_ACCORDEON = "MEDIA_ACCORDEON",
5914
+ EXPLORE = "EXPLORE",
5915
+ BACKGROUND_BANNER = "BACKGROUND_BANNER",
5916
+ PARTNER_LOGOS = "PARTNER_LOGOS",
5917
+ HOMEPAGE_BANNER = "HOMEPAGE_BANNER"
5136
5918
  }
5137
5919
 
5138
5920
  export declare enum RowFilterCollection {
@@ -5166,72 +5948,10 @@ export declare interface RowFilterWhereField {
5166
5948
  value: any;
5167
5949
  }
5168
5950
 
5169
- export declare type RowInScreen = {
5170
- /**
5171
- * Firebase document path. If not provided, the row is not defined in db and is dynamically generated (e.g. recommendation row).
5172
- */
5173
- path?: string;
5174
- /**
5175
- * Tivio row ID.
5176
- */
5177
- rowId: string;
5178
- /**
5179
- * If all items are from the same organization this will be set.
5180
- */
5181
- organizationId?: string;
5182
- /**
5183
- * Row name.
5184
- */
5185
- name: Translation;
5186
- /**
5187
- * Row filter based on which to pick tiles.
5188
- */
5189
- filter?: RowFilterField;
5190
- /**
5191
- * Row order in the screen.
5192
- */
5193
- order?: number;
5194
- /**
5195
- * Number of lines of the title.
5196
- */
5197
- numberOfLines?: number;
5198
- /**
5199
- * Standard row or a Banner.
5200
- */
5201
- rowComponent: RowComponent;
5202
- /**
5203
- * Component to use to render the tiles in the row.
5204
- */
5205
- itemComponent: RowItemComponent | BannerItemComponent;
5206
- /**
5207
- * Type of the row (continue to watch, custom, filter, ...).
5208
- */
5209
- type: ScreenRowType;
5210
- /**
5211
- * Items to display in the row.
5212
- */
5213
- tiles: GetTilesInRowResponse;
5214
- /**
5215
- * Setting for decided what to show bellow the tiles
5216
- */
5217
- bottomComponent?: BottomComponent;
5218
- /**
5219
- * Setting for decided whether to show description instead of title in the tiles
5220
- */
5221
- showDescriptionAsTitle?: boolean;
5222
- /**
5223
- * Setting for decided whether to hide title in the tiles/banners
5224
- */
5225
- hideTitle?: boolean;
5226
- /**
5227
- * Link to external URL
5228
- */
5229
- externalUrl?: string;
5230
- /**
5231
- * Title of Play button
5232
- */
5233
- playButtonTitle?: Translation;
5234
- };
5951
+ /**
5952
+ * Row in screen - can be either static or dynamic
5953
+ */
5954
+ export declare type RowInScreen = StaticRowInScreen | DynamicRowInScreen;
5235
5955
 
5236
5956
  /**
5237
5957
  * @public
@@ -5244,6 +5964,7 @@ export declare interface RowItem extends RowItemAssets {
5244
5964
  assets: AssetsField | null;
5245
5965
  application: RowItemApplicationData | null;
5246
5966
  feedVisible?: boolean;
5967
+ tileProps?: TileProps;
5247
5968
  }
5248
5969
 
5249
5970
  /**
@@ -5281,7 +6002,11 @@ export declare enum RowItemComponent {
5281
6002
  ROW_ITEM_CREATORS_LANDSCAPE = "ROW_ITEM_CREATORS_LANDSCAPE",
5282
6003
  ROW_ITEM_CIRCLED = "ROW_ITEM_CIRCLED",
5283
6004
  ROW_ITEM_HIGHLIGHTED = "ROW_ITEM_HIGHLIGHTED",
5284
- ROW_ITEM_PLAIN = "ROW_ITEM_PLAIN"
6005
+ ROW_ITEM_PLAIN = "ROW_ITEM_PLAIN",
6006
+ SIDE_BANNER = "SIDE_BANNER",
6007
+ ROW_ITEM_FEATURED = "ROW_ITEM_FEATURED",
6008
+ CATEGORY_GRID = "CATEGORY_GRID",
6009
+ HERO_BANNER = "HERO_BANNER"
5285
6010
  }
5286
6011
 
5287
6012
  /**
@@ -5298,6 +6023,16 @@ export declare type RowItemsSubscription = (rowId: string, cb: (error: Error | n
5298
6023
  hasNextPage: boolean;
5299
6024
  } | null, fetchMore: null | ((count?: number) => void), isLoading: boolean) => void, limit?: number) => Disposer_2;
5300
6025
 
6026
+ /**
6027
+ * @public
6028
+ */
6029
+ export declare interface RowMonetizationData {
6030
+ id: string;
6031
+ path: string;
6032
+ placementType: 'channel' | 'tvChannel' | 'condition' | 'video' | 'section' | 'row';
6033
+ type: MonetizationType;
6034
+ }
6035
+
5301
6036
  /**
5302
6037
  * RowOrderByFieldPath that is used in @tivio/firebase needs to be retyped here.
5303
6038
  * @public
@@ -5310,7 +6045,7 @@ export declare enum RowOrderByFieldPath {
5310
6045
  /**
5311
6046
  * @public
5312
6047
  */
5313
- export declare interface RowStandard extends Row {
6048
+ export declare interface RowStandard extends DynamicRow {
5314
6049
  rowComponent: RowComponent.ROW;
5315
6050
  itemComponent: RowItemComponent;
5316
6051
  }
@@ -5349,7 +6084,7 @@ declare type SceneMetadata<TType extends InteractiveWidgetSceneTemplateType> = T
5349
6084
  } : TType extends InteractiveWidgetSceneTemplateType.LEADERBOARD ? {
5350
6085
  highlightedPlayers: LeaderboardPlayer[];
5351
6086
  topPlayers: LeaderboardPlayer[];
5352
- stats?: QuizGameGroupStats;
6087
+ stats?: InteractiveWidgetGroupStats;
5353
6088
  } : TType extends InteractiveWidgetSceneTemplateType.QR_CODE ? Record<Extract<SceneMetadataKeys[TType], string>, string> : TType extends InteractiveWidgetSceneTemplateType.AD_BANNER ? Record<Extract<SceneMetadataKeys[TType], string>, string> : TType extends InteractiveWidgetSceneTemplateType.PLAYERS ? Record<Extract<SceneMetadataKeys[TType], string>, string> : object;
5354
6089
 
5355
6090
  export declare interface SceneMetadataKeys {
@@ -5423,6 +6158,11 @@ declare interface Screen_2 {
5423
6158
  hasNextPage: boolean;
5424
6159
  refetchIfNeeded: () => Promise<void>;
5425
6160
  allowOrganizationBanner?: boolean;
6161
+ /**
6162
+ * Path to content (e.g., "videos/ID" or "tvChannels/ID").
6163
+ * Used for PLAYER screen type to specify which content to play.
6164
+ */
6165
+ contentPath?: string;
5426
6166
  }
5427
6167
  export { Screen_2 as Screen }
5428
6168
 
@@ -5454,7 +6194,7 @@ export declare type ScreenConfig = {
5454
6194
  /**
5455
6195
  * @public
5456
6196
  */
5457
- export declare type ScreenRowType = 'filter' | 'custom' | 'continueToWatch' | 'favourites' | 'topWatched' | 'applications';
6197
+ export declare type ScreenRowType = 'filter' | 'custom' | 'continueToWatch' | 'favourites' | 'topWatched' | 'applications' | 'static';
5458
6198
 
5459
6199
  /**
5460
6200
  * Listen to screen data
@@ -5471,7 +6211,9 @@ export declare enum ScreenType {
5471
6211
  EMBED = "embed",
5472
6212
  RECOMMENDATION = "recommendation",
5473
6213
  FEED = "feed",
5474
- EPG = "epg"
6214
+ EPG = "epg",
6215
+ LANDING = "landing",
6216
+ PLAYER = "player"
5475
6217
  }
5476
6218
 
5477
6219
  /**
@@ -5496,12 +6238,11 @@ export declare type SdkReactConfig = Omit<TivioConfig, 'language'> & {
5496
6238
  };
5497
6239
 
5498
6240
  /**
5499
- * @public
6241
+ * Narrows away `InternalInteractiveWidgetMethods` from any concrete widget
6242
+ * type. Distributes over discriminated unions so `SDKWidget<InteractiveWidget>`
6243
+ * stays a union of `SDKWidget<QuizWidget> | SDKWidget<PollWidget>`.
5500
6244
  */
5501
- export declare interface SDKUserAuthCallbacks {
5502
- onGoToLogin?: () => void;
5503
- onGoToRegistration?: () => void;
5504
- }
6245
+ export declare type SDKWidget<T> = T extends unknown ? Omit<T, InternalInteractiveWidgetMethods> : never;
5505
6246
 
5506
6247
  /**
5507
6248
  * @public
@@ -5717,7 +6458,22 @@ export declare const showGdprConsentPreferences: () => Promise<void>;
5717
6458
  /**
5718
6459
  * @public
5719
6460
  */
5720
- export declare type SignInProvider = 'google' | 'patreon' | 'apple';
6461
+ export declare interface SideBannerProps {
6462
+ title: string;
6463
+ description: string;
6464
+ cover: string;
6465
+ backgroundColor?: string;
6466
+ buttonText?: string;
6467
+ onButtonClick?: () => void;
6468
+ buttonHref?: string;
6469
+ imagePosition?: 'left' | 'right';
6470
+ textBackgroundColor?: string;
6471
+ }
6472
+
6473
+ /**
6474
+ * @public
6475
+ */
6476
+ export declare type SignInProvider = 'google' | 'patreon' | 'apple' | 'facebook';
5721
6477
 
5722
6478
  /**
5723
6479
  * Simplified VideoController interface for external rendering
@@ -5806,27 +6562,6 @@ export declare interface SimplifiedVideoController {
5806
6562
  muted: boolean;
5807
6563
  volume: number;
5808
6564
  }) => void): void;
5809
- /**
5810
- * Add an event listener for ad started events
5811
- * @param event - Must be 'ad-started'
5812
- * @param callback - Function called when an ad starts playing
5813
- */
5814
- addEventListener(event: 'ad-started', callback: (adMetadata: AdMetadata & {
5815
- customAdMetadata?: Record<string, unknown> | null;
5816
- ctaElement: HTMLElement | null;
5817
- }) => void): void;
5818
- /**
5819
- * Add an event listener for ad ended events
5820
- * @param event - Must be 'ad-ended'
5821
- * @param callback - Function called when an ad finishes playing
5822
- */
5823
- addEventListener(event: 'ad-ended', callback: () => void): void;
5824
- /**
5825
- * Add an event listener for companion ads events
5826
- * @param event - Must be 'companion-ads'
5827
- * @param callback - Function called when companion ads are available
5828
- */
5829
- addEventListener(event: 'companion-ads', callback: (companionAds: CompanionAd[]) => void): void;
5830
6565
  /**
5831
6566
  * Remove an event listener
5832
6567
  * @param event - The event name to stop listening for
@@ -5838,19 +6573,6 @@ export declare interface SimplifiedVideoController {
5838
6573
  * @param source - The new source to load (can be a video path, channel path, or source parameters)
5839
6574
  */
5840
6575
  setSource(source: WebPlayerProps['source']): void;
5841
- setAdsConfig(adsConfig: StaticAdsBreak[]): void;
5842
- /**
5843
- * Toggle the minimal OSD mode.
5844
- *
5845
- * When enabled, the player shows only a minimal set of controls (play/pause,
5846
- * volume and fullscreen) and a small center play/pause icon that briefly
5847
- * flashes when the state changes. Intended for small/pinned containers such
5848
- * as a scroll-fixed mini player in the corner of the page or a full-width
5849
- * mobile player pinned to the top of the viewport.
5850
- *
5851
- * @param isMinimal - Whether the minimal OSD should be used
5852
- */
5853
- setIsMinimal(isMinimal: boolean): void;
5854
6576
  /**
5855
6577
  * Destroy the player and clean up all resources
5856
6578
  */
@@ -5923,6 +6645,14 @@ export declare enum SourceType {
5923
6645
  VOD_EXTERNAL = "vod_external"
5924
6646
  }
5925
6647
 
6648
+ export declare interface SplitLayoutItem {
6649
+ asset: ScalableAsset;
6650
+ name: Translation;
6651
+ description?: Translation;
6652
+ }
6653
+
6654
+ export declare type SplitLayoutSpecificData = SplitLayoutItem;
6655
+
5926
6656
  /**
5927
6657
  * External information of video from SportyTv EPG import
5928
6658
  * @public
@@ -5970,24 +6700,230 @@ export declare interface StartLiveStreamResponse {
5970
6700
  error?: string;
5971
6701
  }
5972
6702
 
5973
- export declare type StaticAdsBreak = StaticAdsBreakPostrollPreroll | StaticAdsBreakMidroll | StaticAdsBreakReplacement;
6703
+ /**
6704
+ * Row components available for static rows (BENEFITS, FAQ, etc.)
6705
+ * Matches the rowComponent constraint in StaticRow type definition
6706
+ * @public
6707
+ */
6708
+ export declare const STATIC_ROW_COMPONENTS: readonly [RowComponent.BENEFITS, RowComponent.REVIEWS, RowComponent.MONETIZATIONS, RowComponent.SPLIT_LAYOUT, RowComponent.NUMBERS, RowComponent.FAQ, RowComponent.CTA_BANNER, RowComponent.PRESENT_BANNER, RowComponent.MONETIZATION_BANNER, RowComponent.VIDEO_BANNER, RowComponent.MEDIA_ACCORDEON, RowComponent.EXPLORE, RowComponent.BACKGROUND_BANNER, RowComponent.PARTNER_LOGOS, RowComponent.HOMEPAGE_BANNER];
5974
6709
 
5975
- export declare interface StaticAdsBreakMidroll {
5976
- type: 'midroll';
5977
- from: number;
5978
- url: string;
6710
+ /**
6711
+ * Static row (e.g. benefits, reviews, FAQ) - doesn't have itemComponent or dynamic fields
6712
+ * Uses special row components like BENEFITS, REVIEWS, FAQ, etc.
6713
+ * @public
6714
+ */
6715
+ export declare type StaticRow = StaticRowBenefits | StaticRowReviews | StaticRowNumbers | StaticRowSplitLayout | StaticRowFaq | StaticRowPresentBanner | StaticRowExplore | StaticRowCtaBanner | StaticRowWithoutCustomItems;
6716
+
6717
+ /**
6718
+ * Benefits row
6719
+ * @public
6720
+ */
6721
+ export declare interface StaticRowBenefits extends BaseRow {
6722
+ type: 'static';
6723
+ rowComponent: RowComponent.BENEFITS;
6724
+ customItems: BenefitTileSpecificData;
6725
+ screenRef?: string;
6726
+ videoRef?: string;
6727
+ buttons?: RowButton[];
5979
6728
  }
5980
6729
 
5981
- declare interface StaticAdsBreakPostrollPreroll {
5982
- type: 'preroll' | 'postroll';
5983
- url: string;
6730
+ /**
6731
+ * CTA Banner row
6732
+ * @public
6733
+ */
6734
+ export declare interface StaticRowCtaBanner extends BaseRow {
6735
+ type: 'static';
6736
+ rowComponent: RowComponent.CTA_BANNER;
6737
+ customItems: CtaBannerExtendRowData;
6738
+ screenRef?: string;
6739
+ videoRef?: string;
6740
+ variant?: 'light' | 'dark' | 'default' | 'large';
6741
+ heading?: Translation;
6742
+ subtitle?: {
6743
+ text: Translation;
6744
+ showIcon?: boolean;
6745
+ };
6746
+ button?: {
6747
+ href: string;
6748
+ text: Translation;
6749
+ };
5984
6750
  }
5985
6751
 
5986
- export declare interface StaticAdsBreakReplacement {
5987
- type: 'replacement';
5988
- url: string;
6752
+ /**
6753
+ * Explore row
6754
+ * @public
6755
+ */
6756
+ export declare interface StaticRowExplore extends BaseRow {
6757
+ type: 'static';
6758
+ rowComponent: RowComponent.EXPLORE;
6759
+ customItems: ExploreTileSpecificData;
6760
+ screenRef?: string;
6761
+ videoRef?: string;
6762
+ }
6763
+
6764
+ /**
6765
+ * FAQ row
6766
+ * @public
6767
+ */
6768
+ export declare interface StaticRowFaq extends BaseRow {
6769
+ type: 'static';
6770
+ rowComponent: RowComponent.FAQ;
6771
+ customItems: FaqTileSpecificData;
6772
+ screenRef?: string;
6773
+ videoRef?: string;
6774
+ email?: string;
6775
+ }
6776
+
6777
+ /**
6778
+ * Static row type - discriminated union by rowComponent
6779
+ */
6780
+ export declare type StaticRowInScreen = StaticRowInScreenCtaBanner | StaticRowInScreenPresentBanner | StaticRowInScreenVideoBanner | StaticRowInScreenHomepageBanner | StaticRowInScreenFaq | StaticRowInScreenBenefits | StaticRowInScreenWithTiles;
6781
+
6782
+ /**
6783
+ * Benefits static row - has tiles + buttons
6784
+ */
6785
+ declare type StaticRowInScreenBenefits = BaseStaticRowInScreen & {
6786
+ rowComponent: RowComponent.BENEFITS;
6787
+ buttons?: RowButton[];
6788
+ tiles: PaginatedResponse<TileData<'static'>, 'rowId'>;
6789
+ };
6790
+
6791
+ /**
6792
+ * CTA Banner static row - data flatten to row level (no tiles)
6793
+ */
6794
+ declare type StaticRowInScreenCtaBanner = BaseStaticRowInScreen & {
6795
+ rowComponent: RowComponent.CTA_BANNER;
6796
+ } & CtaBannerExtendRowData;
6797
+
6798
+ /**
6799
+ * FAQ static row - has description and email fields specific to FAQ
6800
+ */
6801
+ declare type StaticRowInScreenFaq = BaseStaticRowInScreen & {
6802
+ rowComponent: RowComponent.FAQ;
6803
+ description?: Translation;
6804
+ email?: string;
6805
+ tiles: PaginatedResponse<TileData<'static'>, 'rowId'>;
6806
+ };
6807
+
6808
+ /**
6809
+ * Homepage Banner static row - multiline banner for homepage (no tiles)
6810
+ */
6811
+ declare type StaticRowInScreenHomepageBanner = BaseStaticRowInScreen & {
6812
+ rowComponent: RowComponent.HOMEPAGE_BANNER;
6813
+ } & HomepageBannerExtendRowData;
6814
+
6815
+ /**
6816
+ * Present Banner static row - organization fields + videoPath flatten to row level (no tiles)
6817
+ */
6818
+ declare type StaticRowInScreenPresentBanner = BaseStaticRowInScreen & {
6819
+ rowComponent: RowComponent.PRESENT_BANNER;
6820
+ videoPath?: string;
6821
+ } & Omit<PresentBannerExtendRowData, 'name' | 'description'>;
6822
+
6823
+ /**
6824
+ * Video Banner static row - videoPath flatten to row level (no tiles)
6825
+ */
6826
+ declare type StaticRowInScreenVideoBanner = BaseStaticRowInScreen & {
6827
+ rowComponent: RowComponent.VIDEO_BANNER;
6828
+ videoPath?: string;
6829
+ };
6830
+
6831
+ /**
6832
+ * Static rows with tiles (NUMBERS, EXPLORE, etc.)
6833
+ */
6834
+ declare type StaticRowInScreenWithTiles = BaseStaticRowInScreen & {
6835
+ rowComponent: Exclude<RowComponent, RowComponent.CTA_BANNER | RowComponent.PRESENT_BANNER | RowComponent.VIDEO_BANNER | RowComponent.HOMEPAGE_BANNER | RowComponent.FAQ | RowComponent.BENEFITS>;
6836
+ tiles: PaginatedResponse<TileData<'static'>, 'rowId'>;
6837
+ };
6838
+
6839
+ /**
6840
+ * Numbers row
6841
+ * @public
6842
+ */
6843
+ export declare interface StaticRowNumbers extends BaseRow {
6844
+ type: 'static';
6845
+ rowComponent: RowComponent.NUMBERS;
6846
+ customItems: NumbersTileSpecificData;
6847
+ screenRef?: string;
6848
+ videoRef?: string;
6849
+ variant?: 'default' | 'large';
6850
+ }
6851
+
6852
+ /**
6853
+ * Present banner row
6854
+ * @public
6855
+ */
6856
+ export declare interface StaticRowPresentBanner extends BaseRow {
6857
+ type: 'static';
6858
+ rowComponent: RowComponent.PRESENT_BANNER;
6859
+ customItems: PresentBannerExtendRowData;
6860
+ screenRef?: string;
6861
+ videoRef?: string;
6862
+ subname?: Translation;
6863
+ avatars?: ScalableAsset[];
6864
+ avatarsText?: Translation;
6865
+ asset?: ScalableAsset;
6866
+ videoPath?: string;
6867
+ buttons?: RowButton[];
6868
+ }
6869
+
6870
+ /**
6871
+ * Reviews row
6872
+ * @public
6873
+ */
6874
+ export declare interface StaticRowReviews extends BaseRow {
6875
+ type: 'static';
6876
+ rowComponent: RowComponent.REVIEWS;
6877
+ customItems: ReviewTileSpecificData;
6878
+ screenRef?: string;
6879
+ videoRef?: string;
6880
+ }
6881
+
6882
+ /**
6883
+ * Split layout row
6884
+ * @public
6885
+ */
6886
+ export declare interface StaticRowSplitLayout extends BaseRow {
6887
+ type: 'static';
6888
+ rowComponent: RowComponent.SPLIT_LAYOUT;
6889
+ customItems: SplitLayoutSpecificData;
6890
+ screenRef?: string;
6891
+ videoRef?: string;
5989
6892
  }
5990
6893
 
6894
+ /**
6895
+ * Static row without customItems (video banner, media accordion, monetization banner, background banner)
6896
+ * @public
6897
+ */
6898
+ export declare interface StaticRowWithoutCustomItems extends BaseRow {
6899
+ type: 'static';
6900
+ rowComponent: RowComponent.VIDEO_BANNER | RowComponent.MEDIA_ACCORDEON | RowComponent.MONETIZATION_BANNER | RowComponent.BACKGROUND_BANNER | RowComponent.PARTNER_LOGOS;
6901
+ screenRef?: string;
6902
+ videoRef?: string;
6903
+ videoPath?: string;
6904
+ }
6905
+
6906
+ /**
6907
+ * Tile data for static rows with itemSpecificData (BENEFITS, FAQ, NUMBERS, SPLIT_LAYOUT, REVIEWS, EXPLORE).
6908
+ * @public
6909
+ */
6910
+ export declare interface StaticTileData<ItemSpecificData extends StaticTileItemSpecificData = StaticTileItemSpecificData> {
6911
+ /**
6912
+ * Specific data for an item type (e.g. benefit, faq, numbers, split layout, etc.).
6913
+ */
6914
+ itemSpecificData: ItemSpecificData;
6915
+ }
6916
+
6917
+ /**
6918
+ * Type for itemSpecificData in API tile responses.
6919
+ * Excludes types that don't use itemSpecificData in tiles:
6920
+ * - MediaAccordeonTileSpecificData: MEDIA_ACCORDEON only uses path/id/name fields
6921
+ * - PresentBannerExtendRowData: PRESENT_BANNER data is flatten to row level (no tiles)
6922
+ * - CtaBannerExtendRowData: CTA_BANNER data is flatten to row level (no tiles)
6923
+ * @public
6924
+ */
6925
+ export declare type StaticTileItemSpecificData = BenefitTileSpecificData | ReviewTileSpecificData | NumbersTileSpecificData | SplitLayoutSpecificData | FaqTileSpecificData | ExploreTileSpecificData | MediaAccordeonTileSpecificData;
6926
+
5991
6927
  /**
5992
6928
  * @public
5993
6929
  */
@@ -6002,6 +6938,15 @@ export declare interface StoreBadgeConfig {
6002
6938
  appId: string;
6003
6939
  }
6004
6940
 
6941
+ /**
6942
+ * @public
6943
+ * Streaming profile for buffer configuration.
6944
+ * - 'low': Minimal buffering for fastest camera switches (bufferingGoal: 3s)
6945
+ * - 'medium': Balanced buffering (bufferingGoal: 5s) - default
6946
+ * - 'high': Maximum buffering for stable playback (bufferingGoal: 15s)
6947
+ */
6948
+ export declare type StreamingProfile = 'low' | 'medium' | 'high';
6949
+
6005
6950
  export declare interface SubmitAnswerRequest {
6006
6951
  answerOptionId?: string;
6007
6952
  answerText?: string;
@@ -6070,6 +7015,25 @@ declare interface SubscriptionInfo {
6070
7015
  frequency: string;
6071
7016
  }
6072
7017
 
7018
+ /**
7019
+ * Extended language codes for subtitle tracks.
7020
+ * Includes all LangCode values plus additional languages only needed for subtitles.
7021
+ * @public
7022
+ */
7023
+ export declare type SubtitleLangCode = LangCode | 'uk' | 'zh';
7024
+
7025
+ /**
7026
+ * Mapping of subtitle language codes to their English names.
7027
+ * @public
7028
+ */
7029
+ export declare const SubtitleLangCodeToTitle: Record<SubtitleLangCode, string>;
7030
+
7031
+ /**
7032
+ * All subtitle language codes including extra languages not in LangCode.
7033
+ * @public
7034
+ */
7035
+ export declare const subtitleLanguages: SubtitleLangCode[];
7036
+
6073
7037
  /**
6074
7038
  * @public
6075
7039
  */
@@ -6110,8 +7074,8 @@ export declare interface Tag extends RowItem {
6110
7074
  detailBanner?: string;
6111
7075
  availableSeasons?: AvailableSeason[];
6112
7076
  isFavorite: boolean;
6113
- addToFavorites: () => Promise<void>;
6114
- removeFromFavorites: () => Promise<void>;
7077
+ addToFavorites: () => void;
7078
+ removeFromFavorites: () => void;
6115
7079
  cover: string;
6116
7080
  getApplicationName: () => string | undefined;
6117
7081
  seriesRef?: DocumentReference<any>;
@@ -6216,45 +7180,74 @@ export declare interface TileApplicationData {
6216
7180
  name: Translation;
6217
7181
  description?: string;
6218
7182
  logo: string;
6219
- organizationBanner?: string;
6220
- urlHandle: string;
6221
- organizationId: string;
6222
- type: ApplicationType;
6223
- profilePhoto?: string;
6224
- isMainApplication?: boolean;
6225
- }
6226
-
6227
- export declare interface TileData<ItemSpecificData = VideoTileSpecificData | TvChannelTileSpecificData | TagTileSpecificData | ArticleTileSpecificData | SeriesTileSpecificData> {
6228
- /**
6229
- * Tile item ID.
6230
- */
6231
- id: string;
6232
- /**
6233
- * Timestamp of the item creation.
6234
- */
6235
- created: number;
6236
- /**
6237
- * Type of the tile. VIDEO, TV_CHANNEL, TAG, ...
6238
- */
6239
- itemType: ROW_ITEM_TYPES;
7183
+ organizationBanner?: string;
7184
+ urlHandle: string;
7185
+ organizationId: string;
7186
+ type: ApplicationType;
7187
+ profilePhoto?: string;
7188
+ isMainApplication?: boolean;
7189
+ }
7190
+
7191
+ /**
7192
+ * @public
7193
+ */
7194
+ export declare interface TileComponentProps {
7195
+ children?: React_2.ReactNode;
7196
+ cover?: string;
7197
+ bottomLabel: string;
7198
+ bottomLabelAreaHeight: number;
7199
+ bottomItem?: React_2.ReactNode;
7200
+ innerLabel: string;
6240
7201
  /**
6241
- * Tile item name translation.
7202
+ * Override font size of component type specific tile based on viewport width
6242
7203
  */
6243
- name: Translation;
7204
+ innerLabelFontSize?: number;
7205
+ duration: string;
7206
+ price: string | null;
7207
+ focused: boolean;
7208
+ onClick?: () => void;
7209
+ hoverable: boolean;
7210
+ coverPadding: CoverPadding;
7211
+ variant: RowItemComponent;
7212
+ coverWidth: number;
7213
+ progress?: number;
7214
+ time?: string;
7215
+ logo?: string;
7216
+ bigLogo?: string;
7217
+ coverHeight: number;
7218
+ aspectRatio?: number;
6244
7219
  /**
6245
- * Firestore path to the item.
7220
+ * Margin of inner TileContainer.
7221
+ * Now used for backward compatibility for WebTileGrid. Consider to use it other way.
6246
7222
  */
6247
- path: string;
7223
+ containerMargin?: number | string;
7224
+ created?: Date;
7225
+ numberOfLines?: number;
7226
+ applicationName?: string;
7227
+ applicationLogo?: string;
7228
+ hasBranding?: boolean;
7229
+ applicationHandle?: string;
7230
+ fullWidth?: boolean;
7231
+ bottomComponent?: BottomComponent;
7232
+ showAlreadyWatchedOverlay?: boolean;
7233
+ itemType?: ROW_ITEM_TYPES;
7234
+ description?: string;
7235
+ showDescriptionAsTitle?: boolean;
7236
+ isSeries?: boolean;
7237
+ episodeCount?: number;
6248
7238
  /**
6249
- * Application info including logo, name and number of videos.
7239
+ * Optional label to display in the top-right corner of the tile (e.g., "Exclusive").
7240
+ * Label text (already resolved for the current language).
6250
7241
  */
6251
- application?: TileApplicationData;
7242
+ topLabel?: string;
6252
7243
  /**
6253
- * Specific data for an item type (e.g. video, tv channel, tag, ...).
7244
+ * CSS color for the topLabel background. Defaults to white.
6254
7245
  */
6255
- itemSpecificData: ItemSpecificData;
7246
+ topLabelColor?: string;
6256
7247
  }
6257
7248
 
7249
+ export declare type TileData<T extends ScreenRowType = ScreenRowType> = T extends 'static' ? StaticTileData : DocumentTileData;
7250
+
6258
7251
  export declare interface TileMonetizationData {
6259
7252
  id: string;
6260
7253
  path: string;
@@ -6311,56 +7304,17 @@ export declare interface TileOptions {
6311
7304
  }
6312
7305
 
6313
7306
  /**
7307
+ * Additional properties that can be applied to tiles for visual customization
6314
7308
  * @public
6315
7309
  */
6316
7310
  export declare interface TileProps {
6317
- children?: React_2.ReactNode;
6318
- cover?: string;
6319
- bottomLabel: string;
6320
- bottomLabelAreaHeight: number;
6321
- bottomItem?: React_2.ReactNode;
6322
- innerLabel: string;
6323
- /**
6324
- * Override font size of component type specific tile based on viewport width
6325
- */
6326
- innerLabelFontSize?: number;
6327
- duration: string;
6328
- price: string | null;
6329
- focused: boolean;
6330
- onClick?: () => void;
6331
- hoverable: boolean;
6332
- coverPadding: CoverPadding;
6333
- variant: RowItemComponent;
6334
- coverWidth: number;
6335
- progress?: number;
6336
- time?: string;
6337
- logo?: string;
6338
- bigLogo?: string;
6339
- coverHeight: number;
6340
- aspectRatio?: number;
6341
- /**
6342
- * Margin of inner TileContainer.
6343
- * Now used for backward compatibility for WebTileGrid. Consider to use it other way.
6344
- */
6345
- containerMargin?: number | string;
6346
- created?: Date;
6347
- numberOfLines?: number;
6348
- applicationName?: string;
6349
- applicationLogo?: string;
6350
- hasBranding?: boolean;
6351
- applicationHandle?: string;
6352
- fullWidth?: boolean;
6353
- bottomComponent?: BottomComponent;
6354
- showAlreadyWatchedOverlay?: boolean;
6355
- itemType?: ROW_ITEM_TYPES;
6356
- description?: string;
6357
- showDescriptionAsTitle?: boolean;
7311
+ topRightLabel?: TileTopRightLabel;
6358
7312
  }
6359
7313
 
6360
7314
  /**
6361
7315
  * @public
6362
7316
  */
6363
- export declare type TilePropsPartial = Partial<TileProps>;
7317
+ export declare type TilePropsPartial = Partial<TileComponentProps>;
6364
7318
 
6365
7319
  /**
6366
7320
  * @internal
@@ -6400,6 +7354,15 @@ export declare type TileSizesMap = {
6400
7354
  */
6401
7355
  export declare type TileSizeVariant = 'default' | 'mobile';
6402
7356
 
7357
+ /**
7358
+ * Custom label to be displayed on a tile (e.g., "Exclusive" badge)
7359
+ * @public
7360
+ */
7361
+ export declare interface TileTopRightLabel {
7362
+ text: string;
7363
+ color?: string;
7364
+ }
7365
+
6403
7366
  /**
6404
7367
  * @public
6405
7368
  */
@@ -6490,10 +7453,6 @@ export declare interface TivioComponents {
6490
7453
  ContentSortPicker: React_2.ComponentType<ContentSortPickerProps>;
6491
7454
  WebTivioProVideoScreen: React_2.ComponentType<WebTivioProVideoScreenProps>;
6492
7455
  RemoteController: React_2.ComponentType<RemoteControllerProps>;
6493
- MonetizationsSelectOverlay: React_2.ComponentType;
6494
- MonetizationsSelectOverlayContextProvider: React_2.ComponentType<{
6495
- children: React_2.ReactNode;
6496
- }>;
6497
7456
  }
6498
7457
 
6499
7458
  /**
@@ -6530,7 +7489,10 @@ export declare interface TivioConfig {
6530
7489
  * @deprecated this field is no longer in use and has no impact when set.
6531
7490
  */
6532
7491
  firestore?: any | null;
6533
- currency: Currency;
7492
+ /**
7493
+ * @deprecated currency should be determined by `currencies` field in organization document in database, do not rely on this field.
7494
+ */
7495
+ currency?: Currency;
6534
7496
  /**
6535
7497
  * Represents an optional array of LanguageSelector objects.
6536
7498
  * Used to define and manage a list of supported languages for different language-usages (user, content,...).
@@ -6660,6 +7622,22 @@ export declare type TivioHooks = {
6660
7622
  };
6661
7623
  useChannelSource: UseChannelSource;
6662
7624
  useTvChannel: UseTvChannel;
7625
+ useInteractiveWidget: (widgetPath: string | undefined, isObs?: boolean) => {
7626
+ widget: SDKWidget<InteractiveWidget> | null;
7627
+ isLoading: boolean;
7628
+ error: Error | null;
7629
+ };
7630
+ useQuizWidget: (widgetPath: string | undefined, isObs?: boolean) => {
7631
+ widget: SDKWidget<QuizWidget> | null;
7632
+ isLoading: boolean;
7633
+ error: Error | null;
7634
+ };
7635
+ usePollWidget: (widgetPath: string | undefined, isObs?: boolean) => {
7636
+ widget: SDKWidget<PollWidget> | null;
7637
+ isLoading: boolean;
7638
+ error: Error | null;
7639
+ };
7640
+ useRemoteController: UseRemoteController;
6663
7641
  };
6664
7642
 
6665
7643
  /**
@@ -6689,6 +7667,10 @@ export declare type TivioInternalComponents = {
6689
7667
  }>;
6690
7668
  Banner: React_2.ComponentType<BannerPropsPartial>;
6691
7669
  CustomAppHistoryContext: React_2.Context<HistoryContextData | undefined>;
7670
+ ScrollableSubscriptionList: React_2.ComponentType<{
7671
+ subscriptions: PurchasableMonetization[];
7672
+ renderSubscription: (subscription: PurchasableMonetization) => React_2.ReactNode;
7673
+ }>;
6692
7674
  };
6693
7675
 
6694
7676
  /**
@@ -6739,6 +7721,13 @@ export declare type TivioInternalHooks = {
6739
7721
  error: Error | null;
6740
7722
  loading: boolean;
6741
7723
  });
7724
+ useScrollShadows: () => {
7725
+ scrollRef: React_2.RefObject<HTMLDivElement>;
7726
+ showLeftShadow: boolean;
7727
+ showRightShadow: boolean;
7728
+ shouldCenter: boolean;
7729
+ checkScrollShadows: () => void;
7730
+ };
6742
7731
  useTvChannel: UseTvChannel;
6743
7732
  useUser: () => {
6744
7733
  user: User | null;
@@ -6766,9 +7755,7 @@ export declare type TivioInternalProviders = {
6766
7755
  UserContextProvider: React_2.ComponentType<{
6767
7756
  children?: React_2.ReactNode;
6768
7757
  }>;
6769
- MonetizationsSelectOverlayContextProvider: React_2.ComponentType<{
6770
- children: React_2.ReactNode;
6771
- }>;
7758
+ MonetizationsSelectOverlayContextProvider: React_2.ComponentType;
6772
7759
  QerkoOverlayContextProvider: React_2.ComponentType;
6773
7760
  /**
6774
7761
  * @deprecated do not use, this provider will be removed in the future
@@ -6873,7 +7860,7 @@ export declare type TivioReactBundle = {
6873
7860
  subscriptions: TivioSubscriptions;
6874
7861
  purchaseVideoWithQerko: (videoId: string, monetizationId: string, voucher?: {
6875
7862
  expirationDate: Date;
6876
- }) => Promise<QerkoPaymentInfo>;
7863
+ }, email?: string) => Promise<QerkoPaymentInfo>;
6877
7864
  purchaseSubscriptionWithQerko: (monetizationId: string, voucher?: {
6878
7865
  expirationDate: Date;
6879
7866
  }) => Promise<QerkoPaymentInfo>;
@@ -6886,8 +7873,6 @@ export declare type TivioReactBundle = {
6886
7873
  */
6887
7874
  internal: TivioInternalBundle;
6888
7875
  analytics: TivioAnalytics;
6889
- addToFavoritesByPath: (path: string) => Promise<void>;
6890
- removeFromFavoritesByPath: (path: string) => Promise<void>;
6891
7876
  destroy: () => Promise<void>;
6892
7877
  } & Pick<TivioSetters, 'setBundleVersion' | 'setUser' | 'setLanguage' | 'setStorageManager'> & Omit<Partial<TivioJsBundleExposedApi>, 'createPlayerWrapper'>;
6893
7878
 
@@ -7016,7 +8001,7 @@ export declare interface TvAppProps {
7016
8001
  /**
7017
8002
  * @public
7018
8003
  */
7019
- export declare interface TvChannel extends RowItem, MonetizableItem {
8004
+ export declare interface TvChannel extends RowItem {
7020
8005
  id: string;
7021
8006
  itemType: ROW_ITEM_TYPES.TV_CHANNEL;
7022
8007
  name: string;
@@ -7027,11 +8012,17 @@ export declare interface TvChannel extends RowItem, MonetizableItem {
7027
8012
  logoPendingOverlayWidth?: string;
7028
8013
  hls: string;
7029
8014
  dash: string;
8015
+ /**
8016
+ * Returns all transactions and subscriptions applied to this tv channel.
8017
+ * Transactions before subscriptions, sorted by price ascending.
8018
+ */
8019
+ getPurchasableMonetizations(options?: GetPurchasableMonetizationsOptions): PurchasableMonetization[];
7030
8020
  getSourceUrl(options?: {
7031
8021
  language?: LangCode;
7032
8022
  }): Promise<GetSourceUrlResponse & {
7033
8023
  language?: LangCode;
7034
8024
  }>;
8025
+ purchasableMonetization: any | null;
7035
8026
  price: number;
7036
8027
  cover: string;
7037
8028
  isPlayable: boolean;
@@ -7061,7 +8052,12 @@ export declare enum TvChannelType {
7061
8052
  /**
7062
8053
  * "Virtual" tv channel constructed from separate videos
7063
8054
  */
7064
- VIRTUAL = "VIRTUAL"
8055
+ VIRTUAL = "VIRTUAL",
8056
+ /**
8057
+ * Scheduled channel - has EPG like VIRTUAL (admin can edit schedule)
8058
+ * but streams like CLASSIC (calls getSourceUrl on the channel, not per-video).
8059
+ */
8060
+ SCHEDULED = "SCHEDULED"
7065
8061
  }
7066
8062
 
7067
8063
  /**
@@ -7143,6 +8139,13 @@ export declare type UpdateNotificationSettingsRequest = {
7143
8139
 
7144
8140
  export declare type UpdateNotificationSettingsResponse = Promise<boolean>;
7145
8141
 
8142
+ export declare type UpdateUserEmailPayload = {
8143
+ newEmail: string;
8144
+ password: string;
8145
+ name: string;
8146
+ token?: string;
8147
+ };
8148
+
7146
8149
  export declare type UpsertCommentResponse = AddEditCommentResponse | DeleteCommentResponse;
7147
8150
 
7148
8151
  export declare type UrlNamesType = {
@@ -7205,7 +8208,7 @@ export declare const useCancelSubscription: UseCancelSubscription;
7205
8208
  * @public
7206
8209
  */
7207
8210
  export declare interface UseCancelSubscriptionsResult {
7208
- cancelSubscriptions: (subscriptionIds: string[]) => Promise<void>;
8211
+ cancelSubscriptions: (subscriptionIds: string[]) => Promise<boolean>;
7209
8212
  cancellationInfos: QerkoCancellationInfo[];
7210
8213
  errors: string[];
7211
8214
  }
@@ -7283,6 +8286,18 @@ export declare type UseEpisodesResult = {
7283
8286
  hasMoreEpisodes: boolean;
7284
8287
  };
7285
8288
 
8289
+ /**
8290
+ * Load the interactive widget at `widgetPath` via the remote Tivio bundle.
8291
+ * Returns the union widget (`QuizWidget | PollWidget`); narrow
8292
+ * on `widget.type` to access type-specific fields. Prefer `useQuizWidget` /
8293
+ * `usePollWidget` when you know the type up-front.
8294
+ */
8295
+ export declare const useInteractiveWidget: (widgetPath: string | undefined, isObs?: boolean) => {
8296
+ widget: SDKWidget<InteractiveWidget> | null;
8297
+ isLoading: boolean;
8298
+ error: Error | null;
8299
+ };
8300
+
7286
8301
  /**
7287
8302
  * @public
7288
8303
  */
@@ -7375,6 +8390,12 @@ export declare const useOrganizationSubscriptions: (onlyPurchasableSubscriptions
7375
8390
  subscriptions: PurchasableMonetization[];
7376
8391
  };
7377
8392
 
8393
+ export declare const usePollWidget: (widgetPath: string | undefined, isObs?: boolean) => {
8394
+ widget: Omit<PollWidget<InteractiveWidgetScene>, InternalInteractiveWidgetMethods> | null;
8395
+ isLoading: boolean;
8396
+ error: Error | null;
8397
+ };
8398
+
7378
8399
  /**
7379
8400
  * Is used to mark purchase in recovery state as PAID.
7380
8401
  *
@@ -7396,6 +8417,12 @@ export declare function usePurchaseRecovery(): {
7396
8417
  */
7397
8418
  export declare const usePurchaseSubscription: (monetizationId: string, voucher?: NewVoucher) => QerkoTransaction;
7398
8419
 
8420
+ export declare const useQuizWidget: (widgetPath: string | undefined, isObs?: boolean) => {
8421
+ widget: Omit<QuizWidget<InteractiveWidgetScene>, InternalInteractiveWidgetMethods> | null;
8422
+ isLoading: boolean;
8423
+ error: Error | null;
8424
+ };
8425
+
7399
8426
  /**
7400
8427
  * @public
7401
8428
  */
@@ -7414,9 +8441,17 @@ export declare type User = {
7414
8441
  * Returns all PAID or CANCELLED user purchases (expired and non-expired)
7415
8442
  */
7416
8443
  allPurchases: Purchase[];
8444
+ /**
8445
+ * Returns all PAID or CANCELLED user purchases (expired and non-expired)
8446
+ */
8447
+ pastPurchases: Purchase[];
8448
+ /**
8449
+ * IDs of available promotions (promotion document IDs).
8450
+ * Example: ['kaGHeCMcOCEF2OcaJCcr']
8451
+ */
7417
8452
  availablePromotionsIds: string[];
7418
8453
  /**
7419
- * Returns "active" (not CANCELLED) VoD purchases ("transaction" type)
8454
+ * Returns "active" (not CANCELLED) VoD purchases ("transaction" type")
7420
8455
  */
7421
8456
  purchasedVods: Purchase[];
7422
8457
  /**
@@ -7504,9 +8539,6 @@ export declare type User = {
7504
8539
  getAllExtendableSubscriptions: () => Promise<Purchase[]>;
7505
8540
  getRssValidToken: () => Promise<TokenInterface | undefined>;
7506
8541
  getRssUrl: () => Promise<GetUserRssUrlResponse>;
7507
- getFavorites: (options?: GetUserProfileDataOptions) => Promise<FavoriteWithData[]>;
7508
- getWatchPositions: (options?: GetUserProfileDataOptions) => Promise<WatchPositionWithData[]>;
7509
- getWatchHistory: (options?: GetUserProfileDataOptions) => Promise<WatchPositionWithData[]>;
7510
8542
  invalidateAllTokens: (type: TokenType) => Promise<void>;
7511
8543
  isPartiallyRegistered: boolean;
7512
8544
  conversationStore: ConversationStore;
@@ -7532,6 +8564,58 @@ export declare interface UseReactionsOptions {
7532
8564
  onError?: (error: Error) => void;
7533
8565
  }
7534
8566
 
8567
+ /**
8568
+ * @public
8569
+ */
8570
+ export declare type UseRemoteController = (options?: UseRemoteControllerOptions) => UseRemoteControllerResult;
8571
+
8572
+ export declare const useRemoteController: UseRemoteController;
8573
+
8574
+ /**
8575
+ * @public
8576
+ */
8577
+ export declare interface UseRemoteControllerOptions {
8578
+ sessionId?: string;
8579
+ videoId?: string;
8580
+ }
8581
+
8582
+ /**
8583
+ * @public
8584
+ */
8585
+ export declare type UseRemoteControllerPlaybackControlPayload = Pick<RemoteControlPlaybackControlPayload, 'playback' | 'activeVideoId'> & Partial<Pick<RemoteControlPlaybackControlPayload, 'sessionId' | 'videoId'>>;
8586
+
8587
+ /**
8588
+ * @public
8589
+ */
8590
+ export declare type UseRemoteControllerPlayHighlightPayload = Pick<RemoteControlPlayHighlightPayload, 'activeVideoId' | 'replay'> & Partial<Pick<RemoteControlPlayHighlightPayload, 'sessionId' | 'videoId'>>;
8591
+
8592
+ /**
8593
+ * @public
8594
+ */
8595
+ export declare interface UseRemoteControllerResult {
8596
+ session: UserStreamingSessionFieldInterface | null;
8597
+ sessionId: string | null;
8598
+ videoId: string | null;
8599
+ activeContentId: string | null;
8600
+ isInitialized: boolean;
8601
+ isSignedIn: boolean;
8602
+ isLoading: boolean;
8603
+ error: Error | null;
8604
+ resetError: () => void;
8605
+ pairDevice: (payload: RemoteControlPairPayload) => Promise<RemoteControlPairResponse>;
8606
+ unpairDevice: (payload?: Partial<RemoteControlUnpairPayload>) => Promise<boolean | string>;
8607
+ selectCamera: (payload: UseRemoteControllerSelectCameraPayload) => Promise<boolean | string>;
8608
+ playHighlight: (payload: UseRemoteControllerPlayHighlightPayload) => Promise<boolean | string>;
8609
+ playbackControl: (payload: UseRemoteControllerPlaybackControlPayload) => Promise<boolean | string>;
8610
+ getSourceUrl: (payload: RemoteControlGetSourceUrlPayload) => Promise<RemoteControlGenerateSourceResponse>;
8611
+ remoteControl: <TResponse = RemoteControlGenerateSourceResponse | boolean | string>(payload: RemoteControlRequest) => Promise<TResponse>;
8612
+ }
8613
+
8614
+ /**
8615
+ * @public
8616
+ */
8617
+ export declare type UseRemoteControllerSelectCameraPayload = Pick<RemoteControlSelectCameraPayload, 'activeVideoId'> & Partial<Pick<RemoteControlSelectCameraPayload, 'sessionId' | 'videoId'>>;
8618
+
7535
8619
  export declare enum UserGroup {
7536
8620
  ALL = "all",
7537
8621
  FREE = "free",
@@ -7552,7 +8636,7 @@ export declare interface UserNotificationSettings {
7552
8636
  * @public
7553
8637
  */
7554
8638
  export declare type UseRow = (rowId: string | null, organizationId?: string) => {
7555
- row: Row | null;
8639
+ row: BaseRow | null;
7556
8640
  error: Error | null;
7557
8641
  };
7558
8642
 
@@ -7794,7 +8878,6 @@ export declare enum VastProvider {
7794
8878
  TEST = "test",
7795
8879
  TEST_VPAID = "test-vpaid",
7796
8880
  TIVIO_ADS = "tivio-ads",
7797
- STATIC_ADS_PROVIDER = "static-ads-provider",
7798
8881
  JOJ_TEST_AD_FORM_PROGRAMMATIC = "joj-test-ad-form-programmatic",
7799
8882
  JOJ_TEST_TESTER_VASTERIX = "joj-test-tester-vasterix",
7800
8883
  JOJ_TEST_TESTER_ADFORM_30 = "joj-test-tester-adform-30"
@@ -7878,8 +8961,8 @@ export declare interface Video extends RowItem, MonetizableItem, ReactableConten
7878
8961
  tasting: Video | null;
7879
8962
  watchPosition: number | null;
7880
8963
  isFavorite: boolean;
7881
- addToFavorites: () => Promise<void>;
7882
- removeFromFavorites: () => Promise<void>;
8964
+ addToFavorites: () => void;
8965
+ removeFromFavorites: () => void;
7883
8966
  availability: ContentAvailability | null;
7884
8967
  sourceLanguages: LangCode[];
7885
8968
  urlByLanguage: (lang: LangCode) => string | undefined;
@@ -7937,10 +9020,6 @@ export declare interface VideoController {
7937
9020
  muted: boolean;
7938
9021
  volume: number;
7939
9022
  }) => void): void;
7940
- addEventListener(event: 'ad-started', callback: (value: AdMetadata & {
7941
- adCtaElement: HTMLElement | null;
7942
- }) => void): void;
7943
- addEventListener(event: 'companion-ads', callback: (value: CompanionAd[]) => void): void;
7944
9023
  /**
7945
9024
  * Remove an event listener
7946
9025
  * @param event - The event name to stop listening for
@@ -7976,6 +9055,10 @@ export declare interface VideoController {
7976
9055
  * Replay the current video from the beginning
7977
9056
  */
7978
9057
  replay(): Promise<void>;
9058
+ /**
9059
+ * Refresh the current source by calling getSourceUrl without sourceHistory.
9060
+ */
9061
+ refreshSource(): Promise<void>;
7979
9062
  /**
7980
9063
  * Retry playback if it failed to start
7981
9064
  */
@@ -8066,7 +9149,30 @@ export declare interface VideoController {
8066
9149
  * @param mutations - Array of DOM mutation records
8067
9150
  */
8068
9151
  onWatermarkElementChange(mutations: MutationRecord[]): void;
8069
- setAdCtaElement: (element: HTMLElement | null) => void;
9152
+ /**
9153
+ * Switch to HLS source for AirPlay (Safari/iOS only).
9154
+ * Preserves current playback position.
9155
+ */
9156
+ switchToHlsForAirplay(): Promise<void>;
9157
+ /**
9158
+ * Switch back to DASH from HLS after AirPlay disconnects.
9159
+ * Preserves current playback position.
9160
+ */
9161
+ switchToDashFromAirplay(): Promise<void>;
9162
+ /**
9163
+ * Reload the current source while preserving playback position.
9164
+ * Used when switching between native HLS and MSE playback modes.
9165
+ */
9166
+ reloadCurrentSource(): Promise<void>;
9167
+ /**
9168
+ * Set whether to prefer HLS sources over DASH.
9169
+ * Used in Safari/iOS when AirPlay is available, as AirPlay only supports HLS streaming.
9170
+ */
9171
+ setPreferHls(preferHls: boolean): void;
9172
+ /**
9173
+ * Suppress watermark tamper detection during AirPlay source switching.
9174
+ */
9175
+ setAirplaySwitching(isSwitching: boolean): void;
8070
9176
  }
8071
9177
 
8072
9178
  declare type VideoDetailResponsiveField = OrganizationResponsiveSetting<{
@@ -8087,7 +9193,7 @@ declare type VideoDetailResponsiveField = OrganizationResponsiveSetting<{
8087
9193
  /**
8088
9194
  * @public
8089
9195
  */
8090
- export declare type VideoExternals = (JojExternals | MallTvExternals | OktagonExternals | MigratedVideoExternals | SportyExternals) & {
9196
+ export declare type VideoExternals = (JojExternals | OktagonExternals | MigratedVideoExternals | SportyExternals | AdExternals) & {
8091
9197
  channelKey?: string;
8092
9198
  };
8093
9199
 
@@ -8150,6 +9256,11 @@ export declare type VideoSourceField = {
8150
9256
  * because content id in source url and authentication will not match.
8151
9257
  */
8152
9258
  contentId?: string;
9259
+ /**
9260
+ * List of platforms that this source is restricted to.
9261
+ * If empty or not defined, there are no restrictions, and source is available for all platforms.
9262
+ */
9263
+ platforms?: PLATFORM[];
8153
9264
  } & ({
8154
9265
  url: string;
8155
9266
  provider?: Exclude<VideoSourceProvider, VideoSourceProvider.CLOUDFLARE>;
@@ -8199,6 +9310,7 @@ export declare interface VideoTileSpecificData {
8199
9310
  urlName?: UrlNamesType;
8200
9311
  monetizations?: VideoTileMonetizationData[];
8201
9312
  description?: Translation;
9313
+ duration?: number;
8202
9314
  }
8203
9315
 
8204
9316
  /**
@@ -8287,7 +9399,7 @@ export declare interface ViewCountItem {
8287
9399
  /**
8288
9400
  * @public
8289
9401
  */
8290
- export declare interface VirtualChannelSourceInterface extends Omit<ChannelSourceInterface, 'clone'> {
9402
+ export declare interface VirtualChannelSourceInterface extends ChannelSourceInterface {
8291
9403
  tvChannelType: TvChannelType.VIRTUAL;
8292
9404
  program?: TvProgram | null;
8293
9405
  video?: Video | null;
@@ -8300,18 +9412,9 @@ export declare interface VirtualChannelSourceInterface extends Omit<ChannelSourc
8300
9412
  */
8301
9413
  export declare interface VirtualChannelSourceParams extends ChannelSourceParams {
8302
9414
  tvChannelType: TvChannelType.VIRTUAL;
8303
- currentProgram?: TvProgram | null;
8304
9415
  drm?: Drm;
8305
9416
  }
8306
9417
 
8307
- /**
8308
- * Interface representing the parameters for a VOD (Video On Demand) external multi-source configuration.
8309
- * Multi-source means an array of string URLs representing the external sources for the video content.
8310
- */
8311
- export declare interface VodExternalMultiSourceParams extends Omit<VodExternalSourceParams, 'url'> {
8312
- urls: string[];
8313
- }
8314
-
8315
9418
  /**
8316
9419
  * @public
8317
9420
  */
@@ -8410,21 +9513,6 @@ export declare interface WarningConfirmationOverlayPayload extends ConfirmationO
8410
9513
  subscriptionExpirationText?: string;
8411
9514
  }
8412
9515
 
8413
- /**
8414
- * @public
8415
- */
8416
- export declare interface WatchPositionWithData extends Omit<UserWatchPositionField, 'videoRef' | 'tagRef'> {
8417
- /**
8418
- * Video that given watch position is related to.
8419
- */
8420
- video: Video;
8421
- /**
8422
- * If user watches episode of series, we have to save series ref as well.
8423
- * Same for {@link episodeNumber} and {@link seasonNumber}.
8424
- */
8425
- tag?: Tag;
8426
- }
8427
-
8428
9516
  /**
8429
9517
  * @public
8430
9518
  */
@@ -8435,7 +9523,6 @@ export declare interface Watermark {
8435
9523
 
8436
9524
  export declare interface WebConfig {
8437
9525
  customer: CustomerId;
8438
- customerName?: string;
8439
9526
  title?: string;
8440
9527
  description?: string;
8441
9528
  logo: string;
@@ -8449,37 +9536,31 @@ export declare interface WebConfig {
8449
9536
  header?: {
8450
9537
  /**
8451
9538
  * Text on buy voucher button, if not provided the default text will be used.
9539
+ * Can be a string or an array of language-specific texts.
9540
+ * @deprecated Use headerButton instead
8452
9541
  */
8453
9542
  buyVoucherButtonText?: string;
8454
9543
  /**
8455
- * If true, the voucher button will be shown in the header.
9544
+ * Configurable button shown in the header (e.g., for vouchers, creator signup, etc.)
9545
+ * Array of language-specific button configurations.
8456
9546
  */
8457
- showVoucherButton?: boolean;
9547
+ headerButton?: (LanguageRestricted & {
9548
+ label: string;
9549
+ href: string;
9550
+ /** Icon to show on the button (mobile only) */
9551
+ icon?: 'gift' | 'star' | 'videoRecorder';
9552
+ variant?: 'primary' | 'secondary' | 'transparent';
9553
+ })[];
8458
9554
  allowSearch?: boolean;
8459
9555
  logoHeight?: string;
8460
9556
  mobileLogoHeight?: string;
8461
9557
  buySubscriptionButtonText?: string;
8462
- isHidden?: boolean;
8463
- /**
8464
- * Additional menu items to be shown in the rounded menu in the header (external or internal)
8465
- */
8466
- additionalMenuItems?: {
8467
- name: string;
8468
- href: string;
8469
- newTab?: boolean;
8470
- }[];
8471
9558
  };
8472
9559
  footer?: {
8473
- isHidden?: boolean;
8474
9560
  /**
8475
9561
  * If logo is different from logo in header
8476
9562
  */
8477
9563
  logo?: string;
8478
- /**
8479
- * @fixme https://app.clickup.com/t/90151157205/TIV-1515
8480
- * If multiple logos are provided, the multiple logos are prioritized over the single logo.
8481
- */
8482
- multipleLogos?: string[];
8483
9564
  showLogo?: boolean;
8484
9565
  /**
8485
9566
  * right panel - various type of contacts to owners of website
@@ -8522,19 +9603,6 @@ export declare interface WebConfig {
8522
9603
  email?: string;
8523
9604
  };
8524
9605
  cookieSettingsLabel?: string;
8525
- disclaimer?: string;
8526
- showDivider?: boolean;
8527
- /**
8528
- * Additional links to be shown in the footer
8529
- */
8530
- additionalLinks?: {
8531
- name: string;
8532
- href: string;
8533
- }[];
8534
- /**
8535
- * Hide footer on these paths
8536
- */
8537
- hideFooter?: string[];
8538
9606
  partners?: {
8539
9607
  name: string;
8540
9608
  logo: string;
@@ -8550,14 +9618,6 @@ export declare interface WebConfig {
8550
9618
  * so app requires authorization to see them.
8551
9619
  */
8552
9620
  securedContent?: boolean;
8553
- /**
8554
- * If true, then auth is required for all pages.
8555
- */
8556
- isAuthRequired?: boolean;
8557
- /**
8558
- * If true, then buy subscription button is hidden.
8559
- */
8560
- hideBuySubscriptionButton?: boolean;
8561
9621
  /**
8562
9622
  * CSS styles for application background.
8563
9623
  */
@@ -8576,10 +9636,6 @@ export declare interface WebConfig {
8576
9636
  * Default is TRUE (see {@link AppLoadingOverlay}
8577
9637
  */
8578
9638
  showProgressBar?: boolean;
8579
- /**
8580
- * URL to background image shown on loading screen.
8581
- */
8582
- backgroundUrl?: string;
8583
9639
  };
8584
9640
  /**
8585
9641
  * Slug of all pages where user will be forced to fill login form if he's not logged in.
@@ -8607,7 +9663,6 @@ export declare interface WebConfig {
8607
9663
  */
8608
9664
  showChooseSubscription?: boolean;
8609
9665
  registration?: {
8610
- logoMarginTop?: string;
8611
9666
  /**
8612
9667
  * Customization of auth form
8613
9668
  */
@@ -8627,18 +9682,18 @@ export declare interface WebConfig {
8627
9682
  showAcceptanceOfTermsAndConditions?: boolean;
8628
9683
  };
8629
9684
  registrationConsent?: string;
8630
- socialRegistrationConsent?: string;
8631
9685
  };
8632
9686
  payment?: {
8633
9687
  paymentConsent?: string;
8634
9688
  paymentRenewalConsent?: boolean;
9689
+ allowFrequencySwitcher?: boolean;
8635
9690
  };
8636
9691
  /**
8637
9692
  * If web supports entering vouchers
8638
9693
  */
8639
9694
  supportVouchers?: boolean;
8640
9695
  /**
8641
- * Config for Google Tag Manager with optional shouldWaitForDidomi flag
9696
+ * Config for Google Tag Manager
8642
9697
  */
8643
9698
  googleTagManagerConfig?: TagManagerArgs & {
8644
9699
  shouldWaitForDidomi?: boolean;
@@ -8661,8 +9716,6 @@ export declare interface WebConfig {
8661
9716
  };
8662
9717
  monetizationSelectOverlay?: {
8663
9718
  title?: string;
8664
- benefitLeftIcon?: string;
8665
- showFullMonetizationOnMobile?: boolean;
8666
9719
  };
8667
9720
  /**
8668
9721
  * Google Analytics ID. If provided, Google Analytics will be enabled.
@@ -8674,7 +9727,6 @@ export declare interface WebConfig {
8674
9727
  centeredMenu?: boolean;
8675
9728
  /**
8676
9729
  * All values are considered as false if not provided.
8677
- * @deprecated - use settings.allowedSignInProviders inside OrganizationDocument
8678
9730
  */
8679
9731
  socialLogins?: {
8680
9732
  showAppleLogin?: boolean;
@@ -8689,24 +9741,11 @@ export declare interface WebConfig {
8689
9741
  * If true, robots.txt will prevent crawling of the website.
8690
9742
  */
8691
9743
  norobots?: boolean;
8692
- voucher?: {
8693
- voucherConsent: string;
8694
- };
8695
- customTranslations?: Record<string, Record<string, string>>;
8696
- onPurchase?: (monetization: Purchase) => void;
8697
- facebookPixelConfig?: {
8698
- pixelId: string;
8699
- shouldWaitForDidomi?: boolean;
9744
+ customTranslations?: {
9745
+ [key: string]: {
9746
+ [key: string]: string;
9747
+ };
8700
9748
  };
8701
- /**
8702
- * If true, the app will be locked in the "remote controller" mode.
8703
- * This means that the app will not be able to navigate to other pages and will only show the remote controller.
8704
- */
8705
- isRemoteControllerApp?: boolean;
8706
- /**
8707
- * Determines if application should check allowed URL handles when switching applications.
8708
- */
8709
- disableUrlHandleCheck?: boolean;
8710
9749
  /**
8711
9750
  * Map for all handlers
8712
9751
  */
@@ -8733,7 +9772,7 @@ export declare interface WebGridScreenProps {
8733
9772
  */
8734
9773
  export declare interface WebPlayerProps {
8735
9774
  id: string;
8736
- source?: InputSourceParams | PathSourceParams | VideoPath | ChannelPath | null;
9775
+ source?: SourceParams | VideoPath | ChannelPath | null;
8737
9776
  onEnded?: () => any;
8738
9777
  /**
8739
9778
  * If true, the player will inherit the width and height of its parent element.
@@ -8797,14 +9836,6 @@ export declare interface WebPlayerProps {
8797
9836
  * If true then OSD is shown based on condition resolved in HidableOsdContainer, e.g. on pause, on mouse move etc.
8798
9837
  */
8799
9838
  showOsd?: boolean;
8800
- /**
8801
- * If true, then only a minimal set of OSD controls is shown (play/pause, volume, fullscreen)
8802
- * and the big center play/pause button only flashes briefly on state change.
8803
- *
8804
- * Intended for small fixed containers (e.g. a scroll-pinned mini player in the corner
8805
- * of the page, or a full-width mobile player pinned to the top of the viewport).
8806
- */
8807
- isMinimal?: boolean;
8808
9839
  /**
8809
9840
  * If false, then buffering spinner is never shown.
8810
9841
  * If true then buffering spinner is shown while buffering.
@@ -8827,8 +9858,6 @@ export declare interface WebPlayerProps {
8827
9858
  setPaymentOverlayVisible?: React_2.Dispatch<React_2.SetStateAction<boolean>>;
8828
9859
  hideOverlay?: boolean;
8829
9860
  sourcePlayMode?: SourcePlayMode;
8830
- adsConfig?: StaticAdsBreak[];
8831
- userAuthCallbacks?: SDKUserAuthCallbacks;
8832
9861
  }
8833
9862
 
8834
9863
  /**