import { AdPage } from '../src/ads/models/adPage'; import { StoryAdvancementMode, PlayerAdvancementMode, } from '../src/infrastructure/activity/models/advancementMode'; declare global { namespace JSX { interface IntrinsicElements { 'amp-ad': AmpAd; // eslint-disable-next-line @typescript-eslint/no-explicit-any 'amp-story-player': any; 'amp-story': AmpStory; // eslint-disable-next-line @typescript-eslint/no-explicit-any 'amp-story-page': any; // eslint-disable-next-line @typescript-eslint/no-explicit-any 'amp-story-grid-layer': any; // eslint-disable-next-line @typescript-eslint/no-explicit-any 'amp-img': any; // eslint-disable-next-line @typescript-eslint/no-explicit-any 'amp-layout': any; // eslint-disable-next-line @typescript-eslint/no-explicit-any 'amp-video': any; // eslint-disable-next-line @typescript-eslint/no-explicit-any 'amp-story-page-attachment': any; // eslint-disable-next-line @typescript-eslint/no-explicit-any 'amp-story-interactive-poll': any; } } } interface AmpStory { href: string; idx: number; distance: number; iframe: HTMLIFrameElement; title: string; pages: string[] | null; posterImage: string; storyContentLoaded: boolean; // eslint-disable-next-line @typescript-eslint/no-explicit-any messagingPromise: Promise; // eslint-disable-next-line @typescript-eslint/no-explicit-any connectedDeferred: { promise: Promise }; } export interface AmpAd extends HTMLElement { attachPlaybackListeners?: () => void; backgroundImageUrl?: string | null; getBackgroundImageUrl?: Promise; discard?: () => void; mute?: () => void; pause?: () => void; play?: () => void; removePlaybackListeners?: () => void; rewind?: () => void; unmute?: () => void; // eslint-disable-next-line @typescript-eslint/no-misused-new new (window: Window, element: HTMLElement | null): AmpAd; } export interface AmpStoryPlayer extends HTMLElement { add( newStories: { href: string; title?: string; posterImage?: string }[] ): void; disablePlayback(): void; enablePlayback(): void; getStories(): AmpStory[]; pause(isClosed?: boolean): void; play(): void; setInAppActionsHaveCustomBehaviour(newValue: boolean): void; show( href: string | null, pageId?: string | null, opts?: { animate: boolean } | null ): void; go( storyIndexOrId: number | string, pageIndex?: number, opts?: { animate: boolean } | null ): void; rewind(href: string): void; getStoryState(opt: string): void; layoutPlayer(): void; load(): void; isReady: boolean; mute(): void; unmute(): void; resetCurrentPage(): void; disablePage: (storyId: string, pageId: string) => void; enablePage: (storyId: string, pageId: string) => void; updateStoryAdConfig: (storyId: string, adConfig: string) => void; updateStoryInitialPageId: (storyId: string, initialPageId: string) => void; // eslint-disable-next-line @typescript-eslint/no-misused-new new (window: Window, element: HTMLElement | null): AmpStoryPlayer; } interface AmpPlayerPageAppendedEventDetail { story: AmpStory; } type AmpPlayerPageAppendedEvent = CustomEvent; interface AmpSwipeEventDetails { isNavigationalSwipe: boolean; } export interface ISwitchPageEventDetail { direction: string; } type AmpSwipeEvent = CustomEvent; interface AmpTouchDetail { clientX: number; clientY: number; screenX: number; screenY: number; } interface AmpTouchMoveEventDetail { touches: AmpTouchDetail[]; } type AmpTouchMoveEvent = CustomEvent; interface AmpMutedEventDetail { muted: boolean; } type AmpMutedEvent = CustomEvent; interface AmpPlayerCloseEventDetail { isAd: boolean; trigger?: 'backgroundTapped' | 'closeButtonTapped'; } type AmpPlayerCloseEvent = CustomEvent; interface AmpKeyPressEventDetail { key: 'Escape'; source: 'story' | 'player'; } type AmpKeyPressEvent = CustomEvent; interface AmpStoryNavigationEventDetail { index: number; playerAdvancementModeExcludingAds: PlayerAdvancementMode; } type AmpStoryNavigationEvent = CustomEvent; interface AmpPageNavigationEventDetail { pageId: string; playerAdvancementModeExcludingAds: PlayerAdvancementMode; } type AmpPageNavigationEvent = CustomEvent; interface AmpStoryPageVisibleEventDetail { storyAdvancementMode: StoryAdvancementMode; playerAdvancementModeExcludingAds: PlayerAdvancementMode; storyPageId: string; storyPageIndex: number; // 1-indexed storyPageRealIndex: number; // 0-indexed storyPreviousPageId: string; storyPreviousPageIndex: number; // 1-indexed storyPreviousPageRealIndex: number; // 0-indexed } type AmpStoryPageVisibleEvent = CustomEvent; interface AmpStoryAdEventDetail { ad: AdPage; storyId: string; storyAdvancementMode: StoryAdvancementMode; } type AmpStoryAdEvent = CustomEvent; type AdProgressType = 'firstQuartile' | 'midpoint' | 'thirdQuartile'; interface AmpStoryAdProgressEventDetail extends AmpStoryAdEventDetail { progressType: AdProgressType; } type AmpStoryAdProgressEvent = CustomEvent; interface AmpStoryNoNextStoryEventDetail { playerAdvancementModeExcludingAds: PlayerAdvancementMode; } type AmpStoryNoNextStoryEvent = CustomEvent; interface AmpAdEventDetail { ad: AdPage; } type AmpAdEvent = CustomEvent; interface AmpAdProgressEventDetail extends AmpAdEventDetail { progressType: AdProgressType; } type AmpAdProgressEvent = CustomEvent;