import { HTML, innerText } from "@interactors/html";
const ListInteractor = HTML.extend("MUIList")
.locator((element) => element.getAttribute("aria-label") ?? innerText(element))
.selector('[class*="MuiList-root"]');
const ListItemInteractor = HTML.extend("MUIListItem")
.selector('[class*="MuiListItem-root"]')
.filters({
disabled: {
apply: (element) => element.hasAttribute("disabled") || element.getAttribute("aria-disabled") == "true",
default: false,
},
index: (element) => Array.from(element.parentElement?.children ?? []).indexOf(element),
});
/**
* Call this {@link InteractorConstructor} to initialize a list {@link
* Interactor}. The list interactor can be used to assert on lists state.
*
* The list is located by the `aria-label` attribute or by text content.
*
* ### Example
*
* ``` typescript
* await List('ToDos').exists();
* ```
*
* ### Filters
*
* - `id`: *string* – Filter by id
* - `visible`: *boolean* – Filter by visibility. Defaults to `true`. See {@link isVisible}.
*
* @category Interactor
*/
export const List = ListInteractor;
/**
* Call this {@link InteractorConstructor} to initialize a list item {@link
* Interactor}. The list item interactor can be used to interact with items
* on the page and to assert on their state.
*
* The list item is located by the visible text on the item.
*
* ### Example
*
* ``` typescript
* await ListItem('Install `@interactors/material-ui`').click();
* await ListItem({ index: 2, disabled: true }).exists();
* ```
*
* ### Filters
*
* - `title`: *string* – Filter by title
* - `id`: *string* – Filter by id
* - `visible`: *boolean* – Filter by visibility. Defaults to `true`. See {@link isVisible}.
* - `disabled`: *boolean* – Filter by whether the item is disabled. Defaults to `false`.
* - `index`: *number* - Filter by the item's zero-based index position in a list.
*
* ### Actions
*
* - `click()`: *{@link Interaction}* – Click on the list item
*
* @category Interactor
*/
export const ListItem = ListItemInteractor;