import { UrlInput } from '@alessiofrittoli/url-utils';

/**
 * The `NetworkInformation` interface of the [Network Information API](https://developer.mozilla.org/en-US/docs/Web/API/Network_Information_API)
 * provides information about the connection a device is using to
 * communicate with the network and provides a means for scripts to be notified if the connection type changes.
 *
 * The `NetworkInformation` interface cannot be instantiated.
 * It is instead accessed through the `connection` property of the [`Navigator`](https://developer.mozilla.org/en-US/docs/Web/API/Navigator)
 * interface or the [`WorkerNavigator`](https://developer.mozilla.org/en-US/docs/Web/API/WorkerNavigator) interface.
 *
 * ⚠️ Will be replaced by official [NetworkInformation](https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation) interface.
 *
 * ⚠️ Limited availability - [See full compatibility](https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation#browser_compatibility)
 *
 * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation)
 */
interface NetworkInformation extends EventTarget {
    /**
     * Returns the effective bandwidth estimate in megabits per second, rounded to the nearest multiple of 25 kilobits per seconds.
     *
     * ⚠️ Limited availability - [See full compatibility](https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation/downlink#browser_compatibility)
     *
     * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation/downlink)
     */
    readonly downlink: number;
    /**
     * Returns the maximum downlink speed, in megabits per second (Mbps), for the underlying connection technology.
     *
     * ⚠️ Experimental - [See full compatibility](https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation/downlinkMax#browser_compatibility)
     *
     * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation/downlinkMax)
     */
    readonly downlinkMax?: number;
    /**
     * Returns the effective type of the connection.
     * This value is determined using a combination of recently observed round-trip time and downlink values.
     *
     * ⚠️ Limited availability - [See full compatibility](https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation/effectiveType#browser_compatibility)
     *
     * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation/effectiveType)
     */
    readonly effectiveType: 'slow-2g' | '2g' | '3g' | '4g';
    /**
     * Returns the estimated effective round-trip time of the current connection, rounded to the nearest multiple of 25 milliseconds.
     *
     * ⚠️ Limited availability - [See full compatibility](https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation/rtt#browser_compatibility)
     *
     * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation/rtt)
     */
    readonly rtt: number;
    /**
     * Returns `true` if the user has set a reduced data usage option on the user agent.
     *
     * ⚠️ Limited availability - [See full compatibility](https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation/saveData#browser_compatibility)
     *
     * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation/saveData)
     */
    readonly saveData: boolean;
    /**
     * Returns the type of connection a device is using to communicate with the network.
     *
     * ⚠️ Experimental - [See full compatibility](https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation/type#browser_compatibility)
     *
     * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation/type)
     */
    readonly type?: 'bluetooth' | 'cellular' | 'ethernet' | 'none' | 'wifi' | 'wimax' | 'other' | 'unknown';
}
/**
 * Defiens network status and `NetworkInformation`.
 *
 */
interface Connection {
    /**
     * The `NetworkInformation` interface of the [Network Information API](https://developer.mozilla.org/en-US/docs/Web/API/Network_Information_API)
     * provides information about the connection a device is using to
     * communicate with the network and provides a means for scripts to be notified if the connection type changes.
     *
     * The `NetworkInformation` interface cannot be instantiated.
     * It is instead accessed through the `connection` property of the [`Navigator`](https://developer.mozilla.org/en-US/docs/Web/API/Navigator)
     * interface or the [`WorkerNavigator`](https://developer.mozilla.org/en-US/docs/Web/API/WorkerNavigator) interface.
     *
     * ⚠️ Will be replaced by official [NetworkInformation](https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation) interface.
     *
     * ⚠️ Limited availability - [See full compatibility](https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation#browser_compatibility)
     *
     * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation)
     */
    readonly network?: NetworkInformation;
    /**
     * Indicates whether the device is connected to the network.
     *
     * - See [Listening for changes in network status](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/onLine#listening_for_changes_in_network_status).
     *
     * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/onLine)
     */
    readonly onLine: boolean;
}
/**
 * Get current Network status and information.
 *
 * @returns An object defining network status and `NetworkInformation`. See {@link Connection} for more info.
 */
declare const getConnection: () => Connection;

/**
 * Safely executes `window.matchMedia()` in server and browser environments.
 *
 * @param query The Media Query string to check.
 * @returns `false` if `window` is not defined or if the `document` currently doesn't matches the given `query`. `true` otherwise.
 *
 * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/MediaQueryList/matches)
 */
declare const getMediaMatches: (query: string) => boolean;

/**
 * Prevent Element Overflow.
 *
 * @param target (Optional) The target HTMLElement. Default: `Document.documentElement`.
 */
declare const blockScroll: (target?: HTMLElement) => void;
/**
 * Restore Element Overflow.
 *
 * @param target (Optional) The target HTMLElement. Default: `Document.documentElement`.
 */
declare const restoreScroll: (target?: HTMLElement) => void;
/**
 * Represents a URL stylesheet as a simple URL input, URL object or as an object
 * with URL and fetch configuration options.
 */
type UrlStylesheet = UrlInput | {
    /**
     * The URL string or a URL object of the stylesheet to load.
     *
     */
    url: UrlInput;
    /**
     * Indicates whether to fetch the given URL.
     *
     * @default false
     */
    fetch?: boolean;
};
/**
 * Represents a style input.
 *
 * @property {UrlStylesheet}	- A URL string or input pointing to a stylesheet file URL.
 * @property {HTMLStyleElement}	- An HTML style element containing CSS rules.
 * @property {CSSStyleSheet}	- A CSS stylesheet object.
 * @property {StyleSheetList}	- A collection of CSS stylesheets.
 */
type Style = UrlStylesheet | HTMLStyleElement | CSSStyleSheet | StyleSheetList;
/**
 * Represents a single style object or an array of style objects.
 *
 * @typeParam Style The style object type. See {@link Style}.
 */
type Styles = Style | Style[];
type CloneStyleSheetsReturn = (HTMLStyleElement | HTMLLinkElement)[];
/**
 * Clones a StyleSheetList or array of CSSStyleSheets into an array of `HTMLStyleElement` objects.
 *
 * This function extracts CSS rules from each stylesheet and creates corresponding `<style>`
 * elements containing the serialized CSS text. If an error occurs while processing a stylesheet,
 * the error is logged and that stylesheet is skipped.
 *
 * @param styles The source `StyleSheetList` or array of `CSSStyleSheet` objects to clone.
 *
 * @returns An array of `HTMLStyleElement` objects, each containing the CSS rules from the source stylesheets.
 *          Failed stylesheets are filtered out and not included in the result.
 *
 * @example
 *
 * ```ts
 * const styles = cloneStyleSheetList( document.styleSheets )
 * styles.forEach( style => shadowRoot.appendChild( style ) )
 * ```
 */
