import { EventEmitter } from '../../stencil-public-runtime';
import { GlobalSlimmers } from '../../vega-slimmer/vega-slimmer-core';
import { VegaInputPhoneNumberRenderer } from './slimmers/renderers/vega-input-phone-number-renderer';
import { CountrySelectRenderer } from './slimmers/renderers/country-select-renderer';
import { PhoneNumberInputRenderer } from './slimmers/renderers/phone-number-input-renderer';
import { VegaInputPhoneNumberValueController } from './slimmers/controllers/vega-input-phone-number-value-controller';
import { FormFieldValidationRule } from '../../helpers/validator/rules/form-field-validation-rule';
import { VegaComponentUsageRuntimeMetricsSlimmer } from '../../helpers/slimmers/component-usage-runtime-metrics';
import { FormFieldControllerSlimmer } from '../../helpers/slimmers/form-field-controller-slimmer';
import { CountrySelectController } from './slimmers/controllers/country-select-controller';
import { EventEmitSlimmerBase } from '../../helpers/event-manager/slimmers/event-emit-slimmer';
import { ChildNodesEventPreventSlimmer } from '../../helpers/event-manager/slimmers/child-nodes-event-prevent-slimmer';
import { VegaCountryCode } from '../../types/flag.type';
import { VegaCountryType } from './types';
/**
 * @vegaVersion 2.18.0
 */
