/** Reactive inputs are passed as getters so the core tracks live prop changes. */ export type MaskedInputConfig = { value: () => string; /** Called with (masked, raw, complete). */ onChange?: (masked: string, raw: string, complete: boolean) => void; mask?: () => string; placeholder?: () => string | undefined; disabled?: () => boolean; readonly?: () => boolean; id?: () => string | undefined; invalid?: () => boolean; required?: () => boolean; error?: () => string | undefined; hint?: () => string | undefined; ariaLabel?: () => string | undefined; }; export declare function createMaskedInput(config: MaskedInputConfig): { /** The current masked display text. */ readonly masked: string; /** The raw (unmasked) data characters. */ readonly raw: string; /** Whether every token position in the mask is filled. */ readonly complete: boolean; /** Spread onto the text input element. */ inputProps: () => { oninput: (e: Event) => void; 'aria-invalid': "true" | undefined; 'aria-required': "true" | undefined; 'aria-describedby': string | undefined; 'aria-label': string | undefined; id: string | undefined; value: string; type: "text"; placeholder: string; disabled: boolean; readonly: boolean; }; }; export type MaskedInputCore = ReturnType;