@vuu-ui/vuu-playwright-helpers 3.5.13 → 3.5.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,196 @@
1
+ import { type Locator } from "@playwright/test";
2
+ import { PwComponent } from "./PwComponent";
3
+ import { PwContextMenu } from "./PwContextMenu";
4
+ /**
5
+ * A single item within a PwContextMenu. Usually obtained from
6
+ * PwContextMenu.menuItem rather than constructed directly.
7
+ *
8
+ * The boolean query methods (hasChildren, isDisabled, hasIcon etc) read the
9
+ * current state and do not retry. For state that changes after an action, use
10
+ * a web-first assertion on `locator`, e.g.
11
+ * `await expect(item.locator).toHaveAttribute("aria-expanded", "true")`.
12
+ *
13
+ * @example
14
+ * test("menu item state", async ({ page }) => {
15
+ * const menu = await new PwTable(page).showContextMenu("ric", 2);
16
+ * const item = menu.menuItem("Copy text");
17
+ * expect(await item.isEnabled()).toBe(true);
18
+ * expect(await item.hasIcon("edit")).toBe(true);
19
+ * await item.click();
20
+ * });
21
+ */
22
+ export declare class PwMenuItem extends PwComponent {
23
+ protected readonly defaultCssSelector = "[role=\"menuitem\"]";
24
+ /**
25
+ * The text label of the menu item.
26
+ *
27
+ * @example
28
+ * test("second item is Filter", async ({ page }) => {
29
+ * const menu = await new PwTable(page).showContextMenu("ric", 2);
30
+ * expect(await menu.menuItem(1).label()).toEqual("Filter");
31
+ * });
32
+ */
33
+ label(): Promise<string>;
34
+ /**
35
+ * Does this menu item open a sub menu (aria-haspopup="menu").
36
+ *
37
+ * @example
38
+ * test("Filter has a sub menu", async ({ page }) => {
39
+ * const menu = await new PwTable(page).showContextMenu("ric", 2);
40
+ * expect(await menu.menuItem("Filter").hasChildren()).toBe(true);
41
+ * expect(await menu.menuItem("Copy text").hasChildren()).toBe(false);
42
+ * });
43
+ */
44
+ hasChildren(): Promise<boolean>;
45
+ /**
46
+ * Is the menu item disabled (aria-disabled="true"). Disabled items cannot be
47
+ * clicked and are skipped by keyboard navigation.
48
+ *
49
+ * @example
50
+ * test("Delete row is disabled", async ({ page }) => {
51
+ * const menu = await new PwTable(page).showContextMenu("ric", 2);
52
+ * expect(await menu.menuItem("Delete row").isDisabled()).toBe(true);
53
+ * });
54
+ */
55
+ isDisabled(): Promise<boolean>;
56
+ /**
57
+ * Is the menu item enabled. The inverse of isDisabled.
58
+ *
59
+ * @example
60
+ * test("Copy text is enabled", async ({ page }) => {
61
+ * const menu = await new PwTable(page).showContextMenu("ric", 2);
62
+ * expect(await menu.menuItem("Copy text").isEnabled()).toBe(true);
63
+ * });
64
+ */
65
+ isEnabled(): Promise<boolean>;
66
+ /**
67
+ * Is the sub menu of this menu item open (aria-expanded="true"). Always
68
+ * false for leaf items.
69
+ *
70
+ * @example
71
+ * test("Filter expands on hover", async ({ page }) => {
72
+ * const menu = await new PwTable(page).showContextMenu("ric", 2);
73
+ * const filter = menu.menuItem("Filter");
74
+ * expect(await filter.isExpanded()).toBe(false);
75
+ * await filter.openSubMenu();
76
+ * expect(await filter.isExpanded()).toBe(true);
77
+ * });
78
+ */
79
+ isExpanded(): Promise<boolean>;
80
+ /**
81
+ * Does the menu item have DOM focus. Does not wait or retry, prefer
82
+ * PwContextMenu.assertFocusedMenuItem after a key press.
83
+ *
84
+ * @example
85
+ * test("Copy text focused", async ({ page }) => {
86
+ * const menu = await new PwTable(page).showContextMenu("ric", 2);
87
+ * await menu.press("ArrowDown");
88
+ * await menu.assertFocusedMenuItem("Copy text");
89
+ * expect(await menu.menuItem("Copy text").isFocused()).toBe(true);
90
+ * });
91
+ */
92
+ isFocused(): Promise<boolean>;
93
+ /**
94
+ * Is the menu item decorated with the given icon (data-icon attribute).
95
+ *
96
+ * @example
97
+ * test("Copy text has edit icon", async ({ page }) => {
98
+ * const menu = await new PwTable(page).showContextMenu("ric", 2);
99
+ * expect(await menu.menuItem("Copy text").hasIcon("edit")).toBe(true);
100
+ * });
101
+ */
102
+ hasIcon(iconName: string): Promise<boolean>;
103
+ /**
104
+ * Click the menu item. Playwright will not click a disabled item unless
105
+ * { force: true } is passed.
106
+ *
107
+ * @example
108
+ * test("click invokes menu action", async ({ page }) => {
109
+ * const menu = await new PwTable(page).showContextMenu("ric", 2);
110
+ * await menu.menuItem("Copy text").click();
111
+ * await menu.assertNotAttached();
112
+ * });
113
+ *
114
+ * @example
115
+ * test("clicking disabled item does nothing", async ({ page }) => {
116
+ * const menu = await new PwTable(page).showContextMenu("ric", 2);
117
+ * await menu.menuItem("Delete row").click({ force: true });
118
+ * await menu.assertVisible();
119
+ * });
120
+ */
121
+ click(options?: Parameters<Locator["click"]>[0]): Promise<void>;
122
+ /**
123
+ * Hover over the menu item. Hovering an item with children opens its sub
124
+ * menu, use openSubMenu to also wait for the sub menu.
125
+ *
126
+ * @example
127
+ * test("hover expands Filter", async ({ page }) => {
128
+ * const menu = await new PwTable(page).showContextMenu("ric", 2);
129
+ * const filter = menu.menuItem("Filter");
130
+ * await filter.hover();
131
+ * await expect(filter.locator).toHaveAttribute("aria-expanded", "true");
132
+ * });
133
+ */
134
+ hover(): Promise<void>;
135
+ /**
136
+ * Give the menu item DOM focus.
137
+ *
138
+ * @example
139
+ * test("focus Sort then open with keyboard", async ({ page }) => {
140
+ * const menu = await new PwTable(page).showContextMenu("ric", 2);
141
+ * const sort = menu.menuItem("Sort");
142
+ * await sort.focus();
143
+ * await sort.press("ArrowRight");
144
+ * await expect(sort.locator).toHaveAttribute("aria-expanded", "true");
145
+ * });
146
+ */
147
+ focus(): Promise<void>;
148
+ /**
149
+ * Press a key with the menu item as target. Focuses the item first.
150
+ *
151
+ * @example
152
+ * test("Enter on item invokes action", async ({ page }) => {
153
+ * const menu = await new PwTable(page).showContextMenu("ric", 2);
154
+ * await menu.menuItem("Copy text").press("Enter");
155
+ * await menu.assertNotAttached();
156
+ * });
157
+ */
158
+ press(key: string): Promise<void>;
159
+ /**
160
+ * The sub menu opened by this menu item. The sub menu must already be open,
161
+ * use openSubMenu to open it.
162
+ *
163
+ * @example
164
+ * test("sub menu opened by hover", async ({ page }) => {
165
+ * const menu = await new PwTable(page).showContextMenu("ric", 2);
166
+ * const filter = menu.menuItem("Filter");
167
+ * await filter.hover();
168
+ * const filterMenu = await filter.subMenu();
169
+ * expect(await filterMenu.hasMenuItems()).toBe(true);
170
+ * });
171
+ */
172
+ subMenu(): Promise<PwContextMenu>;
173
+ /**
174
+ * Open the sub menu of this menu item, using the mouse (hover) or keyboard
175
+ * (ArrowRight). Resolves once the sub menu is visible and, when opened with
176
+ * the keyboard, once focus has moved into the sub menu.
177
+ *
178
+ * @example
179
+ * test("open sub menu with mouse", async ({ page }) => {
180
+ * const menu = await new PwTable(page).showContextMenu("ric", 2);
181
+ * const filterMenu = await menu.menuItem("Filter").openSubMenu();
182
+ * await filterMenu.menuItem("Include value").click();
183
+ * await menu.assertNotAttached();
184
+ * });
185
+ *
186
+ * @example
187
+ * test("open sub menu with keyboard", async ({ page }) => {
188
+ * const menu = await new PwTable(page).showContextMenu("ric", 2);
189
+ * const sortMenu = await menu.menuItem("Sort").openSubMenu("keyboard");
190
+ * await sortMenu.assertFocusedMenuItem("Ascending");
191
+ * await sortMenu.press("ArrowLeft");
192
+ * await sortMenu.assertNotAttached();
193
+ * });
194
+ */
195
+ openSubMenu(using?: "mouse" | "keyboard"): Promise<PwContextMenu>;
196
+ }
@@ -1,27 +1,82 @@
1
- import { type Locator, type Page } from "@playwright/test";
1
+ import { type Locator } from "@playwright/test";
2
2
  import type { VuuRange } from "@vuu-ui/vuu-protocol-types";