declare const cloneStyleSheetList: (styles: StyleSheetList | CSSStyleSheet[]) => HTMLStyleElement[];
/**
 * Clones style sheets from various sources into new HTMLStyleElement nodes.
 *
 * @param styles A style source or array of style sources. Style source an be:
 *   - `StyleSheetList`: A list of stylesheets.
 *   - `CSSStyleSheet` A single stylesheet object.
 *   - `HTMLStyleElement`: A style DOM element.
 *   - `UrlStylesheet`: A URL stylesheet as a simple URL input, URL object or as an object with URL and fetch configuration options.
 *
 * @returns A promise that resolves to an array of cloned HTMLStyleElement and HTMLLinkElement nodes.
 *   For inline styles and StyleSheetLists, returns HTMLStyleElement nodes.
 *   For URL-based stylesheets, returns HTMLLinkElement nodes (or HTMLStyleElement if fetch is true).
 *   Failed operations are silently ignored.
 *
 * @remarks
 * - When a URL stylesheet has `fetch: true`, the stylesheet content is fetched and embedded as inline CSS.
 * - When `fetch: false` (default), a link element is created instead.
 * - URL parsing is handled through the Url utility with support for both string and `UrlInput` object formats.
 */
declare const cloneStyleSheets: (styles: Styles) => Promise<CloneStyleSheetsReturn>;

/**
 * Represents valid input types for specifying dimensions.
 *
 * Can be provided as:
 * - A single number value
 * - A string value where dimesions are extracte from
 * - A tuple containing `width` and `height` values
 */
type InputDimensions = string | number | [xy: Dimensions[number]] | Dimensions;
/**
 * Represents a tuple of two optional numeric values.
 *
 */
type Dimensions = [x: number | undefined, y: number | undefined];
/**
 * Extracts and normalizes dimensions from various input formats.
 *
 * @param dimensions The input dimensions.
 *
 * @returns A tuple containing `[ number, number ]` where either value can be `undefined`.
 *
 * @example
 * ```ts
 * const [ width, height ] = getDimensions()                // [ undefined, undefined ]
 * const [ width, height ] = getDimensions( 100 )           // [ 100, 100 ]
 * const [ width, height ] = getDimensions( [ 200, 300 ] )  // [ 200, 300 ]
 * const [ width, height ] = getDimensions( [ 200 ] )       // [ 200, 200 ]
 * const [ width, height ] = getDimensions( '200x300' )     // [ 200, 300 ]
 * ```
 */
declare const getDimensions: (dimensions?: InputDimensions) => Dimensions;

/**
 * Checks if the Document Picture-in-Picture API is supported by the current browser.
 *
 * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Document_Picture-in-Picture_API)
 *
 * @returns `true` if Document Picture-in-Picture is supported, `false` otherwise.
 */
declare const isDocumentPictureInPictureSupported: () => boolean;
/**
 * Validates that the Document Picture-in-Picture API is supported by the current browser.
 *
 * @throws {Exception} Throws a new Exception if the Document Picture-in-Picture API is not supported.
 */
declare const requiresDocumentPictureInPictureAPI: () => void;
/**
 * Defines configuration options for opening a Document Picture-in-Picture window.
 *
 */
interface OpenDocumentPictureInPictureOptions {
    /**
     * A tuple defining non-negative numbers representing the width and the height to set for the Picture-in-Picture window's viewport, in pixels.
     *
     * @default [ 250, 250 ]
     */
    sizes?: InputDimensions;
    /**
     * Hints to the browser that it should not display a UI control that enables the user to return to the originating tab and close the Picture-in-Picture window.
     *
     * @default false
     */
    disallowReturnToOpener?: boolean;
    /**
     * Defines whether the Picture-in-Picture window will always appear back at the position and size it initially opened at,
     * when it is closed and then reopened.
     *
     * By contrast, if `preferInitialWindowPlacement` is `false` the Picture-in-Picture window's size and position will be remembered
     * when closed and reopened — it will reopen at its previous position and size, for example as set by the user.
     *
     * @default false
     */
    preferInitialWindowPlacement?: boolean;
    /**
     * Custom styles to load inside the Picture-in-Picture window.
     *
     * ⚠️ To keep consistent styling with your web-app, document styles are automatically cloned.
     */
    styles?: Styles;
    /**
     * A callback to execute when Picture-in-Picture window is closed.
     *
     */
    onQuit?: () => void;
}
/**
 * Defines the returned result of opening a Document Picture-in-Picture window.
 *
 */
interface OpenDocumentPictureInPicture {
    /**
     * The browsing context inside the Document Picture-in-Picture window.
     *
     */
    window: Window;
}
/**
 * Opens a Document Picture-in-Picture window.
 *
 * @param options Configuration options for opening a new Document Picture-in-Picture window.
 * 	See {@link OpenDocumentPictureInPictureOptions} for more info.
 *
 * @returns A new Promise that resolves to the Document Picture-in-Picture result containing the `window` of the new browsing context.
 * 	See {@link OpenDocumentPictureInPicture} for more info.
 *
 * @throws {Exception} Throws a new Exception if the Document Picture-in-Picture API is not supported.
 *
 * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Document_Picture-in-Picture_API)
 */
declare const openDocumentPictureInPicture: (options?: OpenDocumentPictureInPictureOptions) => Promise<OpenDocumentPictureInPicture>;

type Truthy = 'yes' | '1' | 'true';
type Falsey = 'no' | '0' | 'false';
interface WindowFeatures {
    /**
     * Indicates that you want the browser to send an [Attribution-Reporting-Eligible](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Attribution-Reporting-Eligible) header along with the `open()` call.
     *
     * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Window/open#attributionsrc)
    */
    attributionsrc?: Truthy;
    /**
     * By default, window.open opens the page in a new tab. If popup is set to true, it requests that a minimal popup window be used.
     *
     * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Window/open#popup)
     */
    popup?: Truthy | Falsey;
    /**
     * Specifies the width of the content area, including scrollbars. The minimum required value is 100.
     *
     * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Window/open#width)
     */
    width?: string;
    /**
     * Specifies the height of the content area, including scrollbars. The minimum required value is 100.
     *
     * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Window/open#height)
     */
    height?: string;
    /**
     * Specifies the distance in pixels from the left side of the work area as defined by the user's operating system where the new window will be generated.
     *
     * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Window/open#left)
     */
    left?: string;
    /**
     * Specifies the distance in pixels from the top side of the work area as defined by the user's operating system where the new window will be generated.
     *
     * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Window/open#top)
     */
    top?: string;
    /**
     * If this feature is set, the new window will not have access to the originating window via `Window.opener` and returns `null`.
     *
     * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Window/open#noopener)
     */
    noopener?: '_top' | '_self' | '_parent';
    /**
     * If this feature is set, the browser will omit the [Referer](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Referer) header, as well as set `noopener` to true.
     *
     * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Window/open#noreferrer)
     */
    noreferrer?: Truthy | Falsey;
}
type OptionsFeatures = (Omit<WindowFeatures, ('popup' | 'width' | 'height' | 'innerWidth' | 'innerHeight')>);
interface OpenBrowserPopUpOptions {
    /**
     * The URL or path of the resource to be loaded.
     *
     * If an empty string ("") is specified or this parameter is omitted, a blank page is opened into the targeted browsing context.
     */
    url?: UrlInput;
    /** The PopUp width. Default: `600`. */
    width?: number;
    /** The PopUp height. Default: `800`. */
    height?: number;
    /** A string, without whitespace, specifying the name of the browsing context the resource is being loaded into. */
    context?: string;
    /** Additional custom PopUp features. */
    features?: OptionsFeatures;
}
/**
 * Open Window PopUp.
 *
 * @param options An object defining custom PopUp options. See {@link OpenBrowserPopUpOptions} interface for more informations.
 *
 * @returns If the browser successfully opens the new browsing context, a WindowProxy object is returned.
 * 			The returned reference can be used to access properties and methods of the new context as long as it complies
 * 			with the same-origin policy security requirements.
 * 			`null` is returned if the browser fails to open the new browsing context, for example because it was blocked
 * 			by a browser popup blocker.
 *
 *
 * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Window/open)
 */
