interface PinningConfiguration {
    /**
     * By default, pinning mode will not work on Android or iOS mobile devices.
     * Defaults to `false`.
     */
    allowOnMobile: boolean;
    /**
     * By default, pinning mode will include a close button,
     * which the user can click to disable pinning mode.
     * Defaults to `true`.
     */
    closeable: boolean;
    /**
     * By default, the plugin will scale down the player's dimensions by
     * a factor determined by the `scale` option. However, providing a
     * `height` (or `width`) will override the default scaling and set
     * the size of the scaled-down player explicitly.
     * If only one dimension is provided, the other will be scaled down
     * to maintain the aspect ratio. If both dimensions are provided,
     * the player will be set to the exact, specified size.
     * Defaults to `null`.
     */
    height: number | null;
    /**
     * By default, the plugin will scale down the player's dimensions by
     * a factor determined by the `scale` option. However, providing a
     * `width` (or `height`) will override the default scaling and set
     * the size of the scaled-down player explicitly.
     * Defaults to `null`.
     */
    width: number | null;
    /**
     * The scaling factor applied to the player when it is in pinning
     * mode. Must be a number greater than zero and less than or equal to 1.
     * Defaults to `2/3`.
     */
    scale: number;
    /**
     * By default, a player with this plugin enabled will keep the
     * physical dimensions of the special container element in sync with
     * the player's dimensions. However, this doesn't work for all cases,
     * so it can be disabled by setting this option to `false`.
     * When doing so, the container element will behave like a normal
     * block element. This means that users of the plugin will need to
     * manage its size on their own.
     * Defaults to `false`.
     */
    manualContainerSize: boolean;
    /**
     * The horizontal alignment of the player when it is in pinning mode.
     * Defaults to `'right'`.
     */
    posX: 'right' | 'left';
    /**
     * The vertical alignment of the player when it is in pinning mode.
     * Defaults to `'bottom'`.
     */
    posY: 'top' | 'bottom';
    /**
     * The threshold at which the player is considered viewable. In other
     * words, when this percentage of the player is visible in the
     * browser's viewport, it is considered viewable.
     * For example, with the default of 0.8, the player is not considered
     * viewable unless 80% of it is visible in the viewport.
     * Must be a number greater than or equal to 0 or less than or equal to 1.
     * Defaults to `0.8`.
     */
    viewable: number;
}

interface PinningIntegration {
    /**
     * Activate or deactivate pinning mode based on the current state.
     */
    togglePinning(): void;
    /** @internal */
    updateConfiguration(pinningConfiguration: PinningConfiguration, prev: PinningConfiguration): void;
    /** @internal */
    dispose(): void;
}

type PinningIntegrationFactory = new (...args: Array<unknown>) => PinningIntegration;

export type { PinningIntegrationFactory };
