UNPKG

@angular/material

Version:
1 lines 41.3 kB
{"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":["getInputPredicate","type","options","HarnessPredicate","addOption","value","harness","stringMatches","getValue","placeholder","getPlaceholder","label","getLabel","MatDatepickerInputHarnessBase","MatFormFieldControlHarnessBase","isDisabled","host","getProperty","isRequired","setValue","newValue","inputEl","clear","sendKeys","dispatchEvent","focus","blur","isFocused","getMin","getAttribute","getMax","MatCalendarCellHarness","ComponentHarness","hostSelector","_content","locatorFor","with","text","getText","selected","isSelected","active","isActive","disabled","today","isToday","inRange","isInRange","inComparisonRange","isInComparisonRange","inPreviewRange","isInPreviewRange","getAriaLabel","_hasState","hasClass","select","click","hover","mouseAway","isRangeStart","isRangeEnd","isComparisonRangeStart","isComparisonRangeEnd","isPreviewRangeStart","isPreviewRangeEnd","name","CalendarView","MatCalendarHarness","_periodButton","getCells","filter","locatorForAll","getCurrentView","locatorForOptional","MULTI_YEAR","YEAR","MONTH","getCurrentViewLabel","changeView","next","previous","selectCell","cells","length","Error","JSON","stringify","DatepickerTriggerHarnessBase","openCalendar","hasCalendar","parallel","_openCalendar","closeCalendar","isCalendarOpen","getCalendarId","documentRootLocatorFactory","forceStabilize","getCalendar","calendarId","documentLocator","backdropSelector","selector","MatDatepickerInputHarness","alt","TestKey","DOWN_ARROW","MatStartDateHarness","MatEndDateHarness","MatDateRangeInputHarness","start","end","separator","getStartInput","then","input","getEndInput","getSeparator","documentRootLocator","labelId","labelText","hostId","labelEl","startDisabled","endDisabled","startHost"],"mappings":";;;AAagB,SAAAA,iBAAiBA,CAC/BC,IAAoC,EACpCC,OAAsC,EAAA;EAEtC,OAAO,IAAIC,gBAAgB,CAACF,IAAI,EAAEC,OAAO,CAAA,CACtCE,SAAS,CAAC,OAAO,EAAEF,OAAO,CAACG,KAAK,EAAE,CAACC,OAAO,EAAED,KAAK,KAAI;IACpD,OAAOF,gBAAgB,CAACI,aAAa,CAACD,OAAO,CAACE,QAAQ,EAAE,EAAEH,KAAK,CAAC;AAClE,GAAC,CAAA,CACAD,SAAS,CAAC,aAAa,EAAEF,OAAO,CAACO,WAAW,EAAE,CAACH,OAAO,EAAEG,WAAW,KAAI;IACtE,OAAON,gBAAgB,CAACI,aAAa,CAACD,OAAO,CAACI,cAAc,EAAE,EAAED,WAAW,CAAC;AAC9E,GAAC,CAAA,CACAL,SAAS,CAAC,OAAO,EAAEF,OAAO,CAACS,KAAK,EAAE,CAACL,OAAO,EAAEK,KAAK,KAAI;IACpD,OAAOR,gBAAgB,CAACI,aAAa,CAACD,OAAO,CAACM,QAAQ,EAAE,EAAED,KAAK,CAAC;AAClE,GAAC,CAAC;AACN;AAGM,MAAgBE,6BAA8B,SAAQC,8BAA8B,CAAA;EAExF,MAAMC,UAAUA,GAAA;IACd,OAAO,CAAC,MAAM,IAAI,CAACC,IAAI,EAAE,EAAEC,WAAW,CAAU,UAAU,CAAC;AAC7D;EAGA,MAAMC,UAAUA,GAAA;IACd,OAAO,CAAC,MAAM,IAAI,CAACF,IAAI,EAAE,EAAEC,WAAW,CAAU,UAAU,CAAC;AAC7D;EAGA,MAAMT,QAAQA,GAAA;AAEZ,IAAA,OAAO,MAAM,CAAC,MAAM,IAAI,CAACQ,IAAI,EAAE,EAAEC,WAAW,CAAS,OAAO,CAAC;AAC/D;EAMA,MAAME,QAAQA,CAACC,QAAgB,EAAA;AAC7B,IAAA,MAAMC,OAAO,GAAG,MAAM,IAAI,CAACL,IAAI,EAAE;AACjC,IAAA,MAAMK,OAAO,CAACC,KAAK,EAAE;AAKrB,IAAA,IAAIF,QAAQ,EAAE;AACZ,MAAA,MAAMC,OAAO,CAACE,QAAQ,CAACH,QAAQ,CAAC;AAClC;AAEA,IAAA,MAAMC,OAAO,CAACG,aAAa,CAAC,QAAQ,CAAC;AACvC;EAGA,MAAMd,cAAcA,GAAA;AAClB,IAAA,OAAO,MAAM,CAAC,MAAM,IAAI,CAACM,IAAI,EAAE,EAAEC,WAAW,CAAS,aAAa,CAAC;AACrE;EAMA,MAAMQ,KAAKA,GAAA;IACT,OAAO,CAAC,MAAM,IAAI,CAACT,IAAI,EAAE,EAAES,KAAK,EAAE;AACpC;EAMA,MAAMC,IAAIA,GAAA;IACR,OAAO,CAAC,MAAM,IAAI,CAACV,IAAI,EAAE,EAAEU,IAAI,EAAE;AACnC;EAGA,MAAMC,SAASA,GAAA;IACb,OAAO,CAAC,MAAM,IAAI,CAACX,IAAI,EAAE,EAAEW,SAAS,EAAE;AACxC;EAGA,MAAMC,MAAMA,GAAA;IACV,OAAO,CAAC,MAAM,IAAI,CAACZ,IAAI,EAAE,EAAEa,YAAY,CAAC,KAAK,CAAC;AAChD;EAGA,MAAMC,MAAMA,GAAA;IACV,OAAO,CAAC,MAAM,IAAI,CAACd,IAAI,EAAE,EAAEa,YAAY,CAAC,KAAK,CAAC;AAChD;AACD;;ACxFK,MAAOE,sBAAuB,SAAQC,gBAAgB,CAAA;EAC1D,OAAOC,YAAY,GAAG,yBAAyB;AAGvCC,EAAAA,QAAQ,GAAG,IAAI,CAACC,UAAU,CAAC,iCAAiC,CAAC;AAQrE,EAAA,OAAOC,IAAIA,CAAClC,OAAA,GAAsC,EAAE,EAAA;IAClD,OAAO,IAAIC,gBAAgB,CAAC4B,sBAAsB,EAAE7B,OAAO,CAAA,CACxDE,SAAS,CAAC,MAAM,EAAEF,OAAO,CAACmC,IAAI,EAAE,CAAC/B,OAAO,EAAE+B,IAAI,KAAI;MACjD,OAAOlC,gBAAgB,CAACI,aAAa,CAACD,OAAO,CAACgC,OAAO,EAAE,EAAED,IAAI,CAAC;AAChE,KAAC,CAAA,CACAjC,SAAS,CAAC,UAAU,EAAEF,OAAO,CAACqC,QAAQ,EAAE,OAAOjC,OAAO,EAAEiC,QAAQ,KAAI;MACnE,OAAO,CAAC,MAAMjC,OAAO,CAACkC,UAAU,EAAE,MAAMD,QAAQ;AAClD,KAAC,CAAA,CACAnC,SAAS,CAAC,QAAQ,EAAEF,OAAO,CAACuC,MAAM,EAAE,OAAOnC,OAAO,EAAEmC,MAAM,KAAI;MAC7D,OAAO,CAAC,MAAMnC,OAAO,CAACoC,QAAQ,EAAE,MAAMD,MAAM;AAC9C,KAAC,CAAA,CACArC,SAAS,CAAC,UAAU,EAAEF,OAAO,CAACyC,QAAQ,EAAE,OAAOrC,OAAO,EAAEqC,QAAQ,KAAI;MACnE,OAAO,CAAC,MAAMrC,OAAO,CAACS,UAAU,EAAE,MAAM4B,QAAQ;AAClD,KAAC,CAAA,CACAvC,SAAS,CAAC,OAAO,EAAEF,OAAO,CAAC0C,KAAK,EAAE,OAAOtC,OAAO,EAAEsC,KAAK,KAAI;MAC1D,OAAO,CAAC,MAAMtC,OAAO,CAACuC,OAAO,EAAE,MAAMD,KAAK;AAC5C,KAAC,CAAA,CACAxC,SAAS,CAAC,SAAS,EAAEF,OAAO,CAAC4C,OAAO,EAAE,OAAOxC,OAAO,EAAEwC,OAAO,KAAI;MAChE,OAAO,CAAC,MAAMxC,OAAO,CAACyC,SAAS,EAAE,MAAMD,OAAO;AAChD,KAAC,CAAA,CACA1C,SAAS,CACR,mBAAmB,EACnBF,OAAO,CAAC8C,iBAAiB,EACzB,OAAO1C,OAAO,EAAE0C,iBAAiB,KAAI;MACnC,OAAO,CAAC,MAAM1C,OAAO,CAAC2C,mBAAmB,EAAE,MAAMD,iBAAiB;AACpE,KAAC,CAAA,CAEF5C,SAAS,CAAC,gBAAgB,EAAEF,OAAO,CAACgD,cAAc,EAAE,OAAO5C,OAAO,EAAE4C,cAAc,KAAI;MACrF,OAAO,CAAC,MAAM5C,OAAO,CAAC6C,gBAAgB,EAAE,MAAMD,cAAc;AAC9D,KAAC,CAAC;AACN;EAGA,MAAMZ,OAAOA,GAAA;IACX,OAAO,CAAC,MAAM,IAAI,CAACJ,QAAQ,EAAE,EAAEG,IAAI,EAAE;AACvC;EAGA,MAAMe,YAAYA,GAAA;IAGhB,OAAO,CAAC,MAAM,IAAI,CAACpC,IAAI,EAAE,EAAEa,YAAY,CAAC,YAAY,CAAoB;AAC1E;EAGA,MAAMW,UAAUA,GAAA;AACd,IAAA,MAAMxB,IAAI,GAAG,MAAM,IAAI,CAACA,IAAI,EAAE;IAC9B,OAAO,CAAC,MAAMA,IAAI,CAACa,YAAY,CAAC,cAAc,CAAC,MAAM,MAAM;AAC7D;EAGA,MAAMd,UAAUA,GAAA;AACd,IAAA,OAAO,IAAI,CAACsC,SAAS,CAAC,UAAU,CAAC;AACnC;EAGA,MAAMX,QAAQA,GAAA;AACZ,IAAA,OAAO,IAAI,CAACW,SAAS,CAAC,QAAQ,CAAC;AACjC;EAGA,MAAMR,OAAOA,GAAA;IACX,OAAO,CAAC,MAAM,IAAI,CAACX,QAAQ,EAAE,EAAEoB,QAAQ,CAAC,yBAAyB,CAAC;AACpE;EAGA,MAAMC,MAAMA,GAAA;IACV,OAAO,CAAC,MAAM,IAAI,CAACvC,IAAI,EAAE,EAAEwC,KAAK,EAAE;AACpC;EAGA,MAAMC,KAAKA,GAAA;IACT,OAAO,CAAC,MAAM,IAAI,CAACzC,IAAI,EAAE,EAAEyC,KAAK,EAAE;AACpC;EAGA,MAAMC,SAASA,GAAA;IACb,OAAO,CAAC,MAAM,IAAI,CAAC1C,IAAI,EAAE,EAAE0C,SAAS,EAAE;AACxC;EAGA,MAAMjC,KAAKA,GAAA;IACT,OAAO,CAAC,MAAM,IAAI,CAACT,IAAI,EAAE,EAAES,KAAK,EAAE;AACpC;EAGA,MAAMC,IAAIA,GAAA;IACR,OAAO,CAAC,MAAM,IAAI,CAACV,IAAI,EAAE,EAAEU,IAAI,EAAE;AACnC;EAGA,MAAMiC,YAAYA,GAAA;AAChB,IAAA,OAAO,IAAI,CAACN,SAAS,CAAC,aAAa,CAAC;AACtC;EAGA,MAAMO,UAAUA,GAAA;AACd,IAAA,OAAO,IAAI,CAACP,SAAS,CAAC,WAAW,CAAC;AACpC;EAGA,MAAMN,SAASA,GAAA;AACb,IAAA,OAAO,IAAI,CAACM,SAAS,CAAC,UAAU,CAAC;AACnC;EAGA,MAAMQ,sBAAsBA,GAAA;AAC1B,IAAA,OAAO,IAAI,CAACR,SAAS,CAAC,kBAAkB,CAAC;AAC3C;EAGA,MAAMS,oBAAoBA,GAAA;AACxB,IAAA,OAAO,IAAI,CAACT,SAAS,CAAC,gBAAgB,CAAC;AACzC;EAGA,MAAMJ,mBAAmBA,GAAA;AACvB,IAAA,OAAO,IAAI,CAACI,SAAS,CAAC,qBAAqB,CAAC;AAC9C;EAGA,MAAMU,mBAAmBA,GAAA;AACvB,IAAA,OAAO,IAAI,CAACV,SAAS,CAAC,eAAe,CAAC;AACxC;EAGA,MAAMW,iBAAiBA,GAAA;AACrB,IAAA,OAAO,IAAI,CAACX,SAAS,CAAC,aAAa,CAAC;AACtC;EAGA,MAAMF,gBAAgBA,GAAA;AACpB,IAAA,OAAO,IAAI,CAACE,SAAS,CAAC,YAAY,CAAC;AACrC;EAGQ,MAAMA,SAASA,CAACY,IAAY,EAAA;AAClC,IAAA,OAAO,CAAC,MAAM,IAAI,CAACjD,IAAI,EAAE,EAAEsC,QAAQ,CAAC,CAAqBW,kBAAAA,EAAAA,IAAI,EAAE,CAAC;AAClE;;;ICrJUC;AAAZ,CAAA,UAAYA,YAAY,EAAA;EACtBA,YAAA,CAAAA,YAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;EACLA,YAAA,CAAAA,YAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;EACJA,YAAA,CAAAA,YAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAU;AACZ,CAAC,EAJWA,YAAY,KAAZA,YAAY,GAIvB,EAAA,CAAA,CAAA;AAGK,MAAOC,kBAAmB,SAAQnC,gBAAgB,CAAA;EACtD,OAAOC,YAAY,GAAG,eAAe;AAG7BmC,EAAAA,aAAa,GAAG,IAAI,CAACjC,UAAU,CAAC,6BAA6B,CAAC;AAQtE,EAAA,OAAOC,IAAIA,CAAClC,OAAA,GAAkC,EAAE,EAAA;AAC9C,IAAA,OAAO,IAAIC,gBAAgB,CAACgE,kBAAkB,EAAEjE,OAAO,CAAC;AAC1D;AAMA,EAAA,MAAMmE,QAAQA,CAACC,MAAA,GAAqC,EAAE,EAAA;AACpD,IAAA,OAAO,IAAI,CAACC,aAAa,CAACxC,sBAAsB,CAACK,IAAI,CAACkC,MAAM,CAAC,CAAC,EAAE;AAClE;EAGA,MAAME,cAAcA,GAAA;IAClB,IAAI,MAAM,IAAI,CAACC,kBAAkB,CAAC,qBAAqB,CAAC,EAAE,EAAE;MAC1D,OAAOP,YAAY,CAACQ,UAAU;AAChC;IAEA,IAAI,MAAM,IAAI,CAACD,kBAAkB,CAAC,eAAe,CAAC,EAAE,EAAE;MACpD,OAAOP,YAAY,CAACS,IAAI;AAC1B;IAEA,OAAOT,YAAY,CAACU,KAAK;AAC3B;EAGA,MAAMC,mBAAmBA,GAAA;IACvB,OAAO,CAAC,MAAM,IAAI,CAACT,aAAa,EAAE,EAAE/B,IAAI,EAAE;AAC5C;EAGA,MAAMyC,UAAUA,GAAA;IACd,OAAO,CAAC,MAAM,IAAI,CAACV,aAAa,EAAE,EAAEZ,KAAK,EAAE;AAC7C;EAGA,MAAMuB,IAAIA,GAAA;AACR,IAAA,OAAO,CAAC,MAAM,IAAI,CAAC5C,UAAU,CAAC,2BAA2B,CAAC,EAAE,EAAEqB,KAAK,EAAE;AACvE;EAMA,MAAMwB,QAAQA,GAAA;AACZ,IAAA,OAAO,CAAC,MAAM,IAAI,CAAC7C,UAAU,CAAC,+BAA+B,CAAC,EAAE,EAAEqB,KAAK,EAAE;AAC3E;AAOA,EAAA,MAAMyB,UAAUA,CAACX,MAAA,GAAqC,EAAE,EAAA;IACtD,MAAMY,KAAK,GAAG,MAAM,IAAI,CAACb,QAAQ,CAACC,MAAM,CAAC;AACzC,IAAA,IAAI,CAACY,KAAK,CAACC,MAAM,EAAE;MACjB,MAAMC,KAAK,CAAC,CAAA,0CAAA,EAA6CC,IAAI,CAACC,SAAS,CAAChB,MAAM,CAAC,CAAA,CAAE,CAAC;AACpF;AACA,IAAA,MAAMY,KAAK,CAAC,CAAC,CAAC,CAAC3B,MAAM,EAAE;AACzB;;;ACrEI,MAAgBgC,4BACpB,SAAQvD,gBAAgB,CAAA;EAaxB,MAAMwD,YAAYA,GAAA;IAChB,MAAM,CAACzE,UAAU,EAAE0E,WAAW,CAAC,GAAG,MAAMC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC3E,UAAU,EAAE,EAAE,IAAI,CAAC0E,WAAW,EAAE,CAAC,CAAC;AAE/F,IAAA,IAAI,CAAC1E,UAAU,IAAI0E,WAAW,EAAE;AAC9B,MAAA,OAAO,IAAI,CAACE,aAAa,EAAE;AAC7B;AACF;EAGA,MAAMC,aAAaA,GAAA;AACjB,IAAA,IAAI,MAAM,IAAI,CAACC,cAAc,EAAE,EAAE;AAC/B,MAAA,MAAMD,aAAa,CAACE,aAAa,CAAC,IAAI,CAAC9E,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC+E,0BAA0B,EAAE,CAAC;AAElF,MAAA,MAAM,IAAI,CAACC,cAAc,EAAE;AAC7B;AACF;EAGA,MAAMP,WAAWA,GAAA;IACf,OAAO,CAAC,MAAMK,aAAa,CAAC,IAAI,CAAC9E,IAAI,EAAE,CAAC,KAAK,IAAI;AACnD;AAMA,EAAA,MAAMiF,WAAWA,CAAC3B,MAAA,GAAiC,EAAE,EAAA;AACnD,IAAA,OAAO2B,WAAW,CAAC3B,MAAM,EAAE,IAAI,CAACtD,IAAI,EAAE,EAAE,IAAI,CAAC+E,0BAA0B,EAAE,CAAC;AAC5E;AACD;AAGM,eAAeD,aAAaA,CAAC9E,IAA0B,EAAA;AAC5D,EAAA,OAAO,CAAC,MAAMA,IAAI,EAAEa,YAAY,CAAC,mBAAmB,CAAC;AACvD;AAGO,eAAe+D,aAAaA,CACjCM,UAAkC,EAClCC,eAA+B,EAAA;AAQ/B,EAAA,MAAMC,gBAAgB,GAAG,CAAI,CAAA,EAAA,MAAMF,UAAU,CAAW,SAAA,CAAA;AACxD,EAAA,OAAO,CAAC,MAAMC,eAAe,CAAChE,UAAU,CAACiE,gBAAgB,CAAC,EAAE,EAAE5C,KAAK,EAAE;AACvE;AAGO,eAAeyC,WAAWA,CAC/B3B,MAA8B,EAC9BtD,IAA0B,EAC1BmF,eAA+B,EAAA;AAE/B,EAAA,MAAMD,UAAU,GAAG,MAAMJ,aAAa,CAAC9E,IAAI,CAAC;EAE5C,IAAI,CAACkF,UAAU,EAAE;IACf,MAAMd,KAAK,CAAC,CAAA,yCAAA,CAA2C,CAAC;AAC1D;AAEA,EAAA,OAAOe,eAAe,CAAChE,UAAU,CAC/BgC,kBAAkB,CAAC/B,IAAI,CAAC;AACtB,IAAA,GAAGkC,MAAM;IACT+B,QAAQ,EAAE,IAAIH,UAAU,CAAA;GACzB,CAAC,CACH,EAAE;AACL;;ACrFM,MAAOI,yBACX,SAAQzF,6BAA6B,CAAA;EAGrC,OAAOoB,YAAY,GAAG,uBAAuB;AAQ7C,EAAA,OAAOG,IAAIA,CACTlC,OAAA,GAAyC,EAAE,EAAA;AAE3C,IAAA,OAAOF,iBAAiB,CAACsG,yBAAyB,EAAEpG,OAAO,CAAC;AAC9D;EAGA,MAAM2F,cAAcA,GAAA;AAElB,IAAA,MAAM7E,IAAI,GAAG,MAAM,IAAI,CAACA,IAAI,EAAE;IAC9B,OAAO,CAAC,MAAMA,IAAI,CAACa,YAAY,CAAC,WAAW,CAAC,KAAK,IAAI;AACvD;EAGA,MAAM2D,YAAYA,GAAA;IAChB,MAAM,CAACzE,UAAU,EAAE0E,WAAW,CAAC,GAAG,MAAMC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC3E,UAAU,EAAE,EAAE,IAAI,CAAC0E,WAAW,EAAE,CAAC,CAAC;AAE/F,IAAA,IAAI,CAAC1E,UAAU,IAAI0E,WAAW,EAAE;AAE9B,MAAA,MAAMzE,IAAI,GAAG,MAAM,IAAI,CAACA,IAAI,EAAE;MAC9B,OAAOA,IAAI,CAACO,QAAQ,CAAC;AAACgF,QAAAA,GAAG,EAAE;AAAI,OAAC,EAAEC,OAAO,CAACC,UAAU,CAAC;AACvD;AACF;EAGA,MAAMb,aAAaA,GAAA;AACjB,IAAA,IAAI,MAAM,IAAI,CAACC,cAAc,EAAE,EAAE;AAC/B,MAAA,MAAMD,aAAa,CAACE,aAAa,CAAC,IAAI,CAAC9E,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC+E,0BAA0B,EAAE,CAAC;AAElF,MAAA,MAAM,IAAI,CAACC,cAAc,EAAE;AAC7B;AACF;EAGA,MAAMP,WAAWA,GAAA;IACf,OAAO,CAAC,MAAMK,aAAa,CAAC,IAAI,CAAC9E,IAAI,EAAE,CAAC,KAAK,IAAI;AACnD;AAMA,EAAA,MAAMiF,WAAWA,CAAC3B,MAAA,GAAiC,EAAE,EAAA;AACnD,IAAA,OAAO2B,WAAW,CAAC3B,MAAM,EAAE,IAAI,CAACtD,IAAI,EAAE,EAAE,IAAI,CAAC+E,0BAA0B,EAAE,CAAC;AAC5E;;;AC3DI,MAAOW,mBAAoB,SAAQ7F,6BAA6B,CAAA;EACpE,OAAOoB,YAAY,GAAG,iBAAiB;AAQvC,EAAA,OAAOG,IAAIA,CAAClC,OAAA,GAAyC,EAAE,EAAA;AACrD,IAAA,OAAOF,iBAAiB,CAAC0G,mBAAmB,EAAExG,OAAO,CAAC;AACxD;;AAII,MAAOyG,iBAAkB,SAAQ9F,6BAA6B,CAAA;EAClE,OAAOoB,YAAY,GAAG,eAAe;AAQrC,EAAA,OAAOG,IAAIA,CAAClC,OAAA,GAAyC,EAAE,EAAA;AACrD,IAAA,OAAOF,iBAAiB,CAAC2G,iBAAiB,EAAEzG,OAAO,CAAC;AACtD;;AAII,MAAO0G,wBAAyB,SAAQrB,4BAA4B,CAAA;EACxE,OAAOtD,YAAY,GAAG,uBAAuB;AAQ7C,EAAA,OAAOG,IAAIA,CACTlC,OAAA,GAAwC,EAAE,EAAA;IAE1C,OAAO,IAAIC,gBAAgB,CAACyG,wBAAwB,EAAE1G,OAAO,CAAA,CAC1DE,SAAS,CAAC,OAAO,EAAEF,OAAO,CAACG,KAAK,EAAE,CAACC,OAAO,EAAED,KAAK,KAChDF,gBAAgB,CAACI,aAAa,CAACD,OAAO,CAACE,QAAQ,EAAE,EAAEH,KAAK,CAAC,CAAA,CAE1DD,SAAS,CAAC,OAAO,EAAEF,OAAO,CAACS,KAAK,EAAE,CAACL,OAAO,EAAEK,KAAK,KAAI;MACpD,OAAOR,gBAAgB,CAACI,aAAa,CAACD,OAAO,CAACM,QAAQ,EAAE,EAAED,KAAK,CAAC;AAClE,KAAC,CAAC;AACN;EAGA,MAAMH,QAAQA,GAAA;IACZ,MAAM,CAACqG,KAAK,EAAEC,GAAG,EAAEC,SAAS,CAAC,GAAG,MAAMrB,QAAQ,CAAC,MAAM,CACnD,IAAI,CAACsB,aAAa,EAAE,CAACC,IAAI,CAACC,KAAK,IAAIA,KAAK,CAAC1G,QAAQ,EAAE,CAAC,EACpD,IAAI,CAAC2G,WAAW,EAAE,CAACF,IAAI,CAACC,KAAK,IAAIA,KAAK,CAAC1G,QAAQ,EAAE,CAAC,EAClD,IAAI,CAAC4G,YAAY,EAAE,CACpB,CAAC;AAEF,IAAA,OAAOP,KAAK,GAAG,CAAGC,EAAAA,GAAG,GAAG,CAAA,CAAA,EAAIC,SAAS,CAAA,CAAA,EAAID,GAAG,CAAA,CAAE,GAAG,EAAE,CAAE,CAAA;AACvD;EAGA,MAAME,aAAaA,GAAA;AAEjB,IAAA,OAAO,IAAI,CAAC7E,UAAU,CAACuE,mBAAmB,CAAC,EAAE;AAC/C;EAGA,MAAMS,WAAWA,GAAA;AAEf,IAAA,OAAO,IAAI,CAAChF,UAAU,CAACwE,iBAAiB,CAAC,EAAE;AAC7C;EAMA,MAAM/F,QAAQA,GAAA;AAGZ,IAAA,MAAMyG,mBAAmB,GAAG,IAAI,CAACtB,0BAA0B,EAAE;AAC7D,IAAA,MAAMuB,OAAO,GAAG,MAAM,CAAC,MAAM,IAAI,CAACtG,IAAI,EAAE,EAAEa,YAAY,CAAC,iBAAiB,CAAC;AACzE,IAAA,MAAM0F,SAAS,GAAG,MAAM,CAAC,MAAM,IAAI,CAACvG,IAAI,EAAE,EAAEa,YAAY,CAAC,YAAY,CAAC;AACtE,IAAA,MAAM2F,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,CAACxG,IAAI,EAAE,EAAEa,YAAY,CAAC,IAAI,CAAC;AAE3D,IAAA,IAAIyF,OAAO,EAAE;AAEX,MAAA,MAAMG,OAAO,GAAG,MAAMJ,mBAAmB,CAAC5C,kBAAkB,CAAC,CAAA,KAAA,EAAQ6C,OAAO,CAAA,EAAA,CAAI,CAAC,EAAE;MACnF,OAAOG,OAAO,GAAGA,OAAO,CAACpF,IAAI,EAAE,GAAG,IAAI;KACxC,MAAO,IAAIkF,SAAS,EAAE;AAEpB,MAAA,OAAOA,SAAS;KAClB,MAAO,IAAIC,MAAM,EAAE;AAEjB,MAAA,MAAMC,OAAO,GAAG,MAAMJ,mBAAmB,CAAC5C,kBAAkB,CAAC,CAAA,MAAA,EAAS+C,MAAM,CAAA,EAAA,CAAI,CAAC,EAAE;MACnF,OAAOC,OAAO,GAAGA,OAAO,CAACpF,IAAI,EAAE,GAAG,IAAI;AACxC;AACA,IAAA,OAAO,IAAI;AACb;EAGA,MAAM+E,YAAYA,GAAA;AAChB,IAAA,OAAO,CAAC,MAAM,IAAI,CAACjF,UAAU,CAAC,iCAAiC,CAAC,EAAE,EAAEE,IAAI,EAAE;AAC5E;EAGA,MAAMtB,UAAUA,GAAA;IAEd,MAAM,CAAC2G,aAAa,EAAEC,WAAW,CAAC,GAAG,MAAMjC,QAAQ,CAAC,MAAM,CACxD,IAAI,CAACsB,aAAa,EAAE,CAACC,IAAI,CAACC,KAAK,IAAIA,KAAK,CAACnG,UAAU,EAAE,CAAC,EACtD,IAAI,CAACoG,WAAW,EAAE,CAACF,IAAI,CAACC,KAAK,IAAIA,KAAK,CAACnG,UAAU,EAAE,CAAC,CACrD,CAAC;IAEF,OAAO2G,aAAa,IAAIC,WAAW;AACrC;EAGA,MAAMzG,UAAUA,GAAA;IACd,OAAO,CAAC,MAAM,IAAI,CAACF,IAAI,EAAE,EAAEsC,QAAQ,CAAC,+BAA+B,CAAC;AACtE;EAGA,MAAMuC,cAAcA,GAAA;AAGlB,IAAA,MAAM+B,SAAS,GAAG,MAAM,CAAC,MAAM,IAAI,CAACZ,aAAa,EAAE,EAAEhG,IAAI,EAAE;IAC3D,OAAO,CAAC,MAAM4G,SAAS,CAAC/F,YAAY,CAAC,WAAW,CAAC,KAAK,IAAI;AAC5D;EAEU,MAAM8D,aAAaA,GAAA;AAE3B,IAAA,MAAMiC,SAAS,GAAG,MAAM,CAAC,MAAM,IAAI,CAACZ,aAAa,EAAE,EAAEhG,IAAI,EAAE;IAC3D,OAAO4G,SAAS,CAACrG,QAAQ,CAAC;AAACgF,MAAAA,GAAG,EAAE;AAAI,KAAC,EAAEC,OAAO,CAACC,UAAU,CAAC;AAC5D;;;;;"}