@vkontakte/videoplayer 1.1.86 → 1.1.87-dev.04ce2cd1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/es2015.cjs +423 -56
  2. package/es2015.esm.js +423 -56
  3. package/es2018.cjs +423 -56
  4. package/es2018.esm.js +423 -56
  5. package/es2024.cjs +423 -56
  6. package/es2024.esm.js +423 -56
  7. package/esnext.cjs +423 -56
  8. package/esnext.esm.js +423 -56
  9. package/evergreen.esm.js +423 -56
  10. package/package.json +5 -5
  11. package/types/VKVideoPlayer/HTMLElement.d.ts +1 -1
  12. package/types/VKVideoPlayer/index.svelte.d.ts +173 -173
  13. package/types/components/Ads/admanWrapper.d.ts +79 -75
  14. package/types/components/Ads/types.d.ts +27 -27
  15. package/types/components/Controls/contants/desktopButtonsLeftIds.d.ts +8 -8
  16. package/types/components/Controls/contants/desktopButtonsLeftWeights.d.ts +2 -4
  17. package/types/components/Controls/contants/desktopButtonsRightIds.d.ts +8 -8
  18. package/types/components/Controls/contants/desktopButtonsRightWeights.d.ts +2 -4
  19. package/types/components/Controls/types.d.ts +27 -27
  20. package/types/components/Controls/utils/isInnerButtonGuard.d.ts +1 -1
  21. package/types/components/Icons/constants.d.ts +5 -5
  22. package/types/components/Icons/utils.d.ts +1 -1
  23. package/types/components/Menus/constants/contextMenuItemIds.d.ts +10 -10
  24. package/types/components/Menus/constants/contextMenuItemWeights.d.ts +2 -4
  25. package/types/components/Menus/constants/index.d.ts +4 -4
  26. package/types/components/Menus/constants/openSubMenuItemsIds.d.ts +1 -1
  27. package/types/components/Menus/constants/settingsMenuItemIds.d.ts +10 -10
  28. package/types/components/Menus/constants/settingsMenuItemWeights.d.ts +2 -4
  29. package/types/components/Menus/constants/subMenuIds.d.ts +6 -6
  30. package/types/components/Menus/subMenuTabs/rootMenuItems.d.ts +26 -26
  31. package/types/components/Menus/subMenuTabs/sharedMenuItems.d.ts +7 -7
  32. package/types/components/Menus/subMenuTabs/subMenuItems.d.ts +4 -10
  33. package/types/components/Menus/subMenuTabs/types.d.ts +108 -108
  34. package/types/components/Menus/subMenuTabs/utils.d.ts +2 -2
  35. package/types/components/Menus/types.d.ts +64 -61
  36. package/types/components/Menus/utils/getCurrentQualityDisplayValue.d.ts +12 -12
  37. package/types/components/Menus/utils/getQualityIcon.d.ts +2 -2
  38. package/types/components/Menus/utils/getSubMenusStack.svelte.d.ts +7 -7
  39. package/types/components/Menus/utils/menuNavigation.d.ts +5 -5
  40. package/types/components/Root/types.d.ts +79 -79
  41. package/types/components/Root/utils.d.ts +2 -2
  42. package/types/components/Timeline/PreviewTrack/useTransitionToPreviewTrack.svelte.d.ts +15 -15
  43. package/types/components/Timeline/consts.d.ts +2 -2
  44. package/types/components/shared/interpolateUtils.d.ts +2 -2
  45. package/types/config.d.ts +270 -260
  46. package/types/constans/controls.d.ts +21 -21
  47. package/types/constans/grid.d.ts +9 -9
  48. package/types/constans/index.d.ts +8 -8
  49. package/types/constans/interactives.d.ts +4 -4
  50. package/types/constans/keyboard.d.ts +43 -48
  51. package/types/index.d.ts +16 -16
  52. package/types/services/statistics.d.ts +13 -13
  53. package/types/store/index.d.ts +391 -391
  54. package/types/store/micro/base.d.ts +6 -6
  55. package/types/store/micro/fakeIsPlaying.d.ts +8 -10
  56. package/types/store/micro/graphIsOpened.d.ts +11 -13
  57. package/types/store/micro/index.d.ts +1 -1
  58. package/types/store/micro/interactiveControlsOpacity.d.ts +8 -10
  59. package/types/store/micro/notifications.d.ts +7 -10
  60. package/types/store/micro/pictureInPicture.d.ts +6 -9
  61. package/types/store/micro/seekToInteractiveDisabledTooltip.d.ts +8 -7
  62. package/types/store/micro/showInteractiveTimeIndicatorTooltip.d.ts +13 -12
  63. package/types/store/utils.d.ts +36 -36
  64. package/types/translation/index.d.ts +2 -2
  65. package/types/translation/labels.d.ts +1 -1
  66. package/types/translation/packs/en.d.ts +1 -1
  67. package/types/translation/packs/ru.d.ts +1 -1
  68. package/types/translation/types.d.ts +5 -5
  69. package/types/types/index.d.ts +534 -516
  70. package/types/types/svg.d.d.ts +5 -0
  71. package/types/utils/CaptionsPrepared.d.ts +15 -15
  72. package/types/utils/WebVttParser.d.ts +11 -11
  73. package/types/utils/attachments/defferedDisableByCondition.d.ts +3 -3
  74. package/types/utils/changeVolume.d.ts +6 -6
  75. package/types/utils/elementHelpers.d.ts +2 -2
  76. package/types/utils/findCurrentSubtltlePhrase.d.ts +1 -1
  77. package/types/utils/fullscreen.d.ts +14 -14
  78. package/types/utils/getActualEpisode.d.ts +7 -7
  79. package/types/utils/getControlInfo.d.ts +5 -7
  80. package/types/utils/getHotKeyMapData.d.ts +1 -1
  81. package/types/utils/grid.d.ts +1 -1
  82. package/types/utils/hooks/useIosSafariFullscreen.d.ts +2 -2
  83. package/types/utils/hooks/useIosSafariFullscreenSubtitles.d.ts +3 -3
  84. package/types/utils/keyboardHandleCases.d.ts +1 -1
  85. package/types/utils/notificationShowManager.d.ts +7 -6
  86. package/types/utils/roundFps.d.ts +1 -1
  87. package/types/utils/sanitizeHtml.d.ts +3 -3
  88. package/types/utils/sorts.d.ts +2 -2
  89. package/types/utils/stack/index.d.ts +7 -7
  90. package/types/utils/stack/node.d.ts +3 -3
  91. package/types/utils/subtitles.d.ts +8 -8
  92. package/types/utils/timeout.d.ts +2 -2
  93. package/types/utils/updatePlayerControlBlocks.d.ts +2 -2
  94. package/types/utils/updatePlayerControlsInfo.d.ts +2 -2
  95. package/types/utils/userSettings.d.ts +26 -21
  96. package/types/utils/videoConfig.d.ts +6 -2
  97. package/types/utils/volumeChange.d.ts +1 -1
  98. package/types/utils/webAPI/annotationsApi/annotationsApi.d.ts +31 -31
  99. package/types/utils/webAPI/annotationsApi/errors.d.ts +1 -1
  100. package/types/utils/webAPI/focusLock.d.ts +30 -30
  101. package/types/utils/webAPI/focusManager.d.ts +15 -15
  102. package/types/utils/webAPI/language.d.ts +1 -1
  103. package/types/utils/webAPI/mediaSessionApi.d.ts +14 -14
  104. package/types/utils/webAPI/pictureInPictureApi/documentPictureInPictureApi.svelte.d.ts +41 -41
  105. package/types/utils/webAPI/pictureInPictureApi/factory.d.ts +2 -2
  106. package/types/utils/webAPI/pictureInPictureApi/index.d.ts +4 -4
  107. package/types/utils/webAPI/pictureInPictureApi/pictureInPictureApi.d.ts +46 -46
  108. package/types/utils/webAPI/pictureInPictureApi/types.d.ts +4 -4
  109. package/types/utils/webAPI/pictureInPictureApi/utils.d.ts +3 -3
  110. package/types/utils/webAPI/slotsApi.d.ts +41 -41
