import * as _angular_core from '@angular/core';
import { ElementRef, AfterViewInit, WritableSignal, Signal } from '@angular/core';
import { OriginConnectionPosition, OverlayConnectionPosition, ConnectedPosition } from '@angular/cdk/overlay';
import { AbstractControl } from '@angular/forms';

/** Copies the current theme from the root element.
 *
 * For use with single-component variables from the theme generator
 */
declare class NxThemeAttributeDirective {
    constructor(host: ElementRef<HTMLElement>);
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxThemeAttributeDirective, never>;
    static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NxThemeAttributeDirective, "[nxThemeAttribute]", never, {}, {}, never, never, true, never>;
}

/** Directive to disable autofill by password managers when input is readonly or disabled.
 *
 * [Source for attributes](https://www.stefanjudis.com/snippets/turn-off-password-managers/)
 */
declare class NxPasswordManagerDisableDirective implements AfterViewInit {
    private host;
    private disabled;
    private readonly;
    private inputObserver;
    private disablePwManager;
    protected onePassAttr: _angular_core.Signal<string | null>;
    protected lastpassAttr: _angular_core.Signal<string | null>;
    protected dashlaneAttr: _angular_core.Signal<string | null>;
    protected bitwardenAttr: _angular_core.Signal<string | null>;
    ngAfterViewInit(): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxPasswordManagerDisableDirective, never>;
    static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NxPasswordManagerDisableDirective, "input[nxPasswordManagerDisable]", never, {}, {}, never, never, true, never>;
}

type WriteOnlySignal<S extends WritableSignal<T>, T> = Pick<S, 'set' | 'update'>;
declare function writeOnlySignal<S extends WritableSignal<T>, T>(s: S): WriteOnlySignal<S, T>;
/** Coerce a value to a signal */
declare function coerceSignal<S>(value: S | Signal<S>): Signal<S>;
declare enum Compass8 {
    N = "North",
    NE = "Northeast",
    E = "East",
    SE = "Southeast",
    S = "South",
    SW = "Southwest",
    W = "West",
    NW = "Northwest"
}
type Compass8Shorthand = keyof typeof Compass8;
declare function cdkOriginPosition(direction: Compass8Shorthand): OriginConnectionPosition;
declare function cdkOverlayPosition(direction: Compass8Shorthand): OverlayConnectionPosition;
declare function connectedPosition(position: {
    originPoint: Compass8Shorthand;
    overlayPoint: Compass8Shorthand;
} & Omit<ConnectedPosition, `origin${'X' | 'Y'}` | `overlay${'X' | 'Y'}`>): ConnectedPosition;

/** Values for `aria-*` attributes.
 *
 * Unlike native boolean attributes like `disabled`, an explicit value is required
 */
type AriaBoolean = 'true' | 'false';
declare function ariaBoolean(state: boolean): AriaBoolean;
/** Compute aria boolean from signals */
declare function ariaComputed(...signals: Signal<boolean>[]): Signal<AriaBoolean>;
/** Check whether a mouse event is inside an element */
declare function clickedInside({ clientX: eventX, clientY: eventY }: Pick<MouseEvent, 'clientX' | 'clientY'>, element: HTMLElement): boolean;
/**
 * Scroll an item into view inside in a list container like a dropdown
 *
 * The list container element must be the ancestor the browser uses for calculating coordinates.
 *
 * https://javascript.info/size-and-scroll#offsetparent-offsetleft-top
 *
 * @param item The item element to scroll to
 * @param container The container element of the item
 */
declare function scrollItemIntoView(item: HTMLElement, container: HTMLElement): void;

/** Function to mark all child controls as dirty.
 *
 * Source: https://stackoverflow.com/a/67402215
 */
declare function markAllAsDirty(controls: Record<string, AbstractControl> | AbstractControl[]): void;

export { NxPasswordManagerDisableDirective, NxThemeAttributeDirective, ariaBoolean, ariaComputed, cdkOriginPosition, cdkOverlayPosition, clickedInside, coerceSignal, connectedPosition, markAllAsDirty, scrollItemIntoView, writeOnlySignal };
export type { AriaBoolean };