3
- import { PlaywrightPageObject } from "./PlaywrightPageObject";
3
+ import { PwComponent } from "./PwComponent";
4
+ import { PwContextMenu } from "./PwContextMenu";
4
5
  import { PwTableHeaderCell } from "./PwTableHeaderCell";
5
6
  type AriaRole = "cell" | "textbox" | "combobox";
6
- export declare class PwTable extends PlaywrightPageObject {
7
- #private;
8
- private readonly cssSelector?;
7
+ /**
8
+ * A Vuu Table. Rows are located by 1-based aria row index, which includes
9
+ * header rows (with one header, the first data row is 2).
10
+ *
11
+ * @example
12
+ * test("table renders instruments", async ({ mount, page }) => {
13
+ * await mount("Table/ContextMenu/LocalContextMenu");
14
+ * const table = new PwTable(page);
15
+ * await table.assertVisible();
16
+ * await expect(await table.cell("ric", 2)).toHaveText("AAOO.L");
17
+ * });
18
+ */
19
+ export declare class PwTable extends PwComponent {
9
20
  protected readonly defaultCssSelector = ".vuuTable";
10
21
  /**
11
- * @param page the Playwright page
12
- * @param cssSelector optional selector for the Table, overrides defaultCssSelector
22
+ * Locator for the scrollable content container (the rendered rows).
23
+ *
24
+ * @example
25
+ * test("rows are zebra striped", async ({ page }) => {
26
+ * const table = new PwTable(page);
27
+ * await expect(table.contentContainer).toContainClass("vuuTable-zebra");
28
+ * });
13
29
  */
14
- constructor(page: Page, cssSelector?: string | undefined);
15
30
  get contentContainer(): Locator;
31
+ /**
32
+ * Locator for the scrollbar container, the element that scrolls.
33
+ *
34
+ * @example
35
+ * test("scrolls vertically", async ({ page }) => {
36
+ * const table = new PwTable(page);
37
+ * await table.scrollbarContainer.evaluate((el) => el.scrollTo(0, 1000));
38
+ * await expect(table.row(2)).not.toBeInViewport();
39
+ * });
40
+ */
16
41
  get scrollbarContainer(): Locator;
17
42
  /**
18
- * row Locator by aria-index
43
+ * Row Locator by 1-based aria row index, including headers.
44
+ *
45
+ * @example
46
+ * test("first data row is selected", async ({ page }) => {
47
+ * const table = new PwTable(page);
48
+ * await (await table.cell("ric", 2)).click();
49
+ * await expect(table.row(2)).toHaveAttribute("aria-selected", "true");
50
+ * });
19
51
  */
20
52
  row(row: number): Locator;
21
53
  /**
22
54
  * Locate cell by column name and 1-based aria row index, including headers.
55
+ * Preferred over locateCell for new usage.
56
+ *
57
+ * @example
58
+ * test("first ric", async ({ page }) => {
59
+ * const table = new PwTable(page);
60
+ * await expect(await table.cell("ric", 2)).toHaveText("AAOO.L");
61
+ * });
23
62
  */
24
63
  cell(colName: string, ariaRowIndex: number): Promise<Locator>;
64
+ /**
65
+ * Double click a cell to edit it, fill the editor with value, then commit
66
+ * (Enter) or cancel (Escape) the edit.
67
+ *
68
+ * @example
69
+ * test("edit bbg", async ({ mount, page }) => {
70
+ * await mount("Table/Editing/EditableInstrumentsInlineEdit");
71
+ * await page.getByRole("radio", { name: "Edit" }).click();
72
+ * const table = new PwTable(page);
73
+ * const textbox = (await table.cell("bbg", 2)).getByRole("textbox");
74
+ * await table.editCell("bbg", 2, "X", "cancel");
75
+ * await expect(textbox).not.toHaveValue("X");
76
+ * await table.editCell("bbg", 2, "X");
77
+ * await expect(textbox).toHaveValue("X");
78
+ * });
79
+ */
25
80
  editCell(columnName: string, ariaRowIndex: number, value: string, action?: "commit" | "cancel"): Promise<void>;
26
81
  /**
27
82
  * The labels displayed in the column headers, in rendered order.
@@ -66,34 +121,202 @@ export declare class PwTable extends PlaywrightPageObject {
66
121
  * });
67
122
  */
68
123
  cellsWithIcon(iconName: string): Locator;
124
+ /**
125
+ * The column header cell for the named column.
126
+ *
127
+ * @example
128
+ * test("currency column not selected", async ({ page }) => {
129
+ * const table = new PwTable(page);
130
+ * expect(await table.headerCell("currency").isSelected).toBe(false);
131
+ * });
132
+ */
69
133
  headerCell(columnName: string): PwTableHeaderCell;
70
134
  /**
71
- * Locate cell by cell contents
72
- * @param text
135
+ * Right click a cell to invoke the context menu. Resolves once the menu is
136
+ * visible and has focus, so keyboard navigation can begin immediately.
137
+ * Waits until the test timeout if no context menu is shown, use
138
+ * assertNoContextMenu to test for that.
139
+ *
140
+ * @param columnName name of the column
141
+ * @param ariaRowIndex 1-based aria row index, including headers (with one header, the first data row is 2)
142
+ *
143
+ * @example
144
+ * test("shows cell menu", async ({ page }) => {
145
+ * const table = new PwTable(page);
146
+ * const menu = await table.showContextMenu("ric", 2);
147
+ * expect(await menu.menuItem("Copy text").isEnabled()).toBe(true);
148
+ * });
149
+ */
150
+ showContextMenu(columnName: string, ariaRowIndex: number): Promise<PwContextMenu>;
151
+ /**
152
+ * Right click a cell and assert that no context menu is shown and the cell
153
+ * is not marked as having an open context menu.
154
+ *
155
+ * A negative assertion passes as soon as the menu is absent, which may be
156
+ * before a menu would have rendered. To avoid false passes we wait for two
157
+ * animation frames after the right click, allowing React to commit and the
158
+ * menu to be positioned, before asserting.
159
+ *
160
+ * @param columnName name of the column
161
+ * @param ariaRowIndex 1-based aria row index, including headers (with one header, the first data row is 2)
162
+ *
163
+ * @example
164
+ * test("no menu when none configured", async ({ page }) => {
165
+ * const table = new PwTable(page);
166
+ * await table.assertNoContextMenu("ccy", 2);
167
+ * });
168
+ */
169
+ assertNoContextMenu(columnName: string, ariaRowIndex: number): Promise<void>;
170
+ /**
171
+ * Locate cell(s) by accessible name (cell contents). May match several cells.
172
+ *
173
+ * @example
174
+ * test("right click ric", async ({ page }) => {
175
+ * const table = new PwTable(page);
176
+ * await table.locateCell("AAOP N").click({ button: "right" });
177
+ * });
73
178
  */
74
179
  locateCell(text: string): Locator;
75
180
  /**
76
- * Locate cell by aria row index and aria col index
77
- * @param text
181
+ * Locate cell by 1-based aria row index and 1-based aria col index.
182
+ *
183
+ * @example
184
+ * test("down arrow from header focuses first cell", async ({ page }) => {
185
+ * const table = new PwTable(page);
186
+ * await table.locateColumnHeader(1).press("ArrowDown");
187
+ * await expect(table.locateCell(2, 1)).toBeFocused();
188
+ * });
78
189
  */
79
190
  locateCell(row: number, column: number): Locator;
80
191
  /**
81
- * Locate cell by aria row index and column name
192
+ * Locate cell by 1-based aria row index and column name. Prefer cell(columnName, ariaRowIndex).
193
+ *
194
+ * @example
195
+ * test("first ric", async ({ page }) => {
196
+ * const table = new PwTable(page);
197
+ * await expect(await table.locateCell(2, "ric")).toHaveText("AAOO.L");
198
+ * });
82
199
  */
83
200
  locateCell(row: number, columnName: string): Promise<Locator>;
201
+ /**
202
+ * Locate a column header cell by 1-based aria col index.
203
+ *
204
+ * @example
205
+ * test("click header focuses it", async ({ page }) => {
206
+ * const table = new PwTable(page);
207
+ * const header = table.locateColumnHeader(1);
208
+ * await header.click();
209
+ * await expect(header).toBeFocused();
210
+ * });
211
+ */
84
212
  locateColumnHeader(column: number): Locator;
213
+ /**
214
+ * When isEditable is true, assert the cell is editable but not currently in
215
+ * edit mode and, if value is passed, that its textbox has that value. When
216
+ * isEditable is false or undefined, nothing is asserted.
217
+ *
218
+ * @example
219
+ * test("first cell is editable", async ({ mount, page }) => {
220
+ * await mount("Table/Editing/EditableInstruments");
221
+ * await page.getByRole("radio", { name: "Edit" }).click();
222
+ * const table = new PwTable(page);
223
+ * await table.assertCellIsEditable(2, 1, true, "AAOO L");
224
+ * });
225
+ */
85
226
  assertCellIsEditable(row: number, column: number, isEditable: boolean | undefined, value?: string): Promise<void>;
86
- assertVisible(): Promise<void>;
87
227
  private getCellText;
228
+ /**
229
+ * Assert the value of a cell input (toHaveValue). Pass a role to target an
230
+ * element within the cell, e.g. "textbox" for an editable cell.
231
+ *
232
+ * @example
233
+ * test("editable cell value", async ({ mount, page }) => {
234
+ * await mount("Table/Editing/EditableInstruments");
235
+ * await page.getByRole("radio", { name: "Edit" }).click();
236
+ * const table = new PwTable(page);
237
+ * await table.assertCellValue(2, 1, "AAOO L", "textbox");
238
+ * await table.assertCellValue(table.locateCell(2, 1), "AAOO L", "textbox");
239
+ * });
240
+ */
88
241
  assertCellValue(cell: Locator, text: string, role?: AriaRole): Promise<void>;
89
242
  assertCellValue(row: number, column: number, text: string, role?: AriaRole): Promise<void>;
243
+ /**
244
+ * Assert the text content of a cell (toHaveText). Pass a role to target an
245
+ * element within the cell, e.g. "combobox" for a dropdown cell.
246
+ *
247
+ * @example
248
+ * test("first cell text", async ({ page }) => {
249
+ * const table = new PwTable(page);
250
+ * await table.assertCellContent(2, 1, "AAOO L");
251
+ * await table.assertCellContent(table.locateCell(2, 1), "AAOO L");
252
+ * });
253
+ */
90
254
  assertCellContent(cell: Locator, text: string, role?: AriaRole): Promise<void>;
91
255
  assertCellContent(row: number, column: number, text: string, role?: AriaRole): Promise<void>;
256
+ /**
257
+ * Assert a cell, or an element within it with the given role, is focused.
258
+ *
259
+ * @example
260
+ * test("click focuses editable cell", async ({ mount, page }) => {
261
+ * await mount("Table/Editing/EditableInstruments");
262
+ * await page.getByRole("radio", { name: "Edit" }).click();
263
+ * const table = new PwTable(page);
264
+ * const cell = table.locateCell(3, 3);
265
+ * await cell.click();
266
+ * await table.assertCellIsFocused(cell, "textbox");
267
+ * await table.assertCellIsFocused(3, 3, "textbox");
268
+ * });
269
+ */
92
270
  assertCellIsFocused(cell: Locator, role?: AriaRole): Promise<void>;
93
271
  assertCellIsFocused(row: number, column: number, role?: AriaRole): Promise<void>;
272
+ /**
273
+ * Assert a cell is (default) or is not in edit mode.
274
+ *
275
+ * @example
276
+ * test("Enter starts editing, Escape stops", async ({ mount, page }) => {
277
+ * await mount("Table/Editing/EditableInstruments");
278
+ * await page.getByRole("radio", { name: "Edit" }).click();
279
+ * const table = new PwTable(page);
280
+ * const cell = table.locateCell(3, 3);
281
+ * await cell.click();
282
+ * await cell.press("Enter");
283
+ * await table.assertCellIsEditing(cell);
284
+ * await cell.press("Escape");
285
+ * await table.assertCellIsEditing(cell, false);
286
+ * });
287
+ */
94
288
  assertCellIsEditing(cell: Locator, isEditing?: boolean): Promise<void>;
95
289
  assertCellIsEditing(row: number, column: number, isEditing?: boolean): Promise<void>;
290
+ /**
291
+ * Assert which rows are rendered, given the visible range of data rows.
292
+ * Checks the rendered row count includes the leading and trailing buffers
293
+ * and that buffered rows beyond the viewport are not in view.
294
+ *
295
+ * @param range the visible range of (0-based) data rows
296
+ * @param renderBufferSize number of rows rendered beyond each end of the viewport
297
+ * @param totalRowCount size of the dataSource
298
+ * @param headerCount number of header rows, default 1
299
+ *
300
+ * @example
301
+ * test("initial render", async ({ page }) => {
302
+ * const table = new PwTable(page);
303
+ * await table.assertRenderedRows({ from: 0, to: 30 }, 5, 1000);
304
+ * });
305
+ */
96
306
  assertRenderedRows({ from, to }: VuuRange, renderBufferSize: number, totalRowCount: number, headerCount?: number): Promise<void>;
307
+ /**
308
+ * Assert which columns are rendered and which are in the viewport, checked
309
+ * against the first data row. Ranges are inclusive, 1-based aria col indexes.
310
+ *
311
+ * @example
312
+ * test("column virtualization", async ({ page }) => {
313
+ * const table = new PwTable(page);
314
+ * await table.assertRenderedColumns({
315
+ * rendered: { from: 1, to: 8 },
316
+ * visible: { from: 1, to: 6 },
317
+ * });
318
+ * });
319
+ */
97
320
  assertRenderedColumns({ rendered, visible, }: {
98
321
  rendered: VuuRange;
99
322
  visible: VuuRange;
@@ -1,8 +1,41 @@
1
1
  import { type Page } from "@playwright/test";
2
- import { PlaywrightPageObject } from "./PlaywrightPageObject";
3
- export declare class PwTableHeaderCell extends PlaywrightPageObject {
4
- private readonly cssSelector;
5
- constructor(page: Page, cssSelector: string);
2
+ import { PwComponent, type PwComponentTarget } from "./PwComponent";
3
+ /**
4
+ * A Table column header cell. Usually obtained from PwTable.headerCell.
5
+ *
6
+ * @example
7
+ * test("currency header", async ({ page }) => {
8
+ * const header = new PwTable(page).headerCell("currency");
9
+ * await expect(header.locator).toHaveText("Currency");
10
+ * });
11
+ */
12
+ export declare class PwTableHeaderCell extends PwComponent {
13
+ protected readonly defaultCssSelector = ".vuuTableHeaderCell";
14
+ /**
15
+ * @param page the Playwright page
16
+ * @param target css selector or Locator for the header cell
17
+ */
18
+ constructor(page: Page, target: PwComponentTarget);
19
+ /**
20
+ * Does the header cell have the selected class. Does not wait or retry,
21
+ * use assertSelected after an action that selects the column.
22
+ *
23
+ * @example
24
+ * test("no column initially selected", async ({ page }) => {
25
+ * const table = new PwTable(page);
26
+ * expect(await table.headerCell("currency").isSelected).toBe(false);
27
+ * });
28
+ */
6
29
  get isSelected(): Promise<boolean>;
30
+ /**
31
+ * Assert the header cell is selected, retrying until the expect timeout.
32
+ *
33
+ * @example
34
+ * test("column is selected", async ({ page }) => {
35
+ * const table = new PwTable(page);
36
+ * // ...select the currency column
37
+ * await table.headerCell("currency").assertSelected();
38
+ * });
39
+ */
7
40
  assertSelected(): Promise<void>;
8
41
  }
package/types/index.d.ts CHANGED
@@ -1,3 +1,8 @@
1
1
  export { PlaywrightPageObject } from "./PlaywrightPageObject";
2
+ export { PwChart } from "./PwChart";
3
+ export { type ChartDataPointInfo, PwChartDataPoint } from "./PwChartDataPoint";
4
+ export { PwComponent, type PwComponentTarget } from "./PwComponent";
5
+ export { PwContextMenu } from "./PwContextMenu";
6
+ export { PwMenuItem } from "./PwMenuItem";
2
7
  export { PwTable } from "./PwTable";
3
8
  export { PwTableHeaderCell } from "./PwTableHeaderCell";
@@ -0,0 +1,3 @@
1
+ export declare const cssAttributeValue: (value: string) => string;
2
+ export declare const byDataIcon: (iconName: string) => string;
3
+ export declare const byId: (id: string) => string;