/**
* The set of legal values for the {@link HTMLDialogElement.closedBy | closedBy}
* attribute / property.
*
* * `"any"` – Allow all closing interactions (default).
* * `"closerequest"` – Ignore backdrop clicks, allow Escape &
* `close()` calls.
* * `"none"` – Disallow backdrop clicks *and* Escape.
*/
export type ClosedBy = "any" | "closerequest" | "none";
/**
* Detects native support for the `closedBy` property. If this function returns
* `true`, **no** polyfill is needed because the user‑agent already exposes
* the expected behavior.
*/
export function isSupported(): boolean;
/** Returns `true` once {@link apply} has run successfully. */
export function isPolyfilled(): boolean;
/**
* Applies the polyfill exactly **once**. Re‑invocations are ignored. When the
* current engine already supports `closedBy`, the function becomes a no‑op as
* well.
*/
export function apply(): void;
/**
* Tears down the polyfill, removing all event listeners and observers.
* After calling this function, the polyfill will no longer be active.
*
* Note: This does NOT restore the original `showModal`, `show`, or `closedBy`
* implementations on the prototype. It only cleans up observers and listeners.
*/
export function teardown(): void;
declare global {
interface HTMLDialogElement {
closedBy: ClosedBy;
}
}