@powerhousedao/document-engineering 1.39.0 → 1.40.1

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.
Files changed (81) hide show
  1. package/README.md +12 -0
  2. package/dist/src/scalars/graphql/Amount.d.ts +1 -7
  3. package/dist/src/scalars/graphql/Amount.d.ts.map +1 -1
  4. package/dist/src/scalars/graphql/AmountCrypto.d.ts +1 -7
  5. package/dist/src/scalars/graphql/AmountCrypto.d.ts.map +1 -1
  6. package/dist/src/scalars/graphql/AmountCurrency.d.ts +1 -7
  7. package/dist/src/scalars/graphql/AmountCurrency.d.ts.map +1 -1
  8. package/dist/src/scalars/graphql/AmountFiat.d.ts +1 -7
  9. package/dist/src/scalars/graphql/AmountFiat.d.ts.map +1 -1
  10. package/dist/src/scalars/graphql/Date.d.ts +2 -2
  11. package/dist/src/scalars/graphql/Date.d.ts.map +1 -1
  12. package/dist/src/scalars/graphql/Date.js +2 -2
  13. package/dist/src/scalars/graphql/Date.js.map +1 -1
  14. package/dist/src/scalars/graphql/DateTime.d.ts +2 -2
  15. package/dist/src/scalars/graphql/DateTime.d.ts.map +1 -1
  16. package/dist/src/scalars/graphql/DateTime.js +2 -2
  17. package/dist/src/scalars/graphql/DateTime.js.map +1 -1
  18. package/dist/src/scalars/graphql/EmailAddress.d.ts +2 -2
  19. package/dist/src/scalars/graphql/EmailAddress.d.ts.map +1 -1
  20. package/dist/src/scalars/graphql/EmailAddress.js +2 -2
  21. package/dist/src/scalars/graphql/EmailAddress.js.map +1 -1
  22. package/dist/src/scalars/graphql/URL.d.ts +2 -2
  23. package/dist/src/scalars/graphql/URL.d.ts.map +1 -1
  24. package/dist/src/scalars/graphql/URL.js +2 -2
  25. package/dist/src/scalars/graphql/URL.js.map +1 -1
  26. package/dist/src/table/components/default-fns/default-cell-on-save.d.ts +11 -0
  27. package/dist/src/table/components/default-fns/default-cell-on-save.d.ts.map +1 -0
  28. package/dist/src/table/components/default-fns/default-cell-on-save.js +18 -0
  29. package/dist/src/table/components/default-fns/default-cell-on-save.js.map +1 -0
  30. package/dist/src/table/table/object-set-table.d.ts.map +1 -1
  31. package/dist/src/table/table/object-set-table.js +2 -11
  32. package/dist/src/table/table/object-set-table.js.map +1 -1
  33. package/dist/src/table/tests/basic-rendering.test.d.ts +2 -0
  34. package/dist/src/table/tests/basic-rendering.test.d.ts.map +1 -0
  35. package/dist/src/table/tests/basic-rendering.test.js +332 -0
  36. package/dist/src/table/tests/basic-rendering.test.js.map +1 -0
  37. package/dist/src/table/tests/cell-selection.test.d.ts +2 -0
  38. package/dist/src/table/tests/cell-selection.test.d.ts.map +1 -0
  39. package/dist/src/table/tests/cell-selection.test.js +346 -0
  40. package/dist/src/table/tests/cell-selection.test.js.map +1 -0
  41. package/dist/src/table/tests/helpers/test-utils.d.ts +28 -0
  42. package/dist/src/table/tests/helpers/test-utils.d.ts.map +1 -0
  43. package/dist/src/table/tests/helpers/test-utils.js +85 -0
  44. package/dist/src/table/tests/helpers/test-utils.js.map +1 -0
  45. package/dist/src/table/tests/page-objects/base-table.page.d.ts +83 -0
  46. package/dist/src/table/tests/page-objects/base-table.page.d.ts.map +1 -0
  47. package/dist/src/table/tests/page-objects/base-table.page.js +146 -0
  48. package/dist/src/table/tests/page-objects/base-table.page.js.map +1 -0
  49. package/dist/src/table/tests/page-objects/table-cell.page.d.ts +58 -0
  50. package/dist/src/table/tests/page-objects/table-cell.page.d.ts.map +1 -0
  51. package/dist/src/table/tests/page-objects/table-cell.page.js +163 -0
  52. package/dist/src/table/tests/page-objects/table-cell.page.js.map +1 -0
  53. package/dist/src/table/tests/page-objects/table-header.page.d.ts +66 -0
  54. package/dist/src/table/tests/page-objects/table-header.page.d.ts.map +1 -0
  55. package/dist/src/table/tests/page-objects/table-header.page.js +156 -0
  56. package/dist/src/table/tests/page-objects/table-header.page.js.map +1 -0
  57. package/dist/src/table/tests/page-objects/table-row.page.d.ts +98 -0
  58. package/dist/src/table/tests/page-objects/table-row.page.d.ts.map +1 -0
  59. package/dist/src/table/tests/page-objects/table-row.page.js +240 -0
  60. package/dist/src/table/tests/page-objects/table-row.page.js.map +1 -0
  61. package/dist/src/table/tests/page-objects/table.page.d.ts +36 -0
  62. package/dist/src/table/tests/page-objects/table.page.d.ts.map +1 -0
  63. package/dist/src/table/tests/page-objects/table.page.js +46 -0
  64. package/dist/src/table/tests/page-objects/table.page.js.map +1 -0
  65. package/dist/src/table/tests/row-actions.test.d.ts +2 -0
  66. package/dist/src/table/tests/row-actions.test.d.ts.map +1 -0
  67. package/dist/src/table/tests/row-actions.test.js +601 -0
  68. package/dist/src/table/tests/row-actions.test.js.map +1 -0
  69. package/dist/src/table/tests/row-selection.test.d.ts +2 -0
  70. package/dist/src/table/tests/row-selection.test.d.ts.map +1 -0
  71. package/dist/src/table/tests/row-selection.test.js +272 -0
  72. package/dist/src/table/tests/row-selection.test.js.map +1 -0
  73. package/dist/src/table/tests/sorting.test.d.ts +2 -0
  74. package/dist/src/table/tests/sorting.test.d.ts.map +1 -0
  75. package/dist/src/table/tests/sorting.test.js +793 -0
  76. package/dist/src/table/tests/sorting.test.js.map +1 -0
  77. package/dist/src/ui/components/data-entry/date-picker/date-picker.js +1 -1
  78. package/dist/src/ui/components/data-entry/date-picker/date-picker.js.map +1 -1
  79. package/dist/style.css +4 -5
  80. package/dist/tsconfig.tsbuildinfo +1 -1
  81. package/package.json +2 -2