declare const openBrowserPopUp: (options?: OpenBrowserPopUpOptions) => WindowProxy | null;

/**
 * Make first letter uppercase.
 *
 * @param	input The input string to convert.
 * @returns	The processed string.
 */
declare const ucFirst: (input: string) => string;
/**
 * Make first letter lowercase.
 *
 * @param	input The input string to convert.
 * @returns	The processed string.
 */
declare const lcFirst: (input: string) => string;
/**
 * Convert string to camelCase.
 *
 * @param input The input string to convert.
 * @returns The converted string to camelCase.
 */
declare const toCamelCase: (input: string) => string;
/**
 * Convert string to kebab-case string.
 *
 * @param input The input string to convert.
 * @returns The converted string to kebab-case.
 */
declare const toKebabCase: (input: string) => string;
/**
 * Stringify value.
 *
 * @param	input The value to stringify.
 * @returns	The stringified `input`.
 */
declare const stringifyValue: (input?: any) => string;
/**
 * Parse stringified value.
 *
 * @param	input The value to parse.
 * @returns	The parsed `input`.
 */
declare const parseValue: <T>(input?: string) => T | undefined;
/**
 * Add leading character to a string.
 *
 * The given `input` won't be modified if it already contains the given `character`.
 *
 * @param	input		The string to process.
 * @param	character	The character to add.
 * @param	search		( Optional ) A custom search expression. Default `character`.
 *
 * @returns	The given string with leading character.
 */
declare const addLeadingCharacter: (input: string, character: string, search?: string | RegExp) => string;
/**
 * Remove leading character from a string.
 *
 * @param	input		The string to process.
 * @param	character	The character to remove.
 *
 * @returns	The given string with leading character removed.
 */
declare const removeLeadingCharacter: (input: string, character: string | RegExp) => string;
/**
 * Add trailing character to a string.
 *
 * The given `input` won't be modified if it already contains the given `character`.
 *
 * @param	input		The string to process.
 * @param	character	The character to add.
 * @param	search		( Optional ) A custom search expression. Default `character`.
 *
 * @returns	The given string with trailing character.
 */
declare const addTrailingCharacter: (input: string, character: string, search?: string | RegExp) => string;
/**
 * Remove trailing character from a string.
 *
 * @param	input		The string to process.
 * @param	character	The character to remove.
 *
 * @returns	The given string with trailing character removed.
 */
declare const removeTrailingCharacter: (input: string, character: string | RegExp) => string;
type Recipient = string | {
    /**
     * The recipient name.
     *
     */
    name?: string;
    /**
     * The recipient email address.
     *
     */
    email: string;
};
type Recipients = Recipient | Recipient[];
/**
 * Converts a single recipient or an array of recipients into a comma-separated string.
 *
 * Each recipient can be either a string (email address) or an object with at least an `email` property,
 * and optionally a `name` property. If the recipient is an object and has a `name`, the output will be
 * formatted as `"Name<email>"`. If the `name` is missing, only the email will be used.
 *
 * @param recipients A single `Recipient` or an array of `Recipient`. Each recipient can be a string or an object with `email` and optional `name`.
 * @returns A comma-separated string of recipients formatted as `"Name<email>"` or just `"email"`.
 */
declare const recipientsToString: (recipients: Recipients) => string;
interface EmailData {
    /**
     * The email recipients.
     *
     */
    to?: Recipients;
    /**
     * The email carbon copy recipients.
     *
     */
    cc?: Recipients;
    /**
     * The email blind carbon copy recipients.
     *
     */
    bcc?: Recipients;
    /**
     * The email subject.
     *
     */
    subject?: string;
    /**
     * The email body.
     *
     */
    body?: string;
}
/**
 * Converts an `EmailData` object into a properly formatted mailto URL string.
 *
 * This function constructs a mailto link using the provided email data, including
 * recipients, subject, body, CC, and BCC fields. It encodes the parameters as URL
 * search parameters and concatenates them to form a valid mailto URI.
 *
 * @param data The email data to convert. If omitted, defaults to an empty object.
 * @returns A string representing the mailto URL.
 */
declare const emailDataToString: (data?: EmailData) => string;
/**
 * Represents a value that can be used as a parameter in string operations.
 *
 */
type ParameterizedValue = string | boolean | number | bigint;
/**
 * Represents a parameterized string with its corresponding values.
 *
 * @property {string} 0 - The template string
 * @property {ParameterizedValue[]} 1 - Array of values to be substituted into the template string
 */
type Parameterized = [string, ParameterizedValue[]];
/**
 * Creates a parameterized string with placeholder values.
 *
 * @param strings - The template string parts from a template literal.
 * @param values - One or more parameter values or arrays of values to be substituted into the template.
 * @returns A tuple containing the normalized string with `?` placeholders and an array of parameter values.
 *
 * @example
 * ```ts
 * const [ string, params ] = parameterized`
 *  SELECT * FROM users WHERE id = ${ 1 } AND status IN ( ${ [ 'active', 'pending' ] } )
 * ` )
 *
 * // string: "SELECT * FROM users WHERE id = ? AND status IN ( ?, ? )"
 * // params: [ 1, 'active', 'pending' ]
 * ```
 *
 * @remarks
 * - Whitespace is normalized (multiple spaces reduced to single space, trimmed).
 * - Undefined values are skipped.
 * - Array values are expanded into comma-separated placeholders.
 * - Single values are replaced with a single `?` placeholder.
 */
declare const parameterized: (strings: TemplateStringsArray, ...values: (ParameterizedValue | ParameterizedValue[])[]) => Parameterized;

/**
 * @see {@link globalThis.ShareData}
 */
interface ShareData {
    /**
     * The URL to share.
     *
     */
    url?: UrlInput;
    /**
     * An array of `File` objects representing files to be shared. See [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/share#shareable_file_types) for shareable file types.
     *
     */
    files?: File[];
    /**
     * A string representing text to be shared.
     *
     */
    text?: string;
    /**
     * A string representing a title to be shared. May be ignored by the target.
     *
     */
    title?: string;
}
type ClassicSharerPopUpOptions = Omit<OpenBrowserPopUpOptions, 'context'>;
interface SharerPopUpOptions extends ClassicSharerPopUpOptions {
    /**
     * The shared content title.
     *
     */
    title?: string;
}
interface OpenSharerPopUpOptions extends ClassicSharerPopUpOptions {
    /**
     * The base sharer provider URL.
     *
     */
    sharer: UrlInput;
    /**
     * Custom URLSearchParam name where URL to share get stored.
     *
     * @default 'url'
     */
    urlParam?: string;
}
interface PinterestSharerPopUpOptions extends ClassicSharerPopUpOptions {
    /**
     * The media URL.
     *
     * @default url
     */
    media?: UrlInput;
    /**
     * The media description.
     *
     */
    description?: string;
}
interface WhatsAppSharerPopUpOptions extends ClassicSharerPopUpOptions {
    /**
     * Additional custom WhatsApp message.
     *
     */
    text?: string;
}
/**
 * Check whether the web page can leverage share APIs.
 *
 * @returns	`true` if web page is running in a secure context (HTTPS) and can leverage share APIs.
 */
