@thinkwise/testwise 0.2.62 → 0.2.99

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 (458) hide show
  1. package/Testwise.ts +35 -0
  2. package/artifact-builder/ArtifactManager.ts +25 -2
  3. package/artifact-builder/ComponentClassModelBuilder.ts +148 -0
  4. package/artifact-builder/InterfaceGenerator.ts +31 -33
  5. package/artifact-builder/ModelDataBuilder.ts +18 -20
  6. package/artifact-builder/ModelDataRefiner.ts +23 -3
  7. package/artifact-builder/SchemaGenerator.ts +45 -35
  8. package/artifact-builder/ScreenInterfaceRefiner.ts +25 -10
  9. package/artifact-builder/SelectorBuilder.ts +30 -24
  10. package/artifact-builder/SubjectClassModelBuilder.ts +209 -0
  11. package/artifact-builder/SubjectComponentGenerator.ts +67 -246
  12. package/artifact-builder/SubjectGenerator.ts +117 -230
  13. package/artifact-builder/SubjectRegistration.ts +41 -32
  14. package/artifact-builder/TsFileModel.ts +94 -0
  15. package/artifact-builder/TsFileSerializer.ts +247 -0
  16. package/artifact-builder/helpers/DataRetriever.ts +64 -27
  17. package/artifact-builder/helpers/NamingHandler.ts +23 -78
  18. package/artifact-builder/helpers/PipelinePaths.ts +123 -0
  19. package/artifact-builder/helpers/Stopwatch.ts +10 -0
  20. package/artifact-builder/helpers/index.ts +1 -0
  21. package/artifact-builder/index.ts +4 -0
  22. package/components/BaseComponentObjects.ts +17 -0
  23. package/components/action-bar/ActionBar.ts +35 -47
  24. package/components/action-bar/ActionBarObjects.ts +2 -0
  25. package/components/action-bar/CustomActionBar.ts +6 -0
  26. package/components/cardlist/Cardlist.ts +6 -0
  27. package/components/chart/Chart.ts +6 -0
  28. package/components/combined-filter/CombinedFilter.ts +9 -0
  29. package/components/cube-view-bar/CubeViewBar.ts +6 -0
  30. package/components/export/ExportComponent.ts +12 -0
  31. package/components/filter/ExcelStyleFilterPopup.ts +83 -10
  32. package/components/filter/ExcelStyleFilterPopupObjects.ts +29 -3
  33. package/components/filter/FilterForm.ts +10 -0
  34. package/components/filter/FilterPopup.ts +30 -9
  35. package/components/filter/FilterPopupObjects.ts +10 -3
  36. package/components/filter/FindForm.ts +7 -0
  37. package/components/filter/ManagePrefilterPopup.ts +11 -0
  38. package/components/form/Form.ts +16 -0
  39. package/components/grid/Grid.ts +50 -14
  40. package/components/grid/GridObjects.ts +0 -15
  41. package/components/maps/Maps.ts +6 -0
  42. package/components/menu/ListBarMenuComponent.ts +10 -0
  43. package/components/pivot-grid/PivotGrid.ts +6 -0
  44. package/components/pivot-grid/PivotGridFieldList.ts +7 -0
  45. package/components/pop-up/AllRowsPopUp.ts +12 -0
  46. package/components/pop-up/PopUpComponent.ts +11 -0
  47. package/components/prefilter-list/PrefilterList.ts +9 -0
  48. package/components/preview/Preview.ts +6 -0
  49. package/components/report-bar/ReportBar.ts +6 -0
  50. package/components/report-tiles/ReportTiles.ts +6 -0
  51. package/components/scheduler/Scheduler.ts +6 -0
  52. package/components/snackbar/SnackBar.ts +12 -0
  53. package/components/splitter/Splitter.ts +6 -0
  54. package/components/tab/BaseTab.ts +5 -0
  55. package/components/tab/DetailTabPage.ts +11 -0
  56. package/components/tab/Tab.ts +10 -0
  57. package/components/task/TaskBar.ts +13 -3
  58. package/components/task/TaskTiles.ts +12 -3
  59. package/components/topbar/TopBar.ts +10 -0
  60. package/components/tree-view/TreeView.ts +9 -0
  61. package/controls/DateControl.ts +47 -9
  62. package/controls/DateControlObjects.ts +15 -0
  63. package/controls/FormComboBox.ts +43 -26
  64. package/controls/FormComboBoxObjects.ts +27 -0
  65. package/controls/GridColumnControl.ts +35 -4
  66. package/controls/GridColumnControlObjects.ts +1 -1
  67. package/controls/InputFieldControl.ts +61 -15
  68. package/controls/InputFieldControlObjects.ts +19 -0
  69. package/controls/LookupDropdown.ts +59 -31
  70. package/controls/LookupDropdownObjects.ts +19 -0
  71. package/dist/Testwise.js +35 -0
  72. package/dist/Testwise.js.map +1 -1
  73. package/dist/artifact-builder/ArtifactManager.d.ts +18 -1
  74. package/dist/artifact-builder/ArtifactManager.js +24 -2
  75. package/dist/artifact-builder/ArtifactManager.js.map +1 -1
  76. package/dist/artifact-builder/ComponentClassModelBuilder.d.ts +22 -0
  77. package/dist/artifact-builder/ComponentClassModelBuilder.js +115 -0
  78. package/dist/artifact-builder/ComponentClassModelBuilder.js.map +1 -0
  79. package/dist/artifact-builder/InterfaceGenerator.d.ts +15 -6
  80. package/dist/artifact-builder/InterfaceGenerator.js +27 -26
  81. package/dist/artifact-builder/InterfaceGenerator.js.map +1 -1
  82. package/dist/artifact-builder/ModelDataBuilder.d.ts +7 -0
  83. package/dist/artifact-builder/ModelDataBuilder.js +13 -5
  84. package/dist/artifact-builder/ModelDataBuilder.js.map +1 -1
  85. package/dist/artifact-builder/ModelDataRefiner.d.ts +18 -1
  86. package/dist/artifact-builder/ModelDataRefiner.js +18 -3
  87. package/dist/artifact-builder/ModelDataRefiner.js.map +1 -1
  88. package/dist/artifact-builder/SchemaGenerator.d.ts +21 -5
  89. package/dist/artifact-builder/SchemaGenerator.js +38 -26
  90. package/dist/artifact-builder/SchemaGenerator.js.map +1 -1
  91. package/dist/artifact-builder/ScreenInterfaceRefiner.d.ts +18 -1
  92. package/dist/artifact-builder/ScreenInterfaceRefiner.js +23 -9
  93. package/dist/artifact-builder/ScreenInterfaceRefiner.js.map +1 -1
  94. package/dist/artifact-builder/SelectorBuilder.d.ts +18 -5
  95. package/dist/artifact-builder/SelectorBuilder.js +29 -14
  96. package/dist/artifact-builder/SelectorBuilder.js.map +1 -1
  97. package/dist/artifact-builder/SubjectClassModelBuilder.d.ts +38 -0
  98. package/dist/artifact-builder/SubjectClassModelBuilder.js +158 -0
  99. package/dist/artifact-builder/SubjectClassModelBuilder.js.map +1 -0
  100. package/dist/artifact-builder/SubjectComponentGenerator.d.ts +25 -14
  101. package/dist/artifact-builder/SubjectComponentGenerator.js +65 -189
  102. package/dist/artifact-builder/SubjectComponentGenerator.js.map +1 -1
  103. package/dist/artifact-builder/SubjectGenerator.d.ts +32 -13
  104. package/dist/artifact-builder/SubjectGenerator.js +81 -165
  105. package/dist/artifact-builder/SubjectGenerator.js.map +1 -1
  106. package/dist/artifact-builder/SubjectRegistration.d.ts +22 -8
  107. package/dist/artifact-builder/SubjectRegistration.js +29 -14
  108. package/dist/artifact-builder/SubjectRegistration.js.map +1 -1
  109. package/dist/artifact-builder/TsFileModel.d.ts +86 -0
  110. package/dist/artifact-builder/TsFileModel.js +2 -0
  111. package/dist/artifact-builder/TsFileModel.js.map +1 -0
  112. package/dist/artifact-builder/TsFileSerializer.d.ts +19 -0
  113. package/dist/artifact-builder/TsFileSerializer.js +225 -0
  114. package/dist/artifact-builder/TsFileSerializer.js.map +1 -0
  115. package/dist/artifact-builder/helpers/DataRetriever.d.ts +22 -3
  116. package/dist/artifact-builder/helpers/DataRetriever.js +56 -26
  117. package/dist/artifact-builder/helpers/DataRetriever.js.map +1 -1
  118. package/dist/artifact-builder/helpers/NamingHandler.d.ts +18 -6
  119. package/dist/artifact-builder/helpers/NamingHandler.js +20 -61
  120. package/dist/artifact-builder/helpers/NamingHandler.js.map +1 -1
  121. package/dist/artifact-builder/helpers/PipelinePaths.d.ts +52 -0
  122. package/dist/artifact-builder/helpers/PipelinePaths.js +99 -0
  123. package/dist/artifact-builder/helpers/PipelinePaths.js.map +1 -0
  124. package/dist/artifact-builder/helpers/Stopwatch.d.ts +10 -0
  125. package/dist/artifact-builder/helpers/Stopwatch.js +10 -0
  126. package/dist/artifact-builder/helpers/Stopwatch.js.map +1 -1
  127. package/dist/artifact-builder/helpers/index.d.ts +1 -0
  128. package/dist/artifact-builder/helpers/index.js +1 -0
  129. package/dist/artifact-builder/helpers/index.js.map +1 -1
  130. package/dist/artifact-builder/index.d.ts +4 -0
  131. package/dist/artifact-builder/index.js +4 -0
  132. package/dist/artifact-builder/index.js.map +1 -1
  133. package/dist/components/BaseComponentObjects.d.ts +17 -0
  134. package/dist/components/BaseComponentObjects.js +17 -0
  135. package/dist/components/BaseComponentObjects.js.map +1 -1
  136. package/dist/components/action-bar/ActionBar.d.ts +21 -24
  137. package/dist/components/action-bar/ActionBar.js +31 -24
  138. package/dist/components/action-bar/ActionBar.js.map +1 -1
  139. package/dist/components/action-bar/ActionBarObjects.d.ts +1 -0
  140. package/dist/components/action-bar/ActionBarObjects.js +1 -0
  141. package/dist/components/action-bar/ActionBarObjects.js.map +1 -1
  142. package/dist/components/action-bar/CustomActionBar.d.ts +6 -0
  143. package/dist/components/action-bar/CustomActionBar.js +6 -0
  144. package/dist/components/action-bar/CustomActionBar.js.map +1 -1
  145. package/dist/components/cardlist/Cardlist.d.ts +6 -0
  146. package/dist/components/cardlist/Cardlist.js +6 -0
  147. package/dist/components/cardlist/Cardlist.js.map +1 -1
  148. package/dist/components/chart/Chart.d.ts +6 -0
  149. package/dist/components/chart/Chart.js +6 -0
  150. package/dist/components/chart/Chart.js.map +1 -1
  151. package/dist/components/combined-filter/CombinedFilter.d.ts +9 -0
  152. package/dist/components/combined-filter/CombinedFilter.js +9 -0
  153. package/dist/components/combined-filter/CombinedFilter.js.map +1 -1
  154. package/dist/components/cube-view-bar/CubeViewBar.d.ts +6 -0
  155. package/dist/components/cube-view-bar/CubeViewBar.js +6 -0
  156. package/dist/components/cube-view-bar/CubeViewBar.js.map +1 -1
  157. package/dist/components/export/ExportComponent.d.ts +12 -0
  158. package/dist/components/export/ExportComponent.js +12 -0
  159. package/dist/components/export/ExportComponent.js.map +1 -1
  160. package/dist/components/filter/ExcelStyleFilterPopup.d.ts +25 -2
  161. package/dist/components/filter/ExcelStyleFilterPopup.js +60 -6
  162. package/dist/components/filter/ExcelStyleFilterPopup.js.map +1 -1
  163. package/dist/components/filter/ExcelStyleFilterPopupObjects.d.ts +8 -1
  164. package/dist/components/filter/ExcelStyleFilterPopupObjects.js +15 -2
  165. package/dist/components/filter/ExcelStyleFilterPopupObjects.js.map +1 -1
  166. package/dist/components/filter/FilterForm.d.ts +10 -0
  167. package/dist/components/filter/FilterForm.js +10 -0
  168. package/dist/components/filter/FilterForm.js.map +1 -1
  169. package/dist/components/filter/FilterPopup.d.ts +22 -4
  170. package/dist/components/filter/FilterPopup.js +17 -9
  171. package/dist/components/filter/FilterPopup.js.map +1 -1
  172. package/dist/components/filter/FilterPopupObjects.d.ts +5 -2
  173. package/dist/components/filter/FilterPopupObjects.js +5 -2
  174. package/dist/components/filter/FilterPopupObjects.js.map +1 -1
  175. package/dist/components/filter/FindForm.d.ts +7 -0
  176. package/dist/components/filter/FindForm.js +7 -0
  177. package/dist/components/filter/FindForm.js.map +1 -1
  178. package/dist/components/filter/ManagePrefilterPopup.d.ts +11 -0
  179. package/dist/components/filter/ManagePrefilterPopup.js +11 -0
  180. package/dist/components/filter/ManagePrefilterPopup.js.map +1 -1
  181. package/dist/components/form/Form.d.ts +16 -0
  182. package/dist/components/form/Form.js +16 -0
  183. package/dist/components/form/Form.js.map +1 -1
  184. package/dist/components/grid/Grid.d.ts +20 -1
  185. package/dist/components/grid/Grid.js +35 -25
  186. package/dist/components/grid/Grid.js.map +1 -1
  187. package/dist/components/grid/GridObjects.d.ts +0 -4
  188. package/dist/components/grid/GridObjects.js +0 -6
  189. package/dist/components/grid/GridObjects.js.map +1 -1
  190. package/dist/components/maps/Maps.d.ts +6 -0
  191. package/dist/components/maps/Maps.js +6 -0
  192. package/dist/components/maps/Maps.js.map +1 -1
  193. package/dist/components/menu/ListBarMenuComponent.d.ts +10 -0
  194. package/dist/components/menu/ListBarMenuComponent.js +10 -0
  195. package/dist/components/menu/ListBarMenuComponent.js.map +1 -1
  196. package/dist/components/pivot-grid/PivotGrid.d.ts +6 -0
  197. package/dist/components/pivot-grid/PivotGrid.js +6 -0
  198. package/dist/components/pivot-grid/PivotGrid.js.map +1 -1
  199. package/dist/components/pivot-grid/PivotGridFieldList.d.ts +7 -0
  200. package/dist/components/pivot-grid/PivotGridFieldList.js +7 -0
  201. package/dist/components/pivot-grid/PivotGridFieldList.js.map +1 -1
  202. package/dist/components/pop-up/AllRowsPopUp.d.ts +12 -0
  203. package/dist/components/pop-up/AllRowsPopUp.js +12 -0
  204. package/dist/components/pop-up/AllRowsPopUp.js.map +1 -1
  205. package/dist/components/pop-up/PopUpComponent.d.ts +11 -0
  206. package/dist/components/pop-up/PopUpComponent.js +11 -0
  207. package/dist/components/pop-up/PopUpComponent.js.map +1 -1
  208. package/dist/components/prefilter-list/PrefilterList.d.ts +9 -0
  209. package/dist/components/prefilter-list/PrefilterList.js +9 -0
  210. package/dist/components/prefilter-list/PrefilterList.js.map +1 -1
  211. package/dist/components/preview/Preview.d.ts +6 -0
  212. package/dist/components/preview/Preview.js +6 -0
  213. package/dist/components/preview/Preview.js.map +1 -1
  214. package/dist/components/report-bar/ReportBar.d.ts +6 -0
  215. package/dist/components/report-bar/ReportBar.js +6 -0
  216. package/dist/components/report-bar/ReportBar.js.map +1 -1
  217. package/dist/components/report-tiles/ReportTiles.d.ts +6 -0
  218. package/dist/components/report-tiles/ReportTiles.js +6 -0
  219. package/dist/components/report-tiles/ReportTiles.js.map +1 -1
  220. package/dist/components/scheduler/Scheduler.d.ts +6 -0
  221. package/dist/components/scheduler/Scheduler.js +6 -0
  222. package/dist/components/scheduler/Scheduler.js.map +1 -1
  223. package/dist/components/snackbar/SnackBar.d.ts +12 -0
  224. package/dist/components/snackbar/SnackBar.js +12 -0
  225. package/dist/components/snackbar/SnackBar.js.map +1 -1
  226. package/dist/components/splitter/Splitter.d.ts +6 -0
  227. package/dist/components/splitter/Splitter.js +6 -0
  228. package/dist/components/splitter/Splitter.js.map +1 -1
  229. package/dist/components/tab/BaseTab.d.ts +5 -0
  230. package/dist/components/tab/BaseTab.js +5 -0
  231. package/dist/components/tab/BaseTab.js.map +1 -1
  232. package/dist/components/tab/DetailTabPage.d.ts +11 -0
  233. package/dist/components/tab/DetailTabPage.js +11 -0
  234. package/dist/components/tab/DetailTabPage.js.map +1 -1
  235. package/dist/components/tab/Tab.d.ts +10 -0
  236. package/dist/components/tab/Tab.js +10 -0
  237. package/dist/components/tab/Tab.js.map +1 -1
  238. package/dist/components/task/TaskBar.d.ts +12 -2
  239. package/dist/components/task/TaskBar.js +13 -3
  240. package/dist/components/task/TaskBar.js.map +1 -1
  241. package/dist/components/task/TaskTiles.d.ts +11 -2
  242. package/dist/components/task/TaskTiles.js +12 -3
  243. package/dist/components/task/TaskTiles.js.map +1 -1
  244. package/dist/components/topbar/TopBar.d.ts +10 -0
  245. package/dist/components/topbar/TopBar.js +10 -0
  246. package/dist/components/topbar/TopBar.js.map +1 -1
  247. package/dist/components/tree-view/TreeView.d.ts +9 -0
  248. package/dist/components/tree-view/TreeView.js +9 -0
  249. package/dist/components/tree-view/TreeView.js.map +1 -1
  250. package/dist/controls/DateControl.d.ts +40 -2
  251. package/dist/controls/DateControl.js +24 -7
  252. package/dist/controls/DateControl.js.map +1 -1
  253. package/dist/controls/DateControlObjects.d.ts +8 -1
  254. package/dist/controls/DateControlObjects.js +8 -1
  255. package/dist/controls/DateControlObjects.js.map +1 -1
  256. package/dist/controls/FormComboBox.d.ts +30 -0
  257. package/dist/controls/FormComboBox.js +19 -16
  258. package/dist/controls/FormComboBox.js.map +1 -1
  259. package/dist/controls/FormComboBoxObjects.d.ts +12 -1
  260. package/dist/controls/FormComboBoxObjects.js +15 -1
  261. package/dist/controls/FormComboBoxObjects.js.map +1 -1
  262. package/dist/controls/GridColumnControl.d.ts +30 -0
  263. package/dist/controls/GridColumnControl.js +13 -4
  264. package/dist/controls/GridColumnControl.js.map +1 -1
  265. package/dist/controls/GridColumnControlObjects.js +1 -1
  266. package/dist/controls/GridColumnControlObjects.js.map +1 -1
  267. package/dist/controls/InputFieldControl.d.ts +50 -3
  268. package/dist/controls/InputFieldControl.js +40 -11
  269. package/dist/controls/InputFieldControl.js.map +1 -1
  270. package/dist/controls/InputFieldControlObjects.d.ts +10 -1
  271. package/dist/controls/InputFieldControlObjects.js +10 -1
  272. package/dist/controls/InputFieldControlObjects.js.map +1 -1
  273. package/dist/controls/LookupDropdown.d.ts +29 -0
  274. package/dist/controls/LookupDropdown.js +36 -25
  275. package/dist/controls/LookupDropdown.js.map +1 -1
  276. package/dist/controls/LookupDropdownObjects.d.ts +10 -0
  277. package/dist/controls/LookupDropdownObjects.js +11 -0
  278. package/dist/controls/LookupDropdownObjects.js.map +1 -0
  279. package/dist/enums/ElementTypes.d.ts +18 -0
  280. package/dist/enums/ElementTypes.js +18 -0
  281. package/dist/enums/ElementTypes.js.map +1 -1
  282. package/dist/enums/ExportFormat.d.ts +8 -0
  283. package/dist/enums/ExportFormat.js +8 -0
  284. package/dist/enums/ExportFormat.js.map +1 -1
  285. package/dist/enums/LogLevel.d.ts +17 -0
  286. package/dist/enums/LogLevel.js +17 -1
  287. package/dist/enums/LogLevel.js.map +1 -1
  288. package/dist/enums/index.d.ts +1 -0
  289. package/dist/enums/index.js +1 -0
  290. package/dist/enums/index.js.map +1 -1
  291. package/dist/helpers/ConfigChecker.d.ts +13 -0
  292. package/dist/helpers/ConfigChecker.js +13 -0
  293. package/dist/helpers/ConfigChecker.js.map +1 -1
  294. package/dist/helpers/Ensure.d.ts +13 -0
  295. package/dist/helpers/Ensure.js +13 -0
  296. package/dist/helpers/Ensure.js.map +1 -1
  297. package/dist/helpers/FlightTracker.d.ts +13 -3
  298. package/dist/helpers/FlightTracker.js +103 -17
  299. package/dist/helpers/FlightTracker.js.map +1 -1
  300. package/dist/helpers/GlobalWaitEventHandler.d.ts +13 -0
  301. package/dist/helpers/GlobalWaitEventHandler.js +13 -0
  302. package/dist/helpers/GlobalWaitEventHandler.js.map +1 -1
  303. package/dist/helpers/LoginHelper.d.ts +35 -1
  304. package/dist/helpers/LoginHelper.js +46 -11
  305. package/dist/helpers/LoginHelper.js.map +1 -1
  306. package/dist/helpers/PathResolver.d.ts +22 -0
  307. package/dist/helpers/PathResolver.js +22 -0
  308. package/dist/helpers/PathResolver.js.map +1 -1
  309. package/dist/helpers/Poll.d.ts +13 -1
  310. package/dist/helpers/Poll.js +12 -0
  311. package/dist/helpers/Poll.js.map +1 -1
  312. package/dist/helpers/RegexHelper.d.ts +15 -0
  313. package/dist/helpers/RegexHelper.js +15 -3
  314. package/dist/helpers/RegexHelper.js.map +1 -1
  315. package/dist/helpers/SubjectNavigator.d.ts +26 -0
  316. package/dist/helpers/SubjectNavigator.js +51 -0
  317. package/dist/helpers/SubjectNavigator.js.map +1 -0
  318. package/dist/helpers/UserSimulationHelper.d.ts +14 -0
  319. package/dist/helpers/UserSimulationHelper.js +14 -0
  320. package/dist/helpers/UserSimulationHelper.js.map +1 -1
  321. package/dist/helpers/index.d.ts +1 -0
  322. package/dist/helpers/index.js +1 -0
  323. package/dist/helpers/index.js.map +1 -1
  324. package/dist/index.d.ts +6 -20
  325. package/dist/index.js +1 -0
  326. package/dist/index.js.map +1 -1
  327. package/dist/interfaces/IComponentObjects.d.ts +12 -0
  328. package/dist/interfaces/IComponentSchemaMeta.d.ts +15 -0
  329. package/dist/interfaces/IComponentSchemaMeta.js +2 -0
  330. package/dist/interfaces/IComponentSchemaMeta.js.map +1 -0
  331. package/dist/interfaces/IProperty.d.ts +13 -0
  332. package/dist/interfaces/IRegisteredSubjects.d.ts +12 -0
  333. package/dist/interfaces/ISeedSubjectDraft.d.ts +16 -0
  334. package/dist/interfaces/ISeedSubjectDraft.js +2 -0
  335. package/dist/interfaces/ISeedSubjectDraft.js.map +1 -0
  336. package/dist/interfaces/ISubject.d.ts +13 -0
  337. package/dist/interfaces/ISubjectDetail.d.ts +11 -0
  338. package/dist/interfaces/ISubjectDetail.js +2 -0
  339. package/dist/interfaces/ISubjectDetail.js.map +1 -0
  340. package/dist/mcp/ArtifactResolver.d.ts +152 -0
  341. package/dist/mcp/ArtifactResolver.js +232 -0
  342. package/dist/mcp/ArtifactResolver.js.map +1 -0
  343. package/dist/mcp/index.d.ts +2 -0
  344. package/dist/mcp/index.js +2 -0
  345. package/dist/mcp/index.js.map +1 -0
  346. package/dist/page-extensions/GlobalComponents.d.ts +30 -0
  347. package/dist/page-extensions/GlobalComponents.js +30 -0
  348. package/dist/page-extensions/GlobalComponents.js.map +1 -1
  349. package/dist/page-extensions/GoToDeepLink.d.ts +9 -0
  350. package/dist/page-extensions/GoToDeepLink.js +9 -0
  351. package/dist/page-extensions/GoToDeepLink.js.map +1 -1
  352. package/dist/page-extensions/LoginFeatures.d.ts +8 -0
  353. package/dist/page-extensions/LoginFeatures.js +8 -0
  354. package/dist/page-extensions/LoginFeatures.js.map +1 -1
  355. package/dist/page-extensions/SubjectRegistry.d.ts +31 -0
  356. package/dist/page-extensions/SubjectRegistry.js +31 -0
  357. package/dist/page-extensions/SubjectRegistry.js.map +1 -1
  358. package/dist/page-extensions/UserSimulation.d.ts +21 -0
  359. package/dist/page-extensions/UserSimulation.js +21 -0
  360. package/dist/page-extensions/UserSimulation.js.map +1 -1
  361. package/dist/page-extensions/WaitEventHandler.d.ts +20 -0
  362. package/dist/page-extensions/WaitEventHandler.js +20 -0
  363. package/dist/page-extensions/WaitEventHandler.js.map +1 -1
  364. package/dist/page-overrides/ClickOverride.d.ts +23 -2
  365. package/dist/page-overrides/ClickOverride.js +34 -50
  366. package/dist/page-overrides/ClickOverride.js.map +1 -1
  367. package/dist/page-overrides/FillOverride.d.ts +23 -0
  368. package/dist/page-overrides/FillOverride.js +46 -66
  369. package/dist/page-overrides/FillOverride.js.map +1 -1
  370. package/dist/services/ConfigBuilder.d.ts +24 -0
  371. package/dist/services/ConfigBuilder.js +24 -0
  372. package/dist/services/ConfigBuilder.js.map +1 -1
  373. package/dist/services/IndiciumApi.service.d.ts +26 -0
  374. package/dist/services/IndiciumApi.service.js +40 -5
  375. package/dist/services/IndiciumApi.service.js.map +1 -1
  376. package/dist/services/Logger.d.ts +13 -0
  377. package/dist/services/Logger.js +39 -0
  378. package/dist/services/Logger.js.map +1 -1
  379. package/dist/types/Components.d.ts +18 -1
  380. package/dist/types/Components.js +0 -1
  381. package/dist/types/Components.js.map +1 -1
  382. package/dist/types/LocatorType.d.ts +5 -0
  383. package/dist/types/LocatorType.js +2 -0
  384. package/dist/types/LocatorType.js.map +1 -0
  385. package/dist/types/PollTypes.d.ts +8 -0
  386. package/dist/types/Test.d.ts +18 -0
  387. package/dist/types/Universal.d.ts +12 -0
  388. package/dist/types/index.d.ts +2 -0
  389. package/dist/types/index.js +2 -0
  390. package/dist/types/index.js.map +1 -1
  391. package/enums/ElementTypes.ts +18 -0
  392. package/enums/ExportFormat.ts +8 -0
  393. package/enums/LogLevel.ts +17 -1
  394. package/enums/index.ts +1 -0
  395. package/helpers/ConfigChecker.ts +13 -0
  396. package/helpers/Ensure.ts +13 -0
  397. package/helpers/FlightTracker.ts +109 -20
  398. package/helpers/GlobalWaitEventHandler.ts +13 -0
  399. package/helpers/LoginHelper.ts +49 -12
  400. package/helpers/PathResolver.ts +22 -0
  401. package/helpers/Poll.ts +13 -1
  402. package/helpers/RegexHelper.ts +15 -3
  403. package/helpers/SubjectNavigator.ts +57 -0
  404. package/helpers/UserSimulationHelper.ts +14 -0
  405. package/helpers/index.ts +1 -0
  406. package/index.ts +1 -0
  407. package/interfaces/IComponentObjects.ts +12 -0
  408. package/interfaces/IComponentSchemaMeta.ts +17 -0
  409. package/interfaces/IProperty.ts +13 -0
  410. package/interfaces/IRegisteredSubjects.ts +12 -0
  411. package/interfaces/ISeedSubjectDraft.ts +17 -0
  412. package/interfaces/ISubject.ts +13 -0
  413. package/interfaces/ISubjectDetail.ts +12 -0
  414. package/mcp/ArtifactResolver.ts +296 -0
  415. package/mcp/index.ts +2 -0
  416. package/package.json +20 -8
  417. package/page-extensions/GlobalComponents.ts +30 -0
  418. package/page-extensions/GoToDeepLink.ts +9 -0
  419. package/page-extensions/LoginFeatures.ts +8 -0
  420. package/page-extensions/SubjectRegistry.ts +32 -0
  421. package/page-extensions/UserSimulation.ts +21 -0
  422. package/page-extensions/WaitEventHandler.ts +20 -0
  423. package/page-overrides/ClickOverride.ts +36 -55
  424. package/page-overrides/FillOverride.ts +59 -73
  425. package/promptCredentials.js +1 -1
  426. package/scripts/Testwise.template.json +1 -1
  427. package/scripts/diagram.js +2267 -0
  428. package/scripts/main.js +84 -63
  429. package/scripts/postinstall.js +55 -42
  430. package/scripts/setup.js +91 -37
  431. package/scripts/sync.js +767 -748
  432. package/services/ConfigBuilder.ts +24 -0
  433. package/services/IndiciumApi.service.ts +44 -6
  434. package/services/Logger.ts +40 -0
  435. package/templates/copilot-instructions.md +130 -0
  436. package/templates/mcp.json +9 -0
  437. package/templates/testwise-test-expert.agent.md +453 -0
  438. package/tests/tsconfig.json +12 -0
  439. package/tsconfig.json +6 -2
  440. package/types/Components.ts +17 -2
  441. package/types/LocatorType.ts +5 -0
  442. package/types/PollTypes.ts +8 -0
  443. package/types/Test.ts +18 -0
  444. package/types/Universal.ts +12 -0
  445. package/types/index.ts +2 -0
  446. package/dist/interfaces/IStoredTestResults.d.ts +0 -5
  447. package/dist/interfaces/IStoredTestResults.js +0 -2
  448. package/dist/interfaces/IStoredTestResults.js.map +0 -1
  449. package/dist/templates/test-artifacts/SubjectPageBase.d.ts +0 -5
  450. package/dist/templates/test-artifacts/SubjectPageBase.js +0 -6
  451. package/dist/templates/test-artifacts/SubjectPageBase.js.map +0 -1
  452. package/dist/templates/test-artifacts/screens/index.d.ts +0 -1
  453. package/dist/templates/test-artifacts/screens/index.js +0 -2
  454. package/dist/templates/test-artifacts/screens/index.js.map +0 -1
  455. package/dist/templates/test-artifacts/subjects/index.d.ts +0 -1
  456. package/dist/templates/test-artifacts/subjects/index.js +0 -2
  457. package/dist/templates/test-artifacts/subjects/index.js.map +0 -1
  458. package/interfaces/IStoredTestResults.ts +0 -6