export declare class VegaInputPhoneNumber {
  protected readonly globalSlimmers: GlobalSlimmers;
  protected vegaComponentUsageRuntimeMetricsSlimmer: VegaComponentUsageRuntimeMetricsSlimmer<HTMLVegaInputRangeElement>;
  protected valueController: VegaInputPhoneNumberValueController;
  protected inputPhoneNumberRenderer: VegaInputPhoneNumberRenderer;
  protected countrySelectRenderer: CountrySelectRenderer;
  protected phoneNumberInputRenderer: PhoneNumberInputRenderer;
  protected countrySelectController: CountrySelectController;
  protected changeEventEmitter: EventEmitSlimmerBase;
  protected countryChangeEventEmitter: EventEmitSlimmerBase;
  protected inputPhoneNumberEventPrevent: ChildNodesEventPreventSlimmer;
  protected readonly formFieldController: FormFieldControllerSlimmer<string>;
  host: HTMLVegaInputPhoneNumberElement;
  phoneNumberInputValue: string;
  /**
   * Specifies the visible label text rendered above the phone number input.
   * The label identifies the purpose of the field and serves as the
   * accessible name for screen readers.
   *
   * @default ''
   * @vegaVersion 2.18.0
   */
  label: string;
  /**
   * Controls the visual size of the phone number input field.
   *
   * - `'default'` — Standard height, suitable for most form layouts.
   * - `'small'` — Compact height, useful for dense UIs.
   *
   * @default 'default'
   * @vegaVersion 2.18.0
   */
  size: 'default' | 'small';
  /**
   * Determines whether the phone number input field must have a value before
   * the form can be submitted. When `true`, the built-in
   * `InputPhoneNumberRequiredRule` is applied during validation and a
   * required indicator is shown on the label.
   *
   * @default false
   * @vegaVersion 2.18.0
   */
  required: boolean;
  /**
   * Specifies whether the phone number input field is disabled. When `true`,
   * both the country selector and the phone number text field become
   * non-interactive — the user cannot type, select a country, or focus
   * any part of the component.
   *
   * @default false
   * @vegaVersion 2.18.0
   */
  disabled: boolean;
  /**
   * Specifies the currently selected country using a two-letter uppercase
   * ISO 3166-1 alpha-2 code (e.g., `'US'`, `'GB'`, `'CN'`). The country
   * code determines the flag icon and calling code prefix displayed in the
   * country selector. Changing this value updates the phone number prefix
   * accordingly.
   *
   * @default 'US'
   * @vegaVersion 2.18.0
   */
  countryCode: VegaCountryCode;
  watchCountryCode(newCountryCode: VegaCountryCode, oldCountryCode: VegaCountryCode): void;
  /**
   * An array of country codes available for selection in the country
   * dropdown. Each entry must be a two-letter uppercase ISO 3166-1 alpha-2
   * code.
   *
   * By default all 245 supported codes are loaded, but providing a smaller
   * subset improves initial render performance.
   *
   * @default VegaCountryCode[] (all 245 codes)
   * @vegaVersion 2.18.0
   */
  allowedCountryCodes: VegaCountryCode[];
  /**
   * Controls whether the `value` property can be an empty string.
   *
   * - `true` — The `value` property is cleared to `''` when the user
   *   deletes all digits from the input field.
   * - `false` — The `value` property always retains at least the country
   *   calling code prefix (e.g., `'+1'` for US) even when no phone number
   *   digits have been entered.
   *
   * @default false
   * @vegaVersion 2.35.0
   */
  emptyValueEnabled: boolean;
  watchEmptyValueEnabled(): void;
  /**
   * The current value of the phone number input in
   * [E.164](https://en.wikipedia.org/wiki/E.164) format (e.g., `'+14155552671'`).
   *
   * This property is mutable and reflected to the host element attribute.
   * It updates as the user types and can be set externally to pre-populate
   * or reset the field. When `emptyValueEnabled` is `false` and no digits
   * have been entered, the value defaults to the country calling code
   * prefix (e.g., `'+1'` for US).
   *
   * @default '+1'
   * @vegaVersion 2.18.0
   */
  value: string;
  watchValue(newValue: string, oldValue: string): void;
  /**
   * An array of custom validation rules applied to the phone number input in
   * addition to the built-in rules (`InputPhoneNumberRequiredRule`,
   * `ValidPhoneNumberRule`). Each rule must implement the
   * `FormFieldValidationRule` interface.
   *
   * Rules are evaluated in order when `autoValidation` is enabled or when
   * validation is triggered programmatically.
   *
   * @default []
   * @vegaVersion 2.18.0
   */
  validationRules: FormFieldValidationRule<unknown>[];
  watchValidationRules(): void;
  /**
   * Reflects the current validation status of the phone number input.
   *
   * - `true` — the field value passes all validation rules.
   * - `false` — one or more validation rules have failed.
   * - `null` — the field has not been validated yet (initial state).
   *
   * This property is mutable: it is updated automatically when
   * `autoValidation` is enabled, but can also be set manually to override
   * the validation state.
   *
   * @default null
   * @vegaVersion 2.18.0
   */
  isValid: boolean;
  /**
   * Determines whether the phone number input should be validated
   * automatically as the user interacts with it. When `true`, validation
   * rules (including `required`, `ValidPhoneNumberRule`, and custom
   * `validationRules`) are evaluated and the `isValid` property is updated
   * accordingly.
   *
   * Set to `false` to handle validation manually.
   *
   * @default true
   * @vegaVersion 2.18.0
   */
  autoValidation: boolean;
  /**
   * Specifies placeholder text displayed inside the phone number text field
   * when it is empty. The placeholder disappears once the user begins typing
   * and is typically used to indicate the expected format
   * (e.g., `'(555) 555-5555'`).
   *
   * @default undefined
   * @vegaVersion 2.18.0
   */
  placeholder: string;
  /**
   * Supplementary helper message displayed below the phone number input that
   * assists users in understanding the expected value or provides additional
   * context (e.g., `'We will send a verification code to this number'`).
   *
   * @default ''
   * @vegaVersion 2.18.0
   */
  hint: string;
  /**
   * Fires whenever the phone number value changes — including typing,
   * pasting, or programmatic updates. The event detail contains the full
   * phone number in E.164 format (e.g., `'+14155552671'`).
   *
   * @eventDetail string
   * @vegaVersion 2.18.0
   */
  vegaChange: EventEmitter<string>;
  /**
   * Native-equivalent mirror of `vegaChange`. Fires with the same payload
   * and at the same time, allowing consumers to listen using the standard
   * `change` event name.
   *
   * @eventDetail string
   * @eventSemantics namespace:native
   * @vegaVersion 2.18.0
   */
  change: EventEmitter<string>;
  /**
   * Fires whenever the selected country changes via the country dropdown.
   * The event detail contains a `VegaCountryType` object with the country
   * code, calling code, and display name of the newly selected country.
   *
   * @eventDetail VegaCountryType
   * @vegaVersion 2.18.0
   */
  vegaCountryChange: EventEmitter<VegaCountryType>;
  /**
   * Native-equivalent mirror of `vegaCountryChange`. Fires with the same
   * payload and at the same time, allowing consumers to listen using the
   * standard `countryChange` event name.
   *
   * @eventDetail VegaCountryType
   * @eventSemantics namespace:native
   * @vegaVersion 2.18.0
   */
  countryChange: EventEmitter<VegaCountryType>;
  render(): VegaInputPhoneNumber;
}