declare const canWebApiShare: () => boolean;
/**
 * Check whether the web page can share the given data.
 *
 * @param	data (Optional) The data that is going to be shared.
 * @returns	`true` if web page is running in a secure context (HTTPS) and can share the given data, `false` otherwise.
 */
declare const canWebApiShareData: (data?: globalThis.ShareData) => boolean;
/**
 * Share data using the native sharing mechanism of the device to share data such as text, URLs, or files.
 *
 * Available only in secure contexts.
 *
 * @param data (Optional) The data to share. If no data is provided, then the current location URL is used.
 *
 * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Navigator/share)
 */
declare const share: (data?: ShareData) => Promise<false | void>;
/**
 * Share data via Email.
 *
 */
declare const shareViaEmail: (data?: EmailData) => void;
/**
 * Open sharer browser PopUp.
 *
 * @param options An object defining share options. See {@link OpenSharerPopUpOptions}.
 * @returns The result of {@link openBrowserPopUp}.
 */
declare const openSharerPopUp: (options: OpenSharerPopUpOptions) => Window | null;
/**
 * Share URL or current page URL on Facebook.
 *
 * @param	options	(Optional) The data to share. See {@link SharerPopUpOptions} for more info.
 * @returns	The `WindowProxy` object of the new context, `null` otherwise. See {@link openBrowserPopUp} for more info.
 */
declare const shareOnFacebook: (options?: SharerPopUpOptions) => Window | null;
/**
 * Share URL or current page URL on Workplace.
 *
 * @param	options	(Optional) The data to share. See {@link SharerPopUpOptions} for more info.
 * @returns	The `WindowProxy` object of the new context, `null` otherwise. See {@link openBrowserPopUp} for more info.
 */
declare const shareOnWorkplace: (options?: SharerPopUpOptions) => Window | null;
/**
 * Share URL or current page URL on Reddit.
 *
 * @param	options	(Optional) The data to share. See {@link SharerPopUpOptions} for more info.
 * @returns	The `WindowProxy` object of the new context, `null` otherwise. See {@link openBrowserPopUp} for more info.
 */
declare const shareOnReddit: (options?: SharerPopUpOptions) => Window | null;
/**
 * Share URL or current page URL on Weibo.
 *
 * @param	options	(Optional) The data to share. See {@link ClassicSharerPopUpOptions} for more info.
 * @returns	The `WindowProxy` object of the new context, `null` otherwise. See {@link openBrowserPopUp} for more info.
 */
declare const shareOnWeibo: (options?: ClassicSharerPopUpOptions) => Window | null;
/**
 * Share URL or current page URL on VK.
 *
 * @param	options	(Optional) The data to share. See {@link ClassicSharerPopUpOptions} for more info.
 * @returns	The `WindowProxy` object of the new context, `null` otherwise. See {@link openBrowserPopUp} for more info.
 */
declare const shareOnVK: (options?: ClassicSharerPopUpOptions) => Window | null;
/**
 * Share URL or current page URL on Tumblr.
 *
 * @param	options	(Optional) The data to share. See {@link ClassicSharerPopUpOptions} for more info.
 * @returns	The `WindowProxy` object of the new context, `null` otherwise. See {@link openBrowserPopUp} for more info.
 */
declare const shareOnTumblr: (options?: ClassicSharerPopUpOptions) => Window | null;
/**
 * Share URL or current page URL on Line.
 *
 * @param	options	(Optional) The data to share. See {@link ClassicSharerPopUpOptions} for more info.
 * @returns	The `WindowProxy` object of the new context, `null` otherwise. See {@link openBrowserPopUp} for more info.
 */
declare const shareOnLine: (options?: ClassicSharerPopUpOptions) => Window | null;
/**
 * Share URL or current page URL on X.
 *
 * @param	options	(Optional) The data to share. See {@link ClassicSharerPopUpOptions} for more info.
 * @returns	The `WindowProxy` object of the new context, `null` otherwise. See {@link openBrowserPopUp} for more info.
 */
declare const shareOnX: (options?: ClassicSharerPopUpOptions) => Window | null;
/**
 * Share URL or current page URL on LinkedIn.
 *
 * @param	options	(Optional) The data to share. See {@link ClassicSharerPopUpOptions} for more info.
 * @returns	The `WindowProxy` object of the new context, `null` otherwise. See {@link openBrowserPopUp} for more info.
 */
declare const shareOnLinkedIn: (options?: ClassicSharerPopUpOptions) => Window | null;
/**
 * Share URL or current page URL on Telegram.
 *
 * @param	options	(Optional) The data to share. See {@link ClassicSharerPopUpOptions} for more info.
 * @returns	The `WindowProxy` object of the new context, `null` otherwise. See {@link openBrowserPopUp} for more info.
 */
declare const shareOnTelegram: (options?: ClassicSharerPopUpOptions) => Window | null;
/**
 * Share URL or current page URL on Pinterest.
 *
 * @param	options	(Optional) The data to share. See {@link PinterestSharerPopUpOptions} for more info.
 * @returns	The `WindowProxy` object of the new context, `null` otherwise. See {@link openBrowserPopUp} for more info.
 */
declare const shareOnPinterest: (options?: PinterestSharerPopUpOptions) => Window | null;
/**
 * Share URL or current page URL via WhatsApp.
 *
 * @param	options	(Optional) The data to share. See {@link WhatsAppSharerPopUpOptions} for more info.
 * @returns	The `WindowProxy` object of the new context, `null` otherwise. See {@link openBrowserPopUp} for more info.
 */
declare const shareOnWhatsApp: (options?: WhatsAppSharerPopUpOptions) => Window | null;

/**
 * A type-safe extension of the Map class that enforces key-value relationships based on a provided type.
 *
 * @template T The object type defining the key-value relationships.
 * @template P Defines whether the `Map.get()` method should return a possibily undefined value.
 * @template K Internal - The subset of keys in T that are allowed in the Map. Defaults to all keys of T.
 */
interface TypedMap<T, P extends boolean = true, K extends keyof T = keyof T> extends Map<K, T[K]> {
    /**
     * Executes a provided function once per each key/value pair in the Map, in insertion order.
     */
    forEach<K extends keyof T>(callbackfn: (value: T[K], key: K, map: TypedMap<T, P, K>) => void, thisArg?: any): void;
    /**
     * Returns a specified element from the Map object. If the value that is associated to the provided key is an object, then you will get a reference to that object and any change made to that object will effectively modify it inside the Map.
     * @returns Returns the element associated with the specified key. If no element is associated with the specified key, undefined is returned.
     */
    get<K extends keyof T>(key: K): P extends true ? T[K] | undefined : T[K];
    /**
     * Adds a new element with a specified key and value to the Map. If an element with the same key already exists, the element will be updated.
     */
    set<K extends keyof T>(key: K, value: T[K]): this;
}
/**
 * Creates a new instance of a type-safe Map with the given type.
 *
 * @template T The object type defining the key-value relationships.
 * @template P Defines whether the `Map.get()` method should return a possibily undefined value.
 *
 * @param iterable Initial `Map` constructor iterable object.
 *
 * @returns A new instance of a type-safe Map.
 */
declare const getTypedMap: <T, P extends boolean = true, K extends keyof T = keyof T>(iterable?: Iterable<readonly [K, T[K]]> | null) => TypedMap<T, P, K>;