@@ -1,6 +1,23 @@
1
1
  import type { Locator, Page } from '@playwright/test';
2
2
  import type { IComponentObjects } from '../interfaces/IComponentObjects.js';
3
3
 
4
+ /**
5
+ * Abstract base class for every `*Objects` locator class in `components/` and
6
+ * `controls/`.
7
+ *
8
+ * **What it does:** Sets up two universal locators that every component needs:
9
+ * - `context` — the scoped root `Locator` passed in from the component. All
10
+ * descendant locator lookups are chained from this, so the component only
11
+ * sees elements within its own section of the page.
12
+ * - `mainHeader` — a `main header` locator used as a presence anchor to
13
+ * confirm the screen is fully rendered before asserting.
14
+ *
15
+ * **For contributors:** When adding a new component, create
16
+ * `<Name>Objects.ts` that extends this class. Put ALL selector logic (every
17
+ * `getByTestId`, `locator`, `getByRole`, etc.) in the `Objects` class. The
18
+ * companion `<Name>.ts` should only contain interaction logic and must never
19
+ * contain raw locator strings.
20
+ */
4
21
  export abstract class BaseComponentObjects implements IComponentObjects {
5
22
  context: Locator;
6
23
  mainHeader: Locator;
@@ -1,6 +1,11 @@
1
1
  import type { Locator, Page } from '@playwright/test';
2
2
  import { ActionBarObjects, ActionBarOverflowableObjects } from './ActionBarObjects.js';
3
3
 
4
+ /**
5
+ * Internal helper used by `ActionBar` to group and expose action button
6
+ * interactions. Handles overflow menus where actions are hidden behind a
7
+ * "more" button.
8
+ */
4
9
  class ActionBarActions {
5
10
  private _objects: ActionBarOverflowableObjects;
6
11
 
@@ -84,66 +89,49 @@ class ActionBarActions {
84
89
  public getCubeViewButtons = (): Locator => this._objects.cubeViewButtons();
85
90
  public getCubeViewButtonById = (id: string): Locator => this._objects.cubeViewButtonById(id);
86
91
  public getCubeViewButtonByLabel = (label: string): Locator => this._objects.cubeViewButtonByLabel(label);
92
+
93
+ // Generic item lookup for ids not covered by the typed getters above
94
+ public getItemByTestId = (testId: string): Locator => this._objects.itemByTestId(testId);
87
95
  }
88
96
 
97
+ /**
98
+ * Wraps the Thinkwise action-bar toolbar that sits above a grid or form and
99
+ * contains buttons for CRUD operations (New, Edit, Save, Delete, Refresh)
100
+ * plus any custom task actions defined in the Thinkwise model.
101
+ *
102
+ * In generated subject classes this is exposed as a typed `actionBar` property.
103
+ * Overflow actions (hidden under a "more" button) are accessible via `actionBar.overflowMenu`.
104
+ *
105
+ * @example
106
+ * await subject.actionBar.getButtonByText('New').click();
107
+ * await subject.actionBar.getButtonByText('Save').click();
108
+ * // For overflow actions:
109
+ * await subject.actionBar.overflowMenu.getButtonByText('Export').click();
110
+ */
89
111
  export class ActionBar extends ActionBarActions {
90
112
  private _actionBarObjects: ActionBarObjects;
91
- private _overflowMenu: ActionBarOverflow;
113
+ public overflowMenu: ActionBarActions;
92
114
 
93
115
  constructor(actionBarContext: Locator) {
94
116
  super(actionBarContext);
95
117
  this._actionBarObjects = new ActionBarObjects(actionBarContext.page(), actionBarContext);
96
- this._overflowMenu = new ActionBarOverflow(actionBarContext.page());
118
+
119
+ const overflowInstance = new ActionBarOverflow(actionBarContext.page());
120
+ this.overflowMenu = new Proxy(overflowInstance, {
121
+ get: (target, prop, receiver) => {
122
+ const value = Reflect.get(target, prop, receiver);
123
+ if (typeof value === 'function') {
124
+ return (...args: unknown[]) =>
125
+ wrapWithOverflowOpen(this, () => (value as (...args: unknown[]) => Locator).apply(target, args));
126
+ }
127
+ return value;
128
+ }
129
+ }) as ActionBarActions;
97
130
  }
98
131
 
99
132
  public openOverflowMenu = async (): Promise<void> => {
100
133
  await this._actionBarObjects.overflowMenuButton().click();
101
134
  };
102
-
103
- overflowMenu = {
104
- getFilterButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getFilterButton()),
105
-
106
- getQuickFilterButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getQuickFilterButton()),
107
-
108
- getClearAllFiltersButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getClearAllFiltersButton()),
109
-
110
- getSortButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getSortButton()),
111
-
112
- getRestoreSortOrderButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getRestoreSortOrderButton()),
113
-
114
- getImportButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getImportButton()),
115
-
116
- getExportButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getExportButton()),
117
-
118
- getExportImmediatelyButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getExportImmediatelyButton()),
119
-
120
- getMassUpdateButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getMassUpdateButton()),
121
-
122
- getUpScreenTypeButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getUpScreenTypeButton()),
123
-
124
- getUpDetailSettingsButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getUpDetailSettingsButton()),
125
-
126
- getUpManagePrefiltersButton: () =>
127
- wrapWithOverflowOpen(this, () => this._overflowMenu.getUpManagePrefiltersButton()),
128
-
129
- getUpGridSettingsButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getUpGridSettingsButton()),
130
-
131
- getCubeSortButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getCubeSortButton()),
132
-
133
- getCubePivotSettingsButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getCubePivotSettingsButton()),
134
-
135
- getCubeChartSettingsButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getCubeChartSettingsButton()),
136
-
137
- getExportPivotButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getExportPivotButton()),
138
-
139
- getDeleteCubeViewButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getDeleteCubeViewButton()),
140
-
141
- getSaveAsCubeViewButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getSaveAsCubeViewButton()),
142
-
143
- getCollapseAllButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getCollapseAllButton()),
144
-
145
- getExpandAllButton: () => wrapWithOverflowOpen(this, () => this._overflowMenu.getExpandAllButton())
146
- };
147
135
  }
