@thinkwise/testwise 0.2.67 → 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 (434) 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 +35 -2
  32. package/components/filter/FilterForm.ts +10 -0
  33. package/components/filter/FilterPopup.ts +30 -9
  34. package/components/filter/FilterPopupObjects.ts +10 -3
  35. package/components/filter/FindForm.ts +7 -0
  36. package/components/filter/ManagePrefilterPopup.ts +11 -0
  37. package/components/form/Form.ts +16 -0
  38. package/components/grid/Grid.ts +18 -1
  39. package/components/maps/Maps.ts +6 -0
  40. package/components/menu/ListBarMenuComponent.ts +10 -0
  41. package/components/pivot-grid/PivotGrid.ts +6 -0
  42. package/components/pivot-grid/PivotGridFieldList.ts +7 -0
  43. package/components/pop-up/AllRowsPopUp.ts +12 -0
  44. package/components/pop-up/PopUpComponent.ts +11 -0
  45. package/components/prefilter-list/PrefilterList.ts +9 -0
  46. package/components/preview/Preview.ts +6 -0
  47. package/components/report-bar/ReportBar.ts +6 -0
  48. package/components/report-tiles/ReportTiles.ts +6 -0
  49. package/components/scheduler/Scheduler.ts +6 -0
  50. package/components/snackbar/SnackBar.ts +12 -0
  51. package/components/splitter/Splitter.ts +6 -0
  52. package/components/tab/BaseTab.ts +5 -0
  53. package/components/tab/DetailTabPage.ts +11 -0
  54. package/components/tab/Tab.ts +10 -0
  55. package/components/task/TaskBar.ts +13 -3
  56. package/components/task/TaskTiles.ts +12 -3
  57. package/components/topbar/TopBar.ts +10 -0
  58. package/components/tree-view/TreeView.ts +9 -0
  59. package/controls/DateControl.ts +40 -1
  60. package/controls/FormComboBox.ts +30 -0
  61. package/controls/GridColumnControl.ts +34 -3
  62. package/controls/InputFieldControl.ts +49 -0
  63. package/controls/LookupDropdown.ts +29 -0
  64. package/dist/Testwise.js +35 -0
  65. package/dist/Testwise.js.map +1 -1
  66. package/dist/artifact-builder/ArtifactManager.d.ts +18 -1
  67. package/dist/artifact-builder/ArtifactManager.js +24 -2
  68. package/dist/artifact-builder/ArtifactManager.js.map +1 -1
  69. package/dist/artifact-builder/ComponentClassModelBuilder.d.ts +22 -0
  70. package/dist/artifact-builder/ComponentClassModelBuilder.js +115 -0
  71. package/dist/artifact-builder/ComponentClassModelBuilder.js.map +1 -0
  72. package/dist/artifact-builder/InterfaceGenerator.d.ts +15 -6
  73. package/dist/artifact-builder/InterfaceGenerator.js +27 -26
  74. package/dist/artifact-builder/InterfaceGenerator.js.map +1 -1
  75. package/dist/artifact-builder/ModelDataBuilder.d.ts +7 -0
  76. package/dist/artifact-builder/ModelDataBuilder.js +13 -5
  77. package/dist/artifact-builder/ModelDataBuilder.js.map +1 -1
  78. package/dist/artifact-builder/ModelDataRefiner.d.ts +18 -1
  79. package/dist/artifact-builder/ModelDataRefiner.js +18 -3
  80. package/dist/artifact-builder/ModelDataRefiner.js.map +1 -1
  81. package/dist/artifact-builder/SchemaGenerator.d.ts +21 -5
  82. package/dist/artifact-builder/SchemaGenerator.js +38 -26
  83. package/dist/artifact-builder/SchemaGenerator.js.map +1 -1
  84. package/dist/artifact-builder/ScreenInterfaceRefiner.d.ts +18 -1
  85. package/dist/artifact-builder/ScreenInterfaceRefiner.js +23 -9
  86. package/dist/artifact-builder/ScreenInterfaceRefiner.js.map +1 -1
  87. package/dist/artifact-builder/SelectorBuilder.d.ts +18 -5
  88. package/dist/artifact-builder/SelectorBuilder.js +29 -14
  89. package/dist/artifact-builder/SelectorBuilder.js.map +1 -1
  90. package/dist/artifact-builder/SubjectClassModelBuilder.d.ts +38 -0
  91. package/dist/artifact-builder/SubjectClassModelBuilder.js +158 -0
  92. package/dist/artifact-builder/SubjectClassModelBuilder.js.map +1 -0
  93. package/dist/artifact-builder/SubjectComponentGenerator.d.ts +25 -14
  94. package/dist/artifact-builder/SubjectComponentGenerator.js +65 -189
  95. package/dist/artifact-builder/SubjectComponentGenerator.js.map +1 -1
  96. package/dist/artifact-builder/SubjectGenerator.d.ts +32 -13
  97. package/dist/artifact-builder/SubjectGenerator.js +81 -165
  98. package/dist/artifact-builder/SubjectGenerator.js.map +1 -1
  99. package/dist/artifact-builder/SubjectRegistration.d.ts +22 -8
  100. package/dist/artifact-builder/SubjectRegistration.js +29 -14
  101. package/dist/artifact-builder/SubjectRegistration.js.map +1 -1
  102. package/dist/artifact-builder/TsFileModel.d.ts +86 -0
  103. package/dist/artifact-builder/TsFileModel.js +2 -0
  104. package/dist/artifact-builder/TsFileModel.js.map +1 -0
  105. package/dist/artifact-builder/TsFileSerializer.d.ts +19 -0
  106. package/dist/artifact-builder/TsFileSerializer.js +225 -0
  107. package/dist/artifact-builder/TsFileSerializer.js.map +1 -0
  108. package/dist/artifact-builder/helpers/DataRetriever.d.ts +22 -3
  109. package/dist/artifact-builder/helpers/DataRetriever.js +56 -26
  110. package/dist/artifact-builder/helpers/DataRetriever.js.map +1 -1
  111. package/dist/artifact-builder/helpers/NamingHandler.d.ts +18 -6
  112. package/dist/artifact-builder/helpers/NamingHandler.js +20 -61
  113. package/dist/artifact-builder/helpers/NamingHandler.js.map +1 -1
  114. package/dist/artifact-builder/helpers/PipelinePaths.d.ts +52 -0
  115. package/dist/artifact-builder/helpers/PipelinePaths.js +99 -0
  116. package/dist/artifact-builder/helpers/PipelinePaths.js.map +1 -0
  117. package/dist/artifact-builder/helpers/Stopwatch.d.ts +10 -0
  118. package/dist/artifact-builder/helpers/Stopwatch.js +10 -0
  119. package/dist/artifact-builder/helpers/Stopwatch.js.map +1 -1
  120. package/dist/artifact-builder/helpers/index.d.ts +1 -0
  121. package/dist/artifact-builder/helpers/index.js +1 -0
  122. package/dist/artifact-builder/helpers/index.js.map +1 -1
  123. package/dist/artifact-builder/index.d.ts +4 -0
  124. package/dist/artifact-builder/index.js +4 -0
  125. package/dist/artifact-builder/index.js.map +1 -1
  126. package/dist/components/BaseComponentObjects.d.ts +17 -0
  127. package/dist/components/BaseComponentObjects.js +17 -0
  128. package/dist/components/BaseComponentObjects.js.map +1 -1
  129. package/dist/components/action-bar/ActionBar.d.ts +21 -24
  130. package/dist/components/action-bar/ActionBar.js +31 -24
  131. package/dist/components/action-bar/ActionBar.js.map +1 -1
  132. package/dist/components/action-bar/ActionBarObjects.d.ts +1 -0
  133. package/dist/components/action-bar/ActionBarObjects.js +1 -0
  134. package/dist/components/action-bar/ActionBarObjects.js.map +1 -1
  135. package/dist/components/action-bar/CustomActionBar.d.ts +6 -0
  136. package/dist/components/action-bar/CustomActionBar.js +6 -0
  137. package/dist/components/action-bar/CustomActionBar.js.map +1 -1
  138. package/dist/components/cardlist/Cardlist.d.ts +6 -0
  139. package/dist/components/cardlist/Cardlist.js +6 -0
  140. package/dist/components/cardlist/Cardlist.js.map +1 -1
  141. package/dist/components/chart/Chart.d.ts +6 -0
  142. package/dist/components/chart/Chart.js +6 -0
  143. package/dist/components/chart/Chart.js.map +1 -1
  144. package/dist/components/combined-filter/CombinedFilter.d.ts +9 -0
  145. package/dist/components/combined-filter/CombinedFilter.js +9 -0
  146. package/dist/components/combined-filter/CombinedFilter.js.map +1 -1
  147. package/dist/components/cube-view-bar/CubeViewBar.d.ts +6 -0
  148. package/dist/components/cube-view-bar/CubeViewBar.js +6 -0
  149. package/dist/components/cube-view-bar/CubeViewBar.js.map +1 -1
  150. package/dist/components/export/ExportComponent.d.ts +12 -0
  151. package/dist/components/export/ExportComponent.js +12 -0
  152. package/dist/components/export/ExportComponent.js.map +1 -1
  153. package/dist/components/filter/ExcelStyleFilterPopup.d.ts +17 -4
  154. package/dist/components/filter/ExcelStyleFilterPopup.js +35 -23
  155. package/dist/components/filter/ExcelStyleFilterPopup.js.map +1 -1
  156. package/dist/components/filter/ExcelStyleFilterPopupObjects.d.ts +1 -1
  157. package/dist/components/filter/ExcelStyleFilterPopupObjects.js +2 -2
  158. package/dist/components/filter/ExcelStyleFilterPopupObjects.js.map +1 -1
  159. package/dist/components/filter/FilterForm.d.ts +10 -0
  160. package/dist/components/filter/FilterForm.js +10 -0
  161. package/dist/components/filter/FilterForm.js.map +1 -1
  162. package/dist/components/filter/FilterPopup.d.ts +22 -4
  163. package/dist/components/filter/FilterPopup.js +17 -9
  164. package/dist/components/filter/FilterPopup.js.map +1 -1
  165. package/dist/components/filter/FilterPopupObjects.d.ts +5 -2
  166. package/dist/components/filter/FilterPopupObjects.js +5 -2
  167. package/dist/components/filter/FilterPopupObjects.js.map +1 -1
  168. package/dist/components/filter/FindForm.d.ts +7 -0
  169. package/dist/components/filter/FindForm.js +7 -0
  170. package/dist/components/filter/FindForm.js.map +1 -1
  171. package/dist/components/filter/ManagePrefilterPopup.d.ts +11 -0
  172. package/dist/components/filter/ManagePrefilterPopup.js +11 -0
  173. package/dist/components/filter/ManagePrefilterPopup.js.map +1 -1
  174. package/dist/components/form/Form.d.ts +16 -0
  175. package/dist/components/form/Form.js +16 -0
  176. package/dist/components/form/Form.js.map +1 -1
  177. package/dist/components/grid/Grid.d.ts +17 -0
  178. package/dist/components/grid/Grid.js +18 -1
  179. package/dist/components/grid/Grid.js.map +1 -1
  180. package/dist/components/maps/Maps.d.ts +6 -0
  181. package/dist/components/maps/Maps.js +6 -0
  182. package/dist/components/maps/Maps.js.map +1 -1
  183. package/dist/components/menu/ListBarMenuComponent.d.ts +10 -0
  184. package/dist/components/menu/ListBarMenuComponent.js +10 -0
  185. package/dist/components/menu/ListBarMenuComponent.js.map +1 -1
  186. package/dist/components/pivot-grid/PivotGrid.d.ts +6 -0
  187. package/dist/components/pivot-grid/PivotGrid.js +6 -0
  188. package/dist/components/pivot-grid/PivotGrid.js.map +1 -1
  189. package/dist/components/pivot-grid/PivotGridFieldList.d.ts +7 -0
  190. package/dist/components/pivot-grid/PivotGridFieldList.js +7 -0
  191. package/dist/components/pivot-grid/PivotGridFieldList.js.map +1 -1
  192. package/dist/components/pop-up/AllRowsPopUp.d.ts +12 -0
  193. package/dist/components/pop-up/AllRowsPopUp.js +12 -0
  194. package/dist/components/pop-up/AllRowsPopUp.js.map +1 -1
  195. package/dist/components/pop-up/PopUpComponent.d.ts +11 -0
  196. package/dist/components/pop-up/PopUpComponent.js +11 -0
  197. package/dist/components/pop-up/PopUpComponent.js.map +1 -1
  198. package/dist/components/prefilter-list/PrefilterList.d.ts +9 -0
  199. package/dist/components/prefilter-list/PrefilterList.js +9 -0
  200. package/dist/components/prefilter-list/PrefilterList.js.map +1 -1
  201. package/dist/components/preview/Preview.d.ts +6 -0
  202. package/dist/components/preview/Preview.js +6 -0
  203. package/dist/components/preview/Preview.js.map +1 -1
  204. package/dist/components/report-bar/ReportBar.d.ts +6 -0
  205. package/dist/components/report-bar/ReportBar.js +6 -0
  206. package/dist/components/report-bar/ReportBar.js.map +1 -1
  207. package/dist/components/report-tiles/ReportTiles.d.ts +6 -0
  208. package/dist/components/report-tiles/ReportTiles.js +6 -0
  209. package/dist/components/report-tiles/ReportTiles.js.map +1 -1
  210. package/dist/components/scheduler/Scheduler.d.ts +6 -0
  211. package/dist/components/scheduler/Scheduler.js +6 -0
  212. package/dist/components/scheduler/Scheduler.js.map +1 -1
  213. package/dist/components/snackbar/SnackBar.d.ts +12 -0
  214. package/dist/components/snackbar/SnackBar.js +12 -0
  215. package/dist/components/snackbar/SnackBar.js.map +1 -1
  216. package/dist/components/splitter/Splitter.d.ts +6 -0
  217. package/dist/components/splitter/Splitter.js +6 -0
  218. package/dist/components/splitter/Splitter.js.map +1 -1
  219. package/dist/components/tab/BaseTab.d.ts +5 -0
  220. package/dist/components/tab/BaseTab.js +5 -0
  221. package/dist/components/tab/BaseTab.js.map +1 -1
  222. package/dist/components/tab/DetailTabPage.d.ts +11 -0
  223. package/dist/components/tab/DetailTabPage.js +11 -0
  224. package/dist/components/tab/DetailTabPage.js.map +1 -1
  225. package/dist/components/tab/Tab.d.ts +10 -0
  226. package/dist/components/tab/Tab.js +10 -0
  227. package/dist/components/tab/Tab.js.map +1 -1
  228. package/dist/components/task/TaskBar.d.ts +12 -2
  229. package/dist/components/task/TaskBar.js +13 -3
  230. package/dist/components/task/TaskBar.js.map +1 -1
  231. package/dist/components/task/TaskTiles.d.ts +11 -2
  232. package/dist/components/task/TaskTiles.js +12 -3
  233. package/dist/components/task/TaskTiles.js.map +1 -1
  234. package/dist/components/topbar/TopBar.d.ts +10 -0
  235. package/dist/components/topbar/TopBar.js +10 -0
  236. package/dist/components/topbar/TopBar.js.map +1 -1
  237. package/dist/components/tree-view/TreeView.d.ts +9 -0
  238. package/dist/components/tree-view/TreeView.js +9 -0
  239. package/dist/components/tree-view/TreeView.js.map +1 -1
  240. package/dist/controls/DateControl.d.ts +39 -0
  241. package/dist/controls/DateControl.js +18 -1
  242. package/dist/controls/DateControl.js.map +1 -1
  243. package/dist/controls/FormComboBox.d.ts +30 -0
  244. package/dist/controls/FormComboBox.js +8 -0
  245. package/dist/controls/FormComboBox.js.map +1 -1
  246. package/dist/controls/GridColumnControl.d.ts +30 -0
  247. package/dist/controls/GridColumnControl.js +12 -3
  248. package/dist/controls/GridColumnControl.js.map +1 -1
  249. package/dist/controls/InputFieldControl.d.ts +49 -0
  250. package/dist/controls/InputFieldControl.js +30 -0
  251. package/dist/controls/InputFieldControl.js.map +1 -1
  252. package/dist/controls/LookupDropdown.d.ts +29 -0
  253. package/dist/controls/LookupDropdown.js +8 -0
  254. package/dist/controls/LookupDropdown.js.map +1 -1
  255. package/dist/enums/ElementTypes.d.ts +18 -0
  256. package/dist/enums/ElementTypes.js +18 -0
  257. package/dist/enums/ElementTypes.js.map +1 -1
  258. package/dist/enums/ExportFormat.d.ts +8 -0
  259. package/dist/enums/ExportFormat.js +8 -0
  260. package/dist/enums/ExportFormat.js.map +1 -1
  261. package/dist/enums/LogLevel.d.ts +17 -0
  262. package/dist/enums/LogLevel.js +17 -1
  263. package/dist/enums/LogLevel.js.map +1 -1
  264. package/dist/enums/index.d.ts +1 -0
  265. package/dist/enums/index.js +1 -0
  266. package/dist/enums/index.js.map +1 -1
  267. package/dist/helpers/ConfigChecker.d.ts +13 -0
  268. package/dist/helpers/ConfigChecker.js +13 -0
  269. package/dist/helpers/ConfigChecker.js.map +1 -1
  270. package/dist/helpers/Ensure.d.ts +13 -0
  271. package/dist/helpers/Ensure.js +13 -0
  272. package/dist/helpers/Ensure.js.map +1 -1
  273. package/dist/helpers/FlightTracker.d.ts +13 -3
  274. package/dist/helpers/FlightTracker.js +103 -17
  275. package/dist/helpers/FlightTracker.js.map +1 -1
  276. package/dist/helpers/GlobalWaitEventHandler.d.ts +13 -0
  277. package/dist/helpers/GlobalWaitEventHandler.js +13 -0
  278. package/dist/helpers/GlobalWaitEventHandler.js.map +1 -1
  279. package/dist/helpers/LoginHelper.d.ts +35 -1
  280. package/dist/helpers/LoginHelper.js +46 -11
  281. package/dist/helpers/LoginHelper.js.map +1 -1
  282. package/dist/helpers/PathResolver.d.ts +22 -0
  283. package/dist/helpers/PathResolver.js +22 -0
  284. package/dist/helpers/PathResolver.js.map +1 -1
  285. package/dist/helpers/Poll.d.ts +13 -1
  286. package/dist/helpers/Poll.js +12 -0
  287. package/dist/helpers/Poll.js.map +1 -1
  288. package/dist/helpers/RegexHelper.d.ts +15 -0
  289. package/dist/helpers/RegexHelper.js +15 -3
  290. package/dist/helpers/RegexHelper.js.map +1 -1
  291. package/dist/helpers/SubjectNavigator.d.ts +26 -0
  292. package/dist/helpers/SubjectNavigator.js +51 -0
  293. package/dist/helpers/SubjectNavigator.js.map +1 -0
  294. package/dist/helpers/UserSimulationHelper.d.ts +14 -0
  295. package/dist/helpers/UserSimulationHelper.js +14 -0
  296. package/dist/helpers/UserSimulationHelper.js.map +1 -1
  297. package/dist/helpers/index.d.ts +1 -0
  298. package/dist/helpers/index.js +1 -0
  299. package/dist/helpers/index.js.map +1 -1
  300. package/dist/index.d.ts +6 -20
  301. package/dist/index.js +1 -0
  302. package/dist/index.js.map +1 -1
  303. package/dist/interfaces/IComponentObjects.d.ts +12 -0
  304. package/dist/interfaces/IComponentSchemaMeta.d.ts +15 -0
  305. package/dist/interfaces/IComponentSchemaMeta.js +2 -0
  306. package/dist/interfaces/IComponentSchemaMeta.js.map +1 -0
  307. package/dist/interfaces/IProperty.d.ts +13 -0
  308. package/dist/interfaces/IRegisteredSubjects.d.ts +12 -0
  309. package/dist/interfaces/ISeedSubjectDraft.d.ts +16 -0
  310. package/dist/interfaces/ISeedSubjectDraft.js +2 -0
  311. package/dist/interfaces/ISeedSubjectDraft.js.map +1 -0
  312. package/dist/interfaces/ISubject.d.ts +13 -0
  313. package/dist/interfaces/ISubjectDetail.d.ts +11 -0
  314. package/dist/interfaces/ISubjectDetail.js +2 -0
  315. package/dist/interfaces/ISubjectDetail.js.map +1 -0
  316. package/dist/mcp/ArtifactResolver.d.ts +152 -0
  317. package/dist/mcp/ArtifactResolver.js +232 -0
  318. package/dist/mcp/ArtifactResolver.js.map +1 -0
  319. package/dist/mcp/index.d.ts +2 -0
  320. package/dist/mcp/index.js +2 -0
  321. package/dist/mcp/index.js.map +1 -0
  322. package/dist/page-extensions/GlobalComponents.d.ts +30 -0
  323. package/dist/page-extensions/GlobalComponents.js +30 -0
  324. package/dist/page-extensions/GlobalComponents.js.map +1 -1
  325. package/dist/page-extensions/GoToDeepLink.d.ts +9 -0
  326. package/dist/page-extensions/GoToDeepLink.js +9 -0
  327. package/dist/page-extensions/GoToDeepLink.js.map +1 -1
  328. package/dist/page-extensions/LoginFeatures.d.ts +8 -0
  329. package/dist/page-extensions/LoginFeatures.js +8 -0
  330. package/dist/page-extensions/LoginFeatures.js.map +1 -1
  331. package/dist/page-extensions/SubjectRegistry.d.ts +31 -0
  332. package/dist/page-extensions/SubjectRegistry.js +31 -0
  333. package/dist/page-extensions/SubjectRegistry.js.map +1 -1
  334. package/dist/page-extensions/UserSimulation.d.ts +21 -0
  335. package/dist/page-extensions/UserSimulation.js +21 -0
  336. package/dist/page-extensions/UserSimulation.js.map +1 -1
  337. package/dist/page-extensions/WaitEventHandler.d.ts +20 -0
  338. package/dist/page-extensions/WaitEventHandler.js +20 -0
  339. package/dist/page-extensions/WaitEventHandler.js.map +1 -1
  340. package/dist/page-overrides/ClickOverride.d.ts +23 -2
  341. package/dist/page-overrides/ClickOverride.js +34 -50
  342. package/dist/page-overrides/ClickOverride.js.map +1 -1
  343. package/dist/page-overrides/FillOverride.d.ts +23 -0
  344. package/dist/page-overrides/FillOverride.js +46 -66
  345. package/dist/page-overrides/FillOverride.js.map +1 -1
  346. package/dist/services/ConfigBuilder.d.ts +24 -0
  347. package/dist/services/ConfigBuilder.js +24 -0
  348. package/dist/services/ConfigBuilder.js.map +1 -1
  349. package/dist/services/IndiciumApi.service.d.ts +26 -0
  350. package/dist/services/IndiciumApi.service.js +40 -5
  351. package/dist/services/IndiciumApi.service.js.map +1 -1
  352. package/dist/services/Logger.d.ts +13 -0
  353. package/dist/services/Logger.js +39 -0
  354. package/dist/services/Logger.js.map +1 -1
  355. package/dist/types/Components.d.ts +18 -1
  356. package/dist/types/Components.js +0 -1
  357. package/dist/types/Components.js.map +1 -1
  358. package/dist/types/LocatorType.d.ts +5 -0
  359. package/dist/types/LocatorType.js +2 -0
  360. package/dist/types/LocatorType.js.map +1 -0
  361. package/dist/types/PollTypes.d.ts +8 -0
  362. package/dist/types/Test.d.ts +18 -0
  363. package/dist/types/Universal.d.ts +12 -0
  364. package/dist/types/index.d.ts +2 -0
  365. package/dist/types/index.js +2 -0
  366. package/dist/types/index.js.map +1 -1
  367. package/enums/ElementTypes.ts +18 -0
  368. package/enums/ExportFormat.ts +8 -0
  369. package/enums/LogLevel.ts +17 -1
  370. package/enums/index.ts +1 -0
  371. package/helpers/ConfigChecker.ts +13 -0
  372. package/helpers/Ensure.ts +13 -0
  373. package/helpers/FlightTracker.ts +109 -20
  374. package/helpers/GlobalWaitEventHandler.ts +13 -0
  375. package/helpers/LoginHelper.ts +49 -12
  376. package/helpers/PathResolver.ts +22 -0
  377. package/helpers/Poll.ts +13 -1
  378. package/helpers/RegexHelper.ts +15 -3
  379. package/helpers/SubjectNavigator.ts +57 -0
  380. package/helpers/UserSimulationHelper.ts +14 -0
  381. package/helpers/index.ts +1 -0
  382. package/index.ts +1 -0
  383. package/interfaces/IComponentObjects.ts +12 -0
  384. package/interfaces/IComponentSchemaMeta.ts +17 -0
  385. package/interfaces/IProperty.ts +13 -0
  386. package/interfaces/IRegisteredSubjects.ts +12 -0
  387. package/interfaces/ISeedSubjectDraft.ts +17 -0
  388. package/interfaces/ISubject.ts +13 -0
  389. package/interfaces/ISubjectDetail.ts +12 -0
  390. package/mcp/ArtifactResolver.ts +296 -0
  391. package/mcp/index.ts +2 -0
  392. package/package.json +20 -8
  393. package/page-extensions/GlobalComponents.ts +30 -0
  394. package/page-extensions/GoToDeepLink.ts +9 -0
  395. package/page-extensions/LoginFeatures.ts +8 -0
  396. package/page-extensions/SubjectRegistry.ts +32 -0
  397. package/page-extensions/UserSimulation.ts +21 -0
  398. package/page-extensions/WaitEventHandler.ts +20 -0
  399. package/page-overrides/ClickOverride.ts +36 -55
  400. package/page-overrides/FillOverride.ts +59 -73
  401. package/promptCredentials.js +1 -1
  402. package/scripts/Testwise.template.json +1 -1
  403. package/scripts/diagram.js +2267 -0
  404. package/scripts/main.js +84 -63
  405. package/scripts/postinstall.js +55 -42
  406. package/scripts/setup.js +91 -37
  407. package/scripts/sync.js +767 -748
  408. package/services/ConfigBuilder.ts +24 -0
  409. package/services/IndiciumApi.service.ts +44 -6
  410. package/services/Logger.ts +40 -0
  411. package/templates/copilot-instructions.md +130 -0
  412. package/templates/mcp.json +9 -0
  413. package/templates/testwise-test-expert.agent.md +453 -0
  414. package/tests/tsconfig.json +12 -0
  415. package/tsconfig.json +6 -2
  416. package/types/Components.ts +17 -2
  417. package/types/LocatorType.ts +5 -0
  418. package/types/PollTypes.ts +8 -0
  419. package/types/Test.ts +18 -0
  420. package/types/Universal.ts +12 -0
  421. package/types/index.ts +2 -0
  422. package/dist/interfaces/IStoredTestResults.d.ts +0 -5
  423. package/dist/interfaces/IStoredTestResults.js +0 -2
  424. package/dist/interfaces/IStoredTestResults.js.map +0 -1
  425. package/dist/templates/test-artifacts/SubjectPageBase.d.ts +0 -5
  426. package/dist/templates/test-artifacts/SubjectPageBase.js +0 -6
  427. package/dist/templates/test-artifacts/SubjectPageBase.js.map +0 -1
  428. package/dist/templates/test-artifacts/screens/index.d.ts +0 -1
  429. package/dist/templates/test-artifacts/screens/index.js +0 -2
  430. package/dist/templates/test-artifacts/screens/index.js.map +0 -1
  431. package/dist/templates/test-artifacts/subjects/index.d.ts +0 -1
  432. package/dist/templates/test-artifacts/subjects/index.js +0 -2
  433. package/dist/templates/test-artifacts/subjects/index.js.map +0 -1
  434. 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,6 +1,17 @@
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
16
  private _objects: ExcelStyleFilterPopupObjects;