/** The Cookie Priority. */
declare enum Priority {
    /** Low priority. */
    Low = "Low",
    /** Medium priority (default). */
    Medium = "Medium",
    /** High priority. */
    High = "High"
}
/**
 * Controls whether or not a cookie is sent with cross-site requests, providing some protection against cross-site request forgery attacks ([CSRF](https://developer.mozilla.org/en-US/docs/Glossary/CSRF)).
 *
 * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value)
 */
declare enum SameSite {
    /**
     * The browser sends the cookie only for same-site requests.
     *
     * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#strict)
     */
    Strict = "Strict",
    /**
     * The cookie is not sent on cross-site requests, such as on requests to load images or frames, but is sent when a user is navigating to the origin site from an external site.
     *
     * @warning Not all browsers set SameSite=Lax by default. See [Browser compatibility](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#browser_compatibility) for details.
     *
     * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#lax)
     */
    Lax = "Lax",
    /**
     * The browser sends the cookie with both cross-site and same-site requests.
     *
     * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#none)
     */
    None = "None"
}
/**
 * Interface representing Cookie properties before it get parsed.
 *
 */
interface RawCookie<K = string, V = unknown> {
    /**
     * The Cookie name.
     *
     * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie-namecookie-value)
     */
    name: K;
    /**
     * The Cookie value.
     *
     * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie-namecookie-value)
     */
    value?: V;
    /**
     * Defines the host to which the cookie will be sent.
     *
     * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#domaindomain-value)
     */
    domain?: string;
    /**
     * Indicates the maximum lifetime of the cookie.
     *
     * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#expiresdate)
     */
    expires?: string | number | Date;
    /**
     * Forbids JavaScript from accessing the cookie, for example, through the [`Document.cookie`](https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie) property.
     *
     * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#httponly)
     */
    httpOnly?: boolean;
    /**
     * Indicates the number of seconds until the cookie expires.
     *
     * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#max-agenumber)
     */
    maxAge?: number;
    /**
     * Indicates that the cookie should be stored using partitioned storage.
     *
     * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#partitioned)
     */
    partitioned?: boolean;
    /**
     * Indicates the path that must exist in the requested URL for the browser to send the `Cookie` header.
     *
     * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#pathpath-value)
     */
    path?: string;
    /**
     * Controls whether or not a cookie is sent with cross-site requests, providing some protection against cross-site request forgery attacks ([CSRF](https://developer.mozilla.org/en-US/docs/Glossary/CSRF)).
     *
     * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value)
     */
    sameSite?: SameSite;
    /**
     * Indicates that the cookie is sent to the server only when a request is made with the https: scheme.
     *
     * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#secure)
     */
    secure?: boolean;
    /**
     * Defines the Cookie priority.
     *
     */
    priority?: Priority;
}
/**
 * Interface representing Cookie properties after it get parsed.
 *
 */
interface ParsedCookie<K = string, V = unknown> extends Omit<RawCookie<K, V>, 'expires'> {
    /**
     * Indicates the maximum lifetime of the cookie.
     *
     * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#expiresdate)
     */
    expires?: Date;
}
/**
 * Map representation of a parsed Cookie.
 *
 */
type ParsedCookieMap<K = string, V = unknown> = TypedMap<ParsedCookie<K, V>, false>;
/**
 * Easly handle cookies.
 *
 */
declare class Cookie {
    /**
     * Get a cookie by cookie name from `Document.cookie`.
     *
     * @param	name The name of the cookie.
     * @returns	The found parsed cookie or `undefined` if no cookie has been found in `Document.cookie`.
     */
    static get<T, K extends string | number | symbol = string>(name: K): (K extends infer T_1 extends keyof Record<K, T> ? { [P in T_1]: ParsedCookieMap<P, Record<K, T>[P]>; } : never)[K] | undefined;
    /**
     * Get all cookies from `Document.cookie`.
     *
     * @returns	The parsed cookie found in `Document.cookie`.
     */
    static getAll<T extends Record<string, unknown>>(): TypedMap<keyof T extends infer T_1 extends keyof T ? { [P in T_1]: ParsedCookieMap<P, T[P]>; } : never, true, keyof T>;
    /**
     * Set a cookie to `Document.cookie`.
     *
     * @param	options The cookie options or a parsed Cookie Map.
     * @returns	The set Cookie Map if successful, `false` otherwise.
     */
    static set<K = string, V = unknown>(options: RawCookie<K, V> | ParsedCookieMap<K, V>): false | ParsedCookieMap<K, V>;
    /**
     * Delete a cookie by cookie name from `Document.cookie`.
     *
     * @param name The name of the cookie.
     * @returns	`true` if successful, `false` otherwise.
     */
    static delete(name: string): boolean;
    /**
     * Parse the given cookie options to a Cookie Map.
     *
     * @param	options The cookie options or a parsed Cookie Map.
     * @returns	The parsed Cookie Map.
     */
    static parse<K = string, V = unknown>(options: RawCookie<K, V> | ParsedCookieMap<K, V>): ParsedCookieMap<K, V>;
    /**
     * Stringify a Cookie ready to be stored.
     *
     * @param	options The cookie options or a parsed Cookie Map.
     * @returns	The stringified Cookie ready to be stored.
     */
    static toString<K = string, V = unknown>(options: RawCookie<K, V> | ParsedCookieMap<K, V>): string;
    /**
     * Parse a cookie string to a Cookie Map.
     *
     * @param	cookie The cookie string.
     * @returns	The parsed Cookie Map or `null` if parsing fails.
     */
    static fromString<K = string, V = unknown>(cookie: string): ParsedCookieMap<K, V> | null;
    /**
     * Parse a cookie list string to a Map of cookies.
     *
     * @param	list The cookie list string.
     * @returns	The Map of parsed cookies indexed by the Cookie name.
     */
    static fromListString<T extends Record<string, unknown>, K extends keyof T = keyof T>(list: string): TypedMap<{ [P in K]: ParsedCookieMap<P, T[P]>; }, true, K>;
    /**
     * Parse a value based on the key.
     *
     * @param	value	The value to parse.
     * @param	key		The key associated with the value.
     *
     * @returns	The parsed value.
     */
    private static parseValue;
}

/**
 * A browser-compatible implementation of [`localStorage`](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage). Data is stored
 * unencrypted in the file specified by the `--localstorage-file` CLI flag.
 * The maximum amount of data that can be stored is 10 MB.
 * Any modification of this data outside of the Web Storage API is not supported.
 * Enable this API with the `--experimental-webstorage` CLI flag.
 * `localStorage` data is not stored per user or per request when used in the context
 * of a server, it is shared across all users and requests.
 */
