@wscsports/blaze-web-sdk 0.14.3 → 0.16.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.
@@ -7,6 +7,7 @@ type PlayContentOptions = {
7
7
  export declare function setDoNotTrack(value: boolean): void;
8
8
  export declare function setGeoLocation(value: string): void;
9
9
  export declare function setExternalUserId(value: string): Promise<void>;
10
+ export declare function setOnItemClick(callback: ItemClickCallback | undefined): void;
10
11
  export declare function Initialize(apiKey: string, userOptions?: Partial<IBlazeSDKOptions>): Promise<void>;
11
12
  export declare function WidgetRowView(containerId: string, options: IWidgetViewOptions): IWidgetView;
12
13
  export declare function WidgetGridView(containerId: string, options: IWidgetViewOptions): IWidgetView;
@@ -41,6 +42,7 @@ declare const _default: {
41
42
  addDelegateListener: typeof addDelegateListener;
42
43
  setDoNotTrack: typeof setDoNotTrack;
43
44
  setGeoLocation: typeof setGeoLocation;
45
+ setOnItemClick: typeof setOnItemClick;
44
46
  LabelBuilder: typeof LabelBuilder;
45
47
  DataSourceBuilder: typeof DataSourceBuilder;
46
48
  Delegations: typeof Delegation;
@@ -427,6 +429,7 @@ declare class DeviceDetector {
427
429
  static getInstance(): DeviceDetector;
428
430
  private detectOS;
429
431
  private detectBrowser;
432
+ get getPlatform(): Platform;
430
433
  get isDesktop(): boolean;
431
434
  get isMobile(): boolean;
432
435
  get isTablet(): boolean;
@@ -435,6 +438,8 @@ declare class DeviceDetector {
435
438
  private handleResize;
436
439
  isIOSMobileTabletSafari(): boolean;
437
440
  get isFullscreenSupported(): boolean;
441
+ getDeviceInfo(): UAParser.IDevice;
442
+ getOSInfo(): UAParser.IOS;
438
443
  }
439
444
  export declare const deviceDetector: DeviceDetector;
440
445
 
@@ -468,17 +473,22 @@ export declare class FullscreenManager {
468
473
 
469
474
  export * from './analytics.class';
470
475
  export * from './base-element.class';
476
+ export * from './data-source.class';
471
477
  export * from './debounce';
472
478
  export * from './device-detector.class';
473
479
  export * from './events-listener';
480
+ export * from './fullscreen-manager.class';
474
481
  export * from './label-builder.class';
482
+ export * from './logger/logger-manager.class';
483
+ export * from './logger/logger-storage.class';
484
+ export * from './logger/logger-transport.class';
485
+ export * from './logger/logger-throttle.class';
475
486
  export * from './long-press.handler';
476
487
  export * from './singleton.class';
477
488
  export * from './throttle';
478
489
  export * from './url';
479
- export * from './data-source.class';
480
- export * from './fullscreen-manager.class';
481
490
  export * from './visiblity-manager.class';
491
+ export * from './accessibility';
482
492
 
483
493
  export interface IBlazeWidgetLabel {
484
494
  readonly _type: 'BlazeWidgetLabel';
@@ -577,6 +587,217 @@ export declare class VisibilityManager {
577
587
  detach(): void;
578
588
  }
579
589
 
590
+ export declare const DEFAULT_ACCESSIBILITY_CONFIG: AccessibilityConfig;
591
+ export declare const DEFAULT_CONTENT_ACCESSIBILITY_CONFIG: ContentAccessibilityConfig;
592
+
593
+ export interface ModalLabelConfig {
594
+ contentType: ContentType;
595
+ position: number;
596
+ total: number;
597
+ title?: string;
598
+ currentContent?: any;
599
+ includeNavigationContext?: boolean;
600
+ }
601
+ export declare function generateModalAriaLabel(config: ModalLabelConfig): string;
602
+
603
+ declare class AccessibilityManager implements IAccessibilityManager {
604
+ private announcementService;
605
+ private contentButtons;
606
+ private modalFocusReturnTarget;
607
+ constructor(config?: AccessibilityConfig);
608
+ setupLiveRegions(container: HTMLElement): void;
609
+ announce(announcement: AccessibilityAnnouncement): void;
610
+ private getContentTypeLabel;
611
+ manageFocus(element: HTMLElement): void;
612
+ storeModalFocusReturnTarget(element: HTMLElement): void;
613
+ private returnFocusFromModal;
614
+ setupModalAccessibility(modal: HTMLElement, contentType: ContentType): void;
615
+ announceModalStatus(action: string, contentType: ContentType, context?: any): void;
616
+ closeModal(contentType: ContentType): void;
617
+ private clearModalFocusReturnTarget;
618
+ cleanup(): void;
619
+ clearAnnouncementQueue(): void;
620
+ }
621
+ export { AccessibilityManager };
622
+ export declare const accessibilityManager: AccessibilityManager;
623
+
624
+ export declare class ButtonLabelManager {
625
+ static setButtonLabel(button: BlazeButton | BlazeCtaButton, label: string): void;
626
+ static buildPlayPauseLabel(isPlaying: boolean, contentType: ContentType): string;
627
+ static buildMuteLabel(isMuted: boolean, contentType: ContentType): string;
628
+ static buildLikeLabel(isLiked: boolean): string;
629
+ static buildCtaLabel(ctaText?: string): string;
630
+ static buildNavigationLabel(direction: 'next' | 'prev', contentType: ContentType, target?: 'page' | 'content'): string;
631
+ static setBatchLabels(buttonLabelPairs: Array<[BlazeButton | BlazeCtaButton | undefined, string]>): void;
632
+ }
633
+
634
+ declare class ContentAccessibilityManager implements IContentAccessibilityManager {
635
+ private config;
636
+ private contentStrategies;
637
+ private registeredWidgets;
638
+ private lastUserActionTime;
639
+ private readonly userActionThrottleMs;
640
+ constructor(config?: ContentAccessibilityConfig);
641
+ private initializeStrategies;
642
+ registerContentWidget(contentId: string, elements: IContentWidgetElements, contentType: ContentType): void;
643
+ updateButtonLabels(contentId: string, dynamicState: Partial<IContentWidgetData>): void;
644
+ private getContentTypeLabel;
645
+ unregisterContentWidget(contentId: string): void;
646
+ announceUserAction(contentType: ContentType, action: string, context: UserActionContext): void;
647
+ announceModalOpening(contentType: ContentType, context: ModalContext): void;
648
+ announceNavigation(position: number, total: number, type: string, title?: string, context?: AccessibilityContext): void;
649
+ private generateMeaningfulAnnouncement;
650
+ private buildPageNavigationAnnouncement;
651
+ private buildStoryNavigationAnnouncement;
652
+ private buildMomentNavigationAnnouncement;
653
+ private buildGenericNavigationAnnouncement;
654
+ private formatAnnouncementMessage;
655
+ cleanup(): void;
656
+ }
657
+ export { ContentAccessibilityManager };
658
+ export declare const contentAccessibilityManager: ContentAccessibilityManager;
659
+
660
+ declare abstract class BaseContentAccessibilityStrategy implements IContentAccessibilityStrategy {
661
+ protected contentType: ContentType;
662
+ protected buttonLabels: BaseButtonLabelConfig;
663
+ protected registeredWidgets: Map<string, IContentWidgetElements>;
664
+ constructor(contentType: ContentType, buttonLabels: BaseButtonLabelConfig);
665
+ setupAccessibility(contentId: string, elements: IContentWidgetElements): void;
666
+ updateLabels(contentId: string, data: IContentWidgetData): void;
667
+ cleanup(contentId: string): void;
668
+ }
669
+ export declare class StoryAccessibilityStrategy extends BaseContentAccessibilityStrategy {
670
+ private storyButtonLabels;
671
+ constructor(buttonLabels: StoryButtonLabelConfig);
672
+ updateLabels(contentId: string, data: IContentWidgetData): void;
673
+ }
674
+ export declare class MomentAccessibilityStrategy extends BaseContentAccessibilityStrategy {
675
+ private momentButtonLabels;
676
+ constructor(buttonLabels: MomentButtonLabelConfig);
677
+ updateLabels(contentId: string, data: IContentWidgetData): void;
678
+ }
679
+
680
+ export * from './accessibility.class';
681
+ export * from './accessibility-configs';
682
+ export * from './content-accessibility-manager.class';
683
+ export * from './content-accessibility-strategies';
684
+ export * from './accessibility-utils';
685
+ export * from './button-label-manager';
686
+
687
+ export * from './logger-manager.class';
688
+ export * from './logger-storage.class';
689
+ export * from './logger-transport.class';
690
+ export * from './logger-throttle.class';
691
+ export * from './logger-database-adapter';
692
+
693
+ export declare class LoggerDatabaseAdapter implements ILoggerDatabase {
694
+ storeLog(entry: LogEntryDB): Promise<void>;
695
+ getLogBatch(maxSize: number): Promise<LogEntryDB[]>;
696
+ removeLogs(ids: string[]): Promise<void>;
697
+ clearLogs(): Promise<void>;
698
+ getLogCount(): Promise<number>;
699
+ }
700
+
701
+ export declare class LoggerManager implements ILogger {
702
+ private static readonly LOG_IDENTIFIER_PREFIX;
703
+ private readonly storage;
704
+ private readonly transport;
705
+ private readonly throttle;
706
+ private configuration;
707
+ private pendingConfigUpdate;
708
+ private isInitialized;
709
+ private isDestroyed;
710
+ private isSending;
711
+ private immediateLogs;
712
+ private offlineQueue;
713
+ private immediateTimer;
714
+ private configUpdateTimer;
715
+ private isOnline;
716
+ private onlineStatusListener;
717
+ constructor(database: ILoggerDatabase);
718
+ init(configuration?: ILoggerConfiguration): Promise<void>;
719
+ destroy(): Promise<void>;
720
+ updateConfiguration(configuration: ILoggerConfiguration): void;
721
+ log(level: LogLevel, customLogIdentifier: string, message: string, metadata: ILogMetadata): Promise<void>;
722
+ private shouldLog;
723
+ private shouldSendImmediately;
724
+ private addToImmediateBatch;
725
+ private flushImmediateLogs;
726
+ private removeEntriesFromStorage;
727
+ private sendEntriesAndCleanup;
728
+ private processBatch;
729
+ private setupNetworkMonitoring;
730
+ private syncOfflineQueue;
731
+ private addToOfflineQueue;
732
+ private scheduleConfigurationUpdate;
733
+ private applyPendingConfiguration;
734
+ private resetLoggerState;
735
+ private handleNetworkReconnection;
736
+ private setDefaultLoggerConfiguration;
737
+ }
738
+
739
+ export interface ILoggerDatabase {
740
+ storeLog(entry: LogEntryDB): Promise<void>;
741
+ getLogBatch(maxSize: number): Promise<LogEntryDB[]>;
742
+ removeLogs(ids: string[]): Promise<void>;
743
+ clearLogs(): Promise<void>;
744
+ getLogCount(): Promise<number>;
745
+ }
746
+ export declare class LoggerStorage {
747
+ private database;
748
+ constructor(database: ILoggerDatabase);
749
+ store(entry: LogEntryDB): Promise<void>;
750
+ getBatch(maxSize: number): Promise<LogEntryDB[]>;
751
+ remove(ids: string[]): Promise<void>;
752
+ clear(): Promise<void>;
753
+ getLogCount(): Promise<number>;
754
+ }
755
+
756
+ export declare class LoggerThrottle {
757
+ private batchIntervalMs;
758
+ private logCount;
759
+ private batchInterval;
760
+ private batchCallback;
761
+ private _maxBatchSize;
762
+ private _minBatchSize;
763
+ get minBatchSize(): number;
764
+ get maxBatchSize(): number;
765
+ updateConfiguration(config: {
766
+ batchIntervalMs: number;
767
+ maxBatchSize: number;
768
+ minBatchSize: number;
769
+ }): void;
770
+ onBatchReady(callback: () => Promise<void>): void;
771
+ destroy(): void;
772
+ private setupBatchInterval;
773
+ incrementLogCount(): void;
774
+ shouldTriggerBatch(): boolean;
775
+ }
776
+
777
+ export declare class BatchRejectedError extends Error {
778
+ constructor(message?: string);
779
+ }
780
+ export interface ILogApiRequest {
781
+ message: string;
782
+ level: string;
783
+ api_key: string;
784
+ api_scheme_version: string;
785
+ metadata: ILogMetadata;
786
+ }
787
+ export declare class LoggerTransport {
788
+ private readonly MAX_RETRY_ATTEMPTS;
789
+ private readonly BASE_RETRY_DELAY;
790
+ private readonly MAX_RETRY_DELAY;
791
+ private readonly REQUEST_TIMEOUT;
792
+ send(entries: LogEntryDB[]): Promise<void>;
793
+ private sendWithRetry;
794
+ private attemptSend;
795
+ private preparePayload;
796
+ private sendToEndpoint;
797
+ private calculateRetryDelay;
798
+ private delay;
799
+ }
800
+
580
801
  export declare class BlazeAlert extends BaseWidget {
581
802
  titleContainer: HTMLDivElement;
582
803
  textContainer: HTMLDivElement;
@@ -631,10 +852,9 @@ export declare class BlazeDrawer extends BaseWidget {
631
852
  export declare class BlazeImage extends BaseWidget {
632
853
  thumbnailElement: HTMLImageElement;
633
854
  constructor();
855
+ private onError;
634
856
  load(src: string): void;
635
857
  setHeight(value: string): void;
636
- setRatio(ratio: string): void;
637
- setBorderRadius(radius: string): void;
638
858
  setAccessibility(text: string): void;
639
859
  }
640
860
 
@@ -748,6 +968,7 @@ export declare class BlazeButton extends BaseWidget {
748
968
  isAnimationOnDesktopInitialized: boolean;
749
969
  get refElement(): ShadowRoot | this;
750
970
  constructor();
971
+ private setupFocusDelegation;
751
972
  static get observedAttributes(): ("height" | "order" | "width" | "icon-color" | "disabled" | "blaze-btn-visible" | "blaze-btn-hidden" | "button-desktop-animation")[];
752
973
  private onMouseEnter;
753
974
  private onMouseLeave;
@@ -759,6 +980,7 @@ export declare class BlazeButton extends BaseWidget {
759
980
  get width(): string | number | boolean;
760
981
  setIconUrl(value: string): void;
761
982
  setIconUrlAnimation(value: string): void;
983
+ setAriaLabel(label: string): void;
762
984
  private applyIconStyles;
763
985
  private setIsHidden;
764
986
  private setIsVisible;
@@ -829,6 +1051,7 @@ export declare class BlazeCtaButton extends BaseWidget {
829
1051
  setAnchorButtonStyles(styles: Partial<CSSStyleDeclaration>): void;
830
1052
  setCtaTextStyle(styles: Partial<CSSStyleDeclaration>): void;
831
1053
  setCtaIconStyles(styles: Partial<CSSStyleDeclaration>): void;
1054
+ setAriaLabel(label: string): void;
832
1055
  clearAllAnimations(): void;
833
1056
  }
834
1057
 
@@ -855,6 +1078,19 @@ export declare class BlazeShareButton extends BaseWidget {
855
1078
  createButton(text: string, svgIcon: string): void;
856
1079
  }
857
1080
 
1081
+ export declare const ACCESSIBILITY_TIMING: {
1082
+ readonly FOCUS_DELAY: 500;
1083
+ readonly LABEL_CLEAR_DELAY: 1000;
1084
+ readonly CONFIG_SCHEDULE_DELAY: 1000;
1085
+ };
1086
+ export declare const ACCESSIBILITY_ATTRIBUTES: {
1087
+ readonly ACTIVE_TABINDEX: "0";
1088
+ readonly INACTIVE_TABINDEX: "-1";
1089
+ readonly REGION_ROLE: "region";
1090
+ readonly ARIA_HIDDEN_FALSE: "false";
1091
+ readonly ARIA_HIDDEN_TRUE: "true";
1092
+ };
1093
+
858
1094
  export declare const IMA_RATIOS: {
859
1095
  readonly general: "1x1";
860
1096
  readonly horizontal: "640x480";
@@ -982,6 +1218,7 @@ export declare const ASPECT_RATIO_16_9_STRING = "16 / 9";
982
1218
  export declare const ASPECT_RATIO_9_16_STRING = "9 / 16";
983
1219
  export declare const ASPECT_RATIO_4_3_STRING = "4 / 3";
984
1220
 
1221
+ export * from './accessibility.constants';
985
1222
  export * from './ads.constants';
986
1223
  export * from './analytics.constants';
987
1224
  export * from './device.constants';
@@ -1039,6 +1276,7 @@ export declare const DB_NAMES: {
1039
1276
  readonly USER: "user";
1040
1277
  readonly STORIES: "stories";
1041
1278
  readonly VIDEOS: "videos";
1279
+ readonly LOGS: "logs";
1042
1280
  };
1043
1281
  export declare class Database implements IDatabase {
1044
1282
  private readonly options;
@@ -1052,7 +1290,9 @@ export declare class Database implements IDatabase {
1052
1290
  private deleteDatabase;
1053
1291
  createTransaction(tableName: string, mode: 'readonly' | 'readwrite'): IDBObjectStore | null;
1054
1292
  get<T>(tableName: string, key: string): Promise<IResponse<T>>;
1293
+ getAll<T>(tableName: string): Promise<T[]>;
1055
1294
  update<T>(tableName: string, value: any): Promise<IResponse<T>>;
1295
+ delete(tableName: string, key: string): Promise<IResponse<void>>;
1056
1296
  private throttledReinit;
1057
1297
  }
1058
1298
 
@@ -1090,7 +1330,9 @@ export type IAdInfo = IWebAdInfo | IImaAdInfo;
1090
1330
  export interface AppConfiguration {
1091
1331
  configurations: {
1092
1332
  analyticsAddEntitiesInfo?: string;
1333
+ configRefetchIntervalInMinutes?: number;
1093
1334
  };
1335
+ sdkLoggerConfigurations?: ILoggerConfiguration;
1094
1336
  }
1095
1337
 
1096
1338
  export type ContentExtraInfo = {
@@ -1153,6 +1395,7 @@ export * from './cta.interface';
1153
1395
  export * from './interaction.interface';
1154
1396
  export * from './layer-content.interface';
1155
1397
  export * from './layer.interface';
1398
+ export * from './log-entry.interface';
1156
1399
  export * from './moment.interface';
1157
1400
  export * from './page.interface';
1158
1401
  export * from './rendition.interface';
@@ -1257,6 +1500,16 @@ export interface ILayer {
1257
1500
  content: ILayerContent;
1258
1501
  }
1259
1502
 
1503
+ export interface LogEntryDB {
1504
+ id: string;
1505
+ message: string;
1506
+ level: LogLevel;
1507
+ timestamp: string;
1508
+ logIdentifier: string;
1509
+ metadata: string;
1510
+ priority: number;
1511
+ }
1512
+
1260
1513
  type MomentType = 'Content' | 'Ad';
1261
1514
  export interface IMoment extends IContent {
1262
1515
  momentIndexInPlaylist: number;
@@ -1447,6 +1700,15 @@ export * from './event.enum';
1447
1700
  export * from './http-status.enum';
1448
1701
  export * from './button.enum';
1449
1702
  export * from './action-handler-id.enum';
1703
+ export * from './log-level.enum';
1704
+
1705
+ export declare enum LogLevel {
1706
+ DEBUG = "DEBUG",
1707
+ INFO = "INFO",
1708
+ WARN = "WARN",
1709
+ ERROR = "ERROR",
1710
+ CRITICAL = "CRITICAL"
1711
+ }
1450
1712
 
1451
1713
  export interface WidgetsTagNameMap {
1452
1714
  'blaze-sdk': BlazeWidgetSDK;
@@ -1594,6 +1856,72 @@ export declare const shareVideosIconSvg = "data:image/svg+xml;base64,PHN2ZyB4bWx
1594
1856
  export declare const linkIconSvg = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAtOTYwIDk2MCA5NjAiIHdpZHRoPSIyNHB4IiBmaWxsPSIjNWY2MzY4Ij48cGF0aCBkPSJNNDQwLTI4MEgyODBxLTgzIDAtMTQxLjUtNTguNVQ4MC00ODBxMC04MyA1OC41LTE0MS41VDI4MC02ODBoMTYwdjgwSDI4MHEtNTAgMC04NSAzNXQtMzUgODVxMCA1MCAzNSA4NXQ4NSAzNWgxNjB2ODBaTTMyMC00NDB2LTgwaDMyMHY4MEgzMjBabTIwMCAxNjB2LTgwaDE2MHE1MCAwIDg1LTM1dDM1LTg1cTAtNTAtMzUtODV0LTg1LTM1SDUyMHYtODBoMTYwcTgzIDAgMTQxLjUgNTguNVQ4ODAtNDgwcTAgODMtNTguNSAxNDEuNVQ2ODAtMjgwSDUyMFoiLz48L3N2Zz4=";
1595
1857
  export declare const checkMarkSvg = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPG1hc2sgaWQ9Im1hc2swXzUxMl8xMDY4IiBzdHlsZT0ibWFzay10eXBlOmFscGhhIiBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4PSIwIiB5PSIwIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiPgo8cmVjdCB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGZpbGw9IiNEOUQ5RDkiLz4KPC9tYXNrPgo8ZyBtYXNrPSJ1cmwoI21hc2swXzUxMl8xMDY4KSI+CjxwYXRoIGQ9Ik05LjU1MDEgMThMMy44NTAxIDEyLjNMNS4yNzUxIDEwLjg3NUw5LjU1MDEgMTUuMTVMMTguNzI1MSA1Ljk3NDk4TDIwLjE1MDEgNy4zOTk5OEw5LjU1MDEgMThaIiBmaWxsPSIjRjBGMEYwIi8+CjwvZz4KPC9zdmc+Cg==";
1596
1858
 
1859
+ export interface AccessibilityContext {
1860
+ navigationType?: string;
1861
+ export interface ModalContext extends AccessibilityContext {
1862
+ total: number;
1863
+ isPlaying?: boolean;
1864
+ hasClosedCaptions?: boolean;
1865
+ totalPages?: number;
1866
+ }
1867
+ export interface UserActionContext extends AccessibilityContext {
1868
+ setupAccessibility(contentId: string, elements: IContentWidgetElements): void;
1869
+ updateLabels(contentId: string, data: IContentWidgetData): void;
1870
+ cleanup(contentId: string): void;
1871
+ }
1872
+ export interface AccessibilityAnnouncement {
1873
+ message: string;
1874
+ priority: AnnouncementPriority;
1875
+ delay?: number;
1876
+ category?: AnnouncementCategory;
1877
+ }
1878
+ export interface IContentWidgetButtons {
1879
+ play?: HTMLElement;
1880
+ mute?: HTMLElement;
1881
+ like?: HTMLElement;
1882
+ share?: HTMLElement;
1883
+ close?: HTMLElement;
1884
+ cta?: HTMLElement;
1885
+ captions?: HTMLElement;
1886
+ custom1?: HTMLElement;
1887
+ custom2?: HTMLElement;
1888
+ nextStoryPage?: HTMLElement;
1889
+ prevStoryPage?: HTMLElement;
1890
+ nextStory?: HTMLElement;
1891
+ prevStory?: HTMLElement;
1892
+ nextMoment?: HTMLElement;
1893
+ prevMoment?: HTMLElement;
1894
+ }
1895
+ export interface IContentWidgetData {
1896
+ id: string;
1897
+ title?: string;
1898
+ isPlaying?: boolean;
1899
+ isMuted?: boolean;
1900
+ isLiked?: boolean;
1901
+ hasClosedCaptions?: boolean;
1902
+ ctaText?: string;
1903
+ }
1904
+ export interface IContentWidgetElements {
1905
+ widget: HTMLElement;
1906
+ buttons: IContentWidgetButtons;
1907
+ data: IContentWidgetData;
1908
+ }
1909
+ export interface IContentAccessibilityManager {
1910
+ registerContentWidget(contentId: string, elements: IContentWidgetElements, contentType: ContentType): void;
1911
+ updateButtonLabels(contentId: string, dynamicState: Partial<IContentWidgetData>): void;
1912
+ announceUserAction(contentType: ContentType, action: string, context: UserActionContext): void;
1913
+ announceModalOpening(contentType: ContentType, context: ModalContext): void;
1914
+ announceNavigation(position: number, total: number, type: string, title?: string, context?: AccessibilityContext): void;
1915
+ unregisterContentWidget(contentId: string): void;
1916
+ cleanup(): void;
1917
+ }
1918
+ export interface IAccessibilityManager {
1919
+ setupLiveRegions(container?: HTMLElement): void;
1920
+ announce(announcement: AccessibilityAnnouncement): void;
1921
+ manageFocus(element: HTMLElement): void;
1922
+ cleanup(): void;
1923
+ }
1924
+
1597
1925
  type CustomNativeTargeting = Record<string, string | string[]>;
1598
1926
  type CustomNativeArgs = {
1599
1927
  path: string;
@@ -1661,7 +1989,9 @@ export type IdsDataSourceParams = Omit<BlazeDataSourceType, 'sourceType' | 'labe
1661
1989
  export interface IDatabase {
1662
1990
  init: () => Promise<void>;
1663
1991
  get: <T>(tableName: string, key: string) => Promise<IResponse<T>>;
1992
+ getAll: <T>(tableName: string) => Promise<T[]>;
1664
1993
  update: <T>(tableName: string, value: any) => Promise<IResponse<T>>;
1994
+ delete: (tableName: string, key: string) => Promise<IResponse<void>>;
1665
1995
  }
1666
1996
  export interface IDatabaseInitOptions {
1667
1997
  onOpen: (db: IDBDatabase) => Promise<void>;
@@ -1751,6 +2081,7 @@ export type BlazeVideoIconsStyle = BaseBlazeIcons & {
1751
2081
  };
1752
2082
  };
1753
2083
 
2084
+ export * from './accessibility-manager.interface';
1754
2085
  export * from './ad-handler.interface';
1755
2086
  export * from './behaviors.interface';
1756
2087
  export * from './blaze-sdk.interface';
@@ -1761,14 +2092,27 @@ export * from './device.interface';
1761
2092
  export * from './drawable.interface';
1762
2093
  export * from './http-response.interface';
1763
2094
  export * from './icons.interface';
2095
+ export * from './logger.interface';
1764
2096
  export * from './player.interface';
1765
2097
  export * from './response.interface';
1766
2098
  export * from './service.interface';
1767
2099
  export * from './widget-label-builder.interface';
1768
2100
  export * from './widget-options.interface';
1769
2101
  export * from './widget-view.interface';
2102
+ export * from './item-click-callback.interface';
1770
2103
  export { default as Observable } from './observable';
1771
2104
 
2105
+ export interface ItemClickContext {
2106
+ containerId: string;
2107
+ item: IContent;
2108
+ itemIndexInContainer: number;
2109
+ contentType: ContentType;
2110
+ }
2111
+ export interface ItemClickCallbackResult {
2112
+ shouldPreventOpen: boolean;
2113
+ }
2114
+ export type ItemClickCallback = (context: ItemClickContext) => ItemClickCallbackResult;
2115
+
1772
2116
  export interface ILayoutDataSourceOptions {
1773
2117
  dataSource?: BlazeDataSourceType;
1774
2118
  labels?: string | string[] | BlazeWidgetLabel;
@@ -1781,6 +2125,74 @@ export interface ILayoutDataSourceOptions {
1781
2125
  shouldOrderWidgetByReadStatus?: boolean;
1782
2126
  }
1783
2127
 
2128
+ export interface ILoggerConfiguration {
2129
+ isEnabled: boolean;
2130
+ loggerBatchIntervalInSeconds: number;
2131
+ loggerMaxAllowedBatchSize: number;
2132
+ loggerMinAllowedBatchSize: number;
2133
+ logLevel: LogLevel;
2134
+ immediateLogLevel: LogLevel;
2135
+ ignoredLogs: IIgnoredLog[];
2136
+ }
2137
+ export interface IIgnoredLog {
2138
+ logIdentifier: string;
2139
+ sdkType: 'Web';
2140
+ applyFromVersion?: string;
2141
+ applyBelowVersion?: string;
2142
+ applySpecificVersions?: string[];
2143
+ }
2144
+ export interface ILogEntry {
2145
+ id: string;
2146
+ message: string;
2147
+ level: LogLevel;
2148
+ timestamp: string;
2149
+ logIdentifier: string;
2150
+ metadata: ILogMetadata;
2151
+ }
2152
+ export interface ILogMetadata {
2153
+ session_id: string;
2154
+ id: string;
2155
+ log_identifier: string;
2156
+ sdk_type: string;
2157
+ sdk_version: string;
2158
+ api_key: string;
2159
+ device_type: string;
2160
+ device_brand: string;
2161
+ device_model: string;
2162
+ operating_system: string;
2163
+ operating_system_version: string;
2164
+ screen_resolution: string;
2165
+ connection_type: string;
2166
+ app_id: string;
2167
+ app_version: string;
2168
+ reporting_timestamp: string;
2169
+ [key: string]: any;
2170
+ }
2171
+ export declare const METADATA_FIELDS: {
2172
+ readonly SESSION_ID: "session_id";
2173
+ readonly ID: "id";
2174
+ readonly SDK_TYPE: "sdk_type";
2175
+ readonly SDK_VERSION: "sdk_version";
2176
+ readonly API_KEY: "api_key";
2177
+ readonly DEVICE_TYPE: "device_type";
2178
+ readonly DEVICE_BRAND: "device_brand";
2179
+ readonly DEVICE_MODEL: "device_model";
2180
+ readonly OPERATING_SYSTEM: "operating_system";
2181
+ readonly OPERATING_SYSTEM_VERSION: "operating_system_version";
2182
+ readonly SCREEN_RESOLUTION: "screen_resolution";
2183
+ readonly CONNECTION_TYPE: "connection_type";
2184
+ readonly APP_ID: "app_id";
2185
+ readonly APP_VERSION: "app_version";
2186
+ readonly REPORTING_TIMESTAMP: "reporting_timestamp";
2187
+ readonly LOG_IDENTIFIER: "log_identifier";
2188
+ };
2189
+ export interface ILogger {
2190
+ init(configuration?: ILoggerConfiguration): Promise<void>;
2191
+ log(level: LogLevel, logIdentifier: string, message: string, metadata?: Record<string, any>): void;
2192
+ updateConfiguration(configuration: ILoggerConfiguration): void;
2193
+ destroy(): Promise<void>;
2194
+ }
2195
+
1784
2196
  export default interface IntersectionObservable {
1785
2197
  intersectionObserver: IntersectionObserver;
1786
2198
  handleIntersection(entries: IntersectionObserverEntry[]): void;
@@ -1904,6 +2316,24 @@ declare abstract class AnalyticsServiceClass extends AnalyticsServiceClass_base
1904
2316
  }
1905
2317
  export declare const AnalyticsService: AnalyticsServiceClass;
1906
2318
 
2319
+ export declare class AnnouncementService implements IAnnouncementService {
2320
+ private config;
2321
+ private containerRegions;
2322
+ private announcementQueue;
2323
+ private isProcessingAnnouncement;
2324
+ private lastAnnouncementTime;
2325
+ private liveRegionsSetup;
2326
+ constructor(config: AnnouncementConfig);
2327
+ setupLiveRegions(container: HTMLElement): void;
2328
+ announce(message: string, priority?: AnnouncementPriority, category?: AnnouncementCategory): void;
2329
+ queueAnnouncement(announcement: AccessibilityAnnouncement): void;
2330
+ clearQueue(): void;
2331
+ isProcessing(): boolean;
2332
+ private processAnnouncementQueue;
2333
+ private performAnnouncement;
2334
+ cleanup(): void;
2335
+ }
2336
+
1907
2337
  type GetOptions = {
1908
2338
  orderType?: OrderType;
1909
2339
  };
@@ -1977,6 +2407,7 @@ declare abstract class ApiServiceClass extends ApiServiceClass_base implements I
1977
2407
  setLiked: boolean;
1978
2408
  }): Promise<void>;
1979
2409
  sendAnaltyicsEvents(body: Partial<AnalyticsEvent>[]): Promise<import("../interfaces").IHttpResponse<unknown>>;
2410
+ sendLoggerLogs(compressedBody: ArrayBuffer): Promise<import("../interfaces").IHttpResponse<unknown>>;
1980
2411
  sendInteractionResponse(options: {
1981
2412
  interactionId: Interaction['id'];
1982
2413
  responseId: string;
@@ -1998,9 +2429,13 @@ declare const AppConfigurationServiceClass_base: {
1998
2429
  };
1999
2430
  declare abstract class AppConfigurationServiceClass extends AppConfigurationServiceClass_base implements IService {
2000
2431
  private _appConfigurations?;
2432
+ private _refetchInterval;
2001
2433
  constructor();
2002
2434
  get appConfigurations(): AppConfiguration | undefined;
2003
2435
  init(options: IBlazeSDKOptions): Promise<void>;
2436
+ private setupRefetchInterval;
2437
+ private clearRefetchInterval;
2438
+ destroy(): void;
2004
2439
  }
2005
2440
  export declare const AppConfigurationService: AppConfigurationServiceClass;
2006
2441
 
@@ -2040,11 +2475,13 @@ declare abstract class ConfigServiceClass extends ConfigServiceClass_base implem
2040
2475
  private _shouldAllowClosedCaptions;
2041
2476
  private _appContext;
2042
2477
  private _disableAutoLoadingContent;
2478
+ private _onItemClick;
2043
2479
  protected constructor();
2044
2480
  init(options: IBlazeSDKOptions): Promise<void>;
2045
2481
  private readonly _russiaRegionCDN;
2046
2482
  private readonly _urls;
2047
2483
  private readonly _analyticsUrls;
2484
+ private _loggerUrls;
2048
2485
  private readonly _globalStorageCDN;
2049
2486
  private readonly _russiaStorageCDN;
2050
2487
  private readonly _sdkStorageCDNs;
@@ -2056,7 +2493,8 @@ declare abstract class ConfigServiceClass extends ConfigServiceClass_base implem
2056
2493
  private set environment(value);
2057
2494
  get sendAnalytics(): boolean;
2058
2495
  get shouldCreateUser(): boolean;
2059
- get analyticsApiUrl(): string | undefined;
2496
+ get analyticsApiUrl(): string;
2497
+ get loggerApiUrl(): string;
2060
2498
  get externalUserId(): string | null;
2061
2499
  set externalUserId(value: string | null);
2062
2500
  get doNotTrack(): boolean;
@@ -2097,6 +2535,8 @@ declare abstract class ConfigServiceClass extends ConfigServiceClass_base implem
2097
2535
  set appContext(value: Record<string, any>);
2098
2536
  get disableAutoLoadingContent(): boolean;
2099
2537
  set disableAutoLoadingContent(value: boolean);
2538
+ get onItemClick(): ItemClickCallback | undefined;
2539
+ set onItemClick(value: ItemClickCallback | undefined);
2100
2540
  }
2101
2541
  export declare const ConfigService: ConfigServiceClass;
2102
2542
 
@@ -2132,6 +2572,11 @@ declare abstract class DatabaseServiceClass extends DatabaseServiceClass_base im
2132
2572
  updateVideoData(videoId: string, data: Partial<VideoDBData>): Promise<void>;
2133
2573
  getVideoLike(videoId: string): Promise<IResponse<VideoDBData> | null>;
2134
2574
  getVideoPosterById(videoId: string): Promise<string | undefined>;
2575
+ addLog(log: LogEntryDB): Promise<void>;
2576
+ getLogs(maxCount: number): Promise<LogEntryDB[]>;
2577
+ removeLogs(logIds: string[]): Promise<void>;
2578
+ clearLogs(): Promise<void>;
2579
+ getLogCount(): Promise<number>;
2135
2580
  }
2136
2581
  export declare const DatabaseService: DatabaseServiceClass;
2137
2582
 
@@ -2203,7 +2648,9 @@ export * from './event.service';
2203
2648
  export * from './interaction.service';
2204
2649
  export * from './like.service';
2205
2650
  export * from './logger.service';
2651
+ export * from './moment.service';
2206
2652
  export * from './startup.service';
2653
+ export * from './story.service';
2207
2654
  export * from './user.service';
2208
2655
  export * from './video-cache.service';
2209
2656
  export * from './video-player.service';
@@ -2212,6 +2659,7 @@ export * from './widgets.service';
2212
2659
  export * from './moment.service';
2213
2660
  export * from './story.service';
2214
2661
  export * from './user-country.service';
2662
+ export * from './announcement.service';
2215
2663
 
2216
2664
  declare const InteractionServiceClass_base: {
2217
2665
  new (): {};
@@ -2241,33 +2689,18 @@ declare abstract class LikeServiceClass extends LikeServiceClass_base implements
2241
2689
  }
2242
2690
  export declare const LikeService: LikeServiceClass;
2243
2691
 
2244
- interface LoggerParams {
2245
- message: string;
2246
- level?: LogLevel;
2247
- metadata?: Record<string, any>;
2248
- }
2249
- declare enum LogLevel {
2250
- INFO = "info",
2251
- WARN = "warn",
2252
- ERROR = "error"
2253
- }
2254
2692
  declare const LoggerServiceClass_base: {
2255
2693
  new (): {};
2256
2694
  _instance: LoggerServiceClass;
2257
2695
  getInstance(): LoggerServiceClass;
2258
2696
  };
2259
- declare class LoggerServiceClass extends LoggerServiceClass_base implements IService {
2260
- private isEnabled;
2261
- private logStack;
2262
- private constructor();
2697
+ declare abstract class LoggerServiceClass extends LoggerServiceClass_base implements IService, ILogger {
2698
+ private loggerManager;
2699
+ constructor();
2263
2700
  init(): Promise<void>;
2264
- private getCurrentTime;
2265
- private logToConsole;
2266
- log({ message, level, metadata }: LoggerParams): void;
2267
- info(message: string, metadata?: Record<string, any>): void;
2268
- warn(message: string, metadata?: Record<string, any>): void;
2269
- error(message: string, metadata?: Record<string, any>): void;
2270
- printLogsToScreen(): void;
2701
+ destroy(): Promise<void>;
2702
+ updateConfiguration(configuration: ILoggerConfiguration): void;
2703
+ log(level: LogLevel, logIdentifier: string, message: string, metadata?: ILogMetadata): Promise<void>;
2271
2704
  }
2272
2705
  export declare const LoggerService: LoggerServiceClass;
2273
2706
 
@@ -2913,6 +3346,30 @@ export type EnhancementsType = {
2913
3346
  hasSwipeUp: boolean;
2914
3347
  } | null;
2915
3348
 
3349
+ export type AnnouncementPriority = 'polite' | 'assertive';
3350
+ export type AnnouncementCategory = 'navigation' | 'status' | 'error' | 'success';
3351
+ export declare const ANNOUNCEMENT_CONSTANTS: {
3352
+ readonly LIVE_REGIONS: {
3353
+ readonly POLITE_ID: "blaze-aria-live-polite";
3354
+ readonly ASSERTIVE_ID: "blaze-aria-live-assertive";
3355
+ readonly STYLES: {
3356
+ readonly POSITION: "absolute";
3357
+ readonly LEFT: "-10000px";
3358
+ readonly WIDTH: "1px";
3359
+ readonly HEIGHT: "1px";
3360
+ readonly OVERFLOW: "hidden";
3361
+ };
3362
+ };
3363
+ readonly ATTRIBUTES: {
3364
+ readonly ARIA_LIVE: "aria-live";
3365
+ readonly ARIA_ATOMIC: "aria-atomic";
3366
+ readonly ATOMIC_VALUE: "true";
3367
+ };
3368
+ readonly TIMING: {
3369
+ readonly REGION_SETUP_DELAY: 10;
3370
+ };
3371
+ };
3372
+
2916
3373
  export interface IAttributeParser {
2917
3374
  getIntAttribute(key: string, defaultValue?: number): number | undefined;
2918
3375
  getFloatAttribute(key: string, defaultValue?: number): number | undefined;
@@ -3332,6 +3789,7 @@ export type StoryGestureType = 'Swipe Up' | 'CTA Click';
3332
3789
  export type MomentGestureType = 'CTA Click';
3333
3790
 
3334
3791
  export * from './animation.type';
3792
+ export * from './announcement.type';
3335
3793
  export * from './attribute-parser';
3336
3794
  export * from './button.type';
3337
3795
  export * from './chip-status.type';
@@ -3467,6 +3925,24 @@ export type IWidgetViewOptions = IWidgetViewOptionsWithLabels | IWidgetViewOptio
3467
3925
 
3468
3926
  export type WidgetType = 'Row' | 'Grid';
3469
3927
 
3928
+ export declare function buildContentTypeLabel(contentType: ContentType, title: string, elementType?: 'button' | 'item' | 'player'): string;
3929
+ export declare function getContentTypeAction(contentType: ContentType): string;
3930
+ export declare function buildStatusInfo(content: IStory | IMoment | IVideo, badgeStyle?: IndicatorStyle): string;
3931
+ export declare function buildContentAriaLabel(options: {
3932
+ contentType: ContentType;
3933
+ title: string;
3934
+ content: IStory | IMoment | IVideo;
3935
+ position?: number;
3936
+ total?: number;
3937
+ badgeStyle?: IndicatorStyle;
3938
+ elementType?: 'button' | 'item' | 'player';
3939
+ }): string;
3940
+ export declare function buildCarouselLabel(contentType: ContentType, count: number, includeInstructions?: boolean): {
3941
+ label: string;
3942
+ announcement: string;
3943
+ };
3944
+ export declare function generateThumbnailAltText(contentType: ContentType, title: string, content: IStory | IMoment | IVideo): string;
3945
+
3470
3946
  export declare function isImaAdInfo(ad: IAdInfo): ad is IImaAdInfo;
3471
3947
  export declare function addContextToCustomTargeting(adInfo: IBaseAdInfo, customTargeting: Record<string, string | string[]>): void;
3472
3948
 
@@ -3537,6 +4013,7 @@ export declare function findParentOfType<T>(target: EventTarget | null, type: {
3537
4013
  }, stopAt: Element): T | null;
3538
4014
  export declare function validateContainer(containerId: string, widgetElementName?: string): HTMLElement;
3539
4015
 
4016
+ export * from './accessibility-label.utils';
3540
4017
  export * from './ad-info.utils';
3541
4018
  export * from './cc-language.utils';
3542
4019
  export * from './chip.utils';
@@ -3549,6 +4026,7 @@ export * from './personalized.utils';
3549
4026
  export * from './position.utils';
3550
4027
  export * from './regex.utils';
3551
4028
  export * from './shared-event-target.utils';
4029
+ export * from './tab-index-utils';
3552
4030
  export * from './stopwatch';
3553
4031
 
3554
4032
  export declare function getPersonalizedParamsForRequest(personalized?: BlazePersonalized): {
@@ -3595,8 +4073,74 @@ export declare class Stopwatch {
3595
4073
  reset(): void;
3596
4074
  }
3597
4075
 
4076
+ export declare class AccessibilityUtils {
4077
+ static setElementsAccessible(elements: Element[]): void;
4078
+ static setElementsInaccessible(elements: Element[]): void;
4079
+ static setElementAccessibilityHidden(element: Element): void;
4080
+ static setElementsAccessibilityHidden(elements: Element[]): void;
4081
+ }
4082
+
3598
4083
  export declare function getVideoDuration(existingVideo?: HTMLVideoElement, videoUrl?: string): Promise<number>;
3599
4084
 
4085
+ export { LOG_LEVEL_VALUES, isLogLevelAllowed, calculateLogPriority } from './logger-level-utils';
4086
+ export { buildLogMetadata, MetadataKeys } from './logger-metadata-utils';
4087
+ export { compressPayload } from './logger-compression-utils';
4088
+ export { estimateEntrySize, calculateTotalMemoryUsage } from './logger-memory-utils';
4089
+ export { validateLoggerConfigurationDetailed, shouldIgnoreLog, sanitizeBatchSizeConfiguration } from './logger-validation-utils';
4090
+ export { extractEntryIds } from './logger-storage-utils';
4091
+ export { pruneOfflineQueue, addToOfflineQueueWithPruning } from './logger-offline-utils';
4092
+
4093
+ export declare function compressPayload(payload: object | string): Promise<ArrayBuffer>;
4094
+
4095
+ export declare const LOG_LEVEL_VALUES: {
4096
+ readonly DEBUG: 1;
4097
+ readonly INFO: 2;
4098
+ readonly WARN: 3;
4099
+ readonly ERROR: 4;
4100
+ readonly CRITICAL: 5;
4101
+ };
4102
+ export declare function isLogLevelAllowed(logLevel: LogLevel, configuredLevel: LogLevel): boolean;
4103
+ export declare function calculateLogPriority(level: LogLevel): number;
4104
+
4105
+ export declare function estimateEntrySize(entry: LogEntryDB): number;
4106
+ export declare function calculateTotalMemoryUsage(entries: LogEntryDB[]): number;
4107
+
4108
+ export declare const MetadataKeys: {
4109
+ readonly SESSION_ID: "session_id";
4110
+ readonly ID: "id";
4111
+ readonly SDK_TYPE: "sdk_type";
4112
+ readonly SDK_VERSION: "sdk_version";
4113
+ readonly API_KEY: "api_key";
4114
+ readonly DEVICE_TYPE: "device_type";
4115
+ readonly DEVICE_BRAND: "device_brand";
4116
+ readonly DEVICE_MODEL: "device_model";
4117
+ readonly OPERATING_SYSTEM: "operating_system";
4118
+ readonly OPERATING_SYSTEM_VERSION: "operating_system_version";
4119
+ readonly SCREEN_RESOLUTION: "screen_resolution";
4120
+ readonly CONNECTION_TYPE: "connection_type";
4121
+ readonly REPORTING_TIMESTAMP: "reporting_timestamp";
4122
+ readonly LOG_IDENTIFIER: "log_identifier";
4123
+ };
4124
+ export declare function buildLogMetadata(sessionId: string, logId: string, logIdentifier?: string, customMetadata?: Record<string, any>): Record<string, any>;
4125
+
4126
+ export declare function pruneOfflineQueue(queue: LogEntryDB[], maxSize: number): {
4127
+ prunedQueue: LogEntryDB[];
4128
+ removedCount: number;
4129
+ };
4130
+ export declare function addToOfflineQueueWithPruning(queue: LogEntryDB[], entry: LogEntryDB, maxSize: number): {
4131
+ updatedQueue: LogEntryDB[];
4132
+ removedCount: number;
4133
+ };
4134
+
4135
+ export declare function extractEntryIds(entries: LogEntryDB[]): string[];
4136
+
4137
+ export declare function validateLoggerConfigurationDetailed(config: ILoggerConfiguration): {
4138
+ isValid: boolean;
4139
+ errors: string[];
4140
+ };
4141
+ export declare function sanitizeBatchSizeConfiguration(config: ILoggerConfiguration): ILoggerConfiguration;
4142
+ export declare function shouldIgnoreLog(logIdentifier: string, ignoredLogs: IIgnoredLog[]): boolean;
4143
+
3600
4144
  export * from './commands/player-buttons.command';
3601
4145
  export * from './commands/video-commands';
3602
4146
  export * from './components/timer';
@@ -4335,7 +4879,7 @@ export declare abstract class WidgetBaseLayout extends BlazeWidgetScrollable imp
4335
4879
  protected abstract updateWidgetDisplay(): void;
4336
4880
  protected sortContent(): void;
4337
4881
  protected reorderWidgets(): void;
4338
- private getContentType;
4882
+ protected getContentType(): ContentType;
4339
4883
  static get observedAttributes(): string[];
4340
4884
  protected createModal(type: ContentType): void;
4341
4885
  protected beforeStoryModalCreation(): void;
@@ -4621,20 +5165,25 @@ export declare class BlazeWidgetItem extends BaseWidget implements Observable {
4621
5165
  contentType: ContentType | undefined;
4622
5166
  chipType: ChipStatusType;
4623
5167
  intersectionObserver: IntersectionObserver;
4624
- get parentRef(): BlazeWidgetLayout;
4625
- statusIndicatorSettings: IndicatorStyle;
4626
- paddingItem: PositionOffset;
5168
+ private position;
5169
+ private total;
4627
5170
  content: IStory | IMoment | IVideo;
4628
5171
  onClick: (() => void) | undefined;
4629
5172
  private boundOnWidgetClick;
5173
+ private boundOnFocus;
5174
+ get parentRef(): BlazeWidgetLayout;
5175
+ statusIndicatorSettings: IndicatorStyle;
5176
+ paddingItem: PositionOffset;
4630
5177
  constructor(options: BlazeWidgetItemOptions);
4631
5178
  private initializeWidget;
4632
5179
  connectedCallback(): void;
5180
+ private updateAriaLabel;
4633
5181
  updateWidget(): void;
4634
5182
  updateWidgetItemPadding(): void;
4635
5183
  updateWidgetItemStyle(layoutStyle: LayoutStyle): void;
4636
5184
  private setupDOMElements;
4637
5185
  private setupEventListeners;
5186
+ private onFocus;
4638
5187
  private handleWidgetClick;
4639
5188
  disconnectedCallback(): void;
4640
5189
  debouncedIntersectionAction: {
@@ -4645,6 +5194,7 @@ export declare class BlazeWidgetItem extends BaseWidget implements Observable {
4645
5194
  };
4646
5195
  handleIntersection(): void;
4647
5196
  private setData;
5197
+ private setupChildElementsAccessibility;
4648
5198
  isFullyVisibleInParent(): boolean;
4649
5199
  loadNewThumbnail(): void;
4650
5200
  getThumbnailUrl(): string;
@@ -4665,12 +5215,19 @@ export declare class BlazeWidgetItem extends BaseWidget implements Observable {
4665
5215
  getPaddingOnContainer(): PositionOffset;
4666
5216
  setPaddingOnContainer(padding: PositionOffset): void;
4667
5217
  setChipStyle(): void;
5218
+ private getItemIndex;
4668
5219
  event(action: WidgetAction, data: Partial<WidgetEvent>, label?: string | undefined): void;
4669
5220
  render(): void;
5221
+ updateAccessibilityInfo(info: {
5222
+ position: number;
5223
+ total: number;
5224
+ contentType?: ContentType;
5225
+ }): void;
4670
5226
  }
4671
5227
 
4672
5228
  /// <reference types="node" />
4673
5229
  export declare class BlazeWidgetLayout extends WidgetBaseLayout {
5230
+ containerId: string | undefined;
4674
5231
  skeletonContainer: BlazeDiv | undefined;
4675
5232
  widgetHeight: number;
4676
5233
  parentHeight: number | undefined;
@@ -4683,6 +5240,8 @@ export declare class BlazeWidgetLayout extends WidgetBaseLayout {
4683
5240
  onMouseLeaveEvent: (e: MouseEvent) => void;
4684
5241
  currentlyAnimatedItem: BlazeWidgetItem | undefined;
4685
5242
  firstVisibleItem: BlazeWidgetItem | undefined;
5243
+ private focusedItemIndex;
5244
+ private lastFocusedIndex;
4686
5245
  get refElement(): ShadowRoot | BlazeWidgetLayout;
4687
5246
  constructor();
4688
5247
  connectedCallback(): void;
@@ -4691,13 +5250,12 @@ export declare class BlazeWidgetLayout extends WidgetBaseLayout {
4691
5250
  onResize(): void;
4692
5251
  handleHeightChangeMutation(mutationsList: MutationRecord[]): void;
4693
5252
  handleIntersection(entries: IntersectionObserverEntry[]): void;
4694
- onKeyDown(e: KeyboardEvent): void;
4695
5253
  onContentChange(mode: ContentDirection): void;
4696
5254
  onPlayerClose(): void;
4697
5255
  onPlayerOpen(): void;
4698
5256
  setFirstVisibleItem(): void;
4699
5257
  getParentHeightWithoutPadding(): number | null;
4700
- setId(id: string): void;
5258
+ setId(containerId: string): void;
4701
5259
  set storyIds(value: string);
4702
5260
  set contentIds(value: string);
4703
5261
  updateWidgetUI(): void;
@@ -4759,10 +5317,24 @@ export declare class BlazeWidgetLayout extends WidgetBaseLayout {
4759
5317
  connectWidgets(): void;
4760
5318
  get thumbnailShape(): ThumbnailShape;
4761
5319
  widgetType(): WidgetType;
5320
+ setPersonalized(personalized?: BlazePersonalized): void;
5321
+ private setupAccessibility;
5322
+ private updateAccessibilityLabel;
5323
+ onKeyDown(e: KeyboardEvent): void;
5324
+ private navigateToNextItem;
5325
+ private navigateToPreviousItem;
5326
+ private navigateToItem;
5327
+ private activateCurrentItem;
5328
+ private announceCurrentItem;
5329
+ updateFocusedItemIndex(index: number): void;
5330
+ private setFocusState;
5331
+ private removeTabIndexFromWidgetItems;
5332
+ private restoreTabIndexOnWidgetItems;
4762
5333
  }
4763
5334
 
4764
5335
  export declare class BlazeWidgetModal extends BaseWidget {
4765
5336
  player: BlazeWidgetStoryPlayer | BlazeWidgetMomentPlayer | BlazeWidgetVideoPlayer;
5337
+ private contentType;
4766
5338
  isOpen: boolean;
4767
5339
  exitButtonElement: BlazeButton;
4768
5340
  exitButtonWrapperElement: BlazeDiv;
@@ -4771,6 +5343,7 @@ export declare class BlazeWidgetModal extends BaseWidget {
4771
5343
  isMultiTouch: boolean;
4772
5344
  boundOnResizeEvent: (this: Window, ev: UIEvent) => void;
4773
5345
  boundOnPopStateEvent: (ev: PopStateEvent) => void;
5346
+ boundOnExitButtonClick: (ev: MouseEvent) => void;
4774
5347
  onContentChange?: (mode: ContentDirection) => void;
4775
5348
  onClose: ((options?: ISmoothOpenCloseModal) => void) | undefined;
4776
5349
  onOpen: (() => void) | undefined;
@@ -4780,6 +5353,7 @@ export declare class BlazeWidgetModal extends BaseWidget {
4780
5353
  private isRealResizeEvent;
4781
5354
  onResize(): void;
4782
5355
  handleOnContentChange(mode: ContentDirection): void;
5356
+ handleOnExitButtonClick(): void;
4783
5357
  handlePopState(): void;
4784
5358
  seek(id: string): void;
4785
5359
  setupHammer(): void;
@@ -4796,6 +5370,7 @@ export declare class BlazeWidgetModal extends BaseWidget {
4796
5370
  customButtonVisibility?: boolean;
4797
5371
  }): boolean;
4798
5372
  render(): void;
5373
+ private transferFocusToModal;
4799
5374
  }
4800
5375
 
4801
5376
  export type BlazeWidgetContent = BlazeWidgetStory | BlazeWidgetMoment | BlazeVideoElement;
@@ -5191,6 +5766,8 @@ export declare class BlazeWidgetMomentPlayer extends WidgetAbstractPlayer {
5191
5766
  boundHandleMuteClicked: () => void;
5192
5767
  private fetchedPosterUrls;
5193
5768
  private preloadTimer;
5769
+ private accessibilityConfigTimeout;
5770
+ private focusTimeout;
5194
5771
  constructor();
5195
5772
  get currentMoment(): BlazeWidgetMoment;
5196
5773
  connectedCallback(): void;
@@ -5210,6 +5787,7 @@ export declare class BlazeWidgetMomentPlayer extends WidgetAbstractPlayer {
5210
5787
  updateItemData(itemToReplaceWith: BlazeWidgetMoment & BlazeWidgetStory & BlazeVideoElement, nextItemToInsert: BlazeWidgetMoment | BlazeWidgetStory | BlazeVideoElement): void;
5211
5788
  createAnimation(content: BlazeWidgetMoment, direction: ContentDirection, targetIndex: number): AnimeTimelineInstance;
5212
5789
  handleAnimationStart(content: BlazeWidgetMoment, direction: ContentDirection): void;
5790
+ private calculateTruePosition;
5213
5791
  handleAnimationCompletion(content: BlazeWidgetMoment, mode: ContentDirection): Promise<void>;
5214
5792
  loadAndPlayContent(): Promise<void>;
5215
5793
  setContent(content: BlazeWidgetMoment[]): void;
@@ -5228,6 +5806,13 @@ export declare class BlazeWidgetMomentPlayer extends WidgetAbstractPlayer {
5228
5806
  loadContentBatch(): void;
5229
5807
  resetStyles(): void;
5230
5808
  render(): void;
5809
+ configurePlayerContentAccessibility(): void;
5810
+ private setCurrentMomentAccessibility;
5811
+ private setInactiveMomentAccessibility;
5812
+ private scheduleAccessibilityConfig;
5813
+ private cancelAccessibilityConfig;
5814
+ private scheduleFocus;
5815
+ private cancelFocus;
5231
5816
  }
5232
5817
 
5233
5818
  export declare class BlazeWidgetMomentSeekBar extends HTMLElement {
@@ -5317,6 +5902,7 @@ export declare class BlazeWidgetMoment extends BlazeWidgetContent {
5317
5902
  onClose: () => void;
5318
5903
  boundOnCtaClicked: (event: Event) => void;
5319
5904
  boundPlayPauseButtonClick: (event: MouseEvent) => void;
5905
+ boundOnKeyDown: (event: KeyboardEvent) => void;
5320
5906
  topContainer: BlazeDiv;
5321
5907
  bottomContainer: BlazeDiv;
5322
5908
  bottomContentContainer: BlazeDiv;
@@ -5425,6 +6011,18 @@ export declare class BlazeWidgetMoment extends BlazeWidgetContent {
5425
6011
  restartVideo(): void;
5426
6012
  adjustContentView(): void;
5427
6013
  event(action: MomentAction, momentData: Partial<MomentEvent>, label?: string | undefined): Promise<void>;
6014
+ private registerMomentAccessibility;
6015
+ updateAccessibilityLabels(): void;
6016
+ private buildMomentAccessibilityState;
6017
+ updateContentAccessibilityAfterDataChange(): void;
6018
+ protected updateButtonAccessibilityLabels(): void;
6019
+ enableAllButtons(): void;
6020
+ disableAllButtons(): void;
6021
+ protected setButtonsAccessibilityState(buttons: Element[], accessible: boolean): void;
6022
+ private enableAnchorElements;
6023
+ private disableAnchorElements;
6024
+ getAllFocusableButtons(): Element[];
6025
+ private getMomentButtonsForAccessibility;
5428
6026
  render(): void;
5429
6027
  }
5430
6028
 
@@ -5457,6 +6055,8 @@ export declare class BlazeWidgetStoryPlayer extends WidgetAbstractPlayer {
5457
6055
  boundOnKeyDown: (event: KeyboardEvent) => Promise<void>;
5458
6056
  backgroundAnimation?: Animation;
5459
6057
  dispatchExitStoryEvents: (() => void) | undefined;
6058
+ private accessibilityConfigTimeout;
6059
+ private focusTimeout;
5460
6060
  constructor();
5461
6061
  connectedCallback(): void;
5462
6062
  disconnectedCallback(): void;
@@ -5487,6 +6087,15 @@ export declare class BlazeWidgetStoryPlayer extends WidgetAbstractPlayer {
5487
6087
  render(): void;
5488
6088
  loadContentBatch(): void;
5489
6089
  playToggleCurrentStory(): void;
6090
+ manageElementsAccessible(activeContentId: string): void;
6091
+ calculateTruePosition(currentContent: BlazeWidgetStory): number;
6092
+ private configurePlayerContentAccessibility;
6093
+ private setCurrentStoryAccessibility;
6094
+ private setInactiveStoryAccessibility;
6095
+ private scheduleAccessibilityConfig;
6096
+ private cancelAccessibilityConfig;
6097
+ private scheduleFocus;
6098
+ private cancelFocus;
5490
6099
  }
5491
6100
 
5492
6101
  export declare class BlazeWidgetStory extends BlazeWidgetContent {
@@ -5659,6 +6268,18 @@ export declare class BlazeWidgetStory extends BlazeWidgetContent {
5659
6268
  private onNextPageEvent;
5660
6269
  private onPrevPageEvent;
5661
6270
  private getPagesContentExtraInfo;
6271
+ getAllFocusableButtons(): Element[];
6272
+ enableAllButtons(): void;
6273
+ disableAllButtons(): void;
6274
+ protected setButtonsAccessibilityState(buttons: Element[], accessible: boolean): void;
6275
+ private registerStoryAccessibility;
6276
+ private buildStoryRegistrationData;
6277
+ private getStoryButtonsForAccessibility;
6278
+ private getStoryDataForAccessibility;
6279
+ private updateStoryAccessibilityLabels;
6280
+ private getCurrentAccessibilityState;
6281
+ updateAccessibilityLabels(): void;
6282
+ private buildStoryAccessibilityState;
5662
6283
  }
5663
6284
 
5664
6285
  export declare const ElementId: {