{"version":3,"file":"_date-range-input-harness-chunk.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/datepicker/testing/datepicker-input-harness-base.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/datepicker/testing/calendar-cell-harness.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/datepicker/testing/calendar-harness.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/datepicker/testing/datepicker-trigger-harness-base.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/datepicker/testing/datepicker-input-harness.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/datepicker/testing/date-range-input-harness.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {ComponentHarnessConstructor, HarnessPredicate} from '@angular/cdk/testing';\nimport {MatFormFieldControlHarnessBase} from '@angular/material/form-field/testing/control';\nimport {DatepickerInputHarnessFilters} from './datepicker-harness-filters';\n\n/** Sets up the filter predicates for a datepicker input harness. */\nexport function getInputPredicate<T extends MatDatepickerInputHarnessBase>(\n  type: ComponentHarnessConstructor<T>,\n  options: DatepickerInputHarnessFilters,\n): HarnessPredicate<T> {\n  return new HarnessPredicate(type, options)\n    .addOption('value', options.value, (harness, value) => {\n      return HarnessPredicate.stringMatches(harness.getValue(), value);\n    })\n    .addOption('placeholder', options.placeholder, (harness, placeholder) => {\n      return HarnessPredicate.stringMatches(harness.getPlaceholder(), placeholder);\n    })\n    .addOption('label', options.label, (harness, label) => {\n      return HarnessPredicate.stringMatches(harness.getLabel(), label);\n    });\n}\n\n/** Base class for datepicker input harnesses. */\nexport abstract class MatDatepickerInputHarnessBase extends MatFormFieldControlHarnessBase {\n  /** Whether the input is disabled. */\n  async isDisabled(): Promise<boolean> {\n    return (await this.host()).getProperty<boolean>('disabled');\n  }\n\n  /** Whether the input is required. */\n  async isRequired(): Promise<boolean> {\n    return (await this.host()).getProperty<boolean>('required');\n  }\n\n  /** Gets the value of the input. */\n  async getValue(): Promise<string> {\n    // The \"value\" property of the native input is always defined.\n    return await (await this.host()).getProperty<string>('value');\n  }\n\n  /**\n   * Sets the value of the input. The value will be set by simulating\n   * keypresses that correspond to the given value.\n   */\n  async setValue(newValue: string): Promise<void> {\n    const inputEl = await this.host();\n    await inputEl.clear();\n\n    // We don't want to send keys for the value if the value is an empty\n    // string in order to clear the value. Sending keys with an empty string\n    // still results in unnecessary focus events.\n    if (newValue) {\n      await inputEl.sendKeys(newValue);\n    }\n\n    await inputEl.dispatchEvent('change');\n  }\n\n  /** Gets the placeholder of the input. */\n  async getPlaceholder(): Promise<string> {\n    return await (await this.host()).getProperty<string>('placeholder');\n  }\n\n  /**\n   * Focuses the input and returns a promise that indicates when the\n   * action is complete.\n   */\n  async focus(): Promise<void> {\n    return (await this.host()).focus();\n  }\n\n  /**\n   * Blurs the input and returns a promise that indicates when the\n   * action is complete.\n   */\n  async blur(): Promise<void> {\n    return (await this.host()).blur();\n  }\n\n  /** Whether the input is focused. */\n  async isFocused(): Promise<boolean> {\n    return (await this.host()).isFocused();\n  }\n\n  /** Gets the formatted minimum date for the input's value. */\n  async getMin(): Promise<string | null> {\n    return (await this.host()).getAttribute('min');\n  }\n\n  /** Gets the formatted maximum date for the input's value. */\n  async getMax(): Promise<string | null> {\n    return (await this.host()).getAttribute('max');\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {HarnessPredicate, ComponentHarness} from '@angular/cdk/testing';\nimport {CalendarCellHarnessFilters} from './datepicker-harness-filters';\n\n/** Harness for interacting with a standard Material calendar cell in tests. */\nexport class MatCalendarCellHarness extends ComponentHarness {\n  static hostSelector = '.mat-calendar-body-cell';\n\n  /** Reference to the inner content element inside the cell. */\n  private _content = this.locatorFor('.mat-calendar-body-cell-content');\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a `MatCalendarCellHarness`\n   * that meets certain criteria.\n   * @param options Options for filtering which cell instances are considered a match.\n   * @return a `HarnessPredicate` configured with the given options.\n   */\n  static with(options: CalendarCellHarnessFilters = {}): HarnessPredicate<MatCalendarCellHarness> {\n    return new HarnessPredicate(MatCalendarCellHarness, options)\n      .addOption('text', options.text, (harness, text) => {\n        return HarnessPredicate.stringMatches(harness.getText(), text);\n      })\n      .addOption('selected', options.selected, async (harness, selected) => {\n        return (await harness.isSelected()) === selected;\n      })\n      .addOption('active', options.active, async (harness, active) => {\n        return (await harness.isActive()) === active;\n      })\n      .addOption('disabled', options.disabled, async (harness, disabled) => {\n        return (await harness.isDisabled()) === disabled;\n      })\n      .addOption('today', options.today, async (harness, today) => {\n        return (await harness.isToday()) === today;\n      })\n      .addOption('inRange', options.inRange, async (harness, inRange) => {\n        return (await harness.isInRange()) === inRange;\n      })\n      .addOption(\n        'inComparisonRange',\n        options.inComparisonRange,\n        async (harness, inComparisonRange) => {\n          return (await harness.isInComparisonRange()) === inComparisonRange;\n        },\n      )\n      .addOption('inPreviewRange', options.inPreviewRange, async (harness, inPreviewRange) => {\n        return (await harness.isInPreviewRange()) === inPreviewRange;\n      });\n  }\n\n  /** Gets the text of the calendar cell. */\n  async getText(): Promise<string> {\n    return (await this._content()).text();\n  }\n\n  /** Gets the aria-label of the calendar cell. */\n  async getAriaLabel(): Promise<string> {\n    // We're guaranteed for the `aria-label` to be defined\n    // since this is a private element that we control.\n    return (await this.host()).getAttribute('aria-label') as Promise<string>;\n  }\n\n  /** Whether the cell is selected. */\n  async isSelected(): Promise<boolean> {\n    const host = await this.host();\n    return (await host.getAttribute('aria-pressed')) === 'true';\n  }\n\n  /** Whether the cell is disabled. */\n  async isDisabled(): Promise<boolean> {\n    return this._hasState('disabled');\n  }\n\n  /** Whether the cell is currently activated using keyboard navigation. */\n  async isActive(): Promise<boolean> {\n    return this._hasState('active');\n  }\n\n  /** Whether the cell represents today's date. */\n  async isToday(): Promise<boolean> {\n    return (await this._content()).hasClass('mat-calendar-body-today');\n  }\n\n  /** Selects the calendar cell. Won't do anything if the cell is disabled. */\n  async select(): Promise<void> {\n    return (await this.host()).click();\n  }\n\n  /** Hovers over the calendar cell. */\n  async hover(): Promise<void> {\n    return (await this.host()).hover();\n  }\n\n  /** Moves the mouse away from the calendar cell. */\n  async mouseAway(): Promise<void> {\n    return (await this.host()).mouseAway();\n  }\n\n  /** Focuses the calendar cell. */\n  async focus(): Promise<void> {\n    return (await this.host()).focus();\n  }\n\n  /** Removes focus from the calendar cell. */\n  async blur(): Promise<void> {\n    return (await this.host()).blur();\n  }\n\n  /** Whether the cell is the start of the main range. */\n  async isRangeStart(): Promise<boolean> {\n    return this._hasState('range-start');\n  }\n\n  /** Whether the cell is the end of the main range. */\n  async isRangeEnd(): Promise<boolean> {\n    return this._hasState('range-end');\n  }\n\n  /** Whether the cell is part of the main range. */\n  async isInRange(): Promise<boolean> {\n    return this._hasState('in-range');\n  }\n\n  /** Whether the cell is the start of the comparison range. */\n  async isComparisonRangeStart(): Promise<boolean> {\n    return this._hasState('comparison-start');\n  }\n\n  /** Whether the cell is the end of the comparison range. */\n  async isComparisonRangeEnd(): Promise<boolean> {\n    return this._hasState('comparison-end');\n  }\n\n  /** Whether the cell is inside of the comparison range. */\n  async isInComparisonRange(): Promise<boolean> {\n    return this._hasState('in-comparison-range');\n  }\n\n  /** Whether the cell is the start of the preview range. */\n  async isPreviewRangeStart(): Promise<boolean> {\n    return this._hasState('preview-start');\n  }\n\n  /** Whether the cell is the end of the preview range. */\n  async isPreviewRangeEnd(): Promise<boolean> {\n    return this._hasState('preview-end');\n  }\n\n  /** Whether the cell is inside of the preview range. */\n  async isInPreviewRange(): Promise<boolean> {\n    return this._hasState('in-preview');\n  }\n\n  /** Returns whether the cell has a particular CSS class-based state. */\n  private async _hasState(name: string): Promise<boolean> {\n    return (await this.host()).hasClass(`mat-calendar-body-${name}`);\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {HarnessPredicate, ComponentHarness} from '@angular/cdk/testing';\nimport {CalendarHarnessFilters, CalendarCellHarnessFilters} from './datepicker-harness-filters';\nimport {MatCalendarCellHarness} from './calendar-cell-harness';\n\n/** Possible views of a `MatCalendarHarness`. */\nexport enum CalendarView {\n  MONTH,\n  YEAR,\n  MULTI_YEAR,\n}\n\n/** Harness for interacting with a standard Material calendar in tests. */\nexport class MatCalendarHarness extends ComponentHarness {\n  static hostSelector = '.mat-calendar';\n\n  /** Queries for the calendar's period toggle button. */\n  private _periodButton = this.locatorFor('.mat-calendar-period-button');\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a `MatCalendarHarness`\n   * that meets certain criteria.\n   * @param options Options for filtering which calendar instances are considered a match.\n   * @return a `HarnessPredicate` configured with the given options.\n   */\n  static with(options: CalendarHarnessFilters = {}): HarnessPredicate<MatCalendarHarness> {\n    return new HarnessPredicate(MatCalendarHarness, options);\n  }\n\n  /**\n   * Gets a list of cells inside the calendar.\n   * @param filter Optionally filters which cells are included.\n   */\n  async getCells(filter: CalendarCellHarnessFilters = {}): Promise<MatCalendarCellHarness[]> {\n    return this.locatorForAll(MatCalendarCellHarness.with(filter))();\n  }\n\n  /** Gets the current view that is being shown inside the calendar. */\n  async getCurrentView(): Promise<CalendarView> {\n    if (await this.locatorForOptional('mat-multi-year-view')()) {\n      return CalendarView.MULTI_YEAR;\n    }\n\n    if (await this.locatorForOptional('mat-year-view')()) {\n      return CalendarView.YEAR;\n    }\n\n    return CalendarView.MONTH;\n  }\n\n  /** Gets the label of the current calendar view. */\n  async getCurrentViewLabel(): Promise<string> {\n    return (await this._periodButton()).text();\n  }\n\n  /** Changes the calendar view by clicking on the view toggle button. */\n  async changeView(): Promise<void> {\n    return (await this._periodButton()).click();\n  }\n\n  /** Goes to the next page of the current view (e.g. next month when inside the month view). */\n  async next(): Promise<void> {\n    return (await this.locatorFor('.mat-calendar-next-button')()).click();\n  }\n\n  /**\n   * Goes to the previous page of the current view\n   * (e.g. previous month when inside the month view).\n   */\n  async previous(): Promise<void> {\n    return (await this.locatorFor('.mat-calendar-previous-button')()).click();\n  }\n\n  /**\n   * Selects a cell in the current calendar view.\n   * @param filter An optional filter to apply to the cells. The first cell matching the filter\n   *     will be selected.\n   */\n  async selectCell(filter: CalendarCellHarnessFilters = {}): Promise<void> {\n    const cells = await this.getCells(filter);\n    if (!cells.length) {\n      throw Error(`Cannot find calendar cell matching filter ${JSON.stringify(filter)}`);\n    }\n    await cells[0].select();\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {ComponentHarness, LocatorFactory, parallel, TestElement} from '@angular/cdk/testing';\nimport {CalendarHarnessFilters} from './datepicker-harness-filters';\nimport {MatCalendarHarness} from './calendar-harness';\n\n/** Interface for a test harness that can open and close a calendar. */\nexport interface DatepickerTrigger {\n  isCalendarOpen(): Promise<boolean>;\n  openCalendar(): Promise<void>;\n  closeCalendar(): Promise<void>;\n  hasCalendar(): Promise<boolean>;\n  getCalendar(filter?: CalendarHarnessFilters): Promise<MatCalendarHarness>;\n}\n\n/** Base class for harnesses that can trigger a calendar. */\nexport abstract class DatepickerTriggerHarnessBase\n  extends ComponentHarness\n  implements DatepickerTrigger\n{\n  /** Whether the trigger is disabled. */\n  abstract isDisabled(): Promise<boolean>;\n\n  /** Whether the calendar associated with the trigger is open. */\n  abstract isCalendarOpen(): Promise<boolean>;\n\n  /** Opens the calendar associated with the trigger. */\n  protected abstract _openCalendar(): Promise<void>;\n\n  /** Opens the calendar if the trigger is enabled and it has a calendar. */\n  async openCalendar(): Promise<void> {\n    const [isDisabled, hasCalendar] = await parallel(() => [this.isDisabled(), this.hasCalendar()]);\n\n    if (!isDisabled && hasCalendar) {\n      return this._openCalendar();\n    }\n  }\n\n  /** Closes the calendar if it is open. */\n  async closeCalendar(): Promise<void> {\n    if (await this.isCalendarOpen()) {\n      await closeCalendar(getCalendarId(this.host()), this.documentRootLocatorFactory());\n      // This is necessary so that we wait for the closing animation to finish in touch UI mode.\n      await this.forceStabilize();\n    }\n  }\n\n  /** Gets whether there is a calendar associated with the trigger. */\n  async hasCalendar(): Promise<boolean> {\n    return (await getCalendarId(this.host())) != null;\n  }\n\n  /**\n   * Gets the `MatCalendarHarness` that is associated with the trigger.\n   * @param filter Optionally filters which calendar is included.\n   */\n  async getCalendar(filter: CalendarHarnessFilters = {}): Promise<MatCalendarHarness> {\n    return getCalendar(filter, this.host(), this.documentRootLocatorFactory());\n  }\n}\n\n/** Gets the ID of the calendar that a particular test element can trigger. */\nexport async function getCalendarId(host: Promise<TestElement>): Promise<string | null> {\n  return (await host).getAttribute('data-mat-calendar');\n}\n\n/** Closes the calendar with a specific ID. */\nexport async function closeCalendar(\n  calendarId: Promise<string | null>,\n  documentLocator: LocatorFactory,\n) {\n  // We close the calendar by clicking on the backdrop, even though all datepicker variants\n  // have the ability to close by pressing escape. The backdrop is preferrable, because the\n  // escape key has multiple functions inside a range picker (either cancel the current range\n  // or close the calendar). Since we don't have access to set the ID on the backdrop in all\n  // cases, we set a unique class instead which is the same as the calendar's ID and suffixed\n  // with `-backdrop`.\n  const backdropSelector = `.${await calendarId}-backdrop`;\n  return (await documentLocator.locatorFor(backdropSelector)()).click();\n}\n\n/** Gets the test harness for a calendar associated with a particular host. */\nexport async function getCalendar(\n  filter: CalendarHarnessFilters,\n  host: Promise<TestElement>,\n  documentLocator: LocatorFactory,\n): Promise<MatCalendarHarness> {\n  const calendarId = await getCalendarId(host);\n\n  if (!calendarId) {\n    throw Error(`Element is not associated with a calendar`);\n  }\n\n  return documentLocator.locatorFor(\n    MatCalendarHarness.with({\n      ...filter,\n      selector: `#${calendarId}`,\n    }),\n  )();\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {HarnessPredicate, parallel, TestKey} from '@angular/cdk/testing';\nimport {DatepickerInputHarnessFilters, CalendarHarnessFilters} from './datepicker-harness-filters';\nimport {MatDatepickerInputHarnessBase, getInputPredicate} from './datepicker-input-harness-base';\nimport {MatCalendarHarness} from './calendar-harness';\nimport {\n  DatepickerTrigger,\n  closeCalendar,\n  getCalendarId,\n  getCalendar,\n} from './datepicker-trigger-harness-base';\n\n/** Harness for interacting with a standard Material datepicker inputs in tests. */\nexport class MatDatepickerInputHarness\n  extends MatDatepickerInputHarnessBase\n  implements DatepickerTrigger\n{\n  static hostSelector = '.mat-datepicker-input';\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a `MatDatepickerInputHarness`\n   * that meets certain criteria.\n   * @param options Options for filtering which input instances are considered a match.\n   * @return a `HarnessPredicate` configured with the given options.\n   */\n  static with(\n    options: DatepickerInputHarnessFilters = {},\n  ): HarnessPredicate<MatDatepickerInputHarness> {\n    return getInputPredicate(MatDatepickerInputHarness, options);\n  }\n\n  /** Gets whether the calendar associated with the input is open. */\n  async isCalendarOpen(): Promise<boolean> {\n    // `aria-owns` is set only if there's an open datepicker so we can use it as an indicator.\n    const host = await this.host();\n    return (await host.getAttribute('aria-owns')) != null;\n  }\n\n  /** Opens the calendar associated with the input. */\n  async openCalendar(): Promise<void> {\n    const [isDisabled, hasCalendar] = await parallel(() => [this.isDisabled(), this.hasCalendar()]);\n\n    if (!isDisabled && hasCalendar) {\n      // Alt + down arrow is the combination for opening the calendar with the keyboard.\n      const host = await this.host();\n      return host.sendKeys({alt: true}, TestKey.DOWN_ARROW);\n    }\n  }\n\n  /** Closes the calendar associated with the input. */\n  async closeCalendar(): Promise<void> {\n    if (await this.isCalendarOpen()) {\n      await closeCalendar(getCalendarId(this.host()), this.documentRootLocatorFactory());\n      // This is necessary so that we wait for the closing animation to finish in touch UI mode.\n      await this.forceStabilize();\n    }\n  }\n\n  /** Whether a calendar is associated with the input. */\n  async hasCalendar(): Promise<boolean> {\n    return (await getCalendarId(this.host())) != null;\n  }\n\n  /**\n   * Gets the `MatCalendarHarness` that is associated with the trigger.\n   * @param filter Optionally filters which calendar is included.\n   */\n  async getCalendar(filter: CalendarHarnessFilters = {}): Promise<MatCalendarHarness> {\n    return getCalendar(filter, this.host(), this.documentRootLocatorFactory());\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {HarnessPredicate, parallel, TestKey} from '@angular/cdk/testing';\nimport {MatDatepickerInputHarnessBase, getInputPredicate} from './datepicker-input-harness-base';\nimport {DatepickerTriggerHarnessBase} from './datepicker-trigger-harness-base';\nimport {\n  DatepickerInputHarnessFilters,\n  DateRangeInputHarnessFilters,\n} from './datepicker-harness-filters';\n\n/** Harness for interacting with a standard Material date range start input in tests. */\nexport class MatStartDateHarness extends MatDatepickerInputHarnessBase {\n  static hostSelector = '.mat-start-date';\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a `MatStartDateHarness`\n   * that meets certain criteria.\n   * @param options Options for filtering which input instances are considered a match.\n   * @return a `HarnessPredicate` configured with the given options.\n   */\n  static with(options: DatepickerInputHarnessFilters = {}): HarnessPredicate<MatStartDateHarness> {\n    return getInputPredicate(MatStartDateHarness, options);\n  }\n}\n\n/** Harness for interacting with a standard Material date range end input in tests. */\nexport class MatEndDateHarness extends MatDatepickerInputHarnessBase {\n  static hostSelector = '.mat-end-date';\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a `MatEndDateHarness`\n   * that meets certain criteria.\n   * @param options Options for filtering which input instances are considered a match.\n   * @return a `HarnessPredicate` configured with the given options.\n   */\n  static with(options: DatepickerInputHarnessFilters = {}): HarnessPredicate<MatEndDateHarness> {\n    return getInputPredicate(MatEndDateHarness, options);\n  }\n}\n\n/** Harness for interacting with a standard Material date range input in tests. */\nexport class MatDateRangeInputHarness extends DatepickerTriggerHarnessBase {\n  static hostSelector = '.mat-date-range-input';\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a `MatDateRangeInputHarness`\n   * that meets certain criteria.\n   * @param options Options for filtering which input instances are considered a match.\n   * @return a `HarnessPredicate` configured with the given options.\n   */\n  static with(\n    options: DateRangeInputHarnessFilters = {},\n  ): HarnessPredicate<MatDateRangeInputHarness> {\n    return new HarnessPredicate(MatDateRangeInputHarness, options)\n      .addOption('value', options.value, (harness, value) =>\n        HarnessPredicate.stringMatches(harness.getValue(), value),\n      )\n      .addOption('label', options.label, (harness, label) => {\n        return HarnessPredicate.stringMatches(harness.getLabel(), label);\n      });\n  }\n\n  /** Gets the combined value of the start and end inputs, including the separator. */\n  async getValue(): Promise<string> {\n    const [start, end, separator] = await parallel(() => [\n      this.getStartInput().then(input => input.getValue()),\n      this.getEndInput().then(input => input.getValue()),\n      this.getSeparator(),\n    ]);\n\n    return start + `${end ? ` ${separator} ${end}` : ''}`;\n  }\n\n  /** Gets the inner start date input inside the range input. */\n  async getStartInput(): Promise<MatStartDateHarness> {\n    // Don't pass in filters here since the start input is required and there can only be one.\n    return this.locatorFor(MatStartDateHarness)();\n  }\n\n  /** Gets the inner start date input inside the range input. */\n  async getEndInput(): Promise<MatEndDateHarness> {\n    // Don't pass in filters here since the end input is required and there can only be one.\n    return this.locatorFor(MatEndDateHarness)();\n  }\n\n  /**\n   * Gets the label for the range input, if it exists. This might be provided by a label element or\n   * by the `aria-label` attribute.\n   */\n  async getLabel(): Promise<string | null> {\n    // Directly copied from MatFormFieldControlHarnessBase. This class already has a parent so it\n    // cannot extend MatFormFieldControlHarnessBase for the functionality.\n    const documentRootLocator = this.documentRootLocatorFactory();\n    const labelId = await (await this.host()).getAttribute('aria-labelledby');\n    const labelText = await (await this.host()).getAttribute('aria-label');\n    const hostId = await (await this.host()).getAttribute('id');\n\n    if (labelId) {\n      // First, try to find the label by following [aria-labelledby]\n      const labelEl = await documentRootLocator.locatorForOptional(`[id=\"${labelId}\"]`)();\n      return labelEl ? labelEl.text() : null;\n    } else if (labelText) {\n      // If that doesn't work, return [aria-label] if it exists\n      return labelText;\n    } else if (hostId) {\n      // Finally, search the DOM for a label that points to the host element\n      const labelEl = await documentRootLocator.locatorForOptional(`[for=\"${hostId}\"]`)();\n      return labelEl ? labelEl.text() : null;\n    }\n    return null;\n  }\n\n  /** Gets the separator text between the values of the two inputs. */\n  async getSeparator(): Promise<string> {\n    return (await this.locatorFor('.mat-date-range-input-separator')()).text();\n  }\n\n  /** Gets whether the range input is disabled. */\n  async isDisabled(): Promise<boolean> {\n    // We consider the input as disabled if both of the sub-inputs are disabled.\n    const [startDisabled, endDisabled] = await parallel(() => [\n      this.getStartInput().then(input => input.isDisabled()),\n      this.getEndInput().then(input => input.isDisabled()),\n    ]);\n\n    return startDisabled && endDisabled;\n  }\n\n  /** Gets whether the range input is required. */\n  async isRequired(): Promise<boolean> {\n    return (await this.host()).hasClass('mat-date-range-input-required');\n  }\n\n  /** Opens the calendar associated with the input. */\n  async isCalendarOpen(): Promise<boolean> {\n    // `aria-owns` is set on both inputs only if there's an\n    // open range picker so we can use it as an indicator.\n    const startHost = await (await this.getStartInput()).host();\n    return (await startHost.getAttribute('aria-owns')) != null;\n  }\n\n  protected async _openCalendar(): Promise<void> {\n    // Alt + down arrow is the combination for opening the calendar with the keyboard.\n    const startHost = await (await this.getStartInput()).host();\n    return startHost.sendKeys({alt: true}, TestKey.DOWN_ARROW);\n  }\n}\n"],"names":[],"mappings":"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"}