declare class LocalStorage {
    /**
     * Get the current value associated with the given `key`, or `undefined` if the given `key` does not exist.
     *
     * @param	key The item name.
     * @returns	The current value associated with the given `key`, or `undefined` if the given `key` does not exist.
     *
     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Storage/getItem)
     */
    static get<T>(key: string): T | undefined;
    /**
     * Sets the value of the pair identified by key to value, creating a new key/value pair if none existed for key previously.
     *
     * Throws a "QuotaExceededError" DOMException exception if the new value couldn't be set. (Setting could fail if, e.g., the user has disabled storage for the site, or if the quota has been exceeded.)
     *
     * Dispatches a storage event on Window objects holding an equivalent Storage object.
     *
     * @param	key		The item name.
     * @param	value	The item value.
     *
     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Storage/setItem)
     */
    static set<T>(key: string, value: T): void;
    /**
     * Removes the key/value pair with the given key, if a key/value pair with the given key exists.
     *
     * Dispatches a storage event on Window objects holding an equivalent Storage object.
     *
     * @param key The item name.
     *
     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Storage/removeItem)
     */
    static delete(key: string): void;
    /**
     * Removes all key/value pairs, if there are any.
     *
     * Dispatches a storage event on Window objects holding an equivalent Storage object.
     *
     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Storage/clear)
     */
    static clear(): void;
    /**
     * Get storage item name by item numeric index.
     *
     * @param	index The item index in the storage.
     * @returns	The name of the nth key, or `null` if n is greater than or equal to the number of key/value pairs.
     *
     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Storage/key)
     */
    static key(index: number): string | null;
    /**
     * Get the number of key/value pairs.
     *
     * @returns	The number of key/value pairs.
     *
     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Storage/length)
     */
    static getLength(): number;
}

/**
 * A browser-compatible implementation of [`sessionStorage`](https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage). Data is stored in
 * memory, with a storage quota of 10 MB. `sessionStorage` data persists only within
 * the currently running process, and is not shared between workers.
 */
declare class SessionStorage {
    /**
     * Get the current value associated with the given `key`, or `undefined` if the given `key` does not exist.
     *
     * @param	key The item name.
     * @returns	The current value associated with the given `key`, or `undefined` if the given `key` does not exist.
     *
     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Storage/getItem)
     */
    static get<T>(key: string): T | undefined;
    /**
     * Sets the value of the pair identified by key to value, creating a new key/value pair if none existed for key previously.
     *
     * Throws a "QuotaExceededError" DOMException exception if the new value couldn't be set. (Setting could fail if, e.g., the user has disabled storage for the site, or if the quota has been exceeded.)
     *
     * Dispatches a storage event on Window objects holding an equivalent Storage object.
     *
     * @param	key		The item name.
     * @param	value	The item value.
     *
     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Storage/setItem)
     */
    static set<T>(key: string, value: T): void;
    /**
     * Removes the key/value pair with the given key, if a key/value pair with the given key exists.
     *
     * Dispatches a storage event on Window objects holding an equivalent Storage object.
     *
     * @param key The item name.
     *
     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Storage/removeItem)
     */
    static delete(key: string): void;
    /**
     * Removes all key/value pairs, if there are any.
     *
     * Dispatches a storage event on Window objects holding an equivalent Storage object.
     *
     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Storage/clear)
     */
    static clear(): void;
    /**
     * Get storage item name by item numeric index.
     *
     * @param	index The item index in the storage.
     * @returns	The name of the nth key, or `null` if n is greater than or equal to the number of key/value pairs.
     *
     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Storage/key)
     */
    static key(index: number): string | null;
    /**
     * Get the number of key/value pairs.
     *
     * @returns	The number of key/value pairs.
     *
     * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Storage/length)
     */
    static getLength(): number;
}

/**
 * Removes duplicate values from an array.
 *
 * @param	array The input array.
 * @returns	The filtered array.
 */
declare const arrayUnique: <T>(array: T[]) => T[];
/**
 * Removes duplicate entries from an array referencing an object key.
 *
 * @param	array		An array of objects.
 * @param	property	The Object property to refer to.
 * @returns The filtered array.
 */
declare const arrayObjectUnique: <T>(array: T[], property: keyof T) => T[];
/**
 * Convert a stringified Array to Array object.
 *
 * @param	string The string to convert. ( e.g. `value1, value2` or `value1,value2` )
 * @returns	The converted string Array.
 */
declare const listToArray: (string: string) => string[];
type ChunkIntoOptions = ({
    /**
     * Will split the given Array in a way to ensure each chunk length is, whenever possible, equal to the given value.
     *
     */
    size: number;
    count?: never;
} | {
    /**
     * Will split the given Array in a way to ensure n chunks as the given value.
     *
     */
    count: number;
    size?: never;
});
/**
 * Split Array into chunks.
 *
 * @template T The input `array` type.
 *
 * @param	array	The original Array.
 * @param	options An object defining split criteria. See {@link ChunkIntoOptions} for more info.
 *
 * @returns	An Array of chunks.
 */
declare function chunkInto<T extends unknown[]>(array: T, options: ChunkIntoOptions): T[];
/**
 * Shuffle the elements of an array in place using the [Fisher-Yates algorithm](https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle).
 *
 * @template	T		The type of elements in the array.
 * @param		array	The array to shuffle.
 *
 * @returns The shuffled array.
 */
declare const shuffle: <T>(array: Array<T>) => T[];
/**
 * Copy and shuffle the elements of an array in place using the [Fisher-Yates algorithm](https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle).
 *
 * @template	T		The type of elements in the array.
 * @param		array	The array to shuffle.
 *
 * @returns The shuffled array.
 */
declare const shuffleCopy: <T>(array: Array<T>) => T[];
/**
 * Normalize negative indexes to a positive value.
 *
 * @param	index	The index.
 * @param	length	The array length.
 *
 * @returns	The normalized index.
 */
declare const normalizeIndex: (index: number, length: number) => number;
/**
 * Get the previous index.
 *
 * @param	length	The array length.
 * @param	index	The index.
 *
 * @returns	The previous index.
 */
declare const getPreviousIndex: (length: number, index?: number) => number;
/**
 * Get the next index.
 *
 * @param	length	The array length.
 * @param	index	The index.
 *
 * @returns	The next index.
 */
declare const getNextIndex: (length: number, index?: number) => number;
/**
 * Inserts one or more items into an array at the specified index position.
 *
 * @template T The type of elements in the array.
 *
 * @param array	The original array to insert items into.
 * @param item	A single item or an array of items to insert.
 * @param index	The index after which to insert the item(s). Default: `-1`.
 *
 * @returns A new array with the item(s) inserted at the specified position.
 *
 * @example
 * ```ts
 * insertAfter( [ 1, 2, 4 ], 3, 1 )     // [ 1, 2, 3, 4 ]
 * insertAfter( [ 1, 2 ], [ 3, 4 ], 1 ) // [ 1, 2, 3, 4 ]
 * ```
 */
declare const insertAfter: <T>(array: T[], item: T | T[], index?: number) => T[];
/**
 * Options for locating the index of the first object whose field matches a value.
 *
 * @template T The object type stored in the array.
 * @template U The key of `T` used for the comparison.
 */
interface FindInxeByOptions<T extends object, U extends keyof T = keyof T> {
    /**
     * The collection to search.
     *
     */
    items: T[];
    /**
     * The object field to compare against `value`.
     *
     */
    field: U;
    /**
     * The value that must match the selected field.
     *
     */
    value: T[U];
}
/**
 * Finds the index of the first object whose selected field strictly equals the provided value.
 *
 * @param options The search options.
 * @returns The index of the matching item, or `-1` when no match is found.
 */
declare const findIndexBy: <T extends object, U extends keyof T = keyof T>(options: FindInxeByOptions<T, U>) => number;

/**
 * Create and download a blob object.
 *
 * @param	filename	The download file name.
 * @param	data		The download file data.
 * @param	init		( Optional ) The ResponseInit object.
 */