@@ -1,16 +1,16 @@
1
- import type { MediaSessionApiActionHandler, MediaSessionApiMetadata } from '../../types';
2
- import type { IStore } from '../../store';
1
+ import type { MediaSessionApiActionHandler, MediaSessionApiMetadata } from "../../types";
2
+ import type { IStore } from "../../store";
3
3
  export declare class MediaSessionApi {
4
- private subscription;
5
- private readonly logger;
6
- private readonly log;
7
- constructor();
8
- isSupported(): boolean;
9
- setMetaData({ title, artist, thumbUrl }: MediaSessionApiMetadata): void;
10
- updateActionHandlers(actionHandlers: MediaSessionApiActionHandler[]): void;
11
- private resetActionHandlers;
12
- private setActionHandlers;
13
- attachToStore(store?: IStore): void;
14
- clearSubscriptions(): void;
15
- destroy(): void;
4
+ private subscription;
5
+ private readonly logger;
6
+ private readonly log;
7
+ constructor();
8
+ isSupported(): boolean;
9
+ setMetaData({ title, artist, thumbUrl }: MediaSessionApiMetadata): void;
10
+ updateActionHandlers(actionHandlers: MediaSessionApiActionHandler[]): void;
11
+ private resetActionHandlers;
12
+ private setActionHandlers;
13
+ attachToStore(store?: IStore): void;
14
+ clearSubscriptions(): void;
15
+ destroy(): void;
16
16
  }
