{"version":3,"file":"ngx-com-components-dropdown-testing.mjs","sources":["../../../projects/com/components/dropdown/testing/dropdown.harness.ts","../../../projects/com/components/dropdown/testing/index.ts","../../../projects/com/components/dropdown/testing/ngx-com-components-dropdown-testing.ts"],"sourcesContent":["import {\n  ComponentHarness,\n  HarnessPredicate,\n  TestKey,\n  parallel,\n} from '@angular/cdk/testing';\nimport type { BaseHarnessFilters } from '@angular/cdk/testing';\n\n/** Harness filters for ComDropdownHarness. */\nexport interface ComDropdownHarnessFilters extends BaseHarnessFilters {\n  /** Filter by the dropdown's placeholder text. */\n  placeholder?: string | RegExp;\n  /** Filter by whether the dropdown is disabled. */\n  disabled?: boolean;\n  /** Filter by whether the dropdown is open. */\n  open?: boolean;\n}\n\n/** Harness filters for ComDropdownOptionHarness. */\nexport interface ComDropdownOptionHarnessFilters extends BaseHarnessFilters {\n  /** Filter by the option's text. */\n  text?: string | RegExp;\n  /** Filter by whether the option is selected. */\n  selected?: boolean;\n  /** Filter by whether the option is disabled. */\n  disabled?: boolean;\n}\n\n/**\n * Harness for interacting with a dropdown option in tests.\n */\nexport class ComDropdownOptionHarness extends ComponentHarness {\n  static hostSelector = 'com-dropdown-option';\n\n  private readonly optionElement = this.locatorFor('[role=\"option\"]');\n\n  /**\n   * Gets a HarnessPredicate for matching dropdown options.\n   * @param options Filter options.\n   */\n  static with(options: ComDropdownOptionHarnessFilters = {}): HarnessPredicate<ComDropdownOptionHarness> {\n    return new HarnessPredicate(ComDropdownOptionHarness, options)\n      .addOption('text', options.text, async (harness, text) => {\n        const optionText = await harness.getText();\n        return HarnessPredicate.stringMatches(optionText, text);\n      })\n      .addOption('selected', options.selected, async (harness, selected) => {\n        return (await harness.isSelected()) === selected;\n      })\n      .addOption('disabled', options.disabled, async (harness, disabled) => {\n        return (await harness.isDisabled()) === disabled;\n      });\n  }\n\n  /** Gets the option's text content. */\n  async getText(): Promise<string> {\n    const el = await this.optionElement();\n    return el.text();\n  }\n\n  /** Whether the option is currently selected. */\n  async isSelected(): Promise<boolean> {\n    const el = await this.optionElement();\n    return (await el.getAttribute('aria-selected')) === 'true';\n  }\n\n  /** Whether the option is disabled. */\n  async isDisabled(): Promise<boolean> {\n    const el = await this.optionElement();\n    return (await el.getAttribute('aria-disabled')) === 'true';\n  }\n\n  /** Whether the option is active (keyboard focused). */\n  async isActive(): Promise<boolean> {\n    const el = await this.optionElement();\n    return (await el.getAttribute('data-active')) === 'true';\n  }\n\n  /** Clicks the option to select it. */\n  async click(): Promise<void> {\n    const el = await this.optionElement();\n    return el.click();\n  }\n\n  /** Hovers over the option. */\n  async hover(): Promise<void> {\n    const el = await this.optionElement();\n    return el.hover();\n  }\n}\n\n/**\n * Harness for interacting with a ComDropdown in tests.\n */\nexport class ComDropdownHarness extends ComponentHarness {\n  static hostSelector = 'com-dropdown';\n\n  private readonly trigger = this.locatorFor('button[role=\"combobox\"]');\n  private readonly panel = this.locatorForOptional('[role=\"listbox\"]');\n  private readonly searchInput = this.locatorForOptional('com-dropdown-search input');\n  private readonly clearButton = this.locatorForOptional('button[aria-label=\"Clear selection\"]');\n\n  /**\n   * Gets a HarnessPredicate for matching dropdowns.\n   * @param options Filter options.\n   */\n  static with(options: ComDropdownHarnessFilters = {}): HarnessPredicate<ComDropdownHarness> {\n    return new HarnessPredicate(ComDropdownHarness, options)\n      .addOption('placeholder', options.placeholder, async (harness, placeholder) => {\n        const text = await harness.getTriggerText();\n        return HarnessPredicate.stringMatches(text, placeholder);\n      })\n      .addOption('disabled', options.disabled, async (harness, disabled) => {\n        return (await harness.isDisabled()) === disabled;\n      })\n      .addOption('open', options.open, async (harness, open) => {\n        return (await harness.isOpen()) === open;\n      });\n  }\n\n  /** Gets the dropdown's trigger button text. */\n  async getTriggerText(): Promise<string> {\n    const triggerEl = await this.trigger();\n    return triggerEl.text();\n  }\n\n  /** Whether the dropdown is currently open. */\n  async isOpen(): Promise<boolean> {\n    const triggerEl = await this.trigger();\n    return (await triggerEl.getAttribute('aria-expanded')) === 'true';\n  }\n\n  /** Whether the dropdown is disabled. */\n  async isDisabled(): Promise<boolean> {\n    const triggerEl = await this.trigger();\n    const disabled = await triggerEl.getAttribute('disabled');\n    return disabled !== null;\n  }\n\n  /** Whether the dropdown has a value selected. */\n  async hasValue(): Promise<boolean> {\n    const clearBtn = await this.clearButton();\n    return clearBtn !== null;\n  }\n\n  /** Opens the dropdown if it's closed. */\n  async open(): Promise<void> {\n    if (!(await this.isOpen())) {\n      await this.click();\n    }\n  }\n\n  /** Closes the dropdown if it's open. */\n  async close(): Promise<void> {\n    if (await this.isOpen()) {\n      await this.sendKeys(TestKey.ESCAPE);\n    }\n  }\n\n  /** Clicks the dropdown trigger. */\n  async click(): Promise<void> {\n    const triggerEl = await this.trigger();\n    return triggerEl.click();\n  }\n\n  /** Clears the current selection. */\n  async clear(): Promise<void> {\n    const clearBtn = await this.clearButton();\n    if (clearBtn) {\n      return clearBtn.click();\n    }\n    throw new Error('Dropdown does not have a clearable selection');\n  }\n\n  /** Sends keyboard input to the dropdown. */\n  async sendKeys(...keys: (string | TestKey)[]): Promise<void> {\n    const triggerEl = await this.trigger();\n    return triggerEl.sendKeys(...keys);\n  }\n\n  /** Gets all options in the dropdown. */\n  async getOptions(filters: ComDropdownOptionHarnessFilters = {}): Promise<ComDropdownOptionHarness[]> {\n    await this.open();\n    return this.locatorForAll(ComDropdownOptionHarness.with(filters))();\n  }\n\n  /** Gets an option by its text. */\n  async getOption(text: string | RegExp): Promise<ComDropdownOptionHarness | null> {\n    await this.open();\n    const options = await this.getOptions({ text });\n    return options[0] ?? null;\n  }\n\n  /** Selects an option by its text. */\n  async selectOption(text: string | RegExp): Promise<void> {\n    const option = await this.getOption(text);\n    if (!option) {\n      throw new Error(`Could not find option with text: ${text}`);\n    }\n    return option.click();\n  }\n\n  /** Gets the currently selected option(s). */\n  async getSelectedOptions(): Promise<ComDropdownOptionHarness[]> {\n    await this.open();\n    return this.getOptions({ selected: true });\n  }\n\n  /** Whether the dropdown has a search input. */\n  async isSearchable(): Promise<boolean> {\n    await this.open();\n    const input = await this.searchInput();\n    return input !== null;\n  }\n\n  /** Gets the current search query. */\n  async getSearchQuery(): Promise<string> {\n    await this.open();\n    const input = await this.searchInput();\n    if (!input) {\n      throw new Error('Dropdown is not searchable');\n    }\n    return input.getProperty<string>('value');\n  }\n\n  /** Types in the search input. */\n  async search(query: string): Promise<void> {\n    await this.open();\n    const input = await this.searchInput();\n    if (!input) {\n      throw new Error('Dropdown is not searchable');\n    }\n    await input.clear();\n    return input.sendKeys(query);\n  }\n\n  /** Clears the search input. */\n  async clearSearch(): Promise<void> {\n    await this.open();\n    const input = await this.searchInput();\n    if (!input) {\n      throw new Error('Dropdown is not searchable');\n    }\n    return input.clear();\n  }\n\n  /** Gets the number of visible options. */\n  async getOptionsCount(): Promise<number> {\n    const options = await this.getOptions();\n    return options.length;\n  }\n\n  /** Gets all option texts. */\n  async getOptionTexts(): Promise<string[]> {\n    const options = await this.getOptions();\n    return parallel(() => options.map((opt) => opt.getText()));\n  }\n\n  /** Navigates to an option using keyboard. */\n  async navigateToOption(direction: 'up' | 'down', times = 1): Promise<void> {\n    await this.open();\n    const key = direction === 'down' ? TestKey.DOWN_ARROW : TestKey.UP_ARROW;\n    for (let i = 0; i < times; i++) {\n      await this.sendKeys(key);\n    }\n  }\n\n  /** Selects the currently active option. */\n  async selectActiveOption(): Promise<void> {\n    await this.sendKeys(TestKey.ENTER);\n  }\n\n  /** Gets the ID of the active descendant. */\n  async getActiveDescendantId(): Promise<string | null> {\n    await this.open();\n    const triggerEl = await this.trigger();\n    return triggerEl.getAttribute('aria-activedescendant');\n  }\n\n  /** Gets the panel ID. */\n  async getPanelId(): Promise<string | null> {\n    await this.open();\n    const panelEl = await this.panel();\n    return panelEl ? panelEl.getAttribute('id') : null;\n  }\n\n  /** Gets the aria-controls value from the trigger. */\n  async getAriaControls(): Promise<string | null> {\n    const triggerEl = await this.trigger();\n    return triggerEl.getAttribute('aria-controls');\n  }\n\n  /** Focuses the dropdown trigger. */\n  async focus(): Promise<void> {\n    const triggerEl = await this.trigger();\n    return triggerEl.focus();\n  }\n\n  /** Blurs the dropdown trigger. */\n  async blur(): Promise<void> {\n    const triggerEl = await this.trigger();\n    return triggerEl.blur();\n  }\n\n  /** Whether the dropdown trigger is focused. */\n  async isFocused(): Promise<boolean> {\n    const triggerEl = await this.trigger();\n    return triggerEl.isFocused();\n  }\n}\n","// Testing utilities for the dropdown component\n\nexport {\n  ComDropdownHarness,\n  ComDropdownOptionHarness,\n} from './dropdown.harness';\n\nexport type {\n  ComDropdownHarnessFilters,\n  ComDropdownOptionHarnessFilters,\n} from './dropdown.harness';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}