@@ -0,0 +1,146 @@
1
+ import { screen } from '@testing-library/react';
2
+ /**
3
+ * Base page object class for table interactions
4
+ * Provides common methods to query and interact with the table component
5
+ */
6
+ export class BaseTablePage {
7
+ container;
8
+ renderResult;
9
+ constructor(renderResult) {
10
+ this.container = renderResult.container;
11
+ this.renderResult = renderResult;
12
+ }
13
+ /**
14
+ * Gets the main table element
15
+ */
16
+ getTable() {
17
+ return screen.getByRole('table');
18
+ }
19
+ /**
20
+ * Gets the table header element
21
+ */
22
+ getTableHeader() {
23
+ return this.getTable().querySelector('thead');
24
+ }
25
+ /**
26
+ * Gets the table body element
27
+ */
28
+ getTableBody() {
29
+ return this.getTable().querySelector('tbody');
30
+ }
31
+ /**
32
+ * Gets all table rows (excluding header)
33
+ */
34
+ getTableRows() {
35
+ const tbody = this.getTableBody();
36
+ return Array.from(tbody.querySelectorAll('tr'));
37
+ }
38
+ /**
39
+ * Gets all header rows
40
+ */
41
+ getHeaderRows() {
42
+ const thead = this.getTableHeader();
43
+ return Array.from(thead.querySelectorAll('tr'));
44
+ }
45
+ /**
46
+ * Gets a specific row by index (0-based)
47
+ */
48
+ getRowByIndex(index) {
49
+ const rows = this.getTableRows();
50
+ return rows[index] || null;
51
+ }
52
+ /**
53
+ * Gets all cells in a specific row
54
+ */
55
+ getCellsInRow(row) {
56
+ return Array.from(row.querySelectorAll('td, th'));
57
+ }
58
+ /**
59
+ * Gets a specific cell by row and column index (0-based)
60
+ */
61
+ getCellByIndex(rowIndex, columnIndex) {
62
+ const row = this.getRowByIndex(rowIndex);
63
+ if (!row)
64
+ return null;
65
+ const cells = this.getCellsInRow(row);
66
+ return cells[columnIndex] || null;
67
+ }
68
+ /**
69
+ * Gets all header cells
70
+ */
71
+ getHeaderCells() {
72
+ const headerRows = this.getHeaderRows();
73
+ if (headerRows.length === 0)
74
+ return [];
75
+ return this.getCellsInRow(headerRows[0]);
76
+ }
77
+ /**
78
+ * Gets a specific header cell by index (0-based)
79
+ */
80
+ getHeaderCellByIndex(index) {
81
+ const headerCells = this.getHeaderCells();
82
+ return headerCells[index] || null;
83
+ }
84
+ /**
85
+ * Gets the text content of a cell
86
+ */
87
+ getCellText(rowIndex, columnIndex) {
88
+ const cell = this.getCellByIndex(rowIndex, columnIndex);
89
+ return cell ? (cell.textContent || '').trim() : '';
90
+ }
91
+ /**
92
+ * Gets the text content of a header cell
93
+ */
94
+ getHeaderCellText(columnIndex) {
95
+ const headerCell = this.getHeaderCellByIndex(columnIndex);
96
+ return headerCell ? (headerCell.textContent || '').trim() : '';
97
+ }
98
+ /**
99
+ * Gets the number of rows in the table (excluding header)
100
+ */
101
+ getRowCount() {
102
+ return this.getTableRows().length;
103
+ }
104
+ /**
105
+ * Gets the number of columns in the table
106
+ */
107
+ getColumnCount() {
108
+ const headerCells = this.getHeaderCells();
109
+ return headerCells.length;
110
+ }
111
+ /**
112
+ * Checks if the table is present in the DOM
113
+ */
114
+ isTablePresent() {
115
+ try {
116
+ this.getTable();
117
+ return true;
118
+ }
119
+ catch {
120
+ return false;
121
+ }
122
+ }
123
+ /**
124
+ * Gets all column headers as an array of strings
125
+ */
126
+ getColumnHeaders() {
127
+ return this.getHeaderCells().map((cell) => (cell.textContent || '').trim());
128
+ }
129
+ /**
130
+ * Finds a row that contains specific text
131
+ */
132
+ findRowByText(text) {
133
+ const rows = this.getTableRows();
134
+ return rows.find((row) => (row.textContent || '').includes(text)) ?? null;
135
+ }
136
+ /**
137
+ * Gets all text content from a specific row
138
+ */
139
+ getRowText(rowIndex) {
140
+ const row = this.getRowByIndex(rowIndex);
141
+ if (!row)
142
+ return [];
143
+ return this.getCellsInRow(row).map((cell) => (cell.textContent || '').trim());
144
+ }
145
+ }
146
+ //# sourceMappingURL=base-table.page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-table.page.js","sourceRoot":"","sources":["../../../../../src/table/tests/page-objects/base-table.page.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { BaseTablePage } from './base-table.page.js';
2
+ import type { RenderResult } from '@testing-library/react';
3
+ /**
4
+ * Page object for cell-specific interactions
5
+ * Extends BaseTablePage with cell-focused methods
6
+ */
7
+ export declare class TableCellPage extends BaseTablePage {
8
+ constructor(renderResult: RenderResult);
9
+ /**
10
+ * Gets the value of a specific cell
11
+ */
12
+ getCellValue(rowIndex: number, columnIndex: number): string;
13
+ /**
14
+ * Checks if a cell is editable (has input or contenteditable)
15
+ */
16
+ isCellEditable(rowIndex: number, columnIndex: number): boolean;
17
+ /**
18
+ * Gets the input element within a cell (if editable)
19
+ */
20
+ getCellInput(rowIndex: number, columnIndex: number): HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement | null;
21
+ /**
22
+ * Checks if a cell is currently in edit mode
23
+ */
24
+ isCellInEditMode(rowIndex: number, columnIndex: number): boolean;
25
+ /**
26
+ * Gets the data type of a cell based on its content or input type
27
+ */
28
+ getCellDataType(rowIndex: number, columnIndex: number): string;
29
+ /**
30
+ * Checks if a cell contains a specific value
31
+ */
32
+ cellContains(rowIndex: number, columnIndex: number, value: string): boolean;
33
+ /**
34
+ * Gets all cells in a specific column
35
+ */
36
+ getColumnCells(columnIndex: number): string[];
37
+ /**
38
+ * Checks if a cell is empty
39
+ */
40
+ isCellEmpty(rowIndex: number, columnIndex: number): boolean;
41
+ /**
42
+ * Gets the CSS classes of a cell
43
+ */
44
+ getCellClasses(rowIndex: number, columnIndex: number): string[];
45
+ /**
46
+ * Checks if a cell has a specific CSS class
47
+ */
48
+ cellHasClass(rowIndex: number, columnIndex: number, className: string): boolean;
49
+ /**
50
+ * Checks if a cell is currently selected
51
+ */
52
+ isCellSelected(rowIndex: number, columnIndex: number): boolean;
53
+ /**
54
+ * Gets the border color of a selected cell
55
+ */
56
+ getCellBorderColor(rowIndex: number, columnIndex: number): string;
57
+ }
58
+ //# sourceMappingURL=table-cell.page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-cell.page.d.ts","sourceRoot":"","sources":["../../../../../src/table/tests/page-objects/table-cell.page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAE1D;;;GAGG;AACH,qBAAa,aAAc,SAAQ,aAAa;gBAClC,YAAY,EAAE,YAAY;IAItC;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAI3D;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;IAY9D;;OAEG;IACH,YAAY,CACV,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,gBAAgB,GAAG,mBAAmB,GAAG,iBAAiB,GAAG,IAAI;IAOpE;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;IA0BhE;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAoB9D;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAK3E;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE;IAW7C;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;IAK3D;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE;IAO/D;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAK/E;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;IAc9D;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;CAelE"}
@@ -0,0 +1,163 @@
1
+ import { BaseTablePage } from './base-table.page.js';
2
+ /**
3
+ * Page object for cell-specific interactions
4
+ * Extends BaseTablePage with cell-focused methods
5
+ */
6
+ export class TableCellPage extends BaseTablePage {
7
+ constructor(renderResult) {
8
+ super(renderResult);
9
+ }
10
+ /**
11
+ * Gets the value of a specific cell
12
+ */
13
+ getCellValue(rowIndex, columnIndex) {
14
+ return this.getCellText(rowIndex, columnIndex);
15
+ }
16
+ /**
17
+ * Checks if a cell is editable (has input or contenteditable)
18
+ */
19
+ isCellEditable(rowIndex, columnIndex) {
20
+ const cell = this.getCellByIndex(rowIndex, columnIndex);
21
+ if (!cell)
22
+ return false;
23
+ // Check for input elements
24
+ const hasInput = cell.querySelector('input, textarea, select') !== null;
25
+ // Check for contenteditable attribute
26
+ const isContentEditable = cell.getAttribute('contenteditable') === 'true';
27
+ return hasInput || isContentEditable;
28
+ }
29
+ /**
30
+ * Gets the input element within a cell (if editable)
31
+ */
32
+ getCellInput(rowIndex, columnIndex) {
33
+ const cell = this.getCellByIndex(rowIndex, columnIndex);
34
+ if (!cell)
35
+ return null;
36
+ return cell.querySelector('input, textarea, select');
37
+ }
38
+ /**
39
+ * Checks if a cell is currently in edit mode
40
+ */
41
+ isCellInEditMode(rowIndex, columnIndex) {
42
+ const cell = this.getCellByIndex(rowIndex, columnIndex);
43
+ if (!cell)
44
+ return false;
45
+ // First check if the cell is editable at all
46
+ if (!this.isCellEditable(rowIndex, columnIndex)) {
47
+ return false;
48
+ }
49
+ // Look for the form structure and check if the editor div is visible
50
+ const form = cell.querySelector('form');
51
+ if (!form)
52
+ return false;
53
+ // Find the editor div (the one that should be visible in edit mode)
54
+ const editorDiv = form.querySelector('div:not([class*="hidden"])');
55
+ if (!editorDiv)
56
+ return false;
57
+ // Check if this div contains an input and is not hidden
58
+ const input = editorDiv.querySelector('input, textarea, select');
59
+ if (!input)
60
+ return false;
61
+ // Check if the editor div is actually visible (not hidden by CSS)
62
+ const editorStyles = window.getComputedStyle(editorDiv);
63
+ return editorStyles.display !== 'none' && editorStyles.visibility !== 'hidden';
64
+ }
65
+ /**
66
+ * Gets the data type of a cell based on its content or input type
67
+ */
68
+ getCellDataType(rowIndex, columnIndex) {
69
+ const input = this.getCellInput(rowIndex, columnIndex);
70
+ if (input) {
71
+ return input.type || input.tagName.toLowerCase();
72
+ }
73
+ const cell = this.getCellByIndex(rowIndex, columnIndex);
74
+ if (!cell)
75
+ return 'unknown';
76
+ // Try to infer type from content
77
+ const text = (cell.textContent || '').trim();
78
+ if (text === 'true' || text === 'false')
79
+ return 'boolean';
80
+ if (!isNaN(Number(text)) && text !== '')
81
+ return 'number';
82
+ if (text.includes('@'))
83
+ return 'email';
84
+ if (text.startsWith('http'))
85
+ return 'url';
86
+ return 'string';
87
+ }
88
+ /**
89
+ * Checks if a cell contains a specific value
90
+ */
91
+ cellContains(rowIndex, columnIndex, value) {
92
+ const cellValue = this.getCellValue(rowIndex, columnIndex);
93
+ return cellValue.includes(value);
94
+ }
95
+ /**
96
+ * Gets all cells in a specific column
97
+ */
98
+ getColumnCells(columnIndex) {
99
+ const rowCount = this.getRowCount();
100
+ const columnCells = [];
101
+ for (let i = 0; i < rowCount; i++) {
102
+ columnCells.push(this.getCellValue(i, columnIndex));
103
+ }
104
+ return columnCells;
105
+ }
106
+ /**
107
+ * Checks if a cell is empty
108
+ */
109
+ isCellEmpty(rowIndex, columnIndex) {
110
+ const value = this.getCellValue(rowIndex, columnIndex);
111
+ return value === '';
112
+ }
113
+ /**
114
+ * Gets the CSS classes of a cell
115
+ */
116
+ getCellClasses(rowIndex, columnIndex) {
117
+ const cell = this.getCellByIndex(rowIndex, columnIndex);
118
+ if (!cell)
119
+ return [];
120
+ return Array.from(cell.classList);
121
+ }
122
+ /**
123
+ * Checks if a cell has a specific CSS class
124
+ */
125
+ cellHasClass(rowIndex, columnIndex, className) {
126
+ const classes = this.getCellClasses(rowIndex, columnIndex);
127
+ return classes.includes(className);
128
+ }
129
+ /**
130
+ * Checks if a cell is currently selected
131
+ */
132
+ isCellSelected(rowIndex, columnIndex) {
133
+ const cell = this.getCellByIndex(rowIndex, columnIndex);
134
+ if (!cell)
135
+ return false;
136
+ // Check for selection border classes in the inner div
137
+ const innerDiv = cell.querySelector('div[class*="border-"]');
138
+ if (!innerDiv)
139
+ return false;
140
+ const classes = Array.from(innerDiv.classList);
141
+ return classes.some((cls) => cls.includes('border-blue-900') || cls.includes('border-gray-400') || cls.includes('border-red-900'));
142
+ }
143
+ /**
144
+ * Gets the border color of a selected cell
145
+ */
146
+ getCellBorderColor(rowIndex, columnIndex) {
147
+ const cell = this.getCellByIndex(rowIndex, columnIndex);
148
+ if (!cell)
149
+ return 'none';
150
+ const innerDiv = cell.querySelector('div[class*="border-"]');
151
+ if (!innerDiv)
152
+ return 'none';
153
+ const classes = Array.from(innerDiv.classList);
154
+ if (classes.some((cls) => cls.includes('border-blue-900')))
155
+ return 'blue';
156
+ if (classes.some((cls) => cls.includes('border-gray-400')))
157
+ return 'gray';
158
+ if (classes.some((cls) => cls.includes('border-red-900')))
159
+ return 'red';
160
+ return 'none';
161
+ }
162
+ }
163
+ //# sourceMappingURL=table-cell.page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-cell.page.js","sourceRoot":"","sources":["../../../../../src/table/tests/page-objects/table-cell.page.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import { BaseTablePage } from './base-table.page.js';
2
+ import type { RenderResult } from '@testing-library/react';
3
+ /**
4
+ * Page object for header-specific interactions
5
+ * Extends BaseTablePage with header-focused methods
6
+ */
7
+ export declare class TableHeaderPage extends BaseTablePage {
8
+ constructor(renderResult: RenderResult);
9
+ /**
10
+ * Gets the title of a specific column
11
+ */
12
+ getColumnTitle(columnIndex: number): string;
13
+ /**
14
+ * Gets all column titles
15
+ */
16
+ getColumnTitles(): string[];
17
+ /**
18
+ * Checks if a column is sortable
19
+ */
20
+ isColumnSortable(columnIndex: number): boolean;
21
+ /**
22
+ * Gets the sort direction of a column (if sorted)
23
+ */
24
+ getColumnSortDirection(columnIndex: number): 'asc' | 'desc' | null;
25
+ /**
26
+ * Checks if a column is currently sorted
27
+ */
28
+ isColumnSorted(columnIndex: number): boolean;
29
+ /**
30
+ * Gets the width of a column header
31
+ */
32
+ getColumnWidth(columnIndex: number): number;
33
+ /**
34
+ * Gets the CSS classes of a header cell
35
+ */
36
+ getHeaderCellClasses(columnIndex: number): string[];
37
+ /**
38
+ * Checks if a header cell has a specific CSS class
39
+ */
40
+ headerCellHasClass(columnIndex: number, className: string): boolean;
41
+ /**
42
+ * Checks if a column is hidden
43
+ */
44
+ isColumnHidden(columnIndex: number): boolean;
45
+ /**
46
+ * Gets the alignment of a column header
47
+ */
48
+ getColumnAlignment(columnIndex: number): 'left' | 'center' | 'right' | null;
49
+ /**
50
+ * Finds the index of a column by its title
51
+ */
52
+ findColumnIndexByTitle(title: string): number;
53
+ /**
54
+ * Checks if a column title contains specific text
55
+ */
56
+ columnTitleContains(columnIndex: number, text: string): boolean;
57
+ /**
58
+ * Gets the total width of all visible columns
59
+ */
60
+ getTotalHeaderWidth(): number;
61
+ /**
62
+ * Checks if the header is sticky/fixed
63
+ */
64
+ isHeaderSticky(): boolean;
65
+ }
66
+ //# sourceMappingURL=table-header.page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-header.page.d.ts","sourceRoot":"","sources":["../../../../../src/table/tests/page-objects/table-header.page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAE1D;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,aAAa;gBACpC,YAAY,EAAE,YAAY;IAItC;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAI3C;;OAEG;IACH,eAAe,IAAI,MAAM,EAAE;IAI3B;;OAEG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAY9C;;OAEG;IACH,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,IAAI;IAkBlE;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAI5C;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAO3C;;OAEG;IACH,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE;IAOnD;;OAEG;IACH,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAKnE;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAe5C;;OAEG;IACH,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,IAAI;IAc3E;;OAEG;IACH,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAK7C;;OAEG;IACH,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAK/D;;OAEG;IACH,mBAAmB,IAAI,MAAM;IAa7B;;OAEG;IACH,cAAc,IAAI,OAAO;CAY1B"}
@@ -0,0 +1,156 @@
1
+ import { BaseTablePage } from './base-table.page.js';
2
+ /**
3
+ * Page object for header-specific interactions
4
+ * Extends BaseTablePage with header-focused methods
5
+ */
6
+ export class TableHeaderPage extends BaseTablePage {
7
+ constructor(renderResult) {
8
+ super(renderResult);
9
+ }
10
+ /**
11
+ * Gets the title of a specific column
12
+ */
13
+ getColumnTitle(columnIndex) {
14
+ return this.getHeaderCellText(columnIndex);
15
+ }
16
+ /**
17
+ * Gets all column titles
18
+ */
19
+ getColumnTitles() {
20
+ return this.getColumnHeaders();
21
+ }
22
+ /**
23
+ * Checks if a column is sortable
24
+ */
25
+ isColumnSortable(columnIndex) {
26
+ const headerCell = this.getHeaderCellByIndex(columnIndex);
27
+ if (!headerCell)
28
+ return false;
29
+ // Check for sort indicators (SVG elements) or clickable elements
30
+ const hasSortIcon = headerCell.querySelector('svg') !== null;
31
+ const hasClickable = headerCell.querySelector('button, [role="button"]') !== null;
32
+ const hasSortClass = headerCell.classList.contains('cursor-pointer');
33
+ return hasSortIcon || hasClickable || hasSortClass;
34
+ }
35
+ /**
36
+ * Gets the sort direction of a column (if sorted)
37
+ */
38
+ getColumnSortDirection(columnIndex) {
39
+ const headerCell = this.getHeaderCellByIndex(columnIndex);
40
+ if (!headerCell)
41
+ return null;
42
+ // Look for sort direction indicators in the SVG
43
+ const sortIcon = headerCell.querySelector('svg');
44
+ if (!sortIcon)
45
+ return null;
46
+ const classString = sortIcon.className;
47
+ // Check for ascending indicator: [&_path:last-child]:stroke-gray-900
48
+ if (classString.includes('[&_path:last-child]:stroke-gray-900'))
49
+ return 'asc';
50
+ // Check for descending indicator: [&_path:first-child]:stroke-gray-900
51
+ if (classString.includes('[&_path:first-child]:stroke-gray-900'))
52
+ return 'desc';
53
+ return null;
54
+ }
55
+ /**
56
+ * Checks if a column is currently sorted
57
+ */
58
+ isColumnSorted(columnIndex) {
59
+ return this.getColumnSortDirection(columnIndex) !== null;
60
+ }
61
+ /**
62
+ * Gets the width of a column header
63
+ */
64
+ getColumnWidth(columnIndex) {
65
+ const headerCell = this.getHeaderCellByIndex(columnIndex);
66
+ if (!headerCell)
67
+ return 0;
68
+ return headerCell.getBoundingClientRect().width;
69
+ }
70
+ /**
71
+ * Gets the CSS classes of a header cell
72
+ */
73
+ getHeaderCellClasses(columnIndex) {
74
+ const headerCell = this.getHeaderCellByIndex(columnIndex);
75
+ if (!headerCell)
76
+ return [];
77
+ return Array.from(headerCell.classList);
78
+ }
79
+ /**
80
+ * Checks if a header cell has a specific CSS class
81
+ */
82
+ headerCellHasClass(columnIndex, className) {
83
+ const classes = this.getHeaderCellClasses(columnIndex);
84
+ return classes.includes(className);
85
+ }
86
+ /**
87
+ * Checks if a column is hidden
88
+ */
89
+ isColumnHidden(columnIndex) {
90
+ const headerCell = this.getHeaderCellByIndex(columnIndex);
91
+ if (!headerCell)
92
+ return false;
93
+ const classes = this.getHeaderCellClasses(columnIndex);
94
+ const style = headerCell.style;
95
+ return (classes.includes('hidden') ||
96
+ style.display === 'none' ||
97
+ style.visibility === 'hidden' ||
98
+ headerCell.getAttribute('aria-hidden') === 'true');
99
+ }
100
+ /**
101
+ * Gets the alignment of a column header
102
+ */
103
+ getColumnAlignment(columnIndex) {
104
+ const headerCell = this.getHeaderCellByIndex(columnIndex);
105
+ if (!headerCell)
106
+ return null;
107
+ const classes = this.getHeaderCellClasses(columnIndex);
108
+ const style = headerCell.style;
109
+ if (classes.includes('text-center') || style.textAlign === 'center')
110
+ return 'center';
111
+ if (classes.includes('text-right') || style.textAlign === 'right')
112
+ return 'right';
113
+ if (classes.includes('text-left') || style.textAlign === 'left')
114
+ return 'left';
115
+ return 'left'; // default
116
+ }
117
+ /**
118
+ * Finds the index of a column by its title
119
+ */
120
+ findColumnIndexByTitle(title) {
121
+ const titles = this.getColumnTitles();
122
+ return titles.findIndex((t) => t.toLowerCase().includes(title.toLowerCase()));
123
+ }
124
+ /**
125
+ * Checks if a column title contains specific text
126
+ */
127
+ columnTitleContains(columnIndex, text) {
128
+ const title = this.getColumnTitle(columnIndex);
129
+ return title.toLowerCase().includes(text.toLowerCase());
130
+ }
131
+ /**
132
+ * Gets the total width of all visible columns
133
+ */
134
+ getTotalHeaderWidth() {
135
+ const columnCount = this.getColumnCount();
136
+ let totalWidth = 0;
137
+ for (let i = 0; i < columnCount; i++) {
138
+ if (!this.isColumnHidden(i)) {
139
+ totalWidth += this.getColumnWidth(i);
140
+ }
141
+ }
142
+ return totalWidth;
143
+ }
144
+ /**
145
+ * Checks if the header is sticky/fixed
146
+ */
147
+ isHeaderSticky() {
148
+ const header = this.getTableHeader();
149
+ const classes = Array.from(header.classList);
150
+ const style = header.style;
151
+ return (classes.some((cls) => cls.includes('sticky') || cls.includes('fixed')) ||
152
+ style.position === 'sticky' ||
153
+ style.position === 'fixed');
154
+ }
155
+ }
156
+ //# sourceMappingURL=table-header.page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-header.page.js","sourceRoot":"","sources":["../../../../../src/table/tests/page-objects/table-header.page.ts"],"names":[],"mappings":"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"}