@@ -1,44 +1,44 @@
1
- import { ValueSubject } from '@vkontakte/videoplayer-shared';
2
- import type { ExternalPictureInPictureEventHandlers, IPictureInPictureApi, PictureInPictureSettings } from '../../../types';
3
- import { PictureInPictureType } from '../../../types';
1
+ import { ValueSubject } from "@vkontakte/videoplayer-shared";
2
+ import type { ExternalPictureInPictureEventHandlers, IPictureInPictureApi, PictureInPictureSettings } from "../../../types";
3
+ import { PictureInPictureType } from "../../../types";
4
4
  export declare class DocumentPictureInPictureApiSvelte implements IPictureInPictureApi {
5
- private readonly initialSize;
6
- private playerDomElement;
7
- private playerParentShadowRoot;
8
- private playerDummyElement;
9
- private svelteContext;
10
- private pipWindow;
11
- info: {
12
- isActive$: ValueSubject<boolean>;
13
- isEnabled$: ValueSubject<boolean>;
14
- type: PictureInPictureType;
15
- };
16
- /**
17
- * Обычный pip может быть открыт браузером через медиа-сессию
18
- */
19
- private pipActive;
20
- private readonly pipApi;
21
- constructor({ enabled, initialSize }: PictureInPictureSettings);
22
- /**
23
- * Флаг показывает, есть ли в целом возможность использовать dpip в данном браузере, поддерживается ли это.
24
- */
25
- isSupported(): boolean;
26
- /**
27
- * Флаг показывает, находится ли пользователь в режиме dpip.
28
- */
29
- isActive(): boolean;
30
- setPlayerDomElement(playerDomElement: HTMLElement, playerParentShadowRoot: ShadowRoot): void;
31
- setContext(svelteContext: Map<unknown, unknown>): void;
32
- request(): Promise<void>;
33
- exit(): Promise<void>;
34
- dispose(): Promise<void>;
35
- /**
36
- * Флаг определяет может ли пользователь переходить в dpip на уровне бизнес логике.
37
- */
38
- setEnabled(enabled: boolean): void;
39
- assignPlayerContainer(playerContainer: HTMLElement): void;
40
- updateVideoElement(): void;
41
- setExternalEventHandlers(externalEventHandlers: ExternalPictureInPictureEventHandlers): void;
42
- private createStretchedContainer;
5
+ private readonly initialSize;
6
+ private playerDomElement;
7
+ private playerParentShadowRoot;
8
+ private playerDummyElement;
9
+ private svelteContext;
10
+ private pipWindow;
11
+ info: {
12
+ isActive$: ValueSubject<boolean>;
13
+ isEnabled$: ValueSubject<boolean>;
14
+ type: PictureInPictureType;
15
+ };
16
+ /**
17
+ * Обычный pip может быть открыт браузером через медиа-сессию
18
+ */
19
+ private pipActive;
20
+ private readonly pipApi;
21
+ constructor({ enabled, initialSize }: PictureInPictureSettings);
22
+ /**
23
+ * Флаг показывает, есть ли в целом возможность использовать dpip в данном браузере, поддерживается ли это.
24
+ */
25
+ isSupported(): boolean;
26
+ /**
27
+ * Флаг показывает, находится ли пользователь в режиме dpip.
28
+ */
29
+ isActive(): boolean;
30
+ setPlayerDomElement(playerDomElement: HTMLElement, playerParentShadowRoot: ShadowRoot): void;
31
+ setContext(svelteContext: Map<unknown, unknown>): void;
32
+ request(): Promise<void>;
33
+ exit(): Promise<void>;
34
+ dispose(): Promise<void>;
35
+ /**
36
+ * Флаг определяет может ли пользователь переходить в dpip на уровне бизнес логике.
37
+ */
38
+ setEnabled(enabled: boolean): void;
39
+ assignPlayerContainer(playerContainer: HTMLElement): void;
40
+ updateVideoElement(): void;
41
+ setExternalEventHandlers(externalEventHandlers: ExternalPictureInPictureEventHandlers): void;
42
+ private createStretchedContainer;
43
43
  }
