{"version":3,"file":"skyux-forms-testing.mjs","sources":["../../../../../libs/components/forms/testing/src/modules/character-counter/character-counter-indicator-harness.ts","../../../../../libs/components/forms/testing/src/modules/form-error/form-error-harness.ts","../../../../../libs/components/forms/testing/src/modules/form-error/form-errors-harness.ts","../../../../../libs/components/forms/testing/src/modules/input-box/input-box-harness.ts","../../../../../libs/components/forms/testing/src/legacy/checkbox-fixture.ts","../../../../../libs/components/forms/testing/src/modules/checkbox/checkbox-label-harness.ts","../../../../../libs/components/forms/testing/src/modules/checkbox/checkbox-label-text-label.harness.ts","../../../../../libs/components/forms/testing/src/modules/checkbox/checkbox-harness.ts","../../../../../libs/components/forms/testing/src/modules/checkbox/checkbox-group-harness.ts","../../../../../libs/components/forms/testing/src/modules/file-attachment/file-attachment/file-attachment-harness.ts","../../../../../libs/components/forms/testing/src/modules/file-attachment/file-drop/file-drop-link-upload-input-harness.ts","../../../../../libs/components/forms/testing/src/modules/file-attachment/file-drop/file-drop-link-upload-harness.ts","../../../../../libs/components/forms/testing/src/modules/file-attachment/file-drop/file-drop-harness.ts","../../../../../libs/components/forms/testing/src/modules/file-attachment/file-drop/file-item-harness.ts","../../../../../libs/components/forms/testing/src/modules/file-attachment/shared/provide-file-attachment-testing.ts","../../../../../libs/components/forms/testing/src/modules/field-group/field-group-harness.ts","../../../../../libs/components/forms/testing/src/legacy/radio-fixture.ts","../../../../../libs/components/forms/testing/src/modules/radio/radio-label-harness.ts","../../../../../libs/components/forms/testing/src/modules/radio/radio-harness.ts","../../../../../libs/components/forms/testing/src/modules/radio/radio-group-harness.ts","../../../../../libs/components/forms/testing/src/modules/selection-box/selection-box-description-harness.ts","../../../../../libs/components/forms/testing/src/modules/selection-box/selection-box-header-harness.ts","../../../../../libs/components/forms/testing/src/modules/selection-box/selection-box-harness.ts","../../../../../libs/components/forms/testing/src/modules/selection-box/selection-box-grid-harness.ts","../../../../../libs/components/forms/testing/src/modules/toggle-switch/toggle-switch-label-harness.ts","../../../../../libs/components/forms/testing/src/modules/toggle-switch/toggle-switch-harness.ts","../../../../../libs/components/forms/testing/src/skyux-forms-testing.ts"],"sourcesContent":["import { HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyComponentHarness } from '@skyux/core/testing';\n\nimport { SkyCharacterCounterIndicatorHarnessFilters } from './character-counter-indicator-harness-filters';\n\ntype LabelParts = {\n  count: number;\n  limit: number;\n};\n\n/**\n * Harness for interacting with a character counter indicator component in tests.\n */\nexport class SkyCharacterCounterIndicatorHarness extends SkyComponentHarness {\n  /**\n   * @internal\n   */\n  public static hostSelector = 'sky-character-counter-indicator';\n\n  #getLabel = this.locatorFor('.sky-character-count-label');\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a\n   * `SkyCharacterCounterIndicatorHarness` that meets certain criteria.\n   */\n  public static with(\n    filters: SkyCharacterCounterIndicatorHarnessFilters,\n  ): HarnessPredicate<SkyCharacterCounterIndicatorHarness> {\n    return SkyCharacterCounterIndicatorHarness.getDataSkyIdPredicate(filters);\n  }\n\n  /**\n   * Gets the current character count.\n   */\n  public async getCharacterCount(): Promise<number> {\n    return (await this.#getLabelParts()).count;\n  }\n\n  /**\n   * Gets the character counter limit.\n   */\n  public async getCharacterCountLimit(): Promise<number> {\n    return (await this.#getLabelParts()).limit;\n  }\n\n  /**\n   * Indicates whether the character counter is in an error state because the current character\n   * count is greater than the limit.\n   */\n  public async isOverLimit(): Promise<boolean> {\n    return await (await this.#getLabel()).hasClass('sky-error-label');\n  }\n\n  async #getLabelParts(): Promise<LabelParts> {\n    const label = await this.#getLabel();\n    const textParts = (await label.text()).split('/');\n\n    let labelParts: LabelParts | undefined;\n\n    if (textParts.length === 2) {\n      labelParts = {\n        count: +textParts[0].trim(),\n        limit: +textParts[1].trim(),\n      };\n    }\n\n    if (labelParts && !isNaN(labelParts.count) && !isNaN(labelParts.limit)) {\n      return labelParts;\n    }\n\n    throw new Error(\n      'The character counter indicator does not contain text in the expected format.',\n    );\n  }\n}\n","import { HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyComponentHarness } from '@skyux/core/testing';\nimport { SkyStatusIndicatorHarness } from '@skyux/indicators/testing';\n\nimport { SkyFormErrorHarnessFilters } from './form-error-harness.filters';\n\nexport class SkyFormErrorHarness extends SkyComponentHarness {\n  /**\n   * @internal\n   */\n  public static hostSelector = 'sky-form-error';\n\n  async #getStatusIndicator(): Promise<SkyStatusIndicatorHarness> {\n    return await this.locatorFor(SkyStatusIndicatorHarness)();\n  }\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a\n   * `SkyFormErrorHarness` that meets certain criteria\n   */\n  public static with(\n    filters: SkyFormErrorHarnessFilters,\n  ): HarnessPredicate<SkyFormErrorHarness> {\n    return SkyFormErrorHarness.getDataSkyIdPredicate(filters).addOption(\n      'errorName',\n      filters.errorName,\n      async (harness, errorName) => {\n        const harnessErrorName = await harness.getErrorName();\n        return await HarnessPredicate.stringMatches(\n          harnessErrorName,\n          errorName,\n        );\n      },\n    );\n  }\n\n  /**\n   * Gets the error name.\n   */\n  public async getErrorName(): Promise<string | null> {\n    return await (await this.host()).getAttribute('data-error-name');\n  }\n\n  /**\n   * Gets the error text.\n   */\n  public async getErrorText(): Promise<string | null> {\n    return await (await this.#getStatusIndicator()).getText();\n  }\n}\n","import { HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyComponentHarness } from '@skyux/core/testing';\n\nimport { SkyFormErrorHarness } from './form-error-harness';\nimport { SkyFormErrorsHarnessFilters } from './form-errors-harness.filters';\n\nexport class SkyFormErrorsHarness extends SkyComponentHarness {\n  /**\n   * @internal\n   */\n  public static hostSelector = 'sky-form-errors';\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a\n   * `SkyFormErrorsHarness` that meets certain criteria\n   */\n  public static with(\n    filters: SkyFormErrorsHarnessFilters,\n  ): HarnessPredicate<SkyFormErrorsHarness> {\n    return SkyFormErrorsHarness.getDataSkyIdPredicate(filters);\n  }\n\n  /**\n   * Gets a list of all errors fired.\n   */\n  public async getFormErrors(): Promise<{ errorName: string | null }[]> {\n    const formErrorHarnesses = await this.locatorForAll(\n      SkyFormErrorHarness.with({}),\n    )();\n\n    return await Promise.all(\n      formErrorHarnesses.map(async (formError) => {\n        return { errorName: await formError.getErrorName() };\n      }),\n    );\n  }\n\n  /**\n   * Whether an error with the given name has fired.\n   */\n  public async hasError(errorName: string): Promise<boolean> {\n    const formErrors = await this.getFormErrors();\n    return formErrors.some((error) => {\n      return error.errorName === errorName;\n    });\n  }\n}\n","import { HarnessPredicate, TestElement } from '@angular/cdk/testing';\nimport { SkyQueryableComponentHarness } from '@skyux/core/testing';\nimport { SkyHelpInlineHarness } from '@skyux/help-inline/testing';\nimport { SkyStatusIndicatorHarness } from '@skyux/indicators/testing';\nimport { SkyPopoverHarness } from '@skyux/popovers/testing';\n\nimport { SkyCharacterCounterIndicatorHarness } from '../character-counter/character-counter-indicator-harness';\nimport { SkyFormErrorHarness } from '../form-error/form-error-harness';\nimport { SkyFormErrorsHarness } from '../form-error/form-errors-harness';\n\nimport { SkyInputBoxHarnessFilters } from './input-box-harness-filters';\n\n/**\n * Harness for interacting with an input box component in tests.\n */\nexport class SkyInputBoxHarness extends SkyQueryableComponentHarness {\n  /**\n   * @internal\n   */\n  public static hostSelector = 'sky-input-box';\n\n  #getHintText = this.locatorForOptional('.sky-input-box-hint-text');\n  #getLabel = this.locatorForOptional('.sky-control-label');\n  #getWrapper = this.locatorFor('.sky-input-box');\n\n  async #getFormError(): Promise<SkyFormErrorsHarness> {\n    return await this.locatorFor(SkyFormErrorsHarness)();\n  }\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a\n   * `SkyInputBoxHarness` that meets certain criteria.\n   */\n  public static with(\n    filters: SkyInputBoxHarnessFilters,\n  ): HarnessPredicate<SkyInputBoxHarness> {\n    return SkyInputBoxHarness.getDataSkyIdPredicate(filters);\n  }\n\n  /**\n   * Clicks the help inline button.\n   */\n  public async clickHelpInline(): Promise<void> {\n    await (await this.#getHelpInline()).click();\n  }\n\n  /**\n   * Gets the character counter indicator for the input box or throws an error if\n   * a character limit is not specified.\n   */\n  public async getCharacterCounter(): Promise<SkyCharacterCounterIndicatorHarness> {\n    const characterCounter = await this.locatorForOptional(\n      new HarnessPredicate(SkyCharacterCounterIndicatorHarness, {\n        ancestor: '.sky-input-box-label-wrapper',\n      }),\n    )();\n\n    if (!characterCounter) {\n      throw new Error(\n        'The input box does not have a character limit specified.',\n      );\n    }\n\n    return characterCounter;\n  }\n\n  /**\n   * Gets a list of status indicator harnesses for errors not automatically\n   * handled by input box.\n   */\n  public async getCustomErrors(): Promise<SkyStatusIndicatorHarness[]> {\n    const errors = await this.locatorForAll(\n      new HarnessPredicate(SkyStatusIndicatorHarness, {\n        selector:\n          'sky-status-indicator:not(sky-form-error sky-status-indicator)',\n      }),\n    )();\n\n    return errors;\n  }\n\n  /**\n   * Gets the custom form error.\n   */\n  public async getCustomFormError(\n    errorName: string,\n  ): Promise<SkyFormErrorHarness> {\n    return await this.locatorFor(\n      SkyFormErrorHarness.with({ errorName: errorName }),\n    )();\n  }\n\n  /**\n   * Whether the custom form error is triggered.\n   */\n  public async hasCustomFormError(errorName: string): Promise<boolean> {\n    return await (await this.#getFormError()).hasError(errorName);\n  }\n\n  /**\n   * Whether the required field is empty.\n   */\n  public async hasRequiredError(): Promise<boolean> {\n    return await (await this.#getFormError()).hasError('required');\n  }\n\n  /**\n   * Whether the field has more characters than allowed.\n   */\n  public async hasMaxLengthError(): Promise<boolean> {\n    return await (await this.#getFormError()).hasError('maxlength');\n  }\n\n  /**\n   * Whether the field has fewer characters than allowed.\n   */\n  public async hasMinLengthError(): Promise<boolean> {\n    return await (await this.#getFormError()).hasError('minlength');\n  }\n\n  /**\n   * Whether the field is set to an invalid email address.\n   */\n  public async hasEmailError(): Promise<boolean> {\n    return await (await this.#getFormError()).hasError('email');\n  }\n\n  /**\n   * Whether the field is set to an invalid URL.\n   */\n  public async hasUrlError(): Promise<boolean> {\n    return await (await this.#getFormError()).hasError('url');\n  }\n\n  /**\n   * Whether the field is set to an invalid date.\n   */\n  public async hasInvalidDateError(): Promise<boolean> {\n    return await (await this.#getFormError()).hasError('invalidDate');\n  }\n\n  /**\n   * Whether the field is set to an invalid minimum date.\n   */\n  public async hasMinDateError(): Promise<boolean> {\n    return await (await this.#getFormError()).hasError('minDate');\n  }\n\n  /**\n   * Whether the field is set to an invalid maximum date.\n   */\n  public async hasMaxDateError(): Promise<boolean> {\n    return await (await this.#getFormError()).hasError('maxDate');\n  }\n\n  /**\n   * Whether the field is set to an invalid phone number.\n   */\n  public async hasPhoneFieldError(): Promise<boolean> {\n    return await (await this.#getFormError()).hasError('phone');\n  }\n\n  /**\n   * Whether the field is set to an invalid time.\n   */\n  public async hasTimeError(): Promise<boolean> {\n    return await (await this.#getFormError()).hasError('time');\n  }\n\n  /**\n   * Indicates whether the input box has disabled styles applied.\n   */\n  public async getDisabled(): Promise<boolean> {\n    const wrapper = await this.#getWrapper();\n\n    return await wrapper.hasClass('sky-input-box-disabled');\n  }\n\n  /**\n   * Gets the text for the input box label.\n   */\n  public async getLabelText(): Promise<string> {\n    const label = await this.#getLabel();\n\n    return await this.#getElementTextOrDefault(label);\n  }\n\n  /**\n   * Gets the help popover for the input box or throws an error if\n   * the help popover is not configured.\n   */\n  public async getHelpPopover(): Promise<SkyPopoverHarness> {\n    const helpPopover = await this.locatorForOptional(\n      new HarnessPredicate(SkyPopoverHarness, {\n        ancestor: '.sky-control-help',\n      }),\n    )();\n\n    if (!helpPopover) {\n      throw new Error('The input box does not have a help popover configured.');\n    }\n\n    return helpPopover;\n  }\n\n  /**2\n   * Gets the help popover content.\n   */\n  public async getHelpPopoverContent(): Promise<string | undefined> {\n    return await (await this.#getHelpInline()).getPopoverContent();\n  }\n\n  /**\n   * Gets the help popover title.\n   */\n  public async getHelpPopoverTitle(): Promise<string | undefined> {\n    return await (await this.#getHelpInline()).getPopoverTitle();\n  }\n\n  /**\n   * Gets the hint text for the input box.\n   */\n  public async getHintText(): Promise<string> {\n    const hintText = await this.#getHintText();\n\n    return await this.#getElementTextOrDefault(hintText);\n  }\n\n  /**\n   * Indicates whether the input box has stacked styles applied.\n   */\n  public async getStacked(): Promise<boolean> {\n    const host = await this.host();\n\n    return await host.hasClass('sky-form-field-stacked');\n  }\n\n  async #getElementTextOrDefault(el: TestElement | null): Promise<string> {\n    return (await el?.text())?.trim() ?? '';\n  }\n\n  async #getHelpInline(): Promise<SkyHelpInlineHarness> {\n    const harness = await this.locatorForOptional(SkyHelpInlineHarness)();\n\n    if (harness) {\n      return harness;\n    }\n\n    throw Error('No help inline found.');\n  }\n}\n","import { DebugElement } from '@angular/core';\nimport { ComponentFixture } from '@angular/core/testing';\nimport { By } from '@angular/platform-browser';\nimport { SkyAppTestUtility } from '@skyux-sdk/testing';\n\n/**\n * Allows interaction with a SKY UX checkbox component.\n * @internal\n * @deprecated Use `SkyCheckboxHarness` instead.\n */\nexport class SkyCheckboxFixture {\n  #debugEl: DebugElement;\n\n  constructor(fixture: ComponentFixture<any>, skyTestId: string) {\n    this.#debugEl = SkyAppTestUtility.getDebugElementByTestId(\n      fixture,\n      skyTestId,\n      'sky-checkbox',\n    );\n  }\n\n  /**\n   * A flag indicating whether the checkbox is currently selected.\n   */\n  public get selected(): boolean {\n    return this.#getCheckboxInputEl().nativeElement.checked;\n  }\n\n  /**\n   * The checkbox's label\n   */\n  public get labelText(): string | undefined {\n    return SkyAppTestUtility.getText(\n      this.#debugEl.query(By.css('label.sky-checkbox-wrapper')),\n    );\n  }\n\n  /**\n   * The checkbox's icon type\n   */\n  public get iconType(): string | undefined {\n    const svgElement = this.#debugEl.query(By.css('sky-icon svg'));\n\n    if (svgElement) {\n      return svgElement.nativeElement.getAttribute('data-sky-icon');\n    }\n\n    return undefined;\n  }\n\n  /**\n   * The checkbox's type.\n   */\n  public get checkboxType(): string | undefined {\n    const classList = this.#getCheckboxBoxEl().nativeElement.classList;\n\n    if (classList.contains('sky-switch-control-danger')) {\n      return 'danger';\n    }\n\n    if (classList.contains('sky-switch-control-info')) {\n      return 'info';\n    }\n\n    if (classList.contains('sky-switch-control-success')) {\n      return 'success';\n    }\n\n    if (classList.contains('sky-switch-control-warning')) {\n      return 'warning';\n    }\n\n    return undefined;\n  }\n\n  /**\n   * A flag indicating whether the checkbox is currently disabled.\n   */\n  public get disabled(): boolean {\n    return this.#getCheckboxInputEl().nativeElement.disabled;\n  }\n\n  /**\n   * Selects the checkbox.\n   */\n  public select(): void {\n    if (!this.selected) {\n      this.#clickCheckboxLabelEl();\n    }\n  }\n\n  /**\n   * Deselects the checkbox.\n   */\n  public deselect(): void {\n    if (this.selected) {\n      this.#clickCheckboxLabelEl();\n    }\n  }\n\n  #clickCheckboxLabelEl(): void {\n    this.#debugEl\n      .query(By.css('label.sky-checkbox-wrapper'))\n      .nativeElement.click();\n  }\n\n  #getCheckboxInputEl(): DebugElement {\n    return this.#debugEl.query(By.css('.sky-checkbox-wrapper input'));\n  }\n\n  #getCheckboxBoxEl(): DebugElement {\n    return this.#debugEl.query(By.css('label.sky-checkbox-wrapper span'));\n  }\n}\n","import { ComponentHarness } from '@angular/cdk/testing';\n\n/**\n * Harness for interacting with a checkbox label component in tests.\n * @internal\n */\nexport class SkyCheckboxLabelHarness extends ComponentHarness {\n  /**\n   * @internal\n   */\n  public static hostSelector = 'sky-checkbox-label';\n\n  #getLabelContent = this.locatorFor('.sky-switch-label');\n\n  /**\n   * Gets the text content of the checkbox label.\n   */\n  public async getText(): Promise<string> {\n    return await (await this.#getLabelContent()).text();\n  }\n}\n","import { ComponentHarness } from '@angular/cdk/testing';\n\n/**\n * Harness for interacting with a `labelText` checkbox label component in tests.\n * @internal\n */\nexport class SkyCheckboxLabelTextLabelHarness extends ComponentHarness {\n  /**\n   * @internal\n   */\n  public static hostSelector = 'sky-checkbox-label-text-label';\n\n  #getLabelContent = this.locatorForOptional('.sky-switch-label');\n\n  /**\n   * Gets the text content of the `labelText` checkbox label.\n   */\n  public async getText(): Promise<string | undefined> {\n    return await (await this.#getLabelContent())?.text();\n  }\n}\n","import { HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyComponentHarness } from '@skyux/core/testing';\nimport { SkyHelpInlineHarness } from '@skyux/help-inline/testing';\n\nimport { SkyFormErrorsHarness } from '../form-error/form-errors-harness';\n\nimport { SkyCheckboxHarnessFilters } from './checkbox-harness-filters';\nimport { SkyCheckboxLabelHarness } from './checkbox-label-harness';\nimport { SkyCheckboxLabelTextLabelHarness } from './checkbox-label-text-label.harness';\n\n/**\n * Harness for interacting with a checkbox component in tests.\n */\nexport class SkyCheckboxHarness extends SkyComponentHarness {\n  /**\n   * @internal\n   */\n  public static hostSelector = 'sky-checkbox';\n\n  #getHintText = this.locatorForOptional('.sky-checkbox-hint-text');\n\n  #getInput = this.locatorFor('input.sky-checkbox-input');\n\n  #getLabel = this.locatorForOptional(SkyCheckboxLabelHarness);\n\n  #getLabelTextLabel = this.locatorForOptional(\n    SkyCheckboxLabelTextLabelHarness,\n  );\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a\n   * `SkyCheckboxHarness` that meets certain criteria.\n   */\n  public static with(\n    filters: SkyCheckboxHarnessFilters,\n  ): HarnessPredicate<SkyCheckboxHarness> {\n    return SkyCheckboxHarness.getDataSkyIdPredicate(filters);\n  }\n\n  /**\n   * Blurs the checkbox.\n   */\n  public async blur(): Promise<void> {\n    await (await this.#getInput()).blur();\n  }\n\n  /**\n   * Clicks the help inline button.\n   */\n  public async clickHelpInline(): Promise<void> {\n    await (await this.#getHelpInline()).click();\n  }\n\n  /**\n   * Puts the checkbox in a checked state by toggling it if it is currently unchecked, or doing nothing if it is already checked.\n   */\n  public async check(): Promise<void> {\n    if (!(await this.isChecked())) {\n      await this.#toggle();\n    }\n  }\n\n  /**\n   * Focuses the checkbox.\n   */\n  public async focus(): Promise<void> {\n    await (await this.#getInput()).focus();\n  }\n\n  /**\n   * Gets the checkbox's aria-label.\n   */\n  public async getAriaLabel(): Promise<string | null> {\n    return await (await this.#getInput()).getAttribute('aria-label');\n  }\n\n  /**\n   * Gets the checkbox's aria-labelledby.\n   */\n  public async getAriaLabelledby(): Promise<string | null> {\n    return await (await this.#getInput()).getAttribute('aria-labelledby');\n  }\n\n  /**\n   * Gets the help popover content.\n   */\n  public async getHelpPopoverContent(): Promise<string | undefined> {\n    return await (await this.#getHelpInline()).getPopoverContent();\n  }\n\n  /**\n   * Gets the help popover title.\n   */\n  public async getHelpPopoverTitle(): Promise<string | undefined> {\n    return await (await this.#getHelpInline()).getPopoverTitle();\n  }\n\n  /**\n   * Gets the checkbox's label text. If the label is set via `labelText` and `labelHidden` is true,\n   * the text will still be returned.\n   */\n  public async getLabelText(): Promise<string | undefined> {\n    const labelTextLabel = await this.#getLabelTextLabel();\n    const label = await this.#getLabel();\n\n    if (labelTextLabel) {\n      const text = await labelTextLabel.getText();\n      const ariaLabel = await this.getAriaLabel();\n\n      // if labelText is set, ariaLabel will never return null\n      return text || ariaLabel!;\n    } else {\n      return await label?.getText();\n    }\n  }\n\n  /**\n   * Whether the label is hidden. Only supported when using the `labelText` input to set the label.\n   */\n  public async getLabelHidden(): Promise<boolean> {\n    const labelTextLabel = await this.#getLabelTextLabel();\n    const label = await this.#getLabel();\n\n    if (label) {\n      throw new Error(\n        '`labelHidden` is only supported when setting the checkbox label via the `labelText` input.',\n      );\n    } else {\n      return !(await labelTextLabel?.getText());\n    }\n  }\n\n  /**\n   * Gets the checkbox's hint text.\n   */\n  public async getHintText(): Promise<string> {\n    const hintText = await this.#getHintText();\n\n    return (await hintText?.text())?.trim() ?? '';\n  }\n\n  /**\n   * Gets the checkbox's name.\n   */\n  public async getName(): Promise<string | null> {\n    return await (await this.#getInput()).getAttribute('name');\n  }\n\n  /**\n   * Gets the checkbox's value.\n   */\n  public async getValue(): Promise<string | null> {\n    return await (await this.#getInput()).getProperty<string | null>('value');\n  }\n\n  /**\n   * Whether the checkbox displays custom error.\n   */\n  public async hasCustomError(errorName: string): Promise<boolean> {\n    return await (await this.#getFormErrors()).hasError(errorName);\n  }\n\n  /**\n   * Whether the checkbox displays an error that it is required.\n   */\n  public async hasRequiredError(): Promise<boolean> {\n    return await (await this.#getFormErrors()).hasError('required');\n  }\n\n  /**\n   * Whether the checkbox is checked.\n   */\n  public async isChecked(): Promise<boolean> {\n    return await (await this.#getInput()).getProperty<boolean>('checked');\n  }\n\n  /**\n   * Whether the checkbox is disabled.\n   */\n  public async isDisabled(): Promise<boolean> {\n    const disabled = await (await this.#getInput()).getAttribute('disabled');\n    return disabled !== null;\n  }\n\n  /**\n   * Whether the checkbox is focused.\n   */\n  public async isFocused(): Promise<boolean> {\n    return await (await this.#getInput()).isFocused();\n  }\n\n  /**\n   * Whether the checkbox is required.\n   */\n  public async isRequired(): Promise<boolean> {\n    const value = await (await this.#getInput()).getAttribute('required');\n    return value !== null;\n  }\n\n  /**\n   * Whether the checkbox is stacked.\n   */\n  public async isStacked(): Promise<boolean> {\n    return await (await this.host()).hasClass('sky-form-field-stacked');\n  }\n\n  /**\n   * Puts the checkbox in an unchecked state by toggling it if it is currently checked, or doing nothing if it is already unchecked.\n   */\n  public async uncheck(): Promise<void> {\n    if (await this.isChecked()) {\n      await this.#toggle();\n    }\n  }\n\n  async #getFormErrors(): Promise<SkyFormErrorsHarness> {\n    return await this.locatorFor(SkyFormErrorsHarness)();\n  }\n\n  async #getHelpInline(): Promise<SkyHelpInlineHarness> {\n    const harness = await this.locatorForOptional(SkyHelpInlineHarness)();\n\n    if (harness) {\n      return harness;\n    }\n\n    throw Error('No help inline found.');\n  }\n\n  async #toggle(): Promise<void> {\n    if (await this.isDisabled()) {\n      throw new Error('Could not toggle the checkbox because it is disabled.');\n    } else {\n      await (await this.#getInput()).click();\n    }\n  }\n}\n","import { HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyComponentHarness } from '@skyux/core/testing';\nimport {\n  SkyCheckboxGroupHeadingLevel,\n  SkyCheckboxGroupHeadingStyle,\n} from '@skyux/forms';\nimport { SkyHelpInlineHarness } from '@skyux/help-inline/testing';\n\nimport { SkyFormErrorsHarness } from '../form-error/form-errors-harness';\n\nimport { SkyCheckboxGroupHarnessFilters } from './checkbox-group-harness-filters';\nimport { SkyCheckboxHarness } from './checkbox-harness';\nimport { SkyCheckboxHarnessFilters } from './checkbox-harness-filters';\n\n/**\n * Harness for interacting with a checkbox group component in tests.\n */\nexport class SkyCheckboxGroupHarness extends SkyComponentHarness {\n  /**\n   * @internal\n   */\n  public static hostSelector = 'sky-checkbox-group';\n\n  #getHeading = this.locatorFor('.sky-checkbox-group-heading');\n  #getHeadingWrapper = this.locatorFor('.sky-checkbox-group-legend');\n  #getHintText = this.locatorForOptional('.sky-checkbox-group-hint-text');\n  #getLegendDefault = this.locatorForOptional(\n    'legend .sky-checkbox-group-heading-text',\n  );\n  #getLegendH3 = this.locatorForOptional('legend h3');\n  #getLegendH4 = this.locatorForOptional('legend h4');\n  #getLegendH5 = this.locatorForOptional('legend h5');\n  #getLegendHeading = this.locatorFor(\n    'legend h3,h4,h5,.sky-checkbox-group-heading-text',\n  );\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a\n   * `SkyCheckboxGroupHarness` that meets certain criteria.\n   */\n  public static with(\n    filters: SkyCheckboxGroupHarnessFilters,\n  ): HarnessPredicate<SkyCheckboxGroupHarness> {\n    return SkyCheckboxGroupHarness.getDataSkyIdPredicate(filters);\n  }\n\n  /**\n   * Clicks the help inline button.\n   */\n  public async clickHelpInline(): Promise<void> {\n    await (await this.#getHelpInline()).click();\n  }\n\n  /**\n   * Gets a specific checkbox based on the filter criteria.\n   * @param filter The filter criteria.\n   */\n  public async getCheckbox(\n    filter: SkyCheckboxHarnessFilters,\n  ): Promise<SkyCheckboxHarness> {\n    return await this.locatorFor(SkyCheckboxHarness.with(filter))();\n  }\n\n  /**\n   * Gets an array of checkboxes based on the filter criteria.\n   * If no filter is provided, returns all checkboxes.\n   * @param filter The optional filter criteria.\n   */\n  public async getCheckboxes(\n    filters?: SkyCheckboxHarnessFilters,\n  ): Promise<SkyCheckboxHarness[]> {\n    return await this.locatorForAll(SkyCheckboxHarness.with(filters || {}))();\n  }\n\n  /**\n   * Gets the help popover content.\n   */\n  public async getHelpPopoverContent(): Promise<string | undefined> {\n    return await (await this.#getHelpInline()).getPopoverContent();\n  }\n\n  /**\n   * Gets the help popover title.\n   */\n  public async getHelpPopoverTitle(): Promise<string | undefined> {\n    return await (await this.#getHelpInline()).getPopoverTitle();\n  }\n\n  /**\n   * Gets the checkbox group's heading text. If `headingHidden` is true,\n   * the text will still be returned.\n   */\n  public async getHeadingText(): Promise<string | undefined> {\n    return await (await this.#getLegendHeading()).text();\n  }\n\n  /**\n   * Gets the checkbox group's hint text.\n   */\n  public async getHintText(): Promise<string> {\n    const hintText = await this.#getHintText();\n\n    return (await hintText?.text())?.trim() ?? '';\n  }\n\n  /**\n   * Whether the heading is hidden.\n   */\n  public async getHeadingHidden(): Promise<boolean> {\n    return await (\n      await this.#getHeadingWrapper()\n    ).hasClass('sky-screen-reader-only');\n  }\n\n  /**\n   * The semantic heading level used for the checkbox group. Returns undefined if heading level is not set.\n   */\n  public async getHeadingLevel(): Promise<\n    SkyCheckboxGroupHeadingLevel | undefined\n  > {\n    const heading = await this.#getLegendHeading();\n    const h3 = await heading.matchesSelector('h3');\n    const h4 = await heading.matchesSelector('h4');\n    const h5 = await heading.matchesSelector('h5');\n\n    if (h3) {\n      return 3;\n    } else if (h4) {\n      return 4;\n    } else if (h5) {\n      return 5;\n    } else {\n      return undefined;\n    }\n  }\n\n  /**\n   * The heading style used for the checkbox group.\n   */\n  public async getHeadingStyle(): Promise<SkyCheckboxGroupHeadingStyle> {\n    const heading = await this.#getLegendHeading();\n\n    const isHeadingStyle3 = await heading.hasClass('sky-font-heading-3');\n    const isHeadingStyle4 = await heading.hasClass('sky-font-heading-4');\n\n    if (isHeadingStyle3) {\n      return 3;\n    } else if (isHeadingStyle4) {\n      return 4;\n    } else {\n      return 5;\n    }\n  }\n\n  /**\n   * Whether the checkbox group is required.\n   */\n  public async getRequired(): Promise<boolean> {\n    const heading = await this.#getHeading();\n\n    return await heading.hasClass('sky-control-label-required');\n  }\n\n  /**\n   * Whether the checkbox group is stacked.\n   */\n  public async getStacked(): Promise<boolean> {\n    const host = await this.host();\n    const heading =\n      (await this.#getLegendH3()) ||\n      (await this.#getLegendH4()) ||\n      (await this.#getLegendH5());\n    const label = await this.#getLegendDefault();\n\n    return (\n      ((await host.hasClass('sky-form-field-stacked')) && !!label) ||\n      ((await host.hasClass('sky-field-group-stacked')) && !!heading)\n    );\n  }\n\n  /**\n   * Whether all the checkboxes in a required group are unchecked.\n   */\n  public async hasRequiredError(): Promise<boolean> {\n    return await (await this.#getFormErrors()).hasError('required');\n  }\n\n  /**\n   * Whether the checkbox group has errors.\n   */\n  public async hasError(errorName: string): Promise<boolean> {\n    return await (await this.#getFormErrors()).hasError(errorName);\n  }\n\n  async #getFormErrors(): Promise<SkyFormErrorsHarness> {\n    return await this.locatorFor(\n      SkyFormErrorsHarness.with({\n        dataSkyId: 'checkbox-group-form-errors',\n      }),\n    )();\n  }\n\n  async #getHelpInline(): Promise<SkyHelpInlineHarness> {\n    const harness = await this.locatorForOptional(\n      SkyHelpInlineHarness.with({\n        ancestor: '.sky-checkbox-group > .sky-checkbox-group-legend',\n      }),\n    )();\n\n    if (harness) {\n      return harness;\n    }\n\n    throw Error('No help inline found.');\n  }\n}\n","import { EventData, HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyComponentHarness } from '@skyux/core/testing';\nimport { SkyHelpInlineHarness } from '@skyux/help-inline/testing';\n\nimport { SkyFormErrorHarness } from '../../form-error/form-error-harness';\nimport { SkyFormErrorsHarness } from '../../form-error/form-errors-harness';\n\nimport { SkyFileAttachmentHarnessFilters } from './file-attachment-harness-filters';\n\ntype TestDataTransfer = DataTransfer & { [key: string]: EventData };\n\n/**\n * Harness for interacting with a file attachment component in tests.\n */\nexport class SkyFileAttachmentHarness extends SkyComponentHarness {\n  /**\n   * @internal\n   */\n  public static hostSelector = 'sky-file-attachment';\n\n  #getButton = this.locatorFor('button.sky-file-attachment-btn');\n  #getLabel = this.locatorFor('.sky-control-label');\n  #input = this.locatorFor('input[type=\"file\"]');\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a\n   * `SkyFileAttachmentHarness` that meets certain criteria.\n   */\n  public static with(\n    filters: SkyFileAttachmentHarnessFilters,\n  ): HarnessPredicate<SkyFileAttachmentHarness> {\n    return SkyFileAttachmentHarness.getDataSkyIdPredicate(filters);\n  }\n\n  /**\n   * Clicks the attach file button if it is visible.\n   */\n  public async clickAttachFileButton(): Promise<void> {\n    try {\n      const button = await this.#getButton();\n      if ((await button.text()).trim() === 'Replace file') {\n        throw new Error();\n      }\n      return await button.click();\n    } catch {\n      throw new Error(\n        'Cannot click Attach file button, there is currently a file attached.',\n      );\n    }\n  }\n\n  /**\n   * Clicks the help inline button.\n   */\n  public async clickHelpInline(): Promise<void> {\n    return await (await this.#getHelpInline()).click();\n  }\n\n  /**\n   * Clicks the replace file button in default theme.\n   */\n  public async clickReplaceFileButton(): Promise<void> {\n    try {\n      const button = await this.#getButton();\n      if ((await button.text()).trim() !== 'Replace file') {\n        throw new Error();\n      }\n      return await button.click();\n    } catch {\n      throw new Error('Cannot click Replace file button, it is not visible.');\n    }\n  }\n\n  /**\n   * Clicks the attached file to download it.\n   */\n  public async clickAttachedFile(): Promise<void> {\n    try {\n      const file = await this.locatorFor('a')();\n      return await file.click();\n    } catch {\n      throw new Error('Unable to find the attached file.');\n    }\n  }\n\n  /**\n   * Clicks the attached file's delete button.\n   */\n  public async clickAttachedFileDeleteButton(): Promise<void> {\n    try {\n      const deleteButton = await this.locatorFor(\n        'button.sky-file-attachment-delete',\n      )();\n      return await deleteButton.click();\n    } catch {\n      throw new Error(\n        \"Unable to find attached file's delete button. Check if a file is attached.\",\n      );\n    }\n  }\n\n  /**\n   * Gets the accepted file types.\n   */\n  public async getAcceptedTypes(): Promise<string | null> {\n    return await (await this.#input()).getAttribute('accept');\n  }\n\n  /**\n   * Gets the custom form error.\n   */\n  public async getCustomError(errorName: string): Promise<SkyFormErrorHarness> {\n    return await this.locatorFor(\n      SkyFormErrorHarness.with({ errorName: errorName }),\n    )();\n  }\n\n  /**\n   * Gets the help inline popover content.\n   */\n  public async getHelpPopoverContent(): Promise<string | undefined> {\n    return await (await this.#getHelpInline()).getPopoverContent();\n  }\n\n  /**\n   * Gets the help inline popover title.\n   */\n  public async getHelpPopoverTitle(): Promise<string | undefined> {\n    return await (await this.#getHelpInline()).getPopoverTitle();\n  }\n\n  /**\n   * Gets the hint text.\n   */\n  public async getHintText(): Promise<string> {\n    return (\n      await (await this.locatorFor('.sky-file-attachment-hint-text')()).text()\n    ).trim();\n  }\n\n  /**\n   * Gets the file attachment label.\n   */\n  public async getLabelText(): Promise<string> {\n    return (await (await this.#getLabel()).text()).trim();\n  }\n\n  /**\n   * Whether a custom error has fired.\n   */\n  public async hasCustomError(errorName: string): Promise<boolean> {\n    return await (await this.#getFormErrors())?.hasError(errorName);\n  }\n\n  /**\n   * Whether the wrong file type error has fired.\n   */\n  public async hasFileTypeError(): Promise<boolean> {\n    return await (await this.#getFormErrors())?.hasError('fileType');\n  }\n\n  /**\n   * Whether the max file size error has fired.\n   */\n  public async hasMaxFileSizeError(): Promise<boolean> {\n    return await (await this.#getFormErrors())?.hasError('maxFileSize');\n  }\n\n  /**\n   * Whether the min file size error has fired.\n   */\n  public async hasMinFileSizeError(): Promise<boolean> {\n    return await (await this.#getFormErrors())?.hasError('minFileSize');\n  }\n\n  /**\n   * Whether the required error has fired.\n   */\n  public async hasRequiredError(): Promise<boolean> {\n    return await (await this.#getFormErrors())?.hasError('required');\n  }\n\n  /**\n   * Whether file attachment is disabled.\n   */\n  public async isDisabled(): Promise<boolean> {\n    return (await (await this.#getButton()).getAttribute('disabled')) !== null;\n  }\n\n  /**\n   * Whether file attachment is required.\n   */\n  public async isRequired(): Promise<boolean> {\n    return await (\n      await this.#getLabel()\n    ).hasClass('sky-control-label-required');\n  }\n\n  /**\n   * Whether file attachment has stacked enabled.\n   */\n  public async isStacked(): Promise<boolean> {\n    return await (await this.host()).hasClass('sky-form-field-stacked');\n  }\n\n  /**\n   * Attaches a file.\n   * Be sure to include `provideSkyFileReaderTesting` as a provider when calling this function in tests.\n   *  @example\n   * ```typescript\n   * TestBed.configureTestingModule({\n   *   providers: [provideSkyFileReaderTesting()]\n   * });\n   * ```\n   */\n  public async attachFile(file: File): Promise<void> {\n    return await this.#dropFile(file);\n  }\n\n  async #dropFile(file: File): Promise<void> {\n    const attachLocation = await this.locatorFor(\n      '.sky-file-attachment-upload',\n    )();\n\n    const dataTransfer = new DataTransfer() as TestDataTransfer;\n    dataTransfer.items.add(file);\n\n    return await attachLocation.dispatchEvent('drop', {\n      dataTransfer,\n    });\n  }\n\n  async #getFormErrors(): Promise<SkyFormErrorsHarness> {\n    return await this.locatorFor(SkyFormErrorsHarness)();\n  }\n\n  async #getHelpInline(): Promise<SkyHelpInlineHarness> {\n    const harness = await this.locatorForOptional(SkyHelpInlineHarness)();\n\n    if (harness) {\n      return harness;\n    }\n\n    throw Error('No help inline found.');\n  }\n}\n","import { SkyInputHarness } from '@skyux/core/testing';\n\n/**\n * Harness to interact with the file drop link upload input harness.\n */\nexport class SkyFileDropLinkUploadInputHarness extends SkyInputHarness {\n  /**\n   * @internal\n   */\n  public static hostSelector = 'input.sky-form-control';\n\n  /**\n   * Gets the input aria-label\n   */\n  public async getAriaLabel(): Promise<string | null> {\n    return await (await this.host()).getAttribute('aria-label');\n  }\n}\n","import { SkyComponentHarness } from '@skyux/core/testing';\n\nimport { SkyInputBoxHarness } from '../../input-box/input-box-harness';\n\nimport { SkyFileDropLinkUploadInputHarness } from './file-drop-link-upload-input-harness';\n\n/**\n * Harness for interacting with file drop component's link upload feature in tests.\n * @internal\n */\nexport class SkyFileDropLinkUploadHarness extends SkyComponentHarness {\n  /**\n   * @internal\n   */\n  public static hostSelector = '.sky-file-drop-link';\n\n  #input = this.locatorFor(SkyFileDropLinkUploadInputHarness);\n  #inputBoxHarness = this.locatorFor(SkyInputBoxHarness);\n  #button = this.locatorFor('button.sky-btn-primary');\n\n  /**\n   * Clicks the `Done` button\n   */\n  public async clickDoneButton(): Promise<void> {\n    if (await this.#isDoneDisabled()) {\n      throw new Error(\n        'Done button is disabled and cannot be clicked. Enter text to enable link upload.',\n      );\n    }\n    return await (await this.#button()).click();\n  }\n\n  /**\n   * Enters text into the link upload input.\n   */\n  public async enterText(link: string): Promise<void> {\n    return await (await this.#input()).setValue(link);\n  }\n\n  /**\n   * Gets the link upload aria-label.\n   */\n  public async getAriaLabel(): Promise<string | null> {\n    return await (await this.#input()).getAriaLabel();\n  }\n\n  /**\n   * Gets the hint text.\n   */\n  public async getHintText(): Promise<string | undefined> {\n    return await (await this.#inputBoxHarness()).getHintText();\n  }\n\n  async #isDoneDisabled(): Promise<boolean> {\n    return (await (await this.#button()).getAttribute('disabled')) !== null;\n  }\n}\n","import { EventData, HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyComponentHarness } from '@skyux/core/testing';\nimport { SkyHelpInlineHarness } from '@skyux/help-inline/testing';\n\nimport { SkyFormErrorHarness } from '../../form-error/form-error-harness';\nimport { SkyFormErrorsHarness } from '../../form-error/form-errors-harness';\n\nimport { SkyFileDropHarnessFilters } from './file-drop-harness-filters';\nimport { SkyFileDropLinkUploadHarness } from './file-drop-link-upload-harness';\n\n/**\n * Harness for interacting with a file drop component in tests.\n */\nexport class SkyFileDropHarness extends SkyComponentHarness {\n  /**\n   * @internal\n   */\n  public static hostSelector = 'sky-file-drop';\n\n  #getDropTarget = this.locatorFor('.sky-file-drop-target');\n  #input = this.locatorFor('input[type=\"file\"]');\n  #fileUploadButton = this.locatorFor('button.sky-file-drop-target');\n  #label = this.locatorFor('.sky-file-drop-label-text');\n  #formErrors = this.locatorForAll(SkyFormErrorsHarness);\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a\n   * `SkyFileDropHarness` that meets certain criteria.\n   */\n  public static with(\n    filters: SkyFileDropHarnessFilters,\n  ): HarnessPredicate<SkyFileDropHarness> {\n    return SkyFileDropHarness.getDataSkyIdPredicate(filters);\n  }\n\n  /**\n   * Clicks the file drop target.\n   */\n  public async clickFileDropTarget(): Promise<void> {\n    return await (await this.#fileUploadButton()).click();\n  }\n\n  /**\n   * Clicks the help inline button.\n   */\n  public async clickHelpInline(): Promise<void> {\n    return await (await this.#getHelpInline()).click();\n  }\n\n  /**\n   * Clicks the link upload `Done` button'.\n   */\n  public async clickLinkUploadDoneButton(): Promise<void> {\n    return await (await this.#getLinkUpload()).clickDoneButton();\n  }\n\n  /**\n   * Enters text into the link upload input.\n   */\n  public async enterLinkUploadText(link: string): Promise<void> {\n    return await (await this.#getLinkUpload()).enterText(link);\n  }\n\n  /**\n   * Gets the accepted file types.\n   */\n  public async getAcceptedTypes(): Promise<string | null> {\n    return await (await this.#input()).getAttribute('accept');\n  }\n\n  /**\n   * Gets the custom form error.\n   */\n  public async getCustomError(errorName: string): Promise<SkyFormErrorHarness> {\n    return await this.locatorFor(\n      SkyFormErrorHarness.with({ errorName: errorName }),\n    )();\n  }\n\n  /**\n   * Gets the aria-label for the file upload button.\n   */\n  public async getFileUploadAriaLabel(): Promise<string | null> {\n    return await (await this.#fileUploadButton()).getAttribute('aria-label');\n  }\n\n  /**\n   * Gets the help inline popover content.\n   */\n  public async getHelpPopoverContent(): Promise<string | undefined> {\n    return await (await this.#getHelpInline()).getPopoverContent();\n  }\n\n  /**\n   * Gets the help inline popover title.\n   */\n  public async getHelpPopoverTitle(): Promise<string | undefined> {\n    return await (await this.#getHelpInline()).getPopoverTitle();\n  }\n\n  /**\n   * Gets the hint text.\n   */\n  public async getHintText(): Promise<string> {\n    return (\n      await (await this.locatorFor('.sky-file-drop-hint-text')()).text()\n    ).trim();\n  }\n\n  /**\n   * Gets the label text.\n   */\n  public async getLabelText(): Promise<string> {\n    return (await (await this.#label()).text()).trim();\n  }\n\n  /**\n   * Gets the link upload aria-label.\n   */\n  public async getLinkUploadAriaLabel(): Promise<string | null> {\n    return await (await this.#getLinkUpload()).getAriaLabel();\n  }\n\n  /**\n   * Gets the link upload hint text.\n   */\n  public async getLinkUploadHintText(): Promise<string | undefined> {\n    return await (await this.#getLinkUpload()).getHintText();\n  }\n\n  /**\n   * Whether a custom form error has fired.\n   */\n  public async hasCustomError(errorName: string): Promise<boolean> {\n    return await (await this.#getFormErrors()).hasError(errorName);\n  }\n\n  /**\n   * Whether the file type error has fired.\n   */\n  public async hasFileTypeError(): Promise<boolean> {\n    return await (await this.#getFormErrors()).hasError('fileType');\n  }\n\n  /**\n   * Whether the max file size error has fired.\n   */\n  public async hasMaxFileSizeError(): Promise<boolean> {\n    return await (await this.#getFormErrors()).hasError('maxFileSize');\n  }\n\n  /**\n   * Whether the min file size error has fired.\n   */\n  public async hasMinFileSizeError(): Promise<boolean> {\n    return await (await this.#getFormErrors()).hasError('minFileSize');\n  }\n\n  /**\n   * Whether the required error has fired.\n   */\n  public async hasRequiredError(): Promise<boolean> {\n    return await (await this.#getFormErrors()).hasError('required');\n  }\n\n  /**\n   * Whether the validate error from the customer validation has fired.\n   */\n  public async hasValidateFnError(): Promise<boolean> {\n    return await (await this.#getFormErrors()).hasError('validate');\n  }\n\n  /**\n   * Whether label text is hidden.\n   */\n  public async isLabelHidden(): Promise<boolean> {\n    return await (\n      await this.locatorFor('legend.sky-control-label')()\n    ).hasClass('sky-screen-reader-only');\n  }\n\n  /**\n   * Whether file drop is required.\n   */\n  public async isRequired(): Promise<boolean> {\n    return await (await this.#label()).hasClass('sky-control-label-required');\n  }\n\n  /**\n   * Whether file drop has stacked enabled.\n   */\n  public async isStacked(): Promise<boolean> {\n    return await (await this.host()).hasClass('sky-form-field-stacked');\n  }\n\n  /**\n   * Loads a single file.\n   * Be sure to include `provideSkyFileReaderTesting` as a provider when calling this function in tests.\n   *  @example\n   * ```typescript\n   * TestBed.configureTestingModule({\n   *   providers: [provideSkyFileReaderTesting()]\n   * });\n   * ``\n   */\n  public async loadFile(file: File): Promise<void> {\n    await this.#dropFiles([file]);\n  }\n\n  /**\n   * Loads multiple files.\n   * Be sure to include `provideSkyFileReaderTesting` as a provider when calling this function in tests.\n   *  @example\n   * ```typescript\n   * TestBed.configureTestingModule({\n   *   providers: [provideSkyFileReaderTesting()]\n   * });\n   * ``\n   */\n  public async loadFiles(files: File[] | null): Promise<void> {\n    return await this.#dropFiles(files);\n  }\n\n  async #dropFiles(files: File[] | null): Promise<void> {\n    const dropTarget = await this.#getDropTarget();\n\n    type TestDataTransfer = DataTransfer & { [key: string]: EventData };\n\n    const dataTransfer = new DataTransfer() as TestDataTransfer;\n\n    files?.forEach((file) => {\n      dataTransfer.items.add(file);\n    });\n\n    await dropTarget.dispatchEvent('drop', {\n      dataTransfer,\n    });\n  }\n\n  async #getFormErrors(): Promise<SkyFormErrorsHarness> {\n    return (await this.#formErrors())[1];\n  }\n\n  async #getHelpInline(): Promise<SkyHelpInlineHarness> {\n    const harness = await this.locatorForOptional(SkyHelpInlineHarness)();\n\n    if (harness) {\n      return harness;\n    }\n\n    throw Error('No help inline found.');\n  }\n\n  async #getLinkUpload(): Promise<SkyFileDropLinkUploadHarness> {\n    const linkUpload = await this.locatorForOptional(\n      SkyFileDropLinkUploadHarness,\n    )();\n\n    if (linkUpload) {\n      return linkUpload;\n    }\n\n    throw new Error(\n      'Link upload cannot be found. Set `allowLinks` property to `true`.',\n    );\n  }\n}\n","import { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';\n\nimport { SkyFileItemHarnessFilters } from './file-item-harness-filters';\n\n/**\n * Harness for interacting with a file item component in tests.\n */\nexport class SkyFileItemHarness extends ComponentHarness {\n  /**\n   * @internal\n   */\n  public static hostSelector = 'sky-file-item';\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a\n   * `SkyFileItemHarness` that meets certain criteria.\n   */\n  public static with(\n    filters: SkyFileItemHarnessFilters,\n  ): HarnessPredicate<SkyFileItemHarness> {\n    return new HarnessPredicate(SkyFileItemHarness, filters).addOption(\n      'fileName',\n      filters.fileName,\n      async (harness, fileName) => {\n        const harnessFileName = await harness.getFileName();\n        return await HarnessPredicate.stringMatches(harnessFileName, fileName);\n      },\n    );\n  }\n\n  /**\n   * Clicks the delete button.\n   */\n  public async clickDeleteButton(): Promise<void> {\n    return await (await this.locatorFor('.sky-file-item-btn-delete')()).click();\n  }\n\n  /**\n   * Gets the file name.\n   */\n  public async getFileName(): Promise<string> {\n    return await (await this.locatorFor('.sky-file-item-name')()).text();\n  }\n\n  /**\n   * Gets the file size.\n   */\n  public async getFileSize(): Promise<string> {\n    const size = await (await this.locatorFor('.sky-file-item-size')()).text();\n    return size.substring(1, size.length - 1);\n  }\n}\n","import { Provider } from '@angular/core';\nimport { provideSkyFileReaderTesting } from '@skyux/core/testing';\n\n/**\n * Provides mocks for file attachment testing.\n * @example\n * ```typescript\n * TestBed.configureTestingModule({\n *   providers: [provideSkyFileAttachmentTesting()]\n * });\n * ```\n */\nexport function provideSkyFileAttachmentTesting(): Provider[] {\n  return [provideSkyFileReaderTesting()];\n}\n","import { HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyComponentHarness } from '@skyux/core/testing';\nimport {\n  SkyFieldGroupHeadingLevel,\n  SkyFieldGroupHeadingStyle,\n} from '@skyux/forms';\nimport { SkyHelpInlineHarness } from '@skyux/help-inline/testing';\n\nimport { SkyFieldGroupHarnessFilters } from './field-group-harness-filters';\n\n/**\n * Harness for interacting with a field group component in tests.\n */\nexport class SkyFieldGroupHarness extends SkyComponentHarness {\n  /**\n   * @internal\n   */\n  public static hostSelector = 'sky-field-group';\n\n  #getLegend = this.locatorFor('legend');\n  #getLegendH3 = this.locatorForOptional('legend h3');\n  #getLegendH4 = this.locatorForOptional('legend h4');\n  #getLegendHeading = this.locatorFor('legend h3,h4');\n  #getHintText = this.locatorForOptional('.sky-field-group-hint-text');\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a\n   * `SkyFieldGroupHarness` that meets certain criteria.\n   */\n  public static with(\n    filters: SkyFieldGroupHarnessFilters,\n  ): HarnessPredicate<SkyFieldGroupHarness> {\n    return SkyFieldGroupHarness.getDataSkyIdPredicate(filters);\n  }\n\n  /**\n   * Gets the field group's heading text. If `headingHidden` is true,\n   * the text will still be returned.\n   */\n  public async getHeadingText(): Promise<string | undefined> {\n    return await (await this.#getLegendHeading()).text();\n  }\n\n  /**\n   * Gets the field group's hint text.\n   */\n  public async getHintText(): Promise<string> {\n    const hintText = await this.#getHintText();\n\n    return (await hintText?.text())?.trim() ?? '';\n  }\n\n  /**\n   * Whether the heading is hidden.\n   */\n  public async getHeadingHidden(): Promise<boolean> {\n    return await (await this.#getLegend()).hasClass('sky-screen-reader-only');\n  }\n\n  /**\n   * Whether the field group is stacked.\n   */\n  public async getStacked(): Promise<boolean> {\n    const host = await this.host();\n\n    return await host.hasClass('sky-field-group-stacked');\n  }\n\n  /**\n   * The semantic heading level used for the field group.\n   */\n  public async getHeadingLevel(): Promise<SkyFieldGroupHeadingLevel> {\n    const h3 = await this.#getLegendH3();\n\n    return h3 ? 3 : 4;\n  }\n\n  /**\n   * The heading style used for the field group.\n   */\n  public async getHeadingStyle(): Promise<SkyFieldGroupHeadingStyle> {\n    const heading = (await this.#getLegendH3()) || (await this.#getLegendH4());\n\n    return (await heading?.hasClass('sky-font-heading-3')) ? 3 : 4;\n  }\n\n  /**\n   * Clicks the help inline button.\n   */\n  public async clickHelpInline(): Promise<void> {\n    await (await this.#getHelpInline()).click();\n  }\n\n  /**\n   * Gets the help popover content.\n   */\n  public async getHelpPopoverContent(): Promise<string | undefined> {\n    return await (await this.#getHelpInline()).getPopoverContent();\n  }\n\n  /**\n   * Gets the help popover title.\n   */\n  public async getHelpPopoverTitle(): Promise<string | undefined> {\n    return await (await this.#getHelpInline()).getPopoverTitle();\n  }\n\n  async #getHelpInline(): Promise<SkyHelpInlineHarness> {\n    const harness = await this.locatorForOptional(\n      SkyHelpInlineHarness.with({\n        ancestor: '.sky-field-group > .sky-field-group-legend',\n      }),\n    )();\n\n    if (harness) {\n      return harness;\n    }\n    throw Error('No help inline found.');\n  }\n}\n","import { DebugElement } from '@angular/core';\nimport { ComponentFixture } from '@angular/core/testing';\nimport { By } from '@angular/platform-browser';\nimport { SkyAppTestUtility } from '@skyux-sdk/testing';\n\n/**\n * Allows interaction with a SKY UX radio buttons within a radio group.\n * @deprecated Use `SkyRadioHarness` instead.\n * @internal\n */\nexport class SkyRadioFixture {\n  #debugEl: DebugElement;\n  #fixture: ComponentFixture<any>;\n\n  constructor(fixture: ComponentFixture<any>, skyTestId: string) {\n    this.#fixture = fixture;\n    this.#debugEl = SkyAppTestUtility.getDebugElementByTestId(\n      fixture,\n      skyTestId,\n      'sky-radio-group',\n    );\n  }\n\n  /**\n   * The selected radio button value.\n   */\n  public get value(): string {\n    const selectedRadio = this.#debugEl.query(\n      By.css('sky-radio input:checked'),\n    );\n    const selectedValue = selectedRadio && selectedRadio.nativeElement.value;\n\n    return selectedValue;\n  }\n\n  /**\n   * Set the selected radio button value.\n   */\n  public set value(value: string) {\n    const allRadioInputs = this.#getAllRadioInputEls();\n\n    allRadioInputs.forEach((input, index) => {\n      if (input.nativeElement.value === value) {\n        input.nativeElement.checked = true;\n      } else {\n        input.nativeElement.checked = false;\n      }\n    });\n  }\n\n  /**\n   * A flag indicating if every radio button in the radio group is disabled.\n   */\n  public get disabled(): boolean {\n    const allRadioButtons = this.#getAllSkyRadioButtonEls();\n\n    for (let i = 0; i < allRadioButtons.length; i++) {\n      if (!this.#radioButtonDisabled(i)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * Set the disabled value for all radio buttons.\n   */\n  public set disabled(value: boolean) {\n    const allRadioButtons = this.#getAllSkyRadioButtonEls();\n\n    allRadioButtons.forEach((button, index) => {\n      this.#setRadioButtonDisabled(index, value);\n    });\n  }\n\n  #getAllSkyRadioButtonEls(): DebugElement[] {\n    return this.#debugEl.queryAll(By.css('.sky-radio-group sky-radio'));\n  }\n\n  #getAllRadioInputEls(): DebugElement[] {\n    return this.#debugEl.queryAll(By.css('.sky-radio-group sky-radio input'));\n  }\n\n  #getRadioButtonInputEl(index: number): DebugElement | undefined {\n    const allRadioInputs = this.#getAllRadioInputEls();\n\n    if (allRadioInputs && allRadioInputs[index]) {\n      return allRadioInputs[index];\n    }\n    /* istanbul ignore next */\n    return;\n  }\n\n  #radioButtonDisabled(index: number): boolean {\n    const radioButton = this.#getRadioButtonInputEl(index);\n\n    return radioButton && radioButton.nativeElement.disabled;\n  }\n\n  #setRadioButtonDisabled(index: number, value: boolean): void {\n    const radioButton = this.#getRadioButtonInputEl(index);\n\n    /* istanbul ignore else */\n    if (radioButton) {\n      radioButton.nativeElement.disabled = value;\n\n      this.#fixture.detectChanges();\n    }\n  }\n}\n","import { ComponentHarness } from '@angular/cdk/testing';\n\n/**\n * Harness for interacting with a radio label component in tests.\n * @internal\n */\nexport class SkyRadioLabelHarness extends ComponentHarness {\n  /**\n   * @internal\n   */\n  public static hostSelector = 'sky-radio-label';\n\n  #getLabelContent = this.locatorFor('.sky-switch-label');\n\n  /**\n   * Gets the text content of the radio label.\n   */\n  public async getText(): Promise<string> {\n    return await (await this.#getLabelContent()).text();\n  }\n}\n","import { HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyComponentHarness } from '@skyux/core/testing';\nimport { SkyHelpInlineHarness } from '@skyux/help-inline/testing';\n\nimport { SkyRadioHarnessFilters } from './radio-harness-filters';\nimport { SkyRadioLabelHarness } from './radio-label-harness';\n\n/**\n * Harness for interacting with a radio button component in tests.\n */\nexport class SkyRadioHarness extends SkyComponentHarness {\n  /**\n   * @internal\n   */\n  public static hostSelector = 'sky-radio';\n\n  #getHintText = this.locatorForOptional('.sky-radio-hint-text');\n\n  #getInput = this.locatorFor('input.sky-radio-input');\n\n  #getLabel = this.locatorForOptional(SkyRadioLabelHarness);\n\n  #getLabelText = this.locatorForOptional(\n    'span.sky-switch-label.sky-radio-label-text',\n  );\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a\n   * `SkyRadioHarness` that meets certain criteria.\n   */\n  public static with(\n    filters: SkyRadioHarnessFilters,\n  ): HarnessPredicate<SkyRadioHarness> {\n    return SkyRadioHarness.getDataSkyIdPredicate(filters);\n  }\n\n  /**\n   * Blurs the radio button.\n   */\n  public async blur(): Promise<void> {\n    await (await this.#getInput()).blur();\n  }\n\n  /**\n   * Puts the radio button in a checked state if it is currently unchecked.\n   */\n  public async check(): Promise<void> {\n    if (await this.isDisabled()) {\n      throw new Error(\n        'Could not check the radio button because it is disabled.',\n      );\n    } else if (!(await this.isChecked())) {\n      await (await this.#getInput()).click();\n    }\n  }\n\n  /**\n   * Clicks the help inline button.\n   */\n  public async clickHelpInline(): Promise<void> {\n    await (await this.#getHelpInline()).click();\n  }\n\n  /**\n   * Focuses the radio button.\n   */\n  public async focus(): Promise<void> {\n    await (await this.#getInput()).focus();\n  }\n\n  /**\n   * Gets the radio button's aria-label.\n   */\n  public async getAriaLabel(): Promise<string | null> {\n    return await (await this.#getInput()).getAttribute('aria-label');\n  }\n\n  /**\n   * Gets the radio button's aria-labelledby.\n   */\n  public async getAriaLabelledby(): Promise<string | null> {\n    return await (await this.#getInput()).getAttribute('aria-labelledby');\n  }\n\n  /**\n   * Gets the help popover content.\n   */\n  public async getHelpPopoverContent(): Promise<string | undefined> {\n    return await (await this.#getHelpInline()).getPopoverContent();\n  }\n\n  /**\n   * Gets the help popover title.\n   */\n  public async getHelpPopoverTitle(): Promise<string | undefined> {\n    return await (await this.#getHelpInline()).getPopoverTitle();\n  }\n\n  /**\n   * Gets the radio button's hint text.\n   */\n  public async getHintText(): Promise<string> {\n    const hintText = await this.#getHintText();\n\n    return (await hintText?.text())?.trim() ?? '';\n  }\n\n  /**\n   * Whether the label is hidden. Only supported when using the `labelText` input to set the label.\n   */\n  public async getLabelHidden(): Promise<boolean> {\n    const labelText = await this.#getLabelText();\n    const label = await this.#getLabel();\n\n    if (label) {\n      throw new Error(\n        '`labelHidden` is only supported when setting the radio label via the `labelText` input.',\n      );\n    } else {\n      return !!(await labelText?.hasClass('sky-screen-reader-only'));\n    }\n  }\n\n  /**\n   * Gets the radio button's label text. If the label is set via `labelText` and `labelHidden` is true,\n   * the text will still be returned.\n   */\n  public async getLabelText(): Promise<string | undefined> {\n    const labelText = await this.#getLabelText();\n\n    if (labelText) {\n      return await labelText.text();\n    } else {\n      return await (await this.#getLabel())?.getText();\n    }\n  }\n\n  /**\n   * Gets the radio button's name.\n   */\n  public async getName(): Promise<string | null> {\n    return await (await this.#getInput()).getAttribute('name');\n  }\n\n  /**\n   * Whether the radio button is checked.\n   */\n  public async isChecked(): Promise<boolean> {\n    return await (await this.#getInput()).getProperty<boolean>('checked');\n  }\n\n  /**\n   * Whether the radio button is disabled.\n   */\n  public async isDisabled(): Promise<boolean> {\n    const disabled = await (await this.#getInput()).getAttribute('disabled');\n    return disabled !== null;\n  }\n\n  /**\n   * Whether the radio button is focused.\n   */\n  public async isFocused(): Promise<boolean> {\n    return await (await this.#getInput()).isFocused();\n  }\n\n  async #getHelpInline(): Promise<SkyHelpInlineHarness> {\n    const harness = await this.locatorForOptional(SkyHelpInlineHarness)();\n\n    if (harness) {\n      return harness;\n    }\n\n    throw Error('No help inline found.');\n  }\n}\n","import { HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyComponentHarness } from '@skyux/core/testing';\nimport {\n  SkyRadioGroupHeadingLevel,\n  SkyRadioGroupHeadingStyle,\n} from '@skyux/forms';\nimport { SkyHelpInlineHarness } from '@skyux/help-inline/testing';\n\nimport { SkyFormErrorHarness } from '../form-error/form-error-harness';\nimport { SkyFormErrorsHarness } from '../form-error/form-errors-harness';\n\nimport { SkyRadioGroupHarnessFilters } from './radio-group-harness-filters';\nimport { SkyRadioHarness } from './radio-harness';\nimport { SkyRadioHarnessFilters } from './radio-harness-filters';\n\n/**\n * Harness for interacting with a radio group component in tests.\n */\nexport class SkyRadioGroupHarness extends SkyComponentHarness {\n  /**\n   * @internal\n   */\n  public static hostSelector = 'sky-radio-group';\n\n  #getHeading = this.locatorFor('.sky-radio-group-legend span');\n  #getHeadingWrapper = this.locatorForOptional('.sky-radio-group-legend');\n  #getHintText = this.locatorForOptional('.sky-radio-group-hint-text');\n  #getLegendDefault = this.locatorForOptional(\n    'legend .sky-radio-group-heading-text',\n  );\n  #getLegendH3 = this.locatorForOptional('legend h3');\n  #getLegendH4 = this.locatorForOptional('legend h4');\n  #getLegendH5 = this.locatorForOptional('legend h5');\n  #getLegendHeading = this.locatorForOptional(\n    'legend h3,h4,h5,.sky-radio-group-heading-text',\n  );\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a\n   * `SkyRadioGroupHarness` that meets certain criteria.\n   */\n  public static with(\n    filters: SkyRadioGroupHarnessFilters,\n  ): HarnessPredicate<SkyRadioGroupHarness> {\n    return SkyRadioGroupHarness.getDataSkyIdPredicate(filters);\n  }\n\n  /**\n   * Clicks the help inline button.\n   */\n  public async clickHelpInline(): Promise<void> {\n    await (await this.#getHelpInline()).click();\n  }\n\n  /**\n   * Gets the custom form error.\n   */\n  public async getCustomError(errorName: string): Promise<SkyFormErrorHarness> {\n    return await this.locatorFor(\n      SkyFormErrorHarness.with({ errorName: errorName }),\n    )();\n  }\n\n  /**\n   * Whether the heading is hidden.\n   */\n  public async getHeadingHidden(): Promise<boolean> {\n    return await ((\n      await this.#getHeadingWrapper()\n    )?.hasClass('sky-screen-reader-only') ?? true);\n  }\n\n  /**\n   * The semantic heading level used for the radio group. Returns undefined if heading level is not set.\n   */\n  public async getHeadingLevel(): Promise<\n    SkyRadioGroupHeadingLevel | undefined\n  > {\n    const h3 = await this.#getLegendH3();\n    const h4 = await this.#getLegendH4();\n    const h5 = await this.#getLegendH5();\n\n    if (h3) {\n      return 3;\n    } else if (h4) {\n      return 4;\n    } else if (h5) {\n      return 5;\n    } else {\n      return undefined;\n    }\n  }\n\n  /**\n   * The heading style used for the radio group.\n   */\n  public async getHeadingStyle(): Promise<SkyRadioGroupHeadingStyle> {\n    const headingOrLabel =\n      (await this.#getLegendH3()) ||\n      (await this.#getLegendH4()) ||\n      (await this.#getLegendH5()) ||\n      (await this.#getLegendDefault());\n\n    const isHeadingStyle3 =\n      await headingOrLabel?.hasClass('sky-font-heading-3');\n    const isHeadingStyle4 =\n      await headingOrLabel?.hasClass('sky-font-heading-4');\n\n    if (isHeadingStyle3) {\n      return 3;\n    } else if (isHeadingStyle4) {\n      return 4;\n    } else {\n      return 5;\n    }\n  }\n\n  /**\n   * Gets the radio group's heading text. If `headingHidden` is true,\n   * the text will still be returned.\n   */\n  public async getHeadingText(): Promise<string | undefined> {\n    return await ((await this.#getLegendHeading())?.text() ?? '');\n  }\n\n  /**\n   * Gets the help popover content.\n   */\n  public async getHelpPopoverContent(): Promise<string | undefined> {\n    return await (await this.#getHelpInline()).getPopoverContent();\n  }\n\n  /**\n   * Gets the help popover title.\n   */\n  public async getHelpPopoverTitle(): Promise<string | undefined> {\n    return await (await this.#getHelpInline()).getPopoverTitle();\n  }\n\n  /**\n   * Gets the radio group's hint text.\n   */\n  public async getHintText(): Promise<string> {\n    const hintText = await this.#getHintText();\n\n    return (await hintText?.text())?.trim() ?? '';\n  }\n\n  /**\n   * Gets a specific radio button based on the filter criteria.\n   * @param filter The filter criteria.\n   */\n  public async getRadioButton(\n    filter: SkyRadioHarnessFilters,\n  ): Promise<SkyRadioHarness> {\n    return await this.locatorFor(SkyRadioHarness.with(filter))();\n  }\n\n  /**\n   * Gets an array of radio buttons based on the filter criteria.\n   * If no filter is provided, returns all radio buttons.\n   * @param filters The optional filter criteria.\n   */\n  public async getRadioButtons(\n    filters?: SkyRadioHarnessFilters,\n  ): Promise<SkyRadioHarness[]> {\n    return await this.locatorForAll(SkyRadioHarness.with(filters || {}))();\n  }\n\n  /**\n   * Whether the radio group is required.\n   */\n  public async getRequired(): Promise<boolean> {\n    const headingWrapper = await this.#getHeading();\n\n    return await headingWrapper.hasClass('sky-control-label-required');\n  }\n\n  /**\n   * Whether the radio group is stacked.\n   */\n  public async getStacked(): Promise<boolean> {\n    const host = await this.host();\n    const heading =\n      (await this.#getLegendH3()) ||\n      (await this.#getLegendH4()) ||\n      (await this.#getLegendH5());\n    const label = await this.#getLegendDefault();\n\n    return (\n      ((await host.hasClass('sky-form-field-stacked')) && !!label) ||\n      ((await host.hasClass('sky-field-group-stacked')) && !!heading)\n    );\n  }\n\n  /**\n   * Whether a form error with the specified name has fired.\n   */\n  public async hasError(errorName: string): Promise<boolean> {\n    return await (await this.#getFormErrors()).hasError(errorName);\n  }\n\n  async #getFormErrors(): Promise<SkyFormErrorsHarness> {\n    return await this.locatorFor(SkyFormErrorsHarness)();\n  }\n\n  async #getHelpInline(): Promise<SkyHelpInlineHarness> {\n    const harness = await this.locatorForOptional(\n      SkyHelpInlineHarness.with({\n        ancestor: '.sky-radio-group > .sky-radio-group-legend',\n      }),\n    )();\n\n    if (harness) {\n      return harness;\n    }\n\n    throw Error('No help inline found.');\n  }\n}\n","import { SkyComponentHarness } from '@skyux/core/testing';\n\n/**\n * Harness to interact with a selection box description component in tests.\n * @internal\n */\nexport class SkySelectionBoxDescriptionHarness extends SkyComponentHarness {\n  /**\n   * @internal\n   */\n  public static hostSelector = 'sky-selection-box-description';\n\n  /**\n   * Gets the description text.\n   */\n  public async getText(): Promise<string> {\n    return (await (await this.host()).text()).trim();\n  }\n}\n","import { SkyComponentHarness } from '@skyux/core/testing';\n\n/**\n * Harness to interact with a selection box header component in tests.\n * @internal\n */\nexport class SkySelectionBoxHeaderHarness extends SkyComponentHarness {\n  /**\n   * @internal\n   */\n  public static hostSelector = 'sky-selection-box-header';\n\n  /**\n   * Gets the header text.\n   */\n  public async getText(): Promise<string> {\n    return (await (await this.host()).text()).trim();\n  }\n}\n","import { HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyComponentHarness } from '@skyux/core/testing';\nimport { SkyIconHarness } from '@skyux/icon/testing';\n\nimport { SkyCheckboxHarness } from '../checkbox/checkbox-harness';\nimport { SkyRadioHarness } from '../radio/radio-harness';\n\nimport { SkySelectionBoxDescriptionHarness } from './selection-box-description-harness';\nimport { SkySelectionBoxHarnessFilters } from './selection-box-harness-filters';\nimport { SkySelectionBoxHeaderHarness } from './selection-box-header-harness';\n\n/**\n * Harness to interact with a selection box component in tests.\n */\nexport class SkySelectionBoxHarness extends SkyComponentHarness {\n  /**\n   * @internal\n   */\n  public static hostSelector = 'sky-selection-box';\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a\n   * `SkySelectionBoxHarness` that meets certain criteria.\n   */\n  public static with(\n    filters: SkySelectionBoxHarnessFilters,\n  ): HarnessPredicate<SkySelectionBoxHarness> {\n    return SkySelectionBoxHarness.getDataSkyIdPredicate(filters);\n  }\n\n  /**\n   * Gets the checkbox or radio harness for the selection box form control.\n   */\n  public async getControl(): Promise<SkyCheckboxHarness | SkyRadioHarness> {\n    return await this.locatorFor(SkyCheckboxHarness, SkyRadioHarness)();\n  }\n\n  /**\n   * Gets the selection box description text.\n   */\n  public async getDescriptionText(): Promise<string> {\n    const text = await (\n      await this.locatorForOptional(SkySelectionBoxDescriptionHarness)()\n    )?.getText();\n    return text ?? '';\n  }\n\n  /**\n   * Gets the selection box header text.\n   */\n  public async getHeaderText(): Promise<string> {\n    const text = await (\n      await this.locatorForOptional(SkySelectionBoxHeaderHarness)()\n    )?.getText();\n    return text ?? '';\n  }\n\n  /**\n   * Gets the selection box icon, if it exists.\n   */\n  public async getIcon(): Promise<SkyIconHarness | null> {\n    return await this.locatorForOptional(SkyIconHarness)();\n  }\n}\n","import { HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyComponentHarness } from '@skyux/core/testing';\n\nimport { SkySelectionBoxGridHarnessFilters } from './selection-box-grid-harness-filters';\nimport { SkySelectionBoxHarness } from './selection-box-harness';\nimport { SkySelectionBoxHarnessFilters } from './selection-box-harness-filters';\n\n/**\n * Harness for interacting with a selection box grid component in tests.\n */\nexport class SkySelectionBoxGridHarness extends SkyComponentHarness {\n  /**\n   * @internal\n   */\n  public static hostSelector = 'sky-selection-box-grid';\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a\n   * `SkySelectionBoxGridHarness` that meets certain criteria.\n   */\n  public static with(\n    filters: SkySelectionBoxGridHarnessFilters,\n  ): HarnessPredicate<SkySelectionBoxGridHarness> {\n    return SkySelectionBoxGridHarness.getDataSkyIdPredicate(filters);\n  }\n\n  /**\n   * Gets a specific selection box based on the filter criteria.\n   * @param filter The filter criteria.\n   */\n  public async getSelectionBox(\n    filter: SkySelectionBoxHarnessFilters,\n  ): Promise<SkySelectionBoxHarness> {\n    return await this.locatorFor(SkySelectionBoxHarness.with(filter))();\n  }\n\n  /**\n   * Gets an array of selection boxes based on the filter criteria.\n   * If no filter is provided, returns all selection boxes.\n   * @param filters The optional filter criteria.\n   */\n  public async getSelectionBoxes(\n    filters?: SkySelectionBoxHarnessFilters,\n  ): Promise<SkySelectionBoxHarness[]> {\n    return await this.locatorForAll(\n      SkySelectionBoxHarness.with(filters || {}),\n    )();\n  }\n}\n","import { ComponentHarness } from '@angular/cdk/testing';\n\n/**\n * Harness for interacting with a toggle switch label component in tests.\n * @internal\n */\nexport class SkyToggleSwitchLabelHarness extends ComponentHarness {\n  /**\n   * @internal\n   */\n  public static hostSelector = 'sky-toggle-switch-label';\n\n  #getLabelContent = this.locatorFor('span[skyTrim]');\n\n  /**\n   * Gets the text content of the toggle switch label.\n   */\n  public async getText(): Promise<string> {\n    return await (await this.#getLabelContent()).text();\n  }\n}\n","import { HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyComponentHarness } from '@skyux/core/testing';\nimport { SkyHelpInlineHarness } from '@skyux/help-inline/testing';\n\nimport { SkyToggleSwitchHarnessFilters } from './toggle-switch-harness-filters';\nimport { SkyToggleSwitchLabelHarness } from './toggle-switch-label-harness';\n\n/**\n * Harness for interacting with a toggle switch component in tests.\n */\nexport class SkyToggleSwitchHarness extends SkyComponentHarness {\n  /**\n   * @internal\n   */\n  public static hostSelector = 'sky-toggle-switch';\n\n  #getButton = this.locatorFor('button.sky-toggle-switch-button');\n  #getLabel = this.locatorForOptional(SkyToggleSwitchLabelHarness);\n  #getLabelText = this.locatorForOptional('span.sky-toggle-switch-label-text');\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a\n   * `SkyToggleSwitchHarness` that meets certain criteria.\n   */\n  public static with(\n    filters: SkyToggleSwitchHarnessFilters,\n  ): HarnessPredicate<SkyToggleSwitchHarness> {\n    return SkyToggleSwitchHarness.getDataSkyIdPredicate(filters);\n  }\n\n  /**\n   * Blurs the toggle switch.\n   */\n  public async blur(): Promise<void> {\n    await (await this.#getButton()).blur();\n  }\n\n  /**\n   * Clicks the help inline button.\n   */\n  public async clickHelpInline(): Promise<void> {\n    await (await this.#getHelpInline()).click();\n  }\n\n  /**\n   * Puts the toggle switch in a checked state.\n   */\n  public async check(): Promise<void> {\n    if (!(await this.isChecked())) {\n      await this.#toggle();\n    }\n  }\n\n  /**\n   * Focuses the toggle switch.\n   */\n  public async focus(): Promise<void> {\n    await (await this.#getButton()).focus();\n  }\n\n  /**\n   * Gets the help popover content.\n   */\n  public async getHelpPopoverContent(): Promise<string | undefined> {\n    return await (await this.#getHelpInline()).getPopoverContent();\n  }\n\n  /**\n   * Gets the help popover title.\n   */\n  public async getHelpPopoverTitle(): Promise<string | undefined> {\n    return await (await this.#getHelpInline()).getPopoverTitle();\n  }\n\n  /**\n   * Whether the label is hidden. Only supported when using the `labelText` input to set the label.\n   */\n  public async getLabelHidden(): Promise<boolean> {\n    const labelText = await this.#getLabelText();\n    const labelComponent = await this.#getLabel();\n\n    if (labelComponent) {\n      throw new Error(\n        '`labelHidden` is only supported when setting the toggle switch label via the `labelText` input.',\n      );\n    } else {\n      return !(await labelText?.text());\n    }\n  }\n\n  /**\n   * Gets the toggle switch's label text. If the label is set via `labelText` and `labelHidden` is true,\n   * the text will still be returned.\n   */\n  public async getLabelText(): Promise<string | undefined> {\n    const labelText = await (await this.#getLabelText())?.text();\n    const ariaLabel = await this.#getAriaLabel();\n\n    return (\n      labelText || ariaLabel || (await (await this.#getLabel())?.getText())\n    );\n  }\n\n  /**\n   * Whether the toggle switch is checked.\n   */\n  public async isChecked(): Promise<boolean> {\n    return await (\n      await this.#getButton()\n    ).hasClass('sky-toggle-switch-checked');\n  }\n\n  /**\n   * Whether the toggle switch is disabled.\n   */\n  public async isDisabled(): Promise<boolean> {\n    const disabled = await (await this.#getButton()).getAttribute('disabled');\n    return disabled !== null;\n  }\n\n  /**\n   * Whether the toggle switch is focused.\n   */\n  public async isFocused(): Promise<boolean> {\n    return await (await this.#getButton()).isFocused();\n  }\n\n  /**\n   * Puts the toggle switch in an unchecked state.\n   */\n  public async uncheck(): Promise<void> {\n    if (await this.isChecked()) {\n      await this.#toggle();\n    }\n  }\n\n  async #getAriaLabel(): Promise<string | null> {\n    return await (await this.#getButton()).getAttribute('aria-label');\n  }\n\n  async #getHelpInline(): Promise<SkyHelpInlineHarness> {\n    const harness = await this.locatorForOptional(SkyHelpInlineHarness)();\n\n    if (harness) {\n      return harness;\n    }\n\n    throw Error('No help inline found.');\n  }\n\n  async #toggle(): Promise<void> {\n    if (await this.isDisabled()) {\n      throw new Error(\n        'Could not toggle the toggle switch because it is disabled.',\n      );\n    } else {\n      await (await this.#getButton()).click();\n    }\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}