148
136
 
149
137
  export class ActionBarOverflow extends ActionBarActions {
@@ -97,6 +97,8 @@ export class ActionBarOverflowableObjects extends BaseComponentObjects {
97
97
  // Prefilter buttons: data-testid like: "prefilter-actionbar-group-other__<something>"
98
98
  public prefilterButtonById = (id: string) =>
99
99
  this.context.getByTestId(new RegExp(`^prefilter-actionbar-group-${id}$`));
100
+
101
+ public itemByTestId = (testId: string) => this.context.getByTestId(testId);
100
102
  }
101
103
 
102
104
  export class ActionBarObjects extends ActionBarOverflowableObjects {
@@ -1,5 +1,11 @@
1
1
  import { ActionBar } from './ActionBar.js';
2
2
 
3
+ /**
4
+ * Extension point for a customised action bar that behaves identically to
5
+ * `ActionBar` but can be subclassed to add subject-specific button helpers.
6
+ * Used in generated subject classes when the pipeline detects a custom action
7
+ * bar configuration.
8
+ */
3
9
  export class CustomActionBar extends ActionBar {
4
10
  // What should this do differently?
5
11
  }
@@ -1,6 +1,12 @@
1
1
  import type { Locator } from '@playwright/test';
2
2
  import { CardlistObjects } from './CardlistObjects.js';
3
3
 
4
+ /**
5
+ * Wraps the Thinkwise card-list component that displays data as a grid of
6
+ * visual cards instead of a traditional table.
7
+ *
8
+ * In generated subject classes this is exposed as a typed `cardlist` property.
9
+ */
4
10
  export class Cardlist {
5
11
  cardlistObjects: CardlistObjects;
6
12
 
@@ -1,6 +1,12 @@
1
1
  import type { Locator } from '@playwright/test';
2
2
  import { ChartObjects } from './ChartObjects.js';
3
3
 
4
+ /**
5
+ * Wraps the Thinkwise chart component that renders data as bar, line, or pie
6
+ * charts within a subject screen.
7
+ *
8
+ * In generated subject classes this is exposed as a typed `chart` property.
9
+ */
4
10
  export class Chart {
5
11
  chartObjects: ChartObjects;
6
12
 
@@ -1,6 +1,15 @@
1
1
  import type { Locator } from '@playwright/test';
2
2
  import { CombinedFilterObjects } from './CombinedFIlterObjects.js';
3
3
 
4
+ /**
5
+ * Wraps the Thinkwise combined-filter component that merges the filter form
6
+ * and prefilter list into a single collapsible panel alongside a grid.
7
+ *
8
+ * In generated subject classes this is exposed as a typed `combinedFilter` property.
9
+ *
10
+ * @example
11
+ * await subject.combinedFilter.context.waitFor({ state: 'visible' });
12
+ */
4
13
  export class CombinedFilter {
5
14
  combinedFilterObjects: CombinedFilterObjects;
6
15
 
@@ -1,6 +1,12 @@
1
1
  import type { Locator } from '@playwright/test';
2
2
  import { CubeViewBarObjects } from './CubeViewBarObjects.js';
3
3
 
4
+ /**
5
+ * Wraps the Thinkwise cube-view-bar component that provides navigation and
6
+ * filter controls for OLAP cube / pivot analysis screens.
7
+ *
8
+ * In generated subject classes this is exposed as a typed `cubeViewBar` property.
9
+ */
4
10
  export class CubeViewBar {
5
11
  cubeViewBarObjects: CubeViewBarObjects;
6
12
 
@@ -5,6 +5,18 @@ import { ExportComponentObjects } from './ExportComponentObjects.js';
5
5
 
6
6
  // ToDo: Expand on the selectColumns to select by columnId/testId, or what makes sense to empower the end-user
7
7
  // ToDo: Make changes to completeExport be able to parse based on the data type selected
8
+ /**
9
+ * Drives the Thinkwise data-export panel: choose rows (all or selected),
10
+ * select columns, pick a format (CSV, XLSX, XLS), download, and optionally
11
+ * parse the downloaded CSV back into a JavaScript array for assertions.
12
+ *
13
+ * Access via `page.components.export` — no need to construct this yourself.
14
+ *
15
+ * @example
16
+ * await page.components.export.exportAllRows();
17
+ * await page.components.export.selectFormat(ExportFormat.XLSX);
18
+ * await page.components.export.completeExport();
19
+ */
8
20
  export class ExportComponent {
9
21
  private _page: Page;
10
22
  private _objects: ExportComponentObjects;
@@ -1,28 +1,101 @@
1
1
  import type { Locator, Page } from '@playwright/test';
2
2
  import { ExcelStyleFilterPopupObjects } from './ExcelStyleFilterPopupObjects.js';
3
3
 
4
+ /**
5
+ * Wraps the Excel-style column filter popup in a Thinkwise grid.
6
+ * This popup opens when a user right-clicks a column header and allows
7
+ * filtering by selecting individual cell values, much like Excel's auto-filter.
8
+ *
9
+ * Used internally by `GridColumnControl.filterByColumnValueExcelStyle()`.
10
+ *
11
+ * @example
12
+ * // Via GridColumnControl (preferred):
13
+ * await subject.grid.statusColumn.filterByColumnValueExcelStyle('Active');
14
+ */
4
15
  export class ExcelStyleFilterPopup {
5
- private _excelStyleFilterPopupObjects: ExcelStyleFilterPopupObjects;
16
+ private _objects: ExcelStyleFilterPopupObjects;
6
17
 
7
18
  constructor(page: Page) {
8
- this._excelStyleFilterPopupObjects = new ExcelStyleFilterPopupObjects(page);
19
+ this._objects = new ExcelStyleFilterPopupObjects(page);
9
20
  }
10
21
 
11
- async waitForOpen(): Promise<void> {
12
- await this._excelStyleFilterPopupObjects.anchor().waitFor({ state: 'visible' });
22
+ public async waitForOpen(): Promise<void> {
23
+ await (await this._objects.popup().all()).filter(async (element) => await element.isVisible());
13
24
  }
14
25
 
15
- intervalFilters(): Locator {
16
- return this._excelStyleFilterPopupObjects.intervalFilters();
26
+ public intervalFilters(): Locator {
27
+ return this._objects.intervalFilters();
17
28
  }
18
29
 
19
- fromDateInput(fieldTestId: string): Locator {
20
- return this._excelStyleFilterPopupObjects.fromDateInput(fieldTestId);
30
+ public fromDateInput(fieldTestId: string): Locator {
31
+ return this._objects.fromDateInput(fieldTestId);
21
32
  }
22
33
 
23
- async setFromDate(fieldTestId: string, value: string): Promise<void> {
34
+ public toDateInput(fieldTestId: string): Locator {
35
+ return this._objects.toDateInput(fieldTestId);
36
+ }
37
+
38
+ public async waitForClose(): Promise<void> {
39
+ await (await this._objects.popup().all()).filter(async (element) => !(await element.isVisible()));
40
+ }
41
+
42
+ public async clickSelectAll(fieldTestId: string): Promise<void> {
43
+ await this.waitForOpen();
44
+ await this._objects.checkboxSelectAllButton(fieldTestId).click();
45
+ }
46
+
47
+ public async deselectAll(fieldTestId: string): Promise<void> {
48
+ const selectAllCheckbox = await this._objects.checkboxSelectAllButton(fieldTestId);
49
+ await this.waitForOpen();
50
+
51
+ // Everything is already deselected
52
+ if ((await selectAllCheckbox.locator('[data-testid="CheckBoxOutlineBlankIcon"]').count()) > 0) {
53
+ return;
54
+ }
55
+
56
+ // Some things are selected - first click will select everything
57
+ if ((await selectAllCheckbox.locator('[data-testid="CheckBoxIndeterminateIcon"]').count()) > 0) {
58
+ await selectAllCheckbox.click();
59
+ }
60
+
61
+ // Everything is selected
62
+ if ((await selectAllCheckbox.locator('[data-testid="CheckBoxIcon"]').count()) > 0) {
63
+ await selectAllCheckbox.click();
64
+ }
65
+ }
66
+
67
+ public async clickCheckboxItem(fieldTestId: string, value: string): Promise<void> {
68
+ await this.waitForOpen();
69
+
70
+ await this._objects.checkboxItemButtons(fieldTestId).filter({ hasText: value }).click();
71
+ }
72
+
73
+ public checkboxItem(fieldTestId: string, value: string): Locator {
74
+ return this._objects.checkboxItemCheckboxes(fieldTestId).filter({ hasText: value });
75
+ }
76
+
77
+ public fromTimeInput(fieldTestId: string): Locator {
78
+ return this._objects.fromTimeInput(fieldTestId);
79
+ }
80
+
81
+ public toTimeInput(fieldTestId: string): Locator {
82
+ return this._objects.toTimeInput(fieldTestId);
83
+ }
84
+
85
+ public setFromTime = async (fieldTestId: string, value: string): Promise<void> =>
86
+ this.fillAndEnter(fieldTestId, value);
87
+
88
+ public setToTime = async (fieldTestId: string, value: string): Promise<void> => this.fillAndEnter(fieldTestId, value);
89
+
90
+ public setFromDate = async (fieldTestId: string, value: string): Promise<void> =>
91
+ this.fillAndEnter(fieldTestId, value);
92
+
93
+ public setToDate = async (fieldTestId: string, value: string): Promise<void> => this.fillAndEnter(fieldTestId, value);
94
+
95
+ private async fillAndEnter(fieldTestId: string, value: string): Promise<void> {
96
+ const input = this._objects.fromDateInput(fieldTestId);
97
+
24
98
  await this.waitForOpen();
25
- const input = this._excelStyleFilterPopupObjects.fromDateInput(fieldTestId);
26
99
  await input.fill(value);
27
100
  await input.press('Enter');
28
101
  }
@@ -5,11 +5,10 @@ export class ExcelStyleFilterPopupObjects extends BaseComponentObjects {
5
5
  private _page: Page;
6
6
 
7
7
  constructor(page: Page) {
8
- super(page, page.locator('body'));
8
+ super(page);
9
9
  this._page = page;
10
10
  }
11
-
12
- public anchor = () => this._page.locator('[data-testid^="date-time-excel-filter__"]').first();
11
+ public popup = () => this._page.locator('[data-testid*="-excel-filter__"]');
13
12
 
14
13
  public intervalFilters = () => this._page.getByTestId('excel-style-filter-popup__interval-filters');
15
14
 
@@ -17,4 +16,31 @@ export class ExcelStyleFilterPopupObjects extends BaseComponentObjects {
17
16
  this._page
18
17
  .getByTestId(`date-time-excel-filter__${fieldTestId}__from`)
19
18
  .getByTestId(`form-field__${fieldTestId}__date__input`);
19
+
20
+ public toDateInput = (fieldTestId: string) =>
21
+ this._page
22
+ .getByTestId(`date-time-excel-filter__${fieldTestId}__to`)
23
+ .getByTestId(`form-field__${fieldTestId}__date__input`);
24
+
25
+ public checkboxList = (fieldTestId: string) =>
26
+ this._page.locator(`[data-testid*="-excel-filter__${fieldTestId}__list"]`);
27
+
28
+ public checkboxSelectAllButton = (fieldTestId: string) =>
29
+ this._page.locator(`[data-testid*="-excel-filter__${fieldTestId}__list-item-select-all-checkbox"]`);
30
+
31
+ public checkboxItemButtons = (fieldTestId: string) =>
32
+ this._page.locator(`[data-testid*="-excel-filter__${fieldTestId}__list-item-button__"]`);
33
+
34
+ public checkboxItemCheckboxes = (fieldTestId: string) =>
35
+ this._page.locator(`[data-testid*="-excel-filter__${fieldTestId}__list-item-checkbox__"]`);
36
+
37
+ public fromTimeInput = (fieldTestId: string) =>
38
+ this._page
39
+ .getByTestId(`date-time-excel-filter__${fieldTestId}__from`)
40
+ .getByTestId(`form-field__${fieldTestId}__time__input`);
41
+
42
+ public toTimeInput = (fieldTestId: string) =>
43
+ this._page
44
+ .getByTestId(`date-time-excel-filter__${fieldTestId}__to`)
45
+ .getByTestId(`form-field__${fieldTestId}__time__input`);
20
46
  }
@@ -1,6 +1,16 @@
1
1
  import type { Locator } from '@playwright/test';
2
2
  import { FilterFormObjects } from './FilterFormObjects.js';
3
3
 
4
+ /**
5
+ * Wraps the Thinkwise filter form that appears in the filter panel alongside
6
+ * a grid. Provides access to the filter form's context locator for scoped
7
+ * assertions and interactions.
8
+ *
9
+ * In generated subject classes this is exposed as a typed component property.
10
+ *
11
+ * @example
12
+ * await subject.filterForm.context.waitFor({ state: 'visible' });
13
+ */
4
14
  export class FilterForm {
5
15
  filterFormObjects: FilterFormObjects;
6
16
 
@@ -2,6 +2,19 @@ import type { Locator, Page } from '@playwright/test';
2
2
  import { PopUpComponent } from '../pop-up/PopUpComponent.js';
3
3
  import { FilterPopupObjects } from './FilterPopupObjects.js';
4
4
 
5
+ /**
6
+ * Wraps the Thinkwise interval/range filter popup that appears when filtering
7
+ * date, time, or numeric columns with a "between" style filter.
8
+ *
9
+ * Extends `PopUpComponent` so all base popup actions (confirm, cancel) work
10
+ * here too. The `IntervalType` union type controls which date/time variant
11
+ * of the popup is targeted.
12
+ *
13
+ * @example
14
+ * // Open the filter popup, set a date range, and confirm:
15
+ * await subject.grid.hireDateColumn.openExcelStyleFilterPopup();
16
+ * // Then interact with the resulting FilterPopup instance.
17
+ */
5
18
  export type IntervalType =
6
19
  | 'date'
7
20
  | 'date-and-time'
@@ -93,6 +106,10 @@ export class FilterPopup {
93
106
  return this._filterPopupObjects.fieldInput(fieldId);
94
107
  }
95
108
 
109
+ public fieldInputChip(fieldId: string, value: string): Locator {
110
+ return this._filterPopupObjects.fieldInputChip(fieldId, value);
111
+ }
112
+
96
113
  public valueInput(fieldId: string, part: string): Locator {
97
114
  return this._filterPopupObjects.valueInput(fieldId, part);
98
115
  }
@@ -138,21 +155,25 @@ export class FilterPopup {
138
155
  await this._filterPopupObjects.timeOperatorControl().click();
139
156
  }
140
157
 
141
- public intervalSelector(rowIndex: number, colId: string): Locator {
142
- return this._filterPopupObjects.intervalSelector(rowIndex, colId);
158
+ public intervalSelector(colId: string): Locator {
159
+ return this._filterPopupObjects.intervalSelector(colId);
143
160
  }
144
161
 
145
- public intervalSelectorInput(rowIndex: number, colId: string): Locator {
146
- return this._filterPopupObjects.intervalSelectorInput(rowIndex, colId);
162
+ public intervalSelectorInput(colId: string): Locator {
163
+ return this._filterPopupObjects.intervalSelectorInput(colId);
147
164
  }
148
165
 
149
- public async openInterval(rowIndex: number, colId: string): Promise<void> {
166
+ public async openInterval(colId: string, options?: { rowIndex?: number }): Promise<void> {
150
167
  await this.waitForOpen();
151
- await this._filterPopupObjects.intervalSelectorInput(rowIndex, colId).click();
168
+ if (options?.rowIndex !== undefined) {
169
+ await this._filterPopupObjects.intervalSelectorInputByRowIndex(options.rowIndex, colId).click();
170
+ } else {
171
+ await this._filterPopupObjects.intervalSelectorInput(colId).click();
172
+ }
152
173
  }
153
174
 
154
- public async setInterval(rowIndex: number, colId: string, kind: IntervalType): Promise<void> {
155
- await this.openInterval(rowIndex, colId);
175
+ public async setInterval(colId: string, kind: IntervalType, options?: { rowIndex?: number }): Promise<void> {
176
+ await this.openInterval(colId, options);
156
177
  await this.pickAutocomplete(kind);
157
178
  }
158
179
 
@@ -170,7 +191,7 @@ export class FilterPopup {
170
191
  const emptyRow = this._filterPopupObjects.emptySelectFieldRow();
171
192
 
172
193
  if (await emptyRow.count()) {
173
- await this._filterPopupObjects.emptySelectFieldRowButton().click();
194
+ await this._filterPopupObjects.emptySelectFieldRowButton().press('Enter');
174
195
  } else {
175
196
  await this._filterPopupObjects.selectFieldButton().click();
176
197
  }
@@ -23,6 +23,9 @@ export class FilterPopupObjects extends BaseComponentObjects {
23
23
 
24
24
  public fieldInput = (fieldId: string) => this.context.getByTestId(`form-field__${fieldId}__input`);
25
25
 
26
+ public fieldInputChip = (fieldId: string, value: string) =>
27
+ this.context.getByTestId(`form-field__${fieldId}__input`).getByTestId(`autocomplete-tag-${value}`);
28
+
26
29
  public prefilterNameInput = () => this.context.getByTestId('prefilter__name__input');
27
30
 
28
31
  public saveAsOption = () => this._page.getByRole('menuitem', { name: 'Save' });
@@ -43,11 +46,15 @@ export class FilterPopupObjects extends BaseComponentObjects {
43
46
  public timeOperatorControl = () =>
44
47
  this.context.getByTestId('form-field__event-time__operator__control').getByRole('button', { name: 'Open' });
45
48
 
46
- public intervalSelector = (rowIndex: number, colId: string) =>
49
+ public intervalSelector = (colId: string) => this.context.locator(`[data-testid$="__${colId}__select-interval"]`);
50
+
51
+ public intervalSelectorInput = (colId: string) => this.intervalSelector(colId).getByTestId('select-interval__input');
52
+
53
+ public intervalSelectorByRowIndex = (rowIndex: number, colId: string) =>
47
54
  this.context.getByTestId(`advanced-filter-grid__row${rowIndex}__${colId}__select-interval`);
48
55
 
49
- public intervalSelectorInput = (rowIndex: number, colId: string) =>
50
- this.intervalSelector(rowIndex, colId).getByTestId('select-interval__input');
56
+ public intervalSelectorInputByRowIndex = (rowIndex: number, colId: string) =>
57
+ this.intervalSelectorByRowIndex(rowIndex, colId).getByTestId('select-interval__input');
51
58
 
52
59
  public autocompleteOption = (key: AutocompleteKey) => this._page.getByTestId(`autocomplete-option-${key}`);
53
60
 
@@ -1,3 +1,10 @@
1
+ /**
2
+ * Placeholder for the Thinkwise "Find" form — a search dialog used to
3
+ * quickly locate records by keyword across multiple fields.
4
+ *
5
+ * This component is under development. Check back for typed interaction
6
+ * helpers in a future release.
7
+ */
1
8
  export class FindForm {
2
9
  // do stuff
3
10
  }
@@ -2,6 +2,17 @@ import type { Locator, Page } from '@playwright/test';
2
2
  import { PopUpComponent } from '../pop-up/PopUpComponent.js';
3
3
  import { ManagePrefilterPopupObjects } from './ManagePrefilterPopupObjects.js';
4
4
 
5
+ /**
6
+ * Wraps the Thinkwise "Manage Prefilter" popup that lets users create, edit,
7
+ * and delete personal prefilters from within a running test.
8
+ *
9
+ * Access via `page.components.managePrefilterPopup` — no need to construct
10
+ * this yourself. Extends `PopUpComponent` so all base popup methods are also
11
+ * available.
12
+ *
13
+ * @example
14
+ * await page.components.managePrefilterPopup.dialog().waitFor({ state: 'visible' });
15
+ */
5
16
  export class ManagePrefilterPopup extends PopUpComponent {
6
17
  private readonly _page: Page;
7
18
  private _managePrefilterPopupObjects: ManagePrefilterPopupObjects;
@@ -1,6 +1,22 @@
1
1
  import type { Locator } from '@playwright/test';
2
2
  import { FormObjects } from './FormObjects.js';
3
3
 
4
+ /**
5
+ * Wraps a Thinkwise form screen component. Provides locator helpers for
6
+ * finding fields by value and by column ID.
7
+ *
8
+ * In generated subject classes, you interact with `Form` indirectly through
9
+ * the typed `Components/` class (e.g. `EmployeeFormComponent`) which exposes
10
+ * named, typed control properties. Use `Form` directly only when you need
11
+ * raw field lookups not covered by the generated accessors.
12
+ *
13
+ * @example
14
+ * // Via generated subject (preferred):
15
+ * await subject.form.firstNameField.fill('Jane');
16
+ *
17
+ * // Via raw Form helper:
18
+ * const field = subject.form.getFieldByColId('first_name');
19
+ */
4
20
  export class Form {
5
21
  private _objects: FormObjects;
6
22