44
44
  export declare function isInstanceOfDocumentPictureInPictureApi(pictureInPictureApi?: IPictureInPictureApi): pictureInPictureApi is DocumentPictureInPictureApiSvelte;
@@ -1,3 +1,3 @@
1
- import type { IDpipConfig } from '../../../config';
2
- import type { IPictureInPictureApi } from '../../../types';
1
+ import type { IDpipConfig } from "../../../config";
2
+ import type { IPictureInPictureApi } from "../../../types";
3
3
  export declare const createPiPApi: (initiallyEnabled: boolean, dpipConfig?: IDpipConfig | boolean) => IPictureInPictureApi | undefined;
@@ -1,4 +1,4 @@
1
- export { isInstanceOfDocumentPictureInPictureApi } from './documentPictureInPictureApi.svelte';
2
- export { isInstanceOfPictureInPictureApi } from './pictureInPictureApi';
3
- export { createPiPApi } from './factory';
4
- export { isPiPSupported, isDpipSupported } from './utils';
1
+ export { isInstanceOfDocumentPictureInPictureApi } from "./documentPictureInPictureApi.svelte";
2
+ export { isInstanceOfPictureInPictureApi } from "./pictureInPictureApi";
3
+ export { createPiPApi } from "./factory";
4
+ export { isPiPSupported, isDpipSupported } from "./utils";
@@ -1,49 +1,49 @@
1
- import { ValueSubject } from '@vkontakte/videoplayer-shared';
2
- import type { ExternalPictureInPictureEventHandlers, IPictureInPictureApi, PictureInPictureSettings } from '../../../types';
3
- import { PictureInPictureType } from '../../../types';
1
+ import { ValueSubject } from "@vkontakte/videoplayer-shared";
2
+ import type { ExternalPictureInPictureEventHandlers, IPictureInPictureApi, PictureInPictureSettings } from "../../../types";
3
+ import { PictureInPictureType } from "../../../types";
4
4
  export declare class PictureInPictureApi implements IPictureInPictureApi {
5
- private isRequested;
6
- private videoElement;
7
- private playerContainer;
8
- private svelteContext;
9
- private externalEventHandlers;
10
- private readonly eventHandlers;
11
- info: {
12
- isActive$: ValueSubject<boolean>;
13
- isEnabled$: ValueSubject<boolean>;
14
- type: PictureInPictureType;
15
- };
16
- constructor({ enabled }: PictureInPictureSettings);
17
- /**
18
- * Флаг показывает, есть ли в целом возможность использовать pip в данном браузере, поддерживается ли это.
19
- */
20
- isSupported(): boolean;
21
- /**
22
- * Флаг показывает, находится ли пользователь в режиме pip.
23
- */
24
- isActive(): boolean;
25
- setContext(svelteContext: Map<unknown, unknown>): void;
26
- revealPictureInPicture(): Promise<void>;
27
- request(): Promise<void>;
28
- exit(): Promise<void>;
29
- assignPlayerContainer(playerContainer: HTMLElement): void;
30
- updateVideoElement(): void;
31
- private addEventHandlers;
32
- setExternalEventHandlers(externalEventHandlers: ExternalPictureInPictureEventHandlers): void;
33
- private removeEventHandlers;
34
- dispose(): Promise<void>;
35
- private onEnterPictureInPicture;
36
- private onLeavePictureInPicture;
37
- private onResize;
38
- /**
39
- * Флаг определяет может ли пользователь переходить в pip на уровне бизнес логике.
40
- */
41
- setEnabled(enabled: boolean): void;
42
- /**
43
- * для сафари нужно корректно обновить состояние пипа, потому что если мы попали сюда
44
- * из за креша провайдера + клика на выход из пип-а, то сафари может не успеть прислать
45
- * leavepictureinpicture на старый элемент из за чего UI застрянет в неправильном состоянии
46
- */
47
- private waitForSafariLeavePictureInPicture;
5
+ private isRequested;
6
+ private videoElement;
7
+ private playerContainer;
8
+ private svelteContext;
9
+ private externalEventHandlers;
10
+ private readonly eventHandlers;
11
+ info: {
12
+ isActive$: ValueSubject<boolean>;
13
+ isEnabled$: ValueSubject<boolean>;
14
+ type: PictureInPictureType;
15
+ };
16
+ constructor({ enabled }: PictureInPictureSettings);
17
+ /**
18
+ * Флаг показывает, есть ли в целом возможность использовать pip в данном браузере, поддерживается ли это.
19
+ */
20
+ isSupported(): boolean;
21
+ /**
22
+ * Флаг показывает, находится ли пользователь в режиме pip.
23
+ */
24
+ isActive(): boolean;
25
+ setContext(svelteContext: Map<unknown, unknown>): void;
26
+ revealPictureInPicture(): Promise<void>;
27
+ request(): Promise<void>;
28
+ exit(): Promise<void>;
29
+ assignPlayerContainer(playerContainer: HTMLElement): void;
30
+ updateVideoElement(): void;
31
+ private addEventHandlers;
32
+ setExternalEventHandlers(externalEventHandlers: ExternalPictureInPictureEventHandlers): void;
33
+ private removeEventHandlers;
34
+ dispose(): Promise<void>;
35
+ private onEnterPictureInPicture;
36
+ private onLeavePictureInPicture;
37
+ private onResize;
38
+ /**
39
+ * Флаг определяет может ли пользователь переходить в pip на уровне бизнес логике.
40
+ */
41
+ setEnabled(enabled: boolean): void;
42
+ /**
43
+ * для сафари нужно корректно обновить состояние пипа, потому что если мы попали сюда
44
+ * из за креша провайдера + клика на выход из пип-а, то сафари может не успеть прислать
45
+ * leavepictureinpicture на старый элемент из за чего UI застрянет в неправильном состоянии
46
+ */
47
+ private waitForSafariLeavePictureInPicture;
48
48
  }