declare const downloadBlob: (filename: string, data: BodyInit, init?: ResponseInit) => Promise<void>;

/**
 * Use this media query to check if document currently matches the portrait device orientation.
 *
 */
declare const portraitMediaQuery = "(orientation:portrait)";
/**
 * Check if device is in portrait orientation.
 *
 * @returns `true` if the device is in portrait orientation when this function is executed, `false` otherwise.
 */
declare const isPortrait: () => boolean;

declare const WebUtils: {
    readonly DOCUMENT_PIP_NOT_SUPPORTED: "ERR:DOCUMENTPIPNOTSUPPORTED";
};
declare const ErrorCode: {
    DOCUMENT_PIP_NOT_SUPPORTED: "ERR:DOCUMENTPIPNOTSUPPORTED";
    UNKNOWN: "ERR:UNKNOWN";
    ABORT: "ERR:ABORT";
    EMPTY_VALUE: "ERR:EMPTYVALUE";
    WRONG_VALUE: "ERR:WRONGVALUE";
    EXPIRED: "ERR:EXPIRED";
    TOO_EARLY: "ERR:TOOEARLY";
    TOO_MANY: "ERR:TOOMANY";
    QUOTA_REACHED: "ERR:QUOTAREACHED";
    NOT_FOUND: "ERR:NOTFOUND";
    OFFLINE: "ERR:INTERNETDISCONNECTED";
};
type ErrorCode = (typeof ErrorCode)[keyof typeof ErrorCode];

/**
 * Check if a function is a `GeneratorFunction` or `AsyncGeneratorFunction`.
 *
 * @param	reference The function to check.
 * @returns	`true` if the given `reference` is a `GeneratorFunction` or `AsyncGeneratorFunction`.
 */
declare const isGeneratorFunction: (reference: unknown) => reference is (GeneratorFunction | AsyncGeneratorFunction);
/**
 * Check if a function is a `GeneratorFunction`.
 *
 * @param	reference The function to check.
 * @returns	`true` if the given `reference` is a `GeneratorFunction`.
 */
declare const isDefaultGeneratorFunction: (reference: unknown) => reference is GeneratorFunction;
/**
 * Check if a function is an `AsyncGeneratorFunction`.
 *
 * @param	reference The function to check.
 * @returns	`true` if the given `reference` is an `AsyncGeneratorFunction`.
 */
declare const isAsyncGeneratorFunction: (reference: unknown) => reference is AsyncGeneratorFunction;
/**
 * Check if reference is a `Generator` or `AsyncGenerator`.
 *
 * @param	reference The reference to check.
 * @returns	`true` if the given `generator` is a `Generator` or `AsyncGenerator`.
 */
declare const isGeneratorObject: <T>(reference: unknown) => reference is (Generator<T> | AsyncGenerator<T>);
/**
 * Check if reference is a `Generator`.
 *
 * @param	reference The reference to check.
 * @returns	`true` if the given `generator` is a `Generator`.
 */
declare const isDefaultGeneratorObject: <T>(reference: unknown) => reference is Generator<T>;
/**
 * Check if reference is an `AsyncGenerator`.
 *
 * @param	reference The reference to check.
 * @returns	`true` if the given `generator` is an `AsyncGenerator`.
 */
declare const isAsyncGeneratorObject: <T>(reference: unknown) => reference is AsyncGenerator<T>;

/**
 * Filter object removing falsey values.
 *
 * @param object	The object|array to iterate through.
 * @returns			The updated object.
 */
declare const filterObject: <T>(object: T) => T;
/**
 * Convert Map to Object.
 *
 * @param	map The Map to convert.
 * @returns The Object representation of the given Map.
 */
declare const mapToObject: <K extends string, V, R extends Record<K, V> = Record<K, V>>(map: Map<K, V>) => R;
/**
 * Clone object.
 *
 * @param	a The object or class instance to clone.
 * @returns	The cloned object.
 */
declare const cloneObject: <T extends object>(a: T) => T;
/**
 * Get an Object key by value.
 *
 * @param	obj		The object
 * @param	value	The key value to look for.
 * @returns	The given object key name.
 */
declare const getObjectKey: <T extends object>(obj: T, value: ValueOf<T>) => string | undefined;

/**
 * zZzZzZzZzZzZzZzZz.
 *
 * @param	time The sleep time in milliseconds.
 * @returns	A new Promise which get resolved after the specified time.
 */
declare const sleep: (time: number) => Promise<void>;
/**
 * The deffered task function definition.
 *
 * @template T The task function arguments.
 */
type DeferredTask<T extends unknown[]> = (...args: T) => unknown | Promise<unknown>;
/**
 * Defer task so main-thread is not blocked in order to quickly paint and respond to user interaction.
 *
 * It esponentially decrease INP process timings.
 *
 * @template T The task function definition.
 * @template U The task function arguments.
 *
 * @param task The task callable function.
 * @param args Arguments required by the given `task` function.
 *
 * @returns A new Promise which returns the `task` result once fulfilled.
 *
 * @example
 *
 * ```ts
 * const longTask = ( event: Event ) => {
 * 	...
 * }
 *
 * button.addEventListener( 'click', event => {
 * 	deferTask( longTask, event )
 * } )
 * ```
 */
declare const deferTask: <T extends DeferredTask<U>, U extends unknown[]>(task: T, ...args: U) => Promise<Awaited<ReturnType<T>>>;
/**
 * Defer task handler so main-thread is not blocked in order to quickly paint and respond to user interaction.
 *
 * It esponentially decrease INP process timings.
 *
 * @template T The task function definition.
 * @template U The task function arguments.
 *
 * @param task The task callable function.
 * @param args Arguments required by the given `task` function.
 *
 * @returns A new handler which returns a new Promise that returns the `task` result once fulfilled.
 *
 * @example
 *
 * ```ts
 * const longTask = ( event: Event ) => {
 * 	...
 * }
 *
 * button.addEventListener( 'click', deferCallback( longTask ) )
 * ```
 */
declare const deferCallback: <T extends DeferredTask<U>, U extends unknown[]>(task: T) => (...args: U) => Promise<Awaited<ReturnType<T>>>;

/**
 * Mitigates `ReDoS`, `Regex injection` and Unintended behavior from unescaped metacharacters
 * when compositing a Regex with uncontrolled data.
 *
 * @param input The string to escape for use in a regular expression character set.
 * @returns The escaped string, safe for use inside a regular expression character set.
 */
declare const escapeRegExpCharSet: (input: string) => string;

/**
 * Check whether Node.js runtime environment is in development mode.
 *
 * @returns True if current runtime environment is in development environment, false otherwise.
 */
declare const isDev: () => boolean;
/**
 * Check whether Node.js runtime environment is in test mode.
 *
 * @returns True if current runtime environment is in test environment, false otherwise.
 */
declare const isTest: () => boolean;
/**
 * Check whether result is a Promise.
 *
 * @param	p The result to check.
 * @returns	True if result is a Promise, false otherwise.
 */
declare const isPromise: <T>(p: unknown) => p is Promise<T>;
/**
 * Check whether variable is an AsyncFunction.
 *
 * @param	f The variable to check.
 * @returns	True if variable is an AsyncFunction, false otherwise.
 */
declare const isAsyncFunction: <T extends CallableFunction>(f: T) => f is T;
/**
 * Check whether a variable is a string or not.
 *
 * @param	s The variable to check.
 * @returns	boolean
 */