6
17
 
@@ -33,6 +44,26 @@ export class ExcelStyleFilterPopup {
33
44
  await this._objects.checkboxSelectAllButton(fieldTestId).click();
34
45
  }
35
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
+
36
67
  public async clickCheckboxItem(fieldTestId: string, value: string): Promise<void> {
37
68
  await this.waitForOpen();
38
69
 
@@ -51,11 +82,13 @@ export class ExcelStyleFilterPopup {
51
82
  return this._objects.toTimeInput(fieldTestId);
52
83
  }
53
84
 
54
- public setFromTime = async (fieldTestId: string, value: string): Promise<void> => this.fillAndEnter(fieldTestId, value);
85
+ public setFromTime = async (fieldTestId: string, value: string): Promise<void> =>
86
+ this.fillAndEnter(fieldTestId, value);
55
87
 
56
88
  public setToTime = async (fieldTestId: string, value: string): Promise<void> => this.fillAndEnter(fieldTestId, value);
57
89
 
58
- public setFromDate = async (fieldTestId: string, value: string): Promise<void> => this.fillAndEnter(fieldTestId, value);
90
+ public setFromDate = async (fieldTestId: string, value: string): Promise<void> =>
91
+ this.fillAndEnter(fieldTestId, value);
59
92
 
60
93
  public setToDate = async (fieldTestId: string, value: string): Promise<void> => this.fillAndEnter(fieldTestId, value);
61
94
 
@@ -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
 
@@ -4,6 +4,23 @@ import { escapeRegex } from '../../helpers/RegexHelper.js';
4
4
  import { ExcelStyleFilterPopup } from '../index.js';
5
5
  import { GridObjects } from './GridObjects.js';
6
6
 
7
+ /**
8
+ * Wraps a Thinkwise grid (list view) component. Provides row/cell navigation,
9
+ * filtering, sorting, and value-reading helpers.
10
+ *
11
+ * In generated subject classes, you interact with `Grid` indirectly through
12
+ * the typed `Components/` class (e.g. `EmployeeGridComponent`) which exposes
13
+ * named `IGridColumnControl` properties per column. Use `Grid` directly only
14
+ * for low-level operations not covered by the generated accessors.
15
+ *
16
+ * @example
17
+ * // Via generated subject (preferred):
18
+ * const names = await subject.grid.employeeNameColumn.getCellValues();
19
+ *
20
+ * // Via raw Grid helper:
21
+ * await subject.grid.clickRow(0);
22
+ * const count = await subject.grid.getRowCount();
23
+ */
7
24
  export class Grid {
8
25
  private _gridObjects: GridObjects;
9
26
  private _page: Page;
@@ -168,7 +185,7 @@ export class Grid {
168
185
  await this._excelStyleFilterPopup.waitForOpen();
169
186
 
170
187
  if (deselectAll) {
171
- await this._excelStyleFilterPopup.clickSelectAll(columnId);
188
+ await this._excelStyleFilterPopup.deselectAll(columnId);
172
189
  }
173
190
 
174
191
  await this._excelStyleFilterPopup.clickCheckboxItem(columnId, valueToSelect);
@@ -1,6 +1,12 @@
1
1
  import type { Locator } from '@playwright/test';
2
2
  import { MapsObjects } from './MapsObjects.js';
3
3
 
4
+ /**
5
+ * Wraps the Thinkwise maps component that displays geographical data on an
6
+ * interactive map.
7
+ *
8
+ * In generated subject classes this is exposed as a typed `maps` property.
9
+ */
4
10
  export class Maps {
5
11
  mapsObjects: MapsObjects;
6
12
 
@@ -1,6 +1,16 @@
1
1
  import type { Locator, Page } from '@playwright/test';
2
2
  import { ListBarMenuComponentObjects } from './ListBarMenuComponentObjects.js';
3
3
 
4
+ /**
5
+ * Wraps the Thinkwise list-bar hamburger menu used to navigate between
6
+ * subjects and module groups.
7
+ *
8
+ * Access via `page.components.listBarMenu` — no need to construct this yourself.
9
+ *
10
+ * @example
11
+ * // Navigate to the Employee subject via the menu:
12
+ * await page.components.listBarMenu.openListBarMenuItem('HR', 'Employee');
13
+ */
4
14
  export class ListBarMenuComponent {
5
15
  private _objects: ListBarMenuComponentObjects;
6
16
 
@@ -1,6 +1,12 @@
1
1
  import type { Locator } from '@playwright/test';
2
2
  import { PivotGridObjects } from './PivotGridObjects.js';
3
3
 
4
+ /**
5
+ * Wraps the Thinkwise pivot-grid component that presents data in a
6
+ * cross-tabulated matrix view for analysis.
7
+ *
8
+ * In generated subject classes this is exposed as a typed `pivotGrid` property.
9
+ */
4
10
  export class PivotGrid {
5
11
  pivotGridObjects: PivotGridObjects;
6
12
 
@@ -1,6 +1,13 @@
1
1
  import type { Locator } from '@playwright/test';
2
2
  import { PivotGridFieldListObjects } from './PivotGridFieldListObjects.js';
3
3
 
4
+ /**
5
+ * Wraps the Thinkwise pivot-grid field list panel that lets users drag
6
+ * dimensions and measures into rows, columns, and value areas of the pivot.
7
+ *
8
+ * In generated subject classes this is exposed alongside `PivotGrid` as a
9
+ * typed `pivotGridFieldList` property.
10
+ */
4
11
  export class PivotGridFieldList {
5
12
  pivotGridFieldListObjects: PivotGridFieldListObjects;
6
13
 
@@ -2,6 +2,18 @@ import type { Locator, Page } from '@playwright/test';
2
2
  import { pollUntil } from '../../helpers/Poll.js';
3
3
  import { AllRowsPopupObjects } from './AllRowsPopUpObjects.js';
4
4
 
5
+ /**
6
+ * Handles the "Apply to all rows or selected rows?" popup that Thinkwise
7
+ * shows for bulk operations (mass update, mass delete).
8
+ *
9
+ * @example
10
+ * // Select all rows and confirm:
11
+ * await subject.actionBar.clickDeleteAllRows();
12
+ * const popup = new AllRowsPopup(page);
13
+ * await popup.waitForOpen();
14
+ * await popup.allRowsRadioButton().click();
15
+ * await popup.confirmButton().click();
16
+ */
5
17
  export class AllRowsPopup {
6
18
  private readonly deletePopup: boolean;
7
19
  private _allRowsPopupObjects: AllRowsPopupObjects;
@@ -1,6 +1,17 @@
1
1
  import type { Locator, Page } from '@playwright/test';
2
2
  import { PopUpComponentObjects } from './PopUpComponentObjects.js';
3
3
 
4
+ /**
5
+ * Wraps the Thinkwise modal/popup dialog that appears for confirmations,
6
+ * warnings, and input prompts (e.g. "Are you sure?" dialogs, save conflicts).
7
+ *
8
+ * Access via `page.components.popUp` — no need to construct this yourself.
9
+ *
10
+ * @example
11
+ * // Confirm a delete prompt:
12
+ * await page.components.popUp.getActionButtonByText('Yes').click();
13
+ * const msg = await page.components.popUp.getContentText();
14
+ */
4
15
  export class PopUpComponent {
5
16
  private _objects: PopUpComponentObjects;
6
17
 
@@ -1,6 +1,15 @@
1
1
  import type { Locator } from '@playwright/test';
2
2
  import { PrefilterListObjects } from './PrefilterListObjects.js';
3
3
 
4
+ /**
5
+ * Wraps the Thinkwise prefilter-list panel that shows available prefilters
6
+ * for a subject. Enables selecting and activating prefilters in tests.
7
+ *
8
+ * In generated subject classes this is exposed as a typed `prefilterList` property.
9
+ *
10
+ * @example
11
+ * await subject.prefilterList.context.getByText('Active employees').click();
12
+ */
4
13
  export class PrefilterList {
5
14
  prefilterListObjects: PrefilterListObjects;
6
15
 
@@ -1,6 +1,12 @@
1
1
  import type { Locator } from '@playwright/test';
2
2
  import { PreviewObjects } from './PreviewObjects.js';
3
3
 
4
+ /**
5
+ * Wraps the Thinkwise preview component that shows a read-only rendered
6
+ * preview of a report or document within a subject screen.
7
+ *
8
+ * In generated subject classes this is exposed as a typed `preview` property.
9
+ */
4
10
  export class Preview {
5
11
  previewObjects: PreviewObjects;
6
12
 
@@ -1,6 +1,12 @@
1
1
  import type { Locator } from '@playwright/test';
2
2
  import { ReportBarObjects } from './ReportBarObjects.js';
3
3
 
4
+ /**
5
+ * Wraps the Thinkwise report-bar component that provides controls for
6
+ * selecting and generating reports tied to a subject.
7
+ *
8
+ * In generated subject classes this is exposed as a typed `reportBar` property.
9
+ */
4
10
  export class ReportBar {
5
11
  reportBarObjects: ReportBarObjects;
6
12
 
@@ -1,6 +1,12 @@
1
1
  import type { Locator } from '@playwright/test';
2
2
  import { ReportTilesObjects } from './ReportTilesObjects.js';
3
3
 
4
+ /**
5
+ * Wraps the Thinkwise report-tiles component that displays available reports
6
+ * as clickable tiles on a dashboard-style screen.
7
+ *
8
+ * In generated subject classes this is exposed as a typed `reportTiles` property.
9
+ */
4
10
  export class ReportTiles {
5
11
  reportTilesObjects: ReportTilesObjects;
6
12