49
49
  export declare function isInstanceOfPictureInPictureApi(pictureInPictureApi?: IPictureInPictureApi): pictureInPictureApi is PictureInPictureApi;
@@ -1,6 +1,6 @@
1
- import type { DebouncedFn } from '@vkontakte/videoplayer-shared';
1
+ import type { DebouncedFn } from "@vkontakte/videoplayer-shared";
2
2
  export interface PictureInPictureEventHandlers {
3
- enterpictureinpicture: (event: Event) => void;
4
- leavepictureinpicture: (event?: Event) => void;
5
- resize: DebouncedFn<(event: Event) => void>;
3
+ enterpictureinpicture: (event: Event) => void;
4
+ leavepictureinpicture: (event?: Event) => void;
5
+ resize: DebouncedFn<(event: Event) => void>;
6
6
  }
@@ -1,6 +1,6 @@
1
- import { type SafeAny } from '@vkontakte/videoplayer-shared';
2
- import type { PictureInPictureResizeEvent } from '../../../types';
3
- import type { IDpipConfig } from '../../../config';
1
+ import { type SafeAny } from "@vkontakte/videoplayer-shared";
2
+ import type { PictureInPictureResizeEvent } from "../../../types";
3
+ import type { IDpipConfig } from "../../../config";
4
4
  export declare const isPiPSupported: () => boolean;
5
5
  export declare const isDpipSupported: () => boolean;
6
6
  export declare const isPiPEvent: (e: SafeAny) => e is PictureInPictureEvent;