declare const isString: (s: unknown) => s is string;
/**
 * Check if object is array.
 *
 * @param	a The object / array to check.
 *
 * @returns	boolean
 */
declare const isArray: (a: unknown) => a is Array<unknown>;
/**
 * Check whether an Array is an empty Array.
 *
 * @param	a The Array to check.
 * @returns	True if the Array has no entries, false otherwise.
 */
declare const isEmptyArray: <T>(a: Array<T>) => boolean;
/**
 * Check if object is an object.
 *
 * @param	a The object / array to check.
 *
 * @returns	boolean
 */
declare const isObject: (a: unknown) => a is object;
/**
 * Check whether an object is an empty object.
 *
 * @param	obj The object to check.
 * @returns	True if the object has no entries, false otherwise.
 */
declare const isEmptyObject: (obj: object) => boolean;
/**
 * Check if string is a valid JSON object.
 *
 * @param	string
 *
 * @returns	boolean
 */
declare const isJson: (string: unknown) => string is string;
/**
 * Check whether a variable is a NodeList or not.
 *
 * @param	n The variable to check.
 * @returns	boolean
 */
declare const isNodeList: (n: unknown) => n is NodeList;
/**
 * Check whether a variable is an HTML DOM Element or not.
 *
 * @param 	e The variable to check.
 * @returns	boolean
 */
declare const isNodeElement: (e: unknown) => e is Element;
/**
 * Check if event is a TouchEvent.
 *
 * @param	event The native event interface.
 *
 * @returns	True if event is TouchEvent, false otherwise.
 */
declare const isTouchEvent: (event: Event) => event is TouchEvent;
/**
 * Check if device is a Touch device.
 *
 * @returns	True if device is a Touch device, false otherwise.
 */
declare const isTouchDevice: () => boolean;

/**
 * Check if string is not an empty string.
 *
 * @param	string The string to check.
 *
 * @returns	`true` if string is not empty, `false` otherwise.
 */
declare const isNotEmpty: (string: string) => boolean;
/**
 * Check if string is an empty string.
 *
 * @param	string The string to check.
 *
 * @returns	`true` if string is empty, `false` otherwise.
 */
declare const isEmpty: (string: string) => boolean;
/**
 * Check whether email is valid.
 *
 * @param	email The email to check.
 *
 * @returns `true` if the email is valid, `false` otherwise.
 */
declare const isValidEmail: (email: string) => boolean;
/**
 * Check whether phone number is valid.
 *
 * @param	phone The phone number to check.
 *
 * @supported
 *
 * - (123) 456-7890
 * - +(123) 456-7890
 * - +(123)-456-7890
 * - +(123) - 456-7890
 * - +(123) - 456-78-90
 * - 123-456-7890
 * - 123.456.7890
 * - 1234567890
 * - +393204567890
 * - +39 320 456 7890
 * - 00393204567890
 * - 075-63546725
 *
 * @returns `true` if the phone number is valid, `false` otherwise.
 */
declare const isValidPhoneNumber: (phone: string) => boolean;
/**
 * Check whether the given string is a valid VAT number.
 * @param	s The string to test.
 * @returns	`true` if the given string is a valid VAT number, `false` otherwise.
 */
declare const isValidVat: (s: string) => boolean;
/**
 * Check if value is less then another value.
 *
 * @param	a		The number being compared.
 * @param	value	The value to compare.
 *
 * @returns	`true` if given `value` is less than `a`, `false` otherwise.
 */
declare const isLessThan: (a: number, value?: number | string) => boolean;
/**
 * Check if value is greater then another value.
 *
 * @param	a		The number being compared.
 * @param	value	The value to compare.
 *
 * @returns	`true` if given `value` is greater than `a`, `false` otherwise.
 */
declare const isGreaterThan: (a: number, value?: number | string) => boolean;
/**
 * Check if value is in a range of two values.
 *
 * @param	a		The minimum value.
 * @param	b		The maximum value.
 * @param	value	The value to compare.
 *
 * @returns	`true` if given `value` is equal or greather than `a` and equal or less than `b`, `false` otherwise.
 */
declare const isInRange: (a: number, b: number, value?: number | string) => boolean;
/**
 * Check whether value `a` is equal to `b`.
 *
 * @param	a The first value to check.
 * @param	b The second value to check.
 *
 * @returns `true` if `a` and `b` are equal, `false` otherwise.
 */
declare const isStrictEqual: (a: unknown, b: unknown) => boolean;
/**
 * Detect if input contains SQL statements.
 *
 * @param	value The value to check.
 * @returns	`true` if value contains SQL statements, `false` otherwise.
 */
declare const isSQLStatement: (value: any) => boolean;

export { type ChunkIntoOptions, type ClassicSharerPopUpOptions, type CloneStyleSheetsReturn, type Connection, Cookie, type DeferredTask, type Dimensions, type EmailData, ErrorCode, type Falsey, type FindInxeByOptions, type InputDimensions, LocalStorage, type NetworkInformation, type OpenBrowserPopUpOptions, type OpenDocumentPictureInPicture, type OpenDocumentPictureInPictureOptions, type Parameterized, type ParameterizedValue, type ParsedCookie, type ParsedCookieMap, type PinterestSharerPopUpOptions, Priority, type RawCookie, type Recipient, type Recipients, SameSite, SessionStorage, type ShareData, type SharerPopUpOptions, type Style, type Styles, type Truthy, type TypedMap, type UrlStylesheet, WebUtils, type WhatsAppSharerPopUpOptions, type WindowFeatures, addLeadingCharacter, addTrailingCharacter, arrayObjectUnique, arrayUnique, blockScroll, canWebApiShare, canWebApiShareData, chunkInto, cloneObject, cloneStyleSheetList, cloneStyleSheets, deferCallback, deferTask, downloadBlob, emailDataToString, escapeRegExpCharSet, filterObject, findIndexBy, getConnection, getDimensions, getMediaMatches, getNextIndex, getObjectKey, getPreviousIndex, getTypedMap, insertAfter, isArray, isAsyncFunction, isAsyncGeneratorFunction, isAsyncGeneratorObject, isDefaultGeneratorFunction, isDefaultGeneratorObject, isDev, isDocumentPictureInPictureSupported, isEmpty, isEmptyArray, isEmptyObject, isGeneratorFunction, isGeneratorObject, isGreaterThan, isInRange, isJson, isLessThan, isNodeElement, isNodeList, isNotEmpty, isObject, isPortrait, isPromise, isSQLStatement, isStrictEqual, isString, isTest, isTouchDevice, isTouchEvent, isValidEmail, isValidPhoneNumber, isValidVat, lcFirst, listToArray, mapToObject, normalizeIndex, openBrowserPopUp, openDocumentPictureInPicture, openSharerPopUp, parameterized, parseValue, portraitMediaQuery, recipientsToString, removeLeadingCharacter, removeTrailingCharacter, requiresDocumentPictureInPictureAPI, restoreScroll, share, shareOnFacebook, shareOnLine, shareOnLinkedIn, shareOnPinterest, shareOnReddit, shareOnTelegram, shareOnTumblr, shareOnVK, shareOnWeibo, shareOnWhatsApp, shareOnWorkplace, shareOnX, shareViaEmail, shuffle, shuffleCopy, sleep, stringifyValue, toCamelCase, toKebabCase, ucFirst };