@@ -1,53 +1,53 @@
1
- import type { IStore } from '../../store';
2
- import type { IPlayerControlsRef } from '../../types';
1
+ import type { IStore } from "../../store";
2
+ import type { IPlayerControlsRef } from "../../types";
3
3
  /**
4
- * Если смотреть по порядку расположения типов, то чем дальше тип, тем выше у него zIndex.
5
- *
6
- * over_video - слот будет находиться над видео;
7
- * over_controls - слот будет находиться над контролами, но под меню настроек.
8
- */
9
- export type SlotOverlay = 'over_video' | 'over_controls';
4
+ * Если смотреть по порядку расположения типов, то чем дальше тип, тем выше у него zIndex.
5
+ *
6
+ * over_video - слот будет находиться над видео;
7
+ * over_controls - слот будет находиться над контролами, но под меню настроек.
8
+ */
9
+ export type SlotOverlay = "over_video" | "over_controls";
10
10
  export declare const SLOT_NAME = "annotation";
11
11
  export type HideControlsWhenIntersectedOptions = {
12
- observedSlotElementId: string;
13
- controlsToObserve: (keyof IPlayerControlsRef)[];
12
+ observedSlotElementId: string;
13
+ controlsToObserve: (keyof IPlayerControlsRef)[];
14
14
  };
15
15
  type AddOptions = {
16
- id: string;
17
- overlay: SlotOverlay;
18
- hideAllControls?: boolean;
19
- controlsBehaviour?: HideControlsWhenIntersectedOptions;
16
+ id: string;
17
+ overlay: SlotOverlay;
18
+ hideAllControls?: boolean;
19
+ controlsBehaviour?: HideControlsWhenIntersectedOptions;
20
20
  };
21
21
  type AddReturnType = {
22
- success: true;
22
+ success: true;
23
23
  } | {
24
- success: false;
25
- message: string;
24
+ success: false;
25
+ message: string;
26
26
  };
27
27
  export declare class SlotsApi {
28
- private shadowRootContainer;
29
- private slots;
30
- private store;
31
- private disabledIds;
32
- constructor(disabledIds: string[]);
33
- init(shadowRootContainer: HTMLElement, store: IStore | undefined): void;
34
- add(elementParam: HTMLElement | (() => HTMLElement), options: AddOptions): AddReturnType;
35
- private setupSlotStyles;
36
- /**
37
- * Запускаем отслеживание пересечения между переданным элементом внутри слота и контролами.
38
- */
39
- private runHidingControlsWhenIntersected;
40
- /**
41
- * Ищем внутри рутового элемента слота элемент, с которым хотим отслеживать пересечение контролов.
42
- * Приходится делать через mutationObserver, так как данный элемент в силу асинхронной работы внешнего
43
- * фреймворка может появиться позже.
44
- * @param slotRootElement Рутовый элемент слота.
45
- * @param slotElementId Идентификатор элемента внутри слота, с которым хотим отслеживать пересечение контролов.
46
- * @param slotId Идентификатор слота.
47
- */
48
- private findSlotElement;
49
- remove(id: string): void;
50
- destroy(): void;
51
- haveSlots(): boolean;
28
+ private shadowRootContainer;
29
+ private slots;
30
+ private store;
31
+ private disabledIds;
32
+ constructor(disabledIds: string[]);
33
+ init(shadowRootContainer: HTMLElement, store: IStore | undefined): void;
34
+ add(elementParam: HTMLElement | (() => HTMLElement), options: AddOptions): AddReturnType;
35
+ private setupSlotStyles;
36
+ /**
37
+ * Запускаем отслеживание пересечения между переданным элементом внутри слота и контролами.
38
+ */
39
+ private runHidingControlsWhenIntersected;
40
+ /**
41
+ * Ищем внутри рутового элемента слота элемент, с которым хотим отслеживать пересечение контролов.
42
+ * Приходится делать через mutationObserver, так как данный элемент в силу асинхронной работы внешнего
43
+ * фреймворка может появиться позже.
44
+ * @param slotRootElement Рутовый элемент слота.
45
+ * @param slotElementId Идентификатор элемента внутри слота, с которым хотим отслеживать пересечение контролов.
46
+ * @param slotId Идентификатор слота.
47
+ */
48
+ private findSlotElement;
49
+ remove(id: string): void;
50
+ destroy(): void;
51
+ haveSlots(): boolean;
52
52
  }
53
